diff --git a/Configs/hooks.js b/Configs/hooks.js index 42f6fdb..d4410c1 100644 --- a/Configs/hooks.js +++ b/Configs/hooks.js @@ -32,11 +32,11 @@ function generateToken(data) return sha256.update(data).digest("base64"); } -exports.validateClient = function (clientId, clientSecret, cb) +exports.validateClient = function (clientCredentials, req, cb) { // Call back with `true` to signal that the client is valid, and `false` otherwise. // Call back with an error if you encounter an internal server error situation while trying to validate. - Client.findOne({ client: clientId, secret: clientSecret }, function (err, client) { + Client.findOne({ client: clientCredentials.clientId, secret: clientCredentials.clientSecret }, function (err, client) { if(err){ cb(null, false); }else { @@ -49,25 +49,25 @@ exports.validateClient = function (clientId, clientSecret, cb) }); }; -exports.grantUserToken = function (username, password, cb) +exports.grantUserToken = function (allCredentials, req, cb) { - var query = User.where( 'username', new RegExp('^' + username + '$', 'i') ); + var query = User.where( 'username', new RegExp('^' + allCredentials.username + '$', 'i') ); query.findOne(function (err, user) { if (err) { cb(null, false); } else if (!user) { cb(null, false); - } else if (user.authenticate(password)) { + } else if (user.authenticate(allCredentials.password)) { // If the user authenticates, generate a token for them and store it to the database so // we can look it up later. - var token = generateToken(username + ":" + password); - var newToken = new Token({ username: username, token: token }); + var token = generateToken(allCredentials.username + ":" + allCredentials.password); + var newToken = new Token({ username: allCredentials.username, token: token }); newToken.save(); // Store the token in the Redis datastore so we can perform fast queries on it - redisClient.set(token, username); + redisClient.set(token, allCredentials.username); // Call back with the token so Restify-OAuth2 can pass it on to the client. return cb(null, token); @@ -77,7 +77,7 @@ exports.grantUserToken = function (username, password, cb) }); }; -exports.authenticateToken = function (token, cb) +exports.authenticateToken = function (token, req, cb) { // Query the Redis store for the Auth Token redisClient.get(token, function (err, reply) { diff --git a/README.md b/README.md index 35b2167..976a41d 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Installation - Install dependancies: `npm install` - Start redis: `redis-server` - Start MongoDB: `mongod` -- Insert a Client Key into the mongoDB wit the format: +- Insert a Client Key into the mongoDB with the format: ```JSON { diff --git a/node_modules/bcrypt/.travis.yml b/node_modules/bcrypt/.travis.yml index 895dbd3..0175d82 100644 --- a/node_modules/bcrypt/.travis.yml +++ b/node_modules/bcrypt/.travis.yml @@ -1,4 +1,5 @@ language: node_js node_js: - - 0.6 - - 0.8 + - "0.6" + - "0.8" + - "0.10" diff --git a/node_modules/bcrypt/CHANGELOG b/node_modules/bcrypt/CHANGELOG deleted file mode 100644 index 05a13c9..0000000 --- a/node_modules/bcrypt/CHANGELOG +++ /dev/null @@ -1,46 +0,0 @@ -v0.5.0 -* Fix for issue around empty string params throwing Errors. -* Method deprecation. -* Upgrade from libeio/ev to libuv. (shtylman) -** --- NOTE --- Breaks 0.4.x compatability -* EV_MULTIPLICITY compile flag. - -v0.4.1 -* Thread safety fix around OpenSSL (GH-32). (bnoordhuis - through node) -* C++ code changes using delete and new instead of malloc and free. (shtylman) -* Compile options for speed, zoom. (shtylman) -* Move much of the type and variable checking to the JS. (shtylman) - -v0.4.0 -* Added getRounds function that will tell you the number of rounds within a hash/salt - -v0.3.2 -* Fix api issue with async salt gen first param - -v0.3.1 -* Compile under node 0.5.x - -v0.3.0 -* Internal Refactoring -* Remove pthread dependencies and locking -* Fix compiler warnings and a memory bug - -v0.2.4 -* Use threadsafe functions instead of pthread mutexes -* salt validation to make sure the salt is of the correct size and format - -v0.2.3 -* cygwin support - -v0.2.2 -* Remove dependency on libbsd, use libssl instead - -v0.2.0 -* Added async functionality -* API changes - * hashpw -> encrypt - * all old sync methods now end with _sync -* Removed libbsd(arc4random) dependency...now uses openssl which is more widely spread - -v0.1.2 -* Security fix. Wasn't reading rounds in properly and was always only using 4 rounds diff --git a/node_modules/bcrypt/README.md b/node_modules/bcrypt/README.md index 4f09a38..306dee1 100644 --- a/node_modules/bcrypt/README.md +++ b/node_modules/bcrypt/README.md @@ -1,43 +1,35 @@ -node.bcrypt.js -============= +# node.bcrypt.js -[![Build Status](https://secure.travis-ci.org/ncb000gt/node.bcrypt.js.png)](http://travis-ci.org/#!/ncb000gt/node.bcrypt.js) +[![Build Status](https://secure.travis-ci.org/ncb000gt/node.bcrypt.js.svg)](http://travis-ci.org/#!/ncb000gt/node.bcrypt.js) Lib to help you hash passwords. [bcrypt on wikipedia][bcryptwiki] Catalyst for this module: [How To Safely Store A Password][codahale] -If You Are Submitting Bugs/Issues -============= +## If You Are Submitting Bugs/Issues -Because we can't magically know what you are doing to expose an issue, it is best if you provide a snippet of code. This snippet need not include your secret sauce, but it must replicate the issue you are describing. The issues that get closed without resolution tend to be the ones without code examples. Thanks. +First, make sure that the version of node you are using is a _stable_ version. You'll know this because it'll have an even major release number. We do not currently support unstable versions and while the module may happen to work on some unstable versions you'll find that we quickly close issues if you're not using a stable version. +If you are on a stable version of node, we can't magically know what you are doing to expose an issue, it is best if you provide a snippet of code or log files if you're having an install issue. This snippet need not include your secret sauce, but it must replicate the issue you are describing. The issues that get closed without resolution tend to be the ones that don't help us help you. Thanks. -Version Compatability -============= - - - - - - - - - - -
Node VerBcrypt Version
<= 0.4.x<= 0.4.x
>= 0.6.x>= 0.5.x
+## Version Compatibility -Windows users should make sure to have at least node 0.8.5 installed and version >= 0.7.1 of this module. -`node-gyp` only works with stable/released versions of node. Since the `bcrypt` module uses `node-gyp` to build and install you'll need a stable version of node to use bcrypt. If you do not you'll likely see an error that starts with: +| Node Version | Bcrypt Version | +| ---- | ---- | +| <= 0.4.x | <= 0.4.x | +| >= 0.6.x | >= 0.5.x | - gyp ERR! stack Error: "pre" versions of node cannot be installed, use the --nodedir flag instead +Windows users should make sure to have at least node 0.8.5 installed and version >= 0.7.1 of this module. +`node-gyp` only works with stable/released versions of node. Since the `bcrypt` module uses `node-gyp` to build and install you'll need a stable version of node to use bcrypt. If you do not you'll likely see an error that starts with: +``` +gyp ERR! stack Error: "pre" versions of node cannot be installed, use the --nodedir flag instead +``` -Security Issues/Concerns -============= +## Security Issues/Concerns As should be the case with any security tool, this library should be scrutinized by anyone using it. If you find or suspect an issue with the code- please bring it to my attention and I'll spend some time trying to make sure that this tool is as secure as possible. @@ -45,108 +37,90 @@ To make it easier for people using this tool to analyze what has been surveyed, * An [issue with passwords][jtr] was found with a version of the Blowfish algorithm developed for John the Ripper. This is not present in the OpenBSD version and is thus not a problem for this module. HT [zooko][zooko]. -Dependencies -============= +## Dependencies * NodeJS -* OpenSSL (Development Libraries (header files) for compilation) - * For Windows you'll need http://slproweb.com/products/Win32OpenSSL.html installed to the default location of `C:\OpenSSL-Win32` - * Please note that for this to build properly you'll need the Normal version of OpenSSL-Win, not the Light version. The reason for this is that we need to be able to compile the code using the header files that exist in the Normal version. - * For 64 bit use the 64 bit version and install to `C:\OpenSSL-Win64` * `node-gyp` * Please check the dependencies for this tool at: https://github.com/TooTallNate/node-gyp/ * Windows users will need the options for c# and c++ installed with their visual studio instance. * Python 2.x +* `OpenSSL` - This is only required to build the `bcrypt` project if you are using versions <= 0.7.7. Otherwise, we're using the builtin node crypto bindings for seed data (which use the same OpenSSL code paths we were, but don't have the external dependency). -From NPM -============ - - npm install bcrypt - - -From Source -============ - -Assuming you've already built node, you can compile the module with `node-gyp`: - - git clone git://github.com/ncb000gt/node.bcrypt.js.git - cd node.bcrypt.js - node-gyp configure - node-gyp build +## Install via NPM +``` +npm install bcrypt +``` +***Note:*** OS X users using Xcode 4.3.1 or above may need to run the following command in their terminal prior to installing if errors occur regarding xcodebuild: ```sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer``` -Note: if you do not have node-gyp installed, install it using: `npm install -g node-gyp` +## Usage -Usage - Sync -============ +### async (recommended) -To hash a password: +To hash a password: ```javascript var bcrypt = require('bcrypt'); -var salt = bcrypt.genSaltSync(10); -var hash = bcrypt.hashSync("B4c0/\/", salt); -// Store hash in your password DB. +bcrypt.genSalt(10, function(err, salt) { + bcrypt.hash("B4c0/\/", salt, function(err, hash) { + // Store hash in your password DB. + }); +}); ``` -To check a password: +To check a password: ```javascript // Load hash from your password DB. -bcrypt.compareSync("B4c0/\/", hash); // true -bcrypt.compareSync("not_bacon", hash); // false +bcrypt.compare("B4c0/\/", hash, function(err, res) { + // res == true +}); +bcrypt.compare("not_bacon", hash, function(err, res) { + // res == false +}); ``` Auto-gen a salt and hash: ```javascript -var hash = bcrypt.hashSync('bacon', 8); +bcrypt.hash('bacon', 8, function(err, hash) { +}); ``` -Usage - Async -============ -To hash a password: +### sync + +To hash a password: ```javascript var bcrypt = require('bcrypt'); -bcrypt.genSalt(10, function(err, salt) { - bcrypt.hash("B4c0/\/", salt, function(err, hash) { - // Store hash in your password DB. - }); -}); +var salt = bcrypt.genSaltSync(10); +var hash = bcrypt.hashSync("B4c0/\/", salt); +// Store hash in your password DB. ``` -To check a password: +To check a password: ```javascript // Load hash from your password DB. -bcrypt.compare("B4c0/\/", hash, function(err, res) { - // res == true -}); -bcrypt.compare("not_bacon", hash, function(err, res) { - // res = false -}); +bcrypt.compareSync("B4c0/\/", hash); // true +bcrypt.compareSync("not_bacon", hash); // false ``` Auto-gen a salt and hash: ```javascript -bcrypt.hash('bacon', 8, function(err, hash) { -}); +var hash = bcrypt.hashSync('bacon', 8); ``` -API -============ +## API `BCrypt.` - * `genSaltSync(rounds, seed_length)` - * `rounds` - [OPTIONAL] - the number of rounds to process the data for. (default - 10) - * `seed_length` - [OPTIONAL] - RAND_bytes wants a length. to make that a bit flexible, you can specify a seed_length. (default - 20) - * `genSalt(rounds, seed_length, cb)` - * `rounds` - [OPTIONAL] - the number of rounds to process the data for. (default - 10) - * `seed_length` - [OPTIONAL] - RAND_bytes wants a length. to make that a bit flexible, you can specify a seed_length. (default - 20) + * `genSaltSync(rounds)` + * `rounds` - [OPTIONAL] - the cost of processing the data. (default - 10) + * `genSalt(rounds, cb)` + * `rounds` - [OPTIONAL] - the cost of processing the data. (default - 10) * `cb` - [REQUIRED] - a callback to be fired once the salt has been generated. uses eio making it asynchronous. * `err` - First parameter to the callback detailing any errors. * `salt` - Second parameter to the callback providing the generated salt. @@ -171,22 +145,32 @@ API * `getRounds(encrypted)` - return the number of rounds used to encrypt a given hash * `encrypted` - [REQUIRED] - hash from which the number of rounds used should be extracted. +## A Note on Rounds + +A note about the cost. When you are hashing your data the module will go through a series of rounds to give you a secure hash. The value you submit there is not just the number of rounds that the module will go through to hash your data. The module will use the value you enter and go through `2^rounds` iterations of processing. + +From @garthk, on a 2GHz core you can roughly expect: -Hash Info -============ + rounds=10: ~10 hashes/sec + rounds=13: ~1 sec/hash + rounds=25: ~1 hour/hash + rounds=31: 2-3 days/hash + + +## Hash Info The characters that comprise the resultant hash are `./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$`. -Testing -============ +## Testing If you create a pull request, tests better pass :) - npm install - npm test +``` +npm install +npm test +``` -Credits -============ +## Credits The code for this comes from a few sources: @@ -195,8 +179,7 @@ The code for this comes from a few sources: * bcrypt::gen_salt - [gen_salt inclusion to bcrypt][bcryptgs] * bcrypt_node.cc - me -Contributors -============ +## Contributors * [Antonio Salazar Cardozo][shadowfiend] - Early MacOS X support (when we used libbsd) * [Ben Glow][pixelglow] - Fixes for thread safety with async calls @@ -213,14 +196,10 @@ Contributors * [Sean McArthur][seanmonstar] - Windows Support * [Fanie Oosthuysen][weareu] - Windows Support -License -============ - +## License Unless stated elsewhere, file headers or otherwise, the license as stated in the LICENSE file. - - -[bcryptwiki]: http://en.wikipedia.org/wiki/Bcrypt +[bcryptwiki]: http://en.wikipedia.org/wiki/Bcrypt [bcryptgs]: http://mail-index.netbsd.org/tech-crypto/2002/05/24/msg000204.html [codahale]: http://codahale.com/how-to-safely-store-a-password/ [gh13]: https://github.com/ncb000gt/node.bcrypt.js/issues/13 diff --git a/node_modules/bcrypt/bcrypt.js b/node_modules/bcrypt/bcrypt.js index 199bc07..3a61244 100644 --- a/node_modules/bcrypt/bcrypt.js +++ b/node_modules/bcrypt/bcrypt.js @@ -1,16 +1,12 @@ +'use strict'; + var bindings = require('bindings')('bcrypt_lib'); +var crypto = require('crypto'); /// generate a salt (sync) /// @param {Number} [rounds] number of rounds (default 10) -/// @param {Number} [seed_length] number of random bytes (default 20) /// @return {String} salt -module.exports.gen_salt_sync = function(rounds, seed_length) { - console.log("DEPRECATION WARNING: `gen_salt_sync` has been deprecated. Please use `genSaltSync` instead."); - - return module.exports.genSaltSync(rounds, seed_length); -} - -module.exports.genSaltSync = function(rounds, seed_length) { +module.exports.genSaltSync = function(rounds) { // default 10 rounds if (!rounds) { rounds = 10; @@ -18,80 +14,53 @@ module.exports.genSaltSync = function(rounds, seed_length) { throw new Error('rounds must be a number'); } - // default length 20 - if (!seed_length) { - seed_length = 20; - } else if (typeof seed_length !== 'number') { - throw new Error('seed_length must be a number'); - } - - return bindings.gen_salt_sync(rounds, seed_length); + return bindings.gen_salt_sync(rounds, crypto.randomBytes(16)); }; /// generate a salt /// @param {Number} [rounds] number of rounds (default 10) -/// @param {Number} [seed_length] number of random bytes (default 20) /// @param {Function} cb callback(err, salt) -module.exports.gen_salt = function(rounds, seed_length, cb) { - console.log("DEPRECATION WARNING: `gen_salt` has been deprecated. Please use `genSalt` instead."); - - return module.exports.genSalt(rounds, seed_length, cb); -} - -module.exports.genSalt = function(rounds, seed_length, cb) { +module.exports.genSalt = function(rounds, ignore, cb) { // if callback is first argument, then use defaults for others if (typeof arguments[0] === 'function') { // have to set callback first otherwise arguments are overriden cb = arguments[0]; rounds = 10; - seed_length = 20; // callback is second argument } else if (typeof arguments[1] === 'function') { // have to set callback first otherwise arguments are overriden cb = arguments[1]; - seed_length = 20; } // default 10 rounds if (!rounds) { rounds = 10; } else if (typeof rounds !== 'number') { - throw new Error('rounds must be a number'); - } - - // default length 20 - if (!seed_length) { - seed_length = 20; - } else if (typeof seed_length !== 'number') { - throw new Error('seed_length must be a number'); + return cb(new Error('rounds must be a number')); } if (!cb) { - throw new Error('callback required for gen_salt'); + return; } - return bindings.gen_salt(rounds, seed_length, cb); + return bindings.gen_salt(rounds, crypto.randomBytes(16), cb); }; /// hash data using a salt /// @param {String} data the data to encrypt /// @param {String} salt the salt to use when hashing /// @return {String} hash -module.exports.encrypt_sync = function(data, salt) { - console.log("DEPRECATION WARNING: `encrypt_sync` has been deprecated. Please use `hashSync` instead."); - - return module.exports.hashSync(data, salt); -} - module.exports.hashSync = function(data, salt) { - if (data == null || data == undefined || salt == null || salt == undefined) { + if (data == null || salt == null) { throw new Error('data and salt arguments required'); - } else if (typeof data !== 'string' && (typeof salt !== 'string' || typeof salt !== 'number')) { + } + + if (typeof data !== 'string' || (typeof salt !== 'string' && typeof salt !== 'number')) { throw new Error('data must be a string and salt must either be a salt string or a number of rounds'); } if (typeof salt === 'number') { - salt = module.exports.genSaltSync(salt); + salt = module.exports.genSaltSync(salt); } return bindings.encrypt_sync(data, salt); @@ -101,29 +70,31 @@ module.exports.hashSync = function(data, salt) { /// @param {String} data the data to encrypt /// @param {String} salt the salt to use when hashing /// @param {Function} cb callback(err, hash) -module.exports.encrypt = function(data, salt, cb) { - console.log("DEPRECATION WARNING: `encrypt` has been deprecated. Please use `hash` instead."); +module.exports.hash = function(data, salt, cb) { + if (typeof data === 'function') { + return data(new Error('data must be a string and salt must either be a salt string or a number of rounds')); + } - return module.exports.hash(data, salt, cb); -} + if (typeof salt === 'function') { + return salt(new Error('data must be a string and salt must either be a salt string or a number of rounds')); + } -module.exports.hash = function(data, salt, cb) { - if (data == null || data == undefined || salt == null || salt == undefined) { - throw new Error('data and salt arguments required'); - } else if (typeof data !== 'string' && (typeof salt !== 'string' || typeof salt !== 'number')) { - throw new Error('data must be a string and salt must either be a salt string or a number of rounds'); + if (data == null || salt == null) { + return cb(new Error('data and salt arguments required')); } - if (!cb) { - throw new Error('callback required for async compare'); - } else if (typeof cb !== 'function') { - throw new Error('callback must be a function'); + if (typeof data !== 'string' || (typeof salt !== 'string' && typeof salt !== 'number')) { + return cb(new Error('data must be a string and salt must either be a salt string or a number of rounds')); + } + + if (!cb || typeof cb !== 'function') { + return; } if (typeof salt === 'number') { - return module.exports.genSalt(salt, function(err, salt) { - return bindings.encrypt(data, salt, cb); - }); + return module.exports.genSalt(salt, function(err, salt) { + return bindings.encrypt(data, salt, cb); + }); } return bindings.encrypt(data, salt, cb); @@ -133,16 +104,12 @@ module.exports.hash = function(data, salt, cb) { /// @param {String} data the data to hash and compare /// @param {String} hash expected hash /// @return {bool} true if hashed data matches hash -module.exports.compare_sync = function(data, hash) { - console.log("DEPRECATION WARNING: `compare_sync` has been deprecated. Please use `compareSync` instead."); - - return module.exports.compareSync(data, hash); -} - module.exports.compareSync = function(data, hash) { - if (data == null || data == undefined || hash == null || hash == undefined) { + if (data == null || hash == null) { throw new Error('data and hash arguments required'); - } else if (typeof data !== 'string' || typeof hash !== 'string') { + } + + if (typeof data !== 'string' || typeof hash !== 'string') { throw new Error('data and hash must be strings'); } @@ -154,16 +121,16 @@ module.exports.compareSync = function(data, hash) { /// @param {String} hash expected hash /// @param {Function} cb callback(err, matched) - matched is true if hashed data matches hash module.exports.compare = function(data, hash, cb) { - if (data == null || data == undefined || hash == null || hash == undefined) { - throw new Error('data and hash arguments required'); - } else if (typeof data !== 'string' || typeof hash !== 'string') { - throw new Error('data and hash must be strings'); + if (data == null || hash == null) { + return cb(new Error('data and hash arguments required')); } - if (!cb) { - throw new Error('callback required for async compare'); - } else if (typeof cb !== 'function') { - throw new Error('callback must be a function'); + if (typeof data !== 'string' || typeof hash !== 'string') { + return cb(new Error('data and hash must be strings')); + } + + if (!cb || typeof cb !== 'function') { + return; } return bindings.compare(data, hash, cb); @@ -171,19 +138,14 @@ module.exports.compare = function(data, hash, cb) { /// @param {String} hash extract rounds from this hash /// @return {Number} the number of rounds used to encrypt a given hash -module.exports.get_rounds = function(hash) { - console.log("DEPRECATION WARNING: `get_rounds` has been deprecated. Please use `getRounds` instead."); - - return module.exports.getRounds(hash); -} - module.exports.getRounds = function(hash) { - if (hash == null || hash == undefined) { + if (hash == null) { throw new Error('hash argument required'); - } else if (typeof hash !== 'string') { + } + + if (typeof hash !== 'string') { throw new Error('hash must be a string'); } return bindings.get_rounds(hash); }; - diff --git a/node_modules/bcrypt/binding.gyp b/node_modules/bcrypt/binding.gyp index beae424..b8b723e 100644 --- a/node_modules/bcrypt/binding.gyp +++ b/node_modules/bcrypt/binding.gyp @@ -7,34 +7,14 @@ 'src/bcrypt.cc', 'src/bcrypt_node.cc' ], + 'include_dirs' : [ + ">sys.stderr, line - return libtoolout.returncode - - def ExecPackageFramework(self, framework, version): - """Takes a path to Something.framework and the Current version of that and - sets up all the symlinks.""" - # Find the name of the binary based on the part before the ".framework". - binary = os.path.basename(framework).split('.')[0] - - CURRENT = 'Current' - RESOURCES = 'Resources' - VERSIONS = 'Versions' - - if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): - # Binary-less frameworks don't seem to contain symlinks (see e.g. - # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). - return - - # Move into the framework directory to set the symlinks correctly. - pwd = os.getcwd() - os.chdir(framework) - - # Set up the Current version. - self._Relink(version, os.path.join(VERSIONS, CURRENT)) - - # Set up the root symlinks. - self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) - self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) - - # Back to where we were before! - os.chdir(pwd) - - def _Relink(self, dest, link): - """Creates a symlink to |dest| named |link|. If |link| already exists, - it is overwritten.""" - if os.path.lexists(link): - os.remove(link) - os.symlink(dest, link) - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/node_modules/bcrypt/node_modules/bindings/package.json b/node_modules/bcrypt/node_modules/bindings/package.json index a72cad0..c41fca4 100644 --- a/node_modules/bcrypt/node_modules/bindings/package.json +++ b/node_modules/bcrypt/node_modules/bindings/package.json @@ -27,9 +27,5 @@ "url": "https://github.com/TooTallNate/node-bindings/issues" }, "_id": "bindings@1.0.0", - "dist": { - "shasum": "c3ccde60e9de6807c6f1aa4ef4843af29191c828" - }, - "_from": "bindings@1.0.0", - "_resolved": "https://registry.npmjs.org/bindings/-/bindings-1.0.0.tgz" + "_from": "bindings@1.0.0" } diff --git a/node_modules/bcrypt/package.json b/node_modules/bcrypt/package.json index b76314f..a508ae0 100644 --- a/node_modules/bcrypt/package.json +++ b/node_modules/bcrypt/package.json @@ -11,17 +11,17 @@ "crypto" ], "main": "./bcrypt", - "version": "0.7.5", + "version": "0.8.0", "author": { "name": "Nick Campbell", - "url": "http://github.com/ncb000gt" + "url": "https://github.com/ncb000gt" }, "engines": { "node": ">= 0.6.0" }, "repository": { "type": "git", - "url": "http://github.com/ncb000gt/node.bcrypt.js.git" + "url": "https://github.com/ncb000gt/node.bcrypt.js.git" }, "licenses": [ { @@ -29,14 +29,15 @@ } ], "bugs": { - "url": "http://github.com/ncb000gt/node.bcrypt.js/issues" + "url": "https://github.com/ncb000gt/node.bcrypt.js/issues" }, "scripts": { "test": "node-gyp configure build && nodeunit test", "install": "node-gyp rebuild" }, "dependencies": { - "bindings": "1.0.0" + "bindings": "1.0.0", + "nan": "1.3.0" }, "devDependencies": { "nodeunit": ">=0.6.4" @@ -112,12 +113,12 @@ } ], "gypfile": true, - "readme": "node.bcrypt.js\n=============\n\n[![Build Status](https://secure.travis-ci.org/ncb000gt/node.bcrypt.js.png)](http://travis-ci.org/#!/ncb000gt/node.bcrypt.js) \n\nLib to help you hash passwords.\n[bcrypt on wikipedia][bcryptwiki]\n\nCatalyst for this module: [How To Safely Store A Password][codahale]\n\nIf You Are Submitting Bugs/Issues\n=============\n\nBecause we can't magically know what you are doing to expose an issue, it is best if you provide a snippet of code. This snippet need not include your secret sauce, but it must replicate the issue you are describing. The issues that get closed without resolution tend to be the ones without code examples. Thanks.\n\n\nVersion Compatability\n=============\n\n\n\n\n\n\n\n\n\n\n\n
Node VerBcrypt Version
<= 0.4.x<= 0.4.x
>= 0.6.x>= 0.5.x
\n\nWindows users should make sure to have at least node 0.8.5 installed and version >= 0.7.1 of this module. \n`node-gyp` only works with stable/released versions of node. Since the `bcrypt` module uses `node-gyp` to build and install you'll need a stable version of node to use bcrypt. If you do not you'll likely see an error that starts with:\n\n gyp ERR! stack Error: \"pre\" versions of node cannot be installed, use the --nodedir flag instead\n\n\n\nSecurity Issues/Concerns\n=============\n\nAs should be the case with any security tool, this library should be scrutinized by anyone using it. If you find or suspect an issue with the code- please bring it to my attention and I'll spend some time trying to make sure that this tool is as secure as possible.\n\nTo make it easier for people using this tool to analyze what has been surveyed, here is a list of BCrypt related security issues/concerns as they've come up.\n\n* An [issue with passwords][jtr] was found with a version of the Blowfish algorithm developed for John the Ripper. This is not present in the OpenBSD version and is thus not a problem for this module. HT [zooko][zooko].\n\nDependencies\n=============\n\n* NodeJS\n* OpenSSL (Development Libraries (header files) for compilation)\n * For Windows you'll need http://slproweb.com/products/Win32OpenSSL.html installed to the default location of `C:\\OpenSSL-Win32`\n * Please note that for this to build properly you'll need the Normal version of OpenSSL-Win, not the Light version. The reason for this is that we need to be able to compile the code using the header files that exist in the Normal version.\n * For 64 bit use the 64 bit version and install to `C:\\OpenSSL-Win64`\n* `node-gyp`\n * Please check the dependencies for this tool at: https://github.com/TooTallNate/node-gyp/\n * Windows users will need the options for c# and c++ installed with their visual studio instance.\n * Python 2.x\n\nFrom NPM\n============\n\n npm install bcrypt\n\n\nFrom Source\n============\n\nAssuming you've already built node, you can compile the module with `node-gyp`:\n\n git clone git://github.com/ncb000gt/node.bcrypt.js.git\n cd node.bcrypt.js\n node-gyp configure\n node-gyp build\n\n\nNote: if you do not have node-gyp installed, install it using: `npm install -g node-gyp`\n\nUsage - Sync\n============\n\nTo hash a password: \n\n```javascript\nvar bcrypt = require('bcrypt');\nvar salt = bcrypt.genSaltSync(10);\nvar hash = bcrypt.hashSync(\"B4c0/\\/\", salt);\n// Store hash in your password DB.\n```\n\nTo check a password: \n\n```javascript\n// Load hash from your password DB.\nbcrypt.compareSync(\"B4c0/\\/\", hash); // true\nbcrypt.compareSync(\"not_bacon\", hash); // false\n```\n\nAuto-gen a salt and hash:\n\n```javascript\nvar hash = bcrypt.hashSync('bacon', 8);\n```\n\nUsage - Async\n============\n\nTo hash a password: \n\n```javascript\nvar bcrypt = require('bcrypt');\nbcrypt.genSalt(10, function(err, salt) {\n bcrypt.hash(\"B4c0/\\/\", salt, function(err, hash) {\n // Store hash in your password DB.\n });\n});\n```\n\nTo check a password: \n\n```javascript\n// Load hash from your password DB.\nbcrypt.compare(\"B4c0/\\/\", hash, function(err, res) {\n // res == true\n});\nbcrypt.compare(\"not_bacon\", hash, function(err, res) {\n // res = false\n});\n```\n\nAuto-gen a salt and hash:\n\n```javascript\nbcrypt.hash('bacon', 8, function(err, hash) {\n});\n```\n\nAPI\n============\n\n`BCrypt.`\n\n * `genSaltSync(rounds, seed_length)`\n * `rounds` - [OPTIONAL] - the number of rounds to process the data for. (default - 10)\n * `seed_length` - [OPTIONAL] - RAND_bytes wants a length. to make that a bit flexible, you can specify a seed_length. (default - 20)\n * `genSalt(rounds, seed_length, cb)`\n * `rounds` - [OPTIONAL] - the number of rounds to process the data for. (default - 10)\n * `seed_length` - [OPTIONAL] - RAND_bytes wants a length. to make that a bit flexible, you can specify a seed_length. (default - 20)\n * `cb` - [REQUIRED] - a callback to be fired once the salt has been generated. uses eio making it asynchronous.\n * `err` - First parameter to the callback detailing any errors.\n * `salt` - Second parameter to the callback providing the generated salt.\n * `hashSync(data, salt)`\n * `data` - [REQUIRED] - the data to be encrypted.\n * `salt` - [REQUIRED] - the salt to be used in encryption.\n * `hash(data, salt, cb)`\n * `data` - [REQUIRED] - the data to be encrypted.\n * `salt` - [REQUIRED] - the salt to be used to hash the password. if specified as a number then a salt will be generated and used (see examples).\n * `cb` - [REQUIRED] - a callback to be fired once the data has been encrypted. uses eio making it asynchronous.\n * `err` - First parameter to the callback detailing any errors.\n * `encrypted` - Second parameter to the callback providing the encrypted form.\n * `compareSync(data, encrypted)`\n * `data` - [REQUIRED] - data to compare.\n * `encrypted` - [REQUIRED] - data to be compared to.\n * `compare(data, encrypted, cb)`\n * `data` - [REQUIRED] - data to compare.\n * `encrypted` - [REQUIRED] - data to be compared to.\n * `cb` - [REQUIRED] - a callback to be fired once the data has been compared. uses eio making it asynchronous.\n * `err` - First parameter to the callback detailing any errors.\n * `same` - Second parameter to the callback providing whether the data and encrypted forms match [true | false].\n * `getRounds(encrypted)` - return the number of rounds used to encrypt a given hash\n * `encrypted` - [REQUIRED] - hash from which the number of rounds used should be extracted.\n\n\nHash Info\n============\n\nThe characters that comprise the resultant hash are `./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$`.\n\nTesting\n============\n\nIf you create a pull request, tests better pass :)\n\n npm install\n npm test\n\nCredits\n============\n\nThe code for this comes from a few sources:\n\n* blowfish.cc - OpenBSD\n* bcrypt.cc - OpenBSD\n* bcrypt::gen_salt - [gen_salt inclusion to bcrypt][bcryptgs]\n* bcrypt_node.cc - me\n\nContributors\n============\n\n* [Antonio Salazar Cardozo][shadowfiend] - Early MacOS X support (when we used libbsd)\n* [Ben Glow][pixelglow] - Fixes for thread safety with async calls\n* [Van Nguyen][thegoleffect] - Found a timing attack in the comparator\n* [NewITFarmer][newitfarmer] - Initial Cygwin support\n* [David Trejo][dtrejo] - packaging fixes\n* [Alfred Westerveld][alfredwesterveld] - packaging fixes\n* [Vincent Côté-Roy][vincentr] - Testing around concurrency issues\n* [Lloyd Hilaiel][lloyd] - Documentation fixes\n* [Roman Shtylman][shtylman] - Code refactoring, general rot reduction, compile options, better memory management with delete and new, and an upgrade to libuv over eio/ev.\n* [Vadim Graboys][vadimg] - Code changes to support 0.5.5+\n* [Ben Noordhuis][bnoordhuis] - Fixed a thread safety issue in nodejs that was perfectly mappable to this module.\n* [Nate Rajlich][tootallnate] - Bindings and build process.\n* [Sean McArthur][seanmonstar] - Windows Support\n* [Fanie Oosthuysen][weareu] - Windows Support\n\nLicense\n============\n\nUnless stated elsewhere, file headers or otherwise, the license as stated in the LICENSE file.\n\n\n\n[bcryptwiki]: http://en.wikipedia.org/wiki/Bcrypt \n[bcryptgs]: http://mail-index.netbsd.org/tech-crypto/2002/05/24/msg000204.html\n[codahale]: http://codahale.com/how-to-safely-store-a-password/\n[gh13]: https://github.com/ncb000gt/node.bcrypt.js/issues/13\n[jtr]: http://www.openwall.com/lists/oss-security/2011/06/20/2\n\n[shadowfiend]:https://github.com/Shadowfiend\n[thegoleffect]:https://github.com/thegoleffect\n[pixelglow]:https://github.com/pixelglow\n[dtrejo]:https://github.com/dtrejo\n[alfredwesterveld]:https://github.com/alfredwesterveld\n[newitfarmer]:https://github.com/newitfarmer\n[zooko]:https://twitter.com/zooko\n[vincentr]:https://twitter.com/vincentcr\n[lloyd]:https://github.com/lloyd\n[shtylman]:https://github.com/shtylman\n[vadimg]:https://github.com/vadimg\n[bnoordhuis]:https://github.com/bnoordhuis\n[tootallnate]:https://github.com/tootallnate\n[seanmonstar]:https://github.com/seanmonstar\n[weareu]:https://github.com/weareu\n", + "readme": "# node.bcrypt.js\n\n[![Build Status](https://secure.travis-ci.org/ncb000gt/node.bcrypt.js.svg)](http://travis-ci.org/#!/ncb000gt/node.bcrypt.js)\n\nLib to help you hash passwords.\n[bcrypt on wikipedia][bcryptwiki]\n\nCatalyst for this module: [How To Safely Store A Password][codahale]\n\n## If You Are Submitting Bugs/Issues\n\nFirst, make sure that the version of node you are using is a _stable_ version. You'll know this because it'll have an even major release number. We do not currently support unstable versions and while the module may happen to work on some unstable versions you'll find that we quickly close issues if you're not using a stable version.\n\nIf you are on a stable version of node, we can't magically know what you are doing to expose an issue, it is best if you provide a snippet of code or log files if you're having an install issue. This snippet need not include your secret sauce, but it must replicate the issue you are describing. The issues that get closed without resolution tend to be the ones that don't help us help you. Thanks.\n\n\n## Version Compatibility\n\n| Node Version | Bcrypt Version |\n| ---- | ---- |\n| <= 0.4.x | <= 0.4.x |\n| >= 0.6.x | >= 0.5.x |\n\nWindows users should make sure to have at least node 0.8.5 installed and version >= 0.7.1 of this module.\n\n`node-gyp` only works with stable/released versions of node. Since the `bcrypt` module uses `node-gyp` to build and install you'll need a stable version of node to use bcrypt. If you do not you'll likely see an error that starts with:\n\n```\ngyp ERR! stack Error: \"pre\" versions of node cannot be installed, use the --nodedir flag instead\n```\n\n## Security Issues/Concerns\n\nAs should be the case with any security tool, this library should be scrutinized by anyone using it. If you find or suspect an issue with the code- please bring it to my attention and I'll spend some time trying to make sure that this tool is as secure as possible.\n\nTo make it easier for people using this tool to analyze what has been surveyed, here is a list of BCrypt related security issues/concerns as they've come up.\n\n* An [issue with passwords][jtr] was found with a version of the Blowfish algorithm developed for John the Ripper. This is not present in the OpenBSD version and is thus not a problem for this module. HT [zooko][zooko].\n\n## Dependencies\n\n* NodeJS\n* `node-gyp`\n * Please check the dependencies for this tool at: https://github.com/TooTallNate/node-gyp/\n * Windows users will need the options for c# and c++ installed with their visual studio instance.\n * Python 2.x\n* `OpenSSL` - This is only required to build the `bcrypt` project if you are using versions <= 0.7.7. Otherwise, we're using the builtin node crypto bindings for seed data (which use the same OpenSSL code paths we were, but don't have the external dependency).\n\n## Install via NPM\n```\nnpm install bcrypt\n```\n\n***Note:*** OS X users using Xcode 4.3.1 or above may need to run the following command in their terminal prior to installing if errors occur regarding xcodebuild: ```sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer```\n\n## Usage\n\n### async (recommended)\n\nTo hash a password:\n\n```javascript\nvar bcrypt = require('bcrypt');\nbcrypt.genSalt(10, function(err, salt) {\n bcrypt.hash(\"B4c0/\\/\", salt, function(err, hash) {\n // Store hash in your password DB.\n });\n});\n```\n\nTo check a password:\n\n```javascript\n// Load hash from your password DB.\nbcrypt.compare(\"B4c0/\\/\", hash, function(err, res) {\n // res == true\n});\nbcrypt.compare(\"not_bacon\", hash, function(err, res) {\n // res == false\n});\n```\n\nAuto-gen a salt and hash:\n\n```javascript\nbcrypt.hash('bacon', 8, function(err, hash) {\n});\n```\n\n\n### sync\n\nTo hash a password:\n\n```javascript\nvar bcrypt = require('bcrypt');\nvar salt = bcrypt.genSaltSync(10);\nvar hash = bcrypt.hashSync(\"B4c0/\\/\", salt);\n// Store hash in your password DB.\n```\n\nTo check a password:\n\n```javascript\n// Load hash from your password DB.\nbcrypt.compareSync(\"B4c0/\\/\", hash); // true\nbcrypt.compareSync(\"not_bacon\", hash); // false\n```\n\nAuto-gen a salt and hash:\n\n```javascript\nvar hash = bcrypt.hashSync('bacon', 8);\n```\n\n## API\n\n`BCrypt.`\n\n * `genSaltSync(rounds)`\n * `rounds` - [OPTIONAL] - the cost of processing the data. (default - 10)\n * `genSalt(rounds, cb)`\n * `rounds` - [OPTIONAL] - the cost of processing the data. (default - 10)\n * `cb` - [REQUIRED] - a callback to be fired once the salt has been generated. uses eio making it asynchronous.\n * `err` - First parameter to the callback detailing any errors.\n * `salt` - Second parameter to the callback providing the generated salt.\n * `hashSync(data, salt)`\n * `data` - [REQUIRED] - the data to be encrypted.\n * `salt` - [REQUIRED] - the salt to be used in encryption.\n * `hash(data, salt, cb)`\n * `data` - [REQUIRED] - the data to be encrypted.\n * `salt` - [REQUIRED] - the salt to be used to hash the password. if specified as a number then a salt will be generated and used (see examples).\n * `cb` - [REQUIRED] - a callback to be fired once the data has been encrypted. uses eio making it asynchronous.\n * `err` - First parameter to the callback detailing any errors.\n * `encrypted` - Second parameter to the callback providing the encrypted form.\n * `compareSync(data, encrypted)`\n * `data` - [REQUIRED] - data to compare.\n * `encrypted` - [REQUIRED] - data to be compared to.\n * `compare(data, encrypted, cb)`\n * `data` - [REQUIRED] - data to compare.\n * `encrypted` - [REQUIRED] - data to be compared to.\n * `cb` - [REQUIRED] - a callback to be fired once the data has been compared. uses eio making it asynchronous.\n * `err` - First parameter to the callback detailing any errors.\n * `same` - Second parameter to the callback providing whether the data and encrypted forms match [true | false].\n * `getRounds(encrypted)` - return the number of rounds used to encrypt a given hash\n * `encrypted` - [REQUIRED] - hash from which the number of rounds used should be extracted.\n\n## A Note on Rounds\n\nA note about the cost. When you are hashing your data the module will go through a series of rounds to give you a secure hash. The value you submit there is not just the number of rounds that the module will go through to hash your data. The module will use the value you enter and go through `2^rounds` iterations of processing.\n\nFrom @garthk, on a 2GHz core you can roughly expect:\n\n rounds=10: ~10 hashes/sec\n rounds=13: ~1 sec/hash\n rounds=25: ~1 hour/hash\n rounds=31: 2-3 days/hash\n\n\n## Hash Info\n\nThe characters that comprise the resultant hash are `./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789$`.\n\n## Testing\n\nIf you create a pull request, tests better pass :)\n\n```\nnpm install\nnpm test\n```\n\n## Credits\n\nThe code for this comes from a few sources:\n\n* blowfish.cc - OpenBSD\n* bcrypt.cc - OpenBSD\n* bcrypt::gen_salt - [gen_salt inclusion to bcrypt][bcryptgs]\n* bcrypt_node.cc - me\n\n## Contributors\n\n* [Antonio Salazar Cardozo][shadowfiend] - Early MacOS X support (when we used libbsd)\n* [Ben Glow][pixelglow] - Fixes for thread safety with async calls\n* [Van Nguyen][thegoleffect] - Found a timing attack in the comparator\n* [NewITFarmer][newitfarmer] - Initial Cygwin support\n* [David Trejo][dtrejo] - packaging fixes\n* [Alfred Westerveld][alfredwesterveld] - packaging fixes\n* [Vincent Côté-Roy][vincentr] - Testing around concurrency issues\n* [Lloyd Hilaiel][lloyd] - Documentation fixes\n* [Roman Shtylman][shtylman] - Code refactoring, general rot reduction, compile options, better memory management with delete and new, and an upgrade to libuv over eio/ev.\n* [Vadim Graboys][vadimg] - Code changes to support 0.5.5+\n* [Ben Noordhuis][bnoordhuis] - Fixed a thread safety issue in nodejs that was perfectly mappable to this module.\n* [Nate Rajlich][tootallnate] - Bindings and build process.\n* [Sean McArthur][seanmonstar] - Windows Support\n* [Fanie Oosthuysen][weareu] - Windows Support\n\n## License\nUnless stated elsewhere, file headers or otherwise, the license as stated in the LICENSE file.\n\n[bcryptwiki]: http://en.wikipedia.org/wiki/Bcrypt\n[bcryptgs]: http://mail-index.netbsd.org/tech-crypto/2002/05/24/msg000204.html\n[codahale]: http://codahale.com/how-to-safely-store-a-password/\n[gh13]: https://github.com/ncb000gt/node.bcrypt.js/issues/13\n[jtr]: http://www.openwall.com/lists/oss-security/2011/06/20/2\n\n[shadowfiend]:https://github.com/Shadowfiend\n[thegoleffect]:https://github.com/thegoleffect\n[pixelglow]:https://github.com/pixelglow\n[dtrejo]:https://github.com/dtrejo\n[alfredwesterveld]:https://github.com/alfredwesterveld\n[newitfarmer]:https://github.com/newitfarmer\n[zooko]:https://twitter.com/zooko\n[vincentr]:https://twitter.com/vincentcr\n[lloyd]:https://github.com/lloyd\n[shtylman]:https://github.com/shtylman\n[vadimg]:https://github.com/vadimg\n[bnoordhuis]:https://github.com/bnoordhuis\n[tootallnate]:https://github.com/tootallnate\n[seanmonstar]:https://github.com/seanmonstar\n[weareu]:https://github.com/weareu\n", "readmeFilename": "README.md", - "_id": "bcrypt@0.7.5", + "_id": "bcrypt@0.8.0", + "_from": "bcrypt@0.8.0", "dist": { - "shasum": "7285246bcaa9e84972a66a23a1eb09d2190ac13e" + "shasum": "c5d7baa48d493ca11a227608affd20093a50802e" }, - "_from": "bcrypt@", - "_resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-0.7.5.tgz" + "_resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-0.8.0.tgz" } diff --git a/node_modules/bcrypt/src/bcrypt_node.cc b/node_modules/bcrypt/src/bcrypt_node.cc index 4b42d8d..7fa377b 100644 --- a/node_modules/bcrypt/src/bcrypt_node.cc +++ b/node_modules/bcrypt/src/bcrypt_node.cc @@ -28,125 +28,22 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include -#include +#include #include #include #include +#include // atoi -#include -#include #include "node_blf.h" -//pulled from node commit - 97cada0 -#ifdef _WIN32 -# include -#else -# include -#endif - #define NODE_LESS_THAN (!(NODE_VERSION_AT_LEAST(0, 5, 4))) using namespace v8; using namespace node; -#ifdef _WIN32 - -static HANDLE* locks; - - -static void crypto_lock_init(void) { - int i, n; - - n = CRYPTO_num_locks(); - locks = new HANDLE[n]; - - for (i = 0; i < n; i++) - if (!(locks[i] = CreateMutex(NULL, FALSE, NULL))) - abort(); -} - -static void crypto_lock_cb(int mode, int n, const char* file, int line) { - if (mode & CRYPTO_LOCK) - WaitForSingleObject(locks[n], INFINITE); - else - ReleaseMutex(locks[n]); -} - -static unsigned long crypto_id_cb(void) { - return (unsigned long) GetCurrentThreadId(); -} - -#else /* !_WIN32 */ - -static pthread_rwlock_t* locks; - -static void crypto_lock_init(void) { - - const int n = CRYPTO_num_locks(); - locks = new pthread_rwlock_t[n]; - - for (int i = 0; i < n; i++) - if (pthread_rwlock_init(locks + i, NULL)) - abort(); -} - -static void crypto_lock_cb(int mode, int n, const char* file, int line) { - if (mode & CRYPTO_LOCK) { - if (mode & CRYPTO_READ) pthread_rwlock_rdlock(locks + n); - if (mode & CRYPTO_WRITE) pthread_rwlock_wrlock(locks + n); - } else { - pthread_rwlock_unlock(locks + n); - } -} - - -static unsigned long crypto_id_cb(void) { - return (unsigned long) pthread_self(); -} - -#endif /* !_WIN32 */ - namespace { -struct baton_base { - v8::Persistent callback; - std::string error; - - virtual ~baton_base() { - callback.Dispose(); - } -}; - -struct salt_baton : baton_base { - std::string salt; - int rand_len; - ssize_t rounds; -}; - -struct encrypt_baton : baton_base { - std::string salt; - std::string input; - std::string output; -}; - -struct compare_baton : baton_base { - std::string input; - std::string encrypted; - bool result; -}; - -int GetSeed(uint8_t* seed, int size) { - - // try to get good random bytes first - if (RAND_bytes((unsigned char *)seed, size) > 0) { - return 1; - } - - return RAND_pseudo_bytes(seed, size); -} - bool ValidateSalt(const char* salt) { if (!salt || *salt != '$') { @@ -195,166 +92,170 @@ bool ValidateSalt(const char* salt) { } /* SALT GENERATION */ -void GenSaltAsync(uv_work_t* req) { - - salt_baton* baton = static_cast(req->data); - std::vector seed(baton->rand_len); - switch(GetSeed(&seed[0], baton->rand_len)) { - case -1: - baton->error = "Rand operation not supported."; - case 0: - baton->error = "Rand operation did not generate a cryptographically sound seed."; +class SaltAsyncWorker : public NanAsyncWorker { + public: + SaltAsyncWorker(NanCallback *callback, std::string seed, ssize_t rounds) + : NanAsyncWorker(callback), seed(seed), rounds(rounds) { } - char salt[_SALT_LEN]; - bcrypt_gensalt(baton->rounds, &seed[0], salt); - baton->salt = std::string(salt); -} - -void GenSaltAsyncAfter(uv_work_t* req) { - HandleScope scope; + ~SaltAsyncWorker() {} - salt_baton* baton = static_cast(req->data); - delete req; + void Execute() { + char salt[_SALT_LEN]; + bcrypt_gensalt(rounds, (u_int8_t *)&seed[0], salt); + this->salt = std::string(salt); + } - Handle argv[2]; + void HandleOKCallback() { + NanScope(); - if (!baton->error.empty()) { - argv[0] = Exception::Error(String::New(baton->error.c_str())); - argv[1] = Undefined(); - } - else { - argv[0] = Undefined(); - argv[1] = Encode(baton->salt.c_str(), baton->salt.size(), BINARY); + Handle argv[2]; + argv[0] = NanUndefined(); + argv[1] = Encode(salt.c_str(), salt.size(), BINARY); + callback->Call(2, argv); } - TryCatch try_catch; // don't quite see the necessity of this - - baton->callback->Call(Context::GetCurrent()->Global(), 2, argv); + private: + std::string seed; + std::string salt; + ssize_t rounds; +}; - if (try_catch.HasCaught()) - FatalException(try_catch); +NAN_METHOD(GenerateSalt) { + NanScope(); - delete baton; -} + if (args.Length() < 3) { + NanThrowError(Exception::TypeError(NanNew("3 arguments expected"))); + NanReturnUndefined(); + } -Handle GenerateSalt(const Arguments &args) { - HandleScope scope; + if (!Buffer::HasInstance(args[1]) || Buffer::Length(args[1].As()) != 16) { + NanThrowError(Exception::TypeError(NanNew("Second argument must be a 16 byte Buffer"))); + NanReturnUndefined(); + } const ssize_t rounds = args[0]->Int32Value(); - const int rand_len = args[1]->Int32Value(); + Local seed = args[1].As(); Local callback = Local::Cast(args[2]); - salt_baton* baton = new salt_baton(); - - baton->callback = Persistent::New(callback); - baton->rand_len = rand_len; - baton->rounds = rounds; + SaltAsyncWorker* saltWorker = new SaltAsyncWorker(new NanCallback(callback), + std::string(Buffer::Data(seed), 16), rounds); - uv_work_t* req = new uv_work_t; - req->data = baton; - uv_queue_work(uv_default_loop(), req, GenSaltAsync, (uv_after_work_cb)GenSaltAsyncAfter); + NanAsyncQueueWorker(saltWorker); - return Undefined(); + NanReturnUndefined(); } -Handle GenerateSaltSync(const Arguments& args) { - HandleScope scope; +NAN_METHOD(GenerateSaltSync) { + NanScope(); - const ssize_t rounds = args[0]->Int32Value(); - const int size = args[1]->Int32Value(); - - std::vector seed(size); - switch(GetSeed(&seed[0], size)) { - case -1: - return ThrowException(Exception::Error(String::New("Rand operation not supported."))); - case 0: - return ThrowException(Exception::Error(String::New("Rand operation did not generate a cryptographically sound seed."))); + if (args.Length() < 2) { + NanThrowError(Exception::TypeError(NanNew("2 arguments expected"))); + NanReturnUndefined(); + } + + if (!Buffer::HasInstance(args[1]) || Buffer::Length(args[1].As()) != 16) { + NanThrowError(Exception::TypeError(NanNew("Second argument must be a 16 byte Buffer"))); + NanReturnUndefined(); } + const ssize_t rounds = args[0]->Int32Value(); + u_int8_t* seed = (u_int8_t*)Buffer::Data(args[1].As()); + char salt[_SALT_LEN]; - bcrypt_gensalt(rounds, &seed[0], salt); + bcrypt_gensalt(rounds, seed, salt); - return scope.Close(Encode(salt, strlen(salt), BINARY)); + NanReturnValue(Encode(salt, strlen(salt), BINARY)); } /* ENCRYPT DATA - USED TO BE HASHPW */ -void EncryptAsync(uv_work_t* req) { - encrypt_baton* baton = static_cast(req->data); - if (!(ValidateSalt(baton->salt.c_str()))) { - baton->error = "Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue"; +class EncryptAsyncWorker : public NanAsyncWorker { + public: + EncryptAsyncWorker(NanCallback *callback, std::string input, std::string salt) + : NanAsyncWorker(callback), input(input), salt(salt) { } - char bcrypted[_PASSWORD_LEN]; - bcrypt(baton->input.c_str(), baton->salt.c_str(), bcrypted); - baton->output = std::string(bcrypted); -} + ~EncryptAsyncWorker() {} -void EncryptAsyncAfter(uv_work_t* req) { - HandleScope scope; + void Execute() { + if (!(ValidateSalt(salt.c_str()))) { + error = "Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue"; + } - encrypt_baton* baton = static_cast(req->data); - delete req; + char bcrypted[_PASSWORD_LEN]; + bcrypt(input.c_str(), salt.c_str(), bcrypted); + output = std::string(bcrypted); + } - Handle argv[2]; + void HandleOKCallback() { + NanScope(); - if (!baton->error.empty()) { - argv[0] = Exception::Error(String::New(baton->error.c_str())); - argv[1] = Undefined(); - } - else { - argv[0] = Undefined(); - argv[1] = Encode(baton->output.c_str(), baton->output.size(), BINARY); - } + Handle argv[2]; - TryCatch try_catch; // don't quite see the necessity of this + if (!error.empty()) { + argv[0] = Exception::Error(NanNew(error.c_str())); + argv[1] = NanUndefined(); + } else { + argv[0] = NanUndefined(); + argv[1] = Encode(output.c_str(), output.size(), BINARY); + } - baton->callback->Call(Context::GetCurrent()->Global(), 2, argv); + callback->Call(2, argv); + } - if (try_catch.HasCaught()) - FatalException(try_catch); + private: + std::string input; + std::string salt; + std::string error; + std::string output; +}; - delete baton; -} +NAN_METHOD(Encrypt) { + NanScope(); -Handle Encrypt(const Arguments& args) { - HandleScope scope; + if (args.Length() < 3) { + NanThrowError(Exception::TypeError(NanNew("3 arguments expected"))); + NanReturnUndefined(); + } String::Utf8Value data(args[0]->ToString()); String::Utf8Value salt(args[1]->ToString()); Local callback = Local::Cast(args[2]); - encrypt_baton* baton = new encrypt_baton(); - baton->callback = Persistent::New(callback); - baton->input = std::string(*data); - baton->salt = std::string(*salt); + EncryptAsyncWorker* encryptWorker = new EncryptAsyncWorker(new NanCallback(callback), + std::string(*data), std::string(*salt)); - uv_work_t* req = new uv_work_t; - req->data = baton; - uv_queue_work(uv_default_loop(), req, EncryptAsync, (uv_after_work_cb)EncryptAsyncAfter); + NanAsyncQueueWorker(encryptWorker); - return Undefined(); + NanReturnUndefined(); } -Handle EncryptSync(const Arguments& args) { - HandleScope scope; +NAN_METHOD(EncryptSync) { + NanScope(); + + if (args.Length() < 2) { + NanThrowError(Exception::TypeError(NanNew("2 arguments expected"))); + NanReturnUndefined(); + } String::Utf8Value data(args[0]->ToString()); String::Utf8Value salt(args[1]->ToString()); if (!(ValidateSalt(*salt))) { - return ThrowException(Exception::Error(String::New("Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue"))); + NanThrowError("Invalid salt. Salt must be in the form of: $Vers$log2(NumRounds)$saltvalue"); + NanReturnUndefined(); } char bcrypted[_PASSWORD_LEN]; bcrypt(*data, *salt, bcrypted); - return scope.Close(Encode(bcrypted, strlen(bcrypted), BINARY)); + NanReturnValue(Encode(bcrypted, strlen(bcrypted), BINARY)); } /* COMPARATOR */ -bool CompareStrings(const char* s1, const char* s2) { + +NAN_INLINE bool CompareStrings(const char* s1, const char* s2) { bool eq = true; int s1_len = strlen(s1); @@ -377,65 +278,66 @@ bool CompareStrings(const char* s1, const char* s2) { return eq; } -void CompareAsync(uv_work_t* req) { - compare_baton* baton = static_cast(req->data); +class CompareAsyncWorker : public NanAsyncWorker { + public: + CompareAsyncWorker(NanCallback *callback, std::string input, std::string encrypted) + : NanAsyncWorker(callback), input(input), encrypted(encrypted) { - char bcrypted[_PASSWORD_LEN]; - if (ValidateSalt(baton->encrypted.c_str())) { - bcrypt(baton->input.c_str(), baton->encrypted.c_str(), bcrypted); - baton->result = CompareStrings(bcrypted, baton->encrypted.c_str()); + result = false; } -} - -void CompareAsyncAfter(uv_work_t* req) { - HandleScope scope; - compare_baton* baton = static_cast(req->data); - delete req; + ~CompareAsyncWorker() {} - Handle argv[2]; - - if (!baton->error.empty()) { - argv[0] = Exception::Error(String::New(baton->error.c_str())); - argv[1] = Undefined(); - } else { - argv[0] = Undefined(); - argv[1] = Boolean::New(baton->result); + void Execute() { + char bcrypted[_PASSWORD_LEN]; + if (ValidateSalt(encrypted.c_str())) { + bcrypt(input.c_str(), encrypted.c_str(), bcrypted); + result = CompareStrings(bcrypted, encrypted.c_str()); + } } - TryCatch try_catch; // don't quite see the necessity of this + void HandleOKCallback() { + NanScope(); - baton->callback->Call(Context::GetCurrent()->Global(), 2, argv); + Handle argv[2]; + argv[0] = NanUndefined(); + argv[1] = NanNew(result); + callback->Call(2, argv); + } - if (try_catch.HasCaught()) - FatalException(try_catch); + private: + std::string input; + std::string encrypted; + bool result; +}; - // done with the baton - // free the memory and callback - delete baton; -} +NAN_METHOD(Compare) { + NanScope(); -Handle Compare(const Arguments& args) { - HandleScope scope; + if (args.Length() < 3) { + NanThrowError(Exception::TypeError(NanNew("3 arguments expected"))); + NanReturnUndefined(); + } String::Utf8Value input(args[0]->ToString()); String::Utf8Value encrypted(args[1]->ToString()); Local callback = Local::Cast(args[2]); - compare_baton* baton = new compare_baton(); - baton->callback = Persistent::New(callback); - baton->input = std::string(*input); - baton->encrypted = std::string(*encrypted); + CompareAsyncWorker* compareWorker = new CompareAsyncWorker(new NanCallback(callback), + std::string(*input), std::string(*encrypted)); - uv_work_t* req = new uv_work_t; - req->data = baton; - uv_queue_work(uv_default_loop(), req, CompareAsync, (uv_after_work_cb)CompareAsyncAfter); + NanAsyncQueueWorker(compareWorker); - return Undefined(); + NanReturnUndefined(); } -Handle CompareSync(const Arguments& args) { - HandleScope scope; +NAN_METHOD(CompareSync) { + NanScope(); + + if (args.Length() < 2) { + NanThrowError(Exception::TypeError(NanNew("2 arguments expected"))); + NanReturnUndefined(); + } String::Utf8Value pw(args[0]->ToString()); String::Utf8Value hash(args[1]->ToString()); @@ -443,33 +345,35 @@ Handle CompareSync(const Arguments& args) { char bcrypted[_PASSWORD_LEN]; if (ValidateSalt(*hash)) { bcrypt(*pw, *hash, bcrypted); - return Boolean::New(CompareStrings(bcrypted, *hash)); + NanReturnValue(NanNew(CompareStrings(bcrypted, *hash))); } else { - return Boolean::New(false); + NanReturnValue(NanFalse()); } } -Handle GetRounds(const Arguments& args) { - HandleScope scope; +NAN_METHOD(GetRounds) { + NanScope(); + + if (args.Length() < 1) { + NanThrowError(Exception::TypeError(NanNew("1 argument expected"))); + NanReturnUndefined(); + } String::Utf8Value hash(args[0]->ToString()); u_int32_t rounds; if (!(rounds = bcrypt_get_rounds(*hash))) { - return ThrowException(Exception::Error(String::New("invalid hash provided"))); + NanThrowError("invalid hash provided"); + NanReturnUndefined(); } - return Integer::New(rounds); + NanReturnValue(NanNew(rounds)); } } // anonymous namespace // bind the bcrypt module extern "C" void init(Handle target) { - HandleScope scope; - - crypto_lock_init(); - CRYPTO_set_locking_callback(crypto_lock_cb); - CRYPTO_set_id_callback(crypto_id_cb); + NanScope(); NODE_SET_METHOD(target, "gen_salt_sync", GenerateSaltSync); NODE_SET_METHOD(target, "encrypt_sync", EncryptSync); diff --git a/node_modules/bcrypt/test/async.js b/node_modules/bcrypt/test/async.js index ebba1c6..6c7d38c 100644 --- a/node_modules/bcrypt/test/async.js +++ b/node_modules/bcrypt/test/async.js @@ -8,21 +8,21 @@ module.exports = { assert.done(); }); }, - test_salt_no_params: function(assert) { - assert.throws(function() {bcrypt.genSalt();}, "Should throw an Error. genSalt requires a callback."); - assert.done(); - }, test_salt_only_cb: function(assert) { assert.doesNotThrow(function() {bcrypt.genSalt(function(err, salt) {});}, "Should not throw an Error. Rounds and seed length are optional."); assert.done(); }, test_salt_rounds_is_string_number: function(assert) { - assert.throws(function() {bcrypt.genSalt('10');}, "Should throw an Error. No params."); - assert.done(); + bcrypt.genSalt('10', void 0, function (err, salt) { + assert.ok((err instanceof Error), "Should be an Error. genSalt requires round to be of type number."); + assert.done(); + }); }, - test_salt_rounds_is_NaN: function(assert) { - assert.throws(function() {bcrypt.genSalt('b');}, "Should throw an Error. genSalt requires rounds to be a number."); - assert.done(); + test_salt_rounds_is_string_non_number: function(assert) { + bcrypt.genSalt('b', function (err, salt) { + assert.ok((err instanceof Error), "Should throw an Error. genSalt requires rounds to of type number."); + assert.done(); + }); }, test_hash: function(assert) { assert.expect(1); @@ -58,16 +58,16 @@ module.exports = { }); }, test_hash_no_params: function(assert) { - assert.throws(function() {bcrypt.hash();}, "Should throw an Error. No Params."); - assert.done(); + bcrypt.hash(function (err, hash) { + assert.ok(err, "Should be an error. No params."); + assert.done(); + }); }, test_hash_one_param: function(assert) { - assert.throws(function() {bcrypt.hash('password');}, "Should throw an Error. No salt."); - assert.done(); - }, - test_hash_not_hash_str: function(assert) { - assert.throws(function() {bcrypt.hash('password', 1);}, "Should throw an Error. hash should be a string."); - assert.done(); + bcrypt.hash('password', function (err, hash) { + assert.ok(err, "Should be an Error. No salt."); + assert.done(); + }); }, test_hash_salt_validity: function(assert) { assert.expect(3); diff --git a/node_modules/bcrypt/test/deprecated.js b/node_modules/bcrypt/test/deprecated.js deleted file mode 100644 index 0802bd9..0000000 --- a/node_modules/bcrypt/test/deprecated.js +++ /dev/null @@ -1,34 +0,0 @@ -var bcrypt = require('../bcrypt'); - -module.exports = { - test_encrypt: function(assert) { - assert.expect(1); - bcrypt.gen_salt(10, function(err, salt) { - bcrypt.encrypt('password', salt, function(err, res) { - assert.ok(res, "Res should be defined."); - assert.done(); - }); - }); - }, - test_gen_salt_sync: function(assert) { - var salt = bcrypt.gen_salt_sync(10); - assert.equals(29, salt.length, "Salt isn't the correct length."); - var split_salt = salt.split('$'); - assert.ok(split_salt[1], '2a'); - assert.ok(split_salt[2], '10'); - assert.done(); - }, - test_encrypt_compare_sync: function(assert) { - var salt = bcrypt.gen_salt_sync(10); - assert.equals(29, salt.length, "Salt isn't the correct length."); - var hash = bcrypt.encrypt_sync("test", salt); - assert.ok(bcrypt.compare_sync("test", hash), "These hashes should be equal."); - assert.ok(!(bcrypt.compare_sync("blah", hash)), "These hashes should not be equal."); - assert.done(); - }, - test_get_rounds_sync: function(assert) { - var hash = bcrypt.encrypt_sync("test", bcrypt.gen_salt_sync(9)); - assert.equals(9, bcrypt.get_rounds(hash), "get_rounds can't extract rounds"); - assert.done(); - } -} diff --git a/node_modules/bcrypt/wscript b/node_modules/bcrypt/wscript deleted file mode 100644 index 7da36fd..0000000 --- a/node_modules/bcrypt/wscript +++ /dev/null @@ -1,60 +0,0 @@ -# -*- mode: python -*- - -import Options, Utils, sys, re, os - -srcdir = "." -blddir = "build" -VERSION = "0.0.1" -node_version = os.popen("node --version").read() - -def set_options(opt): - opt.tool_options("compiler_cxx") - -def configure(conf): - conf.check_tool("compiler_cxx") - conf.check_tool("node_addon") - o = Options.options - - nodepath = 'NODE_PATH' in os.environ and os.environ['NODE_PATH'] or None - - libpath = ['/lib', '/usr/lib', '/usr/local/lib', '/opt/local/lib', '/usr/sfw/lib'] - if nodepath: - libpath.append(nodepath) - includes = ['/usr/include', '/usr/includes', '/usr/local/includes', '/opt/local/includes', '/usr/sfw/lib']; - - libssl = conf.check(lib="ssl", - header_name='openssl/rand.h', - includes=includes, - libpath=libpath, - mandatory=True, - uselib_store='OPENSSL') - - if sys.platform == "cygwin": - libcrypto = conf.check(lib="crypto", - includes=includes, - libpath=libpath, - uselib_store='CRYPTO') - libz = conf.check(lib="z", - includes=includes, - libpath=libpath, - uselib_store='Z') - -def build(bld): - bcryptnode = bld.new_task_gen("cxx", "shlib", "node_addon") - cxxflags = [ "-O3" ] - if not node_version.startswith("v0.4"): - cxxflags.append("-DEV_MULTIPLICITY=1") - bcryptnode.cxxflags = cxxflags - bcryptnode.target = "bcrypt_lib" - bcryptnode.source = """ - src/blowfish.cc - src/bcrypt.cc - src/bcrypt_node.cc - """ - uselib = "OPENSSL" - if sys.platform == "cygwin": - uselib += " CRYPTO Z" - bcryptnode.uselib = uselib - -def test(t): - Utils.exec_command('make test') diff --git a/node_modules/mongoose/.travis.yml b/node_modules/mongoose/.travis.yml index ab51641..dcaf0f1 100644 --- a/node_modules/mongoose/.travis.yml +++ b/node_modules/mongoose/.travis.yml @@ -1,6 +1,5 @@ language: node_js node_js: - - 0.6 - 0.8 - 0.10 services: diff --git a/node_modules/mongoose/CONTRIBUTING.md b/node_modules/mongoose/CONTRIBUTING.md index f32a3eb..5860cb5 100644 --- a/node_modules/mongoose/CONTRIBUTING.md +++ b/node_modules/mongoose/CONTRIBUTING.md @@ -1,7 +1,5 @@ ## Contributing to Mongoose -### STOP! - If you have a question about Mongoose (not a bug report) please post it to either [StackOverflow](http://stackoverflow.com/questions/tagged/mongoose), our [Google Group](http://groups.google.com/group/mongoose-orm), or on the #mongoosejs irc channel on freenode. ### Reporting bugs @@ -12,6 +10,13 @@ If you have a question about Mongoose (not a bug report) please post it to eithe - _The source of this project is written in javascript, not coffeescript, therefore your bug reports should be written in javascript_. - In general, adding a "+1" comment to an existing issue does little to help get it resolved. A better way is to submit a well documented pull request with clean code and passing tests. +### Requesting new features + +- Before opening a new issue, look for existing [issues](https://github.com/learnboost/mongoose/issues) to avoid duplication. If the issue does not yet exist, [create one](https://github.com/learnboost/mongoose/issues/new). +- Please describe a use case for it +- it would be ideal to include test cases as well +- In general, adding a "+1" comment to an existing issue does little to help get it resolved. A better way is to submit a well documented pull request with clean code and passing tests. + ### Fixing bugs / Adding features - Before starting to write code, look for existing [issues](https://github.com/learnboost/mongoose/issues). That way you avoid working on something that might not be of interest or that has been addressed already in a different branch. You can create a new issue [here](https://github.com/learnboost/mongoose/issues/new). @@ -34,7 +39,7 @@ If you have a question about Mongoose (not a bug report) please post it to eithe - execute `npm install` to install the necessary dependencies - execute `make test` to run the tests (we're using [mocha](http://visionmedia.github.com/mocha/)) - or to execute a single test `T="-g 'some regexp that matches the test description'" make test` - - any mocha flags can be specified with T="..." + - any mocha flags can be specified with `T="..."` ### Documentation @@ -42,7 +47,7 @@ To contribute to the [API documentation](http://mongoosejs.com/docs/api.html) ju To contribute to the [guide](http://mongoosejs.com/docs/guide.html) or [quick start](http://mongoosejs.com/docs/index.html) docs, make your changes to the appropriate `.jade` files in the [docs](https://github.com/LearnBoost/mongoose/tree/master/docs) directory of the master branch and submit a pull request. Again, the [Edit](https://github.com/blog/844-forking-with-the-edit-button) button might work for you here. -If you'd like to preview your documentation changes, first commit your changes to your local master branch, then execute `make docs` from the project root, which switches to the gh-pages branch, merges from master, and builds all the static pages for you. Now execute `node server.js` from the project root which will launch a local webserver where you can browse the documentation site locally. If all looks good, submit a [pull request](https://help.github.com/articles/using-pull-requests/) to the master branch with your changes. +If you'd like to preview your documentation changes, first commit your changes to your local 3.6.x branch, then execute `make docs` from the project root, which switches to the gh-pages branch, merges from the 3.6.x branch and builds all the static pages for you. Now execute `node static.js` from the project root which will launch a local webserver where you can browse the documentation site locally. If all looks good, submit a [pull request](https://help.github.com/articles/using-pull-requests/) to the 3.6.x branch with your changes. ### Plugins website diff --git a/node_modules/mongoose/History.md b/node_modules/mongoose/History.md index 81bf50a..639c0b2 100644 --- a/node_modules/mongoose/History.md +++ b/node_modules/mongoose/History.md @@ -1,3 +1,505 @@ +3.8.20 / 2014-12-01 +=================== + * fixed; recursive readPref #2490 [kjvalencik](https://github.com/kjvalencik) + * fixed; make sure to copy parameters to update() before modifying #2406 [alabid](https://github.com/alabid) + * fixed; unclear documentation about query callbacks #2319 + * fixed; setting a schema-less field to an empty object #2314 [alabid](https://github.com/alabid) + * fixed; registering statics and methods for discriminators #2167 [alabid](https://github.com/alabid) + +3.8.19 / 2014-11-09 +=================== + * fixed; make sure to not override subdoc _ids on find #2276 [alabid](https://github.com/alabid) + * fixed; exception when comparing two documents when one lacks _id #2333 [slawo](https://github.com/slawo) + * fixed; getters for properties with non-strict schemas #2439 [alabid](https://github.com/alabid) + * fixed; inconsistent URI format in docs #2414 [sr527](https://github.com/sr527) + +3.8.18 / 2014-10-22 +================== + * fixed; Dont use all toObject options in save #2340 [chetverikov](https://github.com/chetverikov) + +3.8.17 / 2014-09-29 +================== + * fixed; use schema options retainKeyOrder in save() #2274 + * fixed; fix skip in populate when limit is set #2252 + * fixed; fix stack overflow when passing MongooseArray to findAndModify #2214 + * fixed; optimize .length usage in populate #2289 + +3.8.16 / 2014-09-08 +================== + * fixed; properly remove modified array paths if array has been overwritten #1638 + * fixed; key check errors #1884 + * fixed; make sure populate on an array always returns a Mongoose array #2214 + * fixed; SSL connections with node 0.11 #2234 + * fixed; return sensible strings for promise errors #2239 + +3.8.15 / 2014-08-17 +================== + * fixed; Replica set connection string example in docs #2246 + * fixed; bubble up parseError event #2229 + * fixed; removed buggy populate cache #2176 + * fixed; dont $inc versionKey if its being $set #1933 + * fixed; cast $or and $and in $pull #1932 + * fixed; properly cast to schema in stream() #1862 + * fixed; memory leak in nested objects #1565 #2211 [devongovett](https://github.com/devongovett) + +3.8.14 / 2014-07-26 +================== + * fixed; stringifying MongooseArray shows nested arrays #2002 + * fixed; use populated doc schema in toObject and toJSON by default #2035 + * fixed; dont crash on arrays containing null #2140 + * fixed; model.update w/ upsert has same return values on .exec and promise #2143 + * fixed; better handling for populate limit with multiple documents #2151 + * fixed; dont prevent users from adding weights to text index #2183 + * fixed; helper for aggregation cursor #2187 + * updated; node-mongodb-native to 1.4.7 + +3.8.13 / 2014-07-15 +================== + * fixed; memory leak with isNew events #2159 + * fixed; docs for overwrite option for update() #2144 + * fixed; storeShard() handles dates properly #2127 + * fixed; sub-doc changes not getting persisted to db after save #2082 + * fixed; populate with _id: 0 actually removes _id instead of setting to undefined #2123 + * fixed; save versionKey on findOneAndUpdate w/ upsert #2122 + * fixed; fix typo in 2.8 docs #2120 [shakirullahi](https://github.com/shakirullahi) + * fixed; support maxTimeMs #2102 [yuukinajima](https://github.com/yuukinajima) + * fixed; support $currentDate #2019 + * fixed; $addToSet handles objects without _ids properly #1973 + * fixed; dont crash on invalid nearSphere query #1874 + +3.8.12 / 2014-05-30 +================== + * fixed; single-server reconnect event fires #1672 + * fixed; sub-docs not saved when pushed into populated array #1794 + * fixed; .set() sometimes converts embedded docs to pojos #1954 [archangel-irk](https://github.com/archangel-irk) + * fixed; sub-doc changes not getting persisted to db after save #2082 + * fixed; custom getter might cause mongoose to mistakenly think a path is dirty #2100 [pgherveou](https://github.com/pgherveou) + * fixed; chainable helper for allowDiskUse option in aggregation #2114 + +3.8.11 / 2014-05-22 +================== + * updated; node-mongodb-native to 1.4.5 + * reverted; #2052, fixes #2097 + +3.8.10 / 2014-05-20 +================== + + * updated; node-mongodb-native to 1.4.4 + * fixed; _.isEqual false negatives bug in js-bson #2070 + * fixed; missing check for schema.options #2014 + * fixed; missing support for $position #2024 + * fixed; options object corruption #2049 + * fixed; improvements to virtuals docs #2055 + * fixed; added `domain` to reserved keywords #2052 #1338 + +3.8.9 / 2014-05-08 +================== + + * updated; mquery to 0.7.0 + * updated; node-mongodb-native to 1.4.3 + * fixed; $near failing against MongoDB 2.6 + * fixed; relying on .options() to determine if collection exists + * fixed; $out aggregate helper + * fixed; all test failures against MongoDB 2.6.1, with caveat #2065 + +3.8.8 / 2014-02-22 +================== + + * fixed; saving Buffers #1914 + * updated; expose connection states for user-land #1926 [yorkie](https://github.com/yorkie) + * updated; mquery to 0.5.3 + * updated; added get / set to reserved path list #1903 [tstrimple](https://github.com/tstrimple) + * docs; README code highlighting, syntax fixes #1930 [IonicaBizau](https://github.com/IonicaBizau) + * docs; fixes link in the doc at #1925 [kapeels](https://github.com/kapeels) + * docs; add a missed word 'hook' for the description of the post-hook api #1924 [ipoval](https://github.com/ipoval) + +3.8.7 / 2014-02-09 +================== + + * fixed; sending safe/read options in Query#exec #1895 + * fixed; findOneAnd..() with sort #1887 + +3.8.6 / 2014-01-30 +================== + + * fixed; setting readPreferences #1895 + +3.8.5 / 2014-01-23 +================== + + * fixed; ssl setting when using URI #1882 + * fixed; findByIdAndUpdate now respects the overwrite option #1809 [owenallenaz](https://github.com/owenallenaz) + +3.8.4 / 2014-01-07 +================== + + * updated; mongodb driver to 1.3.23 + * updated; mquery to 0.4.1 + * updated; mpromise to 0.4.3 + * fixed; discriminators now work when selecting fields #1820 [daemon1981](https://github.com/daemon1981) + * fixed; geoSearch with no results timeout #1846 [ghartnett](https://github.com/ghartnett) + * fixed; infitite recursion in ValidationError #1834 [chetverikov](https://github.com/chetverikov) + +3.8.3 / 2013-12-17 +================== + + * fixed; setting empty array with model.update #1838 + * docs; fix url + +3.8.2 / 2013-12-14 +================== + + * fixed; enum validation of multiple values #1778 [heroicyang](https://github.com/heroicyang) + * fixed; global var leak #1803 + * fixed; post remove now fires on subdocs #1810 + * fixed; no longer set default empty array for geospatial-indexed fields #1668 [shirish87](https://github.com/shirish87) + * fixed; model.stream() not hydrating discriminators correctly #1792 [j](https://github.com/j) + * docs: Stablility -> Stability [nikmartin](https://github.com/nikmartin) + * tests; improve shard error handling + +3.8.1 / 2013-11-19 +================== + + * fixed; mishandling of Dates with minimize/getters #1764 + * fixed; Normalize bugs.email, so `npm` will shut up #1769 [refack](https://github.com/refack) + * docs; Improve the grammar where "lets us" was used #1777 [alexyoung](https://github.com/alexyoung) + * docs; Fix some grammatical issues in the documentation #1777 [alexyoung](https://github.com/alexyoung) + * docs; fix Query api exposure + * docs; fix return description + * docs; Added Notes on findAndUpdate() #1750 [sstadelman](https://github.com/sstadelman) + * docs; Update version number in README #1762 [Fodi69](https://github.com/Fodi69) + +3.8.0 / 2013-10-31 +================== + + * updated; warn when using an unstable version + * updated; error message returned in doc.save() #1595 + * updated; mongodb driver to 1.3.19 (fix error swallowing behavior) + * updated; mquery to 0.3.2 + * updated; mocha to 1.12.0 + * updated; mpromise 0.3.0 + * updated; sliced 0.0.5 + * removed; mongoose.Error.DocumentError (never used) + * removed; namedscope (undocumented and broken) #679 #642 #455 #379 + * changed; no longer offically supporting node 0.6.x + * changed; query.within getter is now a method -> query.within() + * changed; query.intersects getter is now a method -> query.intersects() + * added; custom error msgs for built-in validators #747 + * added; discriminator support #1647 #1003 [j](https://github.com/j) + * added; support disabled collection name pluralization #1350 #1707 [refack](https://github.com/refack) + * added; support for GeoJSON to Query#near [ebensing](https://github.com/ebensing) + * added; stand-alone base query support - query.toConstructor() [ebensing](https://github.com/ebensing) + * added; promise support to geoSearch #1614 [ebensing](https://github.com/ebensing) + * added; promise support for geoNear #1614 [ebensing](https://github.com/ebensing) + * added; connection.useDb() #1124 [ebensing](https://github.com/ebensing) + * added; promise support to model.mapReduce() + * added; promise support to model.ensureIndexes() + * added; promise support to model.populate() + * added; benchmarks [ebensing](https://github.com/ebensing) + * added; publicly exposed connection states #1585 + * added; $geoWithin support #1529 $1455 [ebensing](https://github.com/ebensing) + * added; query method chain validation + * added; model.update `overwrite` option + * added; model.geoNear() support #1563 [ebensing](https://github.com/ebensing) + * added; model.geoSearch() support #1560 [ebensing](https://github.com/ebensing) + * added; MongooseBuffer#subtype() + * added; model.create() now returns a promise #1340 + * added; support for `awaitdata` query option + * added; pass the doc to doc.remove() callback #1419 [JoeWagner](https://github.com/JoeWagner) + * added; aggregation query builder #1404 [njoyard](https://github.com/njoyard) + * fixed; document.toObject when using `minimize` and `getters` options #1607 [JedWatson](https://github.com/JedWatson) + * fixed; Mixed types can now be required #1722 [Reggino](https://github.com/Reggino) + * fixed; do not pluralize model names not ending with letters #1703 [refack](https://github.com/refack) + * fixed; repopulating modified populated paths #1697 + * fixed; doc.equals() when _id option is set to false #1687 + * fixed; strict mode warnings #1686 + * fixed; $near GeoJSON casting #1683 + * fixed; nearSphere GeoJSON query builder + * fixed; population field selection w/ strings #1669 + * fixed; setters not firing on null values #1445 [ebensing](https://github.com/ebensing) + * fixed; handle another versioning edge case #1520 + * fixed; excluding subdocument fields #1280 [ebensing](https://github.com/ebensing) + * fixed; allow array properties to be set to null with findOneAndUpdate [aheuermann](https://github.com/aheuermann) + * fixed; subdocuments now use own toJSON opts #1376 [ebensing](https://github.com/ebensing) + * fixed; model#geoNear fulfills promise when results empty #1658 [ebensing](https://github.com/ebensing) + * fixed; utils.merge no longer overrides props and methods #1655 [j](https://github.com/j) + * fixed; subdocuments now use their own transform #1412 [ebensing](https://github.com/ebensing) + * fixed; model.remove() removes only what is necessary #1649 + * fixed; update() now only runs with cb or explicit true #1644 + * fixed; casting ref docs on creation #1606 [ebensing](https://github.com/ebensing) + * fixed; model.update "overwrite" option works as documented + * fixed; query#remove() works as documented + * fixed; "limit" correctly applies to individual items on population #1490 [ebensing](https://github.com/ebensing) + * fixed; issue with positional operator on ref docs #1572 [ebensing](https://github.com/ebensing) + * fixed; benchmarks to actually output valid json + * deprecated; promise#addBack (use promise#onResolve) + * deprecated; promise#complete (use promise#fulfill) + * deprecated; promise#addCallback (use promise#onFulFill) + * deprecated; promise#addErrback (use promise#onReject) + * deprecated; query.nearSphere() (use query.near) + * deprecated; query.center() (use query.circle) + * deprecated; query.centerSphere() (use query.circle) + * deprecated; query#slaveOk (use query#read) + * docs; custom validator messages + * docs; 10gen -> MongoDB + * docs; add Date method caveats #1598 + * docs; more validation details + * docs; state which branch is stable/unstable + * docs; mention that middleware does not run on Models + * docs; promise.fulfill() + * docs; fix readme spelling #1483 [yorchopolis](https://github.com/yorchopolis) + * docs; fixed up the README and examples [ebensing](https://github.com/ebensing) + * website; add "show code" for properties + * website; move "show code" links down + * website; update guide + * website; add unstable docs + * website; many improvements + * website; fix copyright #1439 + * website; server.js -> static.js #1546 [nikmartin](https://github.com/nikmartin) + * tests; refactor 1703 + * tests; add test generator + * tests; validate formatMessage() throws + * tests; add script for continuously running tests + * tests; fixed versioning tests + * tests; race conditions in tests + * tests; added for nested and/or queries + * tests; close some test connections + * tests; validate db contents + * tests; remove .only + * tests; close some test connections + * tests; validate db contents + * tests; remove .only + * tests; replace deprecated method names + * tests; convert id to string + * tests; fix sharding tests for MongoDB 2.4.5 + * tests; now 4-5 seconds faster + * tests; fix race condition + * make; suppress warning msg in test + * benchmarks; updated for pull requests + * examples; improved and expanded [ebensing](https://github.com/ebensing) + +3.7.4 (unstable) / 2013-10-01 +============================= + + * updated; mquery to 0.3.2 + * removed; mongoose.Error.DocumentError (never used) + * added; custom error msgs for built-in validators #747 + * added; discriminator support #1647 #1003 [j](https://github.com/j) + * added; support disabled collection name pluralization #1350 #1707 [refack](https://github.com/refack) + * fixed; do not pluralize model names not ending with letters #1703 [refack](https://github.com/refack) + * fixed; repopulating modified populated paths #1697 + * fixed; doc.equals() when _id option is set to false #1687 + * fixed; strict mode warnings #1686 + * fixed; $near GeoJSON casting #1683 + * fixed; nearSphere GeoJSON query builder + * fixed; population field selection w/ strings #1669 + * docs; custom validator messages + * docs; 10gen -> MongoDB + * docs; add Date method caveats #1598 + * docs; more validation details + * website; add "show code" for properties + * website; move "show code" links down + * tests; refactor 1703 + * tests; add test generator + * tests; validate formatMessage() throws + +3.7.3 (unstable) / 2013-08-22 +============================= + + * updated; warn when using an unstable version + * updated; mquery to 0.3.1 + * updated; mocha to 1.12.0 + * updated; mongodb driver to 1.3.19 (fix error swallowing behavior) + * changed; no longer offically supporting node 0.6.x + * added; support for GeoJSON to Query#near [ebensing](https://github.com/ebensing) + * added; stand-alone base query support - query.toConstructor() [ebensing](https://github.com/ebensing) + * added; promise support to geoSearch #1614 [ebensing](https://github.com/ebensing) + * added; promise support for geoNear #1614 [ebensing](https://github.com/ebensing) + * fixed; setters not firing on null values #1445 [ebensing](https://github.com/ebensing) + * fixed; handle another versioning edge case #1520 + * fixed; excluding subdocument fields #1280 [ebensing](https://github.com/ebensing) + * fixed; allow array properties to be set to null with findOneAndUpdate [aheuermann](https://github.com/aheuermann) + * fixed; subdocuments now use own toJSON opts #1376 [ebensing](https://github.com/ebensing) + * fixed; model#geoNear fulfills promise when results empty #1658 [ebensing](https://github.com/ebensing) + * fixed; utils.merge no longer overrides props and methods #1655 [j](https://github.com/j) + * fixed; subdocuments now use their own transform #1412 [ebensing](https://github.com/ebensing) + * make; suppress warning msg in test + * docs; state which branch is stable/unstable + * docs; mention that middleware does not run on Models + * tests; add script for continuously running tests + * tests; fixed versioning tests + * benchmarks; updated for pull requests + +3.7.2 (unstable) / 2013-08-15 +================== + + * fixed; model.remove() removes only what is necessary #1649 + * fixed; update() now only runs with cb or explicit true #1644 + * tests; race conditions in tests + * website; update guide + +3.7.1 (unstable) / 2013-08-13 +============================= + + * updated; driver to 1.3.18 (fixes memory leak) + * added; connection.useDb() #1124 [ebensing](https://github.com/ebensing) + * added; promise support to model.mapReduce() + * added; promise support to model.ensureIndexes() + * added; promise support to model.populate() + * fixed; casting ref docs on creation #1606 [ebensing](https://github.com/ebensing) + * fixed; model.update "overwrite" option works as documented + * fixed; query#remove() works as documented + * fixed; "limit" correctly applies to individual items on population #1490 [ebensing](https://github.com/ebensing) + * fixed; issue with positional operator on ref docs #1572 [ebensing](https://github.com/ebensing) + * fixed; benchmarks to actually output valid json + * tests; added for nested and/or queries + * tests; close some test connections + * tests; validate db contents + * tests; remove .only + * tests; close some test connections + * tests; validate db contents + * tests; remove .only + * tests; replace deprecated method names + * tests; convert id to string + * docs; promise.fulfill() + +3.7.0 (unstable) / 2013-08-05 +=================== + + * changed; query.within getter is now a method -> query.within() + * changed; query.intersects getter is now a method -> query.intersects() + * deprecated; promise#addBack (use promise#onResolve) + * deprecated; promise#complete (use promise#fulfill) + * deprecated; promise#addCallback (use promise#onFulFill) + * deprecated; promise#addErrback (use promise#onReject) + * deprecated; query.nearSphere() (use query.near) + * deprecated; query.center() (use query.circle) + * deprecated; query.centerSphere() (use query.circle) + * deprecated; query#slaveOk (use query#read) + * removed; namedscope (undocumented and broken) #679 #642 #455 #379 + * added; benchmarks [ebensing](https://github.com/ebensing) + * added; publicly exposed connection states #1585 + * added; $geoWithin support #1529 $1455 [ebensing](https://github.com/ebensing) + * added; query method chain validation + * added; model.update `overwrite` option + * added; model.geoNear() support #1563 [ebensing](https://github.com/ebensing) + * added; model.geoSearch() support #1560 [ebensing](https://github.com/ebensing) + * added; MongooseBuffer#subtype() + * added; model.create() now returns a promise #1340 + * added; support for `awaitdata` query option + * added; pass the doc to doc.remove() callback #1419 [JoeWagner](https://github.com/JoeWagner) + * added; aggregation query builder #1404 [njoyard](https://github.com/njoyard) + * updated; integrate mquery #1562 [ebensing](https://github.com/ebensing) + * updated; error msg in doc.save() #1595 + * updated; bump driver to 1.3.15 + * updated; mpromise 0.3.0 + * updated; sliced 0.0.5 + * tests; fix sharding tests for MongoDB 2.4.5 + * tests; now 4-5 seconds faster + * tests; fix race condition + * docs; fix readme spelling #1483 [yorchopolis](https://github.com/yorchopolis) + * docs; fixed up the README and examples [ebensing](https://github.com/ebensing) + * website; add unstable docs + * website; many improvements + * website; fix copyright #1439 + * website; server.js -> static.js #1546 [nikmartin](https://github.com/nikmartin) + * examples; improved and expanded [ebensing](https://github.com/ebensing) + +3.6.20 (stable) / 2013-09-23 +=================== + + * fixed; repopulating modified populated paths #1697 + * fixed; doc.equals w/ _id false #1687 + * fixed; strict mode warning #1686 + * docs; near/nearSphere + +3.6.19 (stable) / 2013-09-04 +================== + + * fixed; population field selection w/ strings #1669 + * docs; Date method caveats #1598 + +3.6.18 (stable) / 2013-08-22 +=================== + + * updated; warn when using an unstable version of mongoose + * updated; mocha to 1.12.0 + * updated; mongodb driver to 1.3.19 (fix error swallowing behavior) + * fixed; setters not firing on null values #1445 [ebensing](https://github.com/ebensing) + * fixed; properly exclude subdocument fields #1280 [ebensing](https://github.com/ebensing) + * fixed; cast error in findAndModify #1643 [aheuermann](https://github.com/aheuermann) + * website; update guide + * website; added documentation for safe:false and versioning interaction + * docs; mention that middleware dont run on Models + * docs; fix indexes link + * make; suppress warning msg in test + * tests; moar + +3.6.17 / 2013-08-13 +=================== + + * updated; driver to 1.3.18 (fixes memory leak) + * fixed; casting ref docs on creation #1606 + * docs; query options + +3.6.16 / 2013-08-08 +=================== + + * added; publicly expose connection states #1585 + * fixed; limit applies to individual items on population #1490 [ebensing](https://github.com/ebensing) + * fixed; positional operator casting in updates #1572 [ebensing](https://github.com/ebensing) + * updated; MongoDB driver to 1.3.17 + * updated; sliced to 0.0.5 + * website; tweak homepage + * tests; fixed + added + * docs; fix some examples + * docs; multi-mongos support details + * docs; auto open browser after starting static server + +3.6.15 / 2013-07-16 +================== + + * added; mongos failover support #1037 + * updated; make schematype return vals return self #1580 + * docs; add note to model.update #571 + * docs; document third param to document.save callback #1536 + * tests; tweek mongos test timeout + +3.6.14 / 2013-07-05 +=================== + + * updated; driver to 1.3.11 + * fixed; issue with findOneAndUpdate not returning null on upserts #1533 [ebensing](https://github.com/ebensing) + * fixed; missing return statement in SchemaArray#$geoIntersects() #1498 [bsrykt](https://github.com/bsrykt) + * fixed; wrong isSelected() behavior #1521 [kyano](https://github.com/kyano) + * docs; note about toObject behavior during save() + * docs; add callbacks details #1547 [nikmartin](https://github.com/nikmartin) + +3.6.13 / 2013-06-27 +=================== + + * fixed; calling model.distinct without conditions #1541 + * fixed; regression in Query#count() #1542 + * now working on 3.6.13 + +3.6.12 / 2013-06-25 +=================== + + * updated; driver to 1.3.10 + * updated; clearer capped collection error message #1509 [bitmage](https://github.com/bitmage) + * fixed; MongooseBuffer subtype loss during casting #1517 [zedgu](https://github.com/zedgu) + * fixed; docArray#id when doc.id is disabled #1492 + * fixed; docArray#id now supports matches on populated arrays #1492 [pgherveou](https://github.com/pgherveou) + * website; fix example + * website; improve _id disabling example + * website; fix typo #1494 [dejj](https://github.com/dejj) + * docs; added a 'Requesting new features' section #1504 [shovon](https://github.com/shovon) + * docs; improve subtypes description + * docs; clarify _id disabling + * docs: display by alphabetical order the methods list #1508 [nicolasleger](https://github.com/nicolasleger) + * tests; refactor isSelected checks + * tests; remove pointless test + * tests; fixed timeouts 3.6.11 / 2013-05-15 =================== @@ -264,13 +766,27 @@ * updated; mpath to 0.1.1 * updated; docs +3.5.16 / 2013-08-13 +=================== + + * updated; driver to 1.3.18 + +3.5.15 / 2013-07-26 +================== + + * updated; sliced to 0.0.5 + * updated; driver to 1.3.12 + * fixed; regression in Query#count() due to driver change + * tests; fixed timeouts + * tests; handle differing test uris + 3.5.14 / 2013-05-15 =================== * updated; driver to 1.3.5 * fixed; compat w/ Object.create(null) #1484 #1485 * fixed; cloning objects missing constructors - * fixed; prevent multiple min number validators #1481 [nrako](https://github.com/nrako] + * fixed; prevent multiple min number validators #1481 [nrako](https://github.com/nrako) 3.5.13 / 2013-05-09 ================== diff --git a/node_modules/mongoose/README.md b/node_modules/mongoose/README.md index 71af427..5904381 100644 --- a/node_modules/mongoose/README.md +++ b/node_modules/mongoose/README.md @@ -1,51 +1,57 @@ -## What's Mongoose? +# Mongoose Mongoose is a [MongoDB](http://www.mongodb.org/) object modeling tool designed to work in an asynchronous environment. +[![Build Status](https://travis-ci.org/LearnBoost/mongoose.png?branch=3.8.x)](https://travis-ci.org/LearnBoost/mongoose) + ## Documentation [mongoosejs.com](http://mongoosejs.com/) -## Try it live - - ## Support - [Stack Overflow](http://stackoverflow.com/questions/tagged/mongoose) - [bug reports](https://github.com/learnboost/mongoose/issues/) - [help forum](http://groups.google.com/group/mongoose-orm) - - [10gen support](http://www.mongodb.org/display/DOCS/Technical+Support) + - [MongoDB support](http://www.mongodb.org/display/DOCS/Technical+Support) - (irc) #mongoosejs on freenode -## Installation - -First install [node.js](http://nodejs.org/) and [mongodb](http://www.mongodb.org/downloads). - - $ npm install mongoose - ## Plugins Check out the [plugins search site](http://plugins.mongoosejs.com/) to see hundreds of related modules from the community. ## Contributors -View all 90+ [contributors](https://github.com/learnboost/mongoose/graphs/contributors). +View all 100+ [contributors](https://github.com/learnboost/mongoose/graphs/contributors). Stand up and be counted as a [contributor](https://github.com/LearnBoost/mongoose/blob/master/CONTRIBUTING.md) too! -## Get Involved +## Live Examples + -Stand up and be counted as a [contributor](https://github.com/LearnBoost/mongoose/blob/master/CONTRIBUTING.md) too! +## Installation + +First install [node.js](http://nodejs.org/) and [mongodb](http://www.mongodb.org/downloads). Then: + +```sh +$ npm install mongoose +``` + +## Stability + +The current stable branch is [3.8.x](https://github.com/LearnBoost/mongoose/tree/3.8.x). New (unstable) development always occurs on the [master](https://github.com/LearnBoost/mongoose/tree/master) branch. ## Overview ### Connecting to MongoDB -First, we need to define a connection. If your app uses only one database, you should use `mongose.connect`. If you need to create additional connections, use `mongoose.createConnection`. +First, we need to define a connection. If your app uses only one database, you should use `mongoose.connect`. If you need to create additional connections, use `mongoose.createConnection`. Both `connect` and `createConnection` take a `mongodb://` URI, or the parameters `host, database, port, options`. - var mongoose = require('mongoose'); +```js +var mongoose = require('mongoose'); - mongoose.connect('mongodb://localhost/my_database'); +mongoose.connect('mongodb://localhost/my_database'); +``` Once connected, the `open` event is fired on the `Connection` instance. If you're using `mongoose.connect`, the `Connection` is `mongoose.connection`. Otherwise, `mongoose.createConnection` return value is a `Connection`. @@ -55,15 +61,17 @@ Once connected, the `open` event is fired on the `Connection` instance. If you'r Models are defined through the `Schema` interface. - var Schema = mongoose.Schema - , ObjectId = Schema.ObjectId; +```js +var Schema = mongoose.Schema + , ObjectId = Schema.ObjectId; - var BlogPost = new Schema({ - author : ObjectId - , title : String - , body : String - , date : Date - }); +var BlogPost = new Schema({ + author : ObjectId + , title : String + , body : String + , date : Date +}); +``` Aside from defining the structure of your documents and the types of data you're storing, a Schema handles the definition of: @@ -80,24 +88,26 @@ Aside from defining the structure of your documents and the types of data you're The following example shows some of these features: - var Comment = new Schema({ - name : { type: String, default: 'hahaha' } - , age : { type: Number, min: 18, index: true } - , bio : { type: String, match: /[a-z]/ } - , date : { type: Date, default: Date.now } - , buff : Buffer - }); - - // a setter - Comment.path('name').set(function (v) { - return capitalize(v); - }); - - // middleware - Comment.pre('save', function (next) { - notify(this.get('email')); - next(); - }); +```js +var Comment = new Schema({ + name : { type: String, default: 'hahaha' } + , age : { type: Number, min: 18, index: true } + , bio : { type: String, match: /[a-z]/ } + , date : { type: Date, default: Date.now } + , buff : Buffer +}); + +// a setter +Comment.path('name').set(function (v) { + return capitalize(v); +}); + +// middleware +Comment.pre('save', function (next) { + notify(this.get('email')); + next(); +}); +``` Take a look at the example in `examples/schema.js` for an end-to-end example of a typical setup. @@ -105,73 +115,91 @@ Take a look at the example in `examples/schema.js` for an end-to-end example of Once we define a model through `mongoose.model('ModelName', mySchema)`, we can access it through the same function - var myModel = mongoose.model('ModelName'); +```js +var myModel = mongoose.model('ModelName'); +``` Or just do it all at once - var MyModel = mongoose.model('ModelName', mySchema); +```js +var MyModel = mongoose.model('ModelName', mySchema); +``` We can then instantiate it, and save it: - var instance = new MyModel(); - instance.my.key = 'hello'; - instance.save(function (err) { - // - }); +```js +var instance = new MyModel(); +instance.my.key = 'hello'; +instance.save(function (err) { + // +}); +``` Or we can find documents from the same collection - MyModel.find({}, function (err, docs) { - // docs.forEach - }); +```js +MyModel.find({}, function (err, docs) { + // docs.forEach +}); +``` You can also `findOne`, `findById`, `update`, etc. For more details check out [the docs](http://mongoosejs.com/docs/queries.html). **Important!** If you opened a separate connection using `mongoose.createConnection()` but attempt to access the model through `mongoose.model('ModelName')` it will not work as expected since it is not hooked up to an active db connection. In this case access your model through the connection you created: - var conn = mongoose.createConnection('your connection string'); - var MyModel = conn.model('ModelName', schema); - var m = new MyModel; - m.save() // works +```js +var conn = mongoose.createConnection('your connection string') + , MyModel = conn.model('ModelName', schema) + , m = new MyModel; +m.save(); // works +``` - vs +vs - var conn = mongoose.createConnection('your connection string'); - var MyModel = mongoose.model('ModelName', schema); - var m = new MyModel; - m.save() // does not work b/c the default connection object was never connected +```js +var conn = mongoose.createConnection('your connection string') + , MyModel = mongoose.model('ModelName', schema) + , m = new MyModel; +m.save(); // does not work b/c the default connection object was never connected +``` ### Embedded Documents In the first example snippet, we defined a key in the Schema that looks like: - comments: [Comments] +``` +comments: [Comments] +``` Where `Comments` is a `Schema` we created. This means that creating embedded documents is as simple as: - // retrieve my model - var BlogPost = mongoose.model('BlogPost'); +```js +// retrieve my model +var BlogPost = mongoose.model('BlogPost'); - // create a blog post - var post = new BlogPost(); +// create a blog post +var post = new BlogPost(); - // create a comment - post.comments.push({ title: 'My comment' }); +// create a comment +post.comments.push({ title: 'My comment' }); - post.save(function (err) { - if (!err) console.log('Success!'); - }); +post.save(function (err) { + if (!err) console.log('Success!'); +}); +``` The same goes for removing them: - BlogPost.findById(myId, function (err, post) { - if (!err) { - post.comments[0].remove(); - post.save(function (err) { - // do something - }); - } +```js +BlogPost.findById(myId, function (err, post) { + if (!err) { + post.comments[0].remove(); + post.save(function (err) { + // do something }); + } +}); +``` Embedded documents enjoy all the same features as your models. Defaults, validators, middleware. Whenever an error occurs, it's bubbled to the `save()` error callback, so error handling is a snap! @@ -187,55 +215,61 @@ You can intercept method arguments via middleware. For example, this would allow you to broadcast changes about your Documents every time someone `set`s a path in your Document to a new value: - schema.pre('set', function (next, path, val, typel) { - // `this` is the current Document - this.emit('set', path, val); +```js +schema.pre('set', function (next, path, val, typel) { + // `this` is the current Document + this.emit('set', path, val); - // Pass control to the next pre - next(); - }); + // Pass control to the next pre + next(); +}); +``` Moreover, you can mutate the incoming `method` arguments so that subsequent middleware see different values for those arguments. To do so, just pass the new values to `next`: - .pre(method, function firstPre (next, methodArg1, methodArg2) { - // Mutate methodArg1 - next("altered-" + methodArg1.toString(), methodArg2); - }) +```js +.pre(method, function firstPre (next, methodArg1, methodArg2) { + // Mutate methodArg1 + next("altered-" + methodArg1.toString(), methodArg2); +}); - // pre declaration is chainable - .pre(method, function secondPre (next, methodArg1, methodArg2) { - console.log(methodArg1); - // => 'altered-originalValOfMethodArg1' +// pre declaration is chainable +.pre(method, function secondPre (next, methodArg1, methodArg2) { + console.log(methodArg1); + // => 'altered-originalValOfMethodArg1' - console.log(methodArg2); - // => 'originalValOfMethodArg2' + console.log(methodArg2); + // => 'originalValOfMethodArg2' - // Passing no arguments to `next` automatically passes along the current argument values - // i.e., the following `next()` is equivalent to `next(methodArg1, methodArg2)` - // and also equivalent to, with the example method arg - // values, `next('altered-originalValOfMethodArg1', 'originalValOfMethodArg2')` - next(); - }) + // Passing no arguments to `next` automatically passes along the current argument values + // i.e., the following `next()` is equivalent to `next(methodArg1, methodArg2)` + // and also equivalent to, with the example method arg + // values, `next('altered-originalValOfMethodArg1', 'originalValOfMethodArg2')` + next(); +}); +``` #### Schema gotcha `type`, when used in a schema has special meaning within Mongoose. If your schema requires using `type` as a nested property you must use object notation: - new Schema({ - broken: { type: Boolean } - , asset : { - name: String - , type: String // uh oh, it broke. asset will be interpreted as String - } - }); - - new Schema({ - works: { type: Boolean } - , asset : { - name: String - , type: { type: String } // works. asset is an object with a type property - } - }); +```js +new Schema({ + broken: { type: Boolean } + , asset : { + name: String + , type: String // uh oh, it broke. asset will be interpreted as String + } +}); + +new Schema({ + works: { type: Boolean } + , asset : { + name: String + , type: { type: String } // works. asset is an object with a type property + } +}); +``` ### Driver access @@ -243,7 +277,7 @@ The driver being used defaults to [node-mongodb-native](https://github.com/mongo ## API Docs -Find the API docs [here](http://mongoosejs.com/docs/api.html), generated by [dox](http://github.com/visionmedia/dox). +Find the API docs [here](http://mongoosejs.com/docs/api.html), generated using [dox](http://github.com/visionmedia/dox). ## License diff --git a/node_modules/mongoose/examples/README.md b/node_modules/mongoose/examples/README.md index 89728d9..cb32898 100644 --- a/node_modules/mongoose/examples/README.md +++ b/node_modules/mongoose/examples/README.md @@ -1,40 +1,39 @@ - This directory contains runnable sample mongoose programs. To run: - first install [Node.js](http://nodejs.org/) + - from the root of the project, execute `npm install -d` + - in the example directory, run `npm install -d` - from the command line, execute: `node example.js`, replacing "example.js" with the name of a program. Goal is to show: -- global schemas -- GeoJSON schemas / use (with crs) -- text search -- storing schemas as json -- lean querires -- statics +- ~~global schemas~~ +- ~~GeoJSON schemas / use (with crs)~~ +- text search (once MongoDB removes the "Experimental/beta" label) +- ~~lean queries~~ +- ~~statics~~ - methods and statics on subdocs - custom types -- querybuilder -- promises -- express + mongoose +- ~~querybuilder~~ +- ~~promises~~ - accessing driver collection, db -- connecting to replica sets +- ~~connecting to replica sets~~ - connecting to sharded clusters - enabling a fail fast mode - on the fly schemas - storing files -- map reduce -- aggregation +- ~~map reduce~~ +- ~~aggregation~~ - advanced hooks - using $elemMatch to return a subset of an array - query casting - upserts - pagination - express + mongoose session handling -- group by (use aggregation) +- ~~group by (use aggregation)~~ - authentication - schema migration techniques - converting documents to plain objects (show transforms) diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/.npmignore deleted file mode 100644 index caf574d..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -.git* -docs/ -examples/ -support/ -test/ -testing.js -.DS_Store -coverage.html -lib-cov diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/.travis.yml b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/.travis.yml deleted file mode 100644 index 09d3ef3..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.8 - - 0.10 diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/History.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/History.md deleted file mode 100644 index 880242d..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/History.md +++ /dev/null @@ -1,1100 +0,0 @@ - -3.1.1 / 2013-04-01 -================== - - * add X-Forwarded-Host support to `req.host` - * fix relative redirects - * update mkdirp - * update buffer-crc32 - * remove legacy app.configure() method from app template. - -3.1.0 / 2013-01-25 -================== - - * add support for leading "." in "view engine" setting - * add array support to `res.set()` - * add node 0.8.x to travis.yml - * add "subdomain offset" setting for tweaking `req.subdomains` - * add `res.location(url)` implementing `res.redirect()`-like setting of Location - * use app.get() for x-powered-by setting for inheritance - * fix colons in passwords for `req.auth` - -3.0.6 / 2013-01-04 -================== - - * add http verb methods to Router - * update connect - * fix mangling of the `res.cookie()` options object - * fix jsonp whitespace escape. Closes #1132 - -3.0.5 / 2012-12-19 -================== - - * add throwing when a non-function is passed to a route - * fix: explicitly remove Transfer-Encoding header from 204 and 304 responses - * revert "add 'etag' option" - -3.0.4 / 2012-12-05 -================== - - * add 'etag' option to disable `res.send()` Etags - * add escaping of urls in text/plain in `res.redirect()` - for old browsers interpreting as html - * change crc32 module for a more liberal license - * update connect - -3.0.3 / 2012-11-13 -================== - - * update connect - * update cookie module - * fix cookie max-age - -3.0.2 / 2012-11-08 -================== - - * add OPTIONS to cors example. Closes #1398 - * fix route chaining regression. Closes #1397 - -3.0.1 / 2012-11-01 -================== - - * update connect - -3.0.0 / 2012-10-23 -================== - - * add `make clean` - * add "Basic" check to req.auth - * add `req.auth` test coverage - * add cb && cb(payload) to `res.jsonp()`. Closes #1374 - * add backwards compat for `res.redirect()` status. Closes #1336 - * add support for `res.json()` to retain previously defined Content-Types. Closes #1349 - * update connect - * change `res.redirect()` to utilize a pathname-relative Location again. Closes #1382 - * remove non-primitive string support for `res.send()` - * fix view-locals example. Closes #1370 - * fix route-separation example - -3.0.0rc5 / 2012-09-18 -================== - - * update connect - * add redis search example - * add static-files example - * add "x-powered-by" setting (`app.disable('x-powered-by')`) - * add "application/octet-stream" redirect Accept test case. Closes #1317 - -3.0.0rc4 / 2012-08-30 -================== - - * add `res.jsonp()`. Closes #1307 - * add "verbose errors" option to error-pages example - * add another route example to express(1) so people are not so confused - * add redis online user activity tracking example - * update connect dep - * fix etag quoting. Closes #1310 - * fix error-pages 404 status - * fix jsonp callback char restrictions - * remove old OPTIONS default response - -3.0.0rc3 / 2012-08-13 -================== - - * update connect dep - * fix signed cookies to work with `connect.cookieParser()` ("s:" prefix was missing) [tnydwrds] - * fix `res.render()` clobbering of "locals" - -3.0.0rc2 / 2012-08-03 -================== - - * add CORS example - * update connect dep - * deprecate `.createServer()` & remove old stale examples - * fix: escape `res.redirect()` link - * fix vhost example - -3.0.0rc1 / 2012-07-24 -================== - - * add more examples to view-locals - * add scheme-relative redirects (`res.redirect("//foo.com")`) support - * update cookie dep - * update connect dep - * update send dep - * fix `express(1)` -h flag, use -H for hogan. Closes #1245 - * fix `res.sendfile()` socket error handling regression - -3.0.0beta7 / 2012-07-16 -================== - - * update connect dep for `send()` root normalization regression - -3.0.0beta6 / 2012-07-13 -================== - - * add `err.view` property for view errors. Closes #1226 - * add "jsonp callback name" setting - * add support for "/foo/:bar*" non-greedy matches - * change `res.sendfile()` to use `send()` module - * change `res.send` to use "response-send" module - * remove `app.locals.use` and `res.locals.use`, use regular middleware - -3.0.0beta5 / 2012-07-03 -================== - - * add "make check" support - * add route-map example - * add `res.json(obj, status)` support back for BC - * add "methods" dep, remove internal methods module - * update connect dep - * update auth example to utilize cores pbkdf2 - * updated tests to use "supertest" - -3.0.0beta4 / 2012-06-25 -================== - - * Added `req.auth` - * Added `req.range(size)` - * Added `res.links(obj)` - * Added `res.send(body, status)` support back for backwards compat - * Added `.default()` support to `res.format()` - * Added 2xx / 304 check to `req.fresh` - * Revert "Added + support to the router" - * Fixed `res.send()` freshness check, respect res.statusCode - -3.0.0beta3 / 2012-06-15 -================== - - * Added hogan `--hjs` to express(1) [nullfirm] - * Added another example to content-negotiation - * Added `fresh` dep - * Changed: `res.send()` always checks freshness - * Fixed: expose connects mime module. Cloases #1165 - -3.0.0beta2 / 2012-06-06 -================== - - * Added `+` support to the router - * Added `req.host` - * Changed `req.param()` to check route first - * Update connect dep - -3.0.0beta1 / 2012-06-01 -================== - - * Added `res.format()` callback to override default 406 behaviour - * Fixed `res.redirect()` 406. Closes #1154 - -3.0.0alpha5 / 2012-05-30 -================== - - * Added `req.ip` - * Added `{ signed: true }` option to `res.cookie()` - * Removed `res.signedCookie()` - * Changed: dont reverse `req.ips` - * Fixed "trust proxy" setting check for `req.ips` - -3.0.0alpha4 / 2012-05-09 -================== - - * Added: allow `[]` in jsonp callback. Closes #1128 - * Added `PORT` env var support in generated template. Closes #1118 [benatkin] - * Updated: connect 2.2.2 - -3.0.0alpha3 / 2012-05-04 -================== - - * Added public `app.routes`. Closes #887 - * Added _view-locals_ example - * Added _mvc_ example - * Added `res.locals.use()`. Closes #1120 - * Added conditional-GET support to `res.send()` - * Added: coerce `res.set()` values to strings - * Changed: moved `static()` in generated apps below router - * Changed: `res.send()` only set ETag when not previously set - * Changed connect 2.2.1 dep - * Changed: `make test` now runs unit / acceptance tests - * Fixed req/res proto inheritance - -3.0.0alpha2 / 2012-04-26 -================== - - * Added `make benchmark` back - * Added `res.send()` support for `String` objects - * Added client-side data exposing example - * Added `res.header()` and `req.header()` aliases for BC - * Added `express.createServer()` for BC - * Perf: memoize parsed urls - * Perf: connect 2.2.0 dep - * Changed: make `expressInit()` middleware self-aware - * Fixed: use app.get() for all core settings - * Fixed redis session example - * Fixed session example. Closes #1105 - * Fixed generated express dep. Closes #1078 - -3.0.0alpha1 / 2012-04-15 -================== - - * Added `app.locals.use(callback)` - * Added `app.locals` object - * Added `app.locals(obj)` - * Added `res.locals` object - * Added `res.locals(obj)` - * Added `res.format()` for content-negotiation - * Added `app.engine()` - * Added `res.cookie()` JSON cookie support - * Added "trust proxy" setting - * Added `req.subdomains` - * Added `req.protocol` - * Added `req.secure` - * Added `req.path` - * Added `req.ips` - * Added `req.fresh` - * Added `req.stale` - * Added comma-delmited / array support for `req.accepts()` - * Added debug instrumentation - * Added `res.set(obj)` - * Added `res.set(field, value)` - * Added `res.get(field)` - * Added `app.get(setting)`. Closes #842 - * Added `req.acceptsLanguage()` - * Added `req.acceptsCharset()` - * Added `req.accepted` - * Added `req.acceptedLanguages` - * Added `req.acceptedCharsets` - * Added "json replacer" setting - * Added "json spaces" setting - * Added X-Forwarded-Proto support to `res.redirect()`. Closes #92 - * Added `--less` support to express(1) - * Added `express.response` prototype - * Added `express.request` prototype - * Added `express.application` prototype - * Added `app.path()` - * Added `app.render()` - * Added `res.type()` to replace `res.contentType()` - * Changed: `res.redirect()` to add relative support - * Changed: enable "jsonp callback" by default - * Changed: renamed "case sensitive routes" to "case sensitive routing" - * Rewrite of all tests with mocha - * Removed "root" setting - * Removed `res.redirect('home')` support - * Removed `req.notify()` - * Removed `app.register()` - * Removed `app.redirect()` - * Removed `app.is()` - * Removed `app.helpers()` - * Removed `app.dynamicHelpers()` - * Fixed `res.sendfile()` with non-GET. Closes #723 - * Fixed express(1) public dir for windows. Closes #866 - -2.5.9/ 2012-04-02 -================== - - * Added support for PURGE request method [pbuyle] - * Fixed `express(1)` generated app `app.address()` before `listening` [mmalecki] - -2.5.8 / 2012-02-08 -================== - - * Update mkdirp dep. Closes #991 - -2.5.7 / 2012-02-06 -================== - - * Fixed `app.all` duplicate DELETE requests [mscdex] - -2.5.6 / 2012-01-13 -================== - - * Updated hamljs dev dep. Closes #953 - -2.5.5 / 2012-01-08 -================== - - * Fixed: set `filename` on cached templates [matthewleon] - -2.5.4 / 2012-01-02 -================== - - * Fixed `express(1)` eol on 0.4.x. Closes #947 - -2.5.3 / 2011-12-30 -================== - - * Fixed `req.is()` when a charset is present - -2.5.2 / 2011-12-10 -================== - - * Fixed: express(1) LF -> CRLF for windows - -2.5.1 / 2011-11-17 -================== - - * Changed: updated connect to 1.8.x - * Removed sass.js support from express(1) - -2.5.0 / 2011-10-24 -================== - - * Added ./routes dir for generated app by default - * Added npm install reminder to express(1) app gen - * Added 0.5.x support - * Removed `make test-cov` since it wont work with node 0.5.x - * Fixed express(1) public dir for windows. Closes #866 - -2.4.7 / 2011-10-05 -================== - - * Added mkdirp to express(1). Closes #795 - * Added simple _json-config_ example - * Added shorthand for the parsed request's pathname via `req.path` - * Changed connect dep to 1.7.x to fix npm issue... - * Fixed `res.redirect()` __HEAD__ support. [reported by xerox] - * Fixed `req.flash()`, only escape args - * Fixed absolute path checking on windows. Closes #829 [reported by andrewpmckenzie] - -2.4.6 / 2011-08-22 -================== - - * Fixed multiple param callback regression. Closes #824 [reported by TroyGoode] - -2.4.5 / 2011-08-19 -================== - - * Added support for routes to handle errors. Closes #809 - * Added `app.routes.all()`. Closes #803 - * Added "basepath" setting to work in conjunction with reverse proxies etc. - * Refactored `Route` to use a single array of callbacks - * Added support for multiple callbacks for `app.param()`. Closes #801 -Closes #805 - * Changed: removed .call(self) for route callbacks - * Dependency: `qs >= 0.3.1` - * Fixed `res.redirect()` on windows due to `join()` usage. Closes #808 - -2.4.4 / 2011-08-05 -================== - - * Fixed `res.header()` intention of a set, even when `undefined` - * Fixed `*`, value no longer required - * Fixed `res.send(204)` support. Closes #771 - -2.4.3 / 2011-07-14 -================== - - * Added docs for `status` option special-case. Closes #739 - * Fixed `options.filename`, exposing the view path to template engines - -2.4.2. / 2011-07-06 -================== - - * Revert "removed jsonp stripping" for XSS - -2.4.1 / 2011-07-06 -================== - - * Added `res.json()` JSONP support. Closes #737 - * Added _extending-templates_ example. Closes #730 - * Added "strict routing" setting for trailing slashes - * Added support for multiple envs in `app.configure()` calls. Closes #735 - * Changed: `res.send()` using `res.json()` - * Changed: when cookie `path === null` don't default it - * Changed; default cookie path to "home" setting. Closes #731 - * Removed _pids/logs_ creation from express(1) - -2.4.0 / 2011-06-28 -================== - - * Added chainable `res.status(code)` - * Added `res.json()`, an explicit version of `res.send(obj)` - * Added simple web-service example - -2.3.12 / 2011-06-22 -================== - - * \#express is now on freenode! come join! - * Added `req.get(field, param)` - * Added links to Japanese documentation, thanks @hideyukisaito! - * Added; the `express(1)` generated app outputs the env - * Added `content-negotiation` example - * Dependency: connect >= 1.5.1 < 2.0.0 - * Fixed view layout bug. Closes #720 - * Fixed; ignore body on 304. Closes #701 - -2.3.11 / 2011-06-04 -================== - - * Added `npm test` - * Removed generation of dummy test file from `express(1)` - * Fixed; `express(1)` adds express as a dep - * Fixed; prune on `prepublish` - -2.3.10 / 2011-05-27 -================== - - * Added `req.route`, exposing the current route - * Added _package.json_ generation support to `express(1)` - * Fixed call to `app.param()` function for optional params. Closes #682 - -2.3.9 / 2011-05-25 -================== - - * Fixed bug-ish with `../' in `res.partial()` calls - -2.3.8 / 2011-05-24 -================== - - * Fixed `app.options()` - -2.3.7 / 2011-05-23 -================== - - * Added route `Collection`, ex: `app.get('/user/:id').remove();` - * Added support for `app.param(fn)` to define param logic - * Removed `app.param()` support for callback with return value - * Removed module.parent check from express(1) generated app. Closes #670 - * Refactored router. Closes #639 - -2.3.6 / 2011-05-20 -================== - - * Changed; using devDependencies instead of git submodules - * Fixed redis session example - * Fixed markdown example - * Fixed view caching, should not be enabled in development - -2.3.5 / 2011-05-20 -================== - - * Added export `.view` as alias for `.View` - -2.3.4 / 2011-05-08 -================== - - * Added `./examples/say` - * Fixed `res.sendfile()` bug preventing the transfer of files with spaces - -2.3.3 / 2011-05-03 -================== - - * Added "case sensitive routes" option. - * Changed; split methods supported per rfc [slaskis] - * Fixed route-specific middleware when using the same callback function several times - -2.3.2 / 2011-04-27 -================== - - * Fixed view hints - -2.3.1 / 2011-04-26 -================== - - * Added `app.match()` as `app.match.all()` - * Added `app.lookup()` as `app.lookup.all()` - * Added `app.remove()` for `app.remove.all()` - * Added `app.remove.VERB()` - * Fixed template caching collision issue. Closes #644 - * Moved router over from connect and started refactor - -2.3.0 / 2011-04-25 -================== - - * Added options support to `res.clearCookie()` - * Added `res.helpers()` as alias of `res.locals()` - * Added; json defaults to UTF-8 with `res.send()`. Closes #632. [Daniel * Dependency `connect >= 1.4.0` - * Changed; auto set Content-Type in res.attachement [Aaron Heckmann] - * Renamed "cache views" to "view cache". Closes #628 - * Fixed caching of views when using several apps. Closes #637 - * Fixed gotcha invoking `app.param()` callbacks once per route middleware. -Closes #638 - * Fixed partial lookup precedence. Closes #631 -Shaw] - -2.2.2 / 2011-04-12 -================== - - * Added second callback support for `res.download()` connection errors - * Fixed `filename` option passing to template engine - -2.2.1 / 2011-04-04 -================== - - * Added `layout(path)` helper to change the layout within a view. Closes #610 - * Fixed `partial()` collection object support. - Previously only anything with `.length` would work. - When `.length` is present one must still be aware of holes, - however now `{ collection: {foo: 'bar'}}` is valid, exposes - `keyInCollection` and `keysInCollection`. - - * Performance improved with better view caching - * Removed `request` and `response` locals - * Changed; errorHandler page title is now `Express` instead of `Connect` - -2.2.0 / 2011-03-30 -================== - - * Added `app.lookup.VERB()`, ex `app.lookup.put('/user/:id')`. Closes #606 - * Added `app.match.VERB()`, ex `app.match.put('/user/12')`. Closes #606 - * Added `app.VERB(path)` as alias of `app.lookup.VERB()`. - * Dependency `connect >= 1.2.0` - -2.1.1 / 2011-03-29 -================== - - * Added; expose `err.view` object when failing to locate a view - * Fixed `res.partial()` call `next(err)` when no callback is given [reported by aheckmann] - * Fixed; `res.send(undefined)` responds with 204 [aheckmann] - -2.1.0 / 2011-03-24 -================== - - * Added `/_?` partial lookup support. Closes #447 - * Added `request`, `response`, and `app` local variables - * Added `settings` local variable, containing the app's settings - * Added `req.flash()` exception if `req.session` is not available - * Added `res.send(bool)` support (json response) - * Fixed stylus example for latest version - * Fixed; wrap try/catch around `res.render()` - -2.0.0 / 2011-03-17 -================== - - * Fixed up index view path alternative. - * Changed; `res.locals()` without object returns the locals - -2.0.0rc3 / 2011-03-17 -================== - - * Added `res.locals(obj)` to compliment `res.local(key, val)` - * Added `res.partial()` callback support - * Fixed recursive error reporting issue in `res.render()` - -2.0.0rc2 / 2011-03-17 -================== - - * Changed; `partial()` "locals" are now optional - * Fixed `SlowBuffer` support. Closes #584 [reported by tyrda01] - * Fixed .filename view engine option [reported by drudge] - * Fixed blog example - * Fixed `{req,res}.app` reference when mounting [Ben Weaver] - -2.0.0rc / 2011-03-14 -================== - - * Fixed; expose `HTTPSServer` constructor - * Fixed express(1) default test charset. Closes #579 [reported by secoif] - * Fixed; default charset to utf-8 instead of utf8 for lame IE [reported by NickP] - -2.0.0beta3 / 2011-03-09 -================== - - * Added support for `res.contentType()` literal - The original `res.contentType('.json')`, - `res.contentType('application/json')`, and `res.contentType('json')` - will work now. - * Added `res.render()` status option support back - * Added charset option for `res.render()` - * Added `.charset` support (via connect 1.0.4) - * Added view resolution hints when in development and a lookup fails - * Added layout lookup support relative to the page view. - For example while rendering `./views/user/index.jade` if you create - `./views/user/layout.jade` it will be used in favour of the root layout. - * Fixed `res.redirect()`. RFC states absolute url [reported by unlink] - * Fixed; default `res.send()` string charset to utf8 - * Removed `Partial` constructor (not currently used) - -2.0.0beta2 / 2011-03-07 -================== - - * Added res.render() `.locals` support back to aid in migration process - * Fixed flash example - -2.0.0beta / 2011-03-03 -================== - - * Added HTTPS support - * Added `res.cookie()` maxAge support - * Added `req.header()` _Referrer_ / _Referer_ special-case, either works - * Added mount support for `res.redirect()`, now respects the mount-point - * Added `union()` util, taking place of `merge(clone())` combo - * Added stylus support to express(1) generated app - * Added secret to session middleware used in examples and generated app - * Added `res.local(name, val)` for progressive view locals - * Added default param support to `req.param(name, default)` - * Added `app.disabled()` and `app.enabled()` - * Added `app.register()` support for omitting leading ".", either works - * Added `res.partial()`, using the same interface as `partial()` within a view. Closes #539 - * Added `app.param()` to map route params to async/sync logic - * Added; aliased `app.helpers()` as `app.locals()`. Closes #481 - * Added extname with no leading "." support to `res.contentType()` - * Added `cache views` setting, defaulting to enabled in "production" env - * Added index file partial resolution, eg: partial('user') may try _views/user/index.jade_. - * Added `req.accepts()` support for extensions - * Changed; `res.download()` and `res.sendfile()` now utilize Connect's - static file server `connect.static.send()`. - * Changed; replaced `connect.utils.mime()` with npm _mime_ module - * Changed; allow `req.query` to be pre-defined (via middleware or other parent - * Changed view partial resolution, now relative to parent view - * Changed view engine signature. no longer `engine.render(str, options, callback)`, now `engine.compile(str, options) -> Function`, the returned function accepts `fn(locals)`. - * Fixed `req.param()` bug returning Array.prototype methods. Closes #552 - * Fixed; using `Stream#pipe()` instead of `sys.pump()` in `res.sendfile()` - * Fixed; using _qs_ module instead of _querystring_ - * Fixed; strip unsafe chars from jsonp callbacks - * Removed "stream threshold" setting - -1.0.8 / 2011-03-01 -================== - - * Allow `req.query` to be pre-defined (via middleware or other parent app) - * "connect": ">= 0.5.0 < 1.0.0". Closes #547 - * Removed the long deprecated __EXPRESS_ENV__ support - -1.0.7 / 2011-02-07 -================== - - * Fixed `render()` setting inheritance. - Mounted apps would not inherit "view engine" - -1.0.6 / 2011-02-07 -================== - - * Fixed `view engine` setting bug when period is in dirname - -1.0.5 / 2011-02-05 -================== - - * Added secret to generated app `session()` call - -1.0.4 / 2011-02-05 -================== - - * Added `qs` dependency to _package.json_ - * Fixed namespaced `require()`s for latest connect support - -1.0.3 / 2011-01-13 -================== - - * Remove unsafe characters from JSONP callback names [Ryan Grove] - -1.0.2 / 2011-01-10 -================== - - * Removed nested require, using `connect.router` - -1.0.1 / 2010-12-29 -================== - - * Fixed for middleware stacked via `createServer()` - previously the `foo` middleware passed to `createServer(foo)` - would not have access to Express methods such as `res.send()` - or props like `req.query` etc. - -1.0.0 / 2010-11-16 -================== - - * Added; deduce partial object names from the last segment. - For example by default `partial('forum/post', postObject)` will - give you the _post_ object, providing a meaningful default. - * Added http status code string representation to `res.redirect()` body - * Added; `res.redirect()` supporting _text/plain_ and _text/html_ via __Accept__. - * Added `req.is()` to aid in content negotiation - * Added partial local inheritance [suggested by masylum]. Closes #102 - providing access to parent template locals. - * Added _-s, --session[s]_ flag to express(1) to add session related middleware - * Added _--template_ flag to express(1) to specify the - template engine to use. - * Added _--css_ flag to express(1) to specify the - stylesheet engine to use (or just plain css by default). - * Added `app.all()` support [thanks aheckmann] - * Added partial direct object support. - You may now `partial('user', user)` providing the "user" local, - vs previously `partial('user', { object: user })`. - * Added _route-separation_ example since many people question ways - to do this with CommonJS modules. Also view the _blog_ example for - an alternative. - * Performance; caching view path derived partial object names - * Fixed partial local inheritance precedence. [reported by Nick Poulden] Closes #454 - * Fixed jsonp support; _text/javascript_ as per mailinglist discussion - -1.0.0rc4 / 2010-10-14 -================== - - * Added _NODE_ENV_ support, _EXPRESS_ENV_ is deprecated and will be removed in 1.0.0 - * Added route-middleware support (very helpful, see the [docs](http://expressjs.com/guide.html#Route-Middleware)) - * Added _jsonp callback_ setting to enable/disable jsonp autowrapping [Dav Glass] - * Added callback query check on response.send to autowrap JSON objects for simple webservice implementations [Dav Glass] - * Added `partial()` support for array-like collections. Closes #434 - * Added support for swappable querystring parsers - * Added session usage docs. Closes #443 - * Added dynamic helper caching. Closes #439 [suggested by maritz] - * Added authentication example - * Added basic Range support to `res.sendfile()` (and `res.download()` etc) - * Changed; `express(1)` generated app using 2 spaces instead of 4 - * Default env to "development" again [aheckmann] - * Removed _context_ option is no more, use "scope" - * Fixed; exposing _./support_ libs to examples so they can run without installs - * Fixed mvc example - -1.0.0rc3 / 2010-09-20 -================== - - * Added confirmation for `express(1)` app generation. Closes #391 - * Added extending of flash formatters via `app.flashFormatters` - * Added flash formatter support. Closes #411 - * Added streaming support to `res.sendfile()` using `sys.pump()` when >= "stream threshold" - * Added _stream threshold_ setting for `res.sendfile()` - * Added `res.send()` __HEAD__ support - * Added `res.clearCookie()` - * Added `res.cookie()` - * Added `res.render()` headers option - * Added `res.redirect()` response bodies - * Added `res.render()` status option support. Closes #425 [thanks aheckmann] - * Fixed `res.sendfile()` responding with 403 on malicious path - * Fixed `res.download()` bug; when an error occurs remove _Content-Disposition_ - * Fixed; mounted apps settings now inherit from parent app [aheckmann] - * Fixed; stripping Content-Length / Content-Type when 204 - * Fixed `res.send()` 204. Closes #419 - * Fixed multiple _Set-Cookie_ headers via `res.header()`. Closes #402 - * Fixed bug messing with error handlers when `listenFD()` is called instead of `listen()`. [thanks guillermo] - - -1.0.0rc2 / 2010-08-17 -================== - - * Added `app.register()` for template engine mapping. Closes #390 - * Added `res.render()` callback support as second argument (no options) - * Added callback support to `res.download()` - * Added callback support for `res.sendfile()` - * Added support for middleware access via `express.middlewareName()` vs `connect.middlewareName()` - * Added "partials" setting to docs - * Added default expresso tests to `express(1)` generated app. Closes #384 - * Fixed `res.sendfile()` error handling, defer via `next()` - * Fixed `res.render()` callback when a layout is used [thanks guillermo] - * Fixed; `make install` creating ~/.node_libraries when not present - * Fixed issue preventing error handlers from being defined anywhere. Closes #387 - -1.0.0rc / 2010-07-28 -================== - - * Added mounted hook. Closes #369 - * Added connect dependency to _package.json_ - - * Removed "reload views" setting and support code - development env never caches, production always caches. - - * Removed _param_ in route callbacks, signature is now - simply (req, res, next), previously (req, res, params, next). - Use _req.params_ for path captures, _req.query_ for GET params. - - * Fixed "home" setting - * Fixed middleware/router precedence issue. Closes #366 - * Fixed; _configure()_ callbacks called immediately. Closes #368 - -1.0.0beta2 / 2010-07-23 -================== - - * Added more examples - * Added; exporting `Server` constructor - * Added `Server#helpers()` for view locals - * Added `Server#dynamicHelpers()` for dynamic view locals. Closes #349 - * Added support for absolute view paths - * Added; _home_ setting defaults to `Server#route` for mounted apps. Closes #363 - * Added Guillermo Rauch to the contributor list - * Added support for "as" for non-collection partials. Closes #341 - * Fixed _install.sh_, ensuring _~/.node_libraries_ exists. Closes #362 [thanks jf] - * Fixed `res.render()` exceptions, now passed to `next()` when no callback is given [thanks guillermo] - * Fixed instanceof `Array` checks, now `Array.isArray()` - * Fixed express(1) expansion of public dirs. Closes #348 - * Fixed middleware precedence. Closes #345 - * Fixed view watcher, now async [thanks aheckmann] - -1.0.0beta / 2010-07-15 -================== - - * Re-write - - much faster - - much lighter - - Check [ExpressJS.com](http://expressjs.com) for migration guide and updated docs - -0.14.0 / 2010-06-15 -================== - - * Utilize relative requires - * Added Static bufferSize option [aheckmann] - * Fixed caching of view and partial subdirectories [aheckmann] - * Fixed mime.type() comments now that ".ext" is not supported - * Updated haml submodule - * Updated class submodule - * Removed bin/express - -0.13.0 / 2010-06-01 -================== - - * Added node v0.1.97 compatibility - * Added support for deleting cookies via Request#cookie('key', null) - * Updated haml submodule - * Fixed not-found page, now using using charset utf-8 - * Fixed show-exceptions page, now using using charset utf-8 - * Fixed view support due to fs.readFile Buffers - * Changed; mime.type() no longer accepts ".type" due to node extname() changes - -0.12.0 / 2010-05-22 -================== - - * Added node v0.1.96 compatibility - * Added view `helpers` export which act as additional local variables - * Updated haml submodule - * Changed ETag; removed inode, modified time only - * Fixed LF to CRLF for setting multiple cookies - * Fixed cookie complation; values are now urlencoded - * Fixed cookies parsing; accepts quoted values and url escaped cookies - -0.11.0 / 2010-05-06 -================== - - * Added support for layouts using different engines - - this.render('page.html.haml', { layout: 'super-cool-layout.html.ejs' }) - - this.render('page.html.haml', { layout: 'foo' }) // assumes 'foo.html.haml' - - this.render('page.html.haml', { layout: false }) // no layout - * Updated ext submodule - * Updated haml submodule - * Fixed EJS partial support by passing along the context. Issue #307 - -0.10.1 / 2010-05-03 -================== - - * Fixed binary uploads. - -0.10.0 / 2010-04-30 -================== - - * Added charset support via Request#charset (automatically assigned to 'UTF-8' when respond()'s - encoding is set to 'utf8' or 'utf-8'. - * Added "encoding" option to Request#render(). Closes #299 - * Added "dump exceptions" setting, which is enabled by default. - * Added simple ejs template engine support - * Added error reponse support for text/plain, application/json. Closes #297 - * Added callback function param to Request#error() - * Added Request#sendHead() - * Added Request#stream() - * Added support for Request#respond(304, null) for empty response bodies - * Added ETag support to Request#sendfile() - * Added options to Request#sendfile(), passed to fs.createReadStream() - * Added filename arg to Request#download() - * Performance enhanced due to pre-reversing plugins so that plugins.reverse() is not called on each request - * Performance enhanced by preventing several calls to toLowerCase() in Router#match() - * Changed; Request#sendfile() now streams - * Changed; Renamed Request#halt() to Request#respond(). Closes #289 - * Changed; Using sys.inspect() instead of JSON.encode() for error output - * Changed; run() returns the http.Server instance. Closes #298 - * Changed; Defaulting Server#host to null (INADDR_ANY) - * Changed; Logger "common" format scale of 0.4f - * Removed Logger "request" format - * Fixed; Catching ENOENT in view caching, preventing error when "views/partials" is not found - * Fixed several issues with http client - * Fixed Logger Content-Length output - * Fixed bug preventing Opera from retaining the generated session id. Closes #292 - -0.9.0 / 2010-04-14 -================== - - * Added DSL level error() route support - * Added DSL level notFound() route support - * Added Request#error() - * Added Request#notFound() - * Added Request#render() callback function. Closes #258 - * Added "max upload size" setting - * Added "magic" variables to collection partials (\_\_index\_\_, \_\_length\_\_, \_\_isFirst\_\_, \_\_isLast\_\_). Closes #254 - * Added [haml.js](http://github.com/visionmedia/haml.js) submodule; removed haml-js - * Added callback function support to Request#halt() as 3rd/4th arg - * Added preprocessing of route param wildcards using param(). Closes #251 - * Added view partial support (with collections etc) - * Fixed bug preventing falsey params (such as ?page=0). Closes #286 - * Fixed setting of multiple cookies. Closes #199 - * Changed; view naming convention is now NAME.TYPE.ENGINE (for example page.html.haml) - * Changed; session cookie is now httpOnly - * Changed; Request is no longer global - * Changed; Event is no longer global - * Changed; "sys" module is no longer global - * Changed; moved Request#download to Static plugin where it belongs - * Changed; Request instance created before body parsing. Closes #262 - * Changed; Pre-caching views in memory when "cache view contents" is enabled. Closes #253 - * Changed; Pre-caching view partials in memory when "cache view partials" is enabled - * Updated support to node --version 0.1.90 - * Updated dependencies - * Removed set("session cookie") in favour of use(Session, { cookie: { ... }}) - * Removed utils.mixin(); use Object#mergeDeep() - -0.8.0 / 2010-03-19 -================== - - * Added coffeescript example app. Closes #242 - * Changed; cache api now async friendly. Closes #240 - * Removed deprecated 'express/static' support. Use 'express/plugins/static' - -0.7.6 / 2010-03-19 -================== - - * Added Request#isXHR. Closes #229 - * Added `make install` (for the executable) - * Added `express` executable for setting up simple app templates - * Added "GET /public/*" to Static plugin, defaulting to /public - * Added Static plugin - * Fixed; Request#render() only calls cache.get() once - * Fixed; Namespacing View caches with "view:" - * Fixed; Namespacing Static caches with "static:" - * Fixed; Both example apps now use the Static plugin - * Fixed set("views"). Closes #239 - * Fixed missing space for combined log format - * Deprecated Request#sendfile() and 'express/static' - * Removed Server#running - -0.7.5 / 2010-03-16 -================== - - * Added Request#flash() support without args, now returns all flashes - * Updated ext submodule - -0.7.4 / 2010-03-16 -================== - - * Fixed session reaper - * Changed; class.js replacing js-oo Class implementation (quite a bit faster, no browser cruft) - -0.7.3 / 2010-03-16 -================== - - * Added package.json - * Fixed requiring of haml / sass due to kiwi removal - -0.7.2 / 2010-03-16 -================== - - * Fixed GIT submodules (HAH!) - -0.7.1 / 2010-03-16 -================== - - * Changed; Express now using submodules again until a PM is adopted - * Changed; chat example using millisecond conversions from ext - -0.7.0 / 2010-03-15 -================== - - * Added Request#pass() support (finds the next matching route, or the given path) - * Added Logger plugin (default "common" format replaces CommonLogger) - * Removed Profiler plugin - * Removed CommonLogger plugin - -0.6.0 / 2010-03-11 -================== - - * Added seed.yml for kiwi package management support - * Added HTTP client query string support when method is GET. Closes #205 - - * Added support for arbitrary view engines. - For example "foo.engine.html" will now require('engine'), - the exports from this module are cached after the first require(). - - * Added async plugin support - - * Removed usage of RESTful route funcs as http client - get() etc, use http.get() and friends - - * Removed custom exceptions - -0.5.0 / 2010-03-10 -================== - - * Added ext dependency (library of js extensions) - * Removed extname() / basename() utils. Use path module - * Removed toArray() util. Use arguments.values - * Removed escapeRegexp() util. Use RegExp.escape() - * Removed process.mixin() dependency. Use utils.mixin() - * Removed Collection - * Removed ElementCollection - * Shameless self promotion of ebook "Advanced JavaScript" (http://dev-mag.com) ;) - -0.4.0 / 2010-02-11 -================== - - * Added flash() example to sample upload app - * Added high level restful http client module (express/http) - * Changed; RESTful route functions double as HTTP clients. Closes #69 - * Changed; throwing error when routes are added at runtime - * Changed; defaulting render() context to the current Request. Closes #197 - * Updated haml submodule - -0.3.0 / 2010-02-11 -================== - - * Updated haml / sass submodules. Closes #200 - * Added flash message support. Closes #64 - * Added accepts() now allows multiple args. fixes #117 - * Added support for plugins to halt. Closes #189 - * Added alternate layout support. Closes #119 - * Removed Route#run(). Closes #188 - * Fixed broken specs due to use(Cookie) missing - -0.2.1 / 2010-02-05 -================== - - * Added "plot" format option for Profiler (for gnuplot processing) - * Added request number to Profiler plugin - * Fixed binary encoding for multi-part file uploads, was previously defaulting to UTF8 - * Fixed issue with routes not firing when not files are present. Closes #184 - * Fixed process.Promise -> events.Promise - -0.2.0 / 2010-02-03 -================== - - * Added parseParam() support for name[] etc. (allows for file inputs with "multiple" attr) Closes #180 - * Added Both Cache and Session option "reapInterval" may be "reapEvery". Closes #174 - * Added expiration support to cache api with reaper. Closes #133 - * Added cache Store.Memory#reap() - * Added Cache; cache api now uses first class Cache instances - * Added abstract session Store. Closes #172 - * Changed; cache Memory.Store#get() utilizing Collection - * Renamed MemoryStore -> Store.Memory - * Fixed use() of the same plugin several time will always use latest options. Closes #176 - -0.1.0 / 2010-02-03 -================== - - * Changed; Hooks (before / after) pass request as arg as well as evaluated in their context - * Updated node support to 0.1.27 Closes #169 - * Updated dirname(__filename) -> __dirname - * Updated libxmljs support to v0.2.0 - * Added session support with memory store / reaping - * Added quick uid() helper - * Added multi-part upload support - * Added Sass.js support / submodule - * Added production env caching view contents and static files - * Added static file caching. Closes #136 - * Added cache plugin with memory stores - * Added support to StaticFile so that it works with non-textual files. - * Removed dirname() helper - * Removed several globals (now their modules must be required) - -0.0.2 / 2010-01-10 -================== - - * Added view benchmarks; currently haml vs ejs - * Added Request#attachment() specs. Closes #116 - * Added use of node's parseQuery() util. Closes #123 - * Added `make init` for submodules - * Updated Haml - * Updated sample chat app to show messages on load - * Updated libxmljs parseString -> parseHtmlString - * Fixed `make init` to work with older versions of git - * Fixed specs can now run independant specs for those who cant build deps. Closes #127 - * Fixed issues introduced by the node url module changes. Closes 126. - * Fixed two assertions failing due to Collection#keys() returning strings - * Fixed faulty Collection#toArray() spec due to keys() returning strings - * Fixed `make test` now builds libxmljs.node before testing - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/LICENSE b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/LICENSE deleted file mode 100644 index 36075a3..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2009-2011 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/Readme.md deleted file mode 100644 index f83e5a8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/Readme.md +++ /dev/null @@ -1,180 +0,0 @@ -![express logo](http://f.cl.ly/items/0V2S1n0K1i3y1c122g04/Screen%20Shot%202012-04-11%20at%209.59.42%20AM.png) - - Fast, unopinionated, minimalist web framework for [node](http://nodejs.org). [![Build Status](https://secure.travis-ci.org/visionmedia/express.png)](http://travis-ci.org/visionmedia/express) [![Dependency Status](https://gemnasium.com/visionmedia/express.png)](https://gemnasium.com/visionmedia/express) - -```js -var express = require('express'); -var app = express(); - -app.get('/', function(req, res){ - res.send('Hello World'); -}); - -app.listen(3000); -``` - -## Installation - - $ npm install -g express - -## Quick Start - - The quickest way to get started with express is to utilize the executable `express(1)` to generate an application as shown below: - - Create the app: - - $ npm install -g express - $ express /tmp/foo && cd /tmp/foo - - Install dependencies: - - $ npm install - - Start the server: - - $ node app - -## Features - - * Built on [Connect](http://github.com/senchalabs/connect) - * Robust routing - * HTTP helpers (redirection, caching, etc) - * View system supporting 14+ template engines - * Content negotiation - * Focus on high performance - * Environment based configuration - * Executable for generating applications quickly - * High test coverage - -## Philosophy - - The Express philosophy is to provide small, robust tooling for HTTP servers. Making - it a great solution for single page applications, web sites, hybrids, or public - HTTP APIs. - - Built on Connect you can use _only_ what you need, and nothing more, applications - can be as big or as small as you like, even a single file. Express does - not force you to use any specific ORM or template engine. With support for over - 14 template engines via [Consolidate.js](http://github.com/visionmedia/consolidate.js) - you can quickly craft your perfect framework. - -## More Information - - * Join #express on freenode - * [Google Group](http://groups.google.com/group/express-js) for discussion - * Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) on twitter for updates - * Visit the [Wiki](http://github.com/visionmedia/express/wiki) - * [日本語ドキュメンテーション](http://hideyukisaito.com/doc/expressjs/) by [hideyukisaito](https://github.com/hideyukisaito) - * [Русскоязычная документация](http://express-js.ru/) - * Run express examples [online](https://runnable.com/express) - -## Viewing Examples - -Clone the Express repo, then install the dev dependencies to install all the example / test suite deps: - - $ git clone git://github.com/visionmedia/express.git --depth 1 - $ cd express - $ npm install - -then run whichever tests you want: - - $ node examples/content-negotiation - -## Running Tests - -To run the test suite first invoke the following command within the repo, installing the development dependencies: - - $ npm install - -then run the tests: - - $ make test - -## Contributors - -``` -project: express -commits: 3559 -active : 468 days -files : 237 -authors: - 1891 Tj Holowaychuk 53.1% - 1285 visionmedia 36.1% - 182 TJ Holowaychuk 5.1% - 54 Aaron Heckmann 1.5% - 34 csausdev 1.0% - 26 ciaranj 0.7% - 21 Robert Sköld 0.6% - 6 Guillermo Rauch 0.2% - 3 Dav Glass 0.1% - 3 Nick Poulden 0.1% - 2 Randy Merrill 0.1% - 2 Benny Wong 0.1% - 2 Hunter Loftis 0.1% - 2 Jake Gordon 0.1% - 2 Brian McKinney 0.1% - 2 Roman Shtylman 0.1% - 2 Ben Weaver 0.1% - 2 Dave Hoover 0.1% - 2 Eivind Fjeldstad 0.1% - 2 Daniel Shaw 0.1% - 1 Matt Colyer 0.0% - 1 Pau Ramon 0.0% - 1 Pero Pejovic 0.0% - 1 Peter Rekdal Sunde 0.0% - 1 Raynos 0.0% - 1 Teng Siong Ong 0.0% - 1 Viktor Kelemen 0.0% - 1 ctide 0.0% - 1 8bitDesigner 0.0% - 1 isaacs 0.0% - 1 mgutz 0.0% - 1 pikeas 0.0% - 1 shuwatto 0.0% - 1 tstrimple 0.0% - 1 ewoudj 0.0% - 1 Adam Sanderson 0.0% - 1 Andrii Kostenko 0.0% - 1 Andy Hiew 0.0% - 1 Arpad Borsos 0.0% - 1 Ashwin Purohit 0.0% - 1 Benjen 0.0% - 1 Darren Torpey 0.0% - 1 Greg Ritter 0.0% - 1 Gregory Ritter 0.0% - 1 James Herdman 0.0% - 1 Jim Snodgrass 0.0% - 1 Joe McCann 0.0% - 1 Jonathan Dumaine 0.0% - 1 Jonathan Palardy 0.0% - 1 Jonathan Zacsh 0.0% - 1 Justin Lilly 0.0% - 1 Ken Sato 0.0% - 1 Maciej Małecki 0.0% - 1 Masahiro Hayashi 0.0% -``` - -## License - -(The MIT License) - -Copyright (c) 2009-2012 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/bin/express b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/bin/express deleted file mode 100755 index 337c74e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/bin/express +++ /dev/null @@ -1,422 +0,0 @@ -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var exec = require('child_process').exec - , program = require('commander') - , mkdirp = require('mkdirp') - , pkg = require('../package.json') - , version = pkg.version - , os = require('os') - , fs = require('fs'); - -// CLI - -program - .version(version) - .option('-s, --sessions', 'add session support') - .option('-e, --ejs', 'add ejs engine support (defaults to jade)') - .option('-J, --jshtml', 'add jshtml engine support (defaults to jade)') - .option('-H, --hogan', 'add hogan.js engine support') - .option('-c, --css ', 'add stylesheet support (less|stylus) (defaults to plain css)') - .option('-f, --force', 'force on non-empty directory') - .parse(process.argv); - -// Path - -var path = program.args.shift() || '.'; - -// end-of-line code - -var eol = os.EOL - -// Template engine - -program.template = 'jade'; -if (program.ejs) program.template = 'ejs'; -if (program.jshtml) program.template = 'jshtml'; -if (program.hogan) program.template = 'hjs'; - -/** - * Routes index template. - */ - -var index = [ - '' - , '/*' - , ' * GET home page.' - , ' */' - , '' - , 'exports.index = function(req, res){' - , ' res.render(\'index\', { title: \'Express\' });' - , '};' -].join(eol); - -/** - * Routes users template. - */ - -var users = [ - '' - , '/*' - , ' * GET users listing.' - , ' */' - , '' - , 'exports.list = function(req, res){' - , ' res.send("respond with a resource");' - , '};' -].join(eol); - -/** - * Jade layout template. - */ - -var jadeLayout = [ - 'doctype 5' - , 'html' - , ' head' - , ' title= title' - , ' link(rel=\'stylesheet\', href=\'/stylesheets/style.css\')' - , ' body' - , ' block content' -].join(eol); - -/** - * Jade index template. - */ - -var jadeIndex = [ - 'extends layout' - , '' - , 'block content' - , ' h1= title' - , ' p Welcome to #{title}' -].join(eol); - -/** - * EJS index template. - */ - -var ejsIndex = [ - '' - , '' - , ' ' - , ' <%= title %>' - , ' ' - , ' ' - , ' ' - , '

<%= title %>

' - , '

Welcome to <%= title %>

' - , ' ' - , '' -].join(eol); - -/** - * JSHTML layout template. - */ - -var jshtmlLayout = [ - '' - , '' - , ' ' - , ' @write(title) ' - , ' ' - , ' ' - , ' ' - , ' @write(body)' - , ' ' - , '' -].join(eol); - -/** - * JSHTML index template. - */ - -var jshtmlIndex = [ - '

@write(title)

' - , '

Welcome to @write(title)

' -].join(eol); - -/** - * Hogan.js index template. - */ -var hoganIndex = [ - '' - , '' - , ' ' - , ' {{ title }}' - , ' ' - , ' ' - , ' ' - , '

{{ title }}

' - , '

Welcome to {{ title }}

' - , ' ' - , '' -].join(eol); - -/** - * Default css template. - */ - -var css = [ - 'body {' - , ' padding: 50px;' - , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;' - , '}' - , '' - , 'a {' - , ' color: #00B7FF;' - , '}' -].join(eol); - -/** - * Default less template. - */ - -var less = [ - 'body {' - , ' padding: 50px;' - , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;' - , '}' - , '' - , 'a {' - , ' color: #00B7FF;' - , '}' -].join(eol); - -/** - * Default stylus template. - */ - -var stylus = [ - 'body' - , ' padding: 50px' - , ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif' - , 'a' - , ' color: #00B7FF' -].join(eol); - -/** - * App template. - */ - -var app = [ - '' - , '/**' - , ' * Module dependencies.' - , ' */' - , '' - , 'var express = require(\'express\')' - , ' , routes = require(\'./routes\')' - , ' , user = require(\'./routes/user\')' - , ' , http = require(\'http\')' - , ' , path = require(\'path\');' - , '' - , 'var app = express();' - , '' - , '// all environments' - , 'app.set(\'port\', process.env.PORT || 3000);' - , 'app.set(\'views\', __dirname + \'/views\');' - , 'app.set(\'view engine\', \':TEMPLATE\');' - , 'app.use(express.favicon());' - , 'app.use(express.logger(\'dev\'));' - , 'app.use(express.bodyParser());' - , 'app.use(express.methodOverride());{sess}' - , 'app.use(app.router);{css}' - , 'app.use(express.static(path.join(__dirname, \'public\')));' - , '' - , '// development only' - , 'if (\'development\' == app.get(\'env\')) {' - , ' app.use(express.errorHandler());' - , '}' - , '' - , 'app.get(\'/\', routes.index);' - , 'app.get(\'/users\', user.list);' - , '' - , 'http.createServer(app).listen(app.get(\'port\'), function(){' - , ' console.log(\'Express server listening on port \' + app.get(\'port\'));' - , '});' - , '' -].join(eol); - -// Generate application - -(function createApplication(path) { - emptyDirectory(path, function(empty){ - if (empty || program.force) { - createApplicationAt(path); - } else { - program.confirm('destination is not empty, continue? ', function(ok){ - if (ok) { - process.stdin.destroy(); - createApplicationAt(path); - } else { - abort('aborting'); - } - }); - } - }); -})(path); - -/** - * Create application at the given directory `path`. - * - * @param {String} path - */ - -function createApplicationAt(path) { - console.log(); - process.on('exit', function(){ - console.log(); - console.log(' install dependencies:'); - console.log(' $ cd %s && npm install', path); - console.log(); - console.log(' run the app:'); - console.log(' $ node app'); - console.log(); - }); - - mkdir(path, function(){ - mkdir(path + '/public'); - mkdir(path + '/public/javascripts'); - mkdir(path + '/public/images'); - mkdir(path + '/public/stylesheets', function(){ - switch (program.css) { - case 'less': - write(path + '/public/stylesheets/style.less', less); - break; - case 'stylus': - write(path + '/public/stylesheets/style.styl', stylus); - break; - default: - write(path + '/public/stylesheets/style.css', css); - } - }); - - mkdir(path + '/routes', function(){ - write(path + '/routes/index.js', index); - write(path + '/routes/user.js', users); - }); - - mkdir(path + '/views', function(){ - switch (program.template) { - case 'ejs': - write(path + '/views/index.ejs', ejsIndex); - break; - case 'jade': - write(path + '/views/layout.jade', jadeLayout); - write(path + '/views/index.jade', jadeIndex); - break; - case 'jshtml': - write(path + '/views/layout.jshtml', jshtmlLayout); - write(path + '/views/index.jshtml', jshtmlIndex); - break; - case 'hjs': - write(path + '/views/index.hjs', hoganIndex); - break; - - } - }); - - // CSS Engine support - switch (program.css) { - case 'less': - app = app.replace('{css}', eol + ' app.use(require(\'less-middleware\')({ src: __dirname + \'/public\' }));'); - break; - case 'stylus': - app = app.replace('{css}', eol + ' app.use(require(\'stylus\').middleware(__dirname + \'/public\'));'); - break; - default: - app = app.replace('{css}', ''); - } - - // Session support - app = app.replace('{sess}', program.sessions - ? eol + ' app.use(express.cookieParser(\'your secret here\'));' + eol + ' app.use(express.session());' - : ''); - - // Template support - app = app.replace(':TEMPLATE', program.template); - - // package.json - var pkg = { - name: 'application-name' - , version: '0.0.1' - , private: true - , scripts: { start: 'node app.js' } - , dependencies: { - express: version - } - } - - if (program.template) pkg.dependencies[program.template] = '*'; - - // CSS Engine support - switch (program.css) { - case 'less': - pkg.dependencies['less-middleware'] = '*'; - break; - default: - if (program.css) { - pkg.dependencies[program.css] = '*'; - } - } - - write(path + '/package.json', JSON.stringify(pkg, null, 2)); - write(path + '/app.js', app); - }); -} - -/** - * Check if the given directory `path` is empty. - * - * @param {String} path - * @param {Function} fn - */ - -function emptyDirectory(path, fn) { - fs.readdir(path, function(err, files){ - if (err && 'ENOENT' != err.code) throw err; - fn(!files || !files.length); - }); -} - -/** - * echo str > path. - * - * @param {String} path - * @param {String} str - */ - -function write(path, str) { - fs.writeFile(path, str); - console.log(' \x1b[36mcreate\x1b[0m : ' + path); -} - -/** - * Mkdir -p. - * - * @param {String} path - * @param {Function} fn - */ - -function mkdir(path, fn) { - mkdirp(path, 0755, function(err){ - if (err) throw err; - console.log(' \033[36mcreate\033[0m : ' + path); - fn && fn(); - }); -} - -/** - * Exit with the given `str`. - * - * @param {String} str - */ - -function abort(str) { - console.error(str); - process.exit(1); -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/client.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/client.js deleted file mode 100644 index 8984c44..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/client.js +++ /dev/null @@ -1,25 +0,0 @@ - -var http = require('http'); - -var times = 50; - -while (times--) { - var req = http.request({ - port: 3000 - , method: 'POST' - , headers: { 'Content-Type': 'application/x-www-form-urlencoded' } - }); - - req.on('response', function(res){ - console.log(res.statusCode); - }); - - var n = 500000; - while (n--) { - req.write('foo=bar&bar=baz&'); - } - - req.write('foo=bar&bar=baz'); - - req.end(); -} \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/index.js deleted file mode 100644 index bfe9934..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/index.js +++ /dev/null @@ -1,4 +0,0 @@ - -module.exports = process.env.EXPRESS_COV - ? require('./lib-cov/express') - : require('./lib/express'); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/application.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/application.js deleted file mode 100644 index 902d574..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/application.js +++ /dev/null @@ -1,533 +0,0 @@ -/** - * Module dependencies. - */ - -var connect = require('connect') - , Router = require('./router') - , methods = require('methods') - , middleware = require('./middleware') - , debug = require('debug')('express:application') - , locals = require('./utils').locals - , View = require('./view') - , utils = connect.utils - , path = require('path') - , http = require('http') - , join = path.join; - -/** - * Application prototype. - */ - -var app = exports = module.exports = {}; - -/** - * Initialize the server. - * - * - setup default configuration - * - setup default middleware - * - setup route reflection methods - * - * @api private - */ - -app.init = function(){ - this.cache = {}; - this.settings = {}; - this.engines = {}; - this.defaultConfiguration(); -}; - -/** - * Initialize application configuration. - * - * @api private - */ - -app.defaultConfiguration = function(){ - // default settings - this.enable('x-powered-by'); - this.set('env', process.env.NODE_ENV || 'development'); - this.set('subdomain offset', 2); - debug('booting in %s mode', this.get('env')); - - // implicit middleware - this.use(connect.query()); - this.use(middleware.init(this)); - - // inherit protos - this.on('mount', function(parent){ - this.request.__proto__ = parent.request; - this.response.__proto__ = parent.response; - this.engines.__proto__ = parent.engines; - }); - - // router - this._router = new Router(this); - this.routes = this._router.map; - this.__defineGetter__('router', function(){ - this._usedRouter = true; - this._router.caseSensitive = this.enabled('case sensitive routing'); - this._router.strict = this.enabled('strict routing'); - return this._router.middleware; - }); - - // setup locals - this.locals = locals(this); - - // default locals - this.locals.settings = this.settings; - - // default configuration - this.set('views', process.cwd() + '/views'); - this.set('jsonp callback name', 'callback'); - - this.configure('development', function(){ - this.set('json spaces', 2); - }); - - this.configure('production', function(){ - this.enable('view cache'); - }); -}; - -/** - * Proxy `connect#use()` to apply settings to - * mounted applications. - * - * @param {String|Function|Server} route - * @param {Function|Server} fn - * @return {app} for chaining - * @api public - */ - -app.use = function(route, fn){ - var app; - - // default route to '/' - if ('string' != typeof route) fn = route, route = '/'; - - // express app - if (fn.handle && fn.set) app = fn; - - // restore .app property on req and res - if (app) { - app.route = route; - fn = function(req, res, next) { - var orig = req.app; - app.handle(req, res, function(err){ - req.app = res.app = orig; - req.__proto__ = orig.request; - res.__proto__ = orig.response; - next(err); - }); - }; - } - - connect.proto.use.call(this, route, fn); - - // mounted an app - if (app) { - app.parent = this; - app.emit('mount', this); - } - - return this; -}; - -/** - * Register the given template engine callback `fn` - * as `ext`. - * - * By default will `require()` the engine based on the - * file extension. For example if you try to render - * a "foo.jade" file Express will invoke the following internally: - * - * app.engine('jade', require('jade').__express); - * - * For engines that do not provide `.__express` out of the box, - * or if you wish to "map" a different extension to the template engine - * you may use this method. For example mapping the EJS template engine to - * ".html" files: - * - * app.engine('html', require('ejs').renderFile); - * - * In this case EJS provides a `.renderFile()` method with - * the same signature that Express expects: `(path, options, callback)`, - * though note that it aliases this method as `ejs.__express` internally - * so if you're using ".ejs" extensions you dont need to do anything. - * - * Some template engines do not follow this convention, the - * [Consolidate.js](https://github.com/visionmedia/consolidate.js) - * library was created to map all of node's popular template - * engines to follow this convention, thus allowing them to - * work seamlessly within Express. - * - * @param {String} ext - * @param {Function} fn - * @return {app} for chaining - * @api public - */ - -app.engine = function(ext, fn){ - if ('function' != typeof fn) throw new Error('callback function required'); - if ('.' != ext[0]) ext = '.' + ext; - this.engines[ext] = fn; - return this; -}; - -/** - * Map the given param placeholder `name`(s) to the given callback(s). - * - * Parameter mapping is used to provide pre-conditions to routes - * which use normalized placeholders. For example a _:user_id_ parameter - * could automatically load a user's information from the database without - * any additional code, - * - * The callback uses the samesignature as middleware, the only differencing - * being that the value of the placeholder is passed, in this case the _id_ - * of the user. Once the `next()` function is invoked, just like middleware - * it will continue on to execute the route, or subsequent parameter functions. - * - * app.param('user_id', function(req, res, next, id){ - * User.find(id, function(err, user){ - * if (err) { - * next(err); - * } else if (user) { - * req.user = user; - * next(); - * } else { - * next(new Error('failed to load user')); - * } - * }); - * }); - * - * @param {String|Array} name - * @param {Function} fn - * @return {app} for chaining - * @api public - */ - -app.param = function(name, fn){ - var self = this - , fns = [].slice.call(arguments, 1); - - // array - if (Array.isArray(name)) { - name.forEach(function(name){ - fns.forEach(function(fn){ - self.param(name, fn); - }); - }); - // param logic - } else if ('function' == typeof name) { - this._router.param(name); - // single - } else { - if (':' == name[0]) name = name.substr(1); - fns.forEach(function(fn){ - self._router.param(name, fn); - }); - } - - return this; -}; - -/** - * Assign `setting` to `val`, or return `setting`'s value. - * - * app.set('foo', 'bar'); - * app.get('foo'); - * // => "bar" - * - * Mounted servers inherit their parent server's settings. - * - * @param {String} setting - * @param {String} val - * @return {Server} for chaining - * @api public - */ - -app.set = function(setting, val){ - if (1 == arguments.length) { - if (this.settings.hasOwnProperty(setting)) { - return this.settings[setting]; - } else if (this.parent) { - return this.parent.set(setting); - } - } else { - this.settings[setting] = val; - return this; - } -}; - -/** - * Return the app's absolute pathname - * based on the parent(s) that have - * mounted it. - * - * For example if the application was - * mounted as "/admin", which itself - * was mounted as "/blog" then the - * return value would be "/blog/admin". - * - * @return {String} - * @api private - */ - -app.path = function(){ - return this.parent - ? this.parent.path() + this.route - : ''; -}; - -/** - * Check if `setting` is enabled (truthy). - * - * app.enabled('foo') - * // => false - * - * app.enable('foo') - * app.enabled('foo') - * // => true - * - * @param {String} setting - * @return {Boolean} - * @api public - */ - -app.enabled = function(setting){ - return !!this.set(setting); -}; - -/** - * Check if `setting` is disabled. - * - * app.disabled('foo') - * // => true - * - * app.enable('foo') - * app.disabled('foo') - * // => false - * - * @param {String} setting - * @return {Boolean} - * @api public - */ - -app.disabled = function(setting){ - return !this.set(setting); -}; - -/** - * Enable `setting`. - * - * @param {String} setting - * @return {app} for chaining - * @api public - */ - -app.enable = function(setting){ - return this.set(setting, true); -}; - -/** - * Disable `setting`. - * - * @param {String} setting - * @return {app} for chaining - * @api public - */ - -app.disable = function(setting){ - return this.set(setting, false); -}; - -/** - * Configure callback for zero or more envs, - * when no `env` is specified that callback will - * be invoked for all environments. Any combination - * can be used multiple times, in any order desired. - * - * Examples: - * - * app.configure(function(){ - * // executed for all envs - * }); - * - * app.configure('stage', function(){ - * // executed staging env - * }); - * - * app.configure('stage', 'production', function(){ - * // executed for stage and production - * }); - * - * Note: - * - * These callbacks are invoked immediately, and - * are effectively sugar for the following: - * - * var env = process.env.NODE_ENV || 'development'; - * - * switch (env) { - * case 'development': - * ... - * break; - * case 'stage': - * ... - * break; - * case 'production': - * ... - * break; - * } - * - * @param {String} env... - * @param {Function} fn - * @return {app} for chaining - * @api public - */ - -app.configure = function(env, fn){ - var envs = 'all' - , args = [].slice.call(arguments); - fn = args.pop(); - if (args.length) envs = args; - if ('all' == envs || ~envs.indexOf(this.settings.env)) fn.call(this); - return this; -}; - -/** - * Delegate `.VERB(...)` calls to `router.VERB(...)`. - */ - -methods.forEach(function(method){ - app[method] = function(path){ - if ('get' == method && 1 == arguments.length) return this.set(path); - - // if no router attached yet, attach the router - if (!this._usedRouter) this.use(this.router); - - // setup route - this._router[method].apply(this._router, arguments); - return this; - }; -}); - -/** - * Special-cased "all" method, applying the given route `path`, - * middleware, and callback to _every_ HTTP method. - * - * @param {String} path - * @param {Function} ... - * @return {app} for chaining - * @api public - */ - -app.all = function(path){ - var args = arguments; - methods.forEach(function(method){ - app[method].apply(this, args); - }, this); - return this; -}; - -// del -> delete alias - -app.del = app.delete; - -/** - * Render the given view `name` name with `options` - * and a callback accepting an error and the - * rendered template string. - * - * Example: - * - * app.render('email', { name: 'Tobi' }, function(err, html){ - * // ... - * }) - * - * @param {String} name - * @param {String|Function} options or fn - * @param {Function} fn - * @api public - */ - -app.render = function(name, options, fn){ - var opts = {} - , cache = this.cache - , engines = this.engines - , view; - - // support callback function as second arg - if ('function' == typeof options) { - fn = options, options = {}; - } - - // merge app.locals - utils.merge(opts, this.locals); - - // merge options._locals - if (options._locals) utils.merge(opts, options._locals); - - // merge options - utils.merge(opts, options); - - // set .cache unless explicitly provided - opts.cache = null == opts.cache - ? this.enabled('view cache') - : opts.cache; - - // primed cache - if (opts.cache) view = cache[name]; - - // view - if (!view) { - view = new View(name, { - defaultEngine: this.get('view engine'), - root: this.get('views'), - engines: engines - }); - - if (!view.path) { - var err = new Error('Failed to lookup view "' + name + '"'); - err.view = view; - return fn(err); - } - - // prime the cache - if (opts.cache) cache[name] = view; - } - - // render - try { - view.render(opts, fn); - } catch (err) { - fn(err); - } -}; - -/** - * Listen for connections. - * - * A node `http.Server` is returned, with this - * application (which is a `Function`) as its - * callback. If you wish to create both an HTTP - * and HTTPS server you may do so with the "http" - * and "https" modules as shown here: - * - * var http = require('http') - * , https = require('https') - * , express = require('express') - * , app = express(); - * - * http.createServer(app).listen(80); - * https.createServer({ ... }, app).listen(443); - * - * @return {http.Server} - * @api public - */ - -app.listen = function(){ - var server = http.createServer(this); - return server.listen.apply(server, arguments); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/express.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/express.js deleted file mode 100644 index 43dc28e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/express.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Module dependencies. - */ - -var connect = require('connect') - , proto = require('./application') - , Route = require('./router/route') - , Router = require('./router') - , req = require('./request') - , res = require('./response') - , utils = connect.utils; - -/** - * Expose `createApplication()`. - */ - -exports = module.exports = createApplication; - -/** - * Framework version. - */ - -exports.version = '3.1.1'; - -/** - * Expose mime. - */ - -exports.mime = connect.mime; - -/** - * Create an express application. - * - * @return {Function} - * @api public - */ - -function createApplication() { - var app = connect(); - utils.merge(app, proto); - app.request = { __proto__: req }; - app.response = { __proto__: res }; - app.init(); - return app; -} - -/** - * Expose connect.middleware as express.* - * for example `express.logger` etc. - */ - -for (var key in connect.middleware) { - Object.defineProperty( - exports - , key - , Object.getOwnPropertyDescriptor(connect.middleware, key)); -} - -/** - * Error on createServer(). - */ - -exports.createServer = function(){ - console.warn('Warning: express.createServer() is deprecated, express'); - console.warn('applications no longer inherit from http.Server,'); - console.warn('please use:'); - console.warn(''); - console.warn(' var express = require("express");'); - console.warn(' var app = express();'); - console.warn(''); - return createApplication(); -}; - -/** - * Expose the prototypes. - */ - -exports.application = proto; -exports.request = req; -exports.response = res; - -/** - * Expose constructors. - */ - -exports.Route = Route; -exports.Router = Router; - -// Error handler title - -exports.errorHandler.title = 'Express'; - diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/middleware.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/middleware.js deleted file mode 100644 index 308c5bb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/middleware.js +++ /dev/null @@ -1,33 +0,0 @@ - -/** - * Module dependencies. - */ - -var utils = require('./utils'); - -/** - * Initialization middleware, exposing the - * request and response to eachother, as well - * as defaulting the X-Powered-By header field. - * - * @param {Function} app - * @return {Function} - * @api private - */ - -exports.init = function(app){ - return function expressInit(req, res, next){ - req.app = res.app = app; - if (app.enabled('x-powered-by')) res.setHeader('X-Powered-By', 'Express'); - req.res = res; - res.req = req; - req.next = next; - - req.__proto__ = app.request; - res.__proto__ = app.response; - - res.locals = res.locals || utils.locals(res); - - next(); - } -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/request.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/request.js deleted file mode 100644 index a60bdf6..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/request.js +++ /dev/null @@ -1,496 +0,0 @@ - -/** - * Module dependencies. - */ - -var http = require('http') - , utils = require('./utils') - , connect = require('connect') - , fresh = require('fresh') - , parseRange = require('range-parser') - , parse = connect.utils.parseUrl - , mime = connect.mime; - -/** - * Request prototype. - */ - -var req = exports = module.exports = { - __proto__: http.IncomingMessage.prototype -}; - -/** - * Return request header. - * - * The `Referrer` header field is special-cased, - * both `Referrer` and `Referer` are interchangeable. - * - * Examples: - * - * req.get('Content-Type'); - * // => "text/plain" - * - * req.get('content-type'); - * // => "text/plain" - * - * req.get('Something'); - * // => undefined - * - * Aliased as `req.header()`. - * - * @param {String} name - * @return {String} - * @api public - */ - -req.get = -req.header = function(name){ - switch (name = name.toLowerCase()) { - case 'referer': - case 'referrer': - return this.headers.referrer - || this.headers.referer; - default: - return this.headers[name]; - } -}; - -/** - * Check if the given `type(s)` is acceptable, returning - * the best match when true, otherwise `undefined`, in which - * case you should respond with 406 "Not Acceptable". - * - * The `type` value may be a single mime type string - * such as "application/json", the extension name - * such as "json", a comma-delimted list such as "json, html, text/plain", - * or an array `["json", "html", "text/plain"]`. When a list - * or array is given the _best_ match, if any is returned. - * - * Examples: - * - * // Accept: text/html - * req.accepts('html'); - * // => "html" - * - * // Accept: text/*, application/json - * req.accepts('html'); - * // => "html" - * req.accepts('text/html'); - * // => "text/html" - * req.accepts('json, text'); - * // => "json" - * req.accepts('application/json'); - * // => "application/json" - * - * // Accept: text/*, application/json - * req.accepts('image/png'); - * req.accepts('png'); - * // => undefined - * - * // Accept: text/*;q=.5, application/json - * req.accepts(['html', 'json']); - * req.accepts('html, json'); - * // => "json" - * - * @param {String|Array} type(s) - * @return {String} - * @api public - */ - -req.accepts = function(type){ - return utils.accepts(type, this.get('Accept')); -}; - -/** - * Check if the given `charset` is acceptable, - * otherwise you should respond with 406 "Not Acceptable". - * - * @param {String} charset - * @return {Boolean} - * @api public - */ - -req.acceptsCharset = function(charset){ - var accepted = this.acceptedCharsets; - return accepted.length - ? ~accepted.indexOf(charset) - : true; -}; - -/** - * Check if the given `lang` is acceptable, - * otherwise you should respond with 406 "Not Acceptable". - * - * @param {String} lang - * @return {Boolean} - * @api public - */ - -req.acceptsLanguage = function(lang){ - var accepted = this.acceptedLanguages; - return accepted.length - ? ~accepted.indexOf(lang) - : true; -}; - -/** - * Parse Range header field, - * capping to the given `size`. - * - * Unspecified ranges such as "0-" require - * knowledge of your resource length. In - * the case of a byte range this is of course - * the total number of bytes. If the Range - * header field is not given `null` is returned, - * `-1` when unsatisfiable, `-2` when syntactically invalid. - * - * NOTE: remember that ranges are inclusive, so - * for example "Range: users=0-3" should respond - * with 4 users when available, not 3. - * - * @param {Number} size - * @return {Array} - * @api public - */ - -req.range = function(size){ - var range = this.get('Range'); - if (!range) return; - return parseRange(size, range); -}; - -/** - * Return an array of Accepted media types - * ordered from highest quality to lowest. - * - * Examples: - * - * [ { value: 'application/json', - * quality: 1, - * type: 'application', - * subtype: 'json' }, - * { value: 'text/html', - * quality: 0.5, - * type: 'text', - * subtype: 'html' } ] - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('accepted', function(){ - var accept = this.get('Accept'); - return accept - ? utils.parseAccept(accept) - : []; -}); - -/** - * Return an array of Accepted languages - * ordered from highest quality to lowest. - * - * Examples: - * - * Accept-Language: en;q=.5, en-us - * ['en-us', 'en'] - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('acceptedLanguages', function(){ - var accept = this.get('Accept-Language'); - return accept - ? utils - .parseQuality(accept) - .map(function(obj){ - return obj.value; - }) - : []; -}); - -/** - * Return an array of Accepted charsets - * ordered from highest quality to lowest. - * - * Examples: - * - * Accept-Charset: iso-8859-5;q=.2, unicode-1-1;q=0.8 - * ['unicode-1-1', 'iso-8859-5'] - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('acceptedCharsets', function(){ - var accept = this.get('Accept-Charset'); - return accept - ? utils - .parseQuality(accept) - .map(function(obj){ - return obj.value; - }) - : []; -}); - -/** - * Return the value of param `name` when present or `defaultValue`. - * - * - Checks route placeholders, ex: _/user/:id_ - * - Checks body params, ex: id=12, {"id":12} - * - Checks query string params, ex: ?id=12 - * - * To utilize request bodies, `req.body` - * should be an object. This can be done by using - * the `connect.bodyParser()` middleware. - * - * @param {String} name - * @param {Mixed} defaultValue - * @return {String} - * @api public - */ - -req.param = function(name, defaultValue){ - var params = this.params || {}; - var body = this.body || {}; - var query = this.query || {}; - if (null != params[name] && params.hasOwnProperty(name)) return params[name]; - if (null != body[name]) return body[name]; - if (null != query[name]) return query[name]; - return defaultValue; -}; - -/** - * Check if the incoming request contains the "Content-Type" - * header field, and it contains the give mime `type`. - * - * Examples: - * - * // With Content-Type: text/html; charset=utf-8 - * req.is('html'); - * req.is('text/html'); - * req.is('text/*'); - * // => true - * - * // When Content-Type is application/json - * req.is('json'); - * req.is('application/json'); - * req.is('application/*'); - * // => true - * - * req.is('html'); - * // => false - * - * @param {String} type - * @return {Boolean} - * @api public - */ - -req.is = function(type){ - var ct = this.get('Content-Type'); - if (!ct) return false; - ct = ct.split(';')[0]; - if (!~type.indexOf('/')) type = mime.lookup(type); - if (~type.indexOf('*')) { - type = type.split('/'); - ct = ct.split('/'); - if ('*' == type[0] && type[1] == ct[1]) return true; - if ('*' == type[1] && type[0] == ct[0]) return true; - return false; - } - return !! ~ct.indexOf(type); -}; - -/** - * Return the protocol string "http" or "https" - * when requested with TLS. When the "trust proxy" - * setting is enabled the "X-Forwarded-Proto" header - * field will be trusted. If you're running behind - * a reverse proxy that supplies https for you this - * may be enabled. - * - * @return {String} - * @api public - */ - -req.__defineGetter__('protocol', function(){ - var trustProxy = this.app.get('trust proxy'); - return this.connection.encrypted - ? 'https' - : trustProxy - ? (this.get('X-Forwarded-Proto') || 'http') - : 'http'; -}); - -/** - * Short-hand for: - * - * req.protocol == 'https' - * - * @return {Boolean} - * @api public - */ - -req.__defineGetter__('secure', function(){ - return 'https' == this.protocol; -}); - -/** - * Return the remote address, or when - * "trust proxy" is `true` return - * the upstream addr. - * - * @return {String} - * @api public - */ - -req.__defineGetter__('ip', function(){ - return this.ips[0] || this.connection.remoteAddress; -}); - -/** - * When "trust proxy" is `true`, parse - * the "X-Forwarded-For" ip address list. - * - * For example if the value were "client, proxy1, proxy2" - * you would receive the array `["client", "proxy1", "proxy2"]` - * where "proxy2" is the furthest down-stream. - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('ips', function(){ - var trustProxy = this.app.get('trust proxy'); - var val = this.get('X-Forwarded-For'); - return trustProxy && val - ? val.split(/ *, */) - : []; -}); - -/** - * Return basic auth credentials. - * - * Examples: - * - * // http://tobi:hello@example.com - * req.auth - * // => { username: 'tobi', password: 'hello' } - * - * @return {Object} or undefined - * @api public - */ - -req.__defineGetter__('auth', function(){ - // missing - var auth = this.get('Authorization'); - if (!auth) return; - - // malformed - var parts = auth.split(' '); - if ('basic' != parts[0].toLowerCase()) return; - if (!parts[1]) return; - auth = parts[1]; - - // credentials - auth = new Buffer(auth, 'base64').toString().match(/^([^:]*):(.*)$/); - if (!auth) return; - return { username: auth[1], password: auth[2] }; -}); - -/** - * Return subdomains as an array. - * - * Subdomains are the dot-separated parts of the host before the main domain of - * the app. By default, the domain of the app is assumed to be the last two - * parts of the host. This can be changed by setting "subdomain offset". - * - * For example, if the domain is "tobi.ferrets.example.com": - * If "subdomain offset" is not set, req.subdomains is `["ferrets", "tobi"]`. - * If "subdomain offset" is 3, req.subdomains is `["tobi"]`. - * - * @return {Array} - * @api public - */ - -req.__defineGetter__('subdomains', function(){ - var offset = this.app.get('subdomain offset'); - return this.get('Host') - .split('.') - .reverse() - .slice(offset); -}); - -/** - * Short-hand for `url.parse(req.url).pathname`. - * - * @return {String} - * @api public - */ - -req.__defineGetter__('path', function(){ - return parse(this).pathname; -}); - -/** - * Parse the "Host" header field hostname. - * - * @return {String} - * @api public - */ - -req.__defineGetter__('host', function(){ - var trustProxy = this.app.get('trust proxy'); - var host = trustProxy && this.get('X-Forwarded-Host'); - host = host || this.get('Host'); - return host.split(':')[0]; -}); - -/** - * Check if the request is fresh, aka - * Last-Modified and/or the ETag - * still match. - * - * @return {Boolean} - * @api public - */ - -req.__defineGetter__('fresh', function(){ - var method = this.method; - var s = this.res.statusCode; - - // GET or HEAD for weak freshness validation only - if ('GET' != method && 'HEAD' != method) return false; - - // 2xx or 304 as per rfc2616 14.26 - if ((s >= 200 && s < 300) || 304 == s) { - return fresh(this.headers, this.res._headers); - } - - return false; -}); - -/** - * Check if the request is stale, aka - * "Last-Modified" and / or the "ETag" for the - * resource has changed. - * - * @return {Boolean} - * @api public - */ - -req.__defineGetter__('stale', function(){ - return !this.fresh; -}); - -/** - * Check if the request was an _XMLHttpRequest_. - * - * @return {Boolean} - * @api public - */ - -req.__defineGetter__('xhr', function(){ - var val = this.get('X-Requested-With') || ''; - return 'xmlhttprequest' == val.toLowerCase(); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/response.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/response.js deleted file mode 100644 index 63d8955..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/response.js +++ /dev/null @@ -1,756 +0,0 @@ -/** - * Module dependencies. - */ - -var http = require('http') - , path = require('path') - , connect = require('connect') - , utils = connect.utils - , sign = require('cookie-signature').sign - , normalizeType = require('./utils').normalizeType - , normalizeTypes = require('./utils').normalizeTypes - , etag = require('./utils').etag - , statusCodes = http.STATUS_CODES - , cookie = require('cookie') - , send = require('send') - , mime = connect.mime - , basename = path.basename - , extname = path.extname - , join = path.join; - -/** - * Response prototype. - */ - -var res = module.exports = { - __proto__: http.ServerResponse.prototype -}; - -/** - * Set status `code`. - * - * @param {Number} code - * @return {ServerResponse} - * @api public - */ - -res.status = function(code){ - this.statusCode = code; - return this; -}; - -/** - * Set Link header field with the given `links`. - * - * Examples: - * - * res.links({ - * next: 'http://api.example.com/users?page=2', - * last: 'http://api.example.com/users?page=5' - * }); - * - * @param {Object} links - * @return {ServerResponse} - * @api public - */ - -res.links = function(links){ - return this.set('Link', Object.keys(links).map(function(rel){ - return '<' + links[rel] + '>; rel="' + rel + '"'; - }).join(', ')); -}; - -/** - * Send a response. - * - * Examples: - * - * res.send(new Buffer('wahoo')); - * res.send({ some: 'json' }); - * res.send('

some html

'); - * res.send(404, 'Sorry, cant find that'); - * res.send(404); - * - * @param {Mixed} body or status - * @param {Mixed} body - * @return {ServerResponse} - * @api public - */ - -res.send = function(body){ - var req = this.req - , head = 'HEAD' == req.method - , len; - - // allow status / body - if (2 == arguments.length) { - // res.send(body, status) backwards compat - if ('number' != typeof body && 'number' == typeof arguments[1]) { - this.statusCode = arguments[1]; - } else { - this.statusCode = body; - body = arguments[1]; - } - } - - switch (typeof body) { - // response status - case 'number': - this.get('Content-Type') || this.type('txt'); - this.statusCode = body; - body = http.STATUS_CODES[body]; - break; - // string defaulting to html - case 'string': - if (!this.get('Content-Type')) { - this.charset = this.charset || 'utf-8'; - this.type('html'); - } - break; - case 'boolean': - case 'object': - if (null == body) { - body = ''; - } else if (Buffer.isBuffer(body)) { - this.get('Content-Type') || this.type('bin'); - } else { - return this.json(body); - } - break; - } - - // populate Content-Length - if (undefined !== body && !this.get('Content-Length')) { - this.set('Content-Length', len = Buffer.isBuffer(body) - ? body.length - : Buffer.byteLength(body)); - } - - // ETag support - // TODO: W/ support - if (len > 1024) { - if (!this.get('ETag')) { - this.set('ETag', etag(body)); - } - } - - // freshness - if (req.fresh) this.statusCode = 304; - - // strip irrelevant headers - if (204 == this.statusCode || 304 == this.statusCode) { - this.removeHeader('Content-Type'); - this.removeHeader('Content-Length'); - this.removeHeader('Transfer-Encoding'); - body = ''; - } - - // respond - this.end(head ? null : body); - return this; -}; - -/** - * Send JSON response. - * - * Examples: - * - * res.json(null); - * res.json({ user: 'tj' }); - * res.json(500, 'oh noes!'); - * res.json(404, 'I dont have that'); - * - * @param {Mixed} obj or status - * @param {Mixed} obj - * @return {ServerResponse} - * @api public - */ - -res.json = function(obj){ - // allow status / body - if (2 == arguments.length) { - // res.json(body, status) backwards compat - if ('number' == typeof arguments[1]) { - this.statusCode = arguments[1]; - } else { - this.statusCode = obj; - obj = arguments[1]; - } - } - - // settings - var app = this.app; - var replacer = app.get('json replacer'); - var spaces = app.get('json spaces'); - var body = JSON.stringify(obj, replacer, spaces); - - // content-type - this.charset = this.charset || 'utf-8'; - this.get('Content-Type') || this.set('Content-Type', 'application/json'); - - return this.send(body); -}; - -/** - * Send JSON response with JSONP callback support. - * - * Examples: - * - * res.jsonp(null); - * res.jsonp({ user: 'tj' }); - * res.jsonp(500, 'oh noes!'); - * res.jsonp(404, 'I dont have that'); - * - * @param {Mixed} obj or status - * @param {Mixed} obj - * @return {ServerResponse} - * @api public - */ - -res.jsonp = function(obj){ - // allow status / body - if (2 == arguments.length) { - // res.json(body, status) backwards compat - if ('number' == typeof arguments[1]) { - this.statusCode = arguments[1]; - } else { - this.statusCode = obj; - obj = arguments[1]; - } - } - - // settings - var app = this.app; - var replacer = app.get('json replacer'); - var spaces = app.get('json spaces'); - var body = JSON.stringify(obj, replacer, spaces) - .replace(/\u2028/g, '\\u2028') - .replace(/\u2029/g, '\\u2029'); - var callback = this.req.query[app.get('jsonp callback name')]; - - // content-type - this.charset = this.charset || 'utf-8'; - this.set('Content-Type', 'application/json'); - - // jsonp - if (callback) { - this.set('Content-Type', 'text/javascript'); - var cb = callback.replace(/[^\[\]\w$.]/g, ''); - body = cb + ' && ' + cb + '(' + body + ');'; - } - - return this.send(body); -}; - -/** - * Transfer the file at the given `path`. - * - * Automatically sets the _Content-Type_ response header field. - * The callback `fn(err)` is invoked when the transfer is complete - * or when an error occurs. Be sure to check `res.sentHeader` - * if you wish to attempt responding, as the header and some data - * may have already been transferred. - * - * Options: - * - * - `maxAge` defaulting to 0 - * - `root` root directory for relative filenames - * - * Examples: - * - * The following example illustrates how `res.sendfile()` may - * be used as an alternative for the `static()` middleware for - * dynamic situations. The code backing `res.sendfile()` is actually - * the same code, so HTTP cache support etc is identical. - * - * app.get('/user/:uid/photos/:file', function(req, res){ - * var uid = req.params.uid - * , file = req.params.file; - * - * req.user.mayViewFilesFrom(uid, function(yes){ - * if (yes) { - * res.sendfile('/uploads/' + uid + '/' + file); - * } else { - * res.send(403, 'Sorry! you cant see that.'); - * } - * }); - * }); - * - * @param {String} path - * @param {Object|Function} options or fn - * @param {Function} fn - * @api public - */ - -res.sendfile = function(path, options, fn){ - var self = this - , req = self.req - , next = this.req.next - , options = options || {} - , done; - - // support function as second arg - if ('function' == typeof options) { - fn = options; - options = {}; - } - - // socket errors - req.socket.on('error', error); - - // errors - function error(err) { - if (done) return; - done = true; - - // clean up - cleanup(); - if (!self.headerSent) self.removeHeader('Content-Disposition'); - - // callback available - if (fn) return fn(err); - - // list in limbo if there's no callback - if (self.headerSent) return; - - // delegate - next(err); - } - - // streaming - function stream() { - if (done) return; - cleanup(); - if (fn) self.on('finish', fn); - } - - // cleanup - function cleanup() { - req.socket.removeListener('error', error); - } - - // transfer - var file = send(req, path); - if (options.root) file.root(options.root); - file.maxage(options.maxAge || 0); - file.on('error', error); - file.on('directory', next); - file.on('stream', stream); - file.pipe(this); - this.on('finish', cleanup); -}; - -/** - * Transfer the file at the given `path` as an attachment. - * - * Optionally providing an alternate attachment `filename`, - * and optional callback `fn(err)`. The callback is invoked - * when the data transfer is complete, or when an error has - * ocurred. Be sure to check `res.headerSent` if you plan to respond. - * - * This method uses `res.sendfile()`. - * - * @param {String} path - * @param {String|Function} filename or fn - * @param {Function} fn - * @api public - */ - -res.download = function(path, filename, fn){ - // support function as second arg - if ('function' == typeof filename) { - fn = filename; - filename = null; - } - - filename = filename || path; - this.set('Content-Disposition', 'attachment; filename="' + basename(filename) + '"'); - return this.sendfile(path, fn); -}; - -/** - * Set _Content-Type_ response header with `type` through `mime.lookup()` - * when it does not contain "/", or set the Content-Type to `type` otherwise. - * - * Examples: - * - * res.type('.html'); - * res.type('html'); - * res.type('json'); - * res.type('application/json'); - * res.type('png'); - * - * @param {String} type - * @return {ServerResponse} for chaining - * @api public - */ - -res.contentType = -res.type = function(type){ - return this.set('Content-Type', ~type.indexOf('/') - ? type - : mime.lookup(type)); -}; - -/** - * Respond to the Acceptable formats using an `obj` - * of mime-type callbacks. - * - * This method uses `req.accepted`, an array of - * acceptable types ordered by their quality values. - * When "Accept" is not present the _first_ callback - * is invoked, otherwise the first match is used. When - * no match is performed the server responds with - * 406 "Not Acceptable". - * - * Content-Type is set for you, however if you choose - * you may alter this within the callback using `res.type()` - * or `res.set('Content-Type', ...)`. - * - * res.format({ - * 'text/plain': function(){ - * res.send('hey'); - * }, - * - * 'text/html': function(){ - * res.send('

hey

'); - * }, - * - * 'appliation/json': function(){ - * res.send({ message: 'hey' }); - * } - * }); - * - * In addition to canonicalized MIME types you may - * also use extnames mapped to these types: - * - * res.format({ - * text: function(){ - * res.send('hey'); - * }, - * - * html: function(){ - * res.send('

hey

'); - * }, - * - * json: function(){ - * res.send({ message: 'hey' }); - * } - * }); - * - * By default Express passes an `Error` - * with a `.status` of 406 to `next(err)` - * if a match is not made. If you provide - * a `.default` callback it will be invoked - * instead. - * - * @param {Object} obj - * @return {ServerResponse} for chaining - * @api public - */ - -res.format = function(obj){ - var req = this.req - , next = req.next; - - var fn = obj.default; - if (fn) delete obj.default; - var keys = Object.keys(obj); - - var key = req.accepts(keys); - - this.set('Vary', 'Accept'); - - if (key) { - this.set('Content-Type', normalizeType(key)); - obj[key](req, this, next); - } else if (fn) { - fn(); - } else { - var err = new Error('Not Acceptable'); - err.status = 406; - err.types = normalizeTypes(keys); - next(err); - } - - return this; -}; - -/** - * Set _Content-Disposition_ header to _attachment_ with optional `filename`. - * - * @param {String} filename - * @return {ServerResponse} - * @api public - */ - -res.attachment = function(filename){ - if (filename) this.type(extname(filename)); - this.set('Content-Disposition', filename - ? 'attachment; filename="' + basename(filename) + '"' - : 'attachment'); - return this; -}; - -/** - * Set header `field` to `val`, or pass - * an object of header fields. - * - * Examples: - * - * res.set('Foo', ['bar', 'baz']); - * res.set('Accept', 'application/json'); - * res.set({ Accept: 'text/plain', 'X-API-Key': 'tobi' }); - * - * Aliased as `res.header()`. - * - * @param {String|Object|Array} field - * @param {String} val - * @return {ServerResponse} for chaining - * @api public - */ - -res.set = -res.header = function(field, val){ - if (2 == arguments.length) { - if (Array.isArray(val)) val = val.map(String); - else val = String(val); - this.setHeader(field, val); - } else { - for (var key in field) { - this.set(key, field[key]); - } - } - return this; -}; - -/** - * Get value for header `field`. - * - * @param {String} field - * @return {String} - * @api public - */ - -res.get = function(field){ - return this.getHeader(field); -}; - -/** - * Clear cookie `name`. - * - * @param {String} name - * @param {Object} options - * @param {ServerResponse} for chaining - * @api public - */ - -res.clearCookie = function(name, options){ - var opts = { expires: new Date(1), path: '/' }; - return this.cookie(name, '', options - ? utils.merge(opts, options) - : opts); -}; - -/** - * Set cookie `name` to `val`, with the given `options`. - * - * Options: - * - * - `maxAge` max-age in milliseconds, converted to `expires` - * - `signed` sign the cookie - * - `path` defaults to "/" - * - * Examples: - * - * // "Remember Me" for 15 minutes - * res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true }); - * - * // save as above - * res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true }) - * - * @param {String} name - * @param {String|Object} val - * @param {Options} options - * @api public - */ - -res.cookie = function(name, val, options){ - options = utils.merge({}, options); - var secret = this.req.secret; - var signed = options.signed; - if (signed && !secret) throw new Error('connect.cookieParser("secret") required for signed cookies'); - if ('object' == typeof val) val = 'j:' + JSON.stringify(val); - if (signed) val = 's:' + sign(val, secret); - if ('maxAge' in options) { - options.expires = new Date(Date.now() + options.maxAge); - options.maxAge /= 1000; - } - if (null == options.path) options.path = '/'; - this.set('Set-Cookie', cookie.serialize(name, String(val), options)); - return this; -}; - - -/** - * Set the location header to `url`. - * - * The given `url` can also be the name of a mapped url, for - * example by default express supports "back" which redirects - * to the _Referrer_ or _Referer_ headers or "/". - * - * Examples: - * - * res.location('/foo/bar').; - * res.location('http://example.com'); - * res.location('../login'); // /blog/post/1 -> /blog/login - * - * Mounting: - * - * When an application is mounted and `res.location()` - * is given a path that does _not_ lead with "/" it becomes - * relative to the mount-point. For example if the application - * is mounted at "/blog", the following would become "/blog/login". - * - * res.location('login'); - * - * While the leading slash would result in a location of "/login": - * - * res.location('/login'); - * - * @param {String} url - * @api public - */ - -res.location = function(url){ - var app = this.app - , req = this.req; - - // setup redirect map - var map = { back: req.get('Referrer') || '/' }; - - // perform redirect - url = map[url] || url; - - // relative - if (!~url.indexOf('://') && 0 != url.indexOf('//')) { - var path - - // relative to path - if ('.' == url[0]) { - path = req.originalUrl.split('?')[0] - url = path + ('/' == path[path.length - 1] ? '' : '/') + url; - // relative to mount-point - } else if ('/' != url[0]) { - path = app.path(); - url = path + '/' + url; - } - } - - // Respond - this.set('Location', url); - return this; -}; - -/** - * Redirect to the given `url` with optional response `status` - * defaulting to 302. - * - * The resulting `url` is determined by `res.location()`, so - * it will play nicely with mounted apps, relative paths, - * `"back"` etc. - * - * Examples: - * - * res.redirect('/foo/bar'); - * res.redirect('http://example.com'); - * res.redirect(301, 'http://example.com'); - * res.redirect('http://example.com', 301); - * res.redirect('../login'); // /blog/post/1 -> /blog/login - * - * @param {String} url - * @param {Number} code - * @api public - */ - -res.redirect = function(url){ - var app = this.app - , head = 'HEAD' == this.req.method - , status = 302 - , body; - - // allow status / url - if (2 == arguments.length) { - if ('number' == typeof url) { - status = url; - url = arguments[1]; - } else { - status = arguments[1]; - } - } - - // Set location header - this.location(url); - url = this.get('Location'); - - // Support text/{plain,html} by default - this.format({ - text: function(){ - body = statusCodes[status] + '. Redirecting to ' + encodeURI(url); - }, - - html: function(){ - var u = utils.escape(url); - body = '

' + statusCodes[status] + '. Redirecting to ' + u + '

'; - }, - - default: function(){ - body = ''; - } - }); - - // Respond - this.statusCode = status; - this.set('Content-Length', Buffer.byteLength(body)); - this.end(head ? null : body); -}; - -/** - * Render `view` with the given `options` and optional callback `fn`. - * When a callback function is given a response will _not_ be made - * automatically, otherwise a response of _200_ and _text/html_ is given. - * - * Options: - * - * - `cache` boolean hinting to the engine it should cache - * - `filename` filename of the view being rendered - * - * @param {String} view - * @param {Object|Function} options or callback function - * @param {Function} fn - * @api public - */ - -res.render = function(view, options, fn){ - var self = this - , options = options || {} - , req = this.req - , app = req.app; - - // support callback function as second arg - if ('function' == typeof options) { - fn = options, options = {}; - } - - // merge res.locals - options._locals = self.locals; - - // default callback to respond - fn = fn || function(err, str){ - if (err) return req.next(err); - self.send(str); - }; - - // render - app.render(view, options, fn); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/router/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/router/index.js deleted file mode 100644 index 662dc29..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/router/index.js +++ /dev/null @@ -1,273 +0,0 @@ -/** - * Module dependencies. - */ - -var Route = require('./route') - , utils = require('../utils') - , methods = require('methods') - , debug = require('debug')('express:router') - , parse = require('connect').utils.parseUrl; - -/** - * Expose `Router` constructor. - */ - -exports = module.exports = Router; - -/** - * Initialize a new `Router` with the given `options`. - * - * @param {Object} options - * @api private - */ - -function Router(options) { - options = options || {}; - var self = this; - this.map = {}; - this.params = {}; - this._params = []; - this.caseSensitive = options.caseSensitive; - this.strict = options.strict; - this.middleware = function router(req, res, next){ - self._dispatch(req, res, next); - }; -} - -/** - * Register a param callback `fn` for the given `name`. - * - * @param {String|Function} name - * @param {Function} fn - * @return {Router} for chaining - * @api public - */ - -Router.prototype.param = function(name, fn){ - // param logic - if ('function' == typeof name) { - this._params.push(name); - return; - } - - // apply param functions - var params = this._params - , len = params.length - , ret; - - for (var i = 0; i < len; ++i) { - if (ret = params[i](name, fn)) { - fn = ret; - } - } - - // ensure we end up with a - // middleware function - if ('function' != typeof fn) { - throw new Error('invalid param() call for ' + name + ', got ' + fn); - } - - (this.params[name] = this.params[name] || []).push(fn); - return this; -}; - -/** - * Route dispatcher aka the route "middleware". - * - * @param {IncomingMessage} req - * @param {ServerResponse} res - * @param {Function} next - * @api private - */ - -Router.prototype._dispatch = function(req, res, next){ - var params = this.params - , self = this; - - debug('dispatching %s %s (%s)', req.method, req.url, req.originalUrl); - - // route dispatch - (function pass(i, err){ - var paramCallbacks - , paramIndex = 0 - , paramVal - , route - , keys - , key; - - // match next route - function nextRoute(err) { - pass(req._route_index + 1, err); - } - - // match route - req.route = route = self.matchRequest(req, i); - - // no route - if (!route) return next(err); - debug('matched %s %s', route.method, route.path); - - // we have a route - // start at param 0 - req.params = route.params; - keys = route.keys; - i = 0; - - // param callbacks - function param(err) { - paramIndex = 0; - key = keys[i++]; - paramVal = key && req.params[key.name]; - paramCallbacks = key && params[key.name]; - - try { - if ('route' == err) { - nextRoute(); - } else if (err) { - i = 0; - callbacks(err); - } else if (paramCallbacks && undefined !== paramVal) { - paramCallback(); - } else if (key) { - param(); - } else { - i = 0; - callbacks(); - } - } catch (err) { - param(err); - } - }; - - param(err); - - // single param callbacks - function paramCallback(err) { - var fn = paramCallbacks[paramIndex++]; - if (err || !fn) return param(err); - fn(req, res, paramCallback, paramVal, key.name); - } - - // invoke route callbacks - function callbacks(err) { - var fn = route.callbacks[i++]; - try { - if ('route' == err) { - nextRoute(); - } else if (err && fn) { - if (fn.length < 4) return callbacks(err); - fn(err, req, res, callbacks); - } else if (fn) { - if (fn.length < 4) return fn(req, res, callbacks); - callbacks(); - } else { - nextRoute(err); - } - } catch (err) { - callbacks(err); - } - } - })(0); -}; - -/** - * Attempt to match a route for `req` - * with optional starting index of `i` - * defaulting to 0. - * - * @param {IncomingMessage} req - * @param {Number} i - * @return {Route} - * @api private - */ - -Router.prototype.matchRequest = function(req, i, head){ - var method = req.method.toLowerCase() - , url = parse(req) - , path = url.pathname - , routes = this.map - , i = i || 0 - , route; - - // HEAD support - if (!head && 'head' == method) { - route = this.matchRequest(req, i, true); - if (route) return route; - method = 'get'; - } - - // routes for this method - if (routes = routes[method]) { - - // matching routes - for (var len = routes.length; i < len; ++i) { - route = routes[i]; - if (route.match(path)) { - req._route_index = i; - return route; - } - } - } -}; - -/** - * Attempt to match a route for `method` - * and `url` with optional starting - * index of `i` defaulting to 0. - * - * @param {String} method - * @param {String} url - * @param {Number} i - * @return {Route} - * @api private - */ - -Router.prototype.match = function(method, url, i, head){ - var req = { method: method, url: url }; - return this.matchRequest(req, i, head); -}; - -/** - * Route `method`, `path`, and one or more callbacks. - * - * @param {String} method - * @param {String} path - * @param {Function} callback... - * @return {Router} for chaining - * @api private - */ - -Router.prototype.route = function(method, path, callbacks){ - var method = method.toLowerCase() - , callbacks = utils.flatten([].slice.call(arguments, 2)); - - // ensure path was given - if (!path) throw new Error('Router#' + method + '() requires a path'); - - // ensure all callbacks are functions - callbacks.forEach(function(fn, i){ - if ('function' == typeof fn) return; - var type = {}.toString.call(fn); - var msg = '.' + method + '() requires callback functions but got a ' + type; - throw new Error(msg); - }); - - // create the route - debug('defined %s %s', method, path); - var route = new Route(method, path, callbacks, { - sensitive: this.caseSensitive, - strict: this.strict - }); - - // add it - (this.map[method] = this.map[method] || []).push(route); - return this; -}; - -methods.forEach(function(method){ - Router.prototype[method] = function(path){ - var args = [method].concat([].slice.call(arguments)); - this.route.apply(this, args); - return this; - }; -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/router/route.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/router/route.js deleted file mode 100644 index c1a0b5e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/router/route.js +++ /dev/null @@ -1,72 +0,0 @@ - -/** - * Module dependencies. - */ - -var utils = require('../utils'); - -/** - * Expose `Route`. - */ - -module.exports = Route; - -/** - * Initialize `Route` with the given HTTP `method`, `path`, - * and an array of `callbacks` and `options`. - * - * Options: - * - * - `sensitive` enable case-sensitive routes - * - `strict` enable strict matching for trailing slashes - * - * @param {String} method - * @param {String} path - * @param {Array} callbacks - * @param {Object} options. - * @api private - */ - -function Route(method, path, callbacks, options) { - options = options || {}; - this.path = path; - this.method = method; - this.callbacks = callbacks; - this.regexp = utils.pathRegexp(path - , this.keys = [] - , options.sensitive - , options.strict); -} - -/** - * Check if this route matches `path`, if so - * populate `.params`. - * - * @param {String} path - * @return {Boolean} - * @api private - */ - -Route.prototype.match = function(path){ - var keys = this.keys - , params = this.params = [] - , m = this.regexp.exec(path); - - if (!m) return false; - - for (var i = 1, len = m.length; i < len; ++i) { - var key = keys[i - 1]; - - var val = 'string' == typeof m[i] - ? decodeURIComponent(m[i]) - : m[i]; - - if (key) { - params[key.name] = val; - } else { - params.push(val); - } - } - - return true; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/utils.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/utils.js deleted file mode 100644 index cad3a65..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/utils.js +++ /dev/null @@ -1,280 +0,0 @@ - -/** - * Module dependencies. - */ - -var mime = require('connect').mime - , crc32 = require('buffer-crc32'); - -/** - * Return ETag for `body`. - * - * @param {String|Buffer} body - * @return {String} - * @api private - */ - -exports.etag = function(body){ - return '"' + crc32.signed(body) + '"'; -}; - -/** - * Make `locals()` bound to the given `obj`. - * - * This is used for `app.locals` and `res.locals`. - * - * @param {Object} obj - * @return {Function} - * @api private - */ - -exports.locals = function(obj){ - function locals(obj){ - for (var key in obj) locals[key] = obj[key]; - return obj; - }; - - return locals; -}; - -/** - * Check if `path` looks absolute. - * - * @param {String} path - * @return {Boolean} - * @api private - */ - -exports.isAbsolute = function(path){ - if ('/' == path[0]) return true; - if (':' == path[1] && '\\' == path[2]) return true; -}; - -/** - * Flatten the given `arr`. - * - * @param {Array} arr - * @return {Array} - * @api private - */ - -exports.flatten = function(arr, ret){ - var ret = ret || [] - , len = arr.length; - for (var i = 0; i < len; ++i) { - if (Array.isArray(arr[i])) { - exports.flatten(arr[i], ret); - } else { - ret.push(arr[i]); - } - } - return ret; -}; - -/** - * Normalize the given `type`, for example "html" becomes "text/html". - * - * @param {String} type - * @return {String} - * @api private - */ - -exports.normalizeType = function(type){ - return ~type.indexOf('/') ? type : mime.lookup(type); -}; - -/** - * Normalize `types`, for example "html" becomes "text/html". - * - * @param {Array} types - * @return {Array} - * @api private - */ - -exports.normalizeTypes = function(types){ - var ret = []; - - for (var i = 0; i < types.length; ++i) { - ret.push(~types[i].indexOf('/') - ? types[i] - : mime.lookup(types[i])); - } - - return ret; -}; - -/** - * Return the acceptable type in `types`, if any. - * - * @param {Array} types - * @param {String} str - * @return {String} - * @api private - */ - -exports.acceptsArray = function(types, str){ - // accept anything when Accept is not present - if (!str) return types[0]; - - // parse - var accepted = exports.parseAccept(str) - , normalized = exports.normalizeTypes(types) - , len = accepted.length; - - for (var i = 0; i < len; ++i) { - for (var j = 0, jlen = types.length; j < jlen; ++j) { - if (exports.accept(normalized[j].split('/'), accepted[i])) { - return types[j]; - } - } - } -}; - -/** - * Check if `type(s)` are acceptable based on - * the given `str`. - * - * @param {String|Array} type(s) - * @param {String} str - * @return {Boolean|String} - * @api private - */ - -exports.accepts = function(type, str){ - if ('string' == typeof type) type = type.split(/ *, */); - return exports.acceptsArray(type, str); -}; - -/** - * Check if `type` array is acceptable for `other`. - * - * @param {Array} type - * @param {Object} other - * @return {Boolean} - * @api private - */ - -exports.accept = function(type, other){ - return (type[0] == other.type || '*' == other.type) - && (type[1] == other.subtype || '*' == other.subtype); -}; - -/** - * Parse accept `str`, returning - * an array objects containing - * `.type` and `.subtype` along - * with the values provided by - * `parseQuality()`. - * - * @param {Type} name - * @return {Type} - * @api private - */ - -exports.parseAccept = function(str){ - return exports - .parseQuality(str) - .map(function(obj){ - var parts = obj.value.split('/'); - obj.type = parts[0]; - obj.subtype = parts[1]; - return obj; - }); -}; - -/** - * Parse quality `str`, returning an - * array of objects with `.value` and - * `.quality`. - * - * @param {Type} name - * @return {Type} - * @api private - */ - -exports.parseQuality = function(str){ - return str - .split(/ *, */) - .map(quality) - .filter(function(obj){ - return obj.quality; - }) - .sort(function(a, b){ - return b.quality - a.quality; - }); -}; - -/** - * Parse quality `str` returning an - * object with `.value` and `.quality`. - * - * @param {String} str - * @return {Object} - * @api private - */ - -function quality(str) { - var parts = str.split(/ *; */) - , val = parts[0]; - - var q = parts[1] - ? parseFloat(parts[1].split(/ *= */)[1]) - : 1; - - return { value: val, quality: q }; -} - -/** - * Escape special characters in the given string of html. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html) { - return String(html) - .replace(/&/g, '&') - .replace(/"/g, '"') - .replace(//g, '>'); -}; - -/** - * Normalize the given path string, - * returning a regular expression. - * - * An empty array should be passed, - * which will contain the placeholder - * key names. For example "/user/:id" will - * then contain ["id"]. - * - * @param {String|RegExp|Array} path - * @param {Array} keys - * @param {Boolean} sensitive - * @param {Boolean} strict - * @return {RegExp} - * @api private - */ - -exports.pathRegexp = function(path, keys, sensitive, strict) { - if (path instanceof RegExp) return path; - if (Array.isArray(path)) path = '(' + path.join('|') + ')'; - path = path - .concat(strict ? '' : '/?') - .replace(/\/\(/g, '(?:/') - .replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?(\*)?/g, function(_, slash, format, key, capture, optional, star){ - keys.push({ name: key, optional: !! optional }); - slash = slash || ''; - return '' - + (optional ? '' : slash) - + '(?:' - + (optional ? slash : '') - + (format || '') + (capture || (format && '([^/.]+?)' || '([^/]+?)')) + ')' - + (optional || '') - + (star ? '(/*)?' : ''); - }) - .replace(/([\/.])/g, '\\$1') - .replace(/\*/g, '(.*)'); - return new RegExp('^' + path + '$', sensitive ? '' : 'i'); -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/view.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/view.js deleted file mode 100644 index ae20b17..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/lib/view.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Module dependencies. - */ - -var path = require('path') - , fs = require('fs') - , utils = require('./utils') - , dirname = path.dirname - , basename = path.basename - , extname = path.extname - , exists = fs.existsSync || path.existsSync - , join = path.join; - -/** - * Expose `View`. - */ - -module.exports = View; - -/** - * Initialize a new `View` with the given `name`. - * - * Options: - * - * - `defaultEngine` the default template engine name - * - `engines` template engine require() cache - * - `root` root path for view lookup - * - * @param {String} name - * @param {Object} options - * @api private - */ - -function View(name, options) { - options = options || {}; - this.name = name; - this.root = options.root; - var engines = options.engines; - this.defaultEngine = options.defaultEngine; - var ext = this.ext = extname(name); - if (!ext) name += (ext = this.ext = ('.' != this.defaultEngine[0] ? '.' : '') + this.defaultEngine); - this.engine = engines[ext] || (engines[ext] = require(ext.slice(1)).__express); - this.path = this.lookup(name); -} - -/** - * Lookup view by the given `path` - * - * @param {String} path - * @return {String} - * @api private - */ - -View.prototype.lookup = function(path){ - var ext = this.ext; - - // . - if (!utils.isAbsolute(path)) path = join(this.root, path); - if (exists(path)) return path; - - // /index. - path = join(dirname(path), basename(path, ext), 'index' + ext); - if (exists(path)) return path; -}; - -/** - * Render with the given `options` and callback `fn(err, str)`. - * - * @param {Object} options - * @param {Function} fn - * @api private - */ - -View.prototype.render = function(options, fn){ - this.engine(this.path, options, fn); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/.npmignore deleted file mode 100644 index b512c09..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/.travis.yml b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/.travis.yml deleted file mode 100644 index 7a902e8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 -notifications: - email: - recipients: - - brianloveswords@gmail.com \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/README.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/README.md deleted file mode 100644 index 0d9d8b8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# buffer-crc32 - -[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) - -crc32 that works with binary data and fancy character sets, outputs -buffer, signed or unsigned data and has tests. - -Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix - -# install -``` -npm install buffer-crc32 -``` - -# example -```js -var crc32 = require('buffer-crc32'); -// works with buffers -var buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) -crc32(buf) // -> - -// has convenience methods for getting signed or unsigned ints -crc32.signed(buf) // -> -1805997238 -crc32.unsigned(buf) // -> 2488970058 - -// will cast to buffer if given a string, so you can -// directly use foreign characters safely -crc32('自動販売機') // -> - -// and works in append mode too -var partialCrc = crc32('hey'); -var partialCrc = crc32(' ', partialCrc); -var partialCrc = crc32('sup', partialCrc); -var partialCrc = crc32(' ', partialCrc); -var finalCrc = crc32('bros', partialCrc); // -> -``` - -# tests -This was tested against the output of zlib's crc32 method. You can run -the tests with`npm test` (requires tap) - -# see also -https://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also -supports buffer inputs and return unsigned ints (thanks @tjholowaychuk). - -# license -MIT/X11 diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/index.js deleted file mode 100644 index e29ce3e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/index.js +++ /dev/null @@ -1,88 +0,0 @@ -var Buffer = require('buffer').Buffer; - -var CRC_TABLE = [ - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d -]; - -function bufferizeInt(num) { - var tmp = Buffer(4); - tmp.writeInt32BE(num, 0); - return tmp; -} - -function _crc32(buf, previous) { - if (!Buffer.isBuffer(buf)) { - buf = Buffer(buf); - } - if (Buffer.isBuffer(previous)) { - previous = previous.readUInt32BE(0); - } - var crc = ~~previous ^ -1; - for (var n = 0; n < buf.length; n++) { - crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8); - } - return (crc ^ -1); -} - -function crc32() { - return bufferizeInt(_crc32.apply(null, arguments)); -} -crc32.signed = function () { - return _crc32.apply(null, arguments); -}; -crc32.unsigned = function () { - return _crc32.apply(null, arguments) >>> 0; -}; - -module.exports = crc32; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/package.json deleted file mode 100644 index 211ead1..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "author": { - "name": "Brian J. Brennan", - "email": "brianloveswords@gmail.com", - "url": "http://bjb.io" - }, - "name": "buffer-crc32", - "description": "A pure javascript CRC32 algorithm that plays nice with binary data", - "version": "0.2.1", - "contributors": [ - { - "name": "Vladimir Kuznetsov" - } - ], - "homepage": "https://github.com/brianloveswords/buffer-crc32", - "repository": { - "type": "git", - "url": "git://github.com/brianloveswords/buffer-crc32.git" - }, - "main": "index.js", - "scripts": { - "test": "./node_modules/.bin/tap tests/*.test.js" - }, - "dependencies": {}, - "devDependencies": { - "tap": "~0.2.5" - }, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "# buffer-crc32\n\n[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32)\n\ncrc32 that works with binary data and fancy character sets, outputs\nbuffer, signed or unsigned data and has tests.\n\nDerived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix\n\n# install\n```\nnpm install buffer-crc32\n```\n\n# example\n```js\nvar crc32 = require('buffer-crc32');\n// works with buffers\nvar buf = Buffer([0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00])\ncrc32(buf) // -> \n\n// has convenience methods for getting signed or unsigned ints\ncrc32.signed(buf) // -> -1805997238\ncrc32.unsigned(buf) // -> 2488970058\n\n// will cast to buffer if given a string, so you can\n// directly use foreign characters safely\ncrc32('自動販売機') // -> \n\n// and works in append mode too\nvar partialCrc = crc32('hey');\nvar partialCrc = crc32(' ', partialCrc);\nvar partialCrc = crc32('sup', partialCrc);\nvar partialCrc = crc32(' ', partialCrc);\nvar finalCrc = crc32('bros', partialCrc); // -> \n```\n\n# tests\nThis was tested against the output of zlib's crc32 method. You can run\nthe tests with`npm test` (requires tap)\n\n# see also\nhttps://github.com/alexgorbatchev/node-crc, `crc.buffer.crc32` also\nsupports buffer inputs and return unsigned ints (thanks @tjholowaychuk).\n\n# license\nMIT/X11\n", - "readmeFilename": "README.md", - "_id": "buffer-crc32@0.2.1", - "_from": "buffer-crc32@~0.2.1" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/tests/crc.test.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/tests/crc.test.js deleted file mode 100644 index bb0f9ef..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/buffer-crc32/tests/crc.test.js +++ /dev/null @@ -1,89 +0,0 @@ -var crc32 = require('..'); -var test = require('tap').test; - -test('simple crc32 is no problem', function (t) { - var input = Buffer('hey sup bros'); - var expected = Buffer([0x47, 0xfa, 0x55, 0x70]); - t.same(crc32(input), expected); - t.end(); -}); - -test('another simple one', function (t) { - var input = Buffer('IEND'); - var expected = Buffer([0xae, 0x42, 0x60, 0x82]); - t.same(crc32(input), expected); - t.end(); -}); - -test('slightly more complex', function (t) { - var input = Buffer([0x00, 0x00, 0x00]); - var expected = Buffer([0xff, 0x41, 0xd9, 0x12]); - t.same(crc32(input), expected); - t.end(); -}); - -test('complex crc32 gets calculated like a champ', function (t) { - var input = Buffer('शीर्षक'); - var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); - t.same(crc32(input), expected); - t.end(); -}); - -test('casts to buffer if necessary', function (t) { - var input = 'शीर्षक'; - var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); - t.same(crc32(input), expected); - t.end(); -}); - -test('can do signed', function (t) { - var input = 'ham sandwich'; - var expected = -1891873021; - t.same(crc32.signed(input), expected); - t.end(); -}); - -test('can do unsigned', function (t) { - var input = 'bear sandwich'; - var expected = 3711466352; - t.same(crc32.unsigned(input), expected); - t.end(); -}); - - -test('simple crc32 in append mode', function (t) { - var input = [Buffer('hey'), Buffer(' '), Buffer('sup'), Buffer(' '), Buffer('bros')]; - var expected = Buffer([0x47, 0xfa, 0x55, 0x70]); - for (var crc = 0, i = 0; i < input.length; i++) { - crc = crc32(input[i], crc); - } - t.same(crc, expected); - t.end(); -}); - - -test('can do signed in append mode', function (t) { - var input1 = 'ham'; - var input2 = ' '; - var input3 = 'sandwich'; - var expected = -1891873021; - - var crc = crc32.signed(input1); - crc = crc32.signed(input2, crc); - crc = crc32.signed(input3, crc); - - t.same(crc, expected); - t.end(); -}); - -test('can do unsigned in append mode', function (t) { - var input1 = 'bear san'; - var input2 = 'dwich'; - var expected = 3711466352; - - var crc = crc32.unsigned(input1); - crc = crc32.unsigned(input2, crc); - t.same(crc, expected); - t.end(); -}); - diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/.npmignore deleted file mode 100644 index f1250e5..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/.travis.yml b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/.travis.yml deleted file mode 100644 index f1d0f13..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/History.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/History.md deleted file mode 100644 index 4961d2e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/History.md +++ /dev/null @@ -1,107 +0,0 @@ - -0.6.1 / 2012-06-01 -================== - - * Added: append (yes or no) on confirmation - * Added: allow node.js v0.7.x - -0.6.0 / 2012-04-10 -================== - - * Added `.prompt(obj, callback)` support. Closes #49 - * Added default support to .choose(). Closes #41 - * Fixed the choice example - -0.5.1 / 2011-12-20 -================== - - * Fixed `password()` for recent nodes. Closes #36 - -0.5.0 / 2011-12-04 -================== - - * Added sub-command option support [itay] - -0.4.3 / 2011-12-04 -================== - - * Fixed custom help ordering. Closes #32 - -0.4.2 / 2011-11-24 -================== - - * Added travis support - * Fixed: line-buffered input automatically trimmed. Closes #31 - -0.4.1 / 2011-11-18 -================== - - * Removed listening for "close" on --help - -0.4.0 / 2011-11-15 -================== - - * Added support for `--`. Closes #24 - -0.3.3 / 2011-11-14 -================== - - * Fixed: wait for close event when writing help info [Jerry Hamlet] - -0.3.2 / 2011-11-01 -================== - - * Fixed long flag definitions with values [felixge] - -0.3.1 / 2011-10-31 -================== - - * Changed `--version` short flag to `-V` from `-v` - * Changed `.version()` so it's configurable [felixge] - -0.3.0 / 2011-10-31 -================== - - * Added support for long flags only. Closes #18 - -0.2.1 / 2011-10-24 -================== - - * "node": ">= 0.4.x < 0.7.0". Closes #20 - -0.2.0 / 2011-09-26 -================== - - * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs] - -0.1.0 / 2011-08-24 -================== - - * Added support for custom `--help` output - -0.0.5 / 2011-08-18 -================== - - * Changed: when the user enters nothing prompt for password again - * Fixed issue with passwords beginning with numbers [NuckChorris] - -0.0.4 / 2011-08-15 -================== - - * Fixed `Commander#args` - -0.0.3 / 2011-08-15 -================== - - * Added default option value support - -0.0.2 / 2011-08-15 -================== - - * Added mask support to `Command#password(str[, mask], fn)` - * Added `Command#password(str, fn)` - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/Makefile b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/Makefile deleted file mode 100644 index 0074625..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -TESTS = $(shell find test/test.*.js) - -test: - @./test/run $(TESTS) - -.PHONY: test \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/Readme.md deleted file mode 100644 index b8328c3..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/Readme.md +++ /dev/null @@ -1,262 +0,0 @@ -# Commander.js - - The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander). - - [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js) - -## Installation - - $ npm install commander - -## Option parsing - - Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('commander'); - -program - .version('0.0.1') - .option('-p, --peppers', 'Add peppers') - .option('-P, --pineapple', 'Add pineapple') - .option('-b, --bbq', 'Add bbq sauce') - .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') - .parse(process.argv); - -console.log('you ordered a pizza with:'); -if (program.peppers) console.log(' - peppers'); -if (program.pineapple) console.log(' - pineappe'); -if (program.bbq) console.log(' - bbq'); -console.log(' - %s cheese', program.cheese); -``` - - Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. - -## Automated --help - - The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free: - -``` - $ ./examples/pizza --help - - Usage: pizza [options] - - Options: - - -V, --version output the version number - -p, --peppers Add peppers - -P, --pineapple Add pineappe - -b, --bbq Add bbq sauce - -c, --cheese Add the specified type of cheese [marble] - -h, --help output usage information - -``` - -## Coercion - -```js -function range(val) { - return val.split('..').map(Number); -} - -function list(val) { - return val.split(','); -} - -program - .version('0.0.1') - .usage('[options] ') - .option('-i, --integer ', 'An integer argument', parseInt) - .option('-f, --float ', 'A float argument', parseFloat) - .option('-r, --range ..', 'A range', range) - .option('-l, --list ', 'A list', list) - .option('-o, --optional [value]', 'An optional value') - .parse(process.argv); - -console.log(' int: %j', program.integer); -console.log(' float: %j', program.float); -console.log(' optional: %j', program.optional); -program.range = program.range || []; -console.log(' range: %j..%j', program.range[0], program.range[1]); -console.log(' list: %j', program.list); -console.log(' args: %j', program.args); -``` - -## Custom help - - You can display arbitrary `-h, --help` information - by listening for "--help". Commander will automatically - exit once you are done so that the remainder of your program - does not execute causing undesired behaviours, for example - in the following executable "stuff" will not output when - `--help` is used. - -```js -#!/usr/bin/env node - -/** - * Module dependencies. - */ - -var program = require('../'); - -function list(val) { - return val.split(',').map(Number); -} - -program - .version('0.0.1') - .option('-f, --foo', 'enable some foo') - .option('-b, --bar', 'enable some bar') - .option('-B, --baz', 'enable some baz'); - -// must be before .parse() since -// node's emit() is immediate - -program.on('--help', function(){ - console.log(' Examples:'); - console.log(''); - console.log(' $ custom-help --help'); - console.log(' $ custom-help -h'); - console.log(''); -}); - -program.parse(process.argv); - -console.log('stuff'); -``` - -yielding the following help output: - -``` - -Usage: custom-help [options] - -Options: - - -h, --help output usage information - -V, --version output the version number - -f, --foo enable some foo - -b, --bar enable some bar - -B, --baz enable some baz - -Examples: - - $ custom-help --help - $ custom-help -h - -``` - -## .prompt(msg, fn) - - Single-line prompt: - -```js -program.prompt('name: ', function(name){ - console.log('hi %s', name); -}); -``` - - Multi-line prompt: - -```js -program.prompt('description:', function(name){ - console.log('hi %s', name); -}); -``` - - Coercion: - -```js -program.prompt('Age: ', Number, function(age){ - console.log('age: %j', age); -}); -``` - -```js -program.prompt('Birthdate: ', Date, function(date){ - console.log('date: %s', date); -}); -``` - -## .password(msg[, mask], fn) - -Prompt for password without echoing: - -```js -program.password('Password: ', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -Prompt for password with mask char "*": - -```js -program.password('Password: ', '*', function(pass){ - console.log('got "%s"', pass); - process.stdin.destroy(); -}); -``` - -## .confirm(msg, fn) - - Confirm with the given `msg`: - -```js -program.confirm('continue? ', function(ok){ - console.log(' got %j', ok); -}); -``` - -## .choose(list, fn) - - Let the user choose from a `list`: - -```js -var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - -console.log('Choose the coolest pet:'); -program.choose(list, function(i){ - console.log('you chose %d "%s"', i, list[i]); -}); -``` - -## Links - - - [API documentation](http://visionmedia.github.com/commander.js/) - - [ascii tables](https://github.com/LearnBoost/cli-table) - - [progress bars](https://github.com/visionmedia/node-progress) - - [more progress bars](https://github.com/substack/node-multimeter) - - [examples](https://github.com/visionmedia/commander.js/tree/master/examples) - -## License - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/index.js deleted file mode 100644 index 06ec1e4..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -module.exports = require('./lib/commander'); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/lib/commander.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/lib/commander.js deleted file mode 100644 index 5ba87eb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/lib/commander.js +++ /dev/null @@ -1,1026 +0,0 @@ - -/*! - * commander - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , path = require('path') - , tty = require('tty') - , basename = path.basename; - -/** - * Expose the root command. - */ - -exports = module.exports = new Command; - -/** - * Expose `Command`. - */ - -exports.Command = Command; - -/** - * Expose `Option`. - */ - -exports.Option = Option; - -/** - * Initialize a new `Option` with the given `flags` and `description`. - * - * @param {String} flags - * @param {String} description - * @api public - */ - -function Option(flags, description) { - this.flags = flags; - this.required = ~flags.indexOf('<'); - this.optional = ~flags.indexOf('['); - this.bool = !~flags.indexOf('-no-'); - flags = flags.split(/[ ,|]+/); - if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift(); - this.long = flags.shift(); - this.description = description; -} - -/** - * Return option name. - * - * @return {String} - * @api private - */ - -Option.prototype.name = function(){ - return this.long - .replace('--', '') - .replace('no-', ''); -}; - -/** - * Check if `arg` matches the short or long flag. - * - * @param {String} arg - * @return {Boolean} - * @api private - */ - -Option.prototype.is = function(arg){ - return arg == this.short - || arg == this.long; -}; - -/** - * Initialize a new `Command`. - * - * @param {String} name - * @api public - */ - -function Command(name) { - this.commands = []; - this.options = []; - this.args = []; - this.name = name; -} - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Command.prototype.__proto__ = EventEmitter.prototype; - -/** - * Add command `name`. - * - * The `.action()` callback is invoked when the - * command `name` is specified via __ARGV__, - * and the remaining arguments are applied to the - * function for access. - * - * When the `name` is "*" an un-matched command - * will be passed as the first arg, followed by - * the rest of __ARGV__ remaining. - * - * Examples: - * - * program - * .version('0.0.1') - * .option('-C, --chdir ', 'change the working directory') - * .option('-c, --config ', 'set config path. defaults to ./deploy.conf') - * .option('-T, --no-tests', 'ignore test hook') - * - * program - * .command('setup') - * .description('run remote setup commands') - * .action(function(){ - * console.log('setup'); - * }); - * - * program - * .command('exec ') - * .description('run the given remote command') - * .action(function(cmd){ - * console.log('exec "%s"', cmd); - * }); - * - * program - * .command('*') - * .description('deploy the given env') - * .action(function(env){ - * console.log('deploying "%s"', env); - * }); - * - * program.parse(process.argv); - * - * @param {String} name - * @return {Command} the new command - * @api public - */ - -Command.prototype.command = function(name){ - var args = name.split(/ +/); - var cmd = new Command(args.shift()); - this.commands.push(cmd); - cmd.parseExpectedArgs(args); - cmd.parent = this; - return cmd; -}; - -/** - * Parse expected `args`. - * - * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`. - * - * @param {Array} args - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parseExpectedArgs = function(args){ - if (!args.length) return; - var self = this; - args.forEach(function(arg){ - switch (arg[0]) { - case '<': - self.args.push({ required: true, name: arg.slice(1, -1) }); - break; - case '[': - self.args.push({ required: false, name: arg.slice(1, -1) }); - break; - } - }); - return this; -}; - -/** - * Register callback `fn` for the command. - * - * Examples: - * - * program - * .command('help') - * .description('display verbose help') - * .action(function(){ - * // output help here - * }); - * - * @param {Function} fn - * @return {Command} for chaining - * @api public - */ - -Command.prototype.action = function(fn){ - var self = this; - this.parent.on(this.name, function(args, unknown){ - // Parse any so-far unknown options - unknown = unknown || []; - var parsed = self.parseOptions(unknown); - - // Output help if necessary - outputHelpIfNecessary(self, parsed.unknown); - - // If there are still any unknown options, then we simply - // die, unless someone asked for help, in which case we give it - // to them, and then we die. - if (parsed.unknown.length > 0) { - self.unknownOption(parsed.unknown[0]); - } - - self.args.forEach(function(arg, i){ - if (arg.required && null == args[i]) { - self.missingArgument(arg.name); - } - }); - - // Always append ourselves to the end of the arguments, - // to make sure we match the number of arguments the user - // expects - if (self.args.length) { - args[self.args.length] = self; - } else { - args.push(self); - } - - fn.apply(this, args); - }); - return this; -}; - -/** - * Define option with `flags`, `description` and optional - * coercion `fn`. - * - * The `flags` string should contain both the short and long flags, - * separated by comma, a pipe or space. The following are all valid - * all will output this way when `--help` is used. - * - * "-p, --pepper" - * "-p|--pepper" - * "-p --pepper" - * - * Examples: - * - * // simple boolean defaulting to false - * program.option('-p, --pepper', 'add pepper'); - * - * --pepper - * program.pepper - * // => Boolean - * - * // simple boolean defaulting to false - * program.option('-C, --no-cheese', 'remove cheese'); - * - * program.cheese - * // => true - * - * --no-cheese - * program.cheese - * // => true - * - * // required argument - * program.option('-C, --chdir ', 'change the working directory'); - * - * --chdir /tmp - * program.chdir - * // => "/tmp" - * - * // optional argument - * program.option('-c, --cheese [type]', 'add cheese [marble]'); - * - * @param {String} flags - * @param {String} description - * @param {Function|Mixed} fn or default - * @param {Mixed} defaultValue - * @return {Command} for chaining - * @api public - */ - -Command.prototype.option = function(flags, description, fn, defaultValue){ - var self = this - , option = new Option(flags, description) - , oname = option.name() - , name = camelcase(oname); - - // default as 3rd arg - if ('function' != typeof fn) defaultValue = fn, fn = null; - - // preassign default value only for --no-*, [optional], or - if (false == option.bool || option.optional || option.required) { - // when --no-* we make sure default is true - if (false == option.bool) defaultValue = true; - // preassign only if we have a default - if (undefined !== defaultValue) self[name] = defaultValue; - } - - // register the option - this.options.push(option); - - // when it's passed assign the value - // and conditionally invoke the callback - this.on(oname, function(val){ - // coercion - if (null != val && fn) val = fn(val); - - // unassigned or bool - if ('boolean' == typeof self[name] || 'undefined' == typeof self[name]) { - // if no value, bool true, and we have a default, then use it! - if (null == val) { - self[name] = option.bool - ? defaultValue || true - : false; - } else { - self[name] = val; - } - } else if (null !== val) { - // reassign - self[name] = val; - } - }); - - return this; -}; - -/** - * Parse `argv`, settings options and invoking commands when defined. - * - * @param {Array} argv - * @return {Command} for chaining - * @api public - */ - -Command.prototype.parse = function(argv){ - // store raw args - this.rawArgs = argv; - - // guess name - if (!this.name) this.name = basename(argv[1]); - - // process argv - var parsed = this.parseOptions(this.normalize(argv.slice(2))); - this.args = parsed.args; - return this.parseArgs(this.args, parsed.unknown); -}; - -/** - * Normalize `args`, splitting joined short flags. For example - * the arg "-abc" is equivalent to "-a -b -c". - * - * @param {Array} args - * @return {Array} - * @api private - */ - -Command.prototype.normalize = function(args){ - var ret = [] - , arg; - - for (var i = 0, len = args.length; i < len; ++i) { - arg = args[i]; - if (arg.length > 1 && '-' == arg[0] && '-' != arg[1]) { - arg.slice(1).split('').forEach(function(c){ - ret.push('-' + c); - }); - } else { - ret.push(arg); - } - } - - return ret; -}; - -/** - * Parse command `args`. - * - * When listener(s) are available those - * callbacks are invoked, otherwise the "*" - * event is emitted and those actions are invoked. - * - * @param {Array} args - * @return {Command} for chaining - * @api private - */ - -Command.prototype.parseArgs = function(args, unknown){ - var cmds = this.commands - , len = cmds.length - , name; - - if (args.length) { - name = args[0]; - if (this.listeners(name).length) { - this.emit(args.shift(), args, unknown); - } else { - this.emit('*', args); - } - } else { - outputHelpIfNecessary(this, unknown); - - // If there were no args and we have unknown options, - // then they are extraneous and we need to error. - if (unknown.length > 0) { - this.unknownOption(unknown[0]); - } - } - - return this; -}; - -/** - * Return an option matching `arg` if any. - * - * @param {String} arg - * @return {Option} - * @api private - */ - -Command.prototype.optionFor = function(arg){ - for (var i = 0, len = this.options.length; i < len; ++i) { - if (this.options[i].is(arg)) { - return this.options[i]; - } - } -}; - -/** - * Parse options from `argv` returning `argv` - * void of these options. - * - * @param {Array} argv - * @return {Array} - * @api public - */ - -Command.prototype.parseOptions = function(argv){ - var args = [] - , len = argv.length - , literal - , option - , arg; - - var unknownOptions = []; - - // parse options - for (var i = 0; i < len; ++i) { - arg = argv[i]; - - // literal args after -- - if ('--' == arg) { - literal = true; - continue; - } - - if (literal) { - args.push(arg); - continue; - } - - // find matching Option - option = this.optionFor(arg); - - // option is defined - if (option) { - // requires arg - if (option.required) { - arg = argv[++i]; - if (null == arg) return this.optionMissingArgument(option); - if ('-' == arg[0]) return this.optionMissingArgument(option, arg); - this.emit(option.name(), arg); - // optional arg - } else if (option.optional) { - arg = argv[i+1]; - if (null == arg || '-' == arg[0]) { - arg = null; - } else { - ++i; - } - this.emit(option.name(), arg); - // bool - } else { - this.emit(option.name()); - } - continue; - } - - // looks like an option - if (arg.length > 1 && '-' == arg[0]) { - unknownOptions.push(arg); - - // If the next argument looks like it might be - // an argument for this option, we pass it on. - // If it isn't, then it'll simply be ignored - if (argv[i+1] && '-' != argv[i+1][0]) { - unknownOptions.push(argv[++i]); - } - continue; - } - - // arg - args.push(arg); - } - - return { args: args, unknown: unknownOptions }; -}; - -/** - * Argument `name` is missing. - * - * @param {String} name - * @api private - */ - -Command.prototype.missingArgument = function(name){ - console.error(); - console.error(" error: missing required argument `%s'", name); - console.error(); - process.exit(1); -}; - -/** - * `Option` is missing an argument, but received `flag` or nothing. - * - * @param {String} option - * @param {String} flag - * @api private - */ - -Command.prototype.optionMissingArgument = function(option, flag){ - console.error(); - if (flag) { - console.error(" error: option `%s' argument missing, got `%s'", option.flags, flag); - } else { - console.error(" error: option `%s' argument missing", option.flags); - } - console.error(); - process.exit(1); -}; - -/** - * Unknown option `flag`. - * - * @param {String} flag - * @api private - */ - -Command.prototype.unknownOption = function(flag){ - console.error(); - console.error(" error: unknown option `%s'", flag); - console.error(); - process.exit(1); -}; - -/** - * Set the program version to `str`. - * - * This method auto-registers the "-V, --version" flag - * which will print the version number when passed. - * - * @param {String} str - * @param {String} flags - * @return {Command} for chaining - * @api public - */ - -Command.prototype.version = function(str, flags){ - if (0 == arguments.length) return this._version; - this._version = str; - flags = flags || '-V, --version'; - this.option(flags, 'output the version number'); - this.on('version', function(){ - console.log(str); - process.exit(0); - }); - return this; -}; - -/** - * Set the description `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.description = function(str){ - if (0 == arguments.length) return this._description; - this._description = str; - return this; -}; - -/** - * Set / get the command usage `str`. - * - * @param {String} str - * @return {String|Command} - * @api public - */ - -Command.prototype.usage = function(str){ - var args = this.args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }); - - var usage = '[options' - + (this.commands.length ? '] [command' : '') - + ']' - + (this.args.length ? ' ' + args : ''); - if (0 == arguments.length) return this._usage || usage; - this._usage = str; - - return this; -}; - -/** - * Return the largest option length. - * - * @return {Number} - * @api private - */ - -Command.prototype.largestOptionLength = function(){ - return this.options.reduce(function(max, option){ - return Math.max(max, option.flags.length); - }, 0); -}; - -/** - * Return help for options. - * - * @return {String} - * @api private - */ - -Command.prototype.optionHelp = function(){ - var width = this.largestOptionLength(); - - // Prepend the help information - return [pad('-h, --help', width) + ' ' + 'output usage information'] - .concat(this.options.map(function(option){ - return pad(option.flags, width) - + ' ' + option.description; - })) - .join('\n'); -}; - -/** - * Return command help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.commandHelp = function(){ - if (!this.commands.length) return ''; - return [ - '' - , ' Commands:' - , '' - , this.commands.map(function(cmd){ - var args = cmd.args.map(function(arg){ - return arg.required - ? '<' + arg.name + '>' - : '[' + arg.name + ']'; - }).join(' '); - - return cmd.name - + (cmd.options.length - ? ' [options]' - : '') + ' ' + args - + (cmd.description() - ? '\n' + cmd.description() - : ''); - }).join('\n\n').replace(/^/gm, ' ') - , '' - ].join('\n'); -}; - -/** - * Return program help documentation. - * - * @return {String} - * @api private - */ - -Command.prototype.helpInformation = function(){ - return [ - '' - , ' Usage: ' + this.name + ' ' + this.usage() - , '' + this.commandHelp() - , ' Options:' - , '' - , '' + this.optionHelp().replace(/^/gm, ' ') - , '' - , '' - ].join('\n'); -}; - -/** - * Prompt for a `Number`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForNumber = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseNumber(val){ - val = Number(val); - if (isNaN(val)) return self.promptSingleLine(str + '(must be a number) ', parseNumber); - fn(val); - }); -}; - -/** - * Prompt for a `Date`. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptForDate = function(str, fn){ - var self = this; - this.promptSingleLine(str, function parseDate(val){ - val = new Date(val); - if (isNaN(val.getTime())) return self.promptSingleLine(str + '(must be a date) ', parseDate); - fn(val); - }); -}; - -/** - * Single-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptSingleLine = function(str, fn){ - if ('function' == typeof arguments[2]) { - return this['promptFor' + (fn.name || fn)](str, arguments[2]); - } - - process.stdout.write(str); - process.stdin.setEncoding('utf8'); - process.stdin.once('data', function(val){ - fn(val.trim()); - }).resume(); -}; - -/** - * Multi-line prompt. - * - * @param {String} str - * @param {Function} fn - * @api private - */ - -Command.prototype.promptMultiLine = function(str, fn){ - var buf = []; - console.log(str); - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(val){ - if ('\n' == val || '\r\n' == val) { - process.stdin.removeAllListeners('data'); - fn(buf.join('\n')); - } else { - buf.push(val.trimRight()); - } - }).resume(); -}; - -/** - * Prompt `str` and callback `fn(val)` - * - * Commander supports single-line and multi-line prompts. - * To issue a single-line prompt simply add white-space - * to the end of `str`, something like "name: ", whereas - * for a multi-line prompt omit this "description:". - * - * - * Examples: - * - * program.prompt('Username: ', function(name){ - * console.log('hi %s', name); - * }); - * - * program.prompt('Description:', function(desc){ - * console.log('description was "%s"', desc.trim()); - * }); - * - * @param {String|Object} str - * @param {Function} fn - * @api public - */ - -Command.prototype.prompt = function(str, fn){ - var self = this; - - if ('string' == typeof str) { - if (/ $/.test(str)) return this.promptSingleLine.apply(this, arguments); - this.promptMultiLine(str, fn); - } else { - var keys = Object.keys(str) - , obj = {}; - - function next() { - var key = keys.shift() - , label = str[key]; - - if (!key) return fn(obj); - self.prompt(label, function(val){ - obj[key] = val; - next(); - }); - } - - next(); - } -}; - -/** - * Prompt for password with `str`, `mask` char and callback `fn(val)`. - * - * The mask string defaults to '', aka no output is - * written while typing, you may want to use "*" etc. - * - * Examples: - * - * program.password('Password: ', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * program.password('Password: ', '*', function(pass){ - * console.log('got "%s"', pass); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {String} mask - * @param {Function} fn - * @api public - */ - -Command.prototype.password = function(str, mask, fn){ - var self = this - , buf = ''; - - // default mask - if ('function' == typeof mask) { - fn = mask; - mask = ''; - } - - process.stdin.resume(); - tty.setRawMode(true); - process.stdout.write(str); - - // keypress - process.stdin.on('keypress', function(c, key){ - if (key && 'enter' == key.name) { - console.log(); - process.stdin.removeAllListeners('keypress'); - tty.setRawMode(false); - if (!buf.trim().length) return self.password(str, mask, fn); - fn(buf); - return; - } - - if (key && key.ctrl && 'c' == key.name) { - console.log('%s', buf); - process.exit(); - } - - process.stdout.write(mask); - buf += c; - }).resume(); -}; - -/** - * Confirmation prompt with `str` and callback `fn(bool)` - * - * Examples: - * - * program.confirm('continue? ', function(ok){ - * console.log(' got %j', ok); - * process.stdin.destroy(); - * }); - * - * @param {String} str - * @param {Function} fn - * @api public - */ - - -Command.prototype.confirm = function(str, fn, verbose){ - var self = this; - this.prompt(str, function(ok){ - if (!ok.trim()) { - if (!verbose) str += '(yes or no) '; - return self.confirm(str, fn, true); - } - fn(parseBool(ok)); - }); -}; - -/** - * Choice prompt with `list` of items and callback `fn(index, item)` - * - * Examples: - * - * var list = ['tobi', 'loki', 'jane', 'manny', 'luna']; - * - * console.log('Choose the coolest pet:'); - * program.choose(list, function(i){ - * console.log('you chose %d "%s"', i, list[i]); - * process.stdin.destroy(); - * }); - * - * @param {Array} list - * @param {Number|Function} index or fn - * @param {Function} fn - * @api public - */ - -Command.prototype.choose = function(list, index, fn){ - var self = this - , hasDefault = 'number' == typeof index; - - if (!hasDefault) { - fn = index; - index = null; - } - - list.forEach(function(item, i){ - if (hasDefault && i == index) { - console.log('* %d) %s', i + 1, item); - } else { - console.log(' %d) %s', i + 1, item); - } - }); - - function again() { - self.prompt(' : ', function(val){ - val = parseInt(val, 10) - 1; - if (hasDefault && isNaN(val)) val = index; - - if (null == list[val]) { - again(); - } else { - fn(val, list[val]); - } - }); - } - - again(); -}; - -/** - * Camel-case the given `flag` - * - * @param {String} flag - * @return {String} - * @api private - */ - -function camelcase(flag) { - return flag.split('-').reduce(function(str, word){ - return str + word[0].toUpperCase() + word.slice(1); - }); -} - -/** - * Parse a boolean `str`. - * - * @param {String} str - * @return {Boolean} - * @api private - */ - -function parseBool(str) { - return /^y|yes|ok|true$/i.test(str); -} - -/** - * Pad `str` to `width`. - * - * @param {String} str - * @param {Number} width - * @return {String} - * @api private - */ - -function pad(str, width) { - var len = Math.max(0, width - str.length); - return str + Array(len + 1).join(' '); -} - -/** - * Output help information if necessary - * - * @param {Command} command to output help for - * @param {Array} array of options to search for -h or --help - * @api private - */ - -function outputHelpIfNecessary(cmd, options) { - options = options || []; - for (var i = 0; i < options.length; i++) { - if (options[i] == '--help' || options[i] == '-h') { - process.stdout.write(cmd.helpInformation()); - cmd.emit('--help'); - process.exit(0); - } - } -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/package.json deleted file mode 100644 index 942b794..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/commander/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "commander", - "version": "0.6.1", - "description": "the complete solution for node.js command-line programs", - "keywords": [ - "command", - "option", - "parser", - "prompt", - "stdin" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "repository": { - "type": "git", - "url": "https://github.com/visionmedia/commander.js.git" - }, - "dependencies": {}, - "devDependencies": { - "should": ">= 0.0.1" - }, - "scripts": { - "test": "make test" - }, - "main": "index", - "engines": { - "node": ">= 0.4.x" - }, - "readme": "# Commander.js\n\n The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/visionmedia/commander).\n\n [![Build Status](https://secure.travis-ci.org/visionmedia/commander.js.png)](http://travis-ci.org/visionmedia/commander.js)\n\n## Installation\n\n $ npm install commander\n\n## Option parsing\n\n Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('commander');\n\nprogram\n .version('0.0.1')\n .option('-p, --peppers', 'Add peppers')\n .option('-P, --pineapple', 'Add pineapple')\n .option('-b, --bbq', 'Add bbq sauce')\n .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')\n .parse(process.argv);\n\nconsole.log('you ordered a pizza with:');\nif (program.peppers) console.log(' - peppers');\nif (program.pineapple) console.log(' - pineappe');\nif (program.bbq) console.log(' - bbq');\nconsole.log(' - %s cheese', program.cheese);\n```\n\n Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as \"--template-engine\" are camel-cased, becoming `program.templateEngine` etc.\n\n## Automated --help\n\n The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:\n\n``` \n $ ./examples/pizza --help\n\n Usage: pizza [options]\n\n Options:\n\n -V, --version output the version number\n -p, --peppers Add peppers\n -P, --pineapple Add pineappe\n -b, --bbq Add bbq sauce\n -c, --cheese Add the specified type of cheese [marble]\n -h, --help output usage information\n\n```\n\n## Coercion\n\n```js\nfunction range(val) {\n return val.split('..').map(Number);\n}\n\nfunction list(val) {\n return val.split(',');\n}\n\nprogram\n .version('0.0.1')\n .usage('[options] ')\n .option('-i, --integer ', 'An integer argument', parseInt)\n .option('-f, --float ', 'A float argument', parseFloat)\n .option('-r, --range ..', 'A range', range)\n .option('-l, --list ', 'A list', list)\n .option('-o, --optional [value]', 'An optional value')\n .parse(process.argv);\n\nconsole.log(' int: %j', program.integer);\nconsole.log(' float: %j', program.float);\nconsole.log(' optional: %j', program.optional);\nprogram.range = program.range || [];\nconsole.log(' range: %j..%j', program.range[0], program.range[1]);\nconsole.log(' list: %j', program.list);\nconsole.log(' args: %j', program.args);\n```\n\n## Custom help\n\n You can display arbitrary `-h, --help` information\n by listening for \"--help\". Commander will automatically\n exit once you are done so that the remainder of your program\n does not execute causing undesired behaviours, for example\n in the following executable \"stuff\" will not output when\n `--help` is used.\n\n```js\n#!/usr/bin/env node\n\n/**\n * Module dependencies.\n */\n\nvar program = require('../');\n\nfunction list(val) {\n return val.split(',').map(Number);\n}\n\nprogram\n .version('0.0.1')\n .option('-f, --foo', 'enable some foo')\n .option('-b, --bar', 'enable some bar')\n .option('-B, --baz', 'enable some baz');\n\n// must be before .parse() since\n// node's emit() is immediate\n\nprogram.on('--help', function(){\n console.log(' Examples:');\n console.log('');\n console.log(' $ custom-help --help');\n console.log(' $ custom-help -h');\n console.log('');\n});\n\nprogram.parse(process.argv);\n\nconsole.log('stuff');\n```\n\nyielding the following help output:\n\n```\n\nUsage: custom-help [options]\n\nOptions:\n\n -h, --help output usage information\n -V, --version output the version number\n -f, --foo enable some foo\n -b, --bar enable some bar\n -B, --baz enable some baz\n\nExamples:\n\n $ custom-help --help\n $ custom-help -h\n\n```\n\n## .prompt(msg, fn)\n\n Single-line prompt:\n\n```js\nprogram.prompt('name: ', function(name){\n console.log('hi %s', name);\n});\n```\n\n Multi-line prompt:\n\n```js\nprogram.prompt('description:', function(name){\n console.log('hi %s', name);\n});\n```\n\n Coercion:\n\n```js\nprogram.prompt('Age: ', Number, function(age){\n console.log('age: %j', age);\n});\n```\n\n```js\nprogram.prompt('Birthdate: ', Date, function(date){\n console.log('date: %s', date);\n});\n```\n\n## .password(msg[, mask], fn)\n\nPrompt for password without echoing:\n\n```js\nprogram.password('Password: ', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\nPrompt for password with mask char \"*\":\n\n```js\nprogram.password('Password: ', '*', function(pass){\n console.log('got \"%s\"', pass);\n process.stdin.destroy();\n});\n```\n\n## .confirm(msg, fn)\n\n Confirm with the given `msg`:\n\n```js\nprogram.confirm('continue? ', function(ok){\n console.log(' got %j', ok);\n});\n```\n\n## .choose(list, fn)\n\n Let the user choose from a `list`:\n\n```js\nvar list = ['tobi', 'loki', 'jane', 'manny', 'luna'];\n\nconsole.log('Choose the coolest pet:');\nprogram.choose(list, function(i){\n console.log('you chose %d \"%s\"', i, list[i]);\n});\n```\n\n## Links\n\n - [API documentation](http://visionmedia.github.com/commander.js/)\n - [ascii tables](https://github.com/LearnBoost/cli-table)\n - [progress bars](https://github.com/visionmedia/node-progress)\n - [more progress bars](https://github.com/substack/node-multimeter)\n - [examples](https://github.com/visionmedia/commander.js/tree/master/examples)\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "_id": "commander@0.6.1", - "_from": "commander@0.6.1" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/.npmignore deleted file mode 100644 index 9046dde..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/.npmignore +++ /dev/null @@ -1,12 +0,0 @@ -*.markdown -*.md -.git* -Makefile -benchmarks/ -docs/ -examples/ -install.sh -support/ -test/ -.DS_Store -coverage.html diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/.travis.yml b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/.travis.yml deleted file mode 100644 index 3aeb3c5..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/LICENSE b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/LICENSE deleted file mode 100644 index 0c5d22d..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2010 Sencha Inc. -Copyright (c) 2011 LearnBoost -Copyright (c) 2011 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/Readme.md deleted file mode 100644 index 7d65f9c..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/Readme.md +++ /dev/null @@ -1,133 +0,0 @@ -[![build status](https://secure.travis-ci.org/senchalabs/connect.png)](http://travis-ci.org/senchalabs/connect) -# Connect - - Connect is an extensible HTTP server framework for [node](http://nodejs.org), providing high performance "plugins" known as _middleware_. - - Connect is bundled with over _20_ commonly used middleware, including - a logger, session support, cookie parser, and [more](http://senchalabs.github.com/connect). Be sure to view the 2.x [documentation](http://senchalabs.github.com/connect/). - -```js -var connect = require('connect') - , http = require('http'); - -var app = connect() - .use(connect.favicon()) - .use(connect.logger('dev')) - .use(connect.static('public')) - .use(connect.directory('public')) - .use(connect.cookieParser()) - .use(connect.session({ secret: 'my secret here' })) - .use(function(req, res){ - res.end('Hello from Connect!\n'); - }); - -http.createServer(app).listen(3000); -``` - -## Middleware - - - [csrf](http://www.senchalabs.org/connect/csrf.html) - - [basicAuth](http://www.senchalabs.org/connect/basicAuth.html) - - [bodyParser](http://www.senchalabs.org/connect/bodyParser.html) - - [json](http://www.senchalabs.org/connect/json.html) - - [multipart](http://www.senchalabs.org/connect/multipart.html) - - [urlencoded](http://www.senchalabs.org/connect/urlencoded.html) - - [cookieParser](http://www.senchalabs.org/connect/cookieParser.html) - - [directory](http://www.senchalabs.org/connect/directory.html) - - [compress](http://www.senchalabs.org/connect/compress.html) - - [errorHandler](http://www.senchalabs.org/connect/errorHandler.html) - - [favicon](http://www.senchalabs.org/connect/favicon.html) - - [limit](http://www.senchalabs.org/connect/limit.html) - - [logger](http://www.senchalabs.org/connect/logger.html) - - [methodOverride](http://www.senchalabs.org/connect/methodOverride.html) - - [query](http://www.senchalabs.org/connect/query.html) - - [responseTime](http://www.senchalabs.org/connect/responseTime.html) - - [session](http://www.senchalabs.org/connect/session.html) - - [static](http://www.senchalabs.org/connect/static.html) - - [staticCache](http://www.senchalabs.org/connect/staticCache.html) - - [vhost](http://www.senchalabs.org/connect/vhost.html) - - [subdomains](http://www.senchalabs.org/connect/subdomains.html) - - [cookieSession](http://www.senchalabs.org/connect/cookieSession.html) - -## Running Tests - -first: - - $ npm install -d - -then: - - $ make test - -## Authors - - Below is the output from [git-summary](http://github.com/visionmedia/git-extras). - - - project: connect - commits: 2033 - active : 301 days - files : 171 - authors: - 1414 Tj Holowaychuk 69.6% - 298 visionmedia 14.7% - 191 Tim Caswell 9.4% - 51 TJ Holowaychuk 2.5% - 10 Ryan Olds 0.5% - 8 Astro 0.4% - 5 Nathan Rajlich 0.2% - 5 Jakub Nešetřil 0.2% - 3 Daniel Dickison 0.1% - 3 David Rio Deiros 0.1% - 3 Alexander Simmerl 0.1% - 3 Andreas Lind Petersen 0.1% - 2 Aaron Heckmann 0.1% - 2 Jacques Crocker 0.1% - 2 Fabian Jakobs 0.1% - 2 Brian J Brennan 0.1% - 2 Adam Malcontenti-Wilson 0.1% - 2 Glen Mailer 0.1% - 2 James Campos 0.1% - 1 Trent Mick 0.0% - 1 Troy Kruthoff 0.0% - 1 Wei Zhu 0.0% - 1 comerc 0.0% - 1 darobin 0.0% - 1 nateps 0.0% - 1 Marco Sanson 0.0% - 1 Arthur Taylor 0.0% - 1 Aseem Kishore 0.0% - 1 Bart Teeuwisse 0.0% - 1 Cameron Howey 0.0% - 1 Chad Weider 0.0% - 1 Craig Barnes 0.0% - 1 Eran Hammer-Lahav 0.0% - 1 Gregory McWhirter 0.0% - 1 Guillermo Rauch 0.0% - 1 Jae Kwon 0.0% - 1 Jakub Nesetril 0.0% - 1 Joshua Peek 0.0% - 1 Jxck 0.0% - 1 AJ ONeal 0.0% - 1 Michael Hemesath 0.0% - 1 Morten Siebuhr 0.0% - 1 Samori Gorse 0.0% - 1 Tom Jensen 0.0% - -## Node Compatibility - - Connect `< 1.x` is compatible with node 0.2.x - - - Connect `1.x` is compatible with node 0.4.x - - - Connect (_master_) `2.x` is compatible with node 0.6.x - -## CLA - - [http://sencha.com/cla](http://sencha.com/cla) - -## License - -View the [LICENSE](https://github.com/senchalabs/connect/blob/master/LICENSE) file. The [Silk](http://www.famfamfam.com/lab/icons/silk/) icons used by the `directory` middleware created by/copyright of [FAMFAMFAM](http://www.famfamfam.com/). diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/index.js deleted file mode 100644 index 23240ee..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/index.js +++ /dev/null @@ -1,4 +0,0 @@ - -module.exports = process.env.CONNECT_COV - ? require('./lib-cov/connect') - : require('./lib/connect'); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/cache.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/cache.js deleted file mode 100644 index 052fcdb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/cache.js +++ /dev/null @@ -1,81 +0,0 @@ - -/*! - * Connect - Cache - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Expose `Cache`. - */ - -module.exports = Cache; - -/** - * LRU cache store. - * - * @param {Number} limit - * @api private - */ - -function Cache(limit) { - this.store = {}; - this.keys = []; - this.limit = limit; -} - -/** - * Touch `key`, promoting the object. - * - * @param {String} key - * @param {Number} i - * @api private - */ - -Cache.prototype.touch = function(key, i){ - this.keys.splice(i,1); - this.keys.push(key); -}; - -/** - * Remove `key`. - * - * @param {String} key - * @api private - */ - -Cache.prototype.remove = function(key){ - delete this.store[key]; -}; - -/** - * Get the object stored for `key`. - * - * @param {String} key - * @return {Array} - * @api private - */ - -Cache.prototype.get = function(key){ - return this.store[key]; -}; - -/** - * Add a cache `key`. - * - * @param {String} key - * @return {Array} - * @api private - */ - -Cache.prototype.add = function(key){ - // initialize store - var len = this.keys.push(key); - - // limit reached, invalidate LRU - if (len > this.limit) this.remove(this.keys.shift()); - - var arr = this.store[key] = []; - arr.createdAt = new Date; - return arr; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/connect.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/connect.js deleted file mode 100644 index d588ad2..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/connect.js +++ /dev/null @@ -1,92 +0,0 @@ -/*! - * Connect - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , proto = require('./proto') - , utils = require('./utils') - , path = require('path') - , basename = path.basename - , fs = require('fs'); - -// node patches - -require('./patch'); - -// expose createServer() as the module - -exports = module.exports = createServer; - -/** - * Framework version. - */ - -exports.version = '2.7.4'; - -/** - * Expose mime module. - */ - -exports.mime = require('./middleware/static').mime; - -/** - * Expose the prototype. - */ - -exports.proto = proto; - -/** - * Auto-load middleware getters. - */ - -exports.middleware = {}; - -/** - * Expose utilities. - */ - -exports.utils = utils; - -/** - * Create a new connect server. - * - * @return {Function} - * @api public - */ - -function createServer() { - function app(req, res, next){ app.handle(req, res, next); } - utils.merge(app, proto); - utils.merge(app, EventEmitter.prototype); - app.route = '/'; - app.stack = []; - for (var i = 0; i < arguments.length; ++i) { - app.use(arguments[i]); - } - return app; -}; - -/** - * Support old `.createServer()` method. - */ - -createServer.createServer = createServer; - -/** - * Auto-load bundled middleware with getters. - */ - -fs.readdirSync(__dirname + '/middleware').forEach(function(filename){ - if (!/\.js$/.test(filename)) return; - var name = basename(filename, '.js'); - function load(){ return require('./middleware/' + name); } - exports.middleware.__defineGetter__(name, load); - exports.__defineGetter__(name, load); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/index.js deleted file mode 100644 index 2618ddc..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/index.js +++ /dev/null @@ -1,50 +0,0 @@ - -/** - * Connect is a middleware framework for node, - * shipping with over 18 bundled middleware and a rich selection of - * 3rd-party middleware. - * - * var app = connect() - * .use(connect.logger('dev')) - * .use(connect.static('public')) - * .use(function(req, res){ - * res.end('hello world\n'); - * }) - * .listen(3000); - * - * Installation: - * - * $ npm install connect - * - * Middleware: - * - * - [logger](logger.html) request logger with custom format support - * - [csrf](csrf.html) Cross-site request forgery protection - * - [compress](compress.html) Gzip compression middleware - * - [basicAuth](basicAuth.html) basic http authentication - * - [bodyParser](bodyParser.html) extensible request body parser - * - [json](json.html) application/json parser - * - [urlencoded](urlencoded.html) application/x-www-form-urlencoded parser - * - [multipart](multipart.html) multipart/form-data parser - * - [timeout](timeout.html) request timeouts - * - [cookieParser](cookieParser.html) cookie parser - * - [session](session.html) session management support with bundled MemoryStore - * - [cookieSession](cookieSession.html) cookie-based session support - * - [methodOverride](methodOverride.html) faux HTTP method support - * - [responseTime](responseTime.html) calculates response-time and exposes via X-Response-Time - * - [staticCache](staticCache.html) memory cache layer for the static() middleware - * - [static](static.html) streaming static file server supporting `Range` and more - * - [directory](directory.html) directory listing middleware - * - [vhost](vhost.html) virtual host sub-domain mapping middleware - * - [favicon](favicon.html) efficient favicon server (with default icon) - * - [limit](limit.html) limit the bytesize of request bodies - * - [query](query.html) automatic querystring parser, populating `req.query` - * - [errorHandler](errorHandler.html) flexible error handler - * - * Links: - * - * - list of [3rd-party](https://github.com/senchalabs/connect/wiki) middleware - * - GitHub [repository](http://github.com/senchalabs/connect) - * - [test documentation](https://github.com/senchalabs/connect/blob/gh-pages/tests.md) - * - */ \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/basicAuth.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/basicAuth.js deleted file mode 100644 index bc7ec97..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/basicAuth.js +++ /dev/null @@ -1,103 +0,0 @@ - -/*! - * Connect - basicAuth - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils') - , unauthorized = utils.unauthorized; - -/** - * Basic Auth: - * - * Enfore basic authentication by providing a `callback(user, pass)`, - * which must return `true` in order to gain access. Alternatively an async - * method is provided as well, invoking `callback(user, pass, callback)`. Populates - * `req.user`. The final alternative is simply passing username / password - * strings. - * - * Simple username and password - * - * connect(connect.basicAuth('username', 'password')); - * - * Callback verification - * - * connect() - * .use(connect.basicAuth(function(user, pass){ - * return 'tj' == user & 'wahoo' == pass; - * })) - * - * Async callback verification, accepting `fn(err, user)`. - * - * connect() - * .use(connect.basicAuth(function(user, pass, fn){ - * User.authenticate({ user: user, pass: pass }, fn); - * })) - * - * @param {Function|String} callback or username - * @param {String} realm - * @api public - */ - -module.exports = function basicAuth(callback, realm) { - var username, password; - - // user / pass strings - if ('string' == typeof callback) { - username = callback; - password = realm; - if ('string' != typeof password) throw new Error('password argument required'); - realm = arguments[2]; - callback = function(user, pass){ - return user == username && pass == password; - } - } - - realm = realm || 'Authorization Required'; - - return function(req, res, next) { - var authorization = req.headers.authorization; - - if (req.user) return next(); - if (!authorization) return unauthorized(res, realm); - - var parts = authorization.split(' '); - - if (parts.length !== 2) return next(utils.error(400)); - - var scheme = parts[0] - , credentials = new Buffer(parts[1], 'base64').toString() - , index = credentials.indexOf(':'); - - if ('Basic' != scheme || index < 0) return next(utils.error(400)); - - var user = credentials.slice(0, index) - , pass = credentials.slice(index + 1); - - // async - if (callback.length >= 3) { - var pause = utils.pause(req); - callback(user, pass, function(err, user){ - if (err || !user) return unauthorized(res, realm); - req.user = req.remoteUser = user; - next(); - pause.resume(); - }); - // sync - } else { - if (callback(user, pass)) { - req.user = req.remoteUser = user; - next(); - } else { - unauthorized(res, realm); - } - } - } -}; - diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js deleted file mode 100644 index 9f692cd..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js +++ /dev/null @@ -1,61 +0,0 @@ - -/*! - * Connect - bodyParser - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var multipart = require('./multipart') - , urlencoded = require('./urlencoded') - , json = require('./json'); - -/** - * Body parser: - * - * Parse request bodies, supports _application/json_, - * _application/x-www-form-urlencoded_, and _multipart/form-data_. - * - * This is equivalent to: - * - * app.use(connect.json()); - * app.use(connect.urlencoded()); - * app.use(connect.multipart()); - * - * Examples: - * - * connect() - * .use(connect.bodyParser()) - * .use(function(req, res) { - * res.end('viewing user ' + req.body.user.name); - * }); - * - * $ curl -d 'user[name]=tj' http://local/ - * $ curl -d '{"user":{"name":"tj"}}' -H "Content-Type: application/json" http://local/ - * - * View [json](json.html), [urlencoded](urlencoded.html), and [multipart](multipart.html) for more info. - * - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function bodyParser(options){ - var _urlencoded = urlencoded(options) - , _multipart = multipart(options) - , _json = json(options); - - return function bodyParser(req, res, next) { - _json(req, res, function(err){ - if (err) return next(err); - _urlencoded(req, res, function(err){ - if (err) return next(err); - _multipart(req, res, next); - }); - }); - } -}; \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/compress.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/compress.js deleted file mode 100644 index e71ea8c..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/compress.js +++ /dev/null @@ -1,152 +0,0 @@ -/*! - * Connect - compress - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var zlib = require('zlib'); - -/** - * Supported content-encoding methods. - */ - -exports.methods = { - gzip: zlib.createGzip - , deflate: zlib.createDeflate -}; - -/** - * Default filter function. - */ - -exports.filter = function(req, res){ - return /json|text|javascript/.test(res.getHeader('Content-Type')); -}; - -/** - * Compress: - * - * Compress response data with gzip/deflate. - * - * Filter: - * - * A `filter` callback function may be passed to - * replace the default logic of: - * - * exports.filter = function(req, res){ - * return /json|text|javascript/.test(res.getHeader('Content-Type')); - * }; - * - * Options: - * - * All remaining options are passed to the gzip/deflate - * creation functions. Consult node's docs for additional details. - * - * - `chunkSize` (default: 16*1024) - * - `windowBits` - * - `level`: 0-9 where 0 is no compression, and 9 is slow but best compression - * - `memLevel`: 1-9 low is slower but uses less memory, high is fast but uses more - * - `strategy`: compression strategy - * - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function compress(options) { - options = options || {}; - var names = Object.keys(exports.methods) - , filter = options.filter || exports.filter; - - return function compress(req, res, next){ - var accept = req.headers['accept-encoding'] - , vary = res.getHeader('Vary') - , write = res.write - , end = res.end - , stream - , method; - - // vary - if (!vary) { - res.setHeader('Vary', 'Accept-Encoding'); - } else if (!~vary.indexOf('Accept-Encoding')) { - res.setHeader('Vary', vary + ', Accept-Encoding'); - } - - // proxy - - res.write = function(chunk, encoding){ - if (!this.headerSent) this._implicitHeader(); - return stream - ? stream.write(new Buffer(chunk, encoding)) - : write.call(res, chunk, encoding); - }; - - res.end = function(chunk, encoding){ - if (chunk) this.write(chunk, encoding); - return stream - ? stream.end() - : end.call(res); - }; - - res.on('header', function(){ - var encoding = res.getHeader('Content-Encoding') || 'identity'; - - // already encoded - if ('identity' != encoding) return; - - // default request filter - if (!filter(req, res)) return; - - // SHOULD use identity - if (!accept) return; - - // head - if ('HEAD' == req.method) return; - - // default to gzip - if ('*' == accept.trim()) method = 'gzip'; - - // compression method - if (!method) { - for (var i = 0, len = names.length; i < len; ++i) { - if (~accept.indexOf(names[i])) { - method = names[i]; - break; - } - } - } - - // compression method - if (!method) return; - - // compression stream - stream = exports.methods[method](options); - - // header fields - res.setHeader('Content-Encoding', method); - res.removeHeader('Content-Length'); - - // compression - - stream.on('data', function(chunk){ - write.call(res, chunk); - }); - - stream.on('end', function(){ - end.call(res); - }); - - stream.on('drain', function() { - res.emit('drain'); - }); - }); - - next(); - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js deleted file mode 100644 index 5da23f2..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/cookieParser.js +++ /dev/null @@ -1,62 +0,0 @@ - -/*! - * Connect - cookieParser - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('./../utils') - , cookie = require('cookie'); - -/** - * Cookie parser: - * - * Parse _Cookie_ header and populate `req.cookies` - * with an object keyed by the cookie names. Optionally - * you may enabled signed cookie support by passing - * a `secret` string, which assigns `req.secret` so - * it may be used by other middleware. - * - * Examples: - * - * connect() - * .use(connect.cookieParser('optional secret string')) - * .use(function(req, res, next){ - * res.end(JSON.stringify(req.cookies)); - * }) - * - * @param {String} secret - * @return {Function} - * @api public - */ - -module.exports = function cookieParser(secret){ - return function cookieParser(req, res, next) { - if (req.cookies) return next(); - var cookies = req.headers.cookie; - - req.secret = secret; - req.cookies = {}; - req.signedCookies = {}; - - if (cookies) { - try { - req.cookies = cookie.parse(cookies); - if (secret) { - req.signedCookies = utils.parseSignedCookies(req.cookies, secret); - req.signedCookies = utils.parseJSONCookies(req.signedCookies); - } - req.cookies = utils.parseJSONCookies(req.cookies); - } catch (err) { - err.status = 400; - return next(err); - } - } - next(); - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/cookieSession.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/cookieSession.js deleted file mode 100644 index 402fd55..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/cookieSession.js +++ /dev/null @@ -1,117 +0,0 @@ - -/*! - * Connect - cookieSession - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('./../utils') - , Cookie = require('./session/cookie') - , debug = require('debug')('connect:cookieSession') - , signature = require('cookie-signature') - , crc32 = require('buffer-crc32'); - -/** - * Cookie Session: - * - * Cookie session middleware. - * - * var app = connect(); - * app.use(connect.cookieParser()); - * app.use(connect.cookieSession({ secret: 'tobo!', cookie: { maxAge: 60 * 60 * 1000 }})); - * - * Options: - * - * - `key` cookie name defaulting to `connect.sess` - * - `secret` prevents cookie tampering - * - `cookie` session cookie settings, defaulting to `{ path: '/', httpOnly: true, maxAge: null }` - * - `proxy` trust the reverse proxy when setting secure cookies (via "x-forwarded-proto") - * - * Clearing sessions: - * - * To clear the session simply set its value to `null`, - * `cookieSession()` will then respond with a 1970 Set-Cookie. - * - * req.session = null; - * - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function cookieSession(options){ - // TODO: utilize Session/Cookie to unify API - options = options || {}; - var key = options.key || 'connect.sess' - , trustProxy = options.proxy; - - return function cookieSession(req, res, next) { - - // req.secret is for backwards compatibility - var secret = options.secret || req.secret; - if (!secret) throw new Error('`secret` option required for cookie sessions'); - - // default session - req.session = {}; - var cookie = req.session.cookie = new Cookie(options.cookie); - - // pathname mismatch - if (0 != req.originalUrl.indexOf(cookie.path)) return next(); - - // cookieParser secret - if (!options.secret && req.secret) { - req.session = req.signedCookies[key] || {}; - req.session.cookie = cookie; - } else { - // TODO: refactor - var rawCookie = req.cookies[key]; - if (rawCookie) { - var unsigned = utils.parseSignedCookie(rawCookie, secret); - if (unsigned) { - var originalHash = crc32.signed(unsigned); - req.session = utils.parseJSONCookie(unsigned) || {}; - req.session.cookie = cookie; - } - } - } - - res.on('header', function(){ - // removed - if (!req.session) { - debug('clear session'); - cookie.expires = new Date(0); - res.setHeader('Set-Cookie', cookie.serialize(key, '')); - return; - } - - delete req.session.cookie; - - // check security - var proto = (req.headers['x-forwarded-proto'] || '').toLowerCase() - , tls = req.connection.encrypted || (trustProxy && 'https' == proto) - , secured = cookie.secure && tls; - - // only send secure cookies via https - if (cookie.secure && !secured) return debug('not secured'); - - // serialize - debug('serializing %j', req.session); - var val = 'j:' + JSON.stringify(req.session); - - // compare hashes, no need to set-cookie if unchanged - if (originalHash == crc32.signed(val)) return debug('unmodified session'); - - // set-cookie - val = 's:' + signature.sign(val, secret); - val = cookie.serialize(key, val); - debug('set-cookie %j', cookie); - res.setHeader('Set-Cookie', val); - }); - - next(); - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/csrf.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/csrf.js deleted file mode 100644 index e3c353e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/csrf.js +++ /dev/null @@ -1,73 +0,0 @@ -/*! - * Connect - csrf - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils'); - -/** - * Anti CSRF: - * - * CRSF protection middleware. - * - * By default this middleware generates a token named "_csrf" - * which should be added to requests which mutate - * state, within a hidden form field, query-string etc. This - * token is validated against the visitor's `req.session._csrf` - * property. - * - * The default `value` function checks `req.body` generated - * by the `bodyParser()` middleware, `req.query` generated - * by `query()`, and the "X-CSRF-Token" header field. - * - * This middleware requires session support, thus should be added - * somewhere _below_ `session()` and `cookieParser()`. - * - * Options: - * - * - `value` a function accepting the request, returning the token - * - * @param {Object} options - * @api public - */ - -module.exports = function csrf(options) { - options = options || {}; - var value = options.value || defaultValue; - - return function(req, res, next){ - // generate CSRF token - var token = req.session._csrf || (req.session._csrf = utils.uid(24)); - - // ignore these methods - if ('GET' == req.method || 'HEAD' == req.method || 'OPTIONS' == req.method) return next(); - - // determine value - var val = value(req); - - // check - if (val != token) return next(utils.error(403)); - - next(); - } -}; - -/** - * Default value function, checking the `req.body` - * and `req.query` for the CSRF token. - * - * @param {IncomingMessage} req - * @return {String} - * @api private - */ - -function defaultValue(req) { - return (req.body && req.body._csrf) - || (req.query && req.query._csrf) - || (req.headers['x-csrf-token']); -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/directory.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/directory.js deleted file mode 100644 index 1c925a7..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/directory.js +++ /dev/null @@ -1,229 +0,0 @@ - -/*! - * Connect - directory - * Copyright(c) 2011 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -// TODO: icon / style for directories -// TODO: arrow key navigation -// TODO: make icons extensible - -/** - * Module dependencies. - */ - -var fs = require('fs') - , parse = require('url').parse - , utils = require('../utils') - , path = require('path') - , normalize = path.normalize - , extname = path.extname - , join = path.join; - -/*! - * Icon cache. - */ - -var cache = {}; - -/** - * Directory: - * - * Serve directory listings with the given `root` path. - * - * Options: - * - * - `hidden` display hidden (dot) files. Defaults to false. - * - `icons` display icons. Defaults to false. - * - `filter` Apply this filter function to files. Defaults to false. - * - * @param {String} root - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function directory(root, options){ - options = options || {}; - - // root required - if (!root) throw new Error('directory() root path required'); - var hidden = options.hidden - , icons = options.icons - , filter = options.filter - , root = normalize(root); - - return function directory(req, res, next) { - if ('GET' != req.method && 'HEAD' != req.method) return next(); - - var accept = req.headers.accept || 'text/plain' - , url = parse(req.url) - , dir = decodeURIComponent(url.pathname) - , path = normalize(join(root, dir)) - , originalUrl = parse(req.originalUrl) - , originalDir = decodeURIComponent(originalUrl.pathname) - , showUp = path != root && path != root + '/'; - - // null byte(s), bad request - if (~path.indexOf('\0')) return next(utils.error(400)); - - // malicious path, forbidden - if (0 != path.indexOf(root)) return next(utils.error(403)); - - // check if we have a directory - fs.stat(path, function(err, stat){ - if (err) return 'ENOENT' == err.code - ? next() - : next(err); - - if (!stat.isDirectory()) return next(); - - // fetch files - fs.readdir(path, function(err, files){ - if (err) return next(err); - if (!hidden) files = removeHidden(files); - if (filter) files = files.filter(filter); - files.sort(); - - // content-negotiation - for (var key in exports) { - if (~accept.indexOf(key) || ~accept.indexOf('*/*')) { - exports[key](req, res, files, next, originalDir, showUp, icons); - return; - } - } - - // not acceptable - next(utils.error(406)); - }); - }); - }; -}; - -/** - * Respond with text/html. - */ - -exports.html = function(req, res, files, next, dir, showUp, icons){ - fs.readFile(__dirname + '/../public/directory.html', 'utf8', function(err, str){ - if (err) return next(err); - fs.readFile(__dirname + '/../public/style.css', 'utf8', function(err, style){ - if (err) return next(err); - if (showUp) files.unshift('..'); - str = str - .replace('{style}', style) - .replace('{files}', html(files, dir, icons)) - .replace('{directory}', dir) - .replace('{linked-path}', htmlPath(dir)); - res.setHeader('Content-Type', 'text/html'); - res.setHeader('Content-Length', str.length); - res.end(str); - }); - }); -}; - -/** - * Respond with application/json. - */ - -exports.json = function(req, res, files){ - files = JSON.stringify(files); - res.setHeader('Content-Type', 'application/json'); - res.setHeader('Content-Length', files.length); - res.end(files); -}; - -/** - * Respond with text/plain. - */ - -exports.plain = function(req, res, files){ - files = files.join('\n') + '\n'; - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Content-Length', files.length); - res.end(files); -}; - -/** - * Map html `dir`, returning a linked path. - */ - -function htmlPath(dir) { - var curr = []; - return dir.split('/').map(function(part){ - curr.push(part); - return '' + part + ''; - }).join(' / '); -} - -/** - * Map html `files`, returning an html unordered list. - */ - -function html(files, dir, useIcons) { - return '
    ' + files.map(function(file){ - var icon = '' - , classes = []; - - if (useIcons && '..' != file) { - icon = icons[extname(file)] || icons.default; - icon = ''; - classes.push('icon'); - } - - return '
  • ' - + icon + file + '
  • '; - - }).join('\n') + '
'; -} - -/** - * Load and cache the given `icon`. - * - * @param {String} icon - * @return {String} - * @api private - */ - -function load(icon) { - if (cache[icon]) return cache[icon]; - return cache[icon] = fs.readFileSync(__dirname + '/../public/icons/' + icon, 'base64'); -} - -/** - * Filter "hidden" `files`, aka files - * beginning with a `.`. - * - * @param {Array} files - * @return {Array} - * @api private - */ - -function removeHidden(files) { - return files.filter(function(file){ - return '.' != file[0]; - }); -} - -/** - * Icon map. - */ - -var icons = { - '.js': 'page_white_code_red.png' - , '.c': 'page_white_c.png' - , '.h': 'page_white_h.png' - , '.cc': 'page_white_cplusplus.png' - , '.php': 'page_white_php.png' - , '.rb': 'page_white_ruby.png' - , '.cpp': 'page_white_cplusplus.png' - , '.swf': 'page_white_flash.png' - , '.pdf': 'page_white_acrobat.png' - , 'default': 'page_white.png' -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js deleted file mode 100644 index 4a84edc..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/errorHandler.js +++ /dev/null @@ -1,86 +0,0 @@ -/*! - * Connect - errorHandler - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils') - , fs = require('fs'); - -// environment - -var env = process.env.NODE_ENV || 'development'; - -/** - * Error handler: - * - * Development error handler, providing stack traces - * and error message responses for requests accepting text, html, - * or json. - * - * Text: - * - * By default, and when _text/plain_ is accepted a simple stack trace - * or error message will be returned. - * - * JSON: - * - * When _application/json_ is accepted, connect will respond with - * an object in the form of `{ "error": error }`. - * - * HTML: - * - * When accepted connect will output a nice html stack trace. - * - * @return {Function} - * @api public - */ - -exports = module.exports = function errorHandler(){ - return function errorHandler(err, req, res, next){ - if (err.status) res.statusCode = err.status; - if (res.statusCode < 400) res.statusCode = 500; - if ('test' != env) console.error(err.stack); - var accept = req.headers.accept || ''; - // html - if (~accept.indexOf('html')) { - fs.readFile(__dirname + '/../public/style.css', 'utf8', function(e, style){ - fs.readFile(__dirname + '/../public/error.html', 'utf8', function(e, html){ - var stack = (err.stack || '') - .split('\n').slice(1) - .map(function(v){ return '
  • ' + v + '
  • '; }).join(''); - html = html - .replace('{style}', style) - .replace('{stack}', stack) - .replace('{title}', exports.title) - .replace('{statusCode}', res.statusCode) - .replace(/\{error\}/g, utils.escape(err.toString())); - res.setHeader('Content-Type', 'text/html; charset=utf-8'); - res.end(html); - }); - }); - // json - } else if (~accept.indexOf('json')) { - var error = { message: err.message, stack: err.stack }; - for (var prop in err) error[prop] = err[prop]; - var json = JSON.stringify({ error: error }); - res.setHeader('Content-Type', 'application/json'); - res.end(json); - // plain text - } else { - res.writeHead(res.statusCode, { 'Content-Type': 'text/plain' }); - res.end(err.stack); - } - }; -}; - -/** - * Template title, framework authors may override this value. - */ - -exports.title = 'Connect'; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/favicon.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/favicon.js deleted file mode 100644 index ef54354..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/favicon.js +++ /dev/null @@ -1,80 +0,0 @@ -/*! - * Connect - favicon - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var fs = require('fs') - , utils = require('../utils'); - -/** - * Favicon: - * - * By default serves the connect favicon, or the favicon - * located by the given `path`. - * - * Options: - * - * - `maxAge` cache-control max-age directive, defaulting to 1 day - * - * Examples: - * - * Serve default favicon: - * - * connect() - * .use(connect.favicon()) - * - * Serve favicon before logging for brevity: - * - * connect() - * .use(connect.favicon()) - * .use(connect.logger('dev')) - * - * Serve custom favicon: - * - * connect() - * .use(connect.favicon('public/favicon.ico')) - * - * @param {String} path - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function favicon(path, options){ - var options = options || {} - , path = path || __dirname + '/../public/favicon.ico' - , maxAge = options.maxAge || 86400000 - , icon; // favicon cache - - return function favicon(req, res, next){ - if ('/favicon.ico' == req.url) { - if (icon) { - res.writeHead(200, icon.headers); - res.end(icon.body); - } else { - fs.readFile(path, function(err, buf){ - if (err) return next(err); - icon = { - headers: { - 'Content-Type': 'image/x-icon' - , 'Content-Length': buf.length - , 'ETag': '"' + utils.md5(buf) + '"' - , 'Cache-Control': 'public, max-age=' + (maxAge / 1000) - }, - body: buf - }; - res.writeHead(200, icon.headers); - res.end(icon.body); - }); - } - } else { - next(); - } - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/json.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/json.js deleted file mode 100644 index 17e5918..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/json.js +++ /dev/null @@ -1,86 +0,0 @@ - -/*! - * Connect - json - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils') - , _limit = require('./limit'); - -/** - * noop middleware. - */ - -function noop(req, res, next) { - next(); -} - -/** - * JSON: - * - * Parse JSON request bodies, providing the - * parsed object as `req.body`. - * - * Options: - * - * - `strict` when `false` anything `JSON.parse()` accepts will be parsed - * - `reviver` used as the second "reviver" argument for JSON.parse - * - `limit` byte limit disabled by default - * - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function(options){ - var options = options || {} - , strict = options.strict !== false; - - var limit = options.limit - ? _limit(options.limit) - : noop; - - return function json(req, res, next) { - if (req._body) return next(); - req.body = req.body || {}; - - if (!utils.hasBody(req)) return next(); - - // check Content-Type - if ('application/json' != utils.mime(req)) return next(); - - // flag as parsed - req._body = true; - - // parse - limit(req, res, function(err){ - if (err) return next(err); - var buf = ''; - req.setEncoding('utf8'); - req.on('data', function(chunk){ buf += chunk }); - req.on('end', function(){ - var first = buf.trim()[0]; - - if (0 == buf.length) { - return next(utils.error(400, 'invalid json, empty body')); - } - - if (strict && '{' != first && '[' != first) return next(utils.error(400, 'invalid json')); - try { - req.body = JSON.parse(buf, options.reviver); - } catch (err){ - err.body = buf; - err.status = 400; - return next(err); - } - next(); - }); - }); - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/limit.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/limit.js deleted file mode 100644 index 8233b4d..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/limit.js +++ /dev/null @@ -1,55 +0,0 @@ - -/*! - * Connect - limit - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils'); - -/** - * Limit: - * - * Limit request bodies to the given size in `bytes`. - * - * A string representation of the bytesize may also be passed, - * for example "5mb", "200kb", "1gb", etc. - * - * connect() - * .use(connect.limit('5.5mb')) - * .use(handleImageUpload) - * - * @param {Number|String} bytes - * @return {Function} - * @api public - */ - -module.exports = function limit(bytes){ - if ('string' == typeof bytes) bytes = utils.parseBytes(bytes); - if ('number' != typeof bytes) throw new Error('limit() bytes required'); - return function limit(req, res, next){ - var received = 0 - , len = req.headers['content-length'] - ? parseInt(req.headers['content-length'], 10) - : null; - - // self-awareness - if (req._limit) return next(); - req._limit = true; - - // limit by content-length - if (len && len > bytes) return next(utils.error(413)); - - // limit - req.on('data', function(chunk){ - received += chunk.length; - if (received > bytes) req.destroy(); - }); - - next(); - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/logger.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/logger.js deleted file mode 100644 index de72244..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/logger.js +++ /dev/null @@ -1,339 +0,0 @@ -/*! - * Connect - logger - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var bytes = require('bytes'); - -/*! - * Log buffer. - */ - -var buf = []; - -/*! - * Default log buffer duration. - */ - -var defaultBufferDuration = 1000; - -/** - * Logger: - * - * Log requests with the given `options` or a `format` string. - * - * Options: - * - * - `format` Format string, see below for tokens - * - `stream` Output stream, defaults to _stdout_ - * - `buffer` Buffer duration, defaults to 1000ms when _true_ - * - `immediate` Write log line on request instead of response (for response times) - * - * Tokens: - * - * - `:req[header]` ex: `:req[Accept]` - * - `:res[header]` ex: `:res[Content-Length]` - * - `:http-version` - * - `:response-time` - * - `:remote-addr` - * - `:date` - * - `:method` - * - `:url` - * - `:referrer` - * - `:user-agent` - * - `:status` - * - * Formats: - * - * Pre-defined formats that ship with connect: - * - * - `default` ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"' - * - `short` ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms' - * - `tiny` ':method :url :status :res[content-length] - :response-time ms' - * - `dev` concise output colored by response status for development use - * - * Examples: - * - * connect.logger() // default - * connect.logger('short') - * connect.logger('tiny') - * connect.logger({ immediate: true, format: 'dev' }) - * connect.logger(':method :url - :referrer') - * connect.logger(':req[content-type] -> :res[content-type]') - * connect.logger(function(tokens, req, res){ return 'some format string' }) - * - * Defining Tokens: - * - * To define a token, simply invoke `connect.logger.token()` with the - * name and a callback function. The value returned is then available - * as ":type" in this case. - * - * connect.logger.token('type', function(req, res){ return req.headers['content-type']; }) - * - * Defining Formats: - * - * All default formats are defined this way, however it's public API as well: - * - * connect.logger.format('name', 'string or function') - * - * @param {String|Function|Object} format or options - * @return {Function} - * @api public - */ - -exports = module.exports = function logger(options) { - if ('object' == typeof options) { - options = options || {}; - } else if (options) { - options = { format: options }; - } else { - options = {}; - } - - // output on request instead of response - var immediate = options.immediate; - - // format name - var fmt = exports[options.format] || options.format || exports.default; - - // compile format - if ('function' != typeof fmt) fmt = compile(fmt); - - // options - var stream = options.stream || process.stdout - , buffer = options.buffer; - - // buffering support - if (buffer) { - var realStream = stream - , interval = 'number' == typeof buffer - ? buffer - : defaultBufferDuration; - - // flush interval - setInterval(function(){ - if (buf.length) { - realStream.write(buf.join('')); - buf.length = 0; - } - }, interval); - - // swap the stream - stream = { - write: function(str){ - buf.push(str); - } - }; - } - - return function logger(req, res, next) { - req._startTime = new Date; - - // immediate - if (immediate) { - var line = fmt(exports, req, res); - if (null == line) return; - stream.write(line + '\n'); - // proxy end to output logging - } else { - var end = res.end; - res.end = function(chunk, encoding){ - res.end = end; - res.end(chunk, encoding); - var line = fmt(exports, req, res); - if (null == line) return; - stream.write(line + '\n'); - }; - } - - - next(); - }; -}; - -/** - * Compile `fmt` into a function. - * - * @param {String} fmt - * @return {Function} - * @api private - */ - -function compile(fmt) { - fmt = fmt.replace(/"/g, '\\"'); - var js = ' return "' + fmt.replace(/:([-\w]{2,})(?:\[([^\]]+)\])?/g, function(_, name, arg){ - return '"\n + (tokens["' + name + '"](req, res, "' + arg + '") || "-") + "'; - }) + '";' - return new Function('tokens, req, res', js); -}; - -/** - * Define a token function with the given `name`, - * and callback `fn(req, res)`. - * - * @param {String} name - * @param {Function} fn - * @return {Object} exports for chaining - * @api public - */ - -exports.token = function(name, fn) { - exports[name] = fn; - return this; -}; - -/** - * Define a `fmt` with the given `name`. - * - * @param {String} name - * @param {String|Function} fmt - * @return {Object} exports for chaining - * @api public - */ - -exports.format = function(name, str){ - exports[name] = str; - return this; -}; - -/** - * Default format. - */ - -exports.format('default', ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'); - -/** - * Short format. - */ - -exports.format('short', ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms'); - -/** - * Tiny format. - */ - -exports.format('tiny', ':method :url :status :res[content-length] - :response-time ms'); - -/** - * dev (colored) - */ - -exports.format('dev', function(tokens, req, res){ - var status = res.statusCode - , len = parseInt(res.getHeader('Content-Length'), 10) - , color = 32; - - if (status >= 500) color = 31 - else if (status >= 400) color = 33 - else if (status >= 300) color = 36; - - len = isNaN(len) - ? '' - : len = ' - ' + bytes(len); - - return '\033[90m' + req.method - + ' ' + req.originalUrl + ' ' - + '\033[' + color + 'm' + res.statusCode - + ' \033[90m' - + (new Date - req._startTime) - + 'ms' + len - + '\033[0m'; -}); - -/** - * request url - */ - -exports.token('url', function(req){ - return req.originalUrl || req.url; -}); - -/** - * request method - */ - -exports.token('method', function(req){ - return req.method; -}); - -/** - * response time in milliseconds - */ - -exports.token('response-time', function(req){ - return new Date - req._startTime; -}); - -/** - * UTC date - */ - -exports.token('date', function(){ - return new Date().toUTCString(); -}); - -/** - * response status code - */ - -exports.token('status', function(req, res){ - return res.statusCode; -}); - -/** - * normalized referrer - */ - -exports.token('referrer', function(req){ - return req.headers['referer'] || req.headers['referrer']; -}); - -/** - * remote address - */ - -exports.token('remote-addr', function(req){ - if (req.ip) return req.ip; - var sock = req.socket; - if (sock.socket) return sock.socket.remoteAddress; - return sock.remoteAddress; -}); - -/** - * HTTP version - */ - -exports.token('http-version', function(req){ - return req.httpVersionMajor + '.' + req.httpVersionMinor; -}); - -/** - * UA string - */ - -exports.token('user-agent', function(req){ - return req.headers['user-agent']; -}); - -/** - * request header - */ - -exports.token('req', function(req, res, field){ - return req.headers[field.toLowerCase()]; -}); - -/** - * response header - */ - -exports.token('res', function(req, res, field){ - return (res._headers || {})[field.toLowerCase()]; -}); - diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js deleted file mode 100644 index aaf4014..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/methodOverride.js +++ /dev/null @@ -1,40 +0,0 @@ - -/*! - * Connect - methodOverride - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Method Override: - * - * Provides faux HTTP method support. - * - * Pass an optional `key` to use when checking for - * a method override, othewise defaults to _\_method_. - * The original method is available via `req.originalMethod`. - * - * @param {String} key - * @return {Function} - * @api public - */ - -module.exports = function methodOverride(key){ - key = key || "_method"; - return function methodOverride(req, res, next) { - req.originalMethod = req.originalMethod || req.method; - - // req.body - if (req.body && key in req.body) { - req.method = req.body[key].toUpperCase(); - delete req.body[key]; - // check X-HTTP-Method-Override - } else if (req.headers['x-http-method-override']) { - req.method = req.headers['x-http-method-override'].toUpperCase(); - } - - next(); - }; -}; - diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/multipart.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/multipart.js deleted file mode 100644 index 7b26fae..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/multipart.js +++ /dev/null @@ -1,133 +0,0 @@ -/*! - * Connect - multipart - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var formidable = require('formidable') - , _limit = require('./limit') - , utils = require('../utils') - , qs = require('qs'); - -/** - * noop middleware. - */ - -function noop(req, res, next) { - next(); -} - -/** - * Multipart: - * - * Parse multipart/form-data request bodies, - * providing the parsed object as `req.body` - * and `req.files`. - * - * Configuration: - * - * The options passed are merged with [formidable](https://github.com/felixge/node-formidable)'s - * `IncomingForm` object, allowing you to configure the upload directory, - * size limits, etc. For example if you wish to change the upload dir do the following. - * - * app.use(connect.multipart({ uploadDir: path })); - * - * Options: - * - * - `limit` byte limit defaulting to none - * - `defer` defers processing and exposes the Formidable form object as `req.form`. - * `next()` is called without waiting for the form's "end" event. - * This option is useful if you need to bind to the "progress" event, for example. - * - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function(options){ - options = options || {}; - - var limit = options.limit - ? _limit(options.limit) - : noop; - - return function multipart(req, res, next) { - if (req._body) return next(); - req.body = req.body || {}; - req.files = req.files || {}; - - if (!utils.hasBody(req)) return next(); - - // ignore GET - if ('GET' == req.method || 'HEAD' == req.method) return next(); - - // check Content-Type - if ('multipart/form-data' != utils.mime(req)) return next(); - - // flag as parsed - req._body = true; - - // parse - limit(req, res, function(err){ - if (err) return next(err); - - var form = new formidable.IncomingForm - , data = {} - , files = {} - , done; - - Object.keys(options).forEach(function(key){ - form[key] = options[key]; - }); - - function ondata(name, val, data){ - if (Array.isArray(data[name])) { - data[name].push(val); - } else if (data[name]) { - data[name] = [data[name], val]; - } else { - data[name] = val; - } - } - - form.on('field', function(name, val){ - ondata(name, val, data); - }); - - form.on('file', function(name, val){ - ondata(name, val, files); - }); - - form.on('error', function(err){ - if (!options.defer) { - err.status = 400; - next(err); - } - done = true; - }); - - form.on('end', function(){ - if (done) return; - try { - req.body = qs.parse(data); - req.files = qs.parse(files); - if (!options.defer) next(); - } catch (err) { - form.emit('error', err); - } - }); - - form.parse(req); - - if (options.defer) { - req.form = form; - next(); - } - }); - } -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/query.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/query.js deleted file mode 100644 index 93fc5d3..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/query.js +++ /dev/null @@ -1,46 +0,0 @@ -/*! - * Connect - query - * Copyright(c) 2011 TJ Holowaychuk - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var qs = require('qs') - , parse = require('../utils').parseUrl; - -/** - * Query: - * - * Automatically parse the query-string when available, - * populating the `req.query` object. - * - * Examples: - * - * connect() - * .use(connect.query()) - * .use(function(req, res){ - * res.end(JSON.stringify(req.query)); - * }); - * - * The `options` passed are provided to qs.parse function. - * - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function query(options){ - return function query(req, res, next){ - if (!req.query) { - req.query = ~req.url.indexOf('?') - ? qs.parse(parse(req).query, options) - : {}; - } - - next(); - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/responseTime.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/responseTime.js deleted file mode 100644 index 62abc04..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/responseTime.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Connect - responseTime - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Reponse time: - * - * Adds the `X-Response-Time` header displaying the response - * duration in milliseconds. - * - * @return {Function} - * @api public - */ - -module.exports = function responseTime(){ - return function(req, res, next){ - var start = new Date; - - if (res._responseTime) return next(); - res._responseTime = true; - - res.on('header', function(){ - var duration = new Date - start; - res.setHeader('X-Response-Time', duration + 'ms'); - }); - - next(); - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session.js deleted file mode 100644 index 9be6c8b..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session.js +++ /dev/null @@ -1,356 +0,0 @@ - -/*! - * Connect - session - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Session = require('./session/session') - , debug = require('debug')('connect:session') - , MemoryStore = require('./session/memory') - , signature = require('cookie-signature') - , Cookie = require('./session/cookie') - , Store = require('./session/store') - , utils = require('./../utils') - , parse = utils.parseUrl - , crc32 = require('buffer-crc32'); - -// environment - -var env = process.env.NODE_ENV; - -/** - * Expose the middleware. - */ - -exports = module.exports = session; - -/** - * Expose constructors. - */ - -exports.Store = Store; -exports.Cookie = Cookie; -exports.Session = Session; -exports.MemoryStore = MemoryStore; - -/** - * Warning message for `MemoryStore` usage in production. - */ - -var warning = 'Warning: connection.session() MemoryStore is not\n' - + 'designed for a production environment, as it will leak\n' - + 'memory, and will not scale past a single process.'; - -/** - * Session: - * - * Setup session store with the given `options`. - * - * Session data is _not_ saved in the cookie itself, however - * cookies are used, so we must use the [cookieParser()](cookieParser.html) - * middleware _before_ `session()`. - * - * Examples: - * - * connect() - * .use(connect.cookieParser()) - * .use(connect.session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }})) - * - * Options: - * - * - `key` cookie name defaulting to `connect.sid` - * - `store` session store instance - * - `secret` session cookie is signed with this secret to prevent tampering - * - `cookie` session cookie settings, defaulting to `{ path: '/', httpOnly: true, maxAge: null }` - * - `proxy` trust the reverse proxy when setting secure cookies (via "x-forwarded-proto") - * - * Cookie option: - * - * By default `cookie.maxAge` is `null`, meaning no "expires" parameter is set - * so the cookie becomes a browser-session cookie. When the user closes the - * browser the cookie (and session) will be removed. - * - * ## req.session - * - * To store or access session data, simply use the request property `req.session`, - * which is (generally) serialized as JSON by the store, so nested objects - * are typically fine. For example below is a user-specific view counter: - * - * connect() - * .use(connect.favicon()) - * .use(connect.cookieParser()) - * .use(connect.session({ secret: 'keyboard cat', cookie: { maxAge: 60000 }})) - * .use(function(req, res, next){ - * var sess = req.session; - * if (sess.views) { - * res.setHeader('Content-Type', 'text/html'); - * res.write('

    views: ' + sess.views + '

    '); - * res.write('

    expires in: ' + (sess.cookie.maxAge / 1000) + 's

    '); - * res.end(); - * sess.views++; - * } else { - * sess.views = 1; - * res.end('welcome to the session demo. refresh!'); - * } - * } - * )).listen(3000); - * - * ## Session#regenerate() - * - * To regenerate the session simply invoke the method, once complete - * a new SID and `Session` instance will be initialized at `req.session`. - * - * req.session.regenerate(function(err){ - * // will have a new session here - * }); - * - * ## Session#destroy() - * - * Destroys the session, removing `req.session`, will be re-generated next request. - * - * req.session.destroy(function(err){ - * // cannot access session here - * }); - * - * ## Session#reload() - * - * Reloads the session data. - * - * req.session.reload(function(err){ - * // session updated - * }); - * - * ## Session#save() - * - * Save the session. - * - * req.session.save(function(err){ - * // session saved - * }); - * - * ## Session#touch() - * - * Updates the `.maxAge` property. Typically this is - * not necessary to call, as the session middleware does this for you. - * - * ## Session#cookie - * - * Each session has a unique cookie object accompany it. This allows - * you to alter the session cookie per visitor. For example we can - * set `req.session.cookie.expires` to `false` to enable the cookie - * to remain for only the duration of the user-agent. - * - * ## Session#maxAge - * - * Alternatively `req.session.cookie.maxAge` will return the time - * remaining in milliseconds, which we may also re-assign a new value - * to adjust the `.expires` property appropriately. The following - * are essentially equivalent - * - * var hour = 3600000; - * req.session.cookie.expires = new Date(Date.now() + hour); - * req.session.cookie.maxAge = hour; - * - * For example when `maxAge` is set to `60000` (one minute), and 30 seconds - * has elapsed it will return `30000` until the current request has completed, - * at which time `req.session.touch()` is called to reset `req.session.maxAge` - * to its original value. - * - * req.session.cookie.maxAge; - * // => 30000 - * - * Session Store Implementation: - * - * Every session store _must_ implement the following methods - * - * - `.get(sid, callback)` - * - `.set(sid, session, callback)` - * - `.destroy(sid, callback)` - * - * Recommended methods include, but are not limited to: - * - * - `.length(callback)` - * - `.clear(callback)` - * - * For an example implementation view the [connect-redis](http://github.com/visionmedia/connect-redis) repo. - * - * @param {Object} options - * @return {Function} - * @api public - */ - -function session(options){ - var options = options || {} - , key = options.key || 'connect.sid' - , store = options.store || new MemoryStore - , cookie = options.cookie || {} - , trustProxy = options.proxy - , storeReady = true; - - // notify user that this store is not - // meant for a production environment - if ('production' == env && store instanceof MemoryStore) { - console.warn(warning); - } - - // generates the new session - store.generate = function(req){ - req.sessionID = utils.uid(24); - req.session = new Session(req); - req.session.cookie = new Cookie(cookie); - }; - - store.on('disconnect', function(){ storeReady = false; }); - store.on('connect', function(){ storeReady = true; }); - - return function session(req, res, next) { - // self-awareness - if (req.session) return next(); - - // Handle connection as if there is no session if - // the store has temporarily disconnected etc - if (!storeReady) return debug('store is disconnected'), next(); - - // pathname mismatch - if (0 != req.originalUrl.indexOf(cookie.path || '/')) return next(); - - // backwards compatibility for signed cookies - // req.secret is passed from the cookie parser middleware - var secret = options.secret || req.secret; - - // ensure secret is available or bail - if (!secret) throw new Error('`secret` option required for sessions'); - - // parse url - var originalHash - , originalId; - - // expose store - req.sessionStore = store; - - // grab the session cookie value and check the signature - var rawCookie = req.cookies[key]; - - // get signedCookies for backwards compat with signed cookies - var unsignedCookie = req.signedCookies[key]; - - if (!unsignedCookie && rawCookie) { - unsignedCookie = utils.parseSignedCookie(rawCookie, secret); - } - - // set-cookie - res.on('header', function(){ - if (!req.session) return; - var cookie = req.session.cookie - , proto = (req.headers['x-forwarded-proto'] || '').split(',')[0].toLowerCase().trim() - , tls = req.connection.encrypted || (trustProxy && 'https' == proto) - , secured = cookie.secure && tls - , isNew = unsignedCookie != req.sessionID; - - // only send secure cookies via https - if (cookie.secure && !secured) return debug('not secured'); - - // long expires, handle expiry server-side - if (!isNew && cookie.hasLongExpires) return debug('already set cookie'); - - // browser-session length cookie - if (null == cookie.expires) { - if (!isNew) return debug('already set browser-session cookie'); - // compare hashes and ids - } else if (originalHash == hash(req.session) && originalId == req.session.id) { - return debug('unmodified session'); - } - - var val = 's:' + signature.sign(req.sessionID, secret); - val = cookie.serialize(key, val); - debug('set-cookie %s', val); - res.setHeader('Set-Cookie', val); - }); - - // proxy end() to commit the session - var end = res.end; - res.end = function(data, encoding){ - res.end = end; - if (!req.session) return res.end(data, encoding); - debug('saving'); - req.session.resetMaxAge(); - req.session.save(function(err){ - if (err) console.error(err.stack); - debug('saved'); - res.end(data, encoding); - }); - }; - - // generate the session - function generate() { - store.generate(req); - } - - // get the sessionID from the cookie - req.sessionID = unsignedCookie; - - // generate a session if the browser doesn't send a sessionID - if (!req.sessionID) { - debug('no SID sent, generating session'); - generate(); - next(); - return; - } - - // generate the session object - var pause = utils.pause(req); - debug('fetching %s', req.sessionID); - store.get(req.sessionID, function(err, sess){ - // proxy to resume() events - var _next = next; - next = function(err){ - _next(err); - pause.resume(); - }; - - // error handling - if (err) { - debug('error %j', err); - if ('ENOENT' == err.code) { - generate(); - next(); - } else { - next(err); - } - // no session - } else if (!sess) { - debug('no session found'); - generate(); - next(); - // populate req.session - } else { - debug('session found'); - store.createSession(req, sess); - originalId = req.sessionID; - originalHash = hash(sess); - next(); - } - }); - }; -}; - -/** - * Hash the given `sess` object omitting changes - * to `.cookie`. - * - * @param {Object} sess - * @return {String} - * @api private - */ - -function hash(sess) { - return crc32.signed(JSON.stringify(sess, function(key, val){ - if ('cookie' != key) return val; - })); -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/cookie.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/cookie.js deleted file mode 100644 index cdce2a5..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/cookie.js +++ /dev/null @@ -1,140 +0,0 @@ - -/*! - * Connect - session - Cookie - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../../utils') - , cookie = require('cookie'); - -/** - * Initialize a new `Cookie` with the given `options`. - * - * @param {IncomingMessage} req - * @param {Object} options - * @api private - */ - -var Cookie = module.exports = function Cookie(options) { - this.path = '/'; - this.maxAge = null; - this.httpOnly = true; - if (options) utils.merge(this, options); - this.originalMaxAge = undefined == this.originalMaxAge - ? this.maxAge - : this.originalMaxAge; -}; - -/*! - * Prototype. - */ - -Cookie.prototype = { - - /** - * Set expires `date`. - * - * @param {Date} date - * @api public - */ - - set expires(date) { - this._expires = date; - this.originalMaxAge = this.maxAge; - }, - - /** - * Get expires `date`. - * - * @return {Date} - * @api public - */ - - get expires() { - return this._expires; - }, - - /** - * Set expires via max-age in `ms`. - * - * @param {Number} ms - * @api public - */ - - set maxAge(ms) { - this.expires = 'number' == typeof ms - ? new Date(Date.now() + ms) - : ms; - }, - - /** - * Get expires max-age in `ms`. - * - * @return {Number} - * @api public - */ - - get maxAge() { - return this.expires instanceof Date - ? this.expires.valueOf() - Date.now() - : this.expires; - }, - - /** - * Return cookie data object. - * - * @return {Object} - * @api private - */ - - get data() { - return { - originalMaxAge: this.originalMaxAge - , expires: this._expires - , secure: this.secure - , httpOnly: this.httpOnly - , domain: this.domain - , path: this.path - } - }, - - /** - * Check if the cookie has a reasonably large max-age. - * - * @return {Boolean} - * @api private - */ - - get hasLongExpires() { - var week = 604800000; - return this.maxAge > (4 * week); - }, - - /** - * Return a serialized cookie string. - * - * @return {String} - * @api public - */ - - serialize: function(name, val){ - return cookie.serialize(name, val, this.data); - }, - - /** - * Return JSON representation of this cookie. - * - * @return {Object} - * @api private - */ - - toJSON: function(){ - return this.data; - } -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/memory.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/memory.js deleted file mode 100644 index fb93939..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/memory.js +++ /dev/null @@ -1,129 +0,0 @@ - -/*! - * Connect - session - MemoryStore - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var Store = require('./store'); - -/** - * Initialize a new `MemoryStore`. - * - * @api public - */ - -var MemoryStore = module.exports = function MemoryStore() { - this.sessions = {}; -}; - -/** - * Inherit from `Store.prototype`. - */ - -MemoryStore.prototype.__proto__ = Store.prototype; - -/** - * Attempt to fetch session by the given `sid`. - * - * @param {String} sid - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.get = function(sid, fn){ - var self = this; - process.nextTick(function(){ - var expires - , sess = self.sessions[sid]; - if (sess) { - sess = JSON.parse(sess); - expires = 'string' == typeof sess.cookie.expires - ? new Date(sess.cookie.expires) - : sess.cookie.expires; - if (!expires || new Date < expires) { - fn(null, sess); - } else { - self.destroy(sid, fn); - } - } else { - fn(); - } - }); -}; - -/** - * Commit the given `sess` object associated with the given `sid`. - * - * @param {String} sid - * @param {Session} sess - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.set = function(sid, sess, fn){ - var self = this; - process.nextTick(function(){ - self.sessions[sid] = JSON.stringify(sess); - fn && fn(); - }); -}; - -/** - * Destroy the session associated with the given `sid`. - * - * @param {String} sid - * @api public - */ - -MemoryStore.prototype.destroy = function(sid, fn){ - var self = this; - process.nextTick(function(){ - delete self.sessions[sid]; - fn && fn(); - }); -}; - -/** - * Invoke the given callback `fn` with all active sessions. - * - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.all = function(fn){ - var arr = [] - , keys = Object.keys(this.sessions); - for (var i = 0, len = keys.length; i < len; ++i) { - arr.push(this.sessions[keys[i]]); - } - fn(null, arr); -}; - -/** - * Clear all sessions. - * - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.clear = function(fn){ - this.sessions = {}; - fn && fn(); -}; - -/** - * Fetch number of sessions. - * - * @param {Function} fn - * @api public - */ - -MemoryStore.prototype.length = function(fn){ - fn(null, Object.keys(this.sessions).length); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/session.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/session.js deleted file mode 100644 index 0dd4b40..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/session.js +++ /dev/null @@ -1,116 +0,0 @@ - -/*! - * Connect - session - Session - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../../utils'); - -/** - * Create a new `Session` with the given request and `data`. - * - * @param {IncomingRequest} req - * @param {Object} data - * @api private - */ - -var Session = module.exports = function Session(req, data) { - Object.defineProperty(this, 'req', { value: req }); - Object.defineProperty(this, 'id', { value: req.sessionID }); - if ('object' == typeof data) utils.merge(this, data); -}; - -/** - * Update reset `.cookie.maxAge` to prevent - * the cookie from expiring when the - * session is still active. - * - * @return {Session} for chaining - * @api public - */ - -Session.prototype.touch = function(){ - return this.resetMaxAge(); -}; - -/** - * Reset `.maxAge` to `.originalMaxAge`. - * - * @return {Session} for chaining - * @api public - */ - -Session.prototype.resetMaxAge = function(){ - this.cookie.maxAge = this.cookie.originalMaxAge; - return this; -}; - -/** - * Save the session data with optional callback `fn(err)`. - * - * @param {Function} fn - * @return {Session} for chaining - * @api public - */ - -Session.prototype.save = function(fn){ - this.req.sessionStore.set(this.id, this, fn || function(){}); - return this; -}; - -/** - * Re-loads the session data _without_ altering - * the maxAge properties. Invokes the callback `fn(err)`, - * after which time if no exception has occurred the - * `req.session` property will be a new `Session` object, - * although representing the same session. - * - * @param {Function} fn - * @return {Session} for chaining - * @api public - */ - -Session.prototype.reload = function(fn){ - var req = this.req - , store = this.req.sessionStore; - store.get(this.id, function(err, sess){ - if (err) return fn(err); - if (!sess) return fn(new Error('failed to load session')); - store.createSession(req, sess); - fn(); - }); - return this; -}; - -/** - * Destroy `this` session. - * - * @param {Function} fn - * @return {Session} for chaining - * @api public - */ - -Session.prototype.destroy = function(fn){ - delete this.req.session; - this.req.sessionStore.destroy(this.id, fn); - return this; -}; - -/** - * Regenerate this request's session. - * - * @param {Function} fn - * @return {Session} for chaining - * @api public - */ - -Session.prototype.regenerate = function(fn){ - this.req.sessionStore.regenerate(this.req, fn); - return this; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/store.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/store.js deleted file mode 100644 index 54294cb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/session/store.js +++ /dev/null @@ -1,84 +0,0 @@ - -/*! - * Connect - session - Store - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var EventEmitter = require('events').EventEmitter - , Session = require('./session') - , Cookie = require('./cookie'); - -/** - * Initialize abstract `Store`. - * - * @api private - */ - -var Store = module.exports = function Store(options){}; - -/** - * Inherit from `EventEmitter.prototype`. - */ - -Store.prototype.__proto__ = EventEmitter.prototype; - -/** - * Re-generate the given requests's session. - * - * @param {IncomingRequest} req - * @return {Function} fn - * @api public - */ - -Store.prototype.regenerate = function(req, fn){ - var self = this; - this.destroy(req.sessionID, function(err){ - self.generate(req); - fn(err); - }); -}; - -/** - * Load a `Session` instance via the given `sid` - * and invoke the callback `fn(err, sess)`. - * - * @param {String} sid - * @param {Function} fn - * @api public - */ - -Store.prototype.load = function(sid, fn){ - var self = this; - this.get(sid, function(err, sess){ - if (err) return fn(err); - if (!sess) return fn(); - var req = { sessionID: sid, sessionStore: self }; - sess = self.createSession(req, sess); - fn(null, sess); - }); -}; - -/** - * Create session from JSON `sess` data. - * - * @param {IncomingRequest} req - * @param {Object} sess - * @return {Session} - * @api private - */ - -Store.prototype.createSession = function(req, sess){ - var expires = sess.cookie.expires - , orig = sess.cookie.originalMaxAge; - sess.cookie = new Cookie(sess.cookie); - if ('string' == typeof expires) sess.cookie.expires = new Date(expires); - sess.cookie.originalMaxAge = orig; - req.session = new Session(req, sess); - return req.session; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/static.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/static.js deleted file mode 100644 index f69b58e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/static.js +++ /dev/null @@ -1,95 +0,0 @@ -/*! - * Connect - static - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var send = require('send') - , utils = require('../utils') - , parse = utils.parseUrl - , url = require('url'); - -/** - * Static: - * - * Static file server with the given `root` path. - * - * Examples: - * - * var oneDay = 86400000; - * - * connect() - * .use(connect.static(__dirname + '/public')) - * - * connect() - * .use(connect.static(__dirname + '/public', { maxAge: oneDay })) - * - * Options: - * - * - `maxAge` Browser cache maxAge in milliseconds. defaults to 0 - * - `hidden` Allow transfer of hidden files. defaults to false - * - `redirect` Redirect to trailing "/" when the pathname is a dir. defaults to true - * - `index` Default file name, defaults to 'index.html' - * - * @param {String} root - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function static(root, options){ - options = options || {}; - - // root required - if (!root) throw new Error('static() root path required'); - - // default redirect - var redirect = false !== options.redirect; - - return function static(req, res, next) { - if ('GET' != req.method && 'HEAD' != req.method) return next(); - var path = parse(req).pathname; - var pause = utils.pause(req); - - function resume() { - next(); - pause.resume(); - } - - function directory() { - if (!redirect) return resume(); - var pathname = url.parse(req.originalUrl).pathname; - res.statusCode = 301; - res.setHeader('Location', pathname + '/'); - res.end('Redirecting to ' + utils.escape(pathname) + '/'); - } - - function error(err) { - if (404 == err.status) return resume(); - next(err); - } - - send(req, path) - .maxage(options.maxAge || 0) - .root(root) - .index(options.index || 'index.html') - .hidden(options.hidden) - .on('error', error) - .on('directory', directory) - .pipe(res); - }; -}; - -/** - * Expose mime module. - * - * If you wish to extend the mime table use this - * reference to the "mime" module in the npm registry. - */ - -exports.mime = send.mime; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/staticCache.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/staticCache.js deleted file mode 100644 index 7354a8f..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/staticCache.js +++ /dev/null @@ -1,231 +0,0 @@ - -/*! - * Connect - staticCache - * Copyright(c) 2011 Sencha Inc. - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils') - , Cache = require('../cache') - , fresh = require('fresh'); - -/** - * Static cache: - * - * Enables a memory cache layer on top of - * the `static()` middleware, serving popular - * static files. - * - * By default a maximum of 128 objects are - * held in cache, with a max of 256k each, - * totalling ~32mb. - * - * A Least-Recently-Used (LRU) cache algo - * is implemented through the `Cache` object, - * simply rotating cache objects as they are - * hit. This means that increasingly popular - * objects maintain their positions while - * others get shoved out of the stack and - * garbage collected. - * - * Benchmarks: - * - * static(): 2700 rps - * node-static: 5300 rps - * static() + staticCache(): 7500 rps - * - * Options: - * - * - `maxObjects` max cache objects [128] - * - `maxLength` max cache object length 256kb - * - * @param {Object} options - * @return {Function} - * @api public - */ - -module.exports = function staticCache(options){ - var options = options || {} - , cache = new Cache(options.maxObjects || 128) - , maxlen = options.maxLength || 1024 * 256; - - console.warn('connect.staticCache() is deprecated and will be removed in 3.0'); - console.warn('use varnish or similar reverse proxy caches.'); - - return function staticCache(req, res, next){ - var key = cacheKey(req) - , ranges = req.headers.range - , hasCookies = req.headers.cookie - , hit = cache.get(key); - - // cache static - // TODO: change from staticCache() -> cache() - // and make this work for any request - req.on('static', function(stream){ - var headers = res._headers - , cc = utils.parseCacheControl(headers['cache-control'] || '') - , contentLength = headers['content-length'] - , hit; - - // dont cache set-cookie responses - if (headers['set-cookie']) return hasCookies = true; - - // dont cache when cookies are present - if (hasCookies) return; - - // ignore larger files - if (!contentLength || contentLength > maxlen) return; - - // don't cache partial files - if (headers['content-range']) return; - - // dont cache items we shouldn't be - // TODO: real support for must-revalidate / no-cache - if ( cc['no-cache'] - || cc['no-store'] - || cc['private'] - || cc['must-revalidate']) return; - - // if already in cache then validate - if (hit = cache.get(key)){ - if (headers.etag == hit[0].etag) { - hit[0].date = new Date; - return; - } else { - cache.remove(key); - } - } - - // validation notifiactions don't contain a steam - if (null == stream) return; - - // add the cache object - var arr = []; - - // store the chunks - stream.on('data', function(chunk){ - arr.push(chunk); - }); - - // flag it as complete - stream.on('end', function(){ - var cacheEntry = cache.add(key); - delete headers['x-cache']; // Clean up (TODO: others) - cacheEntry.push(200); - cacheEntry.push(headers); - cacheEntry.push.apply(cacheEntry, arr); - }); - }); - - if (req.method == 'GET' || req.method == 'HEAD') { - if (ranges) { - next(); - } else if (!hasCookies && hit && !mustRevalidate(req, hit)) { - res.setHeader('X-Cache', 'HIT'); - respondFromCache(req, res, hit); - } else { - res.setHeader('X-Cache', 'MISS'); - next(); - } - } else { - next(); - } - } -}; - -/** - * Respond with the provided cached value. - * TODO: Assume 200 code, that's iffy. - * - * @param {Object} req - * @param {Object} res - * @param {Object} cacheEntry - * @return {String} - * @api private - */ - -function respondFromCache(req, res, cacheEntry) { - var status = cacheEntry[0] - , headers = utils.merge({}, cacheEntry[1]) - , content = cacheEntry.slice(2); - - headers.age = (new Date - new Date(headers.date)) / 1000 || 0; - - switch (req.method) { - case 'HEAD': - res.writeHead(status, headers); - res.end(); - break; - case 'GET': - if (utils.conditionalGET(req) && fresh(req.headers, headers)) { - headers['content-length'] = 0; - res.writeHead(304, headers); - res.end(); - } else { - res.writeHead(status, headers); - - function write() { - while (content.length) { - if (false === res.write(content.shift())) { - res.once('drain', write); - return; - } - } - res.end(); - } - - write(); - } - break; - default: - // This should never happen. - res.writeHead(500, ''); - res.end(); - } -} - -/** - * Determine whether or not a cached value must be revalidated. - * - * @param {Object} req - * @param {Object} cacheEntry - * @return {String} - * @api private - */ - -function mustRevalidate(req, cacheEntry) { - var cacheHeaders = cacheEntry[1] - , reqCC = utils.parseCacheControl(req.headers['cache-control'] || '') - , cacheCC = utils.parseCacheControl(cacheHeaders['cache-control'] || '') - , cacheAge = (new Date - new Date(cacheHeaders.date)) / 1000 || 0; - - if ( cacheCC['no-cache'] - || cacheCC['must-revalidate'] - || cacheCC['proxy-revalidate']) return true; - - if (reqCC['no-cache']) return true; - - if (null != reqCC['max-age']) return reqCC['max-age'] < cacheAge; - - if (null != cacheCC['max-age']) return cacheCC['max-age'] < cacheAge; - - return false; -} - -/** - * The key to use in the cache. For now, this is the URL path and query. - * - * 'http://example.com?key=value' -> '/?key=value' - * - * @param {Object} req - * @return {String} - * @api private - */ - -function cacheKey(req) { - return utils.parseUrl(req).path; -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/timeout.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/timeout.js deleted file mode 100644 index dba4654..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/timeout.js +++ /dev/null @@ -1,55 +0,0 @@ -/*! - * Connect - timeout - * Ported from https://github.com/LearnBoost/connect-timeout - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var debug = require('debug')('connect:timeout'); - -/** - * Timeout: - * - * Times out the request in `ms`, defaulting to `5000`. The - * method `req.clearTimeout()` is added to revert this behaviour - * programmatically within your application's middleware, routes, etc. - * - * The timeout error is passed to `next()` so that you may customize - * the response behaviour. This error has the `.timeout` property as - * well as `.status == 408`. - * - * @param {Number} ms - * @return {Function} - * @api public - */ - -module.exports = function timeout(ms) { - ms = ms || 5000; - - return function(req, res, next) { - var id = setTimeout(function(){ - req.emit('timeout', ms); - }, ms); - - req.on('timeout', function(){ - if (res.headerSent) return debug('response started, cannot timeout'); - var err = new Error('Response timeout'); - err.timeout = ms; - err.status = 503; - next(err); - }); - - req.clearTimeout = function(){ - clearTimeout(id); - }; - - res.on('header', function(){ - clearTimeout(id); - }); - - next(); - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js deleted file mode 100644 index cceafc0..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js +++ /dev/null @@ -1,78 +0,0 @@ - -/*! - * Connect - urlencoded - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var utils = require('../utils') - , _limit = require('./limit') - , qs = require('qs'); - -/** - * noop middleware. - */ - -function noop(req, res, next) { - next(); -} - -/** - * Urlencoded: - * - * Parse x-ww-form-urlencoded request bodies, - * providing the parsed object as `req.body`. - * - * Options: - * - * - `limit` byte limit disabled by default - * - * @param {Object} options - * @return {Function} - * @api public - */ - -exports = module.exports = function(options){ - options = options || {}; - - var limit = options.limit - ? _limit(options.limit) - : noop; - - return function urlencoded(req, res, next) { - if (req._body) return next(); - req.body = req.body || {}; - - if (!utils.hasBody(req)) return next(); - - // check Content-Type - if ('application/x-www-form-urlencoded' != utils.mime(req)) return next(); - - // flag as parsed - req._body = true; - - // parse - limit(req, res, function(err){ - if (err) return next(err); - var buf = ''; - req.setEncoding('utf8'); - req.on('data', function(chunk){ buf += chunk }); - req.on('end', function(){ - try { - req.body = buf.length - ? qs.parse(buf, options) - : {}; - next(); - } catch (err){ - err.body = buf; - next(err); - } - }); - }); - } -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/vhost.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/vhost.js deleted file mode 100644 index abbb050..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/middleware/vhost.js +++ /dev/null @@ -1,40 +0,0 @@ - -/*! - * Connect - vhost - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Vhost: - * - * Setup vhost for the given `hostname` and `server`. - * - * connect() - * .use(connect.vhost('foo.com', fooApp)) - * .use(connect.vhost('bar.com', barApp)) - * .use(connect.vhost('*.com', mainApp)) - * - * The `server` may be a Connect server or - * a regular Node `http.Server`. - * - * @param {String} hostname - * @param {Server} server - * @return {Function} - * @api public - */ - -module.exports = function vhost(hostname, server){ - if (!hostname) throw new Error('vhost hostname required'); - if (!server) throw new Error('vhost server required'); - var regexp = new RegExp('^' + hostname.replace(/[^*\w]/g, '\\$&').replace(/[*]/g, '(?:.*?)') + '$', 'i'); - if (server.onvhost) server.onvhost(hostname); - return function vhost(req, res, next){ - if (!req.headers.host) return next(); - var host = req.headers.host.split(':')[0]; - if (!regexp.test(host)) return next(); - if ('function' == typeof server) return server(req, res, next); - server.emit('request', req, res); - }; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/patch.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/patch.js deleted file mode 100644 index 7cf0012..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/patch.js +++ /dev/null @@ -1,79 +0,0 @@ - -/*! - * Connect - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var http = require('http') - , res = http.ServerResponse.prototype - , setHeader = res.setHeader - , _renderHeaders = res._renderHeaders - , writeHead = res.writeHead; - -// apply only once - -if (!res._hasConnectPatch) { - - /** - * Provide a public "header sent" flag - * until node does. - * - * @return {Boolean} - * @api public - */ - - res.__defineGetter__('headerSent', function(){ - return this._header; - }); - - /** - * Set header `field` to `val`, special-casing - * the `Set-Cookie` field for multiple support. - * - * @param {String} field - * @param {String} val - * @api public - */ - - res.setHeader = function(field, val){ - var key = field.toLowerCase() - , prev; - - // special-case Set-Cookie - if (this._headers && 'set-cookie' == key) { - if (prev = this.getHeader(field)) { - val = Array.isArray(prev) - ? prev.concat(val) - : [prev, val]; - } - // charset - } else if ('content-type' == key && this.charset) { - val += '; charset=' + this.charset; - } - - return setHeader.call(this, field, val); - }; - - /** - * Proxy to emit "header" event. - */ - - res._renderHeaders = function(){ - if (!this._emittedHeader) this.emit('header'); - this._emittedHeader = true; - return _renderHeaders.call(this); - }; - - res.writeHead = function(){ - if (!this._emittedHeader) this.emit('header'); - this._emittedHeader = true; - return writeHead.apply(this, arguments); - }; - - res._hasConnectPatch = true; -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/proto.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/proto.js deleted file mode 100644 index b304cf7..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/proto.js +++ /dev/null @@ -1,230 +0,0 @@ - -/*! - * Connect - HTTPServer - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var http = require('http') - , utils = require('./utils') - , debug = require('debug')('connect:dispatcher'); - -// prototype - -var app = module.exports = {}; - -// environment - -var env = process.env.NODE_ENV || 'development'; - -/** - * Utilize the given middleware `handle` to the given `route`, - * defaulting to _/_. This "route" is the mount-point for the - * middleware, when given a value other than _/_ the middleware - * is only effective when that segment is present in the request's - * pathname. - * - * For example if we were to mount a function at _/admin_, it would - * be invoked on _/admin_, and _/admin/settings_, however it would - * not be invoked for _/_, or _/posts_. - * - * Examples: - * - * var app = connect(); - * app.use(connect.favicon()); - * app.use(connect.logger()); - * app.use(connect.static(__dirname + '/public')); - * - * If we wanted to prefix static files with _/public_, we could - * "mount" the `static()` middleware: - * - * app.use('/public', connect.static(__dirname + '/public')); - * - * This api is chainable, so the following is valid: - * - * connect() - * .use(connect.favicon()) - * .use(connect.logger()) - * .use(connect.static(__dirname + '/public')) - * .listen(3000); - * - * @param {String|Function|Server} route, callback or server - * @param {Function|Server} callback or server - * @return {Server} for chaining - * @api public - */ - -app.use = function(route, fn){ - // default route to '/' - if ('string' != typeof route) { - fn = route; - route = '/'; - } - - // wrap sub-apps - if ('function' == typeof fn.handle) { - var server = fn; - fn.route = route; - fn = function(req, res, next){ - server.handle(req, res, next); - }; - } - - // wrap vanilla http.Servers - if (fn instanceof http.Server) { - fn = fn.listeners('request')[0]; - } - - // strip trailing slash - if ('/' == route[route.length - 1]) { - route = route.slice(0, -1); - } - - // add the middleware - debug('use %s %s', route || '/', fn.name || 'anonymous'); - this.stack.push({ route: route, handle: fn }); - - return this; -}; - -/** - * Handle server requests, punting them down - * the middleware stack. - * - * @api private - */ - -app.handle = function(req, res, out) { - var stack = this.stack - , fqdn = ~req.url.indexOf('://') - , removed = '' - , slashAdded = false - , index = 0; - - function next(err) { - var layer, path, status, c; - - if (slashAdded) { - req.url = req.url.substr(1); - slashAdded = false; - } - - req.url = removed + req.url; - req.originalUrl = req.originalUrl || req.url; - removed = ''; - - // next callback - layer = stack[index++]; - - // all done - if (!layer || res.headerSent) { - // delegate to parent - if (out) return out(err); - - // unhandled error - if (err) { - // default to 500 - if (res.statusCode < 400) res.statusCode = 500; - debug('default %s', res.statusCode); - - // respect err.status - if (err.status) res.statusCode = err.status; - - // production gets a basic error message - var msg = 'production' == env - ? http.STATUS_CODES[res.statusCode] - : err.stack || err.toString(); - - // log to stderr in a non-test env - if ('test' != env) console.error(err.stack || err.toString()); - if (res.headerSent) return req.socket.destroy(); - res.setHeader('Content-Type', 'text/plain'); - res.setHeader('Content-Length', Buffer.byteLength(msg)); - if ('HEAD' == req.method) return res.end(); - res.end(msg); - } else { - debug('default 404'); - res.statusCode = 404; - res.setHeader('Content-Type', 'text/plain'); - if ('HEAD' == req.method) return res.end(); - res.end('Cannot ' + req.method + ' ' + utils.escape(req.originalUrl)); - } - return; - } - - try { - path = utils.parseUrl(req).pathname; - if (undefined == path) path = '/'; - - // skip this layer if the route doesn't match. - if (0 != path.toLowerCase().indexOf(layer.route.toLowerCase())) return next(err); - - c = path[layer.route.length]; - if (c && '/' != c && '.' != c) return next(err); - - // Call the layer handler - // Trim off the part of the url that matches the route - removed = layer.route; - req.url = req.url.substr(removed.length); - - // Ensure leading slash - if (!fqdn && '/' != req.url[0]) { - req.url = '/' + req.url; - slashAdded = true; - } - - debug('%s', layer.handle.name || 'anonymous'); - var arity = layer.handle.length; - if (err) { - if (arity === 4) { - layer.handle(err, req, res, next); - } else { - next(err); - } - } else if (arity < 4) { - layer.handle(req, res, next); - } else { - next(); - } - } catch (e) { - next(e); - } - } - next(); -}; - -/** - * Listen for connections. - * - * This method takes the same arguments - * as node's `http.Server#listen()`. - * - * HTTP and HTTPS: - * - * If you run your application both as HTTP - * and HTTPS you may wrap them individually, - * since your Connect "server" is really just - * a JavaScript `Function`. - * - * var connect = require('connect') - * , http = require('http') - * , https = require('https'); - * - * var app = connect(); - * - * http.createServer(app).listen(80); - * https.createServer(options, app).listen(443); - * - * @return {http.Server} - * @api public - */ - -app.listen = function(){ - var server = http.createServer(this); - return server.listen.apply(server, arguments); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/directory.html b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/directory.html deleted file mode 100644 index 2d63704..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/directory.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - listing directory {directory} - - - - - -
    -

    {linked-path}

    - {files} -
    - - \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/error.html b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/error.html deleted file mode 100644 index a6d3faf..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/error.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - {error} - - - -
    -

    {title}

    -

    {statusCode} {error}

    -
      {stack}
    -
    - - diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/favicon.ico b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/favicon.ico deleted file mode 100644 index 895fc96..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/favicon.ico and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page.png deleted file mode 100644 index 03ddd79..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_add.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_add.png deleted file mode 100644 index d5bfa07..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_add.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png deleted file mode 100644 index 89ee2da..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_attach.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_code.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_code.png deleted file mode 100644 index f7ea904..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_code.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png deleted file mode 100644 index 195dc6d..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_copy.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_delete.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_delete.png deleted file mode 100644 index 3141467..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_delete.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_edit.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_edit.png deleted file mode 100644 index 046811e..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_edit.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_error.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_error.png deleted file mode 100644 index f07f449..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_error.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png deleted file mode 100644 index eb6158e..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_excel.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_find.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_find.png deleted file mode 100644 index 2f19388..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_find.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_gear.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_gear.png deleted file mode 100644 index 8e83281..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_gear.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_go.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_go.png deleted file mode 100644 index 80fe1ed..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_go.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_green.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_green.png deleted file mode 100644 index de8e003..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_green.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_key.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_key.png deleted file mode 100644 index d6626cb..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_key.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png deleted file mode 100644 index 7e56870..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_lightning.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_link.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_link.png deleted file mode 100644 index 312eab0..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_link.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png deleted file mode 100644 index 246a2f0..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_paintbrush.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png deleted file mode 100644 index 968f073..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_paste.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_red.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_red.png deleted file mode 100644 index 0b18247..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_red.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png deleted file mode 100644 index cf347c7..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_refresh.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_save.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_save.png deleted file mode 100644 index caea546..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_save.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white.png deleted file mode 100644 index 8b8b1ca..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png deleted file mode 100644 index 8f8095e..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_acrobat.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png deleted file mode 100644 index 159b240..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_actionscript.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png deleted file mode 100644 index aa23dde..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_add.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png deleted file mode 100644 index 34a05cc..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_c.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png deleted file mode 100644 index f501a59..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_camera.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png deleted file mode 100644 index 848bdaf..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_cd.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png deleted file mode 100644 index 0c76bd1..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_code.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png deleted file mode 100644 index 87a6914..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_code_red.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png deleted file mode 100644 index c66011f..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_coldfusion.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png deleted file mode 100644 index 2b6b100..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_compressed.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png deleted file mode 100644 index a9f31a2..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_copy.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png deleted file mode 100644 index a87cf84..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_cplusplus.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png deleted file mode 100644 index ffb8fc9..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_csharp.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png deleted file mode 100644 index 0a7d6f4..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_cup.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png deleted file mode 100644 index bddba1f..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_database.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png deleted file mode 100644 index af1ecaf..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_delete.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png deleted file mode 100644 index 4cc537a..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_dvd.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png deleted file mode 100644 index b93e776..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_edit.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png deleted file mode 100644 index 9fc5a0a..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_error.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png deleted file mode 100644 index b977d7e..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_excel.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png deleted file mode 100644 index 5818436..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_find.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png deleted file mode 100644 index 5769120..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_flash.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png deleted file mode 100644 index 8d719df..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_freehand.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png deleted file mode 100644 index 106f5aa..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_gear.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png deleted file mode 100644 index e4a1ecb..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_get.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png deleted file mode 100644 index 7e62a92..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_go.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png deleted file mode 100644 index e902abb..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_h.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png deleted file mode 100644 index 1d2d0a4..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_horizontal.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png deleted file mode 100644 index d616484..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_key.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png deleted file mode 100644 index 7215d1e..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_lightning.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png deleted file mode 100644 index bf7bd1c..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_link.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png deleted file mode 100644 index f6b74cc..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_magnify.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png deleted file mode 100644 index d3fffb6..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_medal.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png deleted file mode 100644 index a65bcb3..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_office.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png deleted file mode 100644 index 23a37b8..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_paint.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png deleted file mode 100644 index f907e44..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_paintbrush.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png deleted file mode 100644 index 5b2cbb3..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_paste.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png deleted file mode 100644 index 7868a25..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_php.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png deleted file mode 100644 index 134b669..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_picture.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png deleted file mode 100644 index c4eff03..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_powerpoint.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png deleted file mode 100644 index 884ffd6..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_put.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png deleted file mode 100644 index f59b7c4..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_ruby.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png deleted file mode 100644 index 44084ad..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_stack.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png deleted file mode 100644 index 3a1441c..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_star.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png deleted file mode 100644 index e770829..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_swoosh.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png deleted file mode 100644 index 813f712..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_text.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png deleted file mode 100644 index d9cf132..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_text_width.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png deleted file mode 100644 index 52699bf..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_tux.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png deleted file mode 100644 index 4a05955..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_vector.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png deleted file mode 100644 index a0a433d..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_visualstudio.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png deleted file mode 100644 index 1eb8809..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_width.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png deleted file mode 100644 index ae8ecbf..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_word.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png deleted file mode 100644 index 6ed2490..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_world.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png deleted file mode 100644 index fecadd0..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_wrench.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png deleted file mode 100644 index fd4bbcc..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_white_zip.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_word.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_word.png deleted file mode 100644 index 834cdfa..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_word.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_world.png b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_world.png deleted file mode 100644 index b8895dd..0000000 Binary files a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/icons/page_world.png and /dev/null differ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/style.css b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/style.css deleted file mode 100644 index 32b6507..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/public/style.css +++ /dev/null @@ -1,141 +0,0 @@ -body { - margin: 0; - padding: 80px 100px; - font: 13px "Helvetica Neue", "Lucida Grande", "Arial"; - background: #ECE9E9 -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#ECE9E9)); - background: #ECE9E9 -moz-linear-gradient(top, #fff, #ECE9E9); - background-repeat: no-repeat; - color: #555; - -webkit-font-smoothing: antialiased; -} -h1, h2, h3 { - margin: 0; - font-size: 22px; - color: #343434; -} -h1 em, h2 em { - padding: 0 5px; - font-weight: normal; -} -h1 { - font-size: 60px; -} -h2 { - margin-top: 10px; -} -h3 { - margin: 5px 0 10px 0; - padding-bottom: 5px; - border-bottom: 1px solid #eee; - font-size: 18px; -} -ul { - margin: 0; - padding: 0; -} -ul li { - margin: 5px 0; - padding: 3px 8px; - list-style: none; -} -ul li:hover { - cursor: pointer; - color: #2e2e2e; -} -ul li .path { - padding-left: 5px; - font-weight: bold; -} -ul li .line { - padding-right: 5px; - font-style: italic; -} -ul li:first-child .path { - padding-left: 0; -} -p { - line-height: 1.5; -} -a { - color: #555; - text-decoration: none; -} -a:hover { - color: #303030; -} -#stacktrace { - margin-top: 15px; -} -.directory h1 { - margin-bottom: 15px; - font-size: 18px; -} -ul#files { - width: 100%; - height: 500px; -} -ul#files li { - padding: 0; -} -ul#files li img { - position: absolute; - top: 5px; - left: 5px; -} -ul#files li a { - position: relative; - display: block; - margin: 1px; - width: 30%; - height: 25px; - line-height: 25px; - text-indent: 8px; - float: left; - border: 1px solid transparent; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - overflow: hidden; - text-overflow: ellipsis; -} -ul#files li a.icon { - text-indent: 25px; -} -ul#files li a:focus, -ul#files li a:hover { - outline: none; - background: rgba(255,255,255,0.65); - border: 1px solid #ececec; -} -ul#files li a.highlight { - -webkit-transition: background .4s ease-in-out; - background: #ffff4f; - border-color: #E9DC51; -} -#search { - display: block; - position: fixed; - top: 20px; - right: 20px; - width: 90px; - -webkit-transition: width ease 0.2s, opacity ease 0.4s; - -moz-transition: width ease 0.2s, opacity ease 0.4s; - -webkit-border-radius: 32px; - -moz-border-radius: 32px; - -webkit-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.7), 0px 1px 0px rgba(255, 255, 255, 0.03); - -moz-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.7), 0px 1px 0px rgba(255, 255, 255, 0.03); - -webkit-font-smoothing: antialiased; - text-align: left; - font: 13px "Helvetica Neue", Arial, sans-serif; - padding: 4px 10px; - border: none; - background: transparent; - margin-bottom: 0; - outline: none; - opacity: 0.7; - color: #888; -} -#search:focus { - width: 120px; - opacity: 1.0; -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/utils.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/utils.js deleted file mode 100644 index 2c03c28..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/lib/utils.js +++ /dev/null @@ -1,388 +0,0 @@ - -/*! - * Connect - utils - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var http = require('http') - , crypto = require('crypto') - , parse = require('url').parse - , signature = require('cookie-signature'); - -/** - * Return `true` if the request has a body, otherwise return `false`. - * - * @param {IncomingMessage} req - * @return {Boolean} - * @api private - */ - -exports.hasBody = function(req) { - return 'transfer-encoding' in req.headers || 'content-length' in req.headers; -}; - -/** - * Extract the mime type from the given request's - * _Content-Type_ header. - * - * @param {IncomingMessage} req - * @return {String} - * @api private - */ - -exports.mime = function(req) { - var str = req.headers['content-type'] || ''; - return str.split(';')[0]; -}; - -/** - * Generate an `Error` from the given status `code` - * and optional `msg`. - * - * @param {Number} code - * @param {String} msg - * @return {Error} - * @api private - */ - -exports.error = function(code, msg){ - var err = new Error(msg || http.STATUS_CODES[code]); - err.status = code; - return err; -}; - -/** - * Return md5 hash of the given string and optional encoding, - * defaulting to hex. - * - * utils.md5('wahoo'); - * // => "e493298061761236c96b02ea6aa8a2ad" - * - * @param {String} str - * @param {String} encoding - * @return {String} - * @api private - */ - -exports.md5 = function(str, encoding){ - return crypto - .createHash('md5') - .update(str) - .digest(encoding || 'hex'); -}; - -/** - * Merge object b with object a. - * - * var a = { foo: 'bar' } - * , b = { bar: 'baz' }; - * - * utils.merge(a, b); - * // => { foo: 'bar', bar: 'baz' } - * - * @param {Object} a - * @param {Object} b - * @return {Object} - * @api private - */ - -exports.merge = function(a, b){ - if (a && b) { - for (var key in b) { - a[key] = b[key]; - } - } - return a; -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; - - -/** - * Return a unique identifier with the given `len`. - * - * utils.uid(10); - * // => "FDaS435D2z" - * - * @param {Number} len - * @return {String} - * @api private - */ - -exports.uid = function(len) { - return crypto.randomBytes(Math.ceil(len * 3 / 4)) - .toString('base64') - .slice(0, len) - .replace(/\//g, '-') - .replace(/\+/g, '_'); -}; - -/** - * Sign the given `val` with `secret`. - * - * @param {String} val - * @param {String} secret - * @return {String} - * @api private - */ - -exports.sign = function(val, secret){ - console.warn('do not use utils.sign(), use https://github.com/visionmedia/node-cookie-signature') - return val + '.' + crypto - .createHmac('sha256', secret) - .update(val) - .digest('base64') - .replace(/=+$/, ''); -}; - -/** - * Unsign and decode the given `val` with `secret`, - * returning `false` if the signature is invalid. - * - * @param {String} val - * @param {String} secret - * @return {String|Boolean} - * @api private - */ - -exports.unsign = function(val, secret){ - console.warn('do not use utils.unsign(), use https://github.com/visionmedia/node-cookie-signature') - var str = val.slice(0, val.lastIndexOf('.')); - return exports.sign(str, secret) == val - ? str - : false; -}; - -/** - * Parse signed cookies, returning an object - * containing the decoded key/value pairs, - * while removing the signed key from `obj`. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -exports.parseSignedCookies = function(obj, secret){ - var ret = {}; - Object.keys(obj).forEach(function(key){ - var val = obj[key]; - if (0 == val.indexOf('s:')) { - val = signature.unsign(val.slice(2), secret); - if (val) { - ret[key] = val; - delete obj[key]; - } - } - }); - return ret; -}; - -/** - * Parse a signed cookie string, return the decoded value - * - * @param {String} str signed cookie string - * @param {String} secret - * @return {String} decoded value - * @api private - */ - -exports.parseSignedCookie = function(str, secret){ - return 0 == str.indexOf('s:') - ? signature.unsign(str.slice(2), secret) - : str; -}; - -/** - * Parse JSON cookies. - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -exports.parseJSONCookies = function(obj){ - Object.keys(obj).forEach(function(key){ - var val = obj[key]; - var res = exports.parseJSONCookie(val); - if (res) obj[key] = res; - }); - return obj; -}; - -/** - * Parse JSON cookie string - * - * @param {String} str - * @return {Object} Parsed object or null if not json cookie - * @api private - */ - -exports.parseJSONCookie = function(str) { - if (0 == str.indexOf('j:')) { - try { - return JSON.parse(str.slice(2)); - } catch (err) { - // no op - } - } -}; - -/** - * Pause `data` and `end` events on the given `obj`. - * Middleware performing async tasks _should_ utilize - * this utility (or similar), to re-emit data once - * the async operation has completed, otherwise these - * events may be lost. - * - * var pause = utils.pause(req); - * fs.readFile(path, function(){ - * next(); - * pause.resume(); - * }); - * - * @param {Object} obj - * @return {Object} - * @api private - */ - -exports.pause = require('pause'); - -/** - * Strip `Content-*` headers from `res`. - * - * @param {ServerResponse} res - * @api private - */ - -exports.removeContentHeaders = function(res){ - Object.keys(res._headers).forEach(function(field){ - if (0 == field.indexOf('content')) { - res.removeHeader(field); - } - }); -}; - -/** - * Check if `req` is a conditional GET request. - * - * @param {IncomingMessage} req - * @return {Boolean} - * @api private - */ - -exports.conditionalGET = function(req) { - return req.headers['if-modified-since'] - || req.headers['if-none-match']; -}; - -/** - * Respond with 401 "Unauthorized". - * - * @param {ServerResponse} res - * @param {String} realm - * @api private - */ - -exports.unauthorized = function(res, realm) { - res.statusCode = 401; - res.setHeader('WWW-Authenticate', 'Basic realm="' + realm + '"'); - res.end('Unauthorized'); -}; - -/** - * Respond with 304 "Not Modified". - * - * @param {ServerResponse} res - * @param {Object} headers - * @api private - */ - -exports.notModified = function(res) { - exports.removeContentHeaders(res); - res.statusCode = 304; - res.end(); -}; - -/** - * Return an ETag in the form of `"-"` - * from the given `stat`. - * - * @param {Object} stat - * @return {String} - * @api private - */ - -exports.etag = function(stat) { - return '"' + stat.size + '-' + Number(stat.mtime) + '"'; -}; - -/** - * Parse the given Cache-Control `str`. - * - * @param {String} str - * @return {Object} - * @api private - */ - -exports.parseCacheControl = function(str){ - var directives = str.split(',') - , obj = {}; - - for(var i = 0, len = directives.length; i < len; i++) { - var parts = directives[i].split('=') - , key = parts.shift().trim() - , val = parseInt(parts.shift(), 10); - - obj[key] = isNaN(val) ? true : val; - } - - return obj; -}; - -/** - * Parse the `req` url with memoization. - * - * @param {ServerRequest} req - * @return {Object} - * @api private - */ - -exports.parseUrl = function(req){ - var parsed = req._parsedUrl; - if (parsed && parsed.href == req.url) { - return parsed; - } else { - return req._parsedUrl = parse(req.url); - } -}; - -/** - * Parse byte `size` string. - * - * @param {String} size - * @return {Number} - * @api private - */ - -exports.parseBytes = require('bytes'); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/.npmignore deleted file mode 100644 index b512c09..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/.travis.yml b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/.travis.yml deleted file mode 100644 index 7a902e8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 -notifications: - email: - recipients: - - brianloveswords@gmail.com \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/README.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/README.md deleted file mode 100644 index 4ad5d64..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# buffer-crc32 - -[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32) - -crc32 that works with binary data and fancy character sets, outputs -buffer, signed or unsigned data and has tests. - -Derived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix - -# install -``` -npm install buffer-crc32 -``` - -# example -```js -var crc32 = require('buffer-crc32'); -// works with buffers -var buf = Buffer([[0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00]) -crc32(buf) // -> - -// has convenience methods for getting signed or unsigned ints -crc32.signed(buf) // -> -1805997238 -crc32.unsigned(buf) // -> 2488970058 - -// will cast to buffer if given a string, so you can -// directly use foreign characters safely -crc32('自動販売機') // -> -``` - -# tests -This was tested against the output of zlib's crc32 method. You can run -the tests with`npm test` (requires tap) diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/index.js deleted file mode 100644 index ab0e19e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/index.js +++ /dev/null @@ -1,84 +0,0 @@ -var Buffer = require('buffer').Buffer; - -var CRC_TABLE = [ - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d -]; - -function bufferizeInt(num) { - var tmp = Buffer(4); - tmp.writeInt32BE(num, 0); - return tmp; -} - -function _crc32(buf) { - if (!Buffer.isBuffer(buf)) - buf = Buffer(buf); - var crc = 0xffffffff; - for (var n = 0; n < buf.length; n++) { - crc = CRC_TABLE[(crc ^ buf[n]) & 0xff] ^ (crc >>> 8); - } - return (crc ^ 0xffffffff); -} - -function crc32() { - return bufferizeInt(_crc32.apply(null, arguments)); -} -crc32.signed = function () { - return _crc32.apply(null, arguments); -}; -crc32.unsigned = function () { - return crc32.apply(null, arguments).readUInt32BE(0); -}; - -module.exports = crc32; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/package.json deleted file mode 100644 index 82f79e0..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "author": { - "name": "Brian J. Brennan", - "email": "brianloveswords@gmail.com", - "url": "http://bjb.io" - }, - "name": "buffer-crc32", - "description": "A pure javascript CRC32 algorithm that plays nice with binary data", - "version": "0.1.1", - "homepage": "https://github.com/brianloveswords/buffer-crc32", - "repository": { - "type": "git", - "url": "git://github.com/brianloveswords/buffer-crc32.git" - }, - "main": "index.js", - "scripts": { - "test": "./node_modules/.bin/tap tests/*.test.js" - }, - "dependencies": {}, - "devDependencies": { - "tap": "~0.2.5" - }, - "optionalDependencies": {}, - "engines": { - "node": "*" - }, - "readme": "# buffer-crc32\n\n[![Build Status](https://secure.travis-ci.org/brianloveswords/buffer-crc32.png?branch=master)](http://travis-ci.org/brianloveswords/buffer-crc32)\n\ncrc32 that works with binary data and fancy character sets, outputs\nbuffer, signed or unsigned data and has tests.\n\nDerived from the sample CRC implementation in the PNG specification: http://www.w3.org/TR/PNG/#D-CRCAppendix\n\n# install\n```\nnpm install buffer-crc32\n```\n\n# example\n```js\nvar crc32 = require('buffer-crc32');\n// works with buffers\nvar buf = Buffer([[0x00, 0x73, 0x75, 0x70, 0x20, 0x62, 0x72, 0x6f, 0x00])\ncrc32(buf) // -> \n\n// has convenience methods for getting signed or unsigned ints\ncrc32.signed(buf) // -> -1805997238\ncrc32.unsigned(buf) // -> 2488970058\n\n// will cast to buffer if given a string, so you can\n// directly use foreign characters safely\ncrc32('自動販売機') // -> \n```\n\n# tests\nThis was tested against the output of zlib's crc32 method. You can run\nthe tests with`npm test` (requires tap)\n", - "readmeFilename": "README.md", - "_id": "buffer-crc32@0.1.1", - "_from": "buffer-crc32@0.1.1" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/tests/crc.test.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/tests/crc.test.js deleted file mode 100644 index d4767e3..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/buffer-crc32/tests/crc.test.js +++ /dev/null @@ -1,52 +0,0 @@ -var crc32 = require('..'); -var test = require('tap').test; - -test('simple crc32 is no problem', function (t) { - var input = Buffer('hey sup bros'); - var expected = Buffer([0x47, 0xfa, 0x55, 0x70]); - t.same(crc32(input), expected); - t.end(); -}); - -test('another simple one', function (t) { - var input = Buffer('IEND'); - var expected = Buffer([0xae, 0x42, 0x60, 0x82]); - t.same(crc32(input), expected); - t.end(); -}); - -test('slightly more complex', function (t) { - var input = Buffer([0x00, 0x00, 0x00]); - var expected = Buffer([0xff, 0x41, 0xd9, 0x12]); - t.same(crc32(input), expected); - t.end(); -}); - -test('complex crc32 gets calculated like a champ', function (t) { - var input = Buffer('शीर्षक'); - var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); - t.same(crc32(input), expected); - t.end(); -}); - -test('casts to buffer if necessary', function (t) { - var input = 'शीर्षक'; - var expected = Buffer([0x17, 0xb8, 0xaf, 0xf1]); - t.same(crc32(input), expected); - t.end(); -}); - -test('can do unsigned', function (t) { - var input = 'ham sandwich'; - var expected = -1891873021; - t.same(crc32.signed(input), expected); - t.end(); -}); - -test('can do signed', function (t) { - var input = 'bear sandwich'; - var expected = 3711466352; - t.same(crc32.unsigned(input), expected); - t.end(); -}); - diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/.npmignore deleted file mode 100644 index 9daeafb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/History.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/History.md deleted file mode 100644 index 1332808..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/History.md +++ /dev/null @@ -1,10 +0,0 @@ - -0.2.0 / 2012-10-28 -================== - - * bytes(200).should.eql('200b') - -0.1.0 / 2012-07-04 -================== - - * add bytes to string conversion [yields] diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/Makefile b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/Makefile deleted file mode 100644 index 8e8640f..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --reporter spec \ - --require should - -.PHONY: test \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/Readme.md deleted file mode 100644 index 9325d5b..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/Readme.md +++ /dev/null @@ -1,51 +0,0 @@ -# node-bytes - - Byte string parser / formatter. - -## Example: - -```js -bytes('1kb') -// => 1024 - -bytes('2mb') -// => 2097152 - -bytes('1gb') -// => 1073741824 - -bytes(1073741824) -// => 1gb -``` - -## Installation - -``` -$ npm install bytes -$ component install visionmedia/bytes.js -``` - -## License - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/component.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/component.json deleted file mode 100644 index 76a6057..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/component.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "bytes", - "description": "byte size string parser / serializer", - "keywords": ["bytes", "utility"], - "version": "0.1.0", - "scripts": ["index.js"] -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/index.js deleted file mode 100644 index 70b2e01..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/index.js +++ /dev/null @@ -1,39 +0,0 @@ - -/** - * Parse byte `size` string. - * - * @param {String} size - * @return {Number} - * @api public - */ - -module.exports = function(size) { - if ('number' == typeof size) return convert(size); - var parts = size.match(/^(\d+(?:\.\d+)?) *(kb|mb|gb)$/) - , n = parseFloat(parts[1]) - , type = parts[2]; - - var map = { - kb: 1 << 10 - , mb: 1 << 20 - , gb: 1 << 30 - }; - - return map[type] * n; -}; - -/** - * convert bytes into string. - * - * @param {Number} b - bytes to convert - * @return {String} - * @api public - */ - -function convert (b) { - var gb = 1 << 30, mb = 1 << 20, kb = 1 << 10; - if (b >= gb) return (Math.round(b / gb * 100) / 100) + 'gb'; - if (b >= mb) return (Math.round(b / mb * 100) / 100) + 'mb'; - if (b >= kb) return (Math.round(b / kb * 100) / 100) + 'kb'; - return b + 'b'; -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/package.json deleted file mode 100644 index 0db9bc9..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/bytes/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "bytes", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "description": "byte size string parser / serializer", - "version": "0.2.0", - "main": "index.js", - "dependencies": {}, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "readme": "# node-bytes\n\n Byte string parser / formatter.\n\n## Example:\n\n```js\nbytes('1kb')\n// => 1024\n\nbytes('2mb')\n// => 2097152\n\nbytes('1gb')\n// => 1073741824\n\nbytes(1073741824)\n// => 1gb\n```\n\n## Installation\n\n```\n$ npm install bytes\n$ component install visionmedia/bytes.js\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "_id": "bytes@0.2.0", - "_from": "bytes@0.2.0" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/.npmignore deleted file mode 100644 index 4fbabb3..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -/test/tmp/ -*.upload -*.un~ -*.http diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/.travis.yml b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/.travis.yml deleted file mode 100644 index f1d0f13..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.4 - - 0.6 diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/Makefile b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/Makefile deleted file mode 100644 index 8945872..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -SHELL := /bin/bash - -test: - @./test/run.js - -build: npm test - -npm: - npm install . - -clean: - rm test/tmp/* - -.PHONY: test clean build diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md deleted file mode 100644 index a5ca104..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/Readme.md +++ /dev/null @@ -1,311 +0,0 @@ -# Formidable - -[![Build Status](https://secure.travis-ci.org/felixge/node-formidable.png?branch=master)](http://travis-ci.org/felixge/node-formidable) - -## Purpose - -A node.js module for parsing form data, especially file uploads. - -## Current status - -This module was developed for [Transloadit](http://transloadit.com/), a service focused on uploading -and encoding images and videos. It has been battle-tested against hundreds of GB of file uploads from -a large variety of clients and is considered production-ready. - -## Features - -* Fast (~500mb/sec), non-buffering multipart parser -* Automatically writing file uploads to disk -* Low memory footprint -* Graceful error handling -* Very high test coverage - -## Changelog - -### v1.0.9 - -* Emit progress when content length header parsed (Tim Koschützki) -* Fix Readme syntax due to GitHub changes (goob) -* Replace references to old 'sys' module in Readme with 'util' (Peter Sugihara) - -### v1.0.8 - -* Strip potentially unsafe characters when using `keepExtensions: true`. -* Switch to utest / urun for testing -* Add travis build - -### v1.0.7 - -* Remove file from package that was causing problems when installing on windows. (#102) -* Fix typos in Readme (Jason Davies). - -### v1.0.6 - -* Do not default to the default to the field name for file uploads where - filename="". - -### v1.0.5 - -* Support filename="" in multipart parts -* Explain unexpected end() errors in parser better - -**Note:** Starting with this version, formidable emits 'file' events for empty -file input fields. Previously those were incorrectly emitted as regular file -input fields with value = "". - -### v1.0.4 - -* Detect a good default tmp directory regardless of platform. (#88) - -### v1.0.3 - -* Fix problems with utf8 characters (#84) / semicolons in filenames (#58) -* Small performance improvements -* New test suite and fixture system - -### v1.0.2 - -* Exclude node\_modules folder from git -* Implement new `'aborted'` event -* Fix files in example folder to work with recent node versions -* Make gently a devDependency - -[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.1...v1.0.2) - -### v1.0.1 - -* Fix package.json to refer to proper main directory. (#68, Dean Landolt) - -[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.0...v1.0.1) - -### v1.0.0 - -* Add support for multipart boundaries that are quoted strings. (Jeff Craig) - -This marks the beginning of development on version 2.0 which will include -several architectural improvements. - -[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.11...v1.0.0) - -### v0.9.11 - -* Emit `'progress'` event when receiving data, regardless of parsing it. (Tim Koschützki) -* Use [W3C FileAPI Draft](http://dev.w3.org/2006/webapi/FileAPI/) properties for File class - -**Important:** The old property names of the File class will be removed in a -future release. - -[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.10...v0.9.11) - -### Older releases - -These releases were done before starting to maintain the above Changelog: - -* [v0.9.10](https://github.com/felixge/node-formidable/compare/v0.9.9...v0.9.10) -* [v0.9.9](https://github.com/felixge/node-formidable/compare/v0.9.8...v0.9.9) -* [v0.9.8](https://github.com/felixge/node-formidable/compare/v0.9.7...v0.9.8) -* [v0.9.7](https://github.com/felixge/node-formidable/compare/v0.9.6...v0.9.7) -* [v0.9.6](https://github.com/felixge/node-formidable/compare/v0.9.5...v0.9.6) -* [v0.9.5](https://github.com/felixge/node-formidable/compare/v0.9.4...v0.9.5) -* [v0.9.4](https://github.com/felixge/node-formidable/compare/v0.9.3...v0.9.4) -* [v0.9.3](https://github.com/felixge/node-formidable/compare/v0.9.2...v0.9.3) -* [v0.9.2](https://github.com/felixge/node-formidable/compare/v0.9.1...v0.9.2) -* [v0.9.1](https://github.com/felixge/node-formidable/compare/v0.9.0...v0.9.1) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0) -* [v0.1.0](https://github.com/felixge/node-formidable/commits/v0.1.0) - -## Installation - -Via [npm](http://github.com/isaacs/npm): - - npm install formidable@latest - -Manually: - - git clone git://github.com/felixge/node-formidable.git formidable - vim my.js - # var formidable = require('./formidable'); - -Note: Formidable requires [gently](http://github.com/felixge/node-gently) to run the unit tests, but you won't need it for just using the library. - -## Example - -Parse an incoming file upload. - - var formidable = require('formidable'), - http = require('http'), - - util = require('util'); - - http.createServer(function(req, res) { - if (req.url == '/upload' && req.method.toLowerCase() == 'post') { - // parse a file upload - var form = new formidable.IncomingForm(); - form.parse(req, function(err, fields, files) { - res.writeHead(200, {'content-type': 'text/plain'}); - res.write('received upload:\n\n'); - res.end(util.inspect({fields: fields, files: files})); - }); - return; - } - - // show a file upload form - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - }).listen(80); - -## API - -### formidable.IncomingForm - -__new formidable.IncomingForm()__ - -Creates a new incoming form. - -__incomingForm.encoding = 'utf-8'__ - -The encoding to use for incoming form fields. - -__incomingForm.uploadDir = process.env.TMP || '/tmp' || process.cwd()__ - -The directory for placing file uploads in. You can move them later on using -`fs.rename()`. The default directory is picked at module load time depending on -the first existing directory from those listed above. - -__incomingForm.keepExtensions = false__ - -If you want the files written to `incomingForm.uploadDir` to include the extensions of the original files, set this property to `true`. - -__incomingForm.type__ - -Either 'multipart' or 'urlencoded' depending on the incoming request. - -__incomingForm.maxFieldsSize = 2 * 1024 * 1024__ - -Limits the amount of memory a field (not file) can allocate in bytes. -If this value is exceeded, an `'error'` event is emitted. The default -size is 2MB. - -__incomingForm.hash = false__ - -If you want checksums calculated for incoming files, set this to either `'sha1'` or `'md5'`. - -__incomingForm.bytesReceived__ - -The amount of bytes received for this form so far. - -__incomingForm.bytesExpected__ - -The expected number of bytes in this form. - -__incomingForm.parse(request, [cb])__ - -Parses an incoming node.js `request` containing form data. If `cb` is provided, all fields an files are collected and passed to the callback: - - incomingForm.parse(req, function(err, fields, files) { - // ... - }); - -__incomingForm.onPart(part)__ - -You may overwrite this method if you are interested in directly accessing the multipart stream. Doing so will disable any `'field'` / `'file'` events processing which would occur otherwise, making you fully responsible for handling the processing. - - incomingForm.onPart = function(part) { - part.addListener('data', function() { - // ... - }); - } - -If you want to use formidable to only handle certain parts for you, you can do so: - - incomingForm.onPart = function(part) { - if (!part.filename) { - // let formidable handle all non-file parts - incomingForm.handlePart(part); - } - } - -Check the code in this method for further inspiration. - -__Event: 'progress' (bytesReceived, bytesExpected)__ - -Emitted after each incoming chunk of data that has been parsed. Can be used to roll your own progress bar. - -__Event: 'field' (name, value)__ - -Emitted whenever a field / value pair has been received. - -__Event: 'fileBegin' (name, file)__ - -Emitted whenever a new file is detected in the upload stream. Use this even if -you want to stream the file to somewhere else while buffering the upload on -the file system. - -__Event: 'file' (name, file)__ - -Emitted whenever a field / file pair has been received. `file` is an instance of `File`. - -__Event: 'error' (err)__ - -Emitted when there is an error processing the incoming form. A request that experiences an error is automatically paused, you will have to manually call `request.resume()` if you want the request to continue firing `'data'` events. - -__Event: 'aborted'__ - -Emitted when the request was aborted by the user. Right now this can be due to a 'timeout' or 'close' event on the socket. In the future there will be a separate 'timeout' event (needs a change in the node core). - -__Event: 'end' ()__ - -Emitted when the entire request has been received, and all contained files have finished flushing to disk. This is a great place for you to send your response. - -### formidable.File - -__file.size = 0__ - -The size of the uploaded file in bytes. If the file is still being uploaded (see `'fileBegin'` event), this property says how many bytes of the file have been written to disk yet. - -__file.path = null__ - -The path this file is being written to. You can modify this in the `'fileBegin'` event in -case you are unhappy with the way formidable generates a temporary path for your files. - -__file.name = null__ - -The name this file had according to the uploading client. - -__file.type = null__ - -The mime type of this file, according to the uploading client. - -__file.lastModifiedDate = null__ - -A date object (or `null`) containing the time this file was last written to. Mostly -here for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/). - -__file.hash = null__ - -If hash calculation was set, you can read the hex digest out of this var. - -## License - -Formidable is licensed under the MIT license. - -## Ports - -* [multipart-parser](http://github.com/FooBarWidget/multipart-parser): a C++ parser based on formidable - -## Credits - -* [Ryan Dahl](http://twitter.com/ryah) for his work on [http-parser](http://github.com/ry/http-parser) which heavily inspired multipart_parser.js diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/TODO b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/TODO deleted file mode 100644 index e1107f2..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/TODO +++ /dev/null @@ -1,3 +0,0 @@ -- Better bufferMaxSize handling approach -- Add tests for JSON parser pull request and merge it -- Implement QuerystringParser the same way as MultipartParser diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js deleted file mode 100644 index bff41f1..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/benchmark/bench-multipart-parser.js +++ /dev/null @@ -1,70 +0,0 @@ -require('../test/common'); -var multipartParser = require('../lib/multipart_parser'), - MultipartParser = multipartParser.MultipartParser, - parser = new MultipartParser(), - Buffer = require('buffer').Buffer, - boundary = '-----------------------------168072824752491622650073', - mb = 100, - buffer = createMultipartBuffer(boundary, mb * 1024 * 1024), - callbacks = - { partBegin: -1, - partEnd: -1, - headerField: -1, - headerValue: -1, - partData: -1, - end: -1, - }; - - -parser.initWithBoundary(boundary); -parser.onHeaderField = function() { - callbacks.headerField++; -}; - -parser.onHeaderValue = function() { - callbacks.headerValue++; -}; - -parser.onPartBegin = function() { - callbacks.partBegin++; -}; - -parser.onPartData = function() { - callbacks.partData++; -}; - -parser.onPartEnd = function() { - callbacks.partEnd++; -}; - -parser.onEnd = function() { - callbacks.end++; -}; - -var start = +new Date(), - nparsed = parser.write(buffer), - duration = +new Date - start, - mbPerSec = (mb / (duration / 1000)).toFixed(2); - -console.log(mbPerSec+' mb/sec'); - -assert.equal(nparsed, buffer.length); - -function createMultipartBuffer(boundary, size) { - var head = - '--'+boundary+'\r\n' - + 'content-disposition: form-data; name="field1"\r\n' - + '\r\n' - , tail = '\r\n--'+boundary+'--\r\n' - , buffer = new Buffer(size); - - buffer.write(head, 'ascii', 0); - buffer.write(tail, 'ascii', buffer.length - tail.length); - return buffer; -} - -process.on('exit', function() { - for (var k in callbacks) { - assert.equal(0, callbacks[k], k+' count off by '+callbacks[k]); - } -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/example/post.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/example/post.js deleted file mode 100644 index f6c15a6..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/example/post.js +++ /dev/null @@ -1,43 +0,0 @@ -require('../test/common'); -var http = require('http'), - util = require('util'), - formidable = require('formidable'), - server; - -server = http.createServer(function(req, res) { - if (req.url == '/') { - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - } else if (req.url == '/post') { - var form = new formidable.IncomingForm(), - fields = []; - - form - .on('error', function(err) { - res.writeHead(200, {'content-type': 'text/plain'}); - res.end('error:\n\n'+util.inspect(err)); - }) - .on('field', function(field, value) { - console.log(field, value); - fields.push([field, value]); - }) - .on('end', function() { - console.log('-> post done'); - res.writeHead(200, {'content-type': 'text/plain'}); - res.end('received fields:\n\n '+util.inspect(fields)); - }); - form.parse(req); - } else { - res.writeHead(404, {'content-type': 'text/plain'}); - res.end('404'); - } -}); -server.listen(TEST_PORT); - -console.log('listening on http://localhost:'+TEST_PORT+'/'); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js deleted file mode 100644 index 050cdd9..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/example/upload.js +++ /dev/null @@ -1,48 +0,0 @@ -require('../test/common'); -var http = require('http'), - util = require('util'), - formidable = require('formidable'), - server; - -server = http.createServer(function(req, res) { - if (req.url == '/') { - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - } else if (req.url == '/upload') { - var form = new formidable.IncomingForm(), - files = [], - fields = []; - - form.uploadDir = TEST_TMP; - - form - .on('field', function(field, value) { - console.log(field, value); - fields.push([field, value]); - }) - .on('file', function(field, file) { - console.log(field, file); - files.push([field, file]); - }) - .on('end', function() { - console.log('-> upload done'); - res.writeHead(200, {'content-type': 'text/plain'}); - res.write('received fields:\n\n '+util.inspect(fields)); - res.write('\n\n'); - res.end('received files:\n\n '+util.inspect(files)); - }); - form.parse(req); - } else { - res.writeHead(404, {'content-type': 'text/plain'}); - res.end('404'); - } -}); -server.listen(TEST_PORT); - -console.log('listening on http://localhost:'+TEST_PORT+'/'); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/index.js deleted file mode 100644 index be41032..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/formidable'); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js deleted file mode 100644 index dad8d5f..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/file.js +++ /dev/null @@ -1,73 +0,0 @@ -if (global.GENTLY) require = GENTLY.hijack(require); - -var util = require('./util'), - WriteStream = require('fs').WriteStream, - EventEmitter = require('events').EventEmitter, - crypto = require('crypto'); - -function File(properties) { - EventEmitter.call(this); - - this.size = 0; - this.path = null; - this.name = null; - this.type = null; - this.hash = null; - this.lastModifiedDate = null; - - this._writeStream = null; - - for (var key in properties) { - this[key] = properties[key]; - } - - if(typeof this.hash === 'string') { - this.hash = crypto.createHash(properties.hash); - } - - this._backwardsCompatibility(); -} -module.exports = File; -util.inherits(File, EventEmitter); - -// @todo Next release: Show error messages when accessing these -File.prototype._backwardsCompatibility = function() { - var self = this; - this.__defineGetter__('length', function() { - return self.size; - }); - this.__defineGetter__('filename', function() { - return self.name; - }); - this.__defineGetter__('mime', function() { - return self.type; - }); -}; - -File.prototype.open = function() { - this._writeStream = new WriteStream(this.path); -}; - -File.prototype.write = function(buffer, cb) { - var self = this; - this._writeStream.write(buffer, function() { - if(self.hash) { - self.hash.update(buffer); - } - self.lastModifiedDate = new Date(); - self.size += buffer.length; - self.emit('progress', self.size); - cb(); - }); -}; - -File.prototype.end = function(cb) { - var self = this; - this._writeStream.end(function() { - if(self.hash) { - self.hash = self.hash.digest('hex'); - } - self.emit('end'); - cb(); - }); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js deleted file mode 100644 index 060eac2..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/incoming_form.js +++ /dev/null @@ -1,384 +0,0 @@ -if (global.GENTLY) require = GENTLY.hijack(require); - -var fs = require('fs'); -var util = require('./util'), - path = require('path'), - File = require('./file'), - MultipartParser = require('./multipart_parser').MultipartParser, - QuerystringParser = require('./querystring_parser').QuerystringParser, - StringDecoder = require('string_decoder').StringDecoder, - EventEmitter = require('events').EventEmitter, - Stream = require('stream').Stream; - -function IncomingForm(opts) { - if (!(this instanceof IncomingForm)) return new IncomingForm; - EventEmitter.call(this); - - opts=opts||{}; - - this.error = null; - this.ended = false; - - this.maxFieldsSize = opts.maxFieldsSize || 2 * 1024 * 1024; - this.keepExtensions = opts.keepExtensions || false; - this.uploadDir = opts.uploadDir || IncomingForm.UPLOAD_DIR; - this.encoding = opts.encoding || 'utf-8'; - this.headers = null; - this.type = null; - this.hash = false; - - this.bytesReceived = null; - this.bytesExpected = null; - - this._parser = null; - this._flushing = 0; - this._fieldsSize = 0; -}; -util.inherits(IncomingForm, EventEmitter); -exports.IncomingForm = IncomingForm; - -IncomingForm.UPLOAD_DIR = (function() { - var dirs = [process.env.TMP, '/tmp', process.cwd()]; - for (var i = 0; i < dirs.length; i++) { - var dir = dirs[i]; - var isDirectory = false; - - try { - isDirectory = fs.statSync(dir).isDirectory(); - } catch (e) {} - - if (isDirectory) return dir; - } -})(); - -IncomingForm.prototype.parse = function(req, cb) { - this.pause = function() { - try { - req.pause(); - } catch (err) { - // the stream was destroyed - if (!this.ended) { - // before it was completed, crash & burn - this._error(err); - } - return false; - } - return true; - }; - - this.resume = function() { - try { - req.resume(); - } catch (err) { - // the stream was destroyed - if (!this.ended) { - // before it was completed, crash & burn - this._error(err); - } - return false; - } - - return true; - }; - - this.writeHeaders(req.headers); - - var self = this; - req - .on('error', function(err) { - self._error(err); - }) - .on('aborted', function() { - self.emit('aborted'); - }) - .on('data', function(buffer) { - self.write(buffer); - }) - .on('end', function() { - if (self.error) { - return; - } - - var err = self._parser.end(); - if (err) { - self._error(err); - } - }); - - if (cb) { - var fields = {}, files = {}; - this - .on('field', function(name, value) { - fields[name] = value; - }) - .on('file', function(name, file) { - files[name] = file; - }) - .on('error', function(err) { - cb(err, fields, files); - }) - .on('end', function() { - cb(null, fields, files); - }); - } - - return this; -}; - -IncomingForm.prototype.writeHeaders = function(headers) { - this.headers = headers; - this._parseContentLength(); - this._parseContentType(); -}; - -IncomingForm.prototype.write = function(buffer) { - if (!this._parser) { - this._error(new Error('unintialized parser')); - return; - } - - this.bytesReceived += buffer.length; - this.emit('progress', this.bytesReceived, this.bytesExpected); - - var bytesParsed = this._parser.write(buffer); - if (bytesParsed !== buffer.length) { - this._error(new Error('parser error, '+bytesParsed+' of '+buffer.length+' bytes parsed')); - } - - return bytesParsed; -}; - -IncomingForm.prototype.pause = function() { - // this does nothing, unless overwritten in IncomingForm.parse - return false; -}; - -IncomingForm.prototype.resume = function() { - // this does nothing, unless overwritten in IncomingForm.parse - return false; -}; - -IncomingForm.prototype.onPart = function(part) { - // this method can be overwritten by the user - this.handlePart(part); -}; - -IncomingForm.prototype.handlePart = function(part) { - var self = this; - - if (part.filename === undefined) { - var value = '' - , decoder = new StringDecoder(this.encoding); - - part.on('data', function(buffer) { - self._fieldsSize += buffer.length; - if (self._fieldsSize > self.maxFieldsSize) { - self._error(new Error('maxFieldsSize exceeded, received '+self._fieldsSize+' bytes of field data')); - return; - } - value += decoder.write(buffer); - }); - - part.on('end', function() { - self.emit('field', part.name, value); - }); - return; - } - - this._flushing++; - - var file = new File({ - path: this._uploadPath(part.filename), - name: part.filename, - type: part.mime, - hash: self.hash - }); - - this.emit('fileBegin', part.name, file); - - file.open(); - - part.on('data', function(buffer) { - self.pause(); - file.write(buffer, function() { - self.resume(); - }); - }); - - part.on('end', function() { - file.end(function() { - self._flushing--; - self.emit('file', part.name, file); - self._maybeEnd(); - }); - }); -}; - -IncomingForm.prototype._parseContentType = function() { - if (!this.headers['content-type']) { - this._error(new Error('bad content-type header, no content-type')); - return; - } - - if (this.headers['content-type'].match(/urlencoded/i)) { - this._initUrlencoded(); - return; - } - - if (this.headers['content-type'].match(/multipart/i)) { - var m; - if (m = this.headers['content-type'].match(/boundary=(?:"([^"]+)"|([^;]+))/i)) { - this._initMultipart(m[1] || m[2]); - } else { - this._error(new Error('bad content-type header, no multipart boundary')); - } - return; - } - - this._error(new Error('bad content-type header, unknown content-type: '+this.headers['content-type'])); -}; - -IncomingForm.prototype._error = function(err) { - if (this.error) { - return; - } - - this.error = err; - this.pause(); - this.emit('error', err); -}; - -IncomingForm.prototype._parseContentLength = function() { - if (this.headers['content-length']) { - this.bytesReceived = 0; - this.bytesExpected = parseInt(this.headers['content-length'], 10); - this.emit('progress', this.bytesReceived, this.bytesExpected); - } -}; - -IncomingForm.prototype._newParser = function() { - return new MultipartParser(); -}; - -IncomingForm.prototype._initMultipart = function(boundary) { - this.type = 'multipart'; - - var parser = new MultipartParser(), - self = this, - headerField, - headerValue, - part; - - parser.initWithBoundary(boundary); - - parser.onPartBegin = function() { - part = new Stream(); - part.readable = true; - part.headers = {}; - part.name = null; - part.filename = null; - part.mime = null; - headerField = ''; - headerValue = ''; - }; - - parser.onHeaderField = function(b, start, end) { - headerField += b.toString(self.encoding, start, end); - }; - - parser.onHeaderValue = function(b, start, end) { - headerValue += b.toString(self.encoding, start, end); - }; - - parser.onHeaderEnd = function() { - headerField = headerField.toLowerCase(); - part.headers[headerField] = headerValue; - - var m; - if (headerField == 'content-disposition') { - if (m = headerValue.match(/name="([^"]+)"/i)) { - part.name = m[1]; - } - - part.filename = self._fileName(headerValue); - } else if (headerField == 'content-type') { - part.mime = headerValue; - } - - headerField = ''; - headerValue = ''; - }; - - parser.onHeadersEnd = function() { - self.onPart(part); - }; - - parser.onPartData = function(b, start, end) { - part.emit('data', b.slice(start, end)); - }; - - parser.onPartEnd = function() { - part.emit('end'); - }; - - parser.onEnd = function() { - self.ended = true; - self._maybeEnd(); - }; - - this._parser = parser; -}; - -IncomingForm.prototype._fileName = function(headerValue) { - var m = headerValue.match(/filename="(.*?)"($|; )/i) - if (!m) return; - - var filename = m[1].substr(m[1].lastIndexOf('\\') + 1); - filename = filename.replace(/%22/g, '"'); - filename = filename.replace(/&#([\d]{4});/g, function(m, code) { - return String.fromCharCode(code); - }); - return filename; -}; - -IncomingForm.prototype._initUrlencoded = function() { - this.type = 'urlencoded'; - - var parser = new QuerystringParser() - , self = this; - - parser.onField = function(key, val) { - self.emit('field', key, val); - }; - - parser.onEnd = function() { - self.ended = true; - self._maybeEnd(); - }; - - this._parser = parser; -}; - -IncomingForm.prototype._uploadPath = function(filename) { - var name = ''; - for (var i = 0; i < 32; i++) { - name += Math.floor(Math.random() * 16).toString(16); - } - - if (this.keepExtensions) { - var ext = path.extname(filename); - ext = ext.replace(/(\.[a-z0-9]+).*/, '$1') - - name += ext; - } - - return path.join(this.uploadDir, name); -}; - -IncomingForm.prototype._maybeEnd = function() { - if (!this.ended || this._flushing) { - return; - } - - this.emit('end'); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js deleted file mode 100644 index 7a6e3e1..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/index.js +++ /dev/null @@ -1,3 +0,0 @@ -var IncomingForm = require('./incoming_form').IncomingForm; -IncomingForm.IncomingForm = IncomingForm; -module.exports = IncomingForm; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/multipart_parser.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/multipart_parser.js deleted file mode 100644 index 9ca567c..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/multipart_parser.js +++ /dev/null @@ -1,312 +0,0 @@ -var Buffer = require('buffer').Buffer, - s = 0, - S = - { PARSER_UNINITIALIZED: s++, - START: s++, - START_BOUNDARY: s++, - HEADER_FIELD_START: s++, - HEADER_FIELD: s++, - HEADER_VALUE_START: s++, - HEADER_VALUE: s++, - HEADER_VALUE_ALMOST_DONE: s++, - HEADERS_ALMOST_DONE: s++, - PART_DATA_START: s++, - PART_DATA: s++, - PART_END: s++, - END: s++, - }, - - f = 1, - F = - { PART_BOUNDARY: f, - LAST_BOUNDARY: f *= 2, - }, - - LF = 10, - CR = 13, - SPACE = 32, - HYPHEN = 45, - COLON = 58, - A = 97, - Z = 122, - - lower = function(c) { - return c | 0x20; - }; - -for (var s in S) { - exports[s] = S[s]; -} - -function MultipartParser() { - this.boundary = null; - this.boundaryChars = null; - this.lookbehind = null; - this.state = S.PARSER_UNINITIALIZED; - - this.index = null; - this.flags = 0; -}; -exports.MultipartParser = MultipartParser; - -MultipartParser.stateToString = function(stateNumber) { - for (var state in S) { - var number = S[state]; - if (number === stateNumber) return state; - } -}; - -MultipartParser.prototype.initWithBoundary = function(str) { - this.boundary = new Buffer(str.length+4); - this.boundary.write('\r\n--', 'ascii', 0); - this.boundary.write(str, 'ascii', 4); - this.lookbehind = new Buffer(this.boundary.length+8); - this.state = S.START; - - this.boundaryChars = {}; - for (var i = 0; i < this.boundary.length; i++) { - this.boundaryChars[this.boundary[i]] = true; - } -}; - -MultipartParser.prototype.write = function(buffer) { - var self = this, - i = 0, - len = buffer.length, - prevIndex = this.index, - index = this.index, - state = this.state, - flags = this.flags, - lookbehind = this.lookbehind, - boundary = this.boundary, - boundaryChars = this.boundaryChars, - boundaryLength = this.boundary.length, - boundaryEnd = boundaryLength - 1, - bufferLength = buffer.length, - c, - cl, - - mark = function(name) { - self[name+'Mark'] = i; - }, - clear = function(name) { - delete self[name+'Mark']; - }, - callback = function(name, buffer, start, end) { - if (start !== undefined && start === end) { - return; - } - - var callbackSymbol = 'on'+name.substr(0, 1).toUpperCase()+name.substr(1); - if (callbackSymbol in self) { - self[callbackSymbol](buffer, start, end); - } - }, - dataCallback = function(name, clear) { - var markSymbol = name+'Mark'; - if (!(markSymbol in self)) { - return; - } - - if (!clear) { - callback(name, buffer, self[markSymbol], buffer.length); - self[markSymbol] = 0; - } else { - callback(name, buffer, self[markSymbol], i); - delete self[markSymbol]; - } - }; - - for (i = 0; i < len; i++) { - c = buffer[i]; - switch (state) { - case S.PARSER_UNINITIALIZED: - return i; - case S.START: - index = 0; - state = S.START_BOUNDARY; - case S.START_BOUNDARY: - if (index == boundary.length - 2) { - if (c != CR) { - return i; - } - index++; - break; - } else if (index - 1 == boundary.length - 2) { - if (c != LF) { - return i; - } - index = 0; - callback('partBegin'); - state = S.HEADER_FIELD_START; - break; - } - - if (c != boundary[index+2]) { - return i; - } - index++; - break; - case S.HEADER_FIELD_START: - state = S.HEADER_FIELD; - mark('headerField'); - index = 0; - case S.HEADER_FIELD: - if (c == CR) { - clear('headerField'); - state = S.HEADERS_ALMOST_DONE; - break; - } - - index++; - if (c == HYPHEN) { - break; - } - - if (c == COLON) { - if (index == 1) { - // empty header field - return i; - } - dataCallback('headerField', true); - state = S.HEADER_VALUE_START; - break; - } - - cl = lower(c); - if (cl < A || cl > Z) { - return i; - } - break; - case S.HEADER_VALUE_START: - if (c == SPACE) { - break; - } - - mark('headerValue'); - state = S.HEADER_VALUE; - case S.HEADER_VALUE: - if (c == CR) { - dataCallback('headerValue', true); - callback('headerEnd'); - state = S.HEADER_VALUE_ALMOST_DONE; - } - break; - case S.HEADER_VALUE_ALMOST_DONE: - if (c != LF) { - return i; - } - state = S.HEADER_FIELD_START; - break; - case S.HEADERS_ALMOST_DONE: - if (c != LF) { - return i; - } - - callback('headersEnd'); - state = S.PART_DATA_START; - break; - case S.PART_DATA_START: - state = S.PART_DATA - mark('partData'); - case S.PART_DATA: - prevIndex = index; - - if (index == 0) { - // boyer-moore derrived algorithm to safely skip non-boundary data - i += boundaryEnd; - while (i < bufferLength && !(buffer[i] in boundaryChars)) { - i += boundaryLength; - } - i -= boundaryEnd; - c = buffer[i]; - } - - if (index < boundary.length) { - if (boundary[index] == c) { - if (index == 0) { - dataCallback('partData', true); - } - index++; - } else { - index = 0; - } - } else if (index == boundary.length) { - index++; - if (c == CR) { - // CR = part boundary - flags |= F.PART_BOUNDARY; - } else if (c == HYPHEN) { - // HYPHEN = end boundary - flags |= F.LAST_BOUNDARY; - } else { - index = 0; - } - } else if (index - 1 == boundary.length) { - if (flags & F.PART_BOUNDARY) { - index = 0; - if (c == LF) { - // unset the PART_BOUNDARY flag - flags &= ~F.PART_BOUNDARY; - callback('partEnd'); - callback('partBegin'); - state = S.HEADER_FIELD_START; - break; - } - } else if (flags & F.LAST_BOUNDARY) { - if (c == HYPHEN) { - callback('partEnd'); - callback('end'); - state = S.END; - } else { - index = 0; - } - } else { - index = 0; - } - } - - if (index > 0) { - // when matching a possible boundary, keep a lookbehind reference - // in case it turns out to be a false lead - lookbehind[index-1] = c; - } else if (prevIndex > 0) { - // if our boundary turned out to be rubbish, the captured lookbehind - // belongs to partData - callback('partData', lookbehind, 0, prevIndex); - prevIndex = 0; - mark('partData'); - - // reconsider the current character even so it interrupted the sequence - // it could be the beginning of a new sequence - i--; - } - - break; - case S.END: - break; - default: - return i; - } - } - - dataCallback('headerField'); - dataCallback('headerValue'); - dataCallback('partData'); - - this.index = index; - this.state = state; - this.flags = flags; - - return len; -}; - -MultipartParser.prototype.end = function() { - if (this.state != S.END) { - return new Error('MultipartParser.end(): stream ended unexpectedly: ' + this.explain()); - } -}; - -MultipartParser.prototype.explain = function() { - return 'state = ' + MultipartParser.stateToString(this.state); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js deleted file mode 100644 index 63f109e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/querystring_parser.js +++ /dev/null @@ -1,25 +0,0 @@ -if (global.GENTLY) require = GENTLY.hijack(require); - -// This is a buffering parser, not quite as nice as the multipart one. -// If I find time I'll rewrite this to be fully streaming as well -var querystring = require('querystring'); - -function QuerystringParser() { - this.buffer = ''; -}; -exports.QuerystringParser = QuerystringParser; - -QuerystringParser.prototype.write = function(buffer) { - this.buffer += buffer.toString('ascii'); - return buffer.length; -}; - -QuerystringParser.prototype.end = function() { - var fields = querystring.parse(this.buffer); - for (var field in fields) { - this.onField(field, fields[field]); - } - this.buffer = ''; - - this.onEnd(); -}; \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js deleted file mode 100644 index e9493e9..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/lib/util.js +++ /dev/null @@ -1,6 +0,0 @@ -// Backwards compatibility ... -try { - module.exports = require('util'); -} catch (e) { - module.exports = require('sys'); -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Makefile b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Makefile deleted file mode 100644 index 01f7140..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -test: - @find test/simple/test-*.js | xargs -n 1 -t node - -.PHONY: test \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Readme.md deleted file mode 100644 index f8f0c66..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/Readme.md +++ /dev/null @@ -1,167 +0,0 @@ -# Gently - -## Purpose - -A node.js module that helps with stubbing and behavior verification. It allows you to test the most remote and nested corners of your code while keeping being fully unobtrusive. - -## Features - -* Overwrite and stub individual object functions -* Verify that all expected calls have been made in the expected order -* Restore stubbed functions to their original behavior -* Detect object / class names from obj.constructor.name and obj.toString() -* Hijack any required module function or class constructor - -## Installation - -Via [npm](http://github.com/isaacs/npm): - - npm install gently@latest - -## Example - -Make sure your dog is working properly: - - function Dog() {} - - Dog.prototype.seeCat = function() { - this.bark('whuf, whuf'); - this.run(); - } - - Dog.prototype.bark = function(bark) { - require('sys').puts(bark); - } - - var gently = new (require('gently')) - , assert = require('assert') - , dog = new Dog(); - - gently.expect(dog, 'bark', function(bark) { - assert.equal(bark, 'whuf, whuf'); - }); - gently.expect(dog, 'run'); - - dog.seeCat(); - -You can also easily test event emitters with this, for example a simple sequence of 2 events emitted by `fs.WriteStream`: - - var gently = new (require('gently')) - , stream = new (require('fs').WriteStream)('my_file.txt'); - - gently.expect(stream, 'emit', function(event) { - assert.equal(event, 'open'); - }); - - gently.expect(stream, 'emit', function(event) { - assert.equal(event, 'drain'); - }); - -For a full read world example, check out this test case: [test-incoming-form.js](http://github.com/felixge/node-formidable/blob/master/test/simple/test-incoming-form.js) (in [node-formdiable](http://github.com/felixge/node-formidable)). - -## API - -### Gently - -#### new Gently() - -Creates a new gently instance. It listens to the process `'exit'` event to make sure all expectations have been verified. - -#### gently.expect(obj, method, [[count], stubFn]) - -Creates an expectation for an objects method to be called. You can optionally specify the call `count` you are expecting, as well as `stubFn` function that will run instead of the original function. - -Returns a reference to the function that is getting overwritten. - -#### gently.expect([count], stubFn) - -Returns a function that is supposed to be executed `count` times, delegating any calls to the provided `stubFn` function. Naming your stubFn closure will help to properly diagnose errors that are being thrown: - - childProcess.exec('ls', gently.expect(function lsCallback(code) { - assert.equal(0, code); - })); - -#### gently.restore(obj, method) - -Restores an object method that has been previously overwritten using `gently.expect()`. - -#### gently.hijack(realRequire) - -Returns a new require functions that catches a reference to all required modules into `gently.hijacked`. - -To use this function, include a line like this in your `'my-module.js'`. - - if (global.GENTLY) require = GENTLY.hijack(require); - - var sys = require('sys'); - exports.hello = function() { - sys.log('world'); - }; - -Now you can write a test for the module above: - - var gently = global.GENTLY = new (require('gently')) - , myModule = require('./my-module'); - - gently.expect(gently.hijacked.sys, 'log', function(str) { - assert.equal(str, 'world'); - }); - - myModule.hello(); - -#### gently.stub(location, [exportsName]) - -Returns a stub class that will be used instead of the real class from the module at `location` with the given `exportsName`. - -This allows to test an OOP version of the previous example, where `'my-module.js'`. - - if (global.GENTLY) require = GENTLY.hijack(require); - - var World = require('./world'); - - exports.hello = function() { - var world = new World(); - world.hello(); - } - -And `world.js` looks like this: - - var sys = require('sys'); - - function World() { - - } - module.exports = World; - - World.prototype.hello = function() { - sys.log('world'); - }; - -Testing `'my-module.js'` can now easily be accomplished: - - var gently = global.GENTLY = new (require('gently')) - , WorldStub = gently.stub('./world') - , myModule = require('./my-module') - , WORLD; - - gently.expect(WorldStub, 'new', function() { - WORLD = this; - }); - - gently.expect(WORLD, 'hello'); - - myModule.hello(); - -#### gently.hijacked - -An object that holds the references to all hijacked modules. - -#### gently.verify([msg]) - -Verifies that all expectations of this gently instance have been satisfied. If not called manually, this method is called when the process `'exit'` event is fired. - -If `msg` is given, it will appear in any error that might be thrown. - -## License - -Gently is licensed under the MIT license. \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/dog.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/dog.js deleted file mode 100644 index 022fae0..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/dog.js +++ /dev/null @@ -1,22 +0,0 @@ -require('../test/common'); -function Dog() {} - -Dog.prototype.seeCat = function() { - this.bark('whuf, whuf'); - this.run(); -} - -Dog.prototype.bark = function(bark) { - require('sys').puts(bark); -} - -var gently = new (require('gently')) - , assert = require('assert') - , dog = new Dog(); - -gently.expect(dog, 'bark', function(bark) { - assert.equal(bark, 'whuf, whuf'); -}); -gently.expect(dog, 'run'); - -dog.seeCat(); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/event_emitter.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/event_emitter.js deleted file mode 100644 index 7def134..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/example/event_emitter.js +++ /dev/null @@ -1,11 +0,0 @@ -require('../test/common'); -var gently = new (require('gently')) - , stream = new (require('fs').WriteStream)('my_file.txt'); - -gently.expect(stream, 'emit', function(event) { - assert.equal(event, 'open'); -}); - -gently.expect(stream, 'emit', function(event) { - assert.equal(event, 'drain'); -}); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/index.js deleted file mode 100644 index 69122bd..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/gently'); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/gently.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/gently.js deleted file mode 100644 index 8af0e1e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/gently.js +++ /dev/null @@ -1,184 +0,0 @@ -var path = require('path'); - -function Gently() { - this.expectations = []; - this.hijacked = {}; - - var self = this; - process.addListener('exit', function() { - self.verify('process exit'); - }); -}; -module.exports = Gently; - -Gently.prototype.stub = function(location, exportsName) { - function Stub() { - return Stub['new'].apply(this, arguments); - }; - - Stub['new'] = function () {}; - - var stubName = 'require('+JSON.stringify(location)+')'; - if (exportsName) { - stubName += '.'+exportsName; - } - - Stub.prototype.toString = Stub.toString = function() { - return stubName; - }; - - var exports = this.hijacked[location] || {}; - if (exportsName) { - exports[exportsName] = Stub; - } else { - exports = Stub; - } - - this.hijacked[location] = exports; - return Stub; -}; - -Gently.prototype.hijack = function(realRequire) { - var self = this; - return function(location) { - return self.hijacked[location] = (self.hijacked[location]) - ? self.hijacked[location] - : realRequire(location); - }; -}; - -Gently.prototype.expect = function(obj, method, count, stubFn) { - if (typeof obj != 'function' && typeof obj != 'object' && typeof obj != 'number') { - throw new Error - ( 'Bad 1st argument for gently.expect(), ' - + 'object, function, or number expected, got: '+(typeof obj) - ); - } else if (typeof obj == 'function' && (typeof method != 'string')) { - // expect(stubFn) interface - stubFn = obj; - obj = null; - method = null; - count = 1; - } else if (typeof method == 'function') { - // expect(count, stubFn) interface - count = obj; - stubFn = method; - obj = null; - method = null; - } else if (typeof count == 'function') { - // expect(obj, method, stubFn) interface - stubFn = count; - count = 1; - } else if (count === undefined) { - // expect(obj, method) interface - count = 1; - } - - var name = this._name(obj, method, stubFn); - this.expectations.push({obj: obj, method: method, stubFn: stubFn, name: name, count: count}); - - var self = this; - function delegate() { - return self._stubFn(this, obj, method, name, Array.prototype.slice.call(arguments)); - } - - if (!obj) { - return delegate; - } - - var original = (obj[method]) - ? obj[method]._original || obj[method] - : undefined; - - obj[method] = delegate; - return obj[method]._original = original; -}; - -Gently.prototype.restore = function(obj, method) { - if (!obj[method] || !obj[method]._original) { - throw new Error(this._name(obj, method)+' is not gently stubbed'); - } - obj[method] = obj[method]._original; -}; - -Gently.prototype.verify = function(msg) { - if (!this.expectations.length) { - return; - } - - var validExpectations = []; - for (var i = 0, l = this.expectations.length; i < l; i++) { - var expectation = this.expectations[i]; - - if (expectation.count > 0) { - validExpectations.push(expectation); - } - } - - this.expectations = []; // reset so that no duplicate verification attempts are made - - if (!validExpectations.length) { - return; - } - - var expectation = validExpectations[0]; - - throw new Error - ( 'Expected call to '+expectation.name+' did not happen' - + ( (msg) - ? ' ('+msg+')' - : '' - ) - ); -}; - -Gently.prototype._stubFn = function(self, obj, method, name, args) { - var expectation = this.expectations[0], obj, method; - - if (!expectation) { - throw new Error('Unexpected call to '+name+', no call was expected'); - } - - if (expectation.obj !== obj || expectation.method !== method) { - throw new Error('Unexpected call to '+name+', expected call to '+ expectation.name); - } - - expectation.count -= 1; - if (expectation.count === 0) { - this.expectations.shift(); - - // autorestore original if its not a closure - // and no more expectations on that object - var has_more_expectations = this.expectations.reduce(function (memo, expectation) { - return memo || (expectation.obj === obj && expectation.method === method); - }, false); - if (obj !== null && method !== null && !has_more_expectations) { - if (typeof obj[method]._original !== 'undefined') { - obj[method] = obj[method]._original; - delete obj[method]._original; - } else { - delete obj[method]; - } - } - } - - if (expectation.stubFn) { - return expectation.stubFn.apply(self, args); - } -}; - -Gently.prototype._name = function(obj, method, stubFn) { - if (obj) { - var objectName = obj.toString(); - if (objectName == '[object Object]' && obj.constructor.name) { - objectName = '['+obj.constructor.name+']'; - } - return (objectName)+'.'+method+'()'; - } - - if (stubFn.name) { - return stubFn.name+'()'; - } - - return '>> '+stubFn.toString()+' <<'; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/index.js deleted file mode 100644 index 64c1977..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/lib/gently/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./gently'); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/package.json deleted file mode 100644 index 9c1b7a0..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "gently", - "version": "0.9.2", - "directories": { - "lib": "./lib/gently" - }, - "main": "./lib/gently/index", - "dependencies": {}, - "devDependencies": {}, - "engines": { - "node": "*" - }, - "optionalDependencies": {} -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/common.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/common.js deleted file mode 100644 index 978b5c5..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/common.js +++ /dev/null @@ -1,8 +0,0 @@ -var path = require('path') - , sys = require('sys'); - -require.paths.unshift(path.dirname(__dirname)+'/lib'); - -global.puts = sys.puts; -global.p = function() {sys.error(sys.inspect.apply(null, arguments))};; -global.assert = require('assert'); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/simple/test-gently.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/simple/test-gently.js deleted file mode 100644 index 4f8fe2d..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/node-gently/test/simple/test-gently.js +++ /dev/null @@ -1,348 +0,0 @@ -require('../common'); -var Gently = require('gently') - , gently; - -function test(test) { - process.removeAllListeners('exit'); - gently = new Gently(); - test(); -} - -test(function constructor() { - assert.deepEqual(gently.expectations, []); - assert.deepEqual(gently.hijacked, {}); - assert.equal(gently.constructor.name, 'Gently'); -}); - -test(function expectBadArgs() { - var BAD_ARG = 'oh no'; - try { - gently.expect(BAD_ARG); - assert.ok(false, 'throw needs to happen'); - } catch (e) { - assert.equal(e.message, 'Bad 1st argument for gently.expect(), object, function, or number expected, got: '+(typeof BAD_ARG)); - } -}); - -test(function expectObjMethod() { - var OBJ = {}, NAME = 'foobar'; - OBJ.foo = function(x) { - return x; - }; - - gently._name = function() { - return NAME; - }; - - var original = OBJ.foo - , stubFn = function() {}; - - (function testAddOne() { - assert.strictEqual(gently.expect(OBJ, 'foo', stubFn), original); - - assert.equal(gently.expectations.length, 1); - var expectation = gently.expectations[0]; - assert.strictEqual(expectation.obj, OBJ); - assert.strictEqual(expectation.method, 'foo'); - assert.strictEqual(expectation.stubFn, stubFn); - assert.strictEqual(expectation.name, NAME); - assert.strictEqual(OBJ.foo._original, original); - })(); - - (function testAddTwo() { - gently.expect(OBJ, 'foo', 2, stubFn); - assert.equal(gently.expectations.length, 2); - assert.strictEqual(OBJ.foo._original, original); - })(); - - (function testAddOneWithoutMock() { - gently.expect(OBJ, 'foo'); - assert.equal(gently.expectations.length, 3); - })(); - - var stubFnCalled = 0, SELF = {}; - gently._stubFn = function(self, obj, method, name, args) { - stubFnCalled++; - assert.strictEqual(self, SELF); - assert.strictEqual(obj, OBJ); - assert.strictEqual(method, 'foo'); - assert.strictEqual(name, NAME); - assert.deepEqual(args, [1, 2]); - return 23; - }; - assert.equal(OBJ.foo.apply(SELF, [1, 2]), 23); - assert.equal(stubFnCalled, 1); -}); - -test(function expectClosure() { - var NAME = 'MY CLOSURE'; - function closureFn() {}; - - gently._name = function() { - return NAME; - }; - - var fn = gently.expect(closureFn); - assert.equal(gently.expectations.length, 1); - var expectation = gently.expectations[0]; - assert.strictEqual(expectation.obj, null); - assert.strictEqual(expectation.method, null); - assert.strictEqual(expectation.stubFn, closureFn); - assert.strictEqual(expectation.name, NAME); - - var stubFnCalled = 0, SELF = {}; - gently._stubFn = function(self, obj, method, name, args) { - stubFnCalled++; - assert.strictEqual(self, SELF); - assert.strictEqual(obj, null); - assert.strictEqual(method, null); - assert.strictEqual(name, NAME); - assert.deepEqual(args, [1, 2]); - return 23; - }; - assert.equal(fn.apply(SELF, [1, 2]), 23); - assert.equal(stubFnCalled, 1); -}); - -test(function expectClosureCount() { - var stubFnCalled = 0; - function closureFn() {stubFnCalled++}; - - var fn = gently.expect(2, closureFn); - assert.equal(gently.expectations.length, 1); - fn(); - assert.equal(gently.expectations.length, 1); - fn(); - assert.equal(stubFnCalled, 2); -}); - -test(function restore() { - var OBJ = {}, NAME = '[my object].myFn()'; - OBJ.foo = function(x) { - return x; - }; - - gently._name = function() { - return NAME; - }; - - var original = OBJ.foo; - gently.expect(OBJ, 'foo'); - gently.restore(OBJ, 'foo'); - assert.strictEqual(OBJ.foo, original); - - (function testError() { - try { - gently.restore(OBJ, 'foo'); - assert.ok(false, 'throw needs to happen'); - } catch (e) { - assert.equal(e.message, NAME+' is not gently stubbed'); - } - })(); -}); - -test(function _stubFn() { - var OBJ1 = {toString: function() {return '[OBJ 1]'}} - , OBJ2 = {toString: function() {return '[OBJ 2]'}, foo: function () {return 'bar';}} - , SELF = {}; - - gently.expect(OBJ1, 'foo', function(x) { - assert.strictEqual(this, SELF); - return x * 2; - }); - - assert.equal(gently._stubFn(SELF, OBJ1, 'foo', 'dummy_name', [5]), 10); - - (function testAutorestore() { - assert.equal(OBJ2.foo(), 'bar'); - - gently.expect(OBJ2, 'foo', function() { - return 'stubbed foo'; - }); - - gently.expect(OBJ2, 'foo', function() { - return "didn't restore yet"; - }); - - assert.equal(gently._stubFn(SELF, OBJ2, 'foo', 'dummy_name', []), 'stubbed foo'); - assert.equal(gently._stubFn(SELF, OBJ2, 'foo', 'dummy_name', []), "didn't restore yet"); - assert.equal(OBJ2.foo(), 'bar'); - assert.deepEqual(gently.expectations, []); - })(); - - (function testNoMoreCallExpected() { - try { - gently._stubFn(SELF, OBJ1, 'foo', 'dummy_name', [5]); - assert.ok(false, 'throw needs to happen'); - } catch (e) { - assert.equal(e.message, 'Unexpected call to dummy_name, no call was expected'); - } - })(); - - (function testDifferentCallExpected() { - gently.expect(OBJ2, 'bar'); - try { - gently._stubFn(SELF, OBJ1, 'foo', 'dummy_name', [5]); - assert.ok(false, 'throw needs to happen'); - } catch (e) { - assert.equal(e.message, 'Unexpected call to dummy_name, expected call to '+gently._name(OBJ2, 'bar')); - } - - assert.equal(gently.expectations.length, 1); - })(); - - (function testNoMockCallback() { - OBJ2.bar(); - assert.equal(gently.expectations.length, 0); - })(); -}); - -test(function stub() { - var LOCATION = './my_class'; - - (function testRegular() { - var Stub = gently.stub(LOCATION); - assert.ok(Stub instanceof Function); - assert.strictEqual(gently.hijacked[LOCATION], Stub); - assert.ok(Stub['new'] instanceof Function); - assert.equal(Stub.toString(), 'require('+JSON.stringify(LOCATION)+')'); - - (function testConstructor() { - var newCalled = 0 - , STUB - , ARGS = ['foo', 'bar']; - - Stub['new'] = function(a, b) { - assert.equal(a, ARGS[0]); - assert.equal(b, ARGS[1]); - newCalled++; - STUB = this; - }; - - var stub = new Stub(ARGS[0], ARGS[1]); - assert.strictEqual(stub, STUB); - assert.equal(newCalled, 1); - assert.equal(stub.toString(), 'require('+JSON.stringify(LOCATION)+')'); - })(); - - (function testUseReturnValueAsInstance() { - var R = {}; - - Stub['new'] = function() { - return R; - }; - - var stub = new Stub(); - assert.strictEqual(stub, R); - - })(); - })(); - - var EXPORTS_NAME = 'MyClass'; - test(function testExportsName() { - var Stub = gently.stub(LOCATION, EXPORTS_NAME); - assert.strictEqual(gently.hijacked[LOCATION][EXPORTS_NAME], Stub); - assert.equal(Stub.toString(), 'require('+JSON.stringify(LOCATION)+').'+EXPORTS_NAME); - - (function testConstructor() { - var stub = new Stub(); - assert.equal(Stub.toString(), 'require('+JSON.stringify(LOCATION)+').'+EXPORTS_NAME); - })(); - }); -}); - -test(function hijack() { - var LOCATION = './foo' - , REQUIRE_CALLS = 0 - , EXPORTS = {} - , REQUIRE = function() { - REQUIRE_CALLS++; - return EXPORTS; - }; - - var hijackedRequire = gently.hijack(REQUIRE); - hijackedRequire(LOCATION); - assert.strictEqual(gently.hijacked[LOCATION], EXPORTS); - - assert.equal(REQUIRE_CALLS, 1); - - // make sure we are caching the hijacked module - hijackedRequire(LOCATION); - assert.equal(REQUIRE_CALLS, 1); -}); - -test(function verify() { - var OBJ = {toString: function() {return '[OBJ]'}}; - gently.verify(); - - gently.expect(OBJ, 'foo'); - try { - gently.verify(); - assert.ok(false, 'throw needs to happen'); - } catch (e) { - assert.equal(e.message, 'Expected call to [OBJ].foo() did not happen'); - } - - try { - gently.verify('foo'); - assert.ok(false, 'throw needs to happen'); - } catch (e) { - assert.equal(e.message, 'Expected call to [OBJ].foo() did not happen (foo)'); - } -}); - -test(function processExit() { - var verifyCalled = 0; - gently.verify = function(msg) { - verifyCalled++; - assert.equal(msg, 'process exit'); - }; - - process.emit('exit'); - assert.equal(verifyCalled, 1); -}); - -test(function _name() { - (function testNamedClass() { - function Foo() {}; - var foo = new Foo(); - assert.equal(gently._name(foo, 'bar'), '[Foo].bar()'); - })(); - - (function testToStringPreference() { - function Foo() {}; - Foo.prototype.toString = function() { - return '[Superman 123]'; - }; - var foo = new Foo(); - assert.equal(gently._name(foo, 'bar'), '[Superman 123].bar()'); - })(); - - (function testUnamedClass() { - var Foo = function() {}; - var foo = new Foo(); - assert.equal(gently._name(foo, 'bar'), foo.toString()+'.bar()'); - })(); - - (function testNamedClosure() { - function myClosure() {}; - assert.equal(gently._name(null, null, myClosure), myClosure.name+'()'); - })(); - - (function testUnamedClosure() { - var myClosure = function() {2+2 == 5}; - assert.equal(gently._name(null, null, myClosure), '>> '+myClosure.toString()+' <<'); - })(); -}); - -test(function verifyExpectNone() { - var OBJ = {toString: function() {return '[OBJ]'}}; - gently.verify(); - - gently.expect(OBJ, 'foo', 0); - try { - gently.verify(); - } catch (e) { - assert.fail('Exception should not have been thrown'); - } -}); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/package.json deleted file mode 100644 index 1fd45c7..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "formidable", - "version": "1.0.11", - "dependencies": {}, - "devDependencies": { - "gently": "0.8.0", - "findit": "0.1.1", - "hashish": "0.0.4", - "urun": "0.0.4", - "utest": "0.0.3" - }, - "directories": { - "lib": "./lib" - }, - "main": "./lib/index", - "scripts": { - "test": "make test" - }, - "engines": { - "node": "*" - }, - "optionalDependencies": {}, - "readme": "# Formidable\n\n[![Build Status](https://secure.travis-ci.org/felixge/node-formidable.png?branch=master)](http://travis-ci.org/felixge/node-formidable)\n\n## Purpose\n\nA node.js module for parsing form data, especially file uploads.\n\n## Current status\n\nThis module was developed for [Transloadit](http://transloadit.com/), a service focused on uploading\nand encoding images and videos. It has been battle-tested against hundreds of GB of file uploads from\na large variety of clients and is considered production-ready.\n\n## Features\n\n* Fast (~500mb/sec), non-buffering multipart parser\n* Automatically writing file uploads to disk\n* Low memory footprint\n* Graceful error handling\n* Very high test coverage\n\n## Changelog\n\n### v1.0.9\n\n* Emit progress when content length header parsed (Tim Koschützki)\n* Fix Readme syntax due to GitHub changes (goob)\n* Replace references to old 'sys' module in Readme with 'util' (Peter Sugihara)\n\n### v1.0.8\n\n* Strip potentially unsafe characters when using `keepExtensions: true`.\n* Switch to utest / urun for testing\n* Add travis build\n\n### v1.0.7\n\n* Remove file from package that was causing problems when installing on windows. (#102)\n* Fix typos in Readme (Jason Davies).\n\n### v1.0.6\n\n* Do not default to the default to the field name for file uploads where\n filename=\"\".\n\n### v1.0.5\n\n* Support filename=\"\" in multipart parts\n* Explain unexpected end() errors in parser better\n\n**Note:** Starting with this version, formidable emits 'file' events for empty\nfile input fields. Previously those were incorrectly emitted as regular file\ninput fields with value = \"\".\n\n### v1.0.4\n\n* Detect a good default tmp directory regardless of platform. (#88)\n\n### v1.0.3\n\n* Fix problems with utf8 characters (#84) / semicolons in filenames (#58)\n* Small performance improvements\n* New test suite and fixture system\n\n### v1.0.2\n\n* Exclude node\\_modules folder from git\n* Implement new `'aborted'` event\n* Fix files in example folder to work with recent node versions\n* Make gently a devDependency\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.1...v1.0.2)\n\n### v1.0.1\n\n* Fix package.json to refer to proper main directory. (#68, Dean Landolt)\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.0...v1.0.1)\n\n### v1.0.0\n\n* Add support for multipart boundaries that are quoted strings. (Jeff Craig)\n\nThis marks the beginning of development on version 2.0 which will include\nseveral architectural improvements.\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.11...v1.0.0)\n\n### v0.9.11\n\n* Emit `'progress'` event when receiving data, regardless of parsing it. (Tim Koschützki)\n* Use [W3C FileAPI Draft](http://dev.w3.org/2006/webapi/FileAPI/) properties for File class\n\n**Important:** The old property names of the File class will be removed in a\nfuture release.\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.10...v0.9.11)\n\n### Older releases\n\nThese releases were done before starting to maintain the above Changelog:\n\n* [v0.9.10](https://github.com/felixge/node-formidable/compare/v0.9.9...v0.9.10)\n* [v0.9.9](https://github.com/felixge/node-formidable/compare/v0.9.8...v0.9.9)\n* [v0.9.8](https://github.com/felixge/node-formidable/compare/v0.9.7...v0.9.8)\n* [v0.9.7](https://github.com/felixge/node-formidable/compare/v0.9.6...v0.9.7)\n* [v0.9.6](https://github.com/felixge/node-formidable/compare/v0.9.5...v0.9.6)\n* [v0.9.5](https://github.com/felixge/node-formidable/compare/v0.9.4...v0.9.5)\n* [v0.9.4](https://github.com/felixge/node-formidable/compare/v0.9.3...v0.9.4)\n* [v0.9.3](https://github.com/felixge/node-formidable/compare/v0.9.2...v0.9.3)\n* [v0.9.2](https://github.com/felixge/node-formidable/compare/v0.9.1...v0.9.2)\n* [v0.9.1](https://github.com/felixge/node-formidable/compare/v0.9.0...v0.9.1)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.1.0](https://github.com/felixge/node-formidable/commits/v0.1.0)\n\n## Installation\n\nVia [npm](http://github.com/isaacs/npm):\n\n npm install formidable@latest\n\nManually:\n\n git clone git://github.com/felixge/node-formidable.git formidable\n vim my.js\n # var formidable = require('./formidable');\n\nNote: Formidable requires [gently](http://github.com/felixge/node-gently) to run the unit tests, but you won't need it for just using the library.\n\n## Example\n\nParse an incoming file upload.\n\n var formidable = require('formidable'),\n http = require('http'),\n\n util = require('util');\n\n http.createServer(function(req, res) {\n if (req.url == '/upload' && req.method.toLowerCase() == 'post') {\n // parse a file upload\n var form = new formidable.IncomingForm();\n form.parse(req, function(err, fields, files) {\n res.writeHead(200, {'content-type': 'text/plain'});\n res.write('received upload:\\n\\n');\n res.end(util.inspect({fields: fields, files: files}));\n });\n return;\n }\n\n // show a file upload form\n res.writeHead(200, {'content-type': 'text/html'});\n res.end(\n '
    '+\n '
    '+\n '
    '+\n ''+\n '
    '\n );\n }).listen(80);\n\n## API\n\n### formidable.IncomingForm\n\n__new formidable.IncomingForm()__\n\nCreates a new incoming form.\n\n__incomingForm.encoding = 'utf-8'__\n\nThe encoding to use for incoming form fields.\n\n__incomingForm.uploadDir = process.env.TMP || '/tmp' || process.cwd()__\n\nThe directory for placing file uploads in. You can move them later on using\n`fs.rename()`. The default directory is picked at module load time depending on\nthe first existing directory from those listed above.\n\n__incomingForm.keepExtensions = false__\n\nIf you want the files written to `incomingForm.uploadDir` to include the extensions of the original files, set this property to `true`.\n\n__incomingForm.type__\n\nEither 'multipart' or 'urlencoded' depending on the incoming request.\n\n__incomingForm.maxFieldsSize = 2 * 1024 * 1024__\n\nLimits the amount of memory a field (not file) can allocate in bytes.\nIf this value is exceeded, an `'error'` event is emitted. The default\nsize is 2MB.\n\n__incomingForm.hash = false__\n\nIf you want checksums calculated for incoming files, set this to either `'sha1'` or `'md5'`.\n\n__incomingForm.bytesReceived__\n\nThe amount of bytes received for this form so far.\n\n__incomingForm.bytesExpected__\n\nThe expected number of bytes in this form.\n\n__incomingForm.parse(request, [cb])__\n\nParses an incoming node.js `request` containing form data. If `cb` is provided, all fields an files are collected and passed to the callback:\n\n incomingForm.parse(req, function(err, fields, files) {\n // ...\n });\n\n__incomingForm.onPart(part)__\n\nYou may overwrite this method if you are interested in directly accessing the multipart stream. Doing so will disable any `'field'` / `'file'` events processing which would occur otherwise, making you fully responsible for handling the processing.\n\n incomingForm.onPart = function(part) {\n part.addListener('data', function() {\n // ...\n });\n }\n\nIf you want to use formidable to only handle certain parts for you, you can do so:\n\n incomingForm.onPart = function(part) {\n if (!part.filename) {\n // let formidable handle all non-file parts\n incomingForm.handlePart(part);\n }\n }\n\nCheck the code in this method for further inspiration.\n\n__Event: 'progress' (bytesReceived, bytesExpected)__\n\nEmitted after each incoming chunk of data that has been parsed. Can be used to roll your own progress bar.\n\n__Event: 'field' (name, value)__\n\nEmitted whenever a field / value pair has been received.\n\n__Event: 'fileBegin' (name, file)__\n\nEmitted whenever a new file is detected in the upload stream. Use this even if\nyou want to stream the file to somewhere else while buffering the upload on\nthe file system.\n\n__Event: 'file' (name, file)__\n\nEmitted whenever a field / file pair has been received. `file` is an instance of `File`.\n\n__Event: 'error' (err)__\n\nEmitted when there is an error processing the incoming form. A request that experiences an error is automatically paused, you will have to manually call `request.resume()` if you want the request to continue firing `'data'` events.\n\n__Event: 'aborted'__\n\nEmitted when the request was aborted by the user. Right now this can be due to a 'timeout' or 'close' event on the socket. In the future there will be a separate 'timeout' event (needs a change in the node core).\n\n__Event: 'end' ()__\n\nEmitted when the entire request has been received, and all contained files have finished flushing to disk. This is a great place for you to send your response.\n\n### formidable.File\n\n__file.size = 0__\n\nThe size of the uploaded file in bytes. If the file is still being uploaded (see `'fileBegin'` event), this property says how many bytes of the file have been written to disk yet.\n\n__file.path = null__\n\nThe path this file is being written to. You can modify this in the `'fileBegin'` event in\ncase you are unhappy with the way formidable generates a temporary path for your files.\n\n__file.name = null__\n\nThe name this file had according to the uploading client.\n\n__file.type = null__\n\nThe mime type of this file, according to the uploading client.\n\n__file.lastModifiedDate = null__\n\nA date object (or `null`) containing the time this file was last written to. Mostly\nhere for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/).\n\n__file.hash = null__\n\nIf hash calculation was set, you can read the hex digest out of this var.\n\n## License\n\nFormidable is licensed under the MIT license.\n\n## Ports\n\n* [multipart-parser](http://github.com/FooBarWidget/multipart-parser): a C++ parser based on formidable\n\n## Credits\n\n* [Ryan Dahl](http://twitter.com/ryah) for his work on [http-parser](http://github.com/ry/http-parser) which heavily inspired multipart_parser.js\n", - "readmeFilename": "Readme.md", - "_id": "formidable@1.0.11", - "description": "[![Build Status](https://secure.travis-ci.org/felixge/node-formidable.png?branch=master)](http://travis-ci.org/felixge/node-formidable)", - "_from": "formidable@1.0.11" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/common.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/common.js deleted file mode 100644 index eb432ad..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/common.js +++ /dev/null @@ -1,19 +0,0 @@ -var mysql = require('..'); -var path = require('path'); - -var root = path.join(__dirname, '../'); -exports.dir = { - root : root, - lib : root + '/lib', - fixture : root + '/test/fixture', - tmp : root + '/test/tmp', -}; - -exports.port = 13532; - -exports.formidable = require('..'); -exports.assert = require('assert'); - -exports.require = function(lib) { - return require(exports.dir.lib + '/' + lib); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt deleted file mode 100644 index e7a4785..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/funkyfilename.txt +++ /dev/null @@ -1 +0,0 @@ -I am a text file with a funky name! diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt deleted file mode 100644 index 9b6903e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/file/plain.txt +++ /dev/null @@ -1 +0,0 @@ -I am a plain text file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md deleted file mode 100644 index 3c9dbe3..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md +++ /dev/null @@ -1,3 +0,0 @@ -* Opera does not allow submitting this file, it shows a warning to the - user that the file could not be found instead. Tested in 9.8, 11.51 on OSX. - Reported to Opera on 08.09.2011 (tracking email DSK-346009@bugs.opera.com). diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js deleted file mode 100644 index 0bae449..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/no-filename.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports['generic.http'] = [ - {type: 'file', name: 'upload', filename: '', fixture: 'plain.txt'}, -]; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js deleted file mode 100644 index eb76fdc..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/js/special-chars-in-filename.js +++ /dev/null @@ -1,21 +0,0 @@ -var properFilename = 'funkyfilename.txt'; - -function expect(filename) { - return [ - {type: 'field', name: 'title', value: 'Weird filename'}, - {type: 'file', name: 'upload', filename: filename, fixture: properFilename}, - ]; -}; - -var webkit = " ? % * | \" < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"; -var ffOrIe = " ? % * | \" < > . ☃ ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"; - -module.exports = { - 'osx-chrome-13.http' : expect(webkit), - 'osx-firefox-3.6.http' : expect(ffOrIe), - 'osx-safari-5.http' : expect(webkit), - 'xp-chrome-12.http' : expect(webkit), - 'xp-ie-7.http' : expect(ffOrIe), - 'xp-ie-8.http' : expect(ffOrIe), - 'xp-safari-5.http' : expect(webkit), -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multipart.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multipart.js deleted file mode 100644 index a476169..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/fixture/multipart.js +++ /dev/null @@ -1,72 +0,0 @@ -exports['rfc1867'] = - { boundary: 'AaB03x', - raw: - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="field1"\r\n'+ - '\r\n'+ - 'Joe Blow\r\nalmost tricked you!\r\n'+ - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="pics"; filename="file1.txt"\r\n'+ - 'Content-Type: text/plain\r\n'+ - '\r\n'+ - '... contents of file1.txt ...\r\r\n'+ - '--AaB03x--\r\n', - parts: - [ { headers: { - 'content-disposition': 'form-data; name="field1"', - }, - data: 'Joe Blow\r\nalmost tricked you!', - }, - { headers: { - 'content-disposition': 'form-data; name="pics"; filename="file1.txt"', - 'Content-Type': 'text/plain', - }, - data: '... contents of file1.txt ...\r', - } - ] - }; - -exports['noTrailing\r\n'] = - { boundary: 'AaB03x', - raw: - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="field1"\r\n'+ - '\r\n'+ - 'Joe Blow\r\nalmost tricked you!\r\n'+ - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="pics"; filename="file1.txt"\r\n'+ - 'Content-Type: text/plain\r\n'+ - '\r\n'+ - '... contents of file1.txt ...\r\r\n'+ - '--AaB03x--', - parts: - [ { headers: { - 'content-disposition': 'form-data; name="field1"', - }, - data: 'Joe Blow\r\nalmost tricked you!', - }, - { headers: { - 'content-disposition': 'form-data; name="pics"; filename="file1.txt"', - 'Content-Type': 'text/plain', - }, - data: '... contents of file1.txt ...\r', - } - ] - }; - -exports['emptyHeader'] = - { boundary: 'AaB03x', - raw: - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="field1"\r\n'+ - ': foo\r\n'+ - '\r\n'+ - 'Joe Blow\r\nalmost tricked you!\r\n'+ - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="pics"; filename="file1.txt"\r\n'+ - 'Content-Type: text/plain\r\n'+ - '\r\n'+ - '... contents of file1.txt ...\r\r\n'+ - '--AaB03x--\r\n', - expectError: true, - }; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-fixtures.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-fixtures.js deleted file mode 100644 index 66ad259..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/integration/test-fixtures.js +++ /dev/null @@ -1,89 +0,0 @@ -var hashish = require('hashish'); -var fs = require('fs'); -var findit = require('findit'); -var path = require('path'); -var http = require('http'); -var net = require('net'); -var assert = require('assert'); - -var common = require('../common'); -var formidable = common.formidable; - -var server = http.createServer(); -server.listen(common.port, findFixtures); - -function findFixtures() { - var fixtures = []; - findit - .sync(common.dir.fixture + '/js') - .forEach(function(jsPath) { - if (!/\.js$/.test(jsPath)) return; - - var group = path.basename(jsPath, '.js'); - hashish.forEach(require(jsPath), function(fixture, name) { - fixtures.push({ - name : group + '/' + name, - fixture : fixture, - }); - }); - }); - - testNext(fixtures); -} - -function testNext(fixtures) { - var fixture = fixtures.shift(); - if (!fixture) return server.close(); - - var name = fixture.name; - var fixture = fixture.fixture; - - uploadFixture(name, function(err, parts) { - if (err) throw err; - - fixture.forEach(function(expectedPart, i) { - var parsedPart = parts[i]; - assert.equal(parsedPart.type, expectedPart.type); - assert.equal(parsedPart.name, expectedPart.name); - - if (parsedPart.type === 'file') { - var filename = parsedPart.value.name; - assert.equal(filename, expectedPart.filename); - } - }); - - testNext(fixtures); - }); -}; - -function uploadFixture(name, cb) { - server.once('request', function(req, res) { - var form = new formidable.IncomingForm(); - form.uploadDir = common.dir.tmp; - form.parse(req); - - function callback() { - var realCallback = cb; - cb = function() {}; - realCallback.apply(null, arguments); - } - - var parts = []; - form - .on('error', callback) - .on('fileBegin', function(name, value) { - parts.push({type: 'file', name: name, value: value}); - }) - .on('field', function(name, value) { - parts.push({type: 'field', name: name, value: value}); - }) - .on('end', function() { - callback(null, parts); - }); - }); - - var socket = net.createConnection(common.port); - var file = fs.createReadStream(common.dir.fixture + '/http/' + name); - - file.pipe(socket); -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js deleted file mode 100644 index 2b98598..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/common.js +++ /dev/null @@ -1,24 +0,0 @@ -var path = require('path'), - fs = require('fs'); - -try { - global.Gently = require('gently'); -} catch (e) { - throw new Error('this test suite requires node-gently'); -} - -exports.lib = path.join(__dirname, '../../lib'); - -global.GENTLY = new Gently(); - -global.assert = require('assert'); -global.TEST_PORT = 13532; -global.TEST_FIXTURES = path.join(__dirname, '../fixture'); -global.TEST_TMP = path.join(__dirname, '../tmp'); - -// Stupid new feature in node that complains about gently attaching too many -// listeners to process 'exit'. This is a workaround until I can think of a -// better way to deal with this. -if (process.setMaxListeners) { - process.setMaxListeners(10000); -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/integration/test-multipart-parser.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/integration/test-multipart-parser.js deleted file mode 100644 index 75232aa..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/integration/test-multipart-parser.js +++ /dev/null @@ -1,80 +0,0 @@ -var common = require('../common'); -var CHUNK_LENGTH = 10, - multipartParser = require(common.lib + '/multipart_parser'), - MultipartParser = multipartParser.MultipartParser, - parser = new MultipartParser(), - fixtures = require(TEST_FIXTURES + '/multipart'), - Buffer = require('buffer').Buffer; - -Object.keys(fixtures).forEach(function(name) { - var fixture = fixtures[name], - buffer = new Buffer(Buffer.byteLength(fixture.raw, 'binary')), - offset = 0, - chunk, - nparsed, - - parts = [], - part = null, - headerField, - headerValue, - endCalled = ''; - - parser.initWithBoundary(fixture.boundary); - parser.onPartBegin = function() { - part = {headers: {}, data: ''}; - parts.push(part); - headerField = ''; - headerValue = ''; - }; - - parser.onHeaderField = function(b, start, end) { - headerField += b.toString('ascii', start, end); - }; - - parser.onHeaderValue = function(b, start, end) { - headerValue += b.toString('ascii', start, end); - } - - parser.onHeaderEnd = function() { - part.headers[headerField] = headerValue; - headerField = ''; - headerValue = ''; - }; - - parser.onPartData = function(b, start, end) { - var str = b.toString('ascii', start, end); - part.data += b.slice(start, end); - } - - parser.onEnd = function() { - endCalled = true; - } - - buffer.write(fixture.raw, 'binary', 0); - - while (offset < buffer.length) { - if (offset + CHUNK_LENGTH < buffer.length) { - chunk = buffer.slice(offset, offset+CHUNK_LENGTH); - } else { - chunk = buffer.slice(offset, buffer.length); - } - offset = offset + CHUNK_LENGTH; - - nparsed = parser.write(chunk); - if (nparsed != chunk.length) { - if (fixture.expectError) { - return; - } - puts('-- ERROR --'); - p(chunk.toString('ascii')); - throw new Error(chunk.length+' bytes written, but only '+nparsed+' bytes parsed!'); - } - } - - if (fixture.expectError) { - throw new Error('expected parse error did not happen'); - } - - assert.ok(endCalled); - assert.deepEqual(parts, fixture.parts); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-file.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-file.js deleted file mode 100644 index 52ceedb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-file.js +++ /dev/null @@ -1,104 +0,0 @@ -var common = require('../common'); -var WriteStreamStub = GENTLY.stub('fs', 'WriteStream'); - -var File = require(common.lib + '/file'), - EventEmitter = require('events').EventEmitter, - file, - gently; - -function test(test) { - gently = new Gently(); - file = new File(); - test(); - gently.verify(test.name); -} - -test(function constructor() { - assert.ok(file instanceof EventEmitter); - assert.strictEqual(file.size, 0); - assert.strictEqual(file.path, null); - assert.strictEqual(file.name, null); - assert.strictEqual(file.type, null); - assert.strictEqual(file.lastModifiedDate, null); - - assert.strictEqual(file._writeStream, null); - - (function testSetProperties() { - var file2 = new File({foo: 'bar'}); - assert.equal(file2.foo, 'bar'); - })(); -}); - -test(function open() { - var WRITE_STREAM; - file.path = '/foo'; - - gently.expect(WriteStreamStub, 'new', function (path) { - WRITE_STREAM = this; - assert.strictEqual(path, file.path); - }); - - file.open(); - assert.strictEqual(file._writeStream, WRITE_STREAM); -}); - -test(function write() { - var BUFFER = {length: 10}, - CB_STUB, - CB = function() { - CB_STUB.apply(this, arguments); - }; - - file._writeStream = {}; - - gently.expect(file._writeStream, 'write', function (buffer, cb) { - assert.strictEqual(buffer, BUFFER); - - gently.expect(file, 'emit', function (event, bytesWritten) { - assert.ok(file.lastModifiedDate instanceof Date); - assert.equal(event, 'progress'); - assert.equal(bytesWritten, file.size); - }); - - CB_STUB = gently.expect(function writeCb() { - assert.equal(file.size, 10); - }); - - cb(); - - gently.expect(file, 'emit', function (event, bytesWritten) { - assert.equal(event, 'progress'); - assert.equal(bytesWritten, file.size); - }); - - CB_STUB = gently.expect(function writeCb() { - assert.equal(file.size, 20); - }); - - cb(); - }); - - file.write(BUFFER, CB); -}); - -test(function end() { - var CB_STUB, - CB = function() { - CB_STUB.apply(this, arguments); - }; - - file._writeStream = {}; - - gently.expect(file._writeStream, 'end', function (cb) { - gently.expect(file, 'emit', function (event) { - assert.equal(event, 'end'); - }); - - CB_STUB = gently.expect(function endCb() { - }); - - cb(); - }); - - file.end(CB); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js deleted file mode 100644 index 84de439..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-incoming-form.js +++ /dev/null @@ -1,727 +0,0 @@ -var common = require('../common'); -var MultipartParserStub = GENTLY.stub('./multipart_parser', 'MultipartParser'), - QuerystringParserStub = GENTLY.stub('./querystring_parser', 'QuerystringParser'), - EventEmitterStub = GENTLY.stub('events', 'EventEmitter'), - StreamStub = GENTLY.stub('stream', 'Stream'), - FileStub = GENTLY.stub('./file'); - -var formidable = require(common.lib + '/index'), - IncomingForm = formidable.IncomingForm, - events = require('events'), - fs = require('fs'), - path = require('path'), - Buffer = require('buffer').Buffer, - fixtures = require(TEST_FIXTURES + '/multipart'), - form, - gently; - -function test(test) { - gently = new Gently(); - gently.expect(EventEmitterStub, 'call'); - form = new IncomingForm(); - test(); - gently.verify(test.name); -} - -test(function constructor() { - assert.strictEqual(form.error, null); - assert.strictEqual(form.ended, false); - assert.strictEqual(form.type, null); - assert.strictEqual(form.headers, null); - assert.strictEqual(form.keepExtensions, false); - assert.strictEqual(form.uploadDir, '/tmp'); - assert.strictEqual(form.encoding, 'utf-8'); - assert.strictEqual(form.bytesReceived, null); - assert.strictEqual(form.bytesExpected, null); - assert.strictEqual(form.maxFieldsSize, 2 * 1024 * 1024); - assert.strictEqual(form._parser, null); - assert.strictEqual(form._flushing, 0); - assert.strictEqual(form._fieldsSize, 0); - assert.ok(form instanceof EventEmitterStub); - assert.equal(form.constructor.name, 'IncomingForm'); - - (function testSimpleConstructor() { - gently.expect(EventEmitterStub, 'call'); - var form = IncomingForm(); - assert.ok(form instanceof IncomingForm); - })(); - - (function testSimpleConstructorShortcut() { - gently.expect(EventEmitterStub, 'call'); - var form = formidable(); - assert.ok(form instanceof IncomingForm); - })(); -}); - -test(function parse() { - var REQ = {headers: {}} - , emit = {}; - - gently.expect(form, 'writeHeaders', function(headers) { - assert.strictEqual(headers, REQ.headers); - }); - - var events = ['error', 'aborted', 'data', 'end']; - gently.expect(REQ, 'on', events.length, function(event, fn) { - assert.equal(event, events.shift()); - emit[event] = fn; - return this; - }); - - form.parse(REQ); - - (function testPause() { - gently.expect(REQ, 'pause'); - assert.strictEqual(form.pause(), true); - })(); - - (function testPauseCriticalException() { - form.ended = false; - - var ERR = new Error('dasdsa'); - gently.expect(REQ, 'pause', function() { - throw ERR; - }); - - gently.expect(form, '_error', function(err) { - assert.strictEqual(err, ERR); - }); - - assert.strictEqual(form.pause(), false); - })(); - - (function testPauseHarmlessException() { - form.ended = true; - - var ERR = new Error('dasdsa'); - gently.expect(REQ, 'pause', function() { - throw ERR; - }); - - assert.strictEqual(form.pause(), false); - })(); - - (function testResume() { - gently.expect(REQ, 'resume'); - assert.strictEqual(form.resume(), true); - })(); - - (function testResumeCriticalException() { - form.ended = false; - - var ERR = new Error('dasdsa'); - gently.expect(REQ, 'resume', function() { - throw ERR; - }); - - gently.expect(form, '_error', function(err) { - assert.strictEqual(err, ERR); - }); - - assert.strictEqual(form.resume(), false); - })(); - - (function testResumeHarmlessException() { - form.ended = true; - - var ERR = new Error('dasdsa'); - gently.expect(REQ, 'resume', function() { - throw ERR; - }); - - assert.strictEqual(form.resume(), false); - })(); - - (function testEmitError() { - var ERR = new Error('something bad happened'); - gently.expect(form, '_error',function(err) { - assert.strictEqual(err, ERR); - }); - emit.error(ERR); - })(); - - (function testEmitAborted() { - gently.expect(form, 'emit',function(event) { - assert.equal(event, 'aborted'); - }); - - emit.aborted(); - })(); - - - (function testEmitData() { - var BUFFER = [1, 2, 3]; - gently.expect(form, 'write', function(buffer) { - assert.strictEqual(buffer, BUFFER); - }); - emit.data(BUFFER); - })(); - - (function testEmitEnd() { - form._parser = {}; - - (function testWithError() { - var ERR = new Error('haha'); - gently.expect(form._parser, 'end', function() { - return ERR; - }); - - gently.expect(form, '_error', function(err) { - assert.strictEqual(err, ERR); - }); - - emit.end(); - })(); - - (function testWithoutError() { - gently.expect(form._parser, 'end'); - emit.end(); - })(); - - (function testAfterError() { - form.error = true; - emit.end(); - })(); - })(); - - (function testWithCallback() { - gently.expect(EventEmitterStub, 'call'); - var form = new IncomingForm(), - REQ = {headers: {}}, - parseCalled = 0; - - gently.expect(form, 'writeHeaders'); - gently.expect(REQ, 'on', 4, function() { - return this; - }); - - gently.expect(form, 'on', 4, function(event, fn) { - if (event == 'field') { - fn('field1', 'foo'); - fn('field1', 'bar'); - fn('field2', 'nice'); - } - - if (event == 'file') { - fn('file1', '1'); - fn('file1', '2'); - fn('file2', '3'); - } - - if (event == 'end') { - fn(); - } - return this; - }); - - form.parse(REQ, gently.expect(function parseCbOk(err, fields, files) { - assert.deepEqual(fields, {field1: 'bar', field2: 'nice'}); - assert.deepEqual(files, {file1: '2', file2: '3'}); - })); - - gently.expect(form, 'writeHeaders'); - gently.expect(REQ, 'on', 4, function() { - return this; - }); - - var ERR = new Error('test'); - gently.expect(form, 'on', 3, function(event, fn) { - if (event == 'field') { - fn('foo', 'bar'); - } - - if (event == 'error') { - fn(ERR); - gently.expect(form, 'on'); - } - return this; - }); - - form.parse(REQ, gently.expect(function parseCbErr(err, fields, files) { - assert.strictEqual(err, ERR); - assert.deepEqual(fields, {foo: 'bar'}); - })); - })(); -}); - -test(function pause() { - assert.strictEqual(form.pause(), false); -}); - -test(function resume() { - assert.strictEqual(form.resume(), false); -}); - - -test(function writeHeaders() { - var HEADERS = {}; - gently.expect(form, '_parseContentLength'); - gently.expect(form, '_parseContentType'); - - form.writeHeaders(HEADERS); - assert.strictEqual(form.headers, HEADERS); -}); - -test(function write() { - var parser = {}, - BUFFER = [1, 2, 3]; - - form._parser = parser; - form.bytesExpected = 523423; - - (function testBasic() { - gently.expect(form, 'emit', function(event, bytesReceived, bytesExpected) { - assert.equal(event, 'progress'); - assert.equal(bytesReceived, BUFFER.length); - assert.equal(bytesExpected, form.bytesExpected); - }); - - gently.expect(parser, 'write', function(buffer) { - assert.strictEqual(buffer, BUFFER); - return buffer.length; - }); - - assert.equal(form.write(BUFFER), BUFFER.length); - assert.equal(form.bytesReceived, BUFFER.length); - })(); - - (function testParserError() { - gently.expect(form, 'emit'); - - gently.expect(parser, 'write', function(buffer) { - assert.strictEqual(buffer, BUFFER); - return buffer.length - 1; - }); - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/parser error/i)); - }); - - assert.equal(form.write(BUFFER), BUFFER.length - 1); - assert.equal(form.bytesReceived, BUFFER.length + BUFFER.length); - })(); - - (function testUninitialized() { - delete form._parser; - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/unintialized parser/i)); - }); - form.write(BUFFER); - })(); -}); - -test(function parseContentType() { - var HEADERS = {}; - - form.headers = {'content-type': 'application/x-www-form-urlencoded'}; - gently.expect(form, '_initUrlencoded'); - form._parseContentType(); - - // accept anything that has 'urlencoded' in it - form.headers = {'content-type': 'broken-client/urlencoded-stupid'}; - gently.expect(form, '_initUrlencoded'); - form._parseContentType(); - - var BOUNDARY = '---------------------------57814261102167618332366269'; - form.headers = {'content-type': 'multipart/form-data; boundary='+BOUNDARY}; - - gently.expect(form, '_initMultipart', function(boundary) { - assert.equal(boundary, BOUNDARY); - }); - form._parseContentType(); - - (function testQuotedBoundary() { - form.headers = {'content-type': 'multipart/form-data; boundary="' + BOUNDARY + '"'}; - - gently.expect(form, '_initMultipart', function(boundary) { - assert.equal(boundary, BOUNDARY); - }); - form._parseContentType(); - })(); - - (function testNoBoundary() { - form.headers = {'content-type': 'multipart/form-data'}; - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/no multipart boundary/i)); - }); - form._parseContentType(); - })(); - - (function testNoContentType() { - form.headers = {}; - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/no content-type/i)); - }); - form._parseContentType(); - })(); - - (function testUnknownContentType() { - form.headers = {'content-type': 'invalid'}; - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/unknown content-type/i)); - }); - form._parseContentType(); - })(); -}); - -test(function parseContentLength() { - var HEADERS = {}; - - form.headers = {}; - form._parseContentLength(); - assert.strictEqual(form.bytesReceived, null); - assert.strictEqual(form.bytesExpected, null); - - form.headers['content-length'] = '8'; - gently.expect(form, 'emit', function(event, bytesReceived, bytesExpected) { - assert.equal(event, 'progress'); - assert.equal(bytesReceived, 0); - assert.equal(bytesExpected, 8); - }); - form._parseContentLength(); - assert.strictEqual(form.bytesReceived, 0); - assert.strictEqual(form.bytesExpected, 8); - - // JS can be evil, lets make sure we are not - form.headers['content-length'] = '08'; - gently.expect(form, 'emit', function(event, bytesReceived, bytesExpected) { - assert.equal(event, 'progress'); - assert.equal(bytesReceived, 0); - assert.equal(bytesExpected, 8); - }); - form._parseContentLength(); - assert.strictEqual(form.bytesExpected, 8); -}); - -test(function _initMultipart() { - var BOUNDARY = '123', - PARSER; - - gently.expect(MultipartParserStub, 'new', function() { - PARSER = this; - }); - - gently.expect(MultipartParserStub.prototype, 'initWithBoundary', function(boundary) { - assert.equal(boundary, BOUNDARY); - }); - - form._initMultipart(BOUNDARY); - assert.equal(form.type, 'multipart'); - assert.strictEqual(form._parser, PARSER); - - (function testRegularField() { - var PART; - gently.expect(StreamStub, 'new', function() { - PART = this; - }); - - gently.expect(form, 'onPart', function(part) { - assert.strictEqual(part, PART); - assert.deepEqual - ( part.headers - , { 'content-disposition': 'form-data; name="field1"' - , 'foo': 'bar' - } - ); - assert.equal(part.name, 'field1'); - - var strings = ['hello', ' world']; - gently.expect(part, 'emit', 2, function(event, b) { - assert.equal(event, 'data'); - assert.equal(b.toString(), strings.shift()); - }); - - gently.expect(part, 'emit', function(event, b) { - assert.equal(event, 'end'); - }); - }); - - PARSER.onPartBegin(); - PARSER.onHeaderField(new Buffer('content-disposition'), 0, 10); - PARSER.onHeaderField(new Buffer('content-disposition'), 10, 19); - PARSER.onHeaderValue(new Buffer('form-data; name="field1"'), 0, 14); - PARSER.onHeaderValue(new Buffer('form-data; name="field1"'), 14, 24); - PARSER.onHeaderEnd(); - PARSER.onHeaderField(new Buffer('foo'), 0, 3); - PARSER.onHeaderValue(new Buffer('bar'), 0, 3); - PARSER.onHeaderEnd(); - PARSER.onHeadersEnd(); - PARSER.onPartData(new Buffer('hello world'), 0, 5); - PARSER.onPartData(new Buffer('hello world'), 5, 11); - PARSER.onPartEnd(); - })(); - - (function testFileField() { - var PART; - gently.expect(StreamStub, 'new', function() { - PART = this; - }); - - gently.expect(form, 'onPart', function(part) { - assert.deepEqual - ( part.headers - , { 'content-disposition': 'form-data; name="field2"; filename="C:\\Documents and Settings\\IE\\Must\\Die\\Sun"et.jpg"' - , 'content-type': 'text/plain' - } - ); - assert.equal(part.name, 'field2'); - assert.equal(part.filename, 'Sun"et.jpg'); - assert.equal(part.mime, 'text/plain'); - - gently.expect(part, 'emit', function(event, b) { - assert.equal(event, 'data'); - assert.equal(b.toString(), '... contents of file1.txt ...'); - }); - - gently.expect(part, 'emit', function(event, b) { - assert.equal(event, 'end'); - }); - }); - - PARSER.onPartBegin(); - PARSER.onHeaderField(new Buffer('content-disposition'), 0, 19); - PARSER.onHeaderValue(new Buffer('form-data; name="field2"; filename="C:\\Documents and Settings\\IE\\Must\\Die\\Sun"et.jpg"'), 0, 85); - PARSER.onHeaderEnd(); - PARSER.onHeaderField(new Buffer('Content-Type'), 0, 12); - PARSER.onHeaderValue(new Buffer('text/plain'), 0, 10); - PARSER.onHeaderEnd(); - PARSER.onHeadersEnd(); - PARSER.onPartData(new Buffer('... contents of file1.txt ...'), 0, 29); - PARSER.onPartEnd(); - })(); - - (function testEnd() { - gently.expect(form, '_maybeEnd'); - PARSER.onEnd(); - assert.ok(form.ended); - })(); -}); - -test(function _fileName() { - // TODO - return; -}); - -test(function _initUrlencoded() { - var PARSER; - - gently.expect(QuerystringParserStub, 'new', function() { - PARSER = this; - }); - - form._initUrlencoded(); - assert.equal(form.type, 'urlencoded'); - assert.strictEqual(form._parser, PARSER); - - (function testOnField() { - var KEY = 'KEY', VAL = 'VAL'; - gently.expect(form, 'emit', function(field, key, val) { - assert.equal(field, 'field'); - assert.equal(key, KEY); - assert.equal(val, VAL); - }); - - PARSER.onField(KEY, VAL); - })(); - - (function testOnEnd() { - gently.expect(form, '_maybeEnd'); - - PARSER.onEnd(); - assert.equal(form.ended, true); - })(); -}); - -test(function _error() { - var ERR = new Error('bla'); - - gently.expect(form, 'pause'); - gently.expect(form, 'emit', function(event, err) { - assert.equal(event, 'error'); - assert.strictEqual(err, ERR); - }); - - form._error(ERR); - assert.strictEqual(form.error, ERR); - - // make sure _error only does its thing once - form._error(ERR); -}); - -test(function onPart() { - var PART = {}; - gently.expect(form, 'handlePart', function(part) { - assert.strictEqual(part, PART); - }); - - form.onPart(PART); -}); - -test(function handlePart() { - (function testUtf8Field() { - var PART = new events.EventEmitter(); - PART.name = 'my_field'; - - gently.expect(form, 'emit', function(event, field, value) { - assert.equal(event, 'field'); - assert.equal(field, 'my_field'); - assert.equal(value, 'hello world: €'); - }); - - form.handlePart(PART); - PART.emit('data', new Buffer('hello')); - PART.emit('data', new Buffer(' world: ')); - PART.emit('data', new Buffer([0xE2])); - PART.emit('data', new Buffer([0x82, 0xAC])); - PART.emit('end'); - })(); - - (function testBinaryField() { - var PART = new events.EventEmitter(); - PART.name = 'my_field2'; - - gently.expect(form, 'emit', function(event, field, value) { - assert.equal(event, 'field'); - assert.equal(field, 'my_field2'); - assert.equal(value, 'hello world: '+new Buffer([0xE2, 0x82, 0xAC]).toString('binary')); - }); - - form.encoding = 'binary'; - form.handlePart(PART); - PART.emit('data', new Buffer('hello')); - PART.emit('data', new Buffer(' world: ')); - PART.emit('data', new Buffer([0xE2])); - PART.emit('data', new Buffer([0x82, 0xAC])); - PART.emit('end'); - })(); - - (function testFieldSize() { - form.maxFieldsSize = 8; - var PART = new events.EventEmitter(); - PART.name = 'my_field'; - - gently.expect(form, '_error', function(err) { - assert.equal(err.message, 'maxFieldsSize exceeded, received 9 bytes of field data'); - }); - - form.handlePart(PART); - form._fieldsSize = 1; - PART.emit('data', new Buffer(7)); - PART.emit('data', new Buffer(1)); - })(); - - (function testFilePart() { - var PART = new events.EventEmitter(), - FILE = new events.EventEmitter(), - PATH = '/foo/bar'; - - PART.name = 'my_file'; - PART.filename = 'sweet.txt'; - PART.mime = 'sweet.txt'; - - gently.expect(form, '_uploadPath', function(filename) { - assert.equal(filename, PART.filename); - return PATH; - }); - - gently.expect(FileStub, 'new', function(properties) { - assert.equal(properties.path, PATH); - assert.equal(properties.name, PART.filename); - assert.equal(properties.type, PART.mime); - FILE = this; - - gently.expect(form, 'emit', function (event, field, file) { - assert.equal(event, 'fileBegin'); - assert.strictEqual(field, PART.name); - assert.strictEqual(file, FILE); - }); - - gently.expect(FILE, 'open'); - }); - - form.handlePart(PART); - assert.equal(form._flushing, 1); - - var BUFFER; - gently.expect(form, 'pause'); - gently.expect(FILE, 'write', function(buffer, cb) { - assert.strictEqual(buffer, BUFFER); - gently.expect(form, 'resume'); - // @todo handle cb(new Err) - cb(); - }); - - PART.emit('data', BUFFER = new Buffer('test')); - - gently.expect(FILE, 'end', function(cb) { - gently.expect(form, 'emit', function(event, field, file) { - assert.equal(event, 'file'); - assert.strictEqual(file, FILE); - }); - - gently.expect(form, '_maybeEnd'); - - cb(); - assert.equal(form._flushing, 0); - }); - - PART.emit('end'); - })(); -}); - -test(function _uploadPath() { - (function testUniqueId() { - var UUID_A, UUID_B; - gently.expect(GENTLY.hijacked.path, 'join', function(uploadDir, uuid) { - assert.equal(uploadDir, form.uploadDir); - UUID_A = uuid; - }); - form._uploadPath(); - - gently.expect(GENTLY.hijacked.path, 'join', function(uploadDir, uuid) { - UUID_B = uuid; - }); - form._uploadPath(); - - assert.notEqual(UUID_A, UUID_B); - })(); - - (function testFileExtension() { - form.keepExtensions = true; - var FILENAME = 'foo.jpg', - EXT = '.bar'; - - gently.expect(GENTLY.hijacked.path, 'extname', function(filename) { - assert.equal(filename, FILENAME); - gently.restore(path, 'extname'); - - return EXT; - }); - - gently.expect(GENTLY.hijacked.path, 'join', function(uploadDir, name) { - assert.equal(path.extname(name), EXT); - }); - form._uploadPath(FILENAME); - })(); -}); - -test(function _maybeEnd() { - gently.expect(form, 'emit', 0); - form._maybeEnd(); - - form.ended = true; - form._flushing = 1; - form._maybeEnd(); - - gently.expect(form, 'emit', function(event) { - assert.equal(event, 'end'); - }); - - form.ended = true; - form._flushing = 0; - form._maybeEnd(); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js deleted file mode 100644 index d8dc968..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +++ /dev/null @@ -1,50 +0,0 @@ -var common = require('../common'); -var multipartParser = require(common.lib + '/multipart_parser'), - MultipartParser = multipartParser.MultipartParser, - events = require('events'), - Buffer = require('buffer').Buffer, - parser; - -function test(test) { - parser = new MultipartParser(); - test(); -} - -test(function constructor() { - assert.equal(parser.boundary, null); - assert.equal(parser.state, 0); - assert.equal(parser.flags, 0); - assert.equal(parser.boundaryChars, null); - assert.equal(parser.index, null); - assert.equal(parser.lookbehind, null); - assert.equal(parser.constructor.name, 'MultipartParser'); -}); - -test(function initWithBoundary() { - var boundary = 'abc'; - parser.initWithBoundary(boundary); - assert.deepEqual(Array.prototype.slice.call(parser.boundary), [13, 10, 45, 45, 97, 98, 99]); - assert.equal(parser.state, multipartParser.START); - - assert.deepEqual(parser.boundaryChars, {10: true, 13: true, 45: true, 97: true, 98: true, 99: true}); -}); - -test(function parserError() { - var boundary = 'abc', - buffer = new Buffer(5); - - parser.initWithBoundary(boundary); - buffer.write('--ad', 'ascii', 0); - assert.equal(parser.write(buffer), 3); -}); - -test(function end() { - (function testError() { - assert.equal(parser.end().message, 'MultipartParser.end(): stream ended unexpectedly: ' + parser.explain()); - })(); - - (function testRegular() { - parser.state = multipartParser.END; - assert.strictEqual(parser.end(), undefined); - })(); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js deleted file mode 100644 index 54d3e2d..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/simple/test-querystring-parser.js +++ /dev/null @@ -1,45 +0,0 @@ -var common = require('../common'); -var QuerystringParser = require(common.lib + '/querystring_parser').QuerystringParser, - Buffer = require('buffer').Buffer, - gently, - parser; - -function test(test) { - gently = new Gently(); - parser = new QuerystringParser(); - test(); - gently.verify(test.name); -} - -test(function constructor() { - assert.equal(parser.buffer, ''); - assert.equal(parser.constructor.name, 'QuerystringParser'); -}); - -test(function write() { - var a = new Buffer('a=1'); - assert.equal(parser.write(a), a.length); - - var b = new Buffer('&b=2'); - parser.write(b); - assert.equal(parser.buffer, a + b); -}); - -test(function end() { - var FIELDS = {a: ['b', {c: 'd'}], e: 'f'}; - - gently.expect(GENTLY.hijacked.querystring, 'parse', function(str) { - assert.equal(str, parser.buffer); - return FIELDS; - }); - - gently.expect(parser, 'onField', Object.keys(FIELDS).length, function(key, val) { - assert.deepEqual(FIELDS[key], val); - }); - - gently.expect(parser, 'onEnd'); - - parser.buffer = 'my buffer'; - parser.end(); - assert.equal(parser.buffer, ''); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js deleted file mode 100644 index 479e46d..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/legacy/system/test-multi-video-upload.js +++ /dev/null @@ -1,75 +0,0 @@ -var common = require('../common'); -var BOUNDARY = '---------------------------10102754414578508781458777923', - FIXTURE = TEST_FIXTURES+'/multi_video.upload', - fs = require('fs'), - util = require(common.lib + '/util'), - http = require('http'), - formidable = require(common.lib + '/index'), - server = http.createServer(); - -server.on('request', function(req, res) { - var form = new formidable.IncomingForm(), - uploads = {}; - - form.uploadDir = TEST_TMP; - form.hash = 'sha1'; - form.parse(req); - - form - .on('fileBegin', function(field, file) { - assert.equal(field, 'upload'); - - var tracker = {file: file, progress: [], ended: false}; - uploads[file.filename] = tracker; - file - .on('progress', function(bytesReceived) { - tracker.progress.push(bytesReceived); - assert.equal(bytesReceived, file.length); - }) - .on('end', function() { - tracker.ended = true; - }); - }) - .on('field', function(field, value) { - assert.equal(field, 'title'); - assert.equal(value, ''); - }) - .on('file', function(field, file) { - assert.equal(field, 'upload'); - assert.strictEqual(uploads[file.filename].file, file); - }) - .on('end', function() { - assert.ok(uploads['shortest_video.flv']); - assert.ok(uploads['shortest_video.flv'].ended); - assert.ok(uploads['shortest_video.flv'].progress.length > 3); - assert.equal(uploads['shortest_video.flv'].file.hash, 'd6a17616c7143d1b1438ceeef6836d1a09186b3a'); - assert.equal(uploads['shortest_video.flv'].progress.slice(-1), uploads['shortest_video.flv'].file.length); - assert.ok(uploads['shortest_video.mp4']); - assert.ok(uploads['shortest_video.mp4'].ended); - assert.ok(uploads['shortest_video.mp4'].progress.length > 3); - assert.equal(uploads['shortest_video.mp4'].file.hash, '937dfd4db263f4887ceae19341dcc8d63bcd557f'); - - server.close(); - res.writeHead(200); - res.end('good'); - }); -}); - -server.listen(TEST_PORT, function() { - var client = http.createClient(TEST_PORT), - stat = fs.statSync(FIXTURE), - headers = { - 'content-type': 'multipart/form-data; boundary='+BOUNDARY, - 'content-length': stat.size, - } - request = client.request('POST', '/', headers), - fixture = new fs.ReadStream(FIXTURE); - - fixture - .on('data', function(b) { - request.write(b); - }) - .on('end', function() { - request.end(); - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/run.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/run.js deleted file mode 100755 index 50b2361..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/run.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -require('urun')(__dirname) diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js deleted file mode 100644 index fe2ac1c..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/test/unit/test-incoming-form.js +++ /dev/null @@ -1,63 +0,0 @@ -var common = require('../common'); -var test = require('utest'); -var assert = common.assert; -var IncomingForm = common.require('incoming_form').IncomingForm; -var path = require('path'); - -var form; -test('IncomingForm', { - before: function() { - form = new IncomingForm(); - }, - - '#_fileName with regular characters': function() { - var filename = 'foo.txt'; - assert.equal(form._fileName(makeHeader(filename)), 'foo.txt'); - }, - - '#_fileName with unescaped quote': function() { - var filename = 'my".txt'; - assert.equal(form._fileName(makeHeader(filename)), 'my".txt'); - }, - - '#_fileName with escaped quote': function() { - var filename = 'my%22.txt'; - assert.equal(form._fileName(makeHeader(filename)), 'my".txt'); - }, - - '#_fileName with bad quote and additional sub-header': function() { - var filename = 'my".txt'; - var header = makeHeader(filename) + '; foo="bar"'; - assert.equal(form._fileName(header), filename); - }, - - '#_fileName with semicolon': function() { - var filename = 'my;.txt'; - assert.equal(form._fileName(makeHeader(filename)), 'my;.txt'); - }, - - '#_fileName with utf8 character': function() { - var filename = 'my☃.txt'; - assert.equal(form._fileName(makeHeader(filename)), 'my☃.txt'); - }, - - '#_uploadPath strips harmful characters from extension when keepExtensions': function() { - form.keepExtensions = true; - - var ext = path.extname(form._uploadPath('fine.jpg?foo=bar')); - assert.equal(ext, '.jpg'); - - var ext = path.extname(form._uploadPath('fine?foo=bar')); - assert.equal(ext, ''); - - var ext = path.extname(form._uploadPath('super.cr2+dsad')); - assert.equal(ext, '.cr2'); - - var ext = path.extname(form._uploadPath('super.bar')); - assert.equal(ext, '.bar'); - }, -}); - -function makeHeader(filename) { - return 'Content-Disposition: form-data; name="upload"; filename="' + filename + '"'; -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js deleted file mode 100644 index 9f1cef8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/formidable/tool/record.js +++ /dev/null @@ -1,47 +0,0 @@ -var http = require('http'); -var fs = require('fs'); -var connections = 0; - -var server = http.createServer(function(req, res) { - var socket = req.socket; - console.log('Request: %s %s -> %s', req.method, req.url, socket.filename); - - req.on('end', function() { - if (req.url !== '/') { - res.end(JSON.stringify({ - method: req.method, - url: req.url, - filename: socket.filename, - })); - return; - } - - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - }); -}); - -server.on('connection', function(socket) { - connections++; - - socket.id = connections; - socket.filename = 'connection-' + socket.id + '.http'; - socket.file = fs.createWriteStream(socket.filename); - socket.pipe(socket.file); - - console.log('--> %s', socket.filename); - socket.on('close', function() { - console.log('<-- %s', socket.filename); - }); -}); - -var port = process.env.PORT || 8080; -server.listen(port, function() { - console.log('Recording connections on port %s', port); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/.npmignore deleted file mode 100644 index f1250e5..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/History.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/History.md deleted file mode 100644 index c8aa68f..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/History.md +++ /dev/null @@ -1,5 +0,0 @@ - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/Makefile b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/Makefile deleted file mode 100644 index 4e9c8d3..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --require should \ - --reporter spec - -.PHONY: test \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/Readme.md deleted file mode 100644 index 1cdd68a..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/Readme.md +++ /dev/null @@ -1,29 +0,0 @@ - -# pause - - Pause streams... - -## License - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/index.js deleted file mode 100644 index 1b7b379..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/index.js +++ /dev/null @@ -1,29 +0,0 @@ - -module.exports = function(obj){ - var onData - , onEnd - , events = []; - - // buffer data - obj.on('data', onData = function(data, encoding){ - events.push(['data', data, encoding]); - }); - - // buffer end - obj.on('end', onEnd = function(data, encoding){ - events.push(['end', data, encoding]); - }); - - return { - end: function(){ - obj.removeListener('data', onData); - obj.removeListener('end', onEnd); - }, - resume: function(){ - this.end(); - for (var i = 0, len = events.length; i < len; ++i) { - obj.emit.apply(obj, events[i]); - } - } - }; -}; \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/package.json deleted file mode 100644 index 73cfe40..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/pause/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "pause", - "version": "0.0.1", - "description": "Pause streams...", - "keywords": [], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "main": "index", - "readme": "\n# pause\n\n Pause streams...\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "_id": "pause@0.0.1", - "_from": "pause@0.0.1" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/.gitmodules b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/.gitmodules deleted file mode 100644 index 49e31da..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "support/expresso"] - path = support/expresso - url = git://github.com/visionmedia/expresso.git -[submodule "support/should"] - path = support/should - url = git://github.com/visionmedia/should.js.git diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/.npmignore deleted file mode 100644 index 3c3629e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/.travis.yml b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/.travis.yml deleted file mode 100644 index 2c0a8f6..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.4 \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/History.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/History.md deleted file mode 100644 index 1feef45..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/History.md +++ /dev/null @@ -1,83 +0,0 @@ - -0.5.1 / 2012-09-18 -================== - - * fix encoded `=`. Closes #43 - -0.5.0 / 2012-05-04 -================== - - * Added component support - -0.4.2 / 2012-02-08 -================== - - * Fixed: ensure objects are created when appropriate not arrays [aheckmann] - -0.4.1 / 2012-01-26 -================== - - * Fixed stringify()ing numbers. Closes #23 - -0.4.0 / 2011-11-21 -================== - - * Allow parsing of an existing object (for `bodyParser()`) [jackyz] - * Replaced expresso with mocha - -0.3.2 / 2011-11-08 -================== - - * Fixed global variable leak - -0.3.1 / 2011-08-17 -================== - - * Added `try/catch` around malformed uri components - * Add test coverage for Array native method bleed-though - -0.3.0 / 2011-07-19 -================== - - * Allow `array[index]` and `object[property]` syntaxes [Aria Stewart] - -0.2.0 / 2011-06-29 -================== - - * Added `qs.stringify()` [Cory Forsyth] - -0.1.0 / 2011-04-13 -================== - - * Added jQuery-ish array support - -0.0.7 / 2011-03-13 -================== - - * Fixed; handle empty string and `== null` in `qs.parse()` [dmit] - allows for convenient `qs.parse(url.parse(str).query)` - -0.0.6 / 2011-02-14 -================== - - * Fixed; support for implicit arrays - -0.0.4 / 2011-02-09 -================== - - * Fixed `+` as a space - -0.0.3 / 2011-02-08 -================== - - * Fixed case when right-hand value contains "]" - -0.0.2 / 2011-02-07 -================== - - * Fixed "=" presence in key - -0.0.1 / 2011-02-07 -================== - - * Initial release \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/Makefile b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/Makefile deleted file mode 100644 index 0a21cf7..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/Makefile +++ /dev/null @@ -1,12 +0,0 @@ - -test/browser/qs.js: querystring.js - component build package.json test/browser/qs - -querystring.js: lib/head.js lib/querystring.js lib/tail.js - cat $^ > $@ - -test: - @./node_modules/.bin/mocha \ - --ui bdd - -.PHONY: test \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/Readme.md deleted file mode 100644 index 27e54a4..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/Readme.md +++ /dev/null @@ -1,58 +0,0 @@ -# node-querystring - - query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others. - -## Installation - - $ npm install qs - -## Examples - -```js -var qs = require('qs'); - -qs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com'); -// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } } - -qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}) -// => user[name]=Tobi&user[email]=tobi%40learnboost.com -``` - -## Testing - -Install dev dependencies: - - $ npm install -d - -and execute: - - $ make test - -browser: - - $ open test/browser/index.html - -## License - -(The MIT License) - -Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/benchmark.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/benchmark.js deleted file mode 100644 index 97e2c93..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/benchmark.js +++ /dev/null @@ -1,17 +0,0 @@ - -var qs = require('./'); - -var times = 100000 - , start = new Date - , n = times; - -console.log('times: %d', times); - -while (n--) qs.parse('foo=bar'); -console.log('simple: %dms', new Date - start); - -var start = new Date - , n = times; - -while (n--) qs.parse('user[name][first]=tj&user[name][last]=holowaychuk'); -console.log('nested: %dms', new Date - start); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/component.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/component.json deleted file mode 100644 index ba34ead..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/component.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "querystring", - "description": "Querystring parser / stringifier with nesting support", - "keywords": ["querystring", "query", "parser"], - "main": "lib/querystring.js" -} \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/examples.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/examples.js deleted file mode 100644 index 27617b7..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/examples.js +++ /dev/null @@ -1,51 +0,0 @@ - -/** - * Module dependencies. - */ - -var qs = require('./'); - -var obj = qs.parse('foo'); -console.log(obj) - -var obj = qs.parse('foo=bar=baz'); -console.log(obj) - -var obj = qs.parse('users[]'); -console.log(obj) - -var obj = qs.parse('name=tj&email=tj@vision-media.ca'); -console.log(obj) - -var obj = qs.parse('users[]=tj&users[]=tobi&users[]=jane'); -console.log(obj) - -var obj = qs.parse('user[name][first]=tj&user[name][last]=holowaychuk'); -console.log(obj) - -var obj = qs.parse('users[][name][first]=tj&users[][name][last]=holowaychuk'); -console.log(obj) - -var obj = qs.parse('a=a&a=b&a=c'); -console.log(obj) - -var obj = qs.parse('user[tj]=tj&user[tj]=TJ'); -console.log(obj) - -var obj = qs.parse('user[names]=tj&user[names]=TJ&user[names]=Tyler'); -console.log(obj) - -var obj = qs.parse('user[name][first]=tj&user[name][first]=TJ'); -console.log(obj) - -var obj = qs.parse('user[0]=tj&user[1]=TJ'); -console.log(obj) - -var obj = qs.parse('user[0]=tj&user[]=TJ'); -console.log(obj) - -var obj = qs.parse('user[0]=tj&user[foo]=TJ'); -console.log(obj) - -var str = qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}); -console.log(str); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/index.js deleted file mode 100644 index d177d20..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -module.exports = require('./lib/querystring'); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/lib/head.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/lib/head.js deleted file mode 100644 index 55d3817..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/lib/head.js +++ /dev/null @@ -1 +0,0 @@ -;(function(){ diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js deleted file mode 100644 index d3689bb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/lib/querystring.js +++ /dev/null @@ -1,262 +0,0 @@ - -/** - * Object#toString() ref for stringify(). - */ - -var toString = Object.prototype.toString; - -/** - * Cache non-integer test regexp. - */ - -var isint = /^[0-9]+$/; - -function promote(parent, key) { - if (parent[key].length == 0) return parent[key] = {}; - var t = {}; - for (var i in parent[key]) t[i] = parent[key][i]; - parent[key] = t; - return t; -} - -function parse(parts, parent, key, val) { - var part = parts.shift(); - // end - if (!part) { - if (Array.isArray(parent[key])) { - parent[key].push(val); - } else if ('object' == typeof parent[key]) { - parent[key] = val; - } else if ('undefined' == typeof parent[key]) { - parent[key] = val; - } else { - parent[key] = [parent[key], val]; - } - // array - } else { - var obj = parent[key] = parent[key] || []; - if (']' == part) { - if (Array.isArray(obj)) { - if ('' != val) obj.push(val); - } else if ('object' == typeof obj) { - obj[Object.keys(obj).length] = val; - } else { - obj = parent[key] = [parent[key], val]; - } - // prop - } else if (~part.indexOf(']')) { - part = part.substr(0, part.length - 1); - if (!isint.test(part) && Array.isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - // key - } else { - if (!isint.test(part) && Array.isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - } - } -} - -/** - * Merge parent key/val pair. - */ - -function merge(parent, key, val){ - if (~key.indexOf(']')) { - var parts = key.split('[') - , len = parts.length - , last = len - 1; - parse(parts, parent, 'base', val); - // optimize - } else { - if (!isint.test(key) && Array.isArray(parent.base)) { - var t = {}; - for (var k in parent.base) t[k] = parent.base[k]; - parent.base = t; - } - set(parent.base, key, val); - } - - return parent; -} - -/** - * Parse the given obj. - */ - -function parseObject(obj){ - var ret = { base: {} }; - Object.keys(obj).forEach(function(name){ - merge(ret, name, obj[name]); - }); - return ret.base; -} - -/** - * Parse the given str. - */ - -function parseString(str){ - return String(str) - .split('&') - .reduce(function(ret, pair){ - var eql = pair.indexOf('=') - , brace = lastBraceInKey(pair) - , key = pair.substr(0, brace || eql) - , val = pair.substr(brace || eql, pair.length) - , val = val.substr(val.indexOf('=') + 1, val.length); - - // ?foo - if ('' == key) key = pair, val = ''; - - return merge(ret, decode(key), decode(val)); - }, { base: {} }).base; -} - -/** - * Parse the given query `str` or `obj`, returning an object. - * - * @param {String} str | {Object} obj - * @return {Object} - * @api public - */ - -exports.parse = function(str){ - if (null == str || '' == str) return {}; - return 'object' == typeof str - ? parseObject(str) - : parseString(str); -}; - -/** - * Turn the given `obj` into a query string - * - * @param {Object} obj - * @return {String} - * @api public - */ - -var stringify = exports.stringify = function(obj, prefix) { - if (Array.isArray(obj)) { - return stringifyArray(obj, prefix); - } else if ('[object Object]' == toString.call(obj)) { - return stringifyObject(obj, prefix); - } else if ('string' == typeof obj) { - return stringifyString(obj, prefix); - } else { - return prefix + '=' + obj; - } -}; - -/** - * Stringify the given `str`. - * - * @param {String} str - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyString(str, prefix) { - if (!prefix) throw new TypeError('stringify expects an object'); - return prefix + '=' + encodeURIComponent(str); -} - -/** - * Stringify the given `arr`. - * - * @param {Array} arr - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyArray(arr, prefix) { - var ret = []; - if (!prefix) throw new TypeError('stringify expects an object'); - for (var i = 0; i < arr.length; i++) { - ret.push(stringify(arr[i], prefix + '['+i+']')); - } - return ret.join('&'); -} - -/** - * Stringify the given `obj`. - * - * @param {Object} obj - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyObject(obj, prefix) { - var ret = [] - , keys = Object.keys(obj) - , key; - - for (var i = 0, len = keys.length; i < len; ++i) { - key = keys[i]; - ret.push(stringify(obj[key], prefix - ? prefix + '[' + encodeURIComponent(key) + ']' - : encodeURIComponent(key))); - } - - return ret.join('&'); -} - -/** - * Set `obj`'s `key` to `val` respecting - * the weird and wonderful syntax of a qs, - * where "foo=bar&foo=baz" becomes an array. - * - * @param {Object} obj - * @param {String} key - * @param {String} val - * @api private - */ - -function set(obj, key, val) { - var v = obj[key]; - if (undefined === v) { - obj[key] = val; - } else if (Array.isArray(v)) { - v.push(val); - } else { - obj[key] = [v, val]; - } -} - -/** - * Locate last brace in `str` within the key. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function lastBraceInKey(str) { - var len = str.length - , brace - , c; - for (var i = 0; i < len; ++i) { - c = str[i]; - if (']' == c) brace = false; - if ('[' == c) brace = true; - if ('=' == c && !brace) return i; - } -} - -/** - * Decode `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -function decode(str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (err) { - return str; - } -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/lib/tail.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/lib/tail.js deleted file mode 100644 index 158693a..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/lib/tail.js +++ /dev/null @@ -1 +0,0 @@ -})(); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/package.json deleted file mode 100644 index 233d5e4..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "qs", - "description": "querystring parser", - "version": "0.5.1", - "keywords": [ - "query string", - "parser", - "component" - ], - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-querystring.git" - }, - "devDependencies": { - "mocha": "*", - "expect.js": "*" - }, - "component": { - "scripts": { - "querystring": "querystring.js" - } - }, - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "main": "index", - "engines": { - "node": "*" - }, - "readme": "# node-querystring\n\n query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others.\n\n## Installation\n\n $ npm install qs\n\n## Examples\n\n```js\nvar qs = require('qs');\n\nqs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com');\n// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } }\n\nqs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }})\n// => user[name]=Tobi&user[email]=tobi%40learnboost.com\n```\n\n## Testing\n\nInstall dev dependencies:\n\n $ npm install -d\n\nand execute:\n\n $ make test\n\nbrowser:\n\n $ open test/browser/index.html\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "_id": "qs@0.5.1", - "_from": "qs@0.5.1" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/querystring.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/querystring.js deleted file mode 100644 index 7466b06..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/querystring.js +++ /dev/null @@ -1,254 +0,0 @@ -;(function(){ - -/** - * Object#toString() ref for stringify(). - */ - -var toString = Object.prototype.toString; - -/** - * Cache non-integer test regexp. - */ - -var isint = /^[0-9]+$/; - -function promote(parent, key) { - if (parent[key].length == 0) return parent[key] = {}; - var t = {}; - for (var i in parent[key]) t[i] = parent[key][i]; - parent[key] = t; - return t; -} - -function parse(parts, parent, key, val) { - var part = parts.shift(); - // end - if (!part) { - if (Array.isArray(parent[key])) { - parent[key].push(val); - } else if ('object' == typeof parent[key]) { - parent[key] = val; - } else if ('undefined' == typeof parent[key]) { - parent[key] = val; - } else { - parent[key] = [parent[key], val]; - } - // array - } else { - var obj = parent[key] = parent[key] || []; - if (']' == part) { - if (Array.isArray(obj)) { - if ('' != val) obj.push(val); - } else if ('object' == typeof obj) { - obj[Object.keys(obj).length] = val; - } else { - obj = parent[key] = [parent[key], val]; - } - // prop - } else if (~part.indexOf(']')) { - part = part.substr(0, part.length - 1); - if (!isint.test(part) && Array.isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - // key - } else { - if (!isint.test(part) && Array.isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - } - } -} - -/** - * Merge parent key/val pair. - */ - -function merge(parent, key, val){ - if (~key.indexOf(']')) { - var parts = key.split('[') - , len = parts.length - , last = len - 1; - parse(parts, parent, 'base', val); - // optimize - } else { - if (!isint.test(key) && Array.isArray(parent.base)) { - var t = {}; - for (var k in parent.base) t[k] = parent.base[k]; - parent.base = t; - } - set(parent.base, key, val); - } - - return parent; -} - -/** - * Parse the given obj. - */ - -function parseObject(obj){ - var ret = { base: {} }; - Object.keys(obj).forEach(function(name){ - merge(ret, name, obj[name]); - }); - return ret.base; -} - -/** - * Parse the given str. - */ - -function parseString(str){ - return String(str) - .split('&') - .reduce(function(ret, pair){ - try{ - pair = decodeURIComponent(pair.replace(/\+/g, ' ')); - } catch(e) { - // ignore - } - - var eql = pair.indexOf('=') - , brace = lastBraceInKey(pair) - , key = pair.substr(0, brace || eql) - , val = pair.substr(brace || eql, pair.length) - , val = val.substr(val.indexOf('=') + 1, val.length); - - // ?foo - if ('' == key) key = pair, val = ''; - - return merge(ret, key, val); - }, { base: {} }).base; -} - -/** - * Parse the given query `str` or `obj`, returning an object. - * - * @param {String} str | {Object} obj - * @return {Object} - * @api public - */ - -exports.parse = function(str){ - if (null == str || '' == str) return {}; - return 'object' == typeof str - ? parseObject(str) - : parseString(str); -}; - -/** - * Turn the given `obj` into a query string - * - * @param {Object} obj - * @return {String} - * @api public - */ - -var stringify = exports.stringify = function(obj, prefix) { - if (Array.isArray(obj)) { - return stringifyArray(obj, prefix); - } else if ('[object Object]' == toString.call(obj)) { - return stringifyObject(obj, prefix); - } else if ('string' == typeof obj) { - return stringifyString(obj, prefix); - } else { - return prefix + '=' + obj; - } -}; - -/** - * Stringify the given `str`. - * - * @param {String} str - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyString(str, prefix) { - if (!prefix) throw new TypeError('stringify expects an object'); - return prefix + '=' + encodeURIComponent(str); -} - -/** - * Stringify the given `arr`. - * - * @param {Array} arr - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyArray(arr, prefix) { - var ret = []; - if (!prefix) throw new TypeError('stringify expects an object'); - for (var i = 0; i < arr.length; i++) { - ret.push(stringify(arr[i], prefix + '['+i+']')); - } - return ret.join('&'); -} - -/** - * Stringify the given `obj`. - * - * @param {Object} obj - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyObject(obj, prefix) { - var ret = [] - , keys = Object.keys(obj) - , key; - - for (var i = 0, len = keys.length; i < len; ++i) { - key = keys[i]; - ret.push(stringify(obj[key], prefix - ? prefix + '[' + encodeURIComponent(key) + ']' - : encodeURIComponent(key))); - } - - return ret.join('&'); -} - -/** - * Set `obj`'s `key` to `val` respecting - * the weird and wonderful syntax of a qs, - * where "foo=bar&foo=baz" becomes an array. - * - * @param {Object} obj - * @param {String} key - * @param {String} val - * @api private - */ - -function set(obj, key, val) { - var v = obj[key]; - if (undefined === v) { - obj[key] = val; - } else if (Array.isArray(v)) { - v.push(val); - } else { - obj[key] = [v, val]; - } -} - -/** - * Locate last brace in `str` within the key. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function lastBraceInKey(str) { - var len = str.length - , brace - , c; - for (var i = 0; i < len; ++i) { - c = str[i]; - if (']' == c) brace = false; - if ('[' == c) brace = true; - if ('=' == c && !brace) return i; - } -} -})(); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/test/browser/expect.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/test/browser/expect.js deleted file mode 100644 index 76aa4e8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/test/browser/expect.js +++ /dev/null @@ -1,1202 +0,0 @@ - -(function (global, module) { - - if ('undefined' == typeof module) { - var module = { exports: {} } - , exports = module.exports - } - - /** - * Exports. - */ - - module.exports = expect; - expect.Assertion = Assertion; - - /** - * Exports version. - */ - - expect.version = '0.1.2'; - - /** - * Possible assertion flags. - */ - - var flags = { - not: ['to', 'be', 'have', 'include', 'only'] - , to: ['be', 'have', 'include', 'only', 'not'] - , only: ['have'] - , have: ['own'] - , be: ['an'] - }; - - function expect (obj) { - return new Assertion(obj); - } - - /** - * Constructor - * - * @api private - */ - - function Assertion (obj, flag, parent) { - this.obj = obj; - this.flags = {}; - - if (undefined != parent) { - this.flags[flag] = true; - - for (var i in parent.flags) { - if (parent.flags.hasOwnProperty(i)) { - this.flags[i] = true; - } - } - } - - var $flags = flag ? flags[flag] : keys(flags) - , self = this - - if ($flags) { - for (var i = 0, l = $flags.length; i < l; i++) { - // avoid recursion - if (this.flags[$flags[i]]) continue; - - var name = $flags[i] - , assertion = new Assertion(this.obj, name, this) - - if ('function' == typeof Assertion.prototype[name]) { - // clone the function, make sure we dont touch the prot reference - var old = this[name]; - this[name] = function () { - return old.apply(self, arguments); - } - - for (var fn in Assertion.prototype) { - if (Assertion.prototype.hasOwnProperty(fn) && fn != name) { - this[name][fn] = bind(assertion[fn], assertion); - } - } - } else { - this[name] = assertion; - } - } - } - }; - - /** - * Performs an assertion - * - * @api private - */ - - Assertion.prototype.assert = function (truth, msg, error) { - var msg = this.flags.not ? error : msg - , ok = this.flags.not ? !truth : truth; - - if (!ok) { - throw new Error(msg); - } - - this.and = new Assertion(this.obj); - }; - - /** - * Check if the value is truthy - * - * @api public - */ - - Assertion.prototype.ok = function () { - this.assert( - !!this.obj - , 'expected ' + i(this.obj) + ' to be truthy' - , 'expected ' + i(this.obj) + ' to be falsy'); - }; - - /** - * Assert that the function throws. - * - * @param {Function|RegExp} callback, or regexp to match error string against - * @api public - */ - - Assertion.prototype.throwError = - Assertion.prototype.throwException = function (fn) { - expect(this.obj).to.be.a('function'); - - var thrown = false - , not = this.flags.not - - try { - this.obj(); - } catch (e) { - if ('function' == typeof fn) { - fn(e); - } else if ('object' == typeof fn) { - var subject = 'string' == typeof e ? e : e.message; - if (not) { - expect(subject).to.not.match(fn); - } else { - expect(subject).to.match(fn); - } - } - thrown = true; - } - - if ('object' == typeof fn && not) { - // in the presence of a matcher, ensure the `not` only applies to - // the matching. - this.flags.not = false; - } - - var name = this.obj.name || 'fn'; - this.assert( - thrown - , 'expected ' + name + ' to throw an exception' - , 'expected ' + name + ' not to throw an exception'); - }; - - /** - * Checks if the array is empty. - * - * @api public - */ - - Assertion.prototype.empty = function () { - var expectation; - - if ('object' == typeof this.obj && null !== this.obj && !isArray(this.obj)) { - if ('number' == typeof this.obj.length) { - expectation = !this.obj.length; - } else { - expectation = !keys(this.obj).length; - } - } else { - if ('string' != typeof this.obj) { - expect(this.obj).to.be.an('object'); - } - - expect(this.obj).to.have.property('length'); - expectation = !this.obj.length; - } - - this.assert( - expectation - , 'expected ' + i(this.obj) + ' to be empty' - , 'expected ' + i(this.obj) + ' to not be empty'); - return this; - }; - - /** - * Checks if the obj exactly equals another. - * - * @api public - */ - - Assertion.prototype.be = - Assertion.prototype.equal = function (obj) { - this.assert( - obj === this.obj - , 'expected ' + i(this.obj) + ' to equal ' + i(obj) - , 'expected ' + i(this.obj) + ' to not equal ' + i(obj)); - return this; - }; - - /** - * Checks if the obj sortof equals another. - * - * @api public - */ - - Assertion.prototype.eql = function (obj) { - this.assert( - expect.eql(obj, this.obj) - , 'expected ' + i(this.obj) + ' to sort of equal ' + i(obj) - , 'expected ' + i(this.obj) + ' to sort of not equal ' + i(obj)); - return this; - }; - - /** - * Assert within start to finish (inclusive). - * - * @param {Number} start - * @param {Number} finish - * @api public - */ - - Assertion.prototype.within = function (start, finish) { - var range = start + '..' + finish; - this.assert( - this.obj >= start && this.obj <= finish - , 'expected ' + i(this.obj) + ' to be within ' + range - , 'expected ' + i(this.obj) + ' to not be within ' + range); - return this; - }; - - /** - * Assert typeof / instance of - * - * @api public - */ - - Assertion.prototype.a = - Assertion.prototype.an = function (type) { - if ('string' == typeof type) { - // proper english in error msg - var n = /^[aeiou]/.test(type) ? 'n' : ''; - - // typeof with support for 'array' - this.assert( - 'array' == type ? isArray(this.obj) : - 'object' == type - ? 'object' == typeof this.obj && null !== this.obj - : type == typeof this.obj - , 'expected ' + i(this.obj) + ' to be a' + n + ' ' + type - , 'expected ' + i(this.obj) + ' not to be a' + n + ' ' + type); - } else { - // instanceof - var name = type.name || 'supplied constructor'; - this.assert( - this.obj instanceof type - , 'expected ' + i(this.obj) + ' to be an instance of ' + name - , 'expected ' + i(this.obj) + ' not to be an instance of ' + name); - } - - return this; - }; - - /** - * Assert numeric value above _n_. - * - * @param {Number} n - * @api public - */ - - Assertion.prototype.greaterThan = - Assertion.prototype.above = function (n) { - this.assert( - this.obj > n - , 'expected ' + i(this.obj) + ' to be above ' + n - , 'expected ' + i(this.obj) + ' to be below ' + n); - return this; - }; - - /** - * Assert numeric value below _n_. - * - * @param {Number} n - * @api public - */ - - Assertion.prototype.lessThan = - Assertion.prototype.below = function (n) { - this.assert( - this.obj < n - , 'expected ' + i(this.obj) + ' to be below ' + n - , 'expected ' + i(this.obj) + ' to be above ' + n); - return this; - }; - - /** - * Assert string value matches _regexp_. - * - * @param {RegExp} regexp - * @api public - */ - - Assertion.prototype.match = function (regexp) { - this.assert( - regexp.exec(this.obj) - , 'expected ' + i(this.obj) + ' to match ' + regexp - , 'expected ' + i(this.obj) + ' not to match ' + regexp); - return this; - }; - - /** - * Assert property "length" exists and has value of _n_. - * - * @param {Number} n - * @api public - */ - - Assertion.prototype.length = function (n) { - expect(this.obj).to.have.property('length'); - var len = this.obj.length; - this.assert( - n == len - , 'expected ' + i(this.obj) + ' to have a length of ' + n + ' but got ' + len - , 'expected ' + i(this.obj) + ' to not have a length of ' + len); - return this; - }; - - /** - * Assert property _name_ exists, with optional _val_. - * - * @param {String} name - * @param {Mixed} val - * @api public - */ - - Assertion.prototype.property = function (name, val) { - if (this.flags.own) { - this.assert( - Object.prototype.hasOwnProperty.call(this.obj, name) - , 'expected ' + i(this.obj) + ' to have own property ' + i(name) - , 'expected ' + i(this.obj) + ' to not have own property ' + i(name)); - return this; - } - - if (this.flags.not && undefined !== val) { - if (undefined === this.obj[name]) { - throw new Error(i(this.obj) + ' has no property ' + i(name)); - } - } else { - var hasProp; - try { - hasProp = name in this.obj - } catch (e) { - hasProp = undefined !== this.obj[name] - } - - this.assert( - hasProp - , 'expected ' + i(this.obj) + ' to have a property ' + i(name) - , 'expected ' + i(this.obj) + ' to not have a property ' + i(name)); - } - - if (undefined !== val) { - this.assert( - val === this.obj[name] - , 'expected ' + i(this.obj) + ' to have a property ' + i(name) - + ' of ' + i(val) + ', but got ' + i(this.obj[name]) - , 'expected ' + i(this.obj) + ' to not have a property ' + i(name) - + ' of ' + i(val)); - } - - this.obj = this.obj[name]; - return this; - }; - - /** - * Assert that the array contains _obj_ or string contains _obj_. - * - * @param {Mixed} obj|string - * @api public - */ - - Assertion.prototype.string = - Assertion.prototype.contain = function (obj) { - if ('string' == typeof this.obj) { - this.assert( - ~this.obj.indexOf(obj) - , 'expected ' + i(this.obj) + ' to contain ' + i(obj) - , 'expected ' + i(this.obj) + ' to not contain ' + i(obj)); - } else { - this.assert( - ~indexOf(this.obj, obj) - , 'expected ' + i(this.obj) + ' to contain ' + i(obj) - , 'expected ' + i(this.obj) + ' to not contain ' + i(obj)); - } - return this; - }; - - /** - * Assert exact keys or inclusion of keys by using - * the `.own` modifier. - * - * @param {Array|String ...} keys - * @api public - */ - - Assertion.prototype.key = - Assertion.prototype.keys = function ($keys) { - var str - , ok = true; - - $keys = isArray($keys) - ? $keys - : Array.prototype.slice.call(arguments); - - if (!$keys.length) throw new Error('keys required'); - - var actual = keys(this.obj) - , len = $keys.length; - - // Inclusion - ok = every($keys, function (key) { - return ~indexOf(actual, key); - }); - - // Strict - if (!this.flags.not && this.flags.only) { - ok = ok && $keys.length == actual.length; - } - - // Key string - if (len > 1) { - $keys = map($keys, function (key) { - return i(key); - }); - var last = $keys.pop(); - str = $keys.join(', ') + ', and ' + last; - } else { - str = i($keys[0]); - } - - // Form - str = (len > 1 ? 'keys ' : 'key ') + str; - - // Have / include - str = (!this.flags.only ? 'include ' : 'only have ') + str; - - // Assertion - this.assert( - ok - , 'expected ' + i(this.obj) + ' to ' + str - , 'expected ' + i(this.obj) + ' to not ' + str); - - return this; - }; - - /** - * Function bind implementation. - */ - - function bind (fn, scope) { - return function () { - return fn.apply(scope, arguments); - } - } - - /** - * Array every compatibility - * - * @see bit.ly/5Fq1N2 - * @api public - */ - - function every (arr, fn, thisObj) { - var scope = thisObj || global; - for (var i = 0, j = arr.length; i < j; ++i) { - if (!fn.call(scope, arr[i], i, arr)) { - return false; - } - } - return true; - }; - - /** - * Array indexOf compatibility. - * - * @see bit.ly/a5Dxa2 - * @api public - */ - - function indexOf (arr, o, i) { - if (Array.prototype.indexOf) { - return Array.prototype.indexOf.call(arr, o, i); - } - - if (arr.length === undefined) { - return -1; - } - - for (var j = arr.length, i = i < 0 ? i + j < 0 ? 0 : i + j : i || 0 - ; i < j && arr[i] !== o; i++); - - return j <= i ? -1 : i; - }; - - /** - * Inspects an object. - * - * @see taken from node.js `util` module (copyright Joyent, MIT license) - * @api private - */ - - function i (obj, showHidden, depth) { - var seen = []; - - function stylize (str) { - return str; - }; - - function format (value, recurseTimes) { - // Provide a hook for user-specified inspect functions. - // Check that value is an object with an inspect function on it - if (value && typeof value.inspect === 'function' && - // Filter out the util module, it's inspect function is special - value !== exports && - // Also filter out any prototype objects using the circular check. - !(value.constructor && value.constructor.prototype === value)) { - return value.inspect(recurseTimes); - } - - // Primitive types cannot have properties - switch (typeof value) { - case 'undefined': - return stylize('undefined', 'undefined'); - - case 'string': - var simple = '\'' + json.stringify(value).replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') + '\''; - return stylize(simple, 'string'); - - case 'number': - return stylize('' + value, 'number'); - - case 'boolean': - return stylize('' + value, 'boolean'); - } - // For some reason typeof null is "object", so special case here. - if (value === null) { - return stylize('null', 'null'); - } - - // Look up the keys of the object. - var visible_keys = keys(value); - var $keys = showHidden ? Object.getOwnPropertyNames(value) : visible_keys; - - // Functions without properties can be shortcutted. - if (typeof value === 'function' && $keys.length === 0) { - if (isRegExp(value)) { - return stylize('' + value, 'regexp'); - } else { - var name = value.name ? ': ' + value.name : ''; - return stylize('[Function' + name + ']', 'special'); - } - } - - // Dates without properties can be shortcutted - if (isDate(value) && $keys.length === 0) { - return stylize(value.toUTCString(), 'date'); - } - - var base, type, braces; - // Determine the object type - if (isArray(value)) { - type = 'Array'; - braces = ['[', ']']; - } else { - type = 'Object'; - braces = ['{', '}']; - } - - // Make functions say that they are functions - if (typeof value === 'function') { - var n = value.name ? ': ' + value.name : ''; - base = (isRegExp(value)) ? ' ' + value : ' [Function' + n + ']'; - } else { - base = ''; - } - - // Make dates with properties first say the date - if (isDate(value)) { - base = ' ' + value.toUTCString(); - } - - if ($keys.length === 0) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return stylize('' + value, 'regexp'); - } else { - return stylize('[Object]', 'special'); - } - } - - seen.push(value); - - var output = map($keys, function (key) { - var name, str; - if (value.__lookupGetter__) { - if (value.__lookupGetter__(key)) { - if (value.__lookupSetter__(key)) { - str = stylize('[Getter/Setter]', 'special'); - } else { - str = stylize('[Getter]', 'special'); - } - } else { - if (value.__lookupSetter__(key)) { - str = stylize('[Setter]', 'special'); - } - } - } - if (indexOf(visible_keys, key) < 0) { - name = '[' + key + ']'; - } - if (!str) { - if (indexOf(seen, value[key]) < 0) { - if (recurseTimes === null) { - str = format(value[key]); - } else { - str = format(value[key], recurseTimes - 1); - } - if (str.indexOf('\n') > -1) { - if (isArray(value)) { - str = map(str.split('\n'), function (line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + map(str.split('\n'), function (line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = stylize('[Circular]', 'special'); - } - } - if (typeof name === 'undefined') { - if (type === 'Array' && key.match(/^\d+$/)) { - return str; - } - name = json.stringify('' + key); - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'") - .replace(/\\"/g, '"') - .replace(/(^"|"$)/g, "'"); - name = stylize(name, 'string'); - } - } - - return name + ': ' + str; - }); - - seen.pop(); - - var numLinesEst = 0; - var length = reduce(output, function (prev, cur) { - numLinesEst++; - if (indexOf(cur, '\n') >= 0) numLinesEst++; - return prev + cur.length + 1; - }, 0); - - if (length > 50) { - output = braces[0] + - (base === '' ? '' : base + '\n ') + - ' ' + - output.join(',\n ') + - ' ' + - braces[1]; - - } else { - output = braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; - } - - return output; - } - return format(obj, (typeof depth === 'undefined' ? 2 : depth)); - }; - - function isArray (ar) { - return Object.prototype.toString.call(ar) == '[object Array]'; - }; - - function isRegExp(re) { - var s = '' + re; - return re instanceof RegExp || // easy case - // duck-type for context-switching evalcx case - typeof(re) === 'function' && - re.constructor.name === 'RegExp' && - re.compile && - re.test && - re.exec && - s.match(/^\/.*\/[gim]{0,3}$/); - }; - - function isDate(d) { - if (d instanceof Date) return true; - return false; - }; - - function keys (obj) { - if (Object.keys) { - return Object.keys(obj); - } - - var keys = []; - - for (var i in obj) { - if (Object.prototype.hasOwnProperty.call(obj, i)) { - keys.push(i); - } - } - - return keys; - } - - function map (arr, mapper, that) { - if (Array.prototype.map) { - return Array.prototype.map.call(arr, mapper, that); - } - - var other= new Array(arr.length); - - for (var i= 0, n = arr.length; i= 2) { - var rv = arguments[1]; - } else { - do { - if (i in this) { - rv = this[i++]; - break; - } - - // if array contains no values, no initial value to return - if (++i >= len) - throw new TypeError(); - } while (true); - } - - for (; i < len; i++) { - if (i in this) - rv = fun.call(null, rv, this[i], i, this); - } - - return rv; - }; - - /** - * Asserts deep equality - * - * @see taken from node.js `assert` module (copyright Joyent, MIT license) - * @api private - */ - - expect.eql = function eql (actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - } else if ('undefined' != typeof Buffer - && Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) { - if (actual.length != expected.length) return false; - - for (var i = 0; i < actual.length; i++) { - if (actual[i] !== expected[i]) return false; - } - - return true; - - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (actual instanceof Date && expected instanceof Date) { - return actual.getTime() === expected.getTime(); - - // 7.3. Other pairs that do not both pass typeof value == "object", - // equivalence is determined by ==. - } else if (typeof actual != 'object' && typeof expected != 'object') { - return actual == expected; - - // 7.4. For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical "prototype" property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } - } - - function isUndefinedOrNull (value) { - return value === null || value === undefined; - } - - function isArguments (object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; - } - - function objEquiv (a, b) { - if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) - return false; - // an identical "prototype" property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (isArguments(a)) { - if (!isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return expect.eql(a, b); - } - try{ - var ka = keys(a), - kb = keys(b), - key, i; - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!expect.eql(a[key], b[key])) - return false; - } - return true; - } - - var json = (function () { - "use strict"; - - if ('object' == typeof JSON && JSON.parse && JSON.stringify) { - return { - parse: nativeJSON.parse - , stringify: nativeJSON.stringify - } - } - - var JSON = {}; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - function date(d, key) { - return isFinite(d.valueOf()) ? - d.getUTCFullYear() + '-' + - f(d.getUTCMonth() + 1) + '-' + - f(d.getUTCDate()) + 'T' + - f(d.getUTCHours()) + ':' + - f(d.getUTCMinutes()) + ':' + - f(d.getUTCSeconds()) + 'Z' : null; - }; - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - - // If the string contains no control characters, no quote characters, and no - // backslash characters, then we can safely slap some quotes around it. - // Otherwise we must also replace the offending characters with safe escape - // sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - - - function str(key, holder) { - - // Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - - // If the value has a toJSON method, call it to obtain a replacement value. - - if (value instanceof Date) { - value = date(key); - } - - // If we were called with a replacer function, then call the replacer to - // obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - - // What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - - // JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - - // If the value is a boolean or null, convert it to a string. Note: - // typeof null does not produce 'null'. The case is included here in - // the remote chance that this gets fixed someday. - - return String(value); - - // If the type is 'object', we might be dealing with an object or an array or - // null. - - case 'object': - - // Due to a specification blunder in ECMAScript, typeof null is 'object', - // so watch out for that case. - - if (!value) { - return 'null'; - } - - // Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - - // Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - - // The value is an array. Stringify every element. Use null as a placeholder - // for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - - // Join all of the elements together, separated with commas, and wrap them in - // brackets. - - v = partial.length === 0 ? '[]' : gap ? - '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - - // If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - if (typeof rep[i] === 'string') { - k = rep[i]; - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - - // Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - - // Join all of the member texts together, separated with commas, - // and wrap them in braces. - - v = partial.length === 0 ? '{}' : gap ? - '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : - '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - - // If the JSON object does not yet have a stringify method, give it one. - - JSON.stringify = function (value, replacer, space) { - - // The stringify method takes a value and an optional replacer, and an optional - // space parameter, and returns a JSON text. The replacer can be a function - // that can replace values, or an array of strings that will select the keys. - // A default replacer method can be provided. Use of the space parameter can - // produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - - // If the space parameter is a number, make an indent string containing that - // many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - - // If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - - // If there is a replacer, it must be a function or an array. - // Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - - // Make a fake root object containing our value under the key of ''. - // Return the result of stringifying the value. - - return str('', {'': value}); - }; - - // If the JSON object does not yet have a parse method, give it one. - - JSON.parse = function (text, reviver) { - // The parse method takes a text and an optional reviver function, and returns - // a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - - // The walk method is used to recursively walk the resulting structure so - // that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - - // Parsing happens in four stages. In the first stage, we replace certain - // Unicode characters with escape sequences. JavaScript handles many characters - // incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - - // In the second stage, we run the text against regular expressions that look - // for non-JSON patterns. We are especially concerned with '()' and 'new' - // because they can cause invocation, and '=' because it can cause mutation. - // But just to be safe, we want to reject all unexpected forms. - - // We split the second stage into 4 regexp operations in order to work around - // crippling inefficiencies in IE's and Safari's regexp engines. First we - // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we - // replace all simple value tokens with ']' characters. Third, we delete all - // open brackets that follow a colon or comma or that begin the text. Finally, - // we look to see that the remaining characters are only whitespace or ']' or - // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ - .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') - .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - - // In the third stage we use the eval function to compile the text into a - // JavaScript structure. The '{' operator is subject to a syntactic ambiguity - // in JavaScript: it can begin a block or an object literal. We wrap the text - // in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - - // In the optional fourth stage, we recursively walk the new structure, passing - // each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' ? - walk({'': j}, '') : j; - } - - // If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - - return JSON; - })(); - - if ('undefined' != typeof window) { - window.expect = module.exports; - } - -})( - this - , 'undefined' != typeof module ? module : {} - , 'undefined' != typeof exports ? exports : {} -); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/test/browser/index.html b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/test/browser/index.html deleted file mode 100644 index c73147a..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/test/browser/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - Mocha - - - - - - - - - - - - -
    - - diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/test/browser/jquery.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/test/browser/jquery.js deleted file mode 100644 index f3201aa..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/connect/node_modules/qs/test/browser/jquery.js +++ /dev/null @@ -1,8981 +0,0 @@ -/*! - * jQuery JavaScript Library v1.6.2 - * http://jquery.com/ - * - * Copyright 2011, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Thu Jun 30 14:16:56 2011 -0400 - */ -(function( window, undefined ) { - -// Use the correct document accordingly with window argument (sandbox) -var document = window.document, - navigator = window.navigator, - location = window.location; -var jQuery = (function() { - -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context, rootjQuery ); - }, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // A central reference to the root jQuery(document) - rootjQuery, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, - - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, - - // Used for trimming whitespace - trimLeft = /^\s+/, - trimRight = /\s+$/, - - // Check for digits - rdigit = /\d/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, - rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - - // Useragent RegExp - rwebkit = /(webkit)[ \/]([\w.]+)/, - ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, - rmsie = /(msie) ([\w.]+)/, - rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, - - // Matches dashed string for camelizing - rdashAlpha = /-([a-z])/ig, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }, - - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, - - // For matching the engine and version of the browser - browserMatch, - - // The deferred used on DOM ready - readyList, - - // The ready event handler - DOMContentLoaded, - - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwn = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - trim = String.prototype.trim, - indexOf = Array.prototype.indexOf, - - // [[Class]] -> type pairs - class2type = {}; - -jQuery.fn = jQuery.prototype = { - constructor: jQuery, - init: function( selector, context, rootjQuery ) { - var match, elem, ret, doc; - - // Handle $(""), $(null), or $(undefined) - if ( !selector ) { - return this; - } - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } - - // The body element only exists once, optimize finding it - if ( selector === "body" && !context && document.body ) { - this.context = document; - this[0] = document.body; - this.selector = selector; - this.length = 1; - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = quickExpr.exec( selector ); - } - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - doc = (context ? context.ownerDocument || context : document); - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - ret = rsingleTag.exec( selector ); - - if ( ret ) { - if ( jQuery.isPlainObject( context ) ) { - selector = [ document.createElement( ret[1] ) ]; - jQuery.fn.attr.call( selector, context, true ); - - } else { - selector = [ doc.createElement( ret[1] ) ]; - } - - } else { - ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; - } - - return jQuery.merge( this, selector ); - - // HANDLE: $("#id") - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return (context || rootjQuery).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if (selector.selector !== undefined) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.6.2", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return slice.call( this, 0 ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this[ this.length + num ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = this.constructor(); - - if ( jQuery.isArray( elems ) ) { - push.apply( ret, elems ); - - } else { - jQuery.merge( ret, elems ); - } - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) { - ret.selector = this.selector + (this.selector ? " " : "") + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Attach the listeners - jQuery.bindReady(); - - // Add the callback - readyList.done( fn ); - - return this; - }, - - eq: function( i ) { - return i === -1 ? - this.slice( i ) : - this.slice( i, +i + 1 ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - // Either a released hold or an DOMready/load event and not yet ready - if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 1 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.trigger ) { - jQuery( document ).trigger( "ready" ).unbind( "ready" ); - } - } - }, - - bindReady: function() { - if ( readyList ) { - return; - } - - readyList = jQuery._Deferred(); - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - return setTimeout( jQuery.ready, 1 ); - } - - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); - - // If IE event model is used - } else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent( "onreadystatechange", DOMContentLoaded ); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); - - // If IE and not a frame - // continually check to see if the document is ready - var toplevel = false; - - try { - toplevel = window.frameElement == null; - } catch(e) {} - - if ( document.documentElement.doScroll && toplevel ) { - doScrollCheck(); - } - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - // A crude way of determining if an object is a window - isWindow: function( obj ) { - return obj && typeof obj === "object" && "setInterval" in obj; - }, - - isNaN: function( obj ) { - return obj == null || !rdigit.test( obj ) || isNaN( obj ); - }, - - type: function( obj ) { - return obj == null ? - String( obj ) : - class2type[ toString.call(obj) ] || "object"; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - for ( var name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw msg; - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - // Attempt to parse using the native JSON parser first - if ( window.JSON && window.JSON.parse ) { - return window.JSON.parse( data ); - } - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test( data.replace( rvalidescape, "@" ) - .replace( rvalidtokens, "]" ) - .replace( rvalidbraces, "")) ) { - - return (new Function( "return " + data ))(); - - } - jQuery.error( "Invalid JSON: " + data ); - }, - - // Cross-browser xml parsing - // (xml & tmp used internally) - parseXML: function( data , xml , tmp ) { - - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); - } - - tmp = xml.documentElement; - - if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { - jQuery.error( "Invalid XML: " + data ); - } - - return xml; - }, - - noop: function() {}, - - // Evaluates a script in a global context - // Workarounds based on findings by Jim Driscoll - // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context - globalEval: function( data ) { - if ( data && rnotwhite.test( data ) ) { - // We use execScript on Internet Explorer - // We use an anonymous function so that context is window - // rather than jQuery in Firefox - ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); - } )( data ); - } - }, - - // Converts a dashed string to camelCased string; - // Used by both the css and data modules - camelCase: function( string ) { - return string.replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, - length = object.length, - isObj = length === undefined || jQuery.isFunction( object ); - - if ( args ) { - if ( isObj ) { - for ( name in object ) { - if ( callback.apply( object[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( object[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in object ) { - if ( callback.call( object[ name ], name, object[ name ] ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { - break; - } - } - } - } - - return object; - }, - - // Use native String.trim function wherever possible - trim: trim ? - function( text ) { - return text == null ? - "" : - trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 - var type = jQuery.type( array ); - - if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array ) { - - if ( indexOf ) { - return indexOf.call( array, elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; - }, - - merge: function( first, second ) { - var i = first.length, - j = 0; - - if ( typeof second.length === "number" ) { - for ( var l = second.length; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var ret = [], retVal; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var value, key, ret = [], - i = 0, - length = elems.length, - // jquery objects are treated as arrays - isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; - - // Go through the array, translating each of the items to their - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - // Go through every key on the object, - } else { - for ( key in elems ) { - value = callback( elems[ key ], key, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - } - - // Flatten any nested arrays - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - if ( typeof context === "string" ) { - var tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - var args = slice.call( arguments, 2 ), - proxy = function() { - return fn.apply( context, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - - return proxy; - }, - - // Mutifunctional method to get and set values to a collection - // The value/s can optionally be executed if it's a function - access: function( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - jQuery.access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; - }, - - now: function() { - return (new Date()).getTime(); - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = rwebkit.exec( ua ) || - ropera.exec( ua ) || - rmsie.exec( ua ) || - ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - sub: function() { - function jQuerySub( selector, context ) { - return new jQuerySub.fn.init( selector, context ); - } - jQuery.extend( true, jQuerySub, this ); - jQuerySub.superclass = this; - jQuerySub.fn = jQuerySub.prototype = this(); - jQuerySub.fn.constructor = jQuerySub; - jQuerySub.sub = this.sub; - jQuerySub.fn.init = function init( selector, context ) { - if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { - context = jQuerySub( context ); - } - - return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); - }; - jQuerySub.fn.init.prototype = jQuerySub.fn; - var rootjQuerySub = jQuerySub(document); - return jQuerySub; - }, - - browser: {} -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -browserMatch = jQuery.uaMatch( userAgent ); -if ( browserMatch.browser ) { - jQuery.browser[ browserMatch.browser ] = true; - jQuery.browser.version = browserMatch.version; -} - -// Deprecated, use jQuery.browser.webkit instead -if ( jQuery.browser.webkit ) { - jQuery.browser.safari = true; -} - -// IE doesn't match non-breaking spaces with \s -if ( rnotwhite.test( "\xA0" ) ) { - trimLeft = /^[\s\xA0]+/; - trimRight = /[\s\xA0]+$/; -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); - -// Cleanup functions for the document ready method -if ( document.addEventListener ) { - DOMContentLoaded = function() { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - }; - -} else if ( document.attachEvent ) { - DOMContentLoaded = function() { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" ) { - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }; -} - -// The DOM ready check for Internet Explorer -function doScrollCheck() { - if ( jQuery.isReady ) { - return; - } - - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - document.documentElement.doScroll("left"); - } catch(e) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} - -return jQuery; - -})(); - - -var // Promise methods - promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ), - // Static reference to slice - sliceDeferred = [].slice; - -jQuery.extend({ - // Create a simple deferred (one callbacks list) - _Deferred: function() { - var // callbacks list - callbacks = [], - // stored [ context , args ] - fired, - // to avoid firing when already doing so - firing, - // flag to know if the deferred has been cancelled - cancelled, - // the deferred itself - deferred = { - - // done( f1, f2, ...) - done: function() { - if ( !cancelled ) { - var args = arguments, - i, - length, - elem, - type, - _fired; - if ( fired ) { - _fired = fired; - fired = 0; - } - for ( i = 0, length = args.length; i < length; i++ ) { - elem = args[ i ]; - type = jQuery.type( elem ); - if ( type === "array" ) { - deferred.done.apply( deferred, elem ); - } else if ( type === "function" ) { - callbacks.push( elem ); - } - } - if ( _fired ) { - deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); - } - } - return this; - }, - - // resolve with given context and args - resolveWith: function( context, args ) { - if ( !cancelled && !fired && !firing ) { - // make sure args are available (#8421) - args = args || []; - firing = 1; - try { - while( callbacks[ 0 ] ) { - callbacks.shift().apply( context, args ); - } - } - finally { - fired = [ context, args ]; - firing = 0; - } - } - return this; - }, - - // resolve with this as context and given arguments - resolve: function() { - deferred.resolveWith( this, arguments ); - return this; - }, - - // Has this deferred been resolved? - isResolved: function() { - return !!( firing || fired ); - }, - - // Cancel - cancel: function() { - cancelled = 1; - callbacks = []; - return this; - } - }; - - return deferred; - }, - - // Full fledged deferred (two callbacks list) - Deferred: function( func ) { - var deferred = jQuery._Deferred(), - failDeferred = jQuery._Deferred(), - promise; - // Add errorDeferred methods, then and promise - jQuery.extend( deferred, { - then: function( doneCallbacks, failCallbacks ) { - deferred.done( doneCallbacks ).fail( failCallbacks ); - return this; - }, - always: function() { - return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments ); - }, - fail: failDeferred.done, - rejectWith: failDeferred.resolveWith, - reject: failDeferred.resolve, - isRejected: failDeferred.isResolved, - pipe: function( fnDone, fnFail ) { - return jQuery.Deferred(function( newDefer ) { - jQuery.each( { - done: [ fnDone, "resolve" ], - fail: [ fnFail, "reject" ] - }, function( handler, data ) { - var fn = data[ 0 ], - action = data[ 1 ], - returned; - if ( jQuery.isFunction( fn ) ) { - deferred[ handler ](function() { - returned = fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise().then( newDefer.resolve, newDefer.reject ); - } else { - newDefer[ action ]( returned ); - } - }); - } else { - deferred[ handler ]( newDefer[ action ] ); - } - }); - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - if ( obj == null ) { - if ( promise ) { - return promise; - } - promise = obj = {}; - } - var i = promiseMethods.length; - while( i-- ) { - obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ]; - } - return obj; - } - }); - // Make sure only one callback list will be used - deferred.done( failDeferred.cancel ).fail( deferred.cancel ); - // Unexpose cancel - delete deferred.cancel; - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - return deferred; - }, - - // Deferred helper - when: function( firstParam ) { - var args = arguments, - i = 0, - length = args.length, - count = length, - deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? - firstParam : - jQuery.Deferred(); - function resolveFunc( i ) { - return function( value ) { - args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; - if ( !( --count ) ) { - // Strange bug in FF4: - // Values changed onto the arguments object sometimes end up as undefined values - // outside the $.when method. Cloning the object into a fresh array solves the issue - deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) ); - } - }; - } - if ( length > 1 ) { - for( ; i < length; i++ ) { - if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) { - args[ i ].promise().then( resolveFunc(i), deferred.reject ); - } else { - --count; - } - } - if ( !count ) { - deferred.resolveWith( deferred, args ); - } - } else if ( deferred !== firstParam ) { - deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); - } - return deferred.promise(); - } -}); - - - -jQuery.support = (function() { - - var div = document.createElement( "div" ), - documentElement = document.documentElement, - all, - a, - select, - opt, - input, - marginDiv, - support, - fragment, - body, - testElementParent, - testElement, - testElementStyle, - tds, - events, - eventName, - i, - isSupported; - - // Preliminary tests - div.setAttribute("className", "t"); - div.innerHTML = "
    a"; - - all = div.getElementsByTagName( "*" ); - a = div.getElementsByTagName( "a" )[ 0 ]; - - // Can't get basic test support - if ( !all || !all.length || !a ) { - return {}; - } - - // First batch of supports tests - select = document.createElement( "select" ); - opt = select.appendChild( document.createElement("option") ); - input = div.getElementsByTagName( "input" )[ 0 ]; - - support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: ( div.firstChild.nodeType === 3 ), - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName( "tbody" ).length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName( "link" ).length, - - // Get the style information from getAttribute - // (IE uses .cssText instead) - style: /top/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: ( a.getAttribute( "href" ) === "/a" ), - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.55$/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: ( input.value === "on" ), - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: opt.selected, - - // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) - getSetAttribute: div.className !== "t", - - // Will be defined later - submitBubbles: true, - changeBubbles: true, - focusinBubbles: false, - deleteExpando: true, - noCloneEvent: true, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableMarginRight: true - }; - - // Make sure checked status is properly cloned - input.checked = true; - support.noCloneChecked = input.cloneNode( true ).checked; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as disabled) - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Test to see if it's possible to delete an expando from an element - // Fails in Internet Explorer - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } - - if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { - div.attachEvent( "onclick", function() { - // Cloning a node shouldn't copy over any - // bound event handlers (IE does this) - support.noCloneEvent = false; - }); - div.cloneNode( true ).fireEvent( "onclick" ); - } - - // Check if a radio maintains it's value - // after being appended to the DOM - input = document.createElement("input"); - input.value = "t"; - input.setAttribute("type", "radio"); - support.radioValue = input.value === "t"; - - input.setAttribute("checked", "checked"); - div.appendChild( input ); - fragment = document.createDocumentFragment(); - fragment.appendChild( div.firstChild ); - - // WebKit doesn't clone checked state correctly in fragments - support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; - - div.innerHTML = ""; - - // Figure out if the W3C box model works as expected - div.style.width = div.style.paddingLeft = "1px"; - - body = document.getElementsByTagName( "body" )[ 0 ]; - // We use our own, invisible, body unless the body is already present - // in which case we use a div (#9239) - testElement = document.createElement( body ? "div" : "body" ); - testElementStyle = { - visibility: "hidden", - width: 0, - height: 0, - border: 0, - margin: 0 - }; - if ( body ) { - jQuery.extend( testElementStyle, { - position: "absolute", - left: -1000, - top: -1000 - }); - } - for ( i in testElementStyle ) { - testElement.style[ i ] = testElementStyle[ i ]; - } - testElement.appendChild( div ); - testElementParent = body || documentElement; - testElementParent.insertBefore( testElement, testElementParent.firstChild ); - - // Check if a disconnected checkbox will retain its checked - // value of true after appended to the DOM (IE6/7) - support.appendChecked = input.checked; - - support.boxModel = div.offsetWidth === 2; - - if ( "zoom" in div.style ) { - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - // (IE < 8 does this) - div.style.display = "inline"; - div.style.zoom = 1; - support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); - - // Check if elements with layout shrink-wrap their children - // (IE 6 does this) - div.style.display = ""; - div.innerHTML = "
    "; - support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); - } - - div.innerHTML = "
    t
    "; - tds = div.getElementsByTagName( "td" ); - - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - // (only IE 8 fails this test) - isSupported = ( tds[ 0 ].offsetHeight === 0 ); - - tds[ 0 ].style.display = ""; - tds[ 1 ].style.display = "none"; - - // Check if empty table cells still have offsetWidth/Height - // (IE < 8 fail this test) - support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); - div.innerHTML = ""; - - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. For more - // info see bug #3333 - // Fails in WebKit before Feb 2011 nightlies - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - if ( document.defaultView && document.defaultView.getComputedStyle ) { - marginDiv = document.createElement( "div" ); - marginDiv.style.width = "0"; - marginDiv.style.marginRight = "0"; - div.appendChild( marginDiv ); - support.reliableMarginRight = - ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; - } - - // Remove the body element we added - testElement.innerHTML = ""; - testElementParent.removeChild( testElement ); - - // Technique from Juriy Zaytsev - // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - // We only care about the case where non-standard event systems - // are used, namely in IE. Short-circuiting here helps us to - // avoid an eval call (in setAttribute) which can cause CSP - // to go haywire. See: https://developer.mozilla.org/en/Security/CSP - if ( div.attachEvent ) { - for( i in { - submit: 1, - change: 1, - focusin: 1 - } ) { - eventName = "on" + i; - isSupported = ( eventName in div ); - if ( !isSupported ) { - div.setAttribute( eventName, "return;" ); - isSupported = ( typeof div[ eventName ] === "function" ); - } - support[ i + "Bubbles" ] = isSupported; - } - } - - // Null connected elements to avoid leaks in IE - testElement = fragment = select = opt = body = marginDiv = div = input = null; - - return support; -})(); - -// Keep track of boxModel -jQuery.boxModel = jQuery.support.boxModel; - - - - -var rbrace = /^(?:\{.*\}|\[.*\])$/, - rmultiDash = /([a-z])([A-Z])/g; - -jQuery.extend({ - cache: {}, - - // Please use with caution - uuid: 0, - - // Unique for each copy of jQuery on the page - // Non-digits removed to match rinlinejQuery - expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, - - hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; - - return !!elem && !isEmptyDataObject( elem ); - }, - - data: function( elem, name, data, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, - - // We have to handle DOM nodes and JS objects differently because IE6-7 - // can't GC object references properly across the DOM-JS boundary - isNode = elem.nodeType, - - // Only DOM nodes need the global jQuery cache; JS object data is - // attached directly to the object so GC can occur automatically - cache = isNode ? jQuery.cache : elem, - - // Only defining an ID for JS objects if its cache already exists allows - // the code to shortcut on the same path as a DOM node with no cache - id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando; - - // Avoid doing any more work than we need to when trying to get data on an - // object that has no data at all - if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { - return; - } - - if ( !id ) { - // Only DOM nodes need a new unique ID for each element since their data - // ends up in the global cache - if ( isNode ) { - elem[ jQuery.expando ] = id = ++jQuery.uuid; - } else { - id = jQuery.expando; - } - } - - if ( !cache[ id ] ) { - cache[ id ] = {}; - - // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery - // metadata on plain JS objects when the object is serialized using - // JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - } - - // An object can be passed to jQuery.data instead of a key/value pair; this gets - // shallow copied over onto the existing cache - if ( typeof name === "object" || typeof name === "function" ) { - if ( pvt ) { - cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name); - } else { - cache[ id ] = jQuery.extend(cache[ id ], name); - } - } - - thisCache = cache[ id ]; - - // Internal jQuery data is stored in a separate object inside the object's data - // cache in order to avoid key collisions between internal data and user-defined - // data - if ( pvt ) { - if ( !thisCache[ internalKey ] ) { - thisCache[ internalKey ] = {}; - } - - thisCache = thisCache[ internalKey ]; - } - - if ( data !== undefined ) { - thisCache[ jQuery.camelCase( name ) ] = data; - } - - // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should - // not attempt to inspect the internal events object using jQuery.data, as this - // internal data object is undocumented and subject to change. - if ( name === "events" && !thisCache[name] ) { - return thisCache[ internalKey ] && thisCache[ internalKey ].events; - } - - return getByName ? - // Check for both converted-to-camel and non-converted data property names - thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] : - thisCache; - }, - - removeData: function( elem, name, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - var internalKey = jQuery.expando, isNode = elem.nodeType, - - // See jQuery.data for more information - cache = isNode ? jQuery.cache : elem, - - // See jQuery.data for more information - id = isNode ? elem[ jQuery.expando ] : jQuery.expando; - - // If there is already no cache entry for this object, there is no - // purpose in continuing - if ( !cache[ id ] ) { - return; - } - - if ( name ) { - var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; - - if ( thisCache ) { - delete thisCache[ name ]; - - // If there is no data left in the cache, we want to continue - // and let the cache object itself get destroyed - if ( !isEmptyDataObject(thisCache) ) { - return; - } - } - } - - // See jQuery.data for more information - if ( pvt ) { - delete cache[ id ][ internalKey ]; - - // Don't destroy the parent cache unless the internal data object - // had been the only thing left in it - if ( !isEmptyDataObject(cache[ id ]) ) { - return; - } - } - - var internalCache = cache[ id ][ internalKey ]; - - // Browsers that fail expando deletion also refuse to delete expandos on - // the window, but it will allow it on all other JS objects; other browsers - // don't care - if ( jQuery.support.deleteExpando || cache != window ) { - delete cache[ id ]; - } else { - cache[ id ] = null; - } - - // We destroyed the entire user cache at once because it's faster than - // iterating through each key, but we need to continue to persist internal - // data if it existed - if ( internalCache ) { - cache[ id ] = {}; - // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery - // metadata on plain JS objects when the object is serialized using - // JSON.stringify - if ( !isNode ) { - cache[ id ].toJSON = jQuery.noop; - } - - cache[ id ][ internalKey ] = internalCache; - - // Otherwise, we need to eliminate the expando on the node to avoid - // false lookups in the cache for entries that no longer exist - } else if ( isNode ) { - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( jQuery.support.deleteExpando ) { - delete elem[ jQuery.expando ]; - } else if ( elem.removeAttribute ) { - elem.removeAttribute( jQuery.expando ); - } else { - elem[ jQuery.expando ] = null; - } - } - }, - - // For internal use only. - _data: function( elem, name, data ) { - return jQuery.data( elem, name, data, true ); - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - if ( elem.nodeName ) { - var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; - - if ( match ) { - return !(match === true || elem.getAttribute("classid") !== match); - } - } - - return true; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var data = null; - - if ( typeof key === "undefined" ) { - if ( this.length ) { - data = jQuery.data( this[0] ); - - if ( this[0].nodeType === 1 ) { - var attr = this[0].attributes, name; - for ( var i = 0, l = attr.length; i < l; i++ ) { - name = attr[i].name; - - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.substring(5) ); - - dataAttr( this[0], name, data[ name ] ); - } - } - } - } - - return data; - - } else if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - var parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - // Try to fetch any internally stored data first - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - data = dataAttr( this[0], key, data ); - } - - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - - } else { - return this.each(function() { - var $this = jQuery( this ), - args = [ parts[0], value ]; - - $this.triggerHandler( "setData" + parts[1] + "!", args ); - jQuery.data( this, key, value ); - $this.triggerHandler( "changeData" + parts[1] + "!", args ); - }); - } - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - -function dataAttr( elem, key, data ) { - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); - - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - !jQuery.isNaN( data ) ? parseFloat( data ) : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - // Make sure we set the data so it isn't changed later - jQuery.data( elem, key, data ); - - } else { - data = undefined; - } - } - - return data; -} - -// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON -// property to be considered empty objects; this property always exists in -// order to make sure JSON.stringify does not expose internal metadata -function isEmptyDataObject( obj ) { - for ( var name in obj ) { - if ( name !== "toJSON" ) { - return false; - } - } - - return true; -} - - - - -function handleQueueMarkDefer( elem, type, src ) { - var deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - defer = jQuery.data( elem, deferDataKey, undefined, true ); - if ( defer && - ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) && - ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) { - // Give room for hard-coded callbacks to fire first - // and eventually mark/queue something else on the element - setTimeout( function() { - if ( !jQuery.data( elem, queueDataKey, undefined, true ) && - !jQuery.data( elem, markDataKey, undefined, true ) ) { - jQuery.removeData( elem, deferDataKey, true ); - defer.resolve(); - } - }, 0 ); - } -} - -jQuery.extend({ - - _mark: function( elem, type ) { - if ( elem ) { - type = (type || "fx") + "mark"; - jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true ); - } - }, - - _unmark: function( force, elem, type ) { - if ( force !== true ) { - type = elem; - elem = force; - force = false; - } - if ( elem ) { - type = type || "fx"; - var key = type + "mark", - count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 ); - if ( count ) { - jQuery.data( elem, key, count, true ); - } else { - jQuery.removeData( elem, key, true ); - handleQueueMarkDefer( elem, type, "mark" ); - } - } - }, - - queue: function( elem, type, data ) { - if ( elem ) { - type = (type || "fx") + "queue"; - var q = jQuery.data( elem, type, undefined, true ); - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !q || jQuery.isArray(data) ) { - q = jQuery.data( elem, type, jQuery.makeArray(data), true ); - } else { - q.push( data ); - } - } - return q || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - fn = queue.shift(), - defer; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - } - - if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift("inprogress"); - } - - fn.call(elem, function() { - jQuery.dequeue(elem, type); - }); - } - - if ( !queue.length ) { - jQuery.removeData( elem, type + "queue", true ); - handleQueueMarkDefer( elem, type, "queue" ); - } - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - } - - if ( data === undefined ) { - return jQuery.queue( this[0], type ); - } - return this.each(function() { - var queue = jQuery.queue( this, type, data ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; - type = type || "fx"; - - return this.queue( type, function() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); - }); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, object ) { - if ( typeof type !== "string" ) { - object = type; - type = undefined; - } - type = type || "fx"; - var defer = jQuery.Deferred(), - elements = this, - i = elements.length, - count = 1, - deferDataKey = type + "defer", - queueDataKey = type + "queue", - markDataKey = type + "mark", - tmp; - function resolve() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - } - while( i-- ) { - if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || - ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || - jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && - jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) { - count++; - tmp.done( resolve ); - } - } - resolve(); - return defer.promise(); - } -}); - - - - -var rclass = /[\n\t\r]/g, - rspace = /\s+/, - rreturn = /\r/g, - rtype = /^(?:button|input)$/i, - rfocusable = /^(?:button|input|object|select|textarea)$/i, - rclickable = /^a(?:rea)?$/i, - rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, - rinvalidChar = /\:|^on/, - formHook, boolHook; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.attr ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - }, - - prop: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.prop ); - }, - - removeProp: function( name ) { - name = jQuery.propFix[ name ] || name; - return this.each(function() { - // try/catch handles cases where IE balks (such as removing a property on window) - try { - this[ name ] = undefined; - delete this[ name ]; - } catch( e ) {} - }); - }, - - addClass: function( value ) { - var classNames, i, l, elem, - setClass, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call(this, j, this.className) ); - }); - } - - if ( value && typeof value === "string" ) { - classNames = value.split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className && classNames.length === 1 ) { - elem.className = value; - - } else { - setClass = " " + elem.className + " "; - - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { - setClass += classNames[ c ] + " "; - } - } - elem.className = jQuery.trim( setClass ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classNames, i, l, elem, className, c, cl; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call(this, j, this.className) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - classNames = (value || "").split( rspace ); - - for ( i = 0, l = this.length; i < l; i++ ) { - elem = this[ i ]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - className = (" " + elem.className + " ").replace( rclass, " " ); - for ( c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[ c ] + " ", " "); - } - elem.className = jQuery.trim( className ); - - } else { - elem.className = ""; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isBool = typeof stateVal === "boolean"; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, - i = 0, - self = jQuery( this ), - state = stateVal, - classNames = value.split( rspace ); - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space seperated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery._data( this, "__className__", this.className ); - } - - // toggle whole className - this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " "; - for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - var hooks, ret, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // handle most common string cases - ret.replace(rreturn, "") : - // handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return undefined; - } - - var isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var self = jQuery(this), val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, self.val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map(val, function ( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - }, - select: { - get: function( elem ) { - var value, - index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && - (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - // Fixes Bug #2551 -- select.val() broken in IE after form.reset() - if ( one && !values.length && options.length ) { - return jQuery( options[ index ] ).val(); - } - - return values; - }, - - set: function( elem, value ) { - var values = jQuery.makeArray( value ); - - jQuery(elem).find("option").each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - elem.selectedIndex = -1; - } - return values; - } - } - }, - - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attrFix: { - // Always normalize to ensure hook usage - tabindex: "tabIndex" - }, - - attr: function( elem, name, value, pass ) { - var nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return undefined; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery( elem )[ name ]( value ); - } - - // Fallback to prop when attributes are not supported - if ( !("getAttribute" in elem) ) { - return jQuery.prop( elem, name, value ); - } - - var ret, hooks, - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - // Normalize the name if needed - if ( notxml ) { - name = jQuery.attrFix[ name ] || name; - - hooks = jQuery.attrHooks[ name ]; - - if ( !hooks ) { - // Use boolHook for boolean attributes - if ( rboolean.test( name ) ) { - - hooks = boolHook; - - // Use formHook for forms and if the name contains certain characters - } else if ( formHook && name !== "className" && - (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) { - - hooks = formHook; - } - } - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return undefined; - - } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, "" + value ); - return value; - } - - } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - - ret = elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return ret === null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, name ) { - var propName; - if ( elem.nodeType === 1 ) { - name = jQuery.attrFix[ name ] || name; - - if ( jQuery.support.getSetAttribute ) { - // Use removeAttribute in browsers that support it - elem.removeAttribute( name ); - } else { - jQuery.attr( elem, name, "" ); - elem.removeAttributeNode( elem.getAttributeNode( name ) ); - } - - // Set corresponding property to false for boolean attributes - if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { - elem[ propName ] = false; - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { - // Setting the type on a radio button after the value resets the value in IE6-9 - // Reset value to it's default in case type is set after value - // This is for element creation - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - }, - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabIndex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - }, - // Use the value property for back compat - // Use the formHook for button elements in IE6/7 (#1954) - value: { - get: function( elem, name ) { - if ( formHook && jQuery.nodeName( elem, "button" ) ) { - return formHook.get( elem, name ); - } - return name in elem ? - elem.value : - null; - }, - set: function( elem, value, name ) { - if ( formHook && jQuery.nodeName( elem, "button" ) ) { - return formHook.set( elem, value, name ); - } - // Does not return so that setAttribute is also used - elem.value = value; - } - } - }, - - propFix: { - tabindex: "tabIndex", - readonly: "readOnly", - "for": "htmlFor", - "class": "className", - maxlength: "maxLength", - cellspacing: "cellSpacing", - cellpadding: "cellPadding", - rowspan: "rowSpan", - colspan: "colSpan", - usemap: "useMap", - frameborder: "frameBorder", - contenteditable: "contentEditable" - }, - - prop: function( elem, name, value ) { - var nType = elem.nodeType; - - // don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return undefined; - } - - var ret, hooks, - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - return (elem[ name ] = value); - } - - } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { - return ret; - - } else { - return elem[ name ]; - } - } - }, - - propHooks: {} -}); - -// Hook for boolean attributes -boolHook = { - get: function( elem, name ) { - // Align boolean attributes with corresponding properties - return jQuery.prop( elem, name ) ? - name.toLowerCase() : - undefined; - }, - set: function( elem, value, name ) { - var propName; - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - // value is true since we know at this point it's type boolean and not false - // Set boolean attributes to the same name and set the DOM property - propName = jQuery.propFix[ name ] || name; - if ( propName in elem ) { - // Only set the IDL specifically if it already exists on the element - elem[ propName ] = true; - } - - elem.setAttribute( name, name.toLowerCase() ); - } - return name; - } -}; - -// IE6/7 do not support getting/setting some attributes with get/setAttribute -if ( !jQuery.support.getSetAttribute ) { - - // propFix is more comprehensive and contains all fixes - jQuery.attrFix = jQuery.propFix; - - // Use this for any attribute on a form in IE6/7 - formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = { - get: function( elem, name ) { - var ret; - ret = elem.getAttributeNode( name ); - // Return undefined if nodeValue is empty string - return ret && ret.nodeValue !== "" ? - ret.nodeValue : - undefined; - }, - set: function( elem, value, name ) { - // Check form objects in IE (multiple bugs related) - // Only use nodeValue if the attribute node exists on the form - var ret = elem.getAttributeNode( name ); - if ( ret ) { - ret.nodeValue = value; - return value; - } - } - }; - - // Set width and height to auto instead of 0 on empty string( Bug #8150 ) - // This is for removals - jQuery.each([ "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - set: function( elem, value ) { - if ( value === "" ) { - elem.setAttribute( name, "auto" ); - return value; - } - } - }); - }); -} - - -// Some attributes require a special call on IE -if ( !jQuery.support.hrefNormalized ) { - jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { - jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { - get: function( elem ) { - var ret = elem.getAttribute( name, 2 ); - return ret === null ? undefined : ret; - } - }); - }); -} - -if ( !jQuery.support.style ) { - jQuery.attrHooks.style = { - get: function( elem ) { - // Return undefined in the case of empty string - // Normalize to lowercase since IE uppercases css property names - return elem.style.cssText.toLowerCase() || undefined; - }, - set: function( elem, value ) { - return (elem.style.cssText = "" + value); - } - }; -} - -// Safari mis-reports the default selected property of an option -// Accessing the parent's selectedIndex property fixes it -if ( !jQuery.support.optSelected ) { - jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { - get: function( elem ) { - var parent = elem.parentNode; - - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }); -} - -// Radios and checkboxes getter/setter -if ( !jQuery.support.checkOn ) { - jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - get: function( elem ) { - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - } - }; - }); -} -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0); - } - } - }); -}); - - - - -var rnamespaces = /\.(.*)$/, - rformElems = /^(?:textarea|input|select)$/i, - rperiod = /\./g, - rspaces = / /g, - rescape = /[^\w\s.|`]/g, - fcleanup = function( nm ) { - return nm.replace(rescape, "\\$&"); - }; - -/* - * A number of helper functions used for managing events. - * Many of the ideas behind this code originated from - * Dean Edwards' addEvent library. - */ -jQuery.event = { - - // Bind an event to an element - // Original by Dean Edwards - add: function( elem, types, handler, data ) { - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - if ( handler === false ) { - handler = returnFalse; - } else if ( !handler ) { - // Fixes bug #7229. Fix recommended by jdalton - return; - } - - var handleObjIn, handleObj; - - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - } - - // Make sure that the function being executed has a unique ID - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure - var elemData = jQuery._data( elem ); - - // If no elemData is found then we must be trying to bind to one of the - // banned noData elements - if ( !elemData ) { - return; - } - - var events = elemData.events, - eventHandle = elemData.handle; - - if ( !events ) { - elemData.events = events = {}; - } - - if ( !eventHandle ) { - elemData.handle = eventHandle = function( e ) { - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? - jQuery.event.handle.apply( eventHandle.elem, arguments ) : - undefined; - }; - } - - // Add elem as a property of the handle function - // This is to prevent a memory leak with non-native events in IE. - eventHandle.elem = elem; - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = types.split(" "); - - var type, i = 0, namespaces; - - while ( (type = types[ i++ ]) ) { - handleObj = handleObjIn ? - jQuery.extend({}, handleObjIn) : - { handler: handler, data: data }; - - // Namespaced event handlers - if ( type.indexOf(".") > -1 ) { - namespaces = type.split("."); - type = namespaces.shift(); - handleObj.namespace = namespaces.slice(0).sort().join("."); - - } else { - namespaces = []; - handleObj.namespace = ""; - } - - handleObj.type = type; - if ( !handleObj.guid ) { - handleObj.guid = handler.guid; - } - - // Get the current list of functions bound to this event - var handlers = events[ type ], - special = jQuery.event.special[ type ] || {}; - - // Init the event handler queue - if ( !handlers ) { - handlers = events[ type ] = []; - - // Check for a special event handler - // Only use addEventListener/attachEvent if the special - // events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add the function to the element's handler list - handlers.push( handleObj ); - - // Keep track of which events have been used, for event optimization - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, pos ) { - // don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - if ( handler === false ) { - handler = returnFalse; - } - - var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, - elemData = jQuery.hasData( elem ) && jQuery._data( elem ), - events = elemData && elemData.events; - - if ( !elemData || !events ) { - return; - } - - // types is actually an event object here - if ( types && types.type ) { - handler = types.handler; - types = types.type; - } - - // Unbind all events for the element - if ( !types || typeof types === "string" && types.charAt(0) === "." ) { - types = types || ""; - - for ( type in events ) { - jQuery.event.remove( elem, type + types ); - } - - return; - } - - // Handle multiple events separated by a space - // jQuery(...).unbind("mouseover mouseout", fn); - types = types.split(" "); - - while ( (type = types[ i++ ]) ) { - origType = type; - handleObj = null; - all = type.indexOf(".") < 0; - namespaces = []; - - if ( !all ) { - // Namespaced event handlers - namespaces = type.split("."); - type = namespaces.shift(); - - namespace = new RegExp("(^|\\.)" + - jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - eventType = events[ type ]; - - if ( !eventType ) { - continue; - } - - if ( !handler ) { - for ( j = 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( all || namespace.test( handleObj.namespace ) ) { - jQuery.event.remove( elem, origType, handleObj.handler, j ); - eventType.splice( j--, 1 ); - } - } - - continue; - } - - special = jQuery.event.special[ type ] || {}; - - for ( j = pos || 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( handler.guid === handleObj.guid ) { - // remove the given handler for the given type - if ( all || namespace.test( handleObj.namespace ) ) { - if ( pos == null ) { - eventType.splice( j--, 1 ); - } - - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - - if ( pos != null ) { - break; - } - } - } - - // remove generic event handler if no more handlers exist - if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - ret = null; - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - var handle = elemData.handle; - if ( handle ) { - handle.elem = null; - } - - delete elemData.events; - delete elemData.handle; - - if ( jQuery.isEmptyObject( elemData ) ) { - jQuery.removeData( elem, undefined, true ); - } - } - }, - - // Events that are safe to short-circuit if no handlers are attached. - // Native DOM events should not be added, they may have inline handlers. - customEvent: { - "getData": true, - "setData": true, - "changeData": true - }, - - trigger: function( event, data, elem, onlyHandlers ) { - // Event object or event type - var type = event.type || event, - namespaces = [], - exclusive; - - if ( type.indexOf("!") >= 0 ) { - // Exclusive events trigger only for the exact event (no namespaces) - type = type.slice(0, -1); - exclusive = true; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - - if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { - // No jQuery handlers for this event type, and it can't have inline handlers - return; - } - - // Caller can pass in an Event, Object, or just an event type string - event = typeof event === "object" ? - // jQuery.Event object - event[ jQuery.expando ] ? event : - // Object literal - new jQuery.Event( type, event ) : - // Just the event type (string) - new jQuery.Event( type ); - - event.type = type; - event.exclusive = exclusive; - event.namespace = namespaces.join("."); - event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)"); - - // triggerHandler() and global events don't bubble or run the default action - if ( onlyHandlers || !elem ) { - event.preventDefault(); - event.stopPropagation(); - } - - // Handle a global trigger - if ( !elem ) { - // TODO: Stop taunting the data cache; remove global events and always attach to document - jQuery.each( jQuery.cache, function() { - // internalKey variable is just used to make it easier to find - // and potentially change this stuff later; currently it just - // points to jQuery.expando - var internalKey = jQuery.expando, - internalCache = this[ internalKey ]; - if ( internalCache && internalCache.events && internalCache.events[ type ] ) { - jQuery.event.trigger( event, data, internalCache.handle.elem ); - } - }); - return; - } - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // Clean up the event in case it is being reused - event.result = undefined; - event.target = elem; - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data != null ? jQuery.makeArray( data ) : []; - data.unshift( event ); - - var cur = elem, - // IE doesn't like method names with a colon (#3533, #8272) - ontype = type.indexOf(":") < 0 ? "on" + type : ""; - - // Fire event on the current element, then bubble up the DOM tree - do { - var handle = jQuery._data( cur, "handle" ); - - event.currentTarget = cur; - if ( handle ) { - handle.apply( cur, data ); - } - - // Trigger an inline bound script - if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) { - event.result = false; - event.preventDefault(); - } - - // Bubble up to document, then to window - cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window; - } while ( cur && !event.isPropagationStopped() ); - - // If nobody prevented the default action, do it now - if ( !event.isDefaultPrevented() ) { - var old, - special = jQuery.event.special[ type ] || {}; - - if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) && - !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Can't use an .isFunction)() check here because IE6/7 fails that test. - // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch. - try { - if ( ontype && elem[ type ] ) { - // Don't re-trigger an onFOO event when we call its FOO() method - old = elem[ ontype ]; - - if ( old ) { - elem[ ontype ] = null; - } - - jQuery.event.triggered = type; - elem[ type ](); - } - } catch ( ieError ) {} - - if ( old ) { - elem[ ontype ] = old; - } - - jQuery.event.triggered = undefined; - } - } - - return event.result; - }, - - handle: function( event ) { - event = jQuery.event.fix( event || window.event ); - // Snapshot the handlers list since a called handler may add/remove events. - var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0), - run_all = !event.exclusive && !event.namespace, - args = Array.prototype.slice.call( arguments, 0 ); - - // Use the fix-ed Event rather than the (read-only) native event - args[0] = event; - event.currentTarget = this; - - for ( var j = 0, l = handlers.length; j < l; j++ ) { - var handleObj = handlers[ j ]; - - // Triggered event must 1) be non-exclusive and have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event. - if ( run_all || event.namespace_re.test( handleObj.namespace ) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handleObj.handler; - event.data = handleObj.data; - event.handleObj = handleObj; - - var ret = handleObj.handler.apply( this, args ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - - if ( event.isImmediatePropagationStopped() ) { - break; - } - } - } - return event.result; - }, - - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // store a copy of the original event object - // and "clone" to set read-only properties - var originalEvent = event; - event = jQuery.Event( originalEvent ); - - for ( var i = this.props.length, prop; i; ) { - prop = this.props[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary - if ( !event.target ) { - // Fixes #1925 where srcElement might not be defined either - event.target = event.srcElement || document; - } - - // check if target is a textnode (safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && event.fromElement ) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && event.clientX != null ) { - var eventDocument = event.target.ownerDocument || document, - doc = eventDocument.documentElement, - body = eventDocument.body; - - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Add which for key events - if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { - event.which = event.charCode != null ? event.charCode : event.keyCode; - } - - // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) - if ( !event.metaKey && event.ctrlKey ) { - event.metaKey = event.ctrlKey; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && event.button !== undefined ) { - event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - } - - return event; - }, - - // Deprecated, use jQuery.guid instead - guid: 1E8, - - // Deprecated, use jQuery.proxy instead - proxy: jQuery.proxy, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady, - teardown: jQuery.noop - }, - - live: { - add: function( handleObj ) { - jQuery.event.add( this, - liveConvert( handleObj.origType, handleObj.selector ), - jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); - }, - - remove: function( handleObj ) { - jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); - } - }, - - beforeunload: { - setup: function( data, namespaces, eventHandle ) { - // We only want to do this special case on windows - if ( jQuery.isWindow( this ) ) { - this.onbeforeunload = eventHandle; - } - }, - - teardown: function( namespaces, eventHandle ) { - if ( this.onbeforeunload === eventHandle ) { - this.onbeforeunload = null; - } - } - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, handle ); - } - }; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !this.preventDefault ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || - src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // timeStamp is buggy for some events on Firefox(#3843) - // So we won't rely on the native value - this.timeStamp = jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // otherwise set the returnValue property of the original event to false (IE) - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; - -// Checks if an event happened on an element within another element -// Used in jQuery.event.special.mouseenter and mouseleave handlers -var withinElement = function( event ) { - - // Check if mouse(over|out) are still within the same parent element - var related = event.relatedTarget, - inside = false, - eventType = event.type; - - event.type = event.data; - - if ( related !== this ) { - - if ( related ) { - inside = jQuery.contains( this, related ); - } - - if ( !inside ) { - - jQuery.event.handle.apply( this, arguments ); - - event.type = eventType; - } - } -}, - -// In case of event delegation, we only need to rename the event.type, -// liveHandler will take care of the rest. -delegate = function( event ) { - event.type = event.data; - jQuery.event.handle.apply( this, arguments ); -}; - -// Create mouseenter and mouseleave events -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - setup: function( data ) { - jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); - }, - teardown: function( data ) { - jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); - } - }; -}); - -// submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function( data, namespaces ) { - if ( !jQuery.nodeName( this, "form" ) ) { - jQuery.event.add(this, "click.specialSubmit", function( e ) { - var elem = e.target, - type = elem.type; - - if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { - trigger( "submit", this, arguments ); - } - }); - - jQuery.event.add(this, "keypress.specialSubmit", function( e ) { - var elem = e.target, - type = elem.type; - - if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { - trigger( "submit", this, arguments ); - } - }); - - } else { - return false; - } - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialSubmit" ); - } - }; - -} - -// change delegation, happens here so we have bind. -if ( !jQuery.support.changeBubbles ) { - - var changeFilters, - - getVal = function( elem ) { - var type = elem.type, val = elem.value; - - if ( type === "radio" || type === "checkbox" ) { - val = elem.checked; - - } else if ( type === "select-multiple" ) { - val = elem.selectedIndex > -1 ? - jQuery.map( elem.options, function( elem ) { - return elem.selected; - }).join("-") : - ""; - - } else if ( jQuery.nodeName( elem, "select" ) ) { - val = elem.selectedIndex; - } - - return val; - }, - - testChange = function testChange( e ) { - var elem = e.target, data, val; - - if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { - return; - } - - data = jQuery._data( elem, "_change_data" ); - val = getVal(elem); - - // the current data will be also retrieved by beforeactivate - if ( e.type !== "focusout" || elem.type !== "radio" ) { - jQuery._data( elem, "_change_data", val ); - } - - if ( data === undefined || val === data ) { - return; - } - - if ( data != null || val ) { - e.type = "change"; - e.liveFired = undefined; - jQuery.event.trigger( e, arguments[1], elem ); - } - }; - - jQuery.event.special.change = { - filters: { - focusout: testChange, - - beforedeactivate: testChange, - - click: function( e ) { - var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; - - if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) { - testChange.call( this, e ); - } - }, - - // Change has to be called before submit - // Keydown will be called before keypress, which is used in submit-event delegation - keydown: function( e ) { - var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : ""; - - if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) || - (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || - type === "select-multiple" ) { - testChange.call( this, e ); - } - }, - - // Beforeactivate happens also before the previous element is blurred - // with this event you can't trigger a change event, but you can store - // information - beforeactivate: function( e ) { - var elem = e.target; - jQuery._data( elem, "_change_data", getVal(elem) ); - } - }, - - setup: function( data, namespaces ) { - if ( this.type === "file" ) { - return false; - } - - for ( var type in changeFilters ) { - jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); - } - - return rformElems.test( this.nodeName ); - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialChange" ); - - return rformElems.test( this.nodeName ); - } - }; - - changeFilters = jQuery.event.special.change.filters; - - // Handle when the input is .focus()'d - changeFilters.focus = changeFilters.beforeactivate; -} - -function trigger( type, elem, args ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. - // Don't pass args or remember liveFired; they apply to the donor event. - var event = jQuery.extend( {}, args[ 0 ] ); - event.type = type; - event.originalEvent = {}; - event.liveFired = undefined; - jQuery.event.handle.call( elem, event ); - if ( event.isDefaultPrevented() ) { - args[ 0 ].preventDefault(); - } -} - -// Create "bubbling" focus and blur events -if ( !jQuery.support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler while someone wants focusin/focusout - var attaches = 0; - - jQuery.event.special[ fix ] = { - setup: function() { - if ( attaches++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --attaches === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - - function handler( donor ) { - // Donor event is always a native one; fix it and switch its type. - // Let focusin/out handler cancel the donor focus/blur event. - var e = jQuery.event.fix( donor ); - e.type = fix; - e.originalEvent = {}; - jQuery.event.trigger( e, null, e.target ); - if ( e.isDefaultPrevented() ) { - donor.preventDefault(); - } - } - }); -} - -jQuery.each(["bind", "one"], function( i, name ) { - jQuery.fn[ name ] = function( type, data, fn ) { - var handler; - - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ name ](key, data, type[key], fn); - } - return this; - } - - if ( arguments.length === 2 || data === false ) { - fn = data; - data = undefined; - } - - if ( name === "one" ) { - handler = function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }; - handler.guid = fn.guid || jQuery.guid++; - } else { - handler = fn; - } - - if ( type === "unload" && name !== "one" ) { - this.one( type, data, fn ); - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.add( this[i], type, handler, data ); - } - } - - return this; - }; -}); - -jQuery.fn.extend({ - unbind: function( type, fn ) { - // Handle object literals - if ( typeof type === "object" && !type.preventDefault ) { - for ( var key in type ) { - this.unbind(key, type[key]); - } - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.remove( this[i], type, fn ); - } - } - - return this; - }, - - delegate: function( selector, types, data, fn ) { - return this.live( types, data, fn, selector ); - }, - - undelegate: function( selector, types, fn ) { - if ( arguments.length === 0 ) { - return this.unbind( "live" ); - - } else { - return this.die( types, null, fn, selector ); - } - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - - triggerHandler: function( type, data ) { - if ( this[0] ) { - return jQuery.event.trigger( type, data, this[0], true ); - } - }, - - toggle: function( fn ) { - // Save reference to arguments for access in closure - var args = arguments, - guid = fn.guid || jQuery.guid++, - i = 0, - toggler = function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - }; - - // link all the functions, so any of them can unbind this click handler - toggler.guid = guid; - while ( i < args.length ) { - args[ i++ ].guid = guid; - } - - return this.click( toggler ); - }, - - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); - -var liveMap = { - focus: "focusin", - blur: "focusout", - mouseenter: "mouseover", - mouseleave: "mouseout" -}; - -jQuery.each(["live", "die"], function( i, name ) { - jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { - var type, i = 0, match, namespaces, preType, - selector = origSelector || this.selector, - context = origSelector ? this : jQuery( this.context ); - - if ( typeof types === "object" && !types.preventDefault ) { - for ( var key in types ) { - context[ name ]( key, data, types[key], selector ); - } - - return this; - } - - if ( name === "die" && !types && - origSelector && origSelector.charAt(0) === "." ) { - - context.unbind( origSelector ); - - return this; - } - - if ( data === false || jQuery.isFunction( data ) ) { - fn = data || returnFalse; - data = undefined; - } - - types = (types || "").split(" "); - - while ( (type = types[ i++ ]) != null ) { - match = rnamespaces.exec( type ); - namespaces = ""; - - if ( match ) { - namespaces = match[0]; - type = type.replace( rnamespaces, "" ); - } - - if ( type === "hover" ) { - types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); - continue; - } - - preType = type; - - if ( liveMap[ type ] ) { - types.push( liveMap[ type ] + namespaces ); - type = type + namespaces; - - } else { - type = (liveMap[ type ] || type) + namespaces; - } - - if ( name === "live" ) { - // bind live handler - for ( var j = 0, l = context.length; j < l; j++ ) { - jQuery.event.add( context[j], "live." + liveConvert( type, selector ), - { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); - } - - } else { - // unbind live handler - context.unbind( "live." + liveConvert( type, selector ), fn ); - } - } - - return this; - }; -}); - -function liveHandler( event ) { - var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret, - elems = [], - selectors = [], - events = jQuery._data( this, "events" ); - - // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911) - if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) { - return; - } - - if ( event.namespace ) { - namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - event.liveFired = this; - - var live = events.live.slice(0); - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { - selectors.push( handleObj.selector ); - - } else { - live.splice( j--, 1 ); - } - } - - match = jQuery( event.target ).closest( selectors, event.currentTarget ); - - for ( i = 0, l = match.length; i < l; i++ ) { - close = match[i]; - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) { - elem = close.elem; - related = null; - - // Those two events require additional checking - if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { - event.type = handleObj.preType; - related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; - - // Make sure not to accidentally match a child element with the same selector - if ( related && jQuery.contains( elem, related ) ) { - related = elem; - } - } - - if ( !related || related !== elem ) { - elems.push({ elem: elem, handleObj: handleObj, level: close.level }); - } - } - } - } - - for ( i = 0, l = elems.length; i < l; i++ ) { - match = elems[i]; - - if ( maxLevel && match.level > maxLevel ) { - break; - } - - event.currentTarget = match.elem; - event.data = match.handleObj.data; - event.handleObj = match.handleObj; - - ret = match.handleObj.origHandler.apply( match.elem, arguments ); - - if ( ret === false || event.isPropagationStopped() ) { - maxLevel = match.level; - - if ( ret === false ) { - stop = false; - } - if ( event.isImmediatePropagationStopped() ) { - break; - } - } - } - - return stop; -} - -function liveConvert( type, selector ) { - return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&"); -} - -jQuery.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").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - if ( fn == null ) { - fn = data; - data = null; - } - - return arguments.length > 0 ? - this.bind( name, data, fn ) : - this.trigger( name ); - }; - - if ( jQuery.attrFn ) { - jQuery.attrFn[ name ] = true; - } -}); - - - -/*! - * Sizzle CSS Selector Engine - * Copyright 2011, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true, - rBackslash = /\\/g, - rNonWord = /\W/; - -// Here we check if the JavaScript engine is using some sort of -// optimization where it does not always call our comparision -// function. If that is the case, discard the hasDuplicate value. -// Thus far that includes Google Chrome. -[0, 0].sort(function() { - baseHasDuplicate = false; - return 0; -}); - -var Sizzle = function( selector, context, results, seed ) { - results = results || []; - context = context || document; - - var origContext = context; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var m, set, checkSet, extra, ret, cur, pop, i, - prune = true, - contextXML = Sizzle.isXML( context ), - parts = [], - soFar = selector; - - // Reset the position of the chunker regexp (start from head) - do { - chunker.exec( "" ); - m = chunker.exec( soFar ); - - if ( m ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - } while ( m ); - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); - - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) { - selector += parts.shift(); - } - - set = posProcess( selector, set ); - } - } - - } else { - // Take a shortcut and set the context if the root selector is an ID - // (but not if it'll be faster if the inner selector is an ID) - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - - ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? - Sizzle.filter( ret.expr, ret.set )[0] : - ret.set[0]; - } - - if ( context ) { - ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - - set = ret.expr ? - Sizzle.filter( ret.expr, ret.set ) : - ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray( set ); - - } else { - prune = false; - } - - while ( parts.length ) { - cur = parts.pop(); - pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - Sizzle.error( cur || selector ); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - - } else if ( context && context.nodeType === 1 ) { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - - } else { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; -}; - -Sizzle.uniqueSort = function( results ) { - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort( sortOrder ); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[ i - 1 ] ) { - results.splice( i--, 1 ); - } - } - } - } - - return results; -}; - -Sizzle.matches = function( expr, set ) { - return Sizzle( expr, null, null, set ); -}; - -Sizzle.matchesSelector = function( node, expr ) { - return Sizzle( expr, null, null, [node] ).length > 0; -}; - -Sizzle.find = function( expr, context, isXML ) { - var set; - - if ( !expr ) { - return []; - } - - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var match, - type = Expr.order[i]; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice( 1, 1 ); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace( rBackslash, "" ); - set = Expr.find[ type ]( match, context, isXML ); - - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = typeof context.getElementsByTagName !== "undefined" ? - context.getElementsByTagName( "*" ) : - []; - } - - return { set: set, expr: expr }; -}; - -Sizzle.filter = function( expr, set, inplace, not ) { - var match, anyFound, - old = expr, - result = [], - curLoop = set, - isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); - - while ( expr && set.length ) { - for ( var type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var found, item, - filter = Expr.filter[ type ], - left = match[1]; - - anyFound = false; - - match.splice(1,1); - - if ( left.substr( left.length - 1 ) === "\\" ) { - continue; - } - - if ( curLoop === result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( var i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - var pass = not ^ !!found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - - } else { - curLoop[i] = false; - } - - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - // Improper expression - if ( expr === old ) { - if ( anyFound == null ) { - Sizzle.error( expr ); - - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; - -Sizzle.error = function( msg ) { - throw "Syntax error, unrecognized expression: " + msg; -}; - -var Expr = Sizzle.selectors = { - order: [ "ID", "NAME", "TAG" ], - - match: { - ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ - }, - - leftMatch: {}, - - attrMap: { - "class": "className", - "for": "htmlFor" - }, - - attrHandle: { - href: function( elem ) { - return elem.getAttribute( "href" ); - }, - type: function( elem ) { - return elem.getAttribute( "type" ); - } - }, - - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !rNonWord.test( part ), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag ) { - part = part.toLowerCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - - ">": function( checkSet, part ) { - var elem, - isPartStr = typeof part === "string", - i = 0, - l = checkSet.length; - - if ( isPartStr && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - - } else { - for ( ; i < l; i++ ) { - elem = checkSet[i]; - - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - - "": function(checkSet, part, isXML){ - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); - }, - - "~": function( checkSet, part, isXML ) { - var nodeCheck, - doneName = done++, - checkFn = dirCheck; - - if ( typeof part === "string" && !rNonWord.test( part ) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); - } - }, - - find: { - ID: function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }, - - NAME: function( match, context ) { - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], - results = context.getElementsByName( match[1] ); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - - TAG: function( match, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( match[1] ); - } - } - }, - preFilter: { - CLASS: function( match, curLoop, inplace, result, not, isXML ) { - match = " " + match[1].replace( rBackslash, "" ) + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - - ID: function( match ) { - return match[1].replace( rBackslash, "" ); - }, - - TAG: function( match, curLoop ) { - return match[1].replace( rBackslash, "" ).toLowerCase(); - }, - - CHILD: function( match ) { - if ( match[1] === "nth" ) { - if ( !match[2] ) { - Sizzle.error( match[0] ); - } - - match[2] = match[2].replace(/^\+|\s*/g, ''); - - // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( - match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - // calculate the numbers (first)n+(last) including if they are negative - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - else if ( match[2] ) { - Sizzle.error( match[0] ); - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - - ATTR: function( match, curLoop, inplace, result, not, isXML ) { - var name = match[1] = match[1].replace( rBackslash, "" ); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - // Handle if an un-quoted value was used - match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - - PSEUDO: function( match, curLoop, inplace, result, not ) { - if ( match[1] === "not" ) { - // If we're dealing with a complex expression, or a simple one - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - - if ( !inplace ) { - result.push.apply( result, ret ); - } - - return false; - } - - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - - POS: function( match ) { - match.unshift( true ); - - return match; - } - }, - - filters: { - enabled: function( elem ) { - return elem.disabled === false && elem.type !== "hidden"; - }, - - disabled: function( elem ) { - return elem.disabled === true; - }, - - checked: function( elem ) { - return elem.checked === true; - }, - - selected: function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - parent: function( elem ) { - return !!elem.firstChild; - }, - - empty: function( elem ) { - return !elem.firstChild; - }, - - has: function( elem, i, match ) { - return !!Sizzle( match[3], elem ).length; - }, - - header: function( elem ) { - return (/h\d/i).test( elem.nodeName ); - }, - - text: function( elem ) { - var attr = elem.getAttribute( "type" ), type = elem.type; - // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) - // use getAttribute instead to test this case - return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); - }, - - radio: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; - }, - - checkbox: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; - }, - - file: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; - }, - - password: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; - }, - - submit: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "submit" === elem.type; - }, - - image: function( elem ) { - return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; - }, - - reset: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && "reset" === elem.type; - }, - - button: function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && "button" === elem.type || name === "button"; - }, - - input: function( elem ) { - return (/input|select|textarea|button/i).test( elem.nodeName ); - }, - - focus: function( elem ) { - return elem === elem.ownerDocument.activeElement; - } - }, - setFilters: { - first: function( elem, i ) { - return i === 0; - }, - - last: function( elem, i, match, array ) { - return i === array.length - 1; - }, - - even: function( elem, i ) { - return i % 2 === 0; - }, - - odd: function( elem, i ) { - return i % 2 === 1; - }, - - lt: function( elem, i, match ) { - return i < match[3] - 0; - }, - - gt: function( elem, i, match ) { - return i > match[3] - 0; - }, - - nth: function( elem, i, match ) { - return match[3] - 0 === i; - }, - - eq: function( elem, i, match ) { - return match[3] - 0 === i; - } - }, - filter: { - PSEUDO: function( elem, match, i, array ) { - var name = match[1], - filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; - - } else if ( name === "not" ) { - var not = match[3]; - - for ( var j = 0, l = not.length; j < l; j++ ) { - if ( not[j] === elem ) { - return false; - } - } - - return true; - - } else { - Sizzle.error( name ); - } - }, - - CHILD: function( elem, match ) { - var type = match[1], - node = elem; - - switch ( type ) { - case "only": - case "first": - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - if ( type === "first" ) { - return true; - } - - node = elem; - - case "last": - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - - return true; - - case "nth": - var first = match[2], - last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; - - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - - parent.sizcache = doneName; - } - - var diff = elem.nodeIndex - last; - - if ( first === 0 ) { - return diff === 0; - - } else { - return ( diff % first === 0 && diff / first >= 0 ); - } - } - }, - - ID: function( elem, match ) { - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - - TAG: function( elem, match ) { - return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; - }, - - CLASS: function( elem, match ) { - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - - ATTR: function( elem, match ) { - var name = match[1], - result = Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value !== check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - - POS: function( elem, match, i, array ) { - var name = match[2], - filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; - -var origPOS = Expr.match.POS, - fescape = function(all, num){ - return "\\" + (num - 0 + 1); - }; - -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); -} - -var makeArray = function( array, results ) { - array = Array.prototype.slice.call( array, 0 ); - - if ( results ) { - results.push.apply( results, array ); - return results; - } - - return array; -}; - -// Perform a simple check to determine if the browser is capable of -// converting a NodeList to an array using builtin methods. -// Also verifies that the returned array holds DOM nodes -// (which is not the case in the Blackberry browser) -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; - -// Provide a fallback method if it does not work -} catch( e ) { - makeArray = function( array, results ) { - var i = 0, - ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - - } else { - if ( typeof array.length === "number" ) { - for ( var l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - - } else { - for ( ; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder, siblingCheck; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - return a.compareDocumentPosition ? -1 : 1; - } - - return a.compareDocumentPosition(b) & 4 ? -1 : 1; - }; - -} else { - sortOrder = function( a, b ) { - // The nodes are identical, we can exit early - if ( a === b ) { - hasDuplicate = true; - return 0; - - // Fallback to using sourceIndex (in IE) if it's available on both nodes - } else if ( a.sourceIndex && b.sourceIndex ) { - return a.sourceIndex - b.sourceIndex; - } - - var al, bl, - ap = [], - bp = [], - aup = a.parentNode, - bup = b.parentNode, - cur = aup; - - // If the nodes are siblings (or identical) we can do a quick check - if ( aup === bup ) { - return siblingCheck( a, b ); - - // If no parents were found then the nodes are disconnected - } else if ( !aup ) { - return -1; - - } else if ( !bup ) { - return 1; - } - - // Otherwise they're somewhere else in the tree so we need - // to build up a full list of the parentNodes for comparison - while ( cur ) { - ap.unshift( cur ); - cur = cur.parentNode; - } - - cur = bup; - - while ( cur ) { - bp.unshift( cur ); - cur = cur.parentNode; - } - - al = ap.length; - bl = bp.length; - - // Start walking down the tree looking for a discrepancy - for ( var i = 0; i < al && i < bl; i++ ) { - if ( ap[i] !== bp[i] ) { - return siblingCheck( ap[i], bp[i] ); - } - } - - // We ended someplace up the tree so do a sibling check - return i === al ? - siblingCheck( a, bp[i], -1 ) : - siblingCheck( ap[i], b, 1 ); - }; - - siblingCheck = function( a, b, ret ) { - if ( a === b ) { - return ret; - } - - var cur = a.nextSibling; - - while ( cur ) { - if ( cur === b ) { - return -1; - } - - cur = cur.nextSibling; - } - - return 1; - }; -} - -// Utility function for retreiving the text value of an array of DOM nodes -Sizzle.getText = function( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += Sizzle.getText( elem.childNodes ); - } - } - - return ret; -}; - -// Check to see if the browser returns elements by name when -// querying by getElementById (and provide a workaround) -(function(){ - // We're going to inject a fake input element with a specified name - var form = document.createElement("div"), - id = "script" + (new Date()).getTime(), - root = document.documentElement; - - form.innerHTML = ""; - - // Inject it into the root element, check its status, and remove it quickly - root.insertBefore( form, root.firstChild ); - - // The workaround has to do additional checks after a getElementById - // Which slows things down for other browsers (hence the branching) - if ( document.getElementById( id ) ) { - Expr.find.ID = function( match, context, isXML ) { - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - - return m ? - m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? - [m] : - undefined : - []; - } - }; - - Expr.filter.ID = function( elem, match ) { - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - } - - root.removeChild( form ); - - // release memory in IE - root = form = null; -})(); - -(function(){ - // Check to see if the browser returns only elements - // when doing getElementsByTagName("*") - - // Create a fake element - var div = document.createElement("div"); - div.appendChild( document.createComment("") ); - - // Make sure no comments are found - if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function( match, context ) { - var results = context.getElementsByTagName( match[1] ); - - // Filter out possible comments - if ( match[1] === "*" ) { - var tmp = []; - - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } - - results = tmp; - } - - return results; - }; - } - - // Check to see if an attribute returns normalized href attributes - div.innerHTML = ""; - - if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - div.firstChild.getAttribute("href") !== "#" ) { - - Expr.attrHandle.href = function( elem ) { - return elem.getAttribute( "href", 2 ); - }; - } - - // release memory in IE - div = null; -})(); - -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, - div = document.createElement("div"), - id = "__sizzle__"; - - div.innerHTML = "

    "; - - // Safari can't handle uppercase or unicode characters when - // in quirks mode. - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function( query, context, extra, seed ) { - context = context || document; - - // Only use querySelectorAll on non-XML documents - // (ID selectors don't work in non-HTML documents) - if ( !seed && !Sizzle.isXML(context) ) { - // See if we find a selector to speed up - var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); - - if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { - // Speed-up: Sizzle("TAG") - if ( match[1] ) { - return makeArray( context.getElementsByTagName( query ), extra ); - - // Speed-up: Sizzle(".CLASS") - } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { - return makeArray( context.getElementsByClassName( match[2] ), extra ); - } - } - - if ( context.nodeType === 9 ) { - // Speed-up: Sizzle("body") - // The body element only exists once, optimize finding it - if ( query === "body" && context.body ) { - return makeArray( [ context.body ], extra ); - - // Speed-up: Sizzle("#ID") - } else if ( match && match[3] ) { - var elem = context.getElementById( match[3] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id === match[3] ) { - return makeArray( [ elem ], extra ); - } - - } else { - return makeArray( [], extra ); - } - } - - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(qsaError) {} - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - var oldContext = context, - old = context.getAttribute( "id" ), - nid = old || id, - hasParent = context.parentNode, - relativeHierarchySelector = /^\s*[+~]/.test( query ); - - if ( !old ) { - context.setAttribute( "id", nid ); - } else { - nid = nid.replace( /'/g, "\\$&" ); - } - if ( relativeHierarchySelector && hasParent ) { - context = context.parentNode; - } - - try { - if ( !relativeHierarchySelector || hasParent ) { - return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); - } - - } catch(pseudoError) { - } finally { - if ( !old ) { - oldContext.removeAttribute( "id" ); - } - } - } - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - // release memory in IE - div = null; - })(); -} - -(function(){ - var html = document.documentElement, - matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; - - if ( matches ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9 fails this) - var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), - pseudoWorks = false; - - try { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( document.documentElement, "[test!='']:sizzle" ); - - } catch( pseudoError ) { - pseudoWorks = true; - } - - Sizzle.matchesSelector = function( node, expr ) { - // Make sure that attribute selectors are quoted - expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); - - if ( !Sizzle.isXML( node ) ) { - try { - if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { - var ret = matches.call( node, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || !disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9, so check for that - node.document && node.document.nodeType !== 11 ) { - return ret; - } - } - } catch(e) {} - } - - return Sizzle(expr, null, null, [node]).length > 0; - }; - } -})(); - -(function(){ - var div = document.createElement("div"); - - div.innerHTML = "
    "; - - // Opera can't find a second classname (in 9.6) - // Also, make sure that getElementsByClassName actually exists - if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { - return; - } - - // Safari caches class attributes, doesn't catch changes (in 3.2) - div.lastChild.className = "e"; - - if ( div.getElementsByClassName("e").length === 1 ) { - return; - } - - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function( match, context, isXML ) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; - - // release memory in IE - div = null; -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( elem.nodeName.toLowerCase() === cur ) { - match = elem; - break; - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - - if ( elem ) { - var match = false; - - elem = elem[dir]; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -if ( document.documentElement.contains ) { - Sizzle.contains = function( a, b ) { - return a !== b && (a.contains ? a.contains(b) : true); - }; - -} else if ( document.documentElement.compareDocumentPosition ) { - Sizzle.contains = function( a, b ) { - return !!(a.compareDocumentPosition(b) & 16); - }; - -} else { - Sizzle.contains = function() { - return false; - }; -} - -Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; - - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -var posProcess = function( selector, context ) { - var match, - tmpSet = [], - later = "", - root = context.nodeType ? [context] : context; - - // Position selectors must be done after the filter - // And so must :not(positional) so we move all PSEUDOs to the end - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } - - selector = Expr.relative[selector] ? selector + "*" : selector; - - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet ); - } - - return Sizzle.filter( later, tmpSet ); -}; - -// EXPOSE -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})(); - - -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - isSimple = /^.[^:#\[\.,]*$/, - slice = Array.prototype.slice, - POS = jQuery.expr.match.POS, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend({ - find: function( selector ) { - var self = this, - i, l; - - if ( typeof selector !== "string" ) { - return jQuery( selector ).filter(function() { - for ( i = 0, l = self.length; i < l; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }); - } - - var ret = this.pushStack( "", "find", selector ), - length, n, r; - - for ( i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); - - if ( i > 0 ) { - // Make sure that the results are unique - for ( n = length; n < ret.length; n++ ) { - for ( r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - var targets = jQuery( target ); - return this.filter(function() { - for ( var i = 0, l = targets.length; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - return !!selector && ( typeof selector === "string" ? - jQuery.filter( selector, this ).length > 0 : - this.filter( selector ).length > 0 ); - }, - - closest: function( selectors, context ) { - var ret = [], i, l, cur = this[0]; - - // Array - if ( jQuery.isArray( selectors ) ) { - var match, selector, - matches = {}, - level = 1; - - if ( cur && selectors.length ) { - for ( i = 0, l = selectors.length; i < l; i++ ) { - selector = selectors[i]; - - if ( !matches[ selector ] ) { - matches[ selector ] = POS.test( selector ) ? - jQuery( selector, context || this.context ) : - selector; - } - } - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( selector in matches ) { - match = matches[ selector ]; - - if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) { - ret.push({ selector: selector, elem: cur, level: level }); - } - } - - cur = cur.parentNode; - level++; - } - } - - return ret; - } - - // String - var pos = POS.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( i = 0, l = this.length; i < l; i++ ) { - cur = this[i]; - - while ( cur ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - - } else { - cur = cur.parentNode; - if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { - break; - } - } - } - } - - ret = ret.length > 1 ? jQuery.unique( ret ) : ret; - - return this.pushStack( ret, "closest", selectors ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); - } - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context ) : - jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - return this.add( this.prevObject ); - } -}); - -// A painfully simple check to see if an element is disconnected -// from a document (should be improved, where feasible). -function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return jQuery.nth( elem, 2, "nextSibling" ); - }, - prev: function( elem ) { - return jQuery.nth( elem, 2, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.makeArray( elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ), - // The variable 'args' was introduced in - // https://github.com/jquery/jquery/commit/52a0238 - // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed. - // http://code.google.com/p/v8/issues/detail?id=1050 - args = slice.call(arguments); - - if ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, name, args.join(",") ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - nth: function( cur, result, dir, elem ) { - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, keep ) { - - // Can't pass null or undefined to indexOf in Firefox 4 - // Set to 0 to skip string check - qualifier = qualifier || 0; - - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -} - - - - -var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, - rtagName = /<([\w:]+)/, - rtbody = /", "" ], - legend: [ 1, "
    ", "
    " ], - thead: [ 1, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - col: [ 2, "", "
    " ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize and - - - - - - diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/example/wildcards.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/example/wildcards.js deleted file mode 100644 index 1fdac20..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/example/wildcards.js +++ /dev/null @@ -1,10 +0,0 @@ - -var debug = { - foo: require('../')('test:foo'), - bar: require('../')('test:bar'), - baz: require('../')('test:baz') -}; - -debug.foo('foo') -debug.bar('bar') -debug.baz('baz') \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/example/worker.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/example/worker.js deleted file mode 100644 index 7f6d288..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/example/worker.js +++ /dev/null @@ -1,22 +0,0 @@ - -// DEBUG=* node example/worker -// DEBUG=worker:* node example/worker -// DEBUG=worker:a node example/worker -// DEBUG=worker:b node example/worker - -var a = require('../')('worker:a') - , b = require('../')('worker:b'); - -function work() { - a('doing lots of uninteresting work'); - setTimeout(work, Math.random() * 1000); -} - -work(); - -function workb() { - b('doing some work'); - setTimeout(workb, Math.random() * 2000); -} - -workb(); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/index.js deleted file mode 100644 index e02c13b..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/index.js +++ /dev/null @@ -1,5 +0,0 @@ -if ('undefined' == typeof window) { - module.exports = require('./lib/debug'); -} else { - module.exports = require('./debug'); -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/lib/debug.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/lib/debug.js deleted file mode 100644 index 0b07aa1..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/lib/debug.js +++ /dev/null @@ -1,134 +0,0 @@ -/** - * Module dependencies. - */ - -var tty = require('tty'); - -/** - * Expose `debug()` as the module. - */ - -module.exports = debug; - -/** - * Enabled debuggers. - */ - -var names = [] - , skips = []; - -(process.env.DEBUG || '') - .split(/[\s,]+/) - .forEach(function(name){ - name = name.replace('*', '.*?'); - if (name[0] === '-') { - skips.push(new RegExp('^' + name.substr(1) + '$')); - } else { - names.push(new RegExp('^' + name + '$')); - } - }); - -/** - * Colors. - */ - -var colors = [6, 2, 3, 4, 5, 1]; - -/** - * Previous debug() call. - */ - -var prev = {}; - -/** - * Previously assigned color. - */ - -var prevColor = 0; - -/** - * Is stdout a TTY? Colored output is disabled when `true`. - */ - -var isatty = tty.isatty(2); - -/** - * Select a color. - * - * @return {Number} - * @api private - */ - -function color() { - return colors[prevColor++ % colors.length]; -} - -/** - * Humanize the given `ms`. - * - * @param {Number} m - * @return {String} - * @api private - */ - -function humanize(ms) { - var sec = 1000 - , min = 60 * 1000 - , hour = 60 * min; - - if (ms >= hour) return (ms / hour).toFixed(1) + 'h'; - if (ms >= min) return (ms / min).toFixed(1) + 'm'; - if (ms >= sec) return (ms / sec | 0) + 's'; - return ms + 'ms'; -} - -/** - * Create a debugger with the given `name`. - * - * @param {String} name - * @return {Type} - * @api public - */ - -function debug(name) { - function disabled(){} - disabled.enabled = false; - - var match = skips.some(function(re){ - return re.test(name); - }); - - if (match) return disabled; - - match = names.some(function(re){ - return re.test(name); - }); - - if (!match) return disabled; - var c = color(); - - function colored(fmt) { - var curr = new Date; - var ms = curr - (prev[name] || curr); - prev[name] = curr; - - fmt = ' \u001b[9' + c + 'm' + name + ' ' - + '\u001b[3' + c + 'm\u001b[90m' - + fmt + '\u001b[3' + c + 'm' - + ' +' + humanize(ms) + '\u001b[0m'; - - console.error.apply(this, arguments); - } - - function plain(fmt) { - fmt = new Date().toUTCString() - + ' ' + name + ' ' + fmt; - console.error.apply(this, arguments); - } - - colored.enabled = plain.enabled = true; - - return isatty || process.env.DEBUG_COLORS - ? colored - : plain; -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/package.json deleted file mode 100644 index 56e2714..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/debug/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "debug", - "version": "0.7.2", - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/debug.git" - }, - "description": "small debugging utility", - "keywords": [ - "debug", - "log", - "debugger" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": {}, - "devDependencies": { - "mocha": "*" - }, - "main": "lib/debug.js", - "browserify": "debug.js", - "engines": { - "node": "*" - }, - "component": { - "scripts": { - "debug/index.js": "index.js", - "debug/debug.js": "debug.js" - } - }, - "readme": "\n# debug\n\n tiny node.js debugging utility modelled after node core's debugging technique.\n\n## Installation\n\n```\n$ npm install debug\n```\n\n## Usage\n\n With `debug` you simply invoke the exported function to generate your debug function, passing it a name which will determine if a noop function is returned, or a decorated `console.error`, so all of the `console` format string goodies you're used to work fine. A unique color is selected per-function for visibility.\n \nExample _app.js_:\n\n```js\nvar debug = require('debug')('http')\n , http = require('http')\n , name = 'My App';\n\n// fake app\n\ndebug('booting %s', name);\n\nhttp.createServer(function(req, res){\n debug(req.method + ' ' + req.url);\n res.end('hello\\n');\n}).listen(3000, function(){\n debug('listening');\n});\n\n// fake worker of some kind\n\nrequire('./worker');\n```\n\nExample _worker.js_:\n\n```js\nvar debug = require('debug')('worker');\n\nsetInterval(function(){\n debug('doing some work');\n}, 1000);\n```\n\n The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:\n\n ![debug http and worker](http://f.cl.ly/items/18471z1H402O24072r1J/Screenshot.png)\n\n ![debug worker](http://f.cl.ly/items/1X413v1a3M0d3C2c1E0i/Screenshot.png)\n\n## Millisecond diff\n\n When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the \"+NNNms\" will show you how much time was spent between calls.\n\n ![](http://f.cl.ly/items/2i3h1d3t121M2Z1A3Q0N/Screenshot.png)\n\n When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:\n \n ![](http://f.cl.ly/items/112H3i0e0o0P0a2Q2r11/Screenshot.png)\n\n## Conventions\n\n If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use \":\" to separate features. For example \"bodyParser\" from Connect would then be \"connect:bodyParser\". \n\n## Wildcards\n\n The \"*\" character may be used as a wildcard. Suppose for example your library has debuggers named \"connect:bodyParser\", \"connect:compress\", \"connect:session\", instead of listing all three with `DEBUG=connect:bodyParser,connect.compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.\n\n You can also exclude specific debuggers by prefixing them with a \"-\" character. For example, `DEBUG=* -connect:*` would include all debuggers except those starting with \"connect:\".\n\n## Browser support\n\n Debug works in the browser as well, currently persisted by `localStorage`. For example if you have `worker:a` and `worker:b` as shown below, and wish to debug both type `debug.enable('worker:*')` in the console and refresh the page, this will remain until you disable with `debug.disable()`. \n\n```js\na = debug('worker:a');\nb = debug('worker:b');\n\nsetInterval(function(){\n a('doing some work');\n}, 1000);\n\nsetInterval(function(){\n a('doing some work');\n}, 1200);\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "_id": "debug@0.7.2", - "_from": "debug@*" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/.npmignore deleted file mode 100644 index 9daeafb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/Makefile b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/Makefile deleted file mode 100644 index 8e8640f..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --reporter spec \ - --require should - -.PHONY: test \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/Readme.md deleted file mode 100644 index 273130d..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/Readme.md +++ /dev/null @@ -1,32 +0,0 @@ - -# node-fresh - - HTTP response freshness testing - -## fresh(req, res) - - Check freshness of `req` and `res` headers. - - When the cache is "fresh" __true__ is returned, - otherwise __false__ is returned to indicate that - the cache is now stale. - -## Example: - -```js -var req = { 'if-none-match': 'tobi' }; -var res = { 'etag': 'luna' }; -fresh(req, res); -// => false - -var req = { 'if-none-match': 'tobi' }; -var res = { 'etag': 'tobi' }; -fresh(req, res); -// => true -``` - -## Installation - -``` -$ npm install fresh -``` \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/index.js deleted file mode 100644 index b2f4d41..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/index.js +++ /dev/null @@ -1,49 +0,0 @@ - -/** - * Expose `fresh()`. - */ - -module.exports = fresh; - -/** - * Check freshness of `req` and `res` headers. - * - * When the cache is "fresh" __true__ is returned, - * otherwise __false__ is returned to indicate that - * the cache is now stale. - * - * @param {Object} req - * @param {Object} res - * @return {Boolean} - * @api public - */ - -function fresh(req, res) { - // defaults - var etagMatches = true; - var notModified = true; - - // fields - var modifiedSince = req['if-modified-since']; - var noneMatch = req['if-none-match']; - var lastModified = res['last-modified']; - var etag = res['etag']; - - // unconditional request - if (!modifiedSince && !noneMatch) return false; - - // parse if-none-match - if (noneMatch) noneMatch = noneMatch.split(/ *, */); - - // if-none-match - if (noneMatch) etagMatches = ~noneMatch.indexOf(etag) || '*' == noneMatch[0]; - - // if-modified-since - if (modifiedSince) { - modifiedSince = new Date(modifiedSince); - lastModified = new Date(lastModified); - notModified = lastModified <= modifiedSince; - } - - return !! (etagMatches && notModified); -} \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/package.json deleted file mode 100644 index d9fddb2..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/fresh/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "fresh", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "description": "HTTP response freshness testing", - "version": "0.1.0", - "main": "index.js", - "dependencies": {}, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "readme": "\n# node-fresh\n\n HTTP response freshness testing\n\n## fresh(req, res)\n\n Check freshness of `req` and `res` headers.\n\n When the cache is \"fresh\" __true__ is returned,\n otherwise __false__ is returned to indicate that\n the cache is now stale.\n\n## Example:\n\n```js\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'luna' };\nfresh(req, res);\n// => false\n\nvar req = { 'if-none-match': 'tobi' };\nvar res = { 'etag': 'tobi' };\nfresh(req, res);\n// => true\n```\n\n## Installation\n\n```\n$ npm install fresh\n```", - "readmeFilename": "Readme.md", - "_id": "fresh@0.1.0", - "_from": "fresh@0.1.0" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/methods/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/methods/index.js deleted file mode 100644 index 297d022..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/methods/index.js +++ /dev/null @@ -1,26 +0,0 @@ - -module.exports = [ - 'get' - , 'post' - , 'put' - , 'head' - , 'delete' - , 'options' - , 'trace' - , 'copy' - , 'lock' - , 'mkcol' - , 'move' - , 'propfind' - , 'proppatch' - , 'unlock' - , 'report' - , 'mkactivity' - , 'checkout' - , 'merge' - , 'm-search' - , 'notify' - , 'subscribe' - , 'unsubscribe' - , 'patch' -]; \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/methods/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/methods/package.json deleted file mode 100644 index 341b226..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/methods/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "methods", - "version": "0.0.1", - "description": "HTTP methods that node supports", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [ - "http", - "methods" - ], - "author": { - "name": "TJ Holowaychuk" - }, - "license": "MIT", - "_id": "methods@0.0.1", - "readme": "ERROR: No README.md file found!", - "_from": "methods@0.0.1" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/.npmignore deleted file mode 100644 index 9303c34..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -npm-debug.log \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/.travis.yml b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/.travis.yml deleted file mode 100644 index 84fd7ca..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - 0.9 diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/LICENSE b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1ae..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/examples/pow.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e692421..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/index.js deleted file mode 100644 index fda6de8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/index.js +++ /dev/null @@ -1,82 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, mode, f, made) { - if (typeof mode === 'function' || mode === undefined) { - f = mode; - mode = 0777 & (~process.umask()); - } - if (!made) made = null; - - var cb = f || function () {}; - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - fs.mkdir(p, mode, function (er) { - if (!er) { - made = made || p; - return cb(null, made); - } - switch (er.code) { - case 'ENOENT': - mkdirP(path.dirname(p), mode, function (er, made) { - if (er) cb(er, made); - else mkdirP(p, mode, cb, made); - }); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - fs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original error be the failure reason. - if (er2 || !stat.isDirectory()) cb(er, made) - else cb(null, made); - }); - break; - } - }); -} - -mkdirP.sync = function sync (p, mode, made) { - if (mode === undefined) { - mode = 0777 & (~process.umask()); - } - if (!made) made = null; - - if (typeof mode === 'string') mode = parseInt(mode, 8); - p = path.resolve(p); - - try { - fs.mkdirSync(p, mode); - made = made || p; - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - made = sync(path.dirname(p), mode, made); - sync(p, mode, made); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - var stat; - try { - stat = fs.statSync(p); - } - catch (err1) { - throw err0; - } - if (!stat.isDirectory()) throw err0; - break; - } - } - - return made; -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/package.json deleted file mode 100644 index 549e2c2..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "mkdirp", - "description": "Recursively mkdir, like `mkdir -p`", - "version": "0.3.5", - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "main": "./index", - "keywords": [ - "mkdir", - "directory" - ], - "repository": { - "type": "git", - "url": "http://github.com/substack/node-mkdirp.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "devDependencies": { - "tap": "~0.4.0" - }, - "license": "MIT", - "readme": "# mkdirp\n\nLike `mkdir -p`, but in node.js!\n\n[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp)\n\n# example\n\n## pow.js\n\n```js\nvar mkdirp = require('mkdirp');\n \nmkdirp('/tmp/foo/bar/baz', function (err) {\n if (err) console.error(err)\n else console.log('pow!')\n});\n```\n\nOutput\n\n```\npow!\n```\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\n# methods\n\n```js\nvar mkdirp = require('mkdirp');\n```\n\n## mkdirp(dir, mode, cb)\n\nCreate a new directory and any necessary subdirectories at `dir` with octal\npermission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\n`cb(err, made)` fires with the error or the first directory `made`\nthat had to be created, if any.\n\n## mkdirp.sync(dir, mode)\n\nSynchronously create a new directory and any necessary subdirectories at `dir`\nwith octal permission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\nReturns the first directory that had to be created, if any.\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install mkdirp\n```\n\n# license\n\nMIT\n", - "readmeFilename": "readme.markdown", - "_id": "mkdirp@0.3.5", - "_from": "mkdirp@~0.3.4" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/readme.markdown b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/readme.markdown deleted file mode 100644 index 83b0216..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,63 +0,0 @@ -# mkdirp - -Like `mkdir -p`, but in node.js! - -[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) - -# example - -## pow.js - -```js -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); -``` - -Output - -``` -pow! -``` - -And now /tmp/foo/bar/baz exists, huzzah! - -# methods - -```js -var mkdirp = require('mkdirp'); -``` - -## mkdirp(dir, mode, cb) - -Create a new directory and any necessary subdirectories at `dir` with octal -permission string `mode`. - -If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -`cb(err, made)` fires with the error or the first directory `made` -that had to be created, if any. - -## mkdirp.sync(dir, mode) - -Synchronously create a new directory and any necessary subdirectories at `dir` -with octal permission string `mode`. - -If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -Returns the first directory that had to be created, if any. - -# install - -With [npm](http://npmjs.org) do: - -``` -npm install mkdirp -``` - -# license - -MIT diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/chmod.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 520dcb8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,38 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -test('chmod-pre', function (t) { - var mode = 0744 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.equal(stat && stat.mode & 0777, mode, 'should be 0744'); - t.end(); - }); - }); -}); - -test('chmod', function (t) { - var mode = 0755 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.end(); - }); - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/clobber.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 0eb7099..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,37 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -// a file in the way -var itw = ps.slice(0, 3).join('/'); - - -test('clobber-pre', function (t) { - console.error("about to write to "+itw) - fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); - - fs.stat(itw, function (er, stat) { - t.ifError(er) - t.ok(stat && stat.isFile(), 'should be file') - t.end() - }) -}) - -test('clobber', function (t) { - t.plan(2); - mkdirp(file, 0755, function (err) { - t.ok(err); - t.equal(err.code, 'ENOTDIR'); - t.end(); - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/mkdirp.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index b07cd70..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('woo', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/perm.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/perm.js deleted file mode 100644 index 23a7abb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('async perm', function (t) { - t.plan(2); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); - -test('async root perm', function (t) { - mkdirp('/tmp', 0755, function (err) { - if (err) t.fail(err); - t.end(); - }); - t.end(); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/perm_sync.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index f685f60..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,39 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('sync perm', function (t) { - t.plan(2); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; - - mkdirp.sync(file, 0755); - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }); -}); - -test('sync root perm', function (t) { - t.plan(1); - - var file = '/tmp'; - mkdirp.sync(file, 0755); - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/race.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/race.js deleted file mode 100644 index 96a0447..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,41 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('race', function (t) { - t.plan(4); - var ps = [ '', 'tmp' ]; - - for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); - } - var file = ps.join('/'); - - var res = 2; - mk(file, function () { - if (--res === 0) t.end(); - }); - - mk(file, function () { - if (--res === 0) t.end(); - }); - - function mk (file, cb) { - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - if (cb) cb(); - } - }) - }) - }); - } -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/rel.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 7985824..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('rel', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var cwd = process.cwd(); - process.chdir('/tmp'); - - var file = [x,y,z].join('/'); - - mkdirp(file, 0755, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - process.chdir(cwd); - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/return.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e5..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, '/tmp/' + x); - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, null); - }); - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/return_sync.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d3..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - // Note that this will throw on failure, which will fail the test. - var made = mkdirp.sync(file); - t.equal(made, '/tmp/' + x); - - // making the same file again should have no effect. - made = mkdirp.sync(file); - t.equal(made, null); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/root.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/root.js deleted file mode 100644 index 97ad7a2..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,18 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('root', function (t) { - // '/' on unix, 'c:/' on windows. - var file = path.resolve('/'); - - mkdirp(file, 0755, function (err) { - if (err) throw err - fs.stat(file, function (er, stat) { - if (er) throw er - t.ok(stat.isDirectory(), 'target is a directory'); - t.end(); - }) - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/sync.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 7530cad..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('sync', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file, 0755); - } catch (err) { - t.fail(err); - return t.end(); - } - - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0755); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }); - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/umask.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 64ccafe..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('implicit mode from umask', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, function (err) { - if (err) t.fail(err); - else path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, 0777 & (~process.umask())); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }) - }) - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/umask_sync.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 35bd5cb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('umask sync modes', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file); - } catch (err) { - t.fail(err); - return t.end(); - } - - path.exists(file, function (ex) { - if (!ex) t.fail('file not created') - else fs.stat(file, function (err, stat) { - if (err) t.fail(err) - else { - t.equal(stat.mode & 0777, (0777 & (~process.umask()))); - t.ok(stat.isDirectory(), 'target not a directory'); - t.end(); - } - }); - }); -}); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/.npmignore deleted file mode 100644 index 9daeafb..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/History.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/History.md deleted file mode 100644 index 82df7b1..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/History.md +++ /dev/null @@ -1,15 +0,0 @@ - -0.0.4 / 2012-06-17 -================== - - * changed: ret -1 for unsatisfiable and -2 when invalid - -0.0.3 / 2012-06-17 -================== - - * fix last-byte-pos default to len - 1 - -0.0.2 / 2012-06-14 -================== - - * add `.type` diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/Makefile b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/Makefile deleted file mode 100644 index 8e8640f..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --reporter spec \ - --require should - -.PHONY: test \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/Readme.md deleted file mode 100644 index b2a67fe..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/Readme.md +++ /dev/null @@ -1,28 +0,0 @@ - -# node-range-parser - - Range header field parser. - -## Example: - -```js -assert(-1 == parse(200, 'bytes=500-20')); -assert(-2 == parse(200, 'bytes=malformed')); -parse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }])); -parse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }])); -parse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }])); -parse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }])); -parse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }])); -parse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }])); -parse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }])); -parse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }])); -parse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }])); -parse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }])); -parse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }])); -``` - -## Installation - -``` -$ npm install range-parser -``` \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/index.js deleted file mode 100644 index 9b0f7a8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/index.js +++ /dev/null @@ -1,49 +0,0 @@ - -/** - * Parse "Range" header `str` relative to the given file `size`. - * - * @param {Number} size - * @param {String} str - * @return {Array} - * @api public - */ - -module.exports = function(size, str){ - var valid = true; - var i = str.indexOf('='); - - if (-1 == i) return -2; - - var arr = str.slice(i + 1).split(',').map(function(range){ - var range = range.split('-') - , start = parseInt(range[0], 10) - , end = parseInt(range[1], 10); - - // -nnn - if (isNaN(start)) { - start = size - end; - end = size - 1; - // nnn- - } else if (isNaN(end)) { - end = size - 1; - } - - // limit last-byte-pos to current length - if (end > size - 1) end = size - 1; - - // invalid - if (isNaN(start) - || isNaN(end) - || start > end - || start < 0) valid = false; - - return { - start: start, - end: end - }; - }); - - arr.type = str.slice(0, i); - - return valid ? arr : -1; -}; \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/package.json deleted file mode 100644 index efdf450..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/range-parser/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "range-parser", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" - }, - "description": "Range header field string parser", - "version": "0.0.4", - "main": "index.js", - "dependencies": {}, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "readme": "\n# node-range-parser\n\n Range header field parser.\n\n## Example:\n\n```js\nassert(-1 == parse(200, 'bytes=500-20'));\nassert(-2 == parse(200, 'bytes=malformed'));\nparse(200, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 199 }]));\nparse(1000, 'bytes=0-499').should.eql(arr('bytes', [{ start: 0, end: 499 }]));\nparse(1000, 'bytes=40-80').should.eql(arr('bytes', [{ start: 40, end: 80 }]));\nparse(1000, 'bytes=-500').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=-400').should.eql(arr('bytes', [{ start: 600, end: 999 }]));\nparse(1000, 'bytes=500-').should.eql(arr('bytes', [{ start: 500, end: 999 }]));\nparse(1000, 'bytes=400-').should.eql(arr('bytes', [{ start: 400, end: 999 }]));\nparse(1000, 'bytes=0-0').should.eql(arr('bytes', [{ start: 0, end: 0 }]));\nparse(1000, 'bytes=-1').should.eql(arr('bytes', [{ start: 999, end: 999 }]));\nparse(1000, 'items=0-5').should.eql(arr('items', [{ start: 0, end: 5 }]));\nparse(1000, 'bytes=40-80,-1').should.eql(arr('bytes', [{ start: 40, end: 80 }, { start: 999, end: 999 }]));\n```\n\n## Installation\n\n```\n$ npm install range-parser\n```", - "readmeFilename": "Readme.md", - "_id": "range-parser@0.0.4", - "_from": "range-parser@0.0.4" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/.npmignore b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/.npmignore deleted file mode 100644 index f1250e5..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -support -test -examples -*.sock diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/History.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/History.md deleted file mode 100644 index 20c5319..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/History.md +++ /dev/null @@ -1,25 +0,0 @@ - -0.1.0 / 2012-08-25 -================== - - * add options parameter to send() that is passed to fs.createReadStream() [kanongil] - -0.0.4 / 2012-08-16 -================== - - * allow custom "Accept-Ranges" definition - -0.0.3 / 2012-07-16 -================== - - * fix normalization of the root directory. Closes #3 - -0.0.2 / 2012-07-09 -================== - - * add passing of req explicitly for now (YUCK) - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/Makefile b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/Makefile deleted file mode 100644 index a9dcfd5..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/Makefile +++ /dev/null @@ -1,8 +0,0 @@ - -test: - @./node_modules/.bin/mocha \ - --require should \ - --reporter spec \ - --bail - -.PHONY: test \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/Readme.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/Readme.md deleted file mode 100644 index 85171a9..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/Readme.md +++ /dev/null @@ -1,123 +0,0 @@ - -# send - - Send is Connect's `static()` extracted for generalized use, a streaming static file - server supporting partial responses (Ranges), conditional-GET negotiation, high test coverage, and granular events which may be leveraged to take appropriate actions in your application or framework. - -## Installation - - $ npm install send - -## Examples - - Small: - -```js -var http = require('http'); -var send = require('send'); - -var app = http.createServer(function(req, res){ - send(req, req.url).pipe(res); -}); -``` - - Serving from a root directory with custom error-handling: - -```js -var http = require('http'); -var send = require('send'); - -var app = http.createServer(function(req, res){ - // your custom error-handling logic: - function error(err) { - res.statusCode = err.status || 500; - res.end(err.message); - } - - // your custom directory handling logic: - function redirect() { - res.statusCode = 301; - res.setHeader('Location', req.url + '/'); - res.end('Redirecting to ' + req.url + '/'); - } - - // transfer arbitrary files from within - // /www/example.com/public/* - send(req, url.parse(req.url).pathname) - .root('/www/example.com/public') - .on('error', error) - .on('directory', redirect) - .pipe(res); -}); -``` - -## API - -### Events - - - `error` an error occurred `(err)` - - `directory` a directory was requested - - `stream` file streaming has started `(stream)` - - `end` streaming has completed - -### .root(dir) - - Serve files relative to `path`. Aliased as `.from(dir)`. - -### .index(path) - - By default send supports "index.html" files, to disable this - invoke `.index(false)` or to supply a new index pass a string. - -### .maxage(ms) - - Provide a max-age in milliseconds for http caching, defaults to 0. - -## Error-handling - - By default when no `error` listeners are present an automatic response will be made, otherwise you have full control over the response, aka you may show a 5xx page etc. - -## Caching - - It does _not_ perform internal caching, you should use a reverse proxy cache such - as Varnish for this, or those fancy things called CDNs. If your application is small enough that it would benefit from single-node memory caching, it's small enough that it does not need caching at all ;). - -## Debugging - - To enable `debug()` instrumentation output export __DEBUG__: - -``` -$ DEBUG=send node app -``` - -## Running tests - -``` -$ npm install -$ make test -``` - -## License - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/index.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/index.js deleted file mode 100644 index f17158d..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/index.js +++ /dev/null @@ -1,2 +0,0 @@ - -module.exports = require('./lib/send'); \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/lib/send.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/lib/send.js deleted file mode 100644 index de72146..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/lib/send.js +++ /dev/null @@ -1,473 +0,0 @@ - -/** - * Module dependencies. - */ - -var debug = require('debug')('send') - , parseRange = require('range-parser') - , Stream = require('stream') - , mime = require('mime') - , fresh = require('fresh') - , path = require('path') - , http = require('http') - , fs = require('fs') - , basename = path.basename - , normalize = path.normalize - , join = path.join - , utils = require('./utils'); - -/** - * Expose `send`. - */ - -exports = module.exports = send; - -/** - * Expose mime module. - */ - -exports.mime = mime; - -/** - * Return a `SendStream` for `req` and `path`. - * - * @param {Request} req - * @param {String} path - * @param {Object} options - * @return {SendStream} - * @api public - */ - -function send(req, path, options) { - return new SendStream(req, path, options); -} - -/** - * Initialize a `SendStream` with the given `path`. - * - * Events: - * - * - `error` an error occurred - * - `stream` file streaming has started - * - `end` streaming has completed - * - `directory` a directory was requested - * - * @param {Request} req - * @param {String} path - * @param {Object} options - * @api private - */ - -function SendStream(req, path, options) { - var self = this; - this.req = req; - this.path = path; - this.options = options || {}; - this.maxage(0); - this.hidden(false); - this.index('index.html'); -} - -/** - * Inherits from `Stream.prototype`. - */ - -SendStream.prototype.__proto__ = Stream.prototype; - -/** - * Enable or disable "hidden" (dot) files. - * - * @param {Boolean} path - * @return {SendStream} - * @api public - */ - -SendStream.prototype.hidden = function(val){ - debug('hidden %s', val); - this._hidden = val; - return this; -}; - -/** - * Set index `path`, set to a falsy - * value to disable index support. - * - * @param {String|Boolean} path - * @return {SendStream} - * @api public - */ - -SendStream.prototype.index = function(path){ - debug('index %s', path); - this._index = path; - return this; -}; - -/** - * Set root `path`. - * - * @param {String} path - * @return {SendStream} - * @api public - */ - -SendStream.prototype.root = -SendStream.prototype.from = function(path){ - this._root = normalize(path); - return this; -}; - -/** - * Set max-age to `ms`. - * - * @param {Number} ms - * @return {SendStream} - * @api public - */ - -SendStream.prototype.maxage = function(ms){ - if (Infinity == ms) ms = 60 * 60 * 24 * 365 * 1000; - debug('max-age %d', ms); - this._maxage = ms; - return this; -}; - -/** - * Emit error with `status`. - * - * @param {Number} status - * @api private - */ - -SendStream.prototype.error = function(status, err){ - var res = this.res; - var msg = http.STATUS_CODES[status]; - err = err || new Error(msg); - err.status = status; - if (this.listeners('error').length) return this.emit('error', err); - res.statusCode = err.status; - res.end(msg); -}; - -/** - * Check if the pathname is potentially malicious. - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isMalicious = function(){ - return !this._root && ~this.path.indexOf('..'); -}; - -/** - * Check if the pathname ends with "/". - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.hasTrailingSlash = function(){ - return '/' == this.path[this.path.length - 1]; -}; - -/** - * Check if the basename leads with ".". - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.hasLeadingDot = function(){ - return '.' == basename(this.path)[0]; -}; - -/** - * Check if this is a conditional GET request. - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isConditionalGET = function(){ - return this.req.headers['if-none-match'] - || this.req.headers['if-modified-since']; -}; - -/** - * Strip content-* header fields. - * - * @api private - */ - -SendStream.prototype.removeContentHeaderFields = function(){ - var res = this.res; - Object.keys(res._headers).forEach(function(field){ - if (0 == field.indexOf('content')) { - res.removeHeader(field); - } - }); -}; - -/** - * Respond with 304 not modified. - * - * @api private - */ - -SendStream.prototype.notModified = function(){ - var res = this.res; - debug('not modified'); - this.removeContentHeaderFields(); - res.statusCode = 304; - res.end(); -}; - -/** - * Check if the request is cacheable, aka - * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}). - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isCachable = function(){ - var res = this.res; - return (res.statusCode >= 200 && res.statusCode < 300) || 304 == res.statusCode; -}; - -/** - * Handle stat() error. - * - * @param {Error} err - * @api private - */ - -SendStream.prototype.onStatError = function(err){ - var notfound = ['ENOENT', 'ENAMETOOLONG', 'ENOTDIR']; - if (~notfound.indexOf(err.code)) return this.error(404, err); - this.error(500, err); -}; - -/** - * Check if the cache is fresh. - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isFresh = function(){ - return fresh(this.req.headers, this.res._headers); -}; - -/** - * Redirect to `path`. - * - * @param {String} path - * @api private - */ - -SendStream.prototype.redirect = function(path){ - if (this.listeners('directory').length) return this.emit('directory'); - var res = this.res; - path += '/'; - res.statusCode = 301; - res.setHeader('Location', path); - res.end('Redirecting to ' + utils.escape(path)); -}; - -/** - * Pipe to `res. - * - * @param {Stream} res - * @return {Stream} res - * @api public - */ - -SendStream.prototype.pipe = function(res){ - var self = this - , args = arguments - , path = this.path - , root = this._root; - - // references - this.res = res; - - // invalid request uri - path = utils.decode(path); - if (-1 == path) return this.error(400); - - // null byte(s) - if (~path.indexOf('\0')) return this.error(400); - - // join / normalize from optional root dir - if (root) path = normalize(join(this._root, path)); - - // ".." is malicious without "root" - if (this.isMalicious()) return this.error(403); - - // malicious path - if (root && 0 != path.indexOf(root)) return this.error(403); - - // hidden file support - if (!this._hidden && this.hasLeadingDot()) return this.error(404); - - // index file support - if (this._index && this.hasTrailingSlash()) path += this._index; - - debug('stat "%s"', path); - fs.stat(path, function(err, stat){ - if (err) return self.onStatError(err); - if (stat.isDirectory()) return self.redirect(self.path); - self.send(path, stat); - }); - - return res; -}; - -/** - * Transfer `path`. - * - * @param {String} path - * @api public - */ - -SendStream.prototype.send = function(path, stat){ - var options = this.options; - var len = stat.size; - var res = this.res; - var req = this.req; - var ranges = req.headers.range; - var offset = options.start || 0; - - // set header fields - this.setHeader(stat); - - // set content-type - this.type(path); - - // conditional GET support - if (this.isConditionalGET() - && this.isCachable() - && this.isFresh()) { - return this.notModified(); - } - - // adjust len to start/end options - len = Math.max(0, len - offset); - if (options.end !== undefined) { - var bytes = options.end - offset + 1; - if (len > bytes) len = bytes; - } - - // Range support - if (ranges) { - ranges = parseRange(len, ranges); - - // unsatisfiable - if (-1 == ranges) { - res.setHeader('Content-Range', 'bytes */' + stat.size); - return this.error(416); - } - - // valid (syntactically invalid ranges are treated as a regular response) - if (-2 != ranges) { - options.start = offset + ranges[0].start; - options.end = offset + ranges[0].end; - - // Content-Range - res.statusCode = 206; - res.setHeader('Content-Range', 'bytes ' - + ranges[0].start - + '-' - + ranges[0].end - + '/' - + len); - len = options.end - options.start + 1; - } - } - - // content-length - res.setHeader('Content-Length', len); - - // HEAD support - if ('HEAD' == req.method) return res.end(); - - this.stream(path, options); -}; - -/** - * Stream `path` to the response. - * - * @param {String} path - * @param {Object} options - * @api private - */ - -SendStream.prototype.stream = function(path, options){ - // TODO: this is all lame, refactor meeee - var self = this; - var res = this.res; - var req = this.req; - - // pipe - var stream = fs.createReadStream(path, options); - this.emit('stream', stream); - stream.pipe(res); - - // socket closed, done with the fd - req.on('close', stream.destroy.bind(stream)); - - // error handling code-smell - stream.on('error', function(err){ - // no hope in responding - if (res._header) { - console.error(err.stack); - req.destroy(); - return; - } - - // 500 - err.status = 500; - self.emit('error', err); - }); - - // end - stream.on('end', function(){ - self.emit('end'); - }); -}; - -/** - * Set content-type based on `path` - * if it hasn't been explicitly set. - * - * @param {String} path - * @api private - */ - -SendStream.prototype.type = function(path){ - var res = this.res; - if (res.getHeader('Content-Type')) return; - var type = mime.lookup(path); - var charset = mime.charsets.lookup(type); - debug('content-type %s', type); - res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : '')); -}; - -/** - * Set reaponse header fields, most - * fields may be pre-defined. - * - * @param {Object} stat - * @api private - */ - -SendStream.prototype.setHeader = function(stat){ - var res = this.res; - if (!res.getHeader('Accept-Ranges')) res.setHeader('Accept-Ranges', 'bytes'); - if (!res.getHeader('ETag')) res.setHeader('ETag', utils.etag(stat)); - if (!res.getHeader('Date')) res.setHeader('Date', new Date().toUTCString()); - if (!res.getHeader('Cache-Control')) res.setHeader('Cache-Control', 'public, max-age=' + (this._maxage / 1000)); - if (!res.getHeader('Last-Modified')) res.setHeader('Last-Modified', stat.mtime.toUTCString()); -}; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/lib/utils.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/lib/utils.js deleted file mode 100644 index 950e5a2..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/lib/utils.js +++ /dev/null @@ -1,47 +0,0 @@ - -/** - * Return an ETag in the form of `"-"` - * from the given `stat`. - * - * @param {Object} stat - * @return {String} - * @api private - */ - -exports.etag = function(stat) { - return '"' + stat.size + '-' + Number(stat.mtime) + '"'; -}; - -/** - * decodeURIComponent. - * - * Allows V8 to only deoptimize this fn instead of all - * of send(). - * - * @param {String} path - * @api private - */ - -exports.decode = function(path){ - try { - return decodeURIComponent(path); - } catch (err) { - return -1; - } -}; - -/** - * Escape the given string of `html`. - * - * @param {String} html - * @return {String} - * @api private - */ - -exports.escape = function(html){ - return String(html) - .replace(/&(?!\w+;)/g, '&') - .replace(//g, '>') - .replace(/"/g, '"'); -}; \ No newline at end of file diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/LICENSE b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/LICENSE deleted file mode 100644 index 451fc45..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/README.md b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/README.md deleted file mode 100644 index d8b66a8..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# mime - -Comprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community. - -## Install - -Install with [npm](http://github.com/isaacs/npm): - - npm install mime - -## API - Queries - -### mime.lookup(path) -Get the mime type associated with a file. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. - - var mime = require('mime'); - - mime.lookup('/path/to/file.txt'); // => 'text/plain' - mime.lookup('file.txt'); // => 'text/plain' - mime.lookup('.TXT'); // => 'text/plain' - mime.lookup('htm'); // => 'text/html' - -### mime.extension(type) -Get the default extension for `type` - - mime.extension('text/html'); // => 'html' - mime.extension('application/octet-stream'); // => 'bin' - -### mime.charsets.lookup() - -Map mime-type to charset - - mime.charsets.lookup('text/plain'); // => 'UTF-8' - -(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) - -## API - Defining Custom Types - -The following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/bentomas/node-mime/wiki/Requesting-New-Types). - -### mime.define() - -Add custom mime/extension mappings - - mime.define({ - 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], - 'application/x-my-type': ['x-mt', 'x-mtt'], - // etc ... - }); - - mime.lookup('x-sft'); // => 'text/x-some-format' - -The first entry in the extensions array is returned by `mime.extension()`. E.g. - - mime.extension('text/x-some-format'); // => 'x-sf' - -### mime.load(filepath) - -Load mappings from an Apache ".types" format file - - mime.load('./my_project.types'); - -The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/mime.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/mime.js deleted file mode 100644 index 1e00585..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/mime.js +++ /dev/null @@ -1,104 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -function Mime() { - // Map of extension -> mime type - this.types = Object.create(null); - - // Map of mime type -> extension - this.extensions = Object.create(null); -} - -/** - * Define mimetype -> extension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * @param map (Object) type definitions - */ -Mime.prototype.define = function (map) { - for (var type in map) { - var exts = map[type]; - - for (var i = 0; i < exts.length; i++) { - this.types[exts[i]] = type; - } - - // Default extension is the first one we encounter - if (!this.extensions[type]) { - this.extensions[type] = exts[0]; - } - } -}; - -/** - * Load an Apache2-style ".types" file - * - * This may be called multiple times (it's expected). Where files declare - * overlapping types/extensions, the last file wins. - * - * @param file (String) path of file to load. - */ -Mime.prototype.load = function(file) { - // Read file and split into lines - var map = {}, - content = fs.readFileSync(file, 'ascii'), - lines = content.split(/[\r\n]+/); - - lines.forEach(function(line) { - // Clean up whitespace/comments, and split into fields - var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); - map[fields.shift()] = fields; - }); - - this.define(map); -}; - -/** - * Lookup a mime type based on extension - */ -Mime.prototype.lookup = function(path, fallback) { - var ext = path.replace(/.*[\.\/]/, '').toLowerCase(); - - return this.types[ext] || fallback || this.default_type; -}; - -/** - * Return file extension associated with a mime type - */ -Mime.prototype.extension = function(mimeType) { - return this.extensions[mimeType]; -}; - -// Default instance -var mime = new Mime(); - -// Load local copy of -// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types -mime.load(path.join(__dirname, 'types/mime.types')); - -// Load additional types from node.js community -mime.load(path.join(__dirname, 'types/node.types')); - -// Default type -mime.default_type = mime.lookup('bin'); - -// -// Additional API specific to the default instance -// - -mime.Mime = Mime; - -/** - * Lookup a charset based on mime type. - */ -mime.charsets = { - lookup: function(mimeType, fallback) { - // Assume text types are utf8 - return (/^text\//).test(mimeType) ? 'UTF-8' : fallback; - } -} - -module.exports = mime; diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/package.json deleted file mode 100644 index 9a5114b..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "author": { - "name": "Robert Kieffer", - "email": "robert@broofa.com", - "url": "http://github.com/broofa" - }, - "contributors": [ - { - "name": "Benjamin Thomas", - "email": "benjamin@benjaminthomas.org", - "url": "http://github.com/bentomas" - } - ], - "dependencies": {}, - "description": "A comprehensive library for mime-type mapping", - "devDependencies": {}, - "keywords": [ - "util", - "mime" - ], - "main": "mime.js", - "name": "mime", - "repository": { - "url": "https://github.com/broofa/node-mime", - "type": "git" - }, - "version": "1.2.6", - "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/bentomas/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n", - "readmeFilename": "README.md", - "_id": "mime@1.2.6", - "_from": "mime@1.2.6" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/test.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/test.js deleted file mode 100644 index cbad034..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/test.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Usage: node test.js - */ - -var mime = require('./mime'); -var assert = require('assert'); - -function eq(a, b) { - console.log('Test: ' + a + ' === ' + b); - assert.strictEqual.apply(null, arguments); -} - -console.log(Object.keys(mime.extensions).length + ' types'); -console.log(Object.keys(mime.types).length + ' extensions\n'); - -// -// Test mime lookups -// - -eq('text/plain', mime.lookup('text.txt')); -eq('text/plain', mime.lookup('.text.txt')); -eq('text/plain', mime.lookup('.txt')); -eq('text/plain', mime.lookup('txt')); -eq('application/octet-stream', mime.lookup('text.nope')); -eq('fallback', mime.lookup('text.fallback', 'fallback')); -eq('application/octet-stream', mime.lookup('constructor')); -eq('text/plain', mime.lookup('TEXT.TXT')); -eq('text/event-stream', mime.lookup('text/event-stream')); -eq('application/x-web-app-manifest+json', mime.lookup('text.webapp')); - -// -// Test extensions -// - -eq('txt', mime.extension(mime.types.text)); -eq('html', mime.extension(mime.types.htm)); -eq('bin', mime.extension('application/octet-stream')); -eq(undefined, mime.extension('constructor')); - -// -// Test node types -// - -eq('application/octet-stream', mime.lookup('file.buffer')); -eq('audio/mp4', mime.lookup('file.m4a')); - -// -// Test charsets -// - -eq('UTF-8', mime.charsets.lookup('text/plain')); -eq(undefined, mime.charsets.lookup(mime.types.js)); -eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); - -console.log('\nOK'); diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/types/mime.types b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/types/mime.types deleted file mode 100644 index b3cae2e..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/types/mime.types +++ /dev/null @@ -1,1510 +0,0 @@ -# This file maps Internet media types to unique file extension(s). -# Although created for httpd, this file is used by many software systems -# and has been placed in the public domain for unlimited redisribution. -# -# The table below contains both registered and (common) unregistered types. -# A type that has no unique extension can be ignored -- they are listed -# here to guide configurations toward known types and to make it easier to -# identify "new" types. File extensions are also commonly used to indicate -# content languages and encodings, so choose them carefully. -# -# Internet media types should be registered as described in RFC 4288. -# The registry is at . -# -# MIME type (lowercased) Extensions -# ============================================ ========== -# application/1d-interleaved-parityfec -# application/3gpp-ims+xml -# application/activemessage -application/andrew-inset ez -# application/applefile -application/applixware aw -application/atom+xml atom -application/atomcat+xml atomcat -# application/atomicmail -application/atomsvc+xml atomsvc -# application/auth-policy+xml -# application/batch-smtp -# application/beep+xml -# application/calendar+xml -# application/cals-1840 -# application/ccmp+xml -application/ccxml+xml ccxml -application/cdmi-capability cdmia -application/cdmi-container cdmic -application/cdmi-domain cdmid -application/cdmi-object cdmio -application/cdmi-queue cdmiq -# application/cea-2018+xml -# application/cellml+xml -# application/cfw -# application/cnrp+xml -# application/commonground -# application/conference-info+xml -# application/cpl+xml -# application/csta+xml -# application/cstadata+xml -application/cu-seeme cu -# application/cybercash -application/davmount+xml davmount -# application/dca-rft -# application/dec-dx -# application/dialog-info+xml -# application/dicom -# application/dns -# application/dskpp+xml -application/dssc+der dssc -application/dssc+xml xdssc -# application/dvcs -application/ecmascript ecma -# application/edi-consent -# application/edi-x12 -# application/edifact -application/emma+xml emma -# application/epp+xml -application/epub+zip epub -# application/eshop -# application/example -application/exi exi -# application/fastinfoset -# application/fastsoap -# application/fits -application/font-tdpfr pfr -# application/framework-attributes+xml -# application/h224 -# application/held+xml -# application/http -application/hyperstudio stk -# application/ibe-key-request+xml -# application/ibe-pkg-reply+xml -# application/ibe-pp-data -# application/iges -# application/im-iscomposing+xml -# application/index -# application/index.cmd -# application/index.obj -# application/index.response -# application/index.vnd -application/inkml+xml ink inkml -# application/iotp -application/ipfix ipfix -# application/ipp -# application/isup -application/java-archive jar -application/java-serialized-object ser -application/java-vm class -application/javascript js -application/json json -# application/kpml-request+xml -# application/kpml-response+xml -application/lost+xml lostxml -application/mac-binhex40 hqx -application/mac-compactpro cpt -# application/macwriteii -application/mads+xml mads -application/marc mrc -application/marcxml+xml mrcx -application/mathematica ma nb mb -# application/mathml-content+xml -# application/mathml-presentation+xml -application/mathml+xml mathml -# application/mbms-associated-procedure-description+xml -# application/mbms-deregister+xml -# application/mbms-envelope+xml -# application/mbms-msk+xml -# application/mbms-msk-response+xml -# application/mbms-protection-description+xml -# application/mbms-reception-report+xml -# application/mbms-register+xml -# application/mbms-register-response+xml -# application/mbms-user-service-description+xml -application/mbox mbox -# application/media_control+xml -application/mediaservercontrol+xml mscml -application/metalink4+xml meta4 -application/mets+xml mets -# application/mikey -application/mods+xml mods -# application/moss-keys -# application/moss-signature -# application/mosskey-data -# application/mosskey-request -application/mp21 m21 mp21 -application/mp4 mp4s -# application/mpeg4-generic -# application/mpeg4-iod -# application/mpeg4-iod-xmt -# application/msc-ivr+xml -# application/msc-mixer+xml -application/msword doc dot -application/mxf mxf -# application/nasdata -# application/news-checkgroups -# application/news-groupinfo -# application/news-transmission -# application/nss -# application/ocsp-request -# application/ocsp-response -application/octet-stream bin dms lha lrf lzh so iso dmg dist distz pkg bpk dump elc deploy -application/oda oda -application/oebps-package+xml opf -application/ogg ogx -application/onenote onetoc onetoc2 onetmp onepkg -application/oxps oxps -# application/parityfec -application/patch-ops-error+xml xer -application/pdf pdf -application/pgp-encrypted pgp -# application/pgp-keys -application/pgp-signature asc sig -application/pics-rules prf -# application/pidf+xml -# application/pidf-diff+xml -application/pkcs10 p10 -application/pkcs7-mime p7m p7c -application/pkcs7-signature p7s -application/pkcs8 p8 -application/pkix-attr-cert ac -application/pkix-cert cer -application/pkix-crl crl -application/pkix-pkipath pkipath -application/pkixcmp pki -application/pls+xml pls -# application/poc-settings+xml -application/postscript ai eps ps -# application/prs.alvestrand.titrax-sheet -application/prs.cww cww -# application/prs.nprend -# application/prs.plucker -# application/prs.rdf-xml-crypt -# application/prs.xsf+xml -application/pskc+xml pskcxml -# application/qsig -application/rdf+xml rdf -application/reginfo+xml rif -application/relax-ng-compact-syntax rnc -# application/remote-printing -application/resource-lists+xml rl -application/resource-lists-diff+xml rld -# application/riscos -# application/rlmi+xml -application/rls-services+xml rs -application/rpki-ghostbusters gbr -application/rpki-manifest mft -application/rpki-roa roa -# application/rpki-updown -application/rsd+xml rsd -application/rss+xml rss -application/rtf rtf -# application/rtx -# application/samlassertion+xml -# application/samlmetadata+xml -application/sbml+xml sbml -application/scvp-cv-request scq -application/scvp-cv-response scs -application/scvp-vp-request spq -application/scvp-vp-response spp -application/sdp sdp -# application/set-payment -application/set-payment-initiation setpay -# application/set-registration -application/set-registration-initiation setreg -# application/sgml -# application/sgml-open-catalog -application/shf+xml shf -# application/sieve -# application/simple-filter+xml -# application/simple-message-summary -# application/simplesymbolcontainer -# application/slate -# application/smil -application/smil+xml smi smil -# application/soap+fastinfoset -# application/soap+xml -application/sparql-query rq -application/sparql-results+xml srx -# application/spirits-event+xml -application/srgs gram -application/srgs+xml grxml -application/sru+xml sru -application/ssml+xml ssml -# application/tamp-apex-update -# application/tamp-apex-update-confirm -# application/tamp-community-update -# application/tamp-community-update-confirm -# application/tamp-error -# application/tamp-sequence-adjust -# application/tamp-sequence-adjust-confirm -# application/tamp-status-query -# application/tamp-status-response -# application/tamp-update -# application/tamp-update-confirm -application/tei+xml tei teicorpus -application/thraud+xml tfi -# application/timestamp-query -# application/timestamp-reply -application/timestamped-data tsd -# application/tve-trigger -# application/ulpfec -# application/vcard+xml -# application/vemmi -# application/vividence.scriptfile -# application/vnd.3gpp.bsf+xml -application/vnd.3gpp.pic-bw-large plb -application/vnd.3gpp.pic-bw-small psb -application/vnd.3gpp.pic-bw-var pvb -# application/vnd.3gpp.sms -# application/vnd.3gpp2.bcmcsinfo+xml -# application/vnd.3gpp2.sms -application/vnd.3gpp2.tcap tcap -application/vnd.3m.post-it-notes pwn -application/vnd.accpac.simply.aso aso -application/vnd.accpac.simply.imp imp -application/vnd.acucobol acu -application/vnd.acucorp atc acutc -application/vnd.adobe.air-application-installer-package+zip air -application/vnd.adobe.fxp fxp fxpl -# application/vnd.adobe.partial-upload -application/vnd.adobe.xdp+xml xdp -application/vnd.adobe.xfdf xfdf -# application/vnd.aether.imp -# application/vnd.ah-barcode -application/vnd.ahead.space ahead -application/vnd.airzip.filesecure.azf azf -application/vnd.airzip.filesecure.azs azs -application/vnd.amazon.ebook azw -application/vnd.americandynamics.acc acc -application/vnd.amiga.ami ami -# application/vnd.amundsen.maze+xml -application/vnd.android.package-archive apk -application/vnd.anser-web-certificate-issue-initiation cii -application/vnd.anser-web-funds-transfer-initiation fti -application/vnd.antix.game-component atx -application/vnd.apple.installer+xml mpkg -application/vnd.apple.mpegurl m3u8 -# application/vnd.arastra.swi -application/vnd.aristanetworks.swi swi -application/vnd.astraea-software.iota iota -application/vnd.audiograph aep -# application/vnd.autopackage -# application/vnd.avistar+xml -application/vnd.blueice.multipass mpm -# application/vnd.bluetooth.ep.oob -application/vnd.bmi bmi -application/vnd.businessobjects rep -# application/vnd.cab-jscript -# application/vnd.canon-cpdl -# application/vnd.canon-lips -# application/vnd.cendio.thinlinc.clientconf -application/vnd.chemdraw+xml cdxml -application/vnd.chipnuts.karaoke-mmd mmd -application/vnd.cinderella cdy -# application/vnd.cirpack.isdn-ext -application/vnd.claymore cla -application/vnd.cloanto.rp9 rp9 -application/vnd.clonk.c4group c4g c4d c4f c4p c4u -application/vnd.cluetrust.cartomobile-config c11amc -application/vnd.cluetrust.cartomobile-config-pkg c11amz -# application/vnd.collection+json -# application/vnd.commerce-battelle -application/vnd.commonspace csp -application/vnd.contact.cmsg cdbcmsg -application/vnd.cosmocaller cmc -application/vnd.crick.clicker clkx -application/vnd.crick.clicker.keyboard clkk -application/vnd.crick.clicker.palette clkp -application/vnd.crick.clicker.template clkt -application/vnd.crick.clicker.wordbank clkw -application/vnd.criticaltools.wbs+xml wbs -application/vnd.ctc-posml pml -# application/vnd.ctct.ws+xml -# application/vnd.cups-pdf -# application/vnd.cups-postscript -application/vnd.cups-ppd ppd -# application/vnd.cups-raster -# application/vnd.cups-raw -# application/vnd.curl -application/vnd.curl.car car -application/vnd.curl.pcurl pcurl -# application/vnd.cybank -application/vnd.data-vision.rdz rdz -application/vnd.dece.data uvf uvvf uvd uvvd -application/vnd.dece.ttml+xml uvt uvvt -application/vnd.dece.unspecified uvx uvvx -application/vnd.dece.zip uvz uvvz -application/vnd.denovo.fcselayout-link fe_launch -# application/vnd.dir-bi.plate-dl-nosuffix -application/vnd.dna dna -application/vnd.dolby.mlp mlp -# application/vnd.dolby.mobile.1 -# application/vnd.dolby.mobile.2 -application/vnd.dpgraph dpg -application/vnd.dreamfactory dfac -application/vnd.dvb.ait ait -# application/vnd.dvb.dvbj -# application/vnd.dvb.esgcontainer -# application/vnd.dvb.ipdcdftnotifaccess -# application/vnd.dvb.ipdcesgaccess -# application/vnd.dvb.ipdcesgaccess2 -# application/vnd.dvb.ipdcesgpdd -# application/vnd.dvb.ipdcroaming -# application/vnd.dvb.iptv.alfec-base -# application/vnd.dvb.iptv.alfec-enhancement -# application/vnd.dvb.notif-aggregate-root+xml -# application/vnd.dvb.notif-container+xml -# application/vnd.dvb.notif-generic+xml -# application/vnd.dvb.notif-ia-msglist+xml -# application/vnd.dvb.notif-ia-registration-request+xml -# application/vnd.dvb.notif-ia-registration-response+xml -# application/vnd.dvb.notif-init+xml -# application/vnd.dvb.pfr -application/vnd.dvb.service svc -# application/vnd.dxr -application/vnd.dynageo geo -# application/vnd.easykaraoke.cdgdownload -# application/vnd.ecdis-update -application/vnd.ecowin.chart mag -# application/vnd.ecowin.filerequest -# application/vnd.ecowin.fileupdate -# application/vnd.ecowin.series -# application/vnd.ecowin.seriesrequest -# application/vnd.ecowin.seriesupdate -# application/vnd.emclient.accessrequest+xml -application/vnd.enliven nml -# application/vnd.eprints.data+xml -application/vnd.epson.esf esf -application/vnd.epson.msf msf -application/vnd.epson.quickanime qam -application/vnd.epson.salt slt -application/vnd.epson.ssf ssf -# application/vnd.ericsson.quickcall -application/vnd.eszigno3+xml es3 et3 -# application/vnd.etsi.aoc+xml -# application/vnd.etsi.cug+xml -# application/vnd.etsi.iptvcommand+xml -# application/vnd.etsi.iptvdiscovery+xml -# application/vnd.etsi.iptvprofile+xml -# application/vnd.etsi.iptvsad-bc+xml -# application/vnd.etsi.iptvsad-cod+xml -# application/vnd.etsi.iptvsad-npvr+xml -# application/vnd.etsi.iptvservice+xml -# application/vnd.etsi.iptvsync+xml -# application/vnd.etsi.iptvueprofile+xml -# application/vnd.etsi.mcid+xml -# application/vnd.etsi.overload-control-policy-dataset+xml -# application/vnd.etsi.sci+xml -# application/vnd.etsi.simservs+xml -# application/vnd.etsi.tsl+xml -# application/vnd.etsi.tsl.der -# application/vnd.eudora.data -application/vnd.ezpix-album ez2 -application/vnd.ezpix-package ez3 -# application/vnd.f-secure.mobile -application/vnd.fdf fdf -application/vnd.fdsn.mseed mseed -application/vnd.fdsn.seed seed dataless -# application/vnd.ffsns -# application/vnd.fints -application/vnd.flographit gph -application/vnd.fluxtime.clip ftc -# application/vnd.font-fontforge-sfd -application/vnd.framemaker fm frame maker book -application/vnd.frogans.fnc fnc -application/vnd.frogans.ltf ltf -application/vnd.fsc.weblaunch fsc -application/vnd.fujitsu.oasys oas -application/vnd.fujitsu.oasys2 oa2 -application/vnd.fujitsu.oasys3 oa3 -application/vnd.fujitsu.oasysgp fg5 -application/vnd.fujitsu.oasysprs bh2 -# application/vnd.fujixerox.art-ex -# application/vnd.fujixerox.art4 -# application/vnd.fujixerox.hbpl -application/vnd.fujixerox.ddd ddd -application/vnd.fujixerox.docuworks xdw -application/vnd.fujixerox.docuworks.binder xbd -# application/vnd.fut-misnet -application/vnd.fuzzysheet fzs -application/vnd.genomatix.tuxedo txd -# application/vnd.geocube+xml -application/vnd.geogebra.file ggb -application/vnd.geogebra.tool ggt -application/vnd.geometry-explorer gex gre -application/vnd.geonext gxt -application/vnd.geoplan g2w -application/vnd.geospace g3w -# application/vnd.globalplatform.card-content-mgt -# application/vnd.globalplatform.card-content-mgt-response -application/vnd.gmx gmx -application/vnd.google-earth.kml+xml kml -application/vnd.google-earth.kmz kmz -application/vnd.grafeq gqf gqs -# application/vnd.gridmp -application/vnd.groove-account gac -application/vnd.groove-help ghf -application/vnd.groove-identity-message gim -application/vnd.groove-injector grv -application/vnd.groove-tool-message gtm -application/vnd.groove-tool-template tpl -application/vnd.groove-vcard vcg -# application/vnd.hal+json -application/vnd.hal+xml hal -application/vnd.handheld-entertainment+xml zmm -application/vnd.hbci hbci -# application/vnd.hcl-bireports -application/vnd.hhe.lesson-player les -application/vnd.hp-hpgl hpgl -application/vnd.hp-hpid hpid -application/vnd.hp-hps hps -application/vnd.hp-jlyt jlt -application/vnd.hp-pcl pcl -application/vnd.hp-pclxl pclxl -# application/vnd.httphone -application/vnd.hydrostatix.sof-data sfd-hdstx -application/vnd.hzn-3d-crossword x3d -# application/vnd.ibm.afplinedata -# application/vnd.ibm.electronic-media -application/vnd.ibm.minipay mpy -application/vnd.ibm.modcap afp listafp list3820 -application/vnd.ibm.rights-management irm -application/vnd.ibm.secure-container sc -application/vnd.iccprofile icc icm -application/vnd.igloader igl -application/vnd.immervision-ivp ivp -application/vnd.immervision-ivu ivu -# application/vnd.informedcontrol.rms+xml -# application/vnd.informix-visionary -# application/vnd.infotech.project -# application/vnd.infotech.project+xml -application/vnd.insors.igm igm -application/vnd.intercon.formnet xpw xpx -application/vnd.intergeo i2g -# application/vnd.intertrust.digibox -# application/vnd.intertrust.nncp -application/vnd.intu.qbo qbo -application/vnd.intu.qfx qfx -# application/vnd.iptc.g2.conceptitem+xml -# application/vnd.iptc.g2.knowledgeitem+xml -# application/vnd.iptc.g2.newsitem+xml -# application/vnd.iptc.g2.packageitem+xml -application/vnd.ipunplugged.rcprofile rcprofile -application/vnd.irepository.package+xml irp -application/vnd.is-xpr xpr -application/vnd.isac.fcs fcs -application/vnd.jam jam -# application/vnd.japannet-directory-service -# application/vnd.japannet-jpnstore-wakeup -# application/vnd.japannet-payment-wakeup -# application/vnd.japannet-registration -# application/vnd.japannet-registration-wakeup -# application/vnd.japannet-setstore-wakeup -# application/vnd.japannet-verification -# application/vnd.japannet-verification-wakeup -application/vnd.jcp.javame.midlet-rms rms -application/vnd.jisp jisp -application/vnd.joost.joda-archive joda -application/vnd.kahootz ktz ktr -application/vnd.kde.karbon karbon -application/vnd.kde.kchart chrt -application/vnd.kde.kformula kfo -application/vnd.kde.kivio flw -application/vnd.kde.kontour kon -application/vnd.kde.kpresenter kpr kpt -application/vnd.kde.kspread ksp -application/vnd.kde.kword kwd kwt -application/vnd.kenameaapp htke -application/vnd.kidspiration kia -application/vnd.kinar kne knp -application/vnd.koan skp skd skt skm -application/vnd.kodak-descriptor sse -application/vnd.las.las+xml lasxml -# application/vnd.liberty-request+xml -application/vnd.llamagraphics.life-balance.desktop lbd -application/vnd.llamagraphics.life-balance.exchange+xml lbe -application/vnd.lotus-1-2-3 123 -application/vnd.lotus-approach apr -application/vnd.lotus-freelance pre -application/vnd.lotus-notes nsf -application/vnd.lotus-organizer org -application/vnd.lotus-screencam scm -application/vnd.lotus-wordpro lwp -application/vnd.macports.portpkg portpkg -# application/vnd.marlin.drm.actiontoken+xml -# application/vnd.marlin.drm.conftoken+xml -# application/vnd.marlin.drm.license+xml -# application/vnd.marlin.drm.mdcf -application/vnd.mcd mcd -application/vnd.medcalcdata mc1 -application/vnd.mediastation.cdkey cdkey -# application/vnd.meridian-slingshot -application/vnd.mfer mwf -application/vnd.mfmp mfm -application/vnd.micrografx.flo flo -application/vnd.micrografx.igx igx -application/vnd.mif mif -# application/vnd.minisoft-hp3000-save -# application/vnd.mitsubishi.misty-guard.trustweb -application/vnd.mobius.daf daf -application/vnd.mobius.dis dis -application/vnd.mobius.mbk mbk -application/vnd.mobius.mqy mqy -application/vnd.mobius.msl msl -application/vnd.mobius.plc plc -application/vnd.mobius.txf txf -application/vnd.mophun.application mpn -application/vnd.mophun.certificate mpc -# application/vnd.motorola.flexsuite -# application/vnd.motorola.flexsuite.adsi -# application/vnd.motorola.flexsuite.fis -# application/vnd.motorola.flexsuite.gotap -# application/vnd.motorola.flexsuite.kmr -# application/vnd.motorola.flexsuite.ttc -# application/vnd.motorola.flexsuite.wem -# application/vnd.motorola.iprm -application/vnd.mozilla.xul+xml xul -application/vnd.ms-artgalry cil -# application/vnd.ms-asf -application/vnd.ms-cab-compressed cab -application/vnd.ms-excel xls xlm xla xlc xlt xlw -application/vnd.ms-excel.addin.macroenabled.12 xlam -application/vnd.ms-excel.sheet.binary.macroenabled.12 xlsb -application/vnd.ms-excel.sheet.macroenabled.12 xlsm -application/vnd.ms-excel.template.macroenabled.12 xltm -application/vnd.ms-fontobject eot -application/vnd.ms-htmlhelp chm -application/vnd.ms-ims ims -application/vnd.ms-lrm lrm -# application/vnd.ms-office.activex+xml -application/vnd.ms-officetheme thmx -application/vnd.ms-pki.seccat cat -application/vnd.ms-pki.stl stl -# application/vnd.ms-playready.initiator+xml -application/vnd.ms-powerpoint ppt pps pot -application/vnd.ms-powerpoint.addin.macroenabled.12 ppam -application/vnd.ms-powerpoint.presentation.macroenabled.12 pptm -application/vnd.ms-powerpoint.slide.macroenabled.12 sldm -application/vnd.ms-powerpoint.slideshow.macroenabled.12 ppsm -application/vnd.ms-powerpoint.template.macroenabled.12 potm -application/vnd.ms-project mpp mpt -# application/vnd.ms-tnef -# application/vnd.ms-wmdrm.lic-chlg-req -# application/vnd.ms-wmdrm.lic-resp -# application/vnd.ms-wmdrm.meter-chlg-req -# application/vnd.ms-wmdrm.meter-resp -application/vnd.ms-word.document.macroenabled.12 docm -application/vnd.ms-word.template.macroenabled.12 dotm -application/vnd.ms-works wps wks wcm wdb -application/vnd.ms-wpl wpl -application/vnd.ms-xpsdocument xps -application/vnd.mseq mseq -# application/vnd.msign -# application/vnd.multiad.creator -# application/vnd.multiad.creator.cif -# application/vnd.music-niff -application/vnd.musician mus -application/vnd.muvee.style msty -application/vnd.mynfc taglet -# application/vnd.ncd.control -# application/vnd.ncd.reference -# application/vnd.nervana -# application/vnd.netfpx -application/vnd.neurolanguage.nlu nlu -application/vnd.noblenet-directory nnd -application/vnd.noblenet-sealer nns -application/vnd.noblenet-web nnw -# application/vnd.nokia.catalogs -# application/vnd.nokia.conml+wbxml -# application/vnd.nokia.conml+xml -# application/vnd.nokia.isds-radio-presets -# application/vnd.nokia.iptv.config+xml -# application/vnd.nokia.landmark+wbxml -# application/vnd.nokia.landmark+xml -# application/vnd.nokia.landmarkcollection+xml -# application/vnd.nokia.n-gage.ac+xml -application/vnd.nokia.n-gage.data ngdat -application/vnd.nokia.n-gage.symbian.install n-gage -# application/vnd.nokia.ncd -# application/vnd.nokia.pcd+wbxml -# application/vnd.nokia.pcd+xml -application/vnd.nokia.radio-preset rpst -application/vnd.nokia.radio-presets rpss -application/vnd.novadigm.edm edm -application/vnd.novadigm.edx edx -application/vnd.novadigm.ext ext -# application/vnd.ntt-local.file-transfer -# application/vnd.ntt-local.sip-ta_remote -# application/vnd.ntt-local.sip-ta_tcp_stream -application/vnd.oasis.opendocument.chart odc -application/vnd.oasis.opendocument.chart-template otc -application/vnd.oasis.opendocument.database odb -application/vnd.oasis.opendocument.formula odf -application/vnd.oasis.opendocument.formula-template odft -application/vnd.oasis.opendocument.graphics odg -application/vnd.oasis.opendocument.graphics-template otg -application/vnd.oasis.opendocument.image odi -application/vnd.oasis.opendocument.image-template oti -application/vnd.oasis.opendocument.presentation odp -application/vnd.oasis.opendocument.presentation-template otp -application/vnd.oasis.opendocument.spreadsheet ods -application/vnd.oasis.opendocument.spreadsheet-template ots -application/vnd.oasis.opendocument.text odt -application/vnd.oasis.opendocument.text-master odm -application/vnd.oasis.opendocument.text-template ott -application/vnd.oasis.opendocument.text-web oth -# application/vnd.obn -# application/vnd.oftn.l10n+json -# application/vnd.oipf.contentaccessdownload+xml -# application/vnd.oipf.contentaccessstreaming+xml -# application/vnd.oipf.cspg-hexbinary -# application/vnd.oipf.dae.svg+xml -# application/vnd.oipf.dae.xhtml+xml -# application/vnd.oipf.mippvcontrolmessage+xml -# application/vnd.oipf.pae.gem -# application/vnd.oipf.spdiscovery+xml -# application/vnd.oipf.spdlist+xml -# application/vnd.oipf.ueprofile+xml -# application/vnd.oipf.userprofile+xml -application/vnd.olpc-sugar xo -# application/vnd.oma-scws-config -# application/vnd.oma-scws-http-request -# application/vnd.oma-scws-http-response -# application/vnd.oma.bcast.associated-procedure-parameter+xml -# application/vnd.oma.bcast.drm-trigger+xml -# application/vnd.oma.bcast.imd+xml -# application/vnd.oma.bcast.ltkm -# application/vnd.oma.bcast.notification+xml -# application/vnd.oma.bcast.provisioningtrigger -# application/vnd.oma.bcast.sgboot -# application/vnd.oma.bcast.sgdd+xml -# application/vnd.oma.bcast.sgdu -# application/vnd.oma.bcast.simple-symbol-container -# application/vnd.oma.bcast.smartcard-trigger+xml -# application/vnd.oma.bcast.sprov+xml -# application/vnd.oma.bcast.stkm -# application/vnd.oma.cab-address-book+xml -# application/vnd.oma.cab-feature-handler+xml -# application/vnd.oma.cab-pcc+xml -# application/vnd.oma.cab-user-prefs+xml -# application/vnd.oma.dcd -# application/vnd.oma.dcdc -application/vnd.oma.dd2+xml dd2 -# application/vnd.oma.drm.risd+xml -# application/vnd.oma.group-usage-list+xml -# application/vnd.oma.pal+xml -# application/vnd.oma.poc.detailed-progress-report+xml -# application/vnd.oma.poc.final-report+xml -# application/vnd.oma.poc.groups+xml -# application/vnd.oma.poc.invocation-descriptor+xml -# application/vnd.oma.poc.optimized-progress-report+xml -# application/vnd.oma.push -# application/vnd.oma.scidm.messages+xml -# application/vnd.oma.xcap-directory+xml -# application/vnd.omads-email+xml -# application/vnd.omads-file+xml -# application/vnd.omads-folder+xml -# application/vnd.omaloc-supl-init -application/vnd.openofficeorg.extension oxt -# application/vnd.openxmlformats-officedocument.custom-properties+xml -# application/vnd.openxmlformats-officedocument.customxmlproperties+xml -# application/vnd.openxmlformats-officedocument.drawing+xml -# application/vnd.openxmlformats-officedocument.drawingml.chart+xml -# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml -# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml -# application/vnd.openxmlformats-officedocument.extended-properties+xml -# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml -# application/vnd.openxmlformats-officedocument.presentationml.comments+xml -# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml -# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml -application/vnd.openxmlformats-officedocument.presentationml.presentation pptx -# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml -application/vnd.openxmlformats-officedocument.presentationml.slide sldx -# application/vnd.openxmlformats-officedocument.presentationml.slide+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml -# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml -application/vnd.openxmlformats-officedocument.presentationml.slideshow ppsx -# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml -# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml -# application/vnd.openxmlformats-officedocument.presentationml.tags+xml -application/vnd.openxmlformats-officedocument.presentationml.template potx -# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml -# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml -application/vnd.openxmlformats-officedocument.spreadsheetml.template xltx -# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml -# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml -# application/vnd.openxmlformats-officedocument.theme+xml -# application/vnd.openxmlformats-officedocument.themeoverride+xml -# application/vnd.openxmlformats-officedocument.vmldrawing -# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.document docx -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml -application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx -# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml -# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml -# application/vnd.openxmlformats-package.core-properties+xml -# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml -# application/vnd.openxmlformats-package.relationships+xml -# application/vnd.quobject-quoxdocument -# application/vnd.osa.netdeploy -application/vnd.osgeo.mapguide.package mgp -# application/vnd.osgi.bundle -application/vnd.osgi.dp dp -# application/vnd.otps.ct-kip+xml -application/vnd.palm pdb pqa oprc -# application/vnd.paos.xml -application/vnd.pawaafile paw -application/vnd.pg.format str -application/vnd.pg.osasli ei6 -# application/vnd.piaccess.application-licence -application/vnd.picsel efif -application/vnd.pmi.widget wg -# application/vnd.poc.group-advertisement+xml -application/vnd.pocketlearn plf -application/vnd.powerbuilder6 pbd -# application/vnd.powerbuilder6-s -# application/vnd.powerbuilder7 -# application/vnd.powerbuilder7-s -# application/vnd.powerbuilder75 -# application/vnd.powerbuilder75-s -# application/vnd.preminet -application/vnd.previewsystems.box box -application/vnd.proteus.magazine mgz -application/vnd.publishare-delta-tree qps -application/vnd.pvi.ptid1 ptid -# application/vnd.pwg-multiplexed -# application/vnd.pwg-xhtml-print+xml -# application/vnd.qualcomm.brew-app-res -application/vnd.quark.quarkxpress qxd qxt qwd qwt qxl qxb -# application/vnd.radisys.moml+xml -# application/vnd.radisys.msml+xml -# application/vnd.radisys.msml-audit+xml -# application/vnd.radisys.msml-audit-conf+xml -# application/vnd.radisys.msml-audit-conn+xml -# application/vnd.radisys.msml-audit-dialog+xml -# application/vnd.radisys.msml-audit-stream+xml -# application/vnd.radisys.msml-conf+xml -# application/vnd.radisys.msml-dialog+xml -# application/vnd.radisys.msml-dialog-base+xml -# application/vnd.radisys.msml-dialog-fax-detect+xml -# application/vnd.radisys.msml-dialog-fax-sendrecv+xml -# application/vnd.radisys.msml-dialog-group+xml -# application/vnd.radisys.msml-dialog-speech+xml -# application/vnd.radisys.msml-dialog-transform+xml -# application/vnd.rainstor.data -# application/vnd.rapid -application/vnd.realvnc.bed bed -application/vnd.recordare.musicxml mxl -application/vnd.recordare.musicxml+xml musicxml -# application/vnd.renlearn.rlprint -application/vnd.rig.cryptonote cryptonote -application/vnd.rim.cod cod -application/vnd.rn-realmedia rm -application/vnd.route66.link66+xml link66 -# application/vnd.ruckus.download -# application/vnd.s3sms -application/vnd.sailingtracker.track st -# application/vnd.sbm.cid -# application/vnd.sbm.mid2 -# application/vnd.scribus -# application/vnd.sealed.3df -# application/vnd.sealed.csf -# application/vnd.sealed.doc -# application/vnd.sealed.eml -# application/vnd.sealed.mht -# application/vnd.sealed.net -# application/vnd.sealed.ppt -# application/vnd.sealed.tiff -# application/vnd.sealed.xls -# application/vnd.sealedmedia.softseal.html -# application/vnd.sealedmedia.softseal.pdf -application/vnd.seemail see -application/vnd.sema sema -application/vnd.semd semd -application/vnd.semf semf -application/vnd.shana.informed.formdata ifm -application/vnd.shana.informed.formtemplate itp -application/vnd.shana.informed.interchange iif -application/vnd.shana.informed.package ipk -application/vnd.simtech-mindmapper twd twds -application/vnd.smaf mmf -# application/vnd.smart.notebook -application/vnd.smart.teacher teacher -# application/vnd.software602.filler.form+xml -# application/vnd.software602.filler.form-xml-zip -application/vnd.solent.sdkm+xml sdkm sdkd -application/vnd.spotfire.dxp dxp -application/vnd.spotfire.sfs sfs -# application/vnd.sss-cod -# application/vnd.sss-dtf -# application/vnd.sss-ntf -application/vnd.stardivision.calc sdc -application/vnd.stardivision.draw sda -application/vnd.stardivision.impress sdd -application/vnd.stardivision.math smf -application/vnd.stardivision.writer sdw vor -application/vnd.stardivision.writer-global sgl -application/vnd.stepmania.package smzip -application/vnd.stepmania.stepchart sm -# application/vnd.street-stream -application/vnd.sun.xml.calc sxc -application/vnd.sun.xml.calc.template stc -application/vnd.sun.xml.draw sxd -application/vnd.sun.xml.draw.template std -application/vnd.sun.xml.impress sxi -application/vnd.sun.xml.impress.template sti -application/vnd.sun.xml.math sxm -application/vnd.sun.xml.writer sxw -application/vnd.sun.xml.writer.global sxg -application/vnd.sun.xml.writer.template stw -# application/vnd.sun.wadl+xml -application/vnd.sus-calendar sus susp -application/vnd.svd svd -# application/vnd.swiftview-ics -application/vnd.symbian.install sis sisx -application/vnd.syncml+xml xsm -application/vnd.syncml.dm+wbxml bdm -application/vnd.syncml.dm+xml xdm -# application/vnd.syncml.dm.notification -# application/vnd.syncml.ds.notification -application/vnd.tao.intent-module-archive tao -application/vnd.tcpdump.pcap pcap cap dmp -application/vnd.tmobile-livetv tmo -application/vnd.trid.tpt tpt -application/vnd.triscape.mxs mxs -application/vnd.trueapp tra -# application/vnd.truedoc -# application/vnd.ubisoft.webplayer -application/vnd.ufdl ufd ufdl -application/vnd.uiq.theme utz -application/vnd.umajin umj -application/vnd.unity unityweb -application/vnd.uoml+xml uoml -# application/vnd.uplanet.alert -# application/vnd.uplanet.alert-wbxml -# application/vnd.uplanet.bearer-choice -# application/vnd.uplanet.bearer-choice-wbxml -# application/vnd.uplanet.cacheop -# application/vnd.uplanet.cacheop-wbxml -# application/vnd.uplanet.channel -# application/vnd.uplanet.channel-wbxml -# application/vnd.uplanet.list -# application/vnd.uplanet.list-wbxml -# application/vnd.uplanet.listcmd -# application/vnd.uplanet.listcmd-wbxml -# application/vnd.uplanet.signal -application/vnd.vcx vcx -# application/vnd.vd-study -# application/vnd.vectorworks -# application/vnd.verimatrix.vcas -# application/vnd.vidsoft.vidconference -application/vnd.visio vsd vst vss vsw -application/vnd.visionary vis -# application/vnd.vividence.scriptfile -application/vnd.vsf vsf -# application/vnd.wap.sic -# application/vnd.wap.slc -application/vnd.wap.wbxml wbxml -application/vnd.wap.wmlc wmlc -application/vnd.wap.wmlscriptc wmlsc -application/vnd.webturbo wtb -# application/vnd.wfa.wsc -# application/vnd.wmc -# application/vnd.wmf.bootstrap -# application/vnd.wolfram.mathematica -# application/vnd.wolfram.mathematica.package -application/vnd.wolfram.player nbp -application/vnd.wordperfect wpd -application/vnd.wqd wqd -# application/vnd.wrq-hp3000-labelled -application/vnd.wt.stf stf -# application/vnd.wv.csp+wbxml -# application/vnd.wv.csp+xml -# application/vnd.wv.ssp+xml -application/vnd.xara xar -application/vnd.xfdl xfdl -# application/vnd.xfdl.webform -# application/vnd.xmi+xml -# application/vnd.xmpie.cpkg -# application/vnd.xmpie.dpkg -# application/vnd.xmpie.plan -# application/vnd.xmpie.ppkg -# application/vnd.xmpie.xlim -application/vnd.yamaha.hv-dic hvd -application/vnd.yamaha.hv-script hvs -application/vnd.yamaha.hv-voice hvp -application/vnd.yamaha.openscoreformat osf -application/vnd.yamaha.openscoreformat.osfpvg+xml osfpvg -# application/vnd.yamaha.remote-setup -application/vnd.yamaha.smaf-audio saf -application/vnd.yamaha.smaf-phrase spf -# application/vnd.yamaha.through-ngn -# application/vnd.yamaha.tunnel-udpencap -application/vnd.yellowriver-custom-menu cmp -application/vnd.zul zir zirz -application/vnd.zzazz.deck+xml zaz -application/voicexml+xml vxml -# application/vq-rtcpxr -# application/watcherinfo+xml -# application/whoispp-query -# application/whoispp-response -application/widget wgt -application/winhlp hlp -# application/wita -# application/wordperfect5.1 -application/wsdl+xml wsdl -application/wspolicy+xml wspolicy -application/x-7z-compressed 7z -application/x-abiword abw -application/x-ace-compressed ace -application/x-authorware-bin aab x32 u32 vox -application/x-authorware-map aam -application/x-authorware-seg aas -application/x-bcpio bcpio -application/x-bittorrent torrent -application/x-bzip bz -application/x-bzip2 bz2 boz -application/x-cdlink vcd -application/x-chat chat -application/x-chess-pgn pgn -# application/x-compress -application/x-cpio cpio -application/x-csh csh -application/x-debian-package deb udeb -application/x-director dir dcr dxr cst cct cxt w3d fgd swa -application/x-doom wad -application/x-dtbncx+xml ncx -application/x-dtbook+xml dtb -application/x-dtbresource+xml res -application/x-dvi dvi -application/x-font-bdf bdf -# application/x-font-dos -# application/x-font-framemaker -application/x-font-ghostscript gsf -# application/x-font-libgrx -application/x-font-linux-psf psf -application/x-font-otf otf -application/x-font-pcf pcf -application/x-font-snf snf -# application/x-font-speedo -# application/x-font-sunos-news -application/x-font-ttf ttf ttc -application/x-font-type1 pfa pfb pfm afm -application/x-font-woff woff -# application/x-font-vfont -application/x-futuresplash spl -application/x-gnumeric gnumeric -application/x-gtar gtar -# application/x-gzip -application/x-hdf hdf -application/x-java-jnlp-file jnlp -application/x-latex latex -application/x-mobipocket-ebook prc mobi -application/x-ms-application application -application/x-ms-wmd wmd -application/x-ms-wmz wmz -application/x-ms-xbap xbap -application/x-msaccess mdb -application/x-msbinder obd -application/x-mscardfile crd -application/x-msclip clp -application/x-msdownload exe dll com bat msi -application/x-msmediaview mvb m13 m14 -application/x-msmetafile wmf -application/x-msmoney mny -application/x-mspublisher pub -application/x-msschedule scd -application/x-msterminal trm -application/x-mswrite wri -application/x-netcdf nc cdf -application/x-pkcs12 p12 pfx -application/x-pkcs7-certificates p7b spc -application/x-pkcs7-certreqresp p7r -application/x-rar-compressed rar -application/x-sh sh -application/x-shar shar -application/x-shockwave-flash swf -application/x-silverlight-app xap -application/x-stuffit sit -application/x-stuffitx sitx -application/x-sv4cpio sv4cpio -application/x-sv4crc sv4crc -application/x-tar tar -application/x-tcl tcl -application/x-tex tex -application/x-tex-tfm tfm -application/x-texinfo texinfo texi -application/x-ustar ustar -application/x-wais-source src -application/x-x509-ca-cert der crt -application/x-xfig fig -application/x-xpinstall xpi -# application/x400-bp -# application/xcap-att+xml -# application/xcap-caps+xml -application/xcap-diff+xml xdf -# application/xcap-el+xml -# application/xcap-error+xml -# application/xcap-ns+xml -# application/xcon-conference-info-diff+xml -# application/xcon-conference-info+xml -application/xenc+xml xenc -application/xhtml+xml xhtml xht -# application/xhtml-voice+xml -application/xml xml xsl -application/xml-dtd dtd -# application/xml-external-parsed-entity -# application/xmpp+xml -application/xop+xml xop -application/xslt+xml xslt -application/xspf+xml xspf -application/xv+xml mxml xhvml xvml xvm -application/yang yang -application/yin+xml yin -application/zip zip -# audio/1d-interleaved-parityfec -# audio/32kadpcm -# audio/3gpp -# audio/3gpp2 -# audio/ac3 -audio/adpcm adp -# audio/amr -# audio/amr-wb -# audio/amr-wb+ -# audio/asc -# audio/atrac-advanced-lossless -# audio/atrac-x -# audio/atrac3 -audio/basic au snd -# audio/bv16 -# audio/bv32 -# audio/clearmode -# audio/cn -# audio/dat12 -# audio/dls -# audio/dsr-es201108 -# audio/dsr-es202050 -# audio/dsr-es202211 -# audio/dsr-es202212 -# audio/dv -# audio/dvi4 -# audio/eac3 -# audio/evrc -# audio/evrc-qcp -# audio/evrc0 -# audio/evrc1 -# audio/evrcb -# audio/evrcb0 -# audio/evrcb1 -# audio/evrcwb -# audio/evrcwb0 -# audio/evrcwb1 -# audio/example -# audio/fwdred -# audio/g719 -# audio/g722 -# audio/g7221 -# audio/g723 -# audio/g726-16 -# audio/g726-24 -# audio/g726-32 -# audio/g726-40 -# audio/g728 -# audio/g729 -# audio/g7291 -# audio/g729d -# audio/g729e -# audio/gsm -# audio/gsm-efr -# audio/gsm-hr-08 -# audio/ilbc -# audio/ip-mr_v2.5 -# audio/l16 -# audio/l20 -# audio/l24 -# audio/l8 -# audio/lpc -audio/midi mid midi kar rmi -# audio/mobile-xmf -audio/mp4 mp4a -# audio/mp4a-latm -# audio/mpa -# audio/mpa-robust -audio/mpeg mpga mp2 mp2a mp3 m2a m3a -# audio/mpeg4-generic -audio/ogg oga ogg spx -# audio/parityfec -# audio/pcma -# audio/pcma-wb -# audio/pcmu-wb -# audio/pcmu -# audio/prs.sid -# audio/qcelp -# audio/red -# audio/rtp-enc-aescm128 -# audio/rtp-midi -# audio/rtx -# audio/smv -# audio/smv0 -# audio/smv-qcp -# audio/sp-midi -# audio/speex -# audio/t140c -# audio/t38 -# audio/telephone-event -# audio/tone -# audio/uemclip -# audio/ulpfec -# audio/vdvi -# audio/vmr-wb -# audio/vnd.3gpp.iufp -# audio/vnd.4sb -# audio/vnd.audiokoz -# audio/vnd.celp -# audio/vnd.cisco.nse -# audio/vnd.cmles.radio-events -# audio/vnd.cns.anp1 -# audio/vnd.cns.inf1 -audio/vnd.dece.audio uva uvva -audio/vnd.digital-winds eol -# audio/vnd.dlna.adts -# audio/vnd.dolby.heaac.1 -# audio/vnd.dolby.heaac.2 -# audio/vnd.dolby.mlp -# audio/vnd.dolby.mps -# audio/vnd.dolby.pl2 -# audio/vnd.dolby.pl2x -# audio/vnd.dolby.pl2z -# audio/vnd.dolby.pulse.1 -audio/vnd.dra dra -audio/vnd.dts dts -audio/vnd.dts.hd dtshd -# audio/vnd.dvb.file dvb -# audio/vnd.everad.plj -# audio/vnd.hns.audio -audio/vnd.lucent.voice lvp -audio/vnd.ms-playready.media.pya pya -# audio/vnd.nokia.mobile-xmf -# audio/vnd.nortel.vbk -audio/vnd.nuera.ecelp4800 ecelp4800 -audio/vnd.nuera.ecelp7470 ecelp7470 -audio/vnd.nuera.ecelp9600 ecelp9600 -# audio/vnd.octel.sbc -# audio/vnd.qcelp -# audio/vnd.rhetorex.32kadpcm -audio/vnd.rip rip -# audio/vnd.sealedmedia.softseal.mpeg -# audio/vnd.vmx.cvsd -# audio/vorbis -# audio/vorbis-config -audio/webm weba -audio/x-aac aac -audio/x-aiff aif aiff aifc -audio/x-mpegurl m3u -audio/x-ms-wax wax -audio/x-ms-wma wma -audio/x-pn-realaudio ram ra -audio/x-pn-realaudio-plugin rmp -audio/x-wav wav -chemical/x-cdx cdx -chemical/x-cif cif -chemical/x-cmdf cmdf -chemical/x-cml cml -chemical/x-csml csml -# chemical/x-pdb -chemical/x-xyz xyz -image/bmp bmp -image/cgm cgm -# image/example -# image/fits -image/g3fax g3 -image/gif gif -image/ief ief -# image/jp2 -image/jpeg jpeg jpg jpe -# image/jpm -# image/jpx -image/ktx ktx -# image/naplps -image/png png -image/prs.btif btif -# image/prs.pti -image/svg+xml svg svgz -# image/t38 -image/tiff tiff tif -# image/tiff-fx -image/vnd.adobe.photoshop psd -# image/vnd.cns.inf2 -image/vnd.dece.graphic uvi uvvi uvg uvvg -image/vnd.dvb.subtitle sub -image/vnd.djvu djvu djv -image/vnd.dwg dwg -image/vnd.dxf dxf -image/vnd.fastbidsheet fbs -image/vnd.fpx fpx -image/vnd.fst fst -image/vnd.fujixerox.edmics-mmr mmr -image/vnd.fujixerox.edmics-rlc rlc -# image/vnd.globalgraphics.pgb -# image/vnd.microsoft.icon -# image/vnd.mix -image/vnd.ms-modi mdi -image/vnd.net-fpx npx -# image/vnd.radiance -# image/vnd.sealed.png -# image/vnd.sealedmedia.softseal.gif -# image/vnd.sealedmedia.softseal.jpg -# image/vnd.svf -image/vnd.wap.wbmp wbmp -image/vnd.xiff xif -image/webp webp -image/x-cmu-raster ras -image/x-cmx cmx -image/x-freehand fh fhc fh4 fh5 fh7 -image/x-icon ico -image/x-pcx pcx -image/x-pict pic pct -image/x-portable-anymap pnm -image/x-portable-bitmap pbm -image/x-portable-graymap pgm -image/x-portable-pixmap ppm -image/x-rgb rgb -image/x-xbitmap xbm -image/x-xpixmap xpm -image/x-xwindowdump xwd -# message/cpim -# message/delivery-status -# message/disposition-notification -# message/example -# message/external-body -# message/feedback-report -# message/global -# message/global-delivery-status -# message/global-disposition-notification -# message/global-headers -# message/http -# message/imdn+xml -# message/news -# message/partial -message/rfc822 eml mime -# message/s-http -# message/sip -# message/sipfrag -# message/tracking-status -# message/vnd.si.simp -# model/example -model/iges igs iges -model/mesh msh mesh silo -model/vnd.collada+xml dae -model/vnd.dwf dwf -# model/vnd.flatland.3dml -model/vnd.gdl gdl -# model/vnd.gs-gdl -# model/vnd.gs.gdl -model/vnd.gtw gtw -# model/vnd.moml+xml -model/vnd.mts mts -# model/vnd.parasolid.transmit.binary -# model/vnd.parasolid.transmit.text -model/vnd.vtu vtu -model/vrml wrl vrml -# multipart/alternative -# multipart/appledouble -# multipart/byteranges -# multipart/digest -# multipart/encrypted -# multipart/example -# multipart/form-data -# multipart/header-set -# multipart/mixed -# multipart/parallel -# multipart/related -# multipart/report -# multipart/signed -# multipart/voice-message -# text/1d-interleaved-parityfec -text/calendar ics ifb -text/css css -text/csv csv -# text/directory -# text/dns -# text/ecmascript -# text/enriched -# text/example -# text/fwdred -text/html html htm -# text/javascript -text/n3 n3 -# text/parityfec -text/plain txt text conf def list log in -# text/prs.fallenstein.rst -text/prs.lines.tag dsc -# text/vnd.radisys.msml-basic-layout -# text/red -# text/rfc822-headers -text/richtext rtx -# text/rtf -# text/rtp-enc-aescm128 -# text/rtx -text/sgml sgml sgm -# text/t140 -text/tab-separated-values tsv -text/troff t tr roff man me ms -text/turtle ttl -# text/ulpfec -text/uri-list uri uris urls -text/vcard vcard -# text/vnd.abc -text/vnd.curl curl -text/vnd.curl.dcurl dcurl -text/vnd.curl.scurl scurl -text/vnd.curl.mcurl mcurl -# text/vnd.dmclientscript -text/vnd.dvb.subtitle sub -# text/vnd.esmertec.theme-descriptor -text/vnd.fly fly -text/vnd.fmi.flexstor flx -text/vnd.graphviz gv -text/vnd.in3d.3dml 3dml -text/vnd.in3d.spot spot -# text/vnd.iptc.newsml -# text/vnd.iptc.nitf -# text/vnd.latex-z -# text/vnd.motorola.reflex -# text/vnd.ms-mediapackage -# text/vnd.net2phone.commcenter.command -# text/vnd.si.uricatalogue -text/vnd.sun.j2me.app-descriptor jad -# text/vnd.trolltech.linguist -# text/vnd.wap.si -# text/vnd.wap.sl -text/vnd.wap.wml wml -text/vnd.wap.wmlscript wmls -text/x-asm s asm -text/x-c c cc cxx cpp h hh dic -text/x-fortran f for f77 f90 -text/x-pascal p pas -text/x-java-source java -text/x-setext etx -text/x-uuencode uu -text/x-vcalendar vcs -text/x-vcard vcf -# text/xml -# text/xml-external-parsed-entity -# video/1d-interleaved-parityfec -video/3gpp 3gp -# video/3gpp-tt -video/3gpp2 3g2 -# video/bmpeg -# video/bt656 -# video/celb -# video/dv -# video/example -video/h261 h261 -video/h263 h263 -# video/h263-1998 -# video/h263-2000 -video/h264 h264 -# video/h264-rcdo -# video/h264-svc -video/jpeg jpgv -# video/jpeg2000 -video/jpm jpm jpgm -video/mj2 mj2 mjp2 -# video/mp1s -# video/mp2p -# video/mp2t -video/mp4 mp4 mp4v mpg4 -# video/mp4v-es -video/mpeg mpeg mpg mpe m1v m2v -# video/mpeg4-generic -# video/mpv -# video/nv -video/ogg ogv -# video/parityfec -# video/pointer -video/quicktime qt mov -# video/raw -# video/rtp-enc-aescm128 -# video/rtx -# video/smpte292m -# video/ulpfec -# video/vc1 -# video/vnd.cctv -video/vnd.dece.hd uvh uvvh -video/vnd.dece.mobile uvm uvvm -# video/vnd.dece.mp4 -video/vnd.dece.pd uvp uvvp -video/vnd.dece.sd uvs uvvs -video/vnd.dece.video uvv uvvv -# video/vnd.directv.mpeg -# video/vnd.directv.mpeg-tts -# video/vnd.dlna.mpeg-tts -video/vnd.dvb.file dvb -video/vnd.fvt fvt -# video/vnd.hns.video -# video/vnd.iptvforum.1dparityfec-1010 -# video/vnd.iptvforum.1dparityfec-2005 -# video/vnd.iptvforum.2dparityfec-1010 -# video/vnd.iptvforum.2dparityfec-2005 -# video/vnd.iptvforum.ttsavc -# video/vnd.iptvforum.ttsmpeg2 -# video/vnd.motorola.video -# video/vnd.motorola.videop -video/vnd.mpegurl mxu m4u -video/vnd.ms-playready.media.pyv pyv -# video/vnd.nokia.interleaved-multimedia -# video/vnd.nokia.videovoip -# video/vnd.objectvideo -# video/vnd.sealed.mpeg1 -# video/vnd.sealed.mpeg4 -# video/vnd.sealed.swf -# video/vnd.sealedmedia.softseal.mov -video/vnd.uvvu.mp4 uvu uvvu -video/vnd.vivo viv -video/webm webm -video/x-f4v f4v -video/x-fli fli -video/x-flv flv -video/x-m4v m4v -video/x-ms-asf asf asx -video/x-ms-wm wm -video/x-ms-wmv wmv -video/x-ms-wmx wmx -video/x-ms-wvx wvx -video/x-msvideo avi -video/x-sgi-movie movie -x-conference/x-cooltalk ice diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/types/node.types b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/types/node.types deleted file mode 100644 index b7fe8c0..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/node_modules/mime/types/node.types +++ /dev/null @@ -1,65 +0,0 @@ -# What: Google Chrome Extension -# Why: To allow apps to (work) be served with the right content type header. -# http://codereview.chromium.org/2830017 -# Added by: niftylettuce -application/x-chrome-extension crx - -# What: OTF Message Silencer -# Why: To silence the "Resource interpreted as font but transferred with MIME -# type font/otf" message that occurs in Google Chrome -# Added by: niftylettuce -font/opentype otf - -# What: HTC support -# Why: To properly render .htc files such as CSS3PIE -# Added by: niftylettuce -text/x-component htc - -# What: HTML5 application cache manifest -# Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps -# per https://developer.mozilla.org/en/offline_resources_in_firefox -# Added by: louisremi -text/cache-manifest appcache manifest - -# What: node binary buffer format -# Why: semi-standard extension w/in the node community -# Added by: tootallnate -application/octet-stream buffer - -# What: The "protected" MP-4 formats used by iTunes. -# Why: Required for streaming music to browsers (?) -# Added by: broofa -application/mp4 m4p -audio/mp4 m4a - -# What: Music playlist format (http://en.wikipedia.org/wiki/M3U) -# Why: See https://github.com/bentomas/node-mime/pull/6 -# Added by: mjrusso -application/x-mpegURL m3u8 - -# What: Video format, Part of RFC1890 -# Why: See https://github.com/bentomas/node-mime/pull/6 -# Added by: mjrusso -video/MP2T ts - -# What: The FLAC lossless codec format -# Why: Streaming and serving FLAC audio -# Added by: jacobrask -audio/flac flac - -# What: EventSource mime type -# Why: mime type of Server-Sent Events stream -# http://www.w3.org/TR/eventsource/#text-event-stream -# Added by: francois2metz -text/event-stream event-stream - -# What: Mozilla App manifest mime type -# Why: https://developer.mozilla.org/en/Apps/Manifest#Serving_manifests -# Added by: ednapiranha -application/x-web-app-manifest+json webapp - -# What: Matroska Mime Types -# Why: http://en.wikipedia.org/wiki/Matroska -# Added by: aduncan88 -video/x-matroska mkv -audio/x-matroska mka diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/package.json deleted file mode 100644 index 5e936f1..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/node_modules/send/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "send", - "version": "0.1.0", - "description": "Better streaming static file server with Range and conditional-GET support", - "keywords": [ - "static", - "file", - "server" - ], - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "dependencies": { - "debug": "*", - "mime": "1.2.6", - "fresh": "0.1.0", - "range-parser": "0.0.4" - }, - "devDependencies": { - "mocha": "*", - "should": "*", - "supertest": "0.0.1", - "connect": "2.x" - }, - "scripts": { - "test": "make test" - }, - "main": "index", - "readme": "\n# send\n\n Send is Connect's `static()` extracted for generalized use, a streaming static file\n server supporting partial responses (Ranges), conditional-GET negotiation, high test coverage, and granular events which may be leveraged to take appropriate actions in your application or framework.\n\n## Installation\n\n $ npm install send\n\n## Examples\n\n Small:\n\n```js\nvar http = require('http');\nvar send = require('send');\n\nvar app = http.createServer(function(req, res){\n send(req, req.url).pipe(res);\n});\n```\n\n Serving from a root directory with custom error-handling:\n\n```js\nvar http = require('http');\nvar send = require('send');\n\nvar app = http.createServer(function(req, res){\n // your custom error-handling logic:\n function error(err) {\n res.statusCode = err.status || 500;\n res.end(err.message);\n }\n\n // your custom directory handling logic:\n function redirect() {\n res.statusCode = 301;\n res.setHeader('Location', req.url + '/');\n res.end('Redirecting to ' + req.url + '/');\n }\n\n // transfer arbitrary files from within\n // /www/example.com/public/*\n send(req, url.parse(req.url).pathname)\n .root('/www/example.com/public')\n .on('error', error)\n .on('directory', redirect)\n .pipe(res);\n});\n```\n\n## API\n\n### Events\n\n - `error` an error occurred `(err)`\n - `directory` a directory was requested\n - `stream` file streaming has started `(stream)`\n - `end` streaming has completed\n\n### .root(dir)\n\n Serve files relative to `path`. Aliased as `.from(dir)`.\n\n### .index(path)\n\n By default send supports \"index.html\" files, to disable this\n invoke `.index(false)` or to supply a new index pass a string.\n\n### .maxage(ms)\n\n Provide a max-age in milliseconds for http caching, defaults to 0.\n\n## Error-handling\n\n By default when no `error` listeners are present an automatic response will be made, otherwise you have full control over the response, aka you may show a 5xx page etc.\n\n## Caching\n\n It does _not_ perform internal caching, you should use a reverse proxy cache such\n as Varnish for this, or those fancy things called CDNs. If your application is small enough that it would benefit from single-node memory caching, it's small enough that it does not need caching at all ;).\n\n## Debugging\n\n To enable `debug()` instrumentation output export __DEBUG__:\n\n```\n$ DEBUG=send node app\n```\n\n## Running tests\n\n```\n$ npm install\n$ make test\n```\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", - "_id": "send@0.1.0", - "_from": "send@0.1.0" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/package.json b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/package.json deleted file mode 100644 index cb52fb9..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "express", - "description": "Sinatra inspired web development framework", - "version": "3.1.1", - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - "contributors": [ - { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca" - }, - { - "name": "Aaron Heckmann", - "email": "aaron.heckmann+github@gmail.com" - }, - { - "name": "Ciaran Jessup", - "email": "ciaranj@gmail.com" - }, - { - "name": "Guillermo Rauch", - "email": "rauchg@gmail.com" - } - ], - "dependencies": { - "connect": "2.7.4", - "commander": "0.6.1", - "range-parser": "0.0.4", - "mkdirp": "~0.3.4", - "cookie": "0.0.5", - "buffer-crc32": "~0.2.1", - "fresh": "0.1.0", - "methods": "0.0.1", - "send": "0.1.0", - "cookie-signature": "0.0.1", - "debug": "*" - }, - "devDependencies": { - "ejs": "*", - "mocha": "*", - "jade": "*", - "hjs": "*", - "stylus": "*", - "should": "*", - "connect-redis": "*", - "github-flavored-markdown": "*", - "supertest": "0.0.1" - }, - "keywords": [ - "express", - "framework", - "sinatra", - "web", - "rest", - "restful", - "router", - "app", - "api" - ], - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/express" - }, - "main": "index", - "bin": { - "express": "./bin/express" - }, - "scripts": { - "prepublish": "npm prune", - "test": "make test" - }, - "engines": { - "node": "*" - }, - "readme": "![express logo](http://f.cl.ly/items/0V2S1n0K1i3y1c122g04/Screen%20Shot%202012-04-11%20at%209.59.42%20AM.png)\n\n Fast, unopinionated, minimalist web framework for [node](http://nodejs.org). [![Build Status](https://secure.travis-ci.org/visionmedia/express.png)](http://travis-ci.org/visionmedia/express) [![Dependency Status](https://gemnasium.com/visionmedia/express.png)](https://gemnasium.com/visionmedia/express)\n\n```js\nvar express = require('express');\nvar app = express();\n\napp.get('/', function(req, res){\n res.send('Hello World');\n});\n\napp.listen(3000);\n```\n\n## Installation\n\n $ npm install -g express\n\n## Quick Start\n\n The quickest way to get started with express is to utilize the executable `express(1)` to generate an application as shown below:\n\n Create the app:\n\n $ npm install -g express\n $ express /tmp/foo && cd /tmp/foo\n\n Install dependencies:\n\n $ npm install\n\n Start the server:\n\n $ node app\n\n## Features\n\n * Built on [Connect](http://github.com/senchalabs/connect)\n * Robust routing\n * HTTP helpers (redirection, caching, etc)\n * View system supporting 14+ template engines\n * Content negotiation\n * Focus on high performance\n * Environment based configuration\n * Executable for generating applications quickly\n * High test coverage\n\n## Philosophy\n\n The Express philosophy is to provide small, robust tooling for HTTP servers. Making\n it a great solution for single page applications, web sites, hybrids, or public\n HTTP APIs.\n\n Built on Connect you can use _only_ what you need, and nothing more, applications\n can be as big or as small as you like, even a single file. Express does\n not force you to use any specific ORM or template engine. With support for over\n 14 template engines via [Consolidate.js](http://github.com/visionmedia/consolidate.js)\n you can quickly craft your perfect framework.\n\n## More Information\n\n * Join #express on freenode\n * [Google Group](http://groups.google.com/group/express-js) for discussion\n * Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) on twitter for updates\n * Visit the [Wiki](http://github.com/visionmedia/express/wiki)\n * [日本語ドキュメンテーション](http://hideyukisaito.com/doc/expressjs/) by [hideyukisaito](https://github.com/hideyukisaito)\n * [Русскоязычная документация](http://express-js.ru/)\n * Run express examples [online](https://runnable.com/express)\n\n## Viewing Examples\n\nClone the Express repo, then install the dev dependencies to install all the example / test suite deps:\n\n $ git clone git://github.com/visionmedia/express.git --depth 1\n $ cd express\n $ npm install\n\nthen run whichever tests you want:\n\n $ node examples/content-negotiation\n\n## Running Tests\n\nTo run the test suite first invoke the following command within the repo, installing the development dependencies:\n\n $ npm install\n\nthen run the tests:\n\n $ make test\n\n## Contributors\n\n```\nproject: express\ncommits: 3559\nactive : 468 days\nfiles : 237\nauthors:\n 1891\tTj Holowaychuk 53.1%\n 1285\tvisionmedia 36.1%\n 182\tTJ Holowaychuk 5.1%\n 54\tAaron Heckmann 1.5%\n 34\tcsausdev 1.0%\n 26\tciaranj 0.7%\n 21\tRobert Sköld 0.6%\n 6\tGuillermo Rauch 0.2%\n 3\tDav Glass 0.1%\n 3\tNick Poulden 0.1%\n 2\tRandy Merrill 0.1%\n 2\tBenny Wong 0.1%\n 2\tHunter Loftis 0.1%\n 2\tJake Gordon 0.1%\n 2\tBrian McKinney 0.1%\n 2\tRoman Shtylman 0.1%\n 2\tBen Weaver 0.1%\n 2\tDave Hoover 0.1%\n 2\tEivind Fjeldstad 0.1%\n 2\tDaniel Shaw 0.1%\n 1\tMatt Colyer 0.0%\n 1\tPau Ramon 0.0%\n 1\tPero Pejovic 0.0%\n 1\tPeter Rekdal Sunde 0.0%\n 1\tRaynos 0.0%\n 1\tTeng Siong Ong 0.0%\n 1\tViktor Kelemen 0.0%\n 1\tctide 0.0%\n 1\t8bitDesigner 0.0%\n 1\tisaacs 0.0%\n 1\tmgutz 0.0%\n 1\tpikeas 0.0%\n 1\tshuwatto 0.0%\n 1\ttstrimple 0.0%\n 1\tewoudj 0.0%\n 1\tAdam Sanderson 0.0%\n 1\tAndrii Kostenko 0.0%\n 1\tAndy Hiew 0.0%\n 1\tArpad Borsos 0.0%\n 1\tAshwin Purohit 0.0%\n 1\tBenjen 0.0%\n 1\tDarren Torpey 0.0%\n 1\tGreg Ritter 0.0%\n 1\tGregory Ritter 0.0%\n 1\tJames Herdman 0.0%\n 1\tJim Snodgrass 0.0%\n 1\tJoe McCann 0.0%\n 1\tJonathan Dumaine 0.0%\n 1\tJonathan Palardy 0.0%\n 1\tJonathan Zacsh 0.0%\n 1\tJustin Lilly 0.0%\n 1\tKen Sato 0.0%\n 1\tMaciej Małecki 0.0%\n 1\tMasahiro Hayashi 0.0%\n```\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2009-2012 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", - "readmeFilename": "Readme.md", - "_id": "express@3.1.1", - "dist": { - "shasum": "46f6247a14d17e2b488e9ee6df5df19c1229cbf1" - }, - "_from": "express@3.1.1", - "_resolved": "https://registry.npmjs.org/express/-/express-3.1.1.tgz" -} diff --git a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/test.js b/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/test.js deleted file mode 100644 index 50cf320..0000000 --- a/node_modules/mongoose/examples/express/connection-sharing/node_modules/express/test.js +++ /dev/null @@ -1,38 +0,0 @@ - -/** - * Module dependencies. - */ - -var express = require('./') - , app = express() - -var users = ['foo', 'bar', 'baz']; - -app.use(express.bodyParser()); - -app.get('/api/users', function(req, res){ - res.send(users); -}); - -app.del('/api/users', function(req, res){ - users = []; - res.send(200); -}); - -app.post('/api/users', function(req, res){ - users.push(req.body.name); - res.send(201); -}); - -app.get('/api/user/:id', function(req, res){ - var id = req.params.id; - res.send(users[id]); -}); - -app.use('/api', function(req, res, next){ - var err = new Error('Method Not Allowed'); - err.status = 405; -}); - -app.listen(5555); -console.log('listening on 5555'); diff --git a/node_modules/mongoose/examples/hooks.js b/node_modules/mongoose/examples/hooks.js deleted file mode 100644 index 01b2bb1..0000000 --- a/node_modules/mongoose/examples/hooks.js +++ /dev/null @@ -1,42 +0,0 @@ - -var mongoose = require('mongoose') -var Schema = mongoose.Schema; - -mongoose.connect('mongodb://localhost/example-hooks'); - -var schema = Schema({ name: String }); -schema.post('save', function () { - console.log('post save hook', arguments); -}) - -schema.pre('save', function (next) { - console.log('pre save'); - next(); -}) - -var M = mongoose.model('Hooks', schema); - -var doc = new M({ name: 'hooooks' }); -doc.save(function (err) { - console.log('save callback'); - mongoose.disconnect(); -}) - - -//// - -Model.on('init', cb); -Model.on('remove', cb); -Model.on('update', cb); - // Model.update() and doc.save() -Model.on('insert', cb); -Model.on('save', cb); - -var promise = Model.save(doc, options, callback); - -// - -var schema = new Schema(..); -schema.pre('save', function (next, done) { - -}) diff --git a/node_modules/mongoose/examples/population-across-three-collections.js b/node_modules/mongoose/examples/population-across-three-collections.js deleted file mode 100644 index 4bec928..0000000 --- a/node_modules/mongoose/examples/population-across-three-collections.js +++ /dev/null @@ -1,135 +0,0 @@ - -var assert = require('assert') -var mongoose = require('../'); -var Schema = mongoose.Schema; -var ObjectId = mongoose.Types.ObjectId; - -/** - * Connect to the db - */ - -var dbname = 'testing_populateAdInfinitum_' + require('../lib/utils').random() -mongoose.connect('localhost', dbname); -mongoose.connection.on('error', function() { - console.error('connection error', arguments); -}); - -/** - * Schemas - */ - -var user = new Schema({ - name: String, - friends: [{ - type: Schema.ObjectId, - ref: 'User' - }] -}); -var User = mongoose.model('User', user); - -var blogpost = Schema({ - title: String, - tags: [String], - author: { - type: Schema.ObjectId, - ref: 'User' - } -}) -var BlogPost = mongoose.model('BlogPost', blogpost); - -/** - * example - */ - -mongoose.connection.on('open', function() { - - /** - * Generate data - */ - - var userIds = [new ObjectId, new ObjectId, new ObjectId, new ObjectId]; - var users = []; - - users.push({ - _id: userIds[0], - name: 'mary', - friends: [userIds[1], userIds[2], userIds[3]] - }); - users.push({ - _id: userIds[1], - name: 'bob', - friends: [userIds[0], userIds[2], userIds[3]] - }); - users.push({ - _id: userIds[2], - name: 'joe', - friends: [userIds[0], userIds[1], userIds[3]] - }); - users.push({ - _id: userIds[3], - name: 'sally', - friends: [userIds[0], userIds[1], userIds[2]] - }); - - User.create(users, function(err, docs) { - assert.ifError(err); - - var blogposts = []; - blogposts.push({ - title: 'blog 1', - tags: ['fun', 'cool'], - author: userIds[3] - }) - blogposts.push({ - title: 'blog 2', - tags: ['cool'], - author: userIds[1] - }) - blogposts.push({ - title: 'blog 3', - tags: ['fun', 'odd'], - author: userIds[2] - }) - - BlogPost.create(blogposts, function(err, docs) { - assert.ifError(err); - - /** - * Population - */ - - BlogPost - .find({ tags: 'fun' }) - .lean() - .populate('author') - .exec(function(err, docs) { - assert.ifError(err); - - /** - * Populate the populated documents - */ - - var opts = { - path: 'author.friends', - select: 'name', - options: { limit: 2 } - } - - BlogPost.populate(docs, opts, function(err, docs) { - assert.ifError(err); - console.log('populated'); - var s = require('util').inspect(docs, { depth: null }) - console.log(s); - done(); - }) - }) - }) - }) -}); - -function done(err) { - if (err) console.error(err.stack); - mongoose.connection.db.dropDatabase(function() { - mongoose.connection.close(); - }); -} diff --git a/node_modules/mongoose/examples/population-basic.js b/node_modules/mongoose/examples/population-basic.js deleted file mode 100644 index c1d6a70..0000000 --- a/node_modules/mongoose/examples/population-basic.js +++ /dev/null @@ -1,95 +0,0 @@ - -var mongoose = require('mongoose') -var Schema = mongoose.Schema; - -console.log('Running mongoose version %s', mongoose.version); - -/** - * Console schema - */ - -var consoleSchema = Schema({ - name: String - , manufacturer: String - , released: Date -}) -var Console = mongoose.model('Console', consoleSchema); - -/** - * Game schema - */ - -var gameSchema = Schema({ - name: String - , developer: String - , released: Date - , consoles: [{ type: Schema.Types.ObjectId, ref: 'Console' }] -}) -var Game = mongoose.model('Game', gameSchema); - -/** - * Connect to the console database on localhost with - * the default port (27017) - */ - -mongoose.connect('mongodb://localhost/console', function (err) { - // if we failed to connect, abort - if (err) throw err; - - // we connected ok - createData(); -}) - -/** - * Data generation - */ - -function createData () { - Console.create({ - name: 'Nintendo 64' - , manufacturer: 'Nintendo' - , released: 'September 29, 1996' - }, function (err, nintendo64) { - if (err) return done(err); - - Game.create({ - name: 'Legend of Zelda: Ocarina of Time' - , developer: 'Nintendo' - , released: new Date('November 21, 1998') - , consoles: [nintendo64] - }, function (err) { - if (err) return done(err); - example(); - }) - }) -} - -/** - * Population - */ - -function example () { - Game - .findOne({ name: /^Legend of Zelda/ }) - .populate('consoles') - .exec(function (err, ocinara) { - if (err) return done(err); - - console.log( - '"%s" was released for the %s on %s' - , ocinara.name - , ocinara.consoles[0].name - , ocinara.released.toLocaleDateString()); - - done(); - }) -} - -function done (err) { - if (err) console.error(err); - Console.remove(function () { - Game.remove(function () { - mongoose.disconnect(); - }) - }) -} diff --git a/node_modules/mongoose/examples/population-of-existing-doc.js b/node_modules/mongoose/examples/population-of-existing-doc.js deleted file mode 100644 index 6d48fdc..0000000 --- a/node_modules/mongoose/examples/population-of-existing-doc.js +++ /dev/null @@ -1,101 +0,0 @@ - -var mongoose = require('mongoose') -var Schema = mongoose.Schema; - -console.log('Running mongoose version %s', mongoose.version); - -/** - * Console schema - */ - -var consoleSchema = Schema({ - name: String - , manufacturer: String - , released: Date -}) -var Console = mongoose.model('Console', consoleSchema); - -/** - * Game schema - */ - -var gameSchema = Schema({ - name: String - , developer: String - , released: Date - , consoles: [{ type: Schema.Types.ObjectId, ref: 'Console' }] -}) -var Game = mongoose.model('Game', gameSchema); - -/** - * Connect to the console database on localhost with - * the default port (27017) - */ - -mongoose.connect('mongodb://localhost/console', function (err) { - // if we failed to connect, abort - if (err) throw err; - - // we connected ok - createData(); -}) - -/** - * Data generation - */ - -function createData () { - Console.create({ - name: 'Nintendo 64' - , manufacturer: 'Nintendo' - , released: 'September 29, 1996' - }, function (err, nintendo64) { - if (err) return done(err); - - Game.create({ - name: 'Legend of Zelda: Ocarina of Time' - , developer: 'Nintendo' - , released: new Date('November 21, 1998') - , consoles: [nintendo64] - }, function (err) { - if (err) return done(err); - example(); - }) - }) -} - -/** - * Population - */ - -function example () { - Game - .findOne({ name: /^Legend of Zelda/ }) - .exec(function (err, ocinara) { - if (err) return done(err); - - console.log('"%s" console _id: %s', ocinara.name, ocinara.consoles[0]); - - // population of existing document - ocinara.populate('consoles', function (err) { - if (err) return done(err); - - console.log( - '"%s" was released for the %s on %s' - , ocinara.name - , ocinara.consoles[0].name - , ocinara.released.toLocaleDateString()); - - done(); - }) - }) -} - -function done (err) { - if (err) console.error(err); - Console.remove(function () { - Game.remove(function () { - mongoose.disconnect(); - }) - }) -} diff --git a/node_modules/mongoose/examples/population-of-multiple-existing-docs.js b/node_modules/mongoose/examples/population-of-multiple-existing-docs.js deleted file mode 100644 index 6d918ff..0000000 --- a/node_modules/mongoose/examples/population-of-multiple-existing-docs.js +++ /dev/null @@ -1,112 +0,0 @@ - -var mongoose = require('mongoose') -var Schema = mongoose.Schema; - -console.log('Running mongoose version %s', mongoose.version); - -/** - * Console schema - */ - -var consoleSchema = Schema({ - name: String - , manufacturer: String - , released: Date -}) -var Console = mongoose.model('Console', consoleSchema); - -/** - * Game schema - */ - -var gameSchema = Schema({ - name: String - , developer: String - , released: Date - , consoles: [{ type: Schema.Types.ObjectId, ref: 'Console' }] -}) -var Game = mongoose.model('Game', gameSchema); - -/** - * Connect to the console database on localhost with - * the default port (27017) - */ - -mongoose.connect('mongodb://localhost/console', function (err) { - // if we failed to connect, abort - if (err) throw err; - - // we connected ok - createData(); -}) - -/** - * Data generation - */ - -function createData () { - Console.create({ - name: 'Nintendo 64' - , manufacturer: 'Nintendo' - , released: 'September 29, 1996' - }, { - name: 'Super Nintendo' - , manufacturer: 'Nintendo' - , released: 'August 23, 1991' - }, function (err, nintendo64, superNintendo) { - if (err) return done(err); - - Game.create({ - name: 'Legend of Zelda: Ocarina of Time' - , developer: 'Nintendo' - , released: new Date('November 21, 1998') - , consoles: [nintendo64] - }, { - name: 'Mario Kart' - , developer: 'Nintendo' - , released: 'September 1, 1992' - , consoles: [superNintendo] - }, function (err) { - if (err) return done(err); - example(); - }) - }) -} - -/** - * Population - */ - -function example () { - Game - .find({}) - .exec(function (err, games) { - if (err) return done(err); - - console.log('found %d games', games.length); - - var options = { path: 'consoles', select: 'name released -_id' }; - Game.populate(games, options, function (err, games) { - if (err) return done(err); - - games.forEach(function (game) { - console.log( - '"%s" was released for the %s on %s' - , game.name - , game.consoles[0].name - , game.released.toLocaleDateString()); - }) - - done() - }) - }) -} - -function done (err) { - if (err) console.error(err); - Console.remove(function () { - Game.remove(function () { - mongoose.disconnect(); - }) - }) -} diff --git a/node_modules/mongoose/examples/population-options.js b/node_modules/mongoose/examples/population-options.js deleted file mode 100644 index 7387b3b..0000000 --- a/node_modules/mongoose/examples/population-options.js +++ /dev/null @@ -1,124 +0,0 @@ - -var mongoose = require('mongoose') -var Schema = mongoose.Schema; - -console.log('Running mongoose version %s', mongoose.version); - -/** - * Console schema - */ - -var consoleSchema = Schema({ - name: String - , manufacturer: String - , released: Date -}) -var Console = mongoose.model('Console', consoleSchema); - -/** - * Game schema - */ - -var gameSchema = Schema({ - name: String - , developer: String - , released: Date - , consoles: [{ type: Schema.Types.ObjectId, ref: 'Console' }] -}) -var Game = mongoose.model('Game', gameSchema); - -/** - * Connect to the console database on localhost with - * the default port (27017) - */ - -mongoose.connect('mongodb://localhost/console', function (err) { - // if we failed to connect, abort - if (err) throw err; - - // we connected ok - createData(); -}) - -/** - * Data generation - */ - -function createData () { - Console.create({ - name: 'Nintendo 64' - , manufacturer: 'Nintendo' - , released: 'September 29, 1996' - }, { - name: 'Super Nintendo' - , manufacturer: 'Nintendo' - , released: 'August 23, 1991' - }, { - name: 'XBOX 360' - , manufacturer: 'Microsoft' - , released: 'November 22, 2005' - }, function (err, nintendo64, superNintendo, xbox360) { - if (err) return done(err); - - Game.create({ - name: 'Legend of Zelda: Ocarina of Time' - , developer: 'Nintendo' - , released: new Date('November 21, 1998') - , consoles: [nintendo64] - }, { - name: 'Mario Kart' - , developer: 'Nintendo' - , released: 'September 1, 1992' - , consoles: [superNintendo] - }, { - name: 'Perfect Dark Zero' - , developer: 'Rare' - , released: 'November 17, 2005' - , consoles: [xbox360] - }, function (err) { - if (err) return done(err); - example(); - }) - }) -} - -/** - * Population - */ - -function example () { - Game - .find({}) - .populate({ - path: 'consoles' - , match: { manufacturer: 'Nintendo' } - , select: 'name' - , options: { comment: 'population' } - }) - .exec(function (err, games) { - if (err) return done(err); - - games.forEach(function (game) { - console.log( - '"%s" was released for the %s on %s' - , game.name - , game.consoles.length ? game.consoles[0].name : '??' - , game.released.toLocaleDateString()); - }) - - return done(); - }) -} - -/** - * Clean up - */ - -function done (err) { - if (err) console.error(err); - Console.remove(function () { - Game.remove(function () { - mongoose.disconnect(); - }) - }) -} diff --git a/node_modules/mongoose/examples/population-plain-objects.js b/node_modules/mongoose/examples/population-plain-objects.js deleted file mode 100644 index 50fc9fa..0000000 --- a/node_modules/mongoose/examples/population-plain-objects.js +++ /dev/null @@ -1,96 +0,0 @@ - -var mongoose = require('mongoose') -var Schema = mongoose.Schema; - -console.log('Running mongoose version %s', mongoose.version); - -/** - * Console schema - */ - -var consoleSchema = Schema({ - name: String - , manufacturer: String - , released: Date -}) -var Console = mongoose.model('Console', consoleSchema); - -/** - * Game schema - */ - -var gameSchema = Schema({ - name: String - , developer: String - , released: Date - , consoles: [{ type: Schema.Types.ObjectId, ref: 'Console' }] -}) -var Game = mongoose.model('Game', gameSchema); - -/** - * Connect to the console database on localhost with - * the default port (27017) - */ - -mongoose.connect('mongodb://localhost/console', function (err) { - // if we failed to connect, abort - if (err) throw err; - - // we connected ok - createData(); -}) - -/** - * Data generation - */ - -function createData () { - Console.create({ - name: 'Nintendo 64' - , manufacturer: 'Nintendo' - , released: 'September 29, 1996' - }, function (err, nintendo64) { - if (err) return done(err); - - Game.create({ - name: 'Legend of Zelda: Ocarina of Time' - , developer: 'Nintendo' - , released: new Date('November 21, 1998') - , consoles: [nintendo64] - }, function (err) { - if (err) return done(err); - example(); - }) - }) -} - -/** - * Population - */ - -function example () { - Game - .findOne({ name: /^Legend of Zelda/ }) - .populate('consoles') - .lean() // just return plain objects, not documents wrapped by mongoose - .exec(function (err, ocinara) { - if (err) return done(err); - - console.log( - '"%s" was released for the %s on %s' - , ocinara.name - , ocinara.consoles[0].name - , ocinara.released.toLocaleDateString()); - - done(); - }) -} - -function done (err) { - if (err) console.error(err); - Console.remove(function () { - Game.remove(function () { - mongoose.disconnect(); - }) - }) -} diff --git a/node_modules/mongoose/examples/schema.js b/node_modules/mongoose/examples/schema.js deleted file mode 100644 index d108d05..0000000 --- a/node_modules/mongoose/examples/schema.js +++ /dev/null @@ -1,102 +0,0 @@ - -/** - * Module dependencies. - */ - -var mongoose = require('mongoose') - , Schema = mongoose.Schema; - -/** - * Schema definition - */ - -// recursive embedded-document schema - -var Comment = new Schema(); - -Comment.add({ - title : { type: String, index: true } - , date : Date - , body : String - , comments : [Comment] -}); - -var BlogPost = new Schema({ - title : { type: String, index: true } - , slug : { type: String, lowercase: true, trim: true } - , date : Date - , buf : Buffer - , comments : [Comment] - , creator : Schema.ObjectId -}); - -var Person = new Schema({ - name: { - first: String - , last : String - } - , email: { type: String, required: true, index: { unique: true, sparse: true } } - , alive: Boolean -}); - -/** - * Accessing a specific schema type by key - */ - -BlogPost.path('date') -.default(function(){ - return new Date() - }) -.set(function(v){ - return v == 'now' ? new Date() : v; - }); - -/** - * Pre hook. - */ - -BlogPost.pre('save', function(next, done){ - emailAuthor(done); // some async function - next(); -}); - -/** - * Methods - */ - -BlogPost.methods.findCreator = function (callback) { - return this.db.model('Person').findById(this.creator, callback); -} - -BlogPost.statics.findByTitle = function (title, callback) { - return this.find({ title: title }, callback); -} - -BlogPost.methods.expressiveQuery = function (creator, date, callback) { - return this.find('creator', creator).where('date').gte(date).run(callback); -} - -/** - * Plugins - */ - -function slugGenerator (options){ - options = options || {}; - var key = options.key || 'title'; - - return function slugGenerator(schema){ - schema.path(key).set(function(v){ - this.slug = v.toLowerCase().replace(/[^a-z0-9]/g, '').replace(/-+/g, ''); - return v; - }); - }; -}; - -BlogPost.plugin(slugGenerator()); - -/** - * Define model. - */ - -mongoose.model('BlogPost', BlogPost); -mongoose.model('Person', Person); diff --git a/node_modules/mongoose/lib/connection.js b/node_modules/mongoose/lib/connection.js index ef4595f..2766529 100644 --- a/node_modules/mongoose/lib/connection.js +++ b/node_modules/mongoose/lib/connection.js @@ -53,6 +53,7 @@ function Connection (base) { this.pass = null; this.name = null; this.options = null; + this.otherDbs = []; this._readyState = STATES.disconnected; this._closeCalled = false; this._hasOpened = false; @@ -92,6 +93,10 @@ Object.defineProperty(Connection.prototype, 'readyState', { if (this._readyState !== val) { this._readyState = val; + // loop over the otherDbs on this connection and change their state + for (var i=0; i < this.otherDbs.length; i++) { + this.otherDbs[i].readyState = val; + } if (STATES.connected === val) this._hasOpened = true; @@ -266,15 +271,22 @@ Connection.prototype.open = function (host, database, port, options, callback) { * user - username for authentication * pass - password for authentication * auth - options for authentication (see http://mongodb.github.com/node-mongodb-native/api-generated/db.html#authenticate) + * mongos - Boolean - if true, enables High Availability support for mongos * * _Options passed take precedence over options included in connection strings._ * * ####Notes: * + * _If connecting to multiple mongos servers, set the `mongos` option to true._ + * + * conn.open('mongodb://mongosA:27501,mongosB:27501', { mongos: true }, cb); + * * Mongoose forces the db option `forceServerObjectId` false and cannot be overridden. * Mongoose defaults the server `auto_reconnect` options to true which can be overridden. * See the node-mongodb-native driver instance for options that it understands. * + * _Options passed take precedence over options included in connection strings._ + * * @param {String} uris comma-separated mongodb:// `URI`s * @param {String} [database] database name if not included in `uris` * @param {Object} [options] passed to the internal driver diff --git a/node_modules/mongoose/lib/document.js b/node_modules/mongoose/lib/document.js index 7b735c4..86a13a4 100644 --- a/node_modules/mongoose/lib/document.js +++ b/node_modules/mongoose/lib/document.js @@ -14,7 +14,6 @@ var EventEmitter = require('events').EventEmitter , inspect = require('util').inspect , ElemMatchError = MongooseError.ElemMatchError , ValidationError = MongooseError.ValidationError - , DocumentError = MongooseError.DocumentError , InternalCache = require('./internal') , deepEqual = utils.deepEqual , hooks = require('hooks') @@ -163,6 +162,7 @@ Document.prototype.$__buildDoc = function (obj, fields, skipId) { , path = p.split('.') , len = path.length , last = len-1 + , curPath = '' , doc_ = doc , i = 0 @@ -170,6 +170,13 @@ Document.prototype.$__buildDoc = function (obj, fields, skipId) { var piece = path[i] , def + // support excluding intermediary levels + if (exclude) { + curPath += piece; + if (curPath in fields) break; + curPath += '.'; + } + if (i === last) { if (fields) { if (exclude) { @@ -316,7 +323,10 @@ Document.prototype.$__storeShard = function () { val = this.getValue(paths[i]); if (isMongooseObject(val)) { orig[paths[i]] = val.toObject({ depopulate: true }) - } else if (null != val && val.valueOf) { + } else if (null != val && + val.valueOf && + // Explicitly don't take value of dates + (!val.constructor || val.constructor.name !== 'Date')) { orig[paths[i]] = val.valueOf(); } else { orig[paths[i]] = val; @@ -429,15 +439,18 @@ Document.prototype.set = function (path, val, type, options) { , pathtype , key + while (i--) { key = keys[i]; pathtype = this.schema.pathType(prefix + key); if (null != path[key] - // need to know if plain object - no Buffer, ObjectId, etc + // need to know if plain object - no Buffer, ObjectId, ref, etc && utils.isObject(path[key]) && (!path[key].constructor || 'Object' == path[key].constructor.name) && 'virtual' != pathtype - && !(this.$__path(prefix + key) instanceof MixedSchema)) { + && !(this.$__path(prefix + key) instanceof MixedSchema) + && !(this.schema.paths[key] && this.schema.paths[key].options.ref) + ) { this.set(path[key], prefix + key, constructing); } else if (strict) { if ('real' === pathtype || 'virtual' === pathtype) { @@ -522,9 +535,9 @@ Document.prototype.set = function (path, val, type, options) { // if this doc is being constructed we should not trigger getters var priorVal = constructing ? undefined - : this.get(path); + : this.getValue(path); - if (!schema || null === val || undefined === val) { + if (!schema || undefined === val) { this.$__set(pathToMark, path, constructing, parts, schema, val, priorVal); return this; } @@ -554,7 +567,6 @@ Document.prototype.$__shouldModify = function ( pathToMark, path, constructing, parts, schema, val, priorVal) { if (this.isNew) return true; - if (this.isDirectModified(pathToMark)) return false; if (undefined === val && !this.isSelected(path)) { // when a path is not selected in a query, its initial @@ -579,7 +591,6 @@ Document.prototype.$__shouldModify = function ( // and the user is setting it to the same value again return true; } - return false; } @@ -595,6 +606,7 @@ Document.prototype.$__set = function ( pathToMark, path, constructing, parts, schema, val, priorVal) { var shouldModify = this.$__shouldModify.apply(this, arguments); + var _this = this; if (shouldModify) { this.markModified(pathToMark, val); @@ -603,6 +615,14 @@ Document.prototype.$__set = function ( MongooseArray || (MongooseArray = require('./types/array')); if (val instanceof MongooseArray) { val._registerAtomic('$set', val); + + // Small hack for gh-1638: if we're overwriting the entire array, ignore + // paths that were modified before the array overwrite + this.$__.activePaths.forEach(function(modifiedPath) { + if (modifiedPath.indexOf(path + '.') === 0) { + _this.$__.activePaths.ignore(modifiedPath); + } + }); } } @@ -619,6 +639,8 @@ Document.prototype.$__set = function ( } else { if (obj[parts[i]] && 'Object' === obj[parts[i]].constructor.name) { obj = obj[parts[i]]; + } else if (obj[parts[i]] && 'EmbeddedDocument' === obj[parts[i]].constructor.name) { + obj = obj[parts[i]]; } else if (obj[parts[i]] && Array.isArray(obj[parts[i]])) { obj = obj[parts[i]]; } else { @@ -879,7 +901,7 @@ Document.prototype.isSelected = function isSelected (path) { return inclusive; } - if (0 === pathDot.indexOf(cur)) { + if (0 === pathDot.indexOf(cur + '.')) { return inclusive; } } @@ -968,8 +990,28 @@ Document.prototype.validate = function (cb) { /** * Marks a path as invalid, causing validation to fail. * + * The `errorMsg` argument will become the message of the `ValidationError`. + * + * The `value` argument (if passed) will be available through the `ValidationError.value` property. + * + * doc.invalidate('size', 'must be less than 20', 14); + + * doc.validate(function (err) { + * console.log(err) + * // prints + * { message: 'Validation failed', + * name: 'ValidationError', + * errors: + * { size: + * { message: 'must be less than 20', + * name: 'ValidatorError', + * path: 'size', + * type: 'user defined', + * value: 14 } } } + * }) + * * @param {String} path the field to invalidate - * @param {String|Error} err the error which states the reason `path` was invalid + * @param {String|Error} errorMsg the error which states the reason `path` was invalid * @param {Object|String|Number|any} value optional invalid value * @api public */ @@ -980,14 +1022,11 @@ Document.prototype.invalidate = function (path, err, val) { } if (!err || 'string' === typeof err) { - // sniffing arguments: - // need to handle case where user does not pass value - // so our error message is cleaner - err = 2 < arguments.length - ? new ValidatorError(path, err, val) - : new ValidatorError(path, err) + err = new ValidatorError(path, err, 'user defined', val) } + if (this.$__.validationError == err) return; + this.$__.validationError.errors[path] = err; } @@ -1114,6 +1153,19 @@ function compile (tree, proto, prefix) { } }; +// gets descriptors for all properties of `object` +// makes all properties non-enumerable to match previous behavior to #2211 +function getOwnPropertyDescriptors(object) { + var result = {}; + + Object.getOwnPropertyNames(object).forEach(function(key) { + result[key] = Object.getOwnPropertyDescriptor(object, key); + result[key].enumerable = false; + }); + + return result; +} + /*! * Defines the accessor named prop on the incoming prototype. */ @@ -1126,12 +1178,13 @@ function define (prop, subprops, prototype, prefix, keys) { Object.defineProperty(prototype, prop, { enumerable: true + , configurable: true , get: function () { if (!this.$__.getters) this.$__.getters = {}; if (!this.$__.getters[path]) { - var nested = Object.create(this); + var nested = Object.create(Object.getPrototypeOf(this), getOwnPropertyDescriptors(this)); // save scope for nested getters/setters if (!prefix) nested.$__.scope = this; @@ -1171,6 +1224,7 @@ function define (prop, subprops, prototype, prefix, keys) { Object.defineProperty(prototype, prop, { enumerable: true + , configurable: true , get: function ( ) { return this.get.call(this.$__.scope || this, path); } , set: function (v) { return this.set.call(this.$__.scope || this, path, v); } }); @@ -1330,6 +1384,7 @@ Document.prototype.$__doQueue = function () { * - `virtuals` apply virtual getters (can override `getters` option) * - `minimize` remove empty objects (defaults to true) * - `transform` a transform function to apply to the resulting document before returning + * - `depopulate` depopulate any populated paths, replacing them with their original refs (defaults to false) * * ####Getters/Virtuals * @@ -1364,6 +1419,7 @@ Document.prototype.$__doQueue = function () { * ####Example * * // specify the transform schema option + * if (!schema.options.toObject) schema.options.toObject = {}; * schema.options.toObject.transform = function (doc, ret, options) { * // remove the _id of every document before returning the result * delete ret._id; @@ -1377,6 +1433,7 @@ Document.prototype.$__doQueue = function () { * * With transformations we can do a lot more than remove properties. We can even return completely new customized objects: * + * if (!schema.options.toObject) schema.options.toObject = {}; * schema.options.toObject.transform = function (doc, ret, options) { * return { movie: ret.name } * } @@ -1400,6 +1457,7 @@ Document.prototype.$__doQueue = function () { * * _Note: if you call `toObject` and pass any options, the transform declared in your schema options will __not__ be applied. To force its application pass `transform: true`_ * + * if (!schema.options.toObject) schema.options.toObject = {}; * schema.options.toObject.hide = '_id'; * schema.options.toObject.transform = function (doc, ret, options) { * if (options.hide) { @@ -1424,6 +1482,8 @@ Document.prototype.$__doQueue = function () { * * See [schema options](/docs/guide.html#toObject) for some more details. * + * _During save, no custom options are applied to the document before being sent to the database._ + * * @param {Object} [options] * @return {Object} js object * @see mongodb.Binary http://mongodb.github.com/node-mongodb-native/api-bson-generated/binary.html @@ -1438,13 +1498,18 @@ Document.prototype.toObject = function (options) { // When internally saving this document we always pass options, // bypassing the custom schema options. - if (!(options && 'Object' == options.constructor.name)) { + var optionsParameter = options; + if (!(options && 'Object' == options.constructor.name) || + (options && options._useSchemaOptions)) { options = this.schema.options.toObject ? clone(this.schema.options.toObject) : {}; } ;('minimize' in options) || (options.minimize = this.schema.options.minimize); + if (!optionsParameter) { + options._useSchemaOptions = true; + } var ret = clone(this._doc, options); @@ -1454,9 +1519,20 @@ Document.prototype.toObject = function (options) { if (options.getters) { applyGetters(this, ret, 'paths', options); + // applyGetters for paths will add nested empty objects; + // if minimize is set, we need to remove them. + if (options.minimize) { + ret = minimize(ret) || {}; + } } - if (true === options.transform) { + // In the case where a subdocument has its own transform function, we need to + // check and see if the parent has a transform (options.transform) and if the + // child schema has a transform (this.schema.options.toObject) In this case, + // we need to adjust options.transform to be the child schema's transform and + // not the parent schema's + if (true === options.transform || + (this.schema.options.toObject && options.transform)) { var opts = options.json ? this.schema.options.toJSON : this.schema.options.toObject; @@ -1473,6 +1549,41 @@ Document.prototype.toObject = function (options) { return ret; }; +/*! + * Minimizes an object, removing undefined values and empty objects + * + * @param {Object} object to minimize + * @return {Object} + */ + +function minimize (obj) { + var keys = Object.keys(obj) + , i = keys.length + , hasKeys + , key + , val + + while (i--) { + key = keys[i]; + val = obj[key]; + + if (utils.isObject(val)) { + obj[key] = minimize(val); + } + + if (undefined === obj[key]) { + delete obj[key]; + continue; + } + + hasKeys = true; + } + + return hasKeys + ? obj + : undefined; +} + /*! * Applies virtuals properties to `json`. * @@ -1519,10 +1630,9 @@ function applyGetters (self, json, type, options) { * * See [schema options](/docs/guide.html#toJSON) for details. * - * @param {Object} options same options as [Document#toObject](#document_Document-toObject) + * @param {Object} options * @return {Object} * @see Document#toObject #document_Document-toObject - * @api public */ @@ -1530,12 +1640,17 @@ Document.prototype.toJSON = function (options) { // check for object type since an array of documents // being stringified passes array indexes instead // of options objects. JSON.stringify([doc, doc]) - if (!(options && 'Object' == options.constructor.name)) { + // The second check here is to make sure that populated documents (or + // subdocuments) use their own options for `.toJSON()` instead of their + // parent's + if (!(options && 'Object' == options.constructor.name) + || ((!options || options.json) && this.schema.options.toJSON)) { options = this.schema.options.toJSON ? clone(this.schema.options.toJSON) : {}; } options.json = true; + return this.toObject(options); }; @@ -1565,7 +1680,9 @@ Document.prototype.toString = Document.prototype.inspect; /** * Returns true if the Document stores the same data as doc. * - * Documents are considered equal when they have matching `_id`s. + * Documents are considered equal when they have matching `_id`s, unless neither + * document has an `_id`, in which case this function falls back to using + * `deepEqual()`. * * @param {Document} doc a document to compare * @return {Boolean} @@ -1575,7 +1692,10 @@ Document.prototype.toString = Document.prototype.inspect; Document.prototype.equals = function (doc) { var tid = this.get('_id'); var docid = doc.get('_id'); - return tid.equals + if (!tid && !docid) { + return deepEqual(this, doc); + } + return tid && tid.equals ? tid.equals(docid) : tid === docid; } @@ -1707,4 +1827,3 @@ Document.prototype.$__fullPath = function (path) { Document.ValidationError = ValidationError; module.exports = exports = Document; -exports.Error = DocumentError; diff --git a/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js b/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js index da0f6e7..c7fe882 100644 --- a/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js +++ b/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js @@ -50,26 +50,32 @@ NativeCollection.prototype.onOpen = function () { if (err) return callback(err); // discover if this collection exists and if it is capped - c.options(function (err, exists) { - if (err) return callback(err); - - if (exists) { - if (exists.capped) { - callback(null, c); + self.conn.db.collection( 'system.namespaces', function(err, namespaces) { + var namespaceName = self.conn.db.databaseName + '.' + self.name; + namespaces.findOne({ name : namespaceName }, function(err, doc) { + if (err) { + return callback(err); + } + var exists = !!doc; + + if (exists) { + if (doc.options && doc.options.capped) { + callback(null, c); + } else { + var msg = 'A non-capped collection exists with the name: '+ self.name +'\n\n' + + ' To use this collection as a capped collection, please ' + + 'first convert it.\n' + + ' http://www.mongodb.org/display/DOCS/Capped+Collections#CappedCollections-Convertingacollectiontocapped' + err = new Error(msg); + callback(err); + } } else { - var msg = 'A non-capped collection exists with this name.\n\n' - + ' To use this collection as a capped collection, please ' - + 'first convert it.\n' - + ' http://www.mongodb.org/display/DOCS/Capped+Collections#CappedCollections-Convertingacollectiontocapped' - err = new Error(msg); - callback(err); + // create + var opts = utils.clone(self.opts.capped); + opts.capped = true; + self.conn.db.createCollection(self.name, opts, callback); } - } else { - // create - var opts = utils.clone(self.opts.capped); - opts.capped = true; - self.conn.db.createCollection(self.name, opts, callback); - } + }); }); }); @@ -126,7 +132,7 @@ for (var i in Collection.prototype) { } } - collection[i].apply(collection, args); + return collection[i].apply(collection, args); }; })(i); } diff --git a/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js b/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js index fb894fc..b0c661b 100644 --- a/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js +++ b/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js @@ -4,9 +4,12 @@ var MongooseConnection = require('../../connection') , mongo = require('mongodb') + , Db = mongo.Db , Server = mongo.Server + , Mongos = mongo.Mongos , STATES = require('../../connectionstate') - , ReplSetServers = mongo.ReplSetServers; + , ReplSetServers = mongo.ReplSetServers + , utils = require('../../utils'); /** * A [node-mongodb-native](https://github.com/mongodb/node-mongodb-native) connection implementation. @@ -20,6 +23,13 @@ function NativeConnection() { this._listening = false; }; +/** + * Expose the possible connection states. + * @api public + */ + +NativeConnection.STATES = STATES; + /*! * Inherits from Connection. */ @@ -39,8 +49,8 @@ NativeConnection.prototype.doOpen = function (fn) { mute(this); } - var server = new mongo.Server(this.host, this.port, this.options.server); - this.db = new mongo.Db(this.name, server, this.options.db); + var server = new Server(this.host, this.port, this.options.server); + this.db = new Db(this.name, server, this.options.db); var self = this; this.db.open(function (err) { @@ -52,6 +62,66 @@ NativeConnection.prototype.doOpen = function (fn) { return this; }; +/** + * Switches to a different database using the same connection pool. + * + * Returns a new connection object, with the new db. + * + * @param {String} name The database name + * @return {Connection} New Connection Object + * @api public + */ + +NativeConnection.prototype.useDb = function (name) { + // we have to manually copy all of the attributes... + var newConn = new this.constructor(); + newConn.name = name; + newConn.base = this.base; + newConn.collections = {}; + newConn.models = {}; + newConn.replica = this.replica; + newConn.hosts = this.hosts; + newConn.host = this.host; + newConn.port = this.port; + newConn.user = this.user; + newConn.pass = this.pass; + newConn.options = this.options; + newConn._readyState = this._readyState; + newConn._closeCalled = this._closeCalled; + newConn._hasOpened = this._hasOpened; + newConn._listening = false; + + // First, when we create another db object, we are not guaranteed to have a + // db object to work with. So, in the case where we have a db object and it + // is connected, we can just proceed with setting everything up. However, if + // we do not have a db or the state is not connected, then we need to wait on + // the 'open' event of the connection before doing the rest of the setup + // the 'connected' event is the first time we'll have access to the db object + + var self = this; + + if (this.db && this.db._state == 'connected') { + wireup(); + } else { + this.once('connected', wireup); + } + + function wireup () { + newConn.db = self.db.db(name); + newConn.onOpen(); + // setup the events appropriately + listen(newConn); + } + + newConn.name = name; + + // push onto the otherDbs stack, this is used when state changes + this.otherDbs.push(newConn); + newConn.otherDbs.push(this); + + return newConn; +}; + /*! * Register listeners for important events and bubble appropriately. */ @@ -76,6 +146,10 @@ function listen (conn) { conn.db.on('error', function(err){ conn.emit('error', err); }); + conn.db.on('reconnect', function() { + conn.readyState = STATES.connected; + conn.emit('reconnected'); + }); conn.db.on('timeout', function(err){ var error = new Error(err && err.err || 'connection timeout'); conn.emit('error', error); @@ -83,9 +157,12 @@ function listen (conn) { conn.db.on('open', function (err, db) { if (STATES.disconnected === conn.readyState && db && db.databaseName) { conn.readyState = STATES.connected; - conn.emit('reconnected') + conn.emit('reconnected'); } - }) + }); + conn.db.on('parseError', function(err) { + conn.emit('parseError', err); + }); } /*! @@ -123,11 +200,13 @@ NativeConnection.prototype.doOpenSet = function (fn) { this.hosts.forEach(function (server) { var host = server.host || server.ipc; var port = server.port || 27017; - servers.push(new mongo.Server(host, port, self.options.server)); + servers.push(new Server(host, port, self.options.server)); }) - var server = new ReplSetServers(servers, this.options.replset); - this.db = new mongo.Db(this.name, server, this.options.db); + var server = this.options.mongos + ? new Mongos(servers, this.options.mongos) + : new ReplSetServers(servers, this.options.replset); + this.db = new Db(this.name, server, this.options.db); this.db.on('fullsetup', function () { self.emit('fullsetup') @@ -178,9 +257,10 @@ NativeConnection.prototype.parseOptions = function (passed, connStrOpts) { var opts = connStrOpts || {}; Object.keys(opts).forEach(function (name) { switch (name) { + case 'ssl': case 'poolSize': - if ('undefined' == typeof o.server.poolSize) { - o.server.poolSize = o.replset.poolSize = opts[name]; + if ('undefined' == typeof o.server[name]) { + o.server[name] = o.replset[name] = opts[name]; } break; case 'slaveOk': @@ -193,7 +273,6 @@ NativeConnection.prototype.parseOptions = function (passed, connStrOpts) { o.server.auto_reconnect = opts[name]; } break; - case 'ssl': case 'socketTimeoutMS': case 'connectTimeoutMS': if ('undefined' == typeof o.server.socketOptions[name]) { diff --git a/node_modules/mongoose/lib/drivers/node-mongodb-native/objectid.js b/node_modules/mongoose/lib/drivers/node-mongodb-native/objectid.js index 3c46c93..d00e007 100644 --- a/node_modules/mongoose/lib/drivers/node-mongodb-native/objectid.js +++ b/node_modules/mongoose/lib/drivers/node-mongodb-native/objectid.js @@ -11,19 +11,5 @@ var ObjectId = require('mongodb').BSONPure.ObjectID; * ignore */ -var ObjectIdToString = ObjectId.toString.bind(ObjectId); module.exports = exports = ObjectId; -ObjectId.fromString = function(str){ - // patch native driver bug in V0.9.6.4 - if (!('string' === typeof str && 24 === str.length)) { - throw new Error("Invalid ObjectId"); - } - - return ObjectId.createFromHexString(str); -}; - -ObjectId.toString = function(oid){ - if (!arguments.length) return ObjectIdToString(); - return oid.toHexString(); -}; diff --git a/node_modules/mongoose/lib/error.js b/node_modules/mongoose/lib/error.js index 6d00f80..f4e308c 100644 --- a/node_modules/mongoose/lib/error.js +++ b/node_modules/mongoose/lib/error.js @@ -13,6 +13,18 @@ function MongooseError (msg) { this.name = 'MongooseError'; }; +/*! + * Formats error messages + */ + +MongooseError.prototype.formatMessage = function (msg, path, type, val) { + if (!msg) throw new TypeError('message is required'); + + return msg.replace(/{PATH}/, path) + .replace(/{VALUE}/, String(val||'')) + .replace(/{TYPE}/, type || 'declared type'); +} + /*! * Inherits from Error. */ @@ -25,15 +37,27 @@ MongooseError.prototype.__proto__ = Error.prototype; module.exports = exports = MongooseError; +/** + * The default built-in validator error messages. + * + * @see Error.messages #error_messages_MongooseError-messages + * @api public + */ + +MongooseError.messages = require('./error/messages'); + +// backward compat +MongooseError.Messages = MongooseError.messages; + /*! * Expose subclasses */ -MongooseError.CastError = require('./errors/cast'); -MongooseError.DocumentError = require('./errors/document'); -MongooseError.ValidationError = require('./errors/validation') -MongooseError.ValidatorError = require('./errors/validator') -MongooseError.VersionError =require('./errors/version') -MongooseError.OverwriteModelError = require('./errors/overwriteModel') -MongooseError.MissingSchemaError = require('./errors/missingSchema') -MongooseError.DivergentArrayError = require('./errors/divergentArray') +MongooseError.CastError = require('./error/cast'); +MongooseError.ValidationError = require('./error/validation') +MongooseError.ValidatorError = require('./error/validator') +MongooseError.VersionError =require('./error/version') +MongooseError.OverwriteModelError = require('./error/overwriteModel') +MongooseError.MissingSchemaError = require('./error/missingSchema') +MongooseError.DivergentArrayError = require('./error/divergentArray') + diff --git a/node_modules/mongoose/lib/errors/cast.js b/node_modules/mongoose/lib/errors/cast.js deleted file mode 100644 index 055063a..0000000 --- a/node_modules/mongoose/lib/errors/cast.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * Module dependencies. - */ - -var MongooseError = require('../error'); - -/** - * Casting Error constructor. - * - * @param {String} type - * @param {String} value - * @inherits MongooseError - * @api private - */ - -function CastError (type, value, path) { - MongooseError.call(this, 'Cast to ' + type + ' failed for value "' + value + '" at path "' + path + '"'); - Error.captureStackTrace(this, arguments.callee); - this.name = 'CastError'; - this.type = type; - this.value = value; - this.path = path; -}; - -/*! - * Inherits from MongooseError. - */ - -CastError.prototype.__proto__ = MongooseError.prototype; - -/*! - * exports - */ - -module.exports = CastError; diff --git a/node_modules/mongoose/lib/errors/divergentArray.js b/node_modules/mongoose/lib/errors/divergentArray.js deleted file mode 100644 index 45809bc..0000000 --- a/node_modules/mongoose/lib/errors/divergentArray.js +++ /dev/null @@ -1,40 +0,0 @@ - -/*! - * Module dependencies. - */ - -var MongooseError = require('../error'); - -/*! - * DivergentArrayError constructor. - * - * @inherits MongooseError - */ - -function DivergentArrayError (paths) { - var msg = 'For your own good, using `document.save()` to update an array ' - + 'which was selected using an $elemMatch projection OR ' - + 'populated using skip, limit, query conditions, or exclusion of ' - + 'the _id field when the operation results in a $pop or $set of ' - + 'the entire array is not supported. The following ' - + 'path(s) would have been modified unsafely:\n' - + ' ' + paths.join('\n ') + '\n' - + 'Use Model.update() to update these arrays instead.' - // TODO write up a docs page (FAQ) and link to it - - MongooseError.call(this, msg); - Error.captureStackTrace(this, arguments.callee); - this.name = 'DivergentArrayError'; -}; - -/*! - * Inherits from MongooseError. - */ - -DivergentArrayError.prototype.__proto__ = MongooseError.prototype; - -/*! - * exports - */ - -module.exports = DivergentArrayError; diff --git a/node_modules/mongoose/lib/errors/document.js b/node_modules/mongoose/lib/errors/document.js deleted file mode 100644 index 6955256..0000000 --- a/node_modules/mongoose/lib/errors/document.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Module requirements - */ - -var MongooseError = require('../error') - -/** - * Document Error - * - * @param {String} msg - * @inherits MongooseError - * @api private - */ - -function DocumentError (msg) { - MongooseError.call(this, msg); - Error.captureStackTrace(this, arguments.callee); - this.name = 'DocumentError'; -}; - -/*! - * Inherits from MongooseError. - */ - -DocumentError.prototype.__proto__ = MongooseError.prototype; - -/*! - * Module exports. - */ - -module.exports = exports = DocumentError; diff --git a/node_modules/mongoose/lib/errors/missingSchema.js b/node_modules/mongoose/lib/errors/missingSchema.js deleted file mode 100644 index 02a02ee..0000000 --- a/node_modules/mongoose/lib/errors/missingSchema.js +++ /dev/null @@ -1,32 +0,0 @@ - -/*! - * Module dependencies. - */ - -var MongooseError = require('../error'); - -/*! - * MissingSchema Error constructor. - * - * @inherits MongooseError - */ - -function MissingSchemaError (name) { - var msg = 'Schema hasn\'t been registered for model "' + name + '".\n' - + 'Use mongoose.model(name, schema)'; - MongooseError.call(this, msg); - Error.captureStackTrace(this, arguments.callee); - this.name = 'MissingSchemaError'; -}; - -/*! - * Inherits from MongooseError. - */ - -MissingSchemaError.prototype.__proto__ = MongooseError.prototype; - -/*! - * exports - */ - -module.exports = MissingSchemaError; diff --git a/node_modules/mongoose/lib/errors/overwriteModel.js b/node_modules/mongoose/lib/errors/overwriteModel.js deleted file mode 100644 index 2591581..0000000 --- a/node_modules/mongoose/lib/errors/overwriteModel.js +++ /dev/null @@ -1,30 +0,0 @@ - -/*! - * Module dependencies. - */ - -var MongooseError = require('../error'); - -/*! - * OverwriteModel Error constructor. - * - * @inherits MongooseError - */ - -function OverwriteModelError (name) { - MongooseError.call(this, 'Cannot overwrite `' + name + '` model once compiled.'); - Error.captureStackTrace(this, arguments.callee); - this.name = 'OverwriteModelError'; -}; - -/*! - * Inherits from MongooseError. - */ - -OverwriteModelError.prototype.__proto__ = MongooseError.prototype; - -/*! - * exports - */ - -module.exports = OverwriteModelError; diff --git a/node_modules/mongoose/lib/errors/validation.js b/node_modules/mongoose/lib/errors/validation.js deleted file mode 100644 index 1679849..0000000 --- a/node_modules/mongoose/lib/errors/validation.js +++ /dev/null @@ -1,49 +0,0 @@ - -/*! - * Module requirements - */ - -var MongooseError = require('../error') - -/** - * Document Validation Error - * - * @api private - * @param {Document} instance - * @inherits MongooseError - */ - -function ValidationError (instance) { - MongooseError.call(this, "Validation failed"); - Error.captureStackTrace(this, arguments.callee); - this.name = 'ValidationError'; - this.errors = instance.errors = {}; -}; - -/** - * Console.log helper - */ - -ValidationError.prototype.toString = function () { - var ret = this.name + ': '; - var msgs = []; - - Object.keys(this.errors).forEach(function (key) { - if (this == this.errors[key]) return; - msgs.push(String(this.errors[key])); - }, this) - - return ret + msgs.join(', '); -}; - -/*! - * Inherits from MongooseError. - */ - -ValidationError.prototype.__proto__ = MongooseError.prototype; - -/*! - * Module exports - */ - -module.exports = exports = ValidationError; diff --git a/node_modules/mongoose/lib/errors/validator.js b/node_modules/mongoose/lib/errors/validator.js deleted file mode 100644 index 2498b05..0000000 --- a/node_modules/mongoose/lib/errors/validator.js +++ /dev/null @@ -1,51 +0,0 @@ -/*! - * Module dependencies. - */ - -var MongooseError = require('../error'); - -/** - * Schema validator error - * - * @param {String} path - * @param {String} msg - * @param {String|Number|any} val - * @inherits MongooseError - * @api private - */ - -function ValidatorError (path, type, val) { - var msg = type - ? '"' + type + '" ' - : ''; - - var message = 'Validator ' + msg + 'failed for path ' + path - if (2 < arguments.length) message += ' with value `' + String(val) + '`'; - - MongooseError.call(this, message); - Error.captureStackTrace(this, arguments.callee); - this.name = 'ValidatorError'; - this.path = path; - this.type = type; - this.value = val; -}; - -/*! - * toString helper - */ - -ValidatorError.prototype.toString = function () { - return this.message; -} - -/*! - * Inherits from MongooseError - */ - -ValidatorError.prototype.__proto__ = MongooseError.prototype; - -/*! - * exports - */ - -module.exports = ValidatorError; diff --git a/node_modules/mongoose/lib/errors/version.js b/node_modules/mongoose/lib/errors/version.js deleted file mode 100644 index b2388aa..0000000 --- a/node_modules/mongoose/lib/errors/version.js +++ /dev/null @@ -1,31 +0,0 @@ - -/*! - * Module dependencies. - */ - -var MongooseError = require('../error'); - -/** - * Version Error constructor. - * - * @inherits MongooseError - * @api private - */ - -function VersionError () { - MongooseError.call(this, 'No matching document found.'); - Error.captureStackTrace(this, arguments.callee); - this.name = 'VersionError'; -}; - -/*! - * Inherits from MongooseError. - */ - -VersionError.prototype.__proto__ = MongooseError.prototype; - -/*! - * exports - */ - -module.exports = VersionError; diff --git a/node_modules/mongoose/lib/index.js b/node_modules/mongoose/lib/index.js index ca4cfa0..0440328 100644 --- a/node_modules/mongoose/lib/index.js +++ b/node_modules/mongoose/lib/index.js @@ -1,3 +1,4 @@ +'use strict'; /*! * Module dependencies. @@ -6,8 +7,8 @@ var Schema = require('./schema') , SchemaType = require('./schematype') , VirtualType = require('./virtualtype') - , SchemaTypes = Schema.Types , SchemaDefaults = require('./schemadefault') + , STATES = require('./connectionstate') , Types = require('./types') , Query = require('./query') , Promise = require('./promise') @@ -16,6 +17,30 @@ var Schema = require('./schema') , utils = require('./utils') , format = utils.toCollectionName , mongodb = require('mongodb') + , pkg = require('../package.json') + +/*! + * Warn users if they are running an unstable release. + * + * Disable the warning by setting the MONGOOSE_DISABLE_STABILITY_WARNING + * environment variable. + */ + +if (pkg.publishConfig && 'unstable' == pkg.publishConfig.tag) { + if (!process.env.MONGOOSE_DISABLE_STABILITY_WARNING) { + console.log('\u001b[33m'); + console.log('##############################################################'); + console.log('#'); + console.log('# !!! MONGOOSE WARNING !!!'); + console.log('#'); + console.log('# This is an UNSTABLE release of Mongoose.'); + console.log('# Unstable releases are available for preview/testing only.'); + console.log('# DO NOT run this in production.'); + console.log('#'); + console.log('##############################################################'); + console.log('\u001b[0m'); + } +} /** * Mongoose constructor. @@ -31,10 +56,20 @@ function Mongoose () { this.plugins = []; this.models = {}; this.modelSchemas = {}; - this.options = {}; - this.createConnection(); // default connection + // default global options + this.options = { + pluralization: true + }; + var conn = this.createConnection(); // default connection + conn.models = this.models; }; +/** + * Expose connection states for user-land + * + */ +Mongoose.prototype.STATES = STATES; + /** * Sets mongoose options * @@ -50,8 +85,10 @@ function Mongoose () { */ Mongoose.prototype.set = function (key, value) { - if (arguments.length == 1) + if (arguments.length == 1) { return this.options[key]; + } + this.options[key] = value; return this; }; @@ -81,7 +118,7 @@ var rgxReplSet = /^.+,.+$/; * * Each `connection` instance maps to a single database. This method is helpful when mangaging multiple db connections. * - * If arguments are passed, they are proxied to either [Connection#open](#connection_Connection-open) or [Connection#openSet](#connection_Connection-openSet) appropriately. This means we can pass `db`, `server`, and `replset` options to the driver. + * If arguments are passed, they are proxied to either [Connection#open](#connection_Connection-open) or [Connection#openSet](#connection_Connection-openSet) appropriately. This means we can pass `db`, `server`, and `replset` options to the driver. _Note that the `safe` option specified in your schema will overwrite the `safe` db option specified here unless you set your schemas `safe` option to `undefined`. See [this](/docs/guide.html#safe) for more information._ * * _Options passed take precedence over options included in connection strings._ * @@ -142,6 +179,25 @@ Mongoose.prototype.createConnection = function () { * * _Options passed take precedence over options included in connection strings._ * + * ####Example: + * + * mongoose.connect('mongodb://user:pass@localhost:port/database'); + * + * // replica sets + * var uri = 'mongodb://user:pass@localhost:port/database,mongodb://anotherhost:port,mongodb://yetanother:port'; + * mongoose.connect(uri); + * + * // with options + * mongoose.connect(uri, options); + * + * // connecting to multiple mongos + * var uri = 'mongodb://hostA:27501,hostB:27501'; + * var opts = { mongos: true }; + * mongoose.connect(uri, opts); + * + * @param {String} uri(s) + * @param {Object} [options] + * @param {Function} [callback] * @see Mongoose#createConnection #index_Mongoose-createConnection * @api public * @return {Mongoose} this @@ -298,8 +354,12 @@ Mongoose.prototype.model = function (name, schema, collection, skipInit) { } } + // Apply relevant "global" options to the schema + if (!('pluralization' in schema.options)) schema.options.pluralization = this.options.pluralization; + + if (!collection) { - collection = schema.get('collection') || format(name); + collection = schema.get('collection') || format(name, schema.options); } var connection = options.connection || this.connection; @@ -425,7 +485,7 @@ Mongoose.prototype.Connection = Connection; * @api public */ -Mongoose.prototype.version = require(__dirname + '/../package.json').version; +Mongoose.prototype.version = pkg.version; /** * The Mongoose constructor @@ -571,6 +631,15 @@ Mongoose.prototype.Error = require('./error'); Mongoose.prototype.mongo = require('mongodb'); +/** + * The [mquery](https://github.com/aheckmann/mquery) query builder Mongoose uses. + * + * @property mquery + * @api public + */ + +Mongoose.prototype.mquery = require('mquery'); + /*! * The exports object is an instance of Mongoose. * diff --git a/node_modules/mongoose/lib/internal.js b/node_modules/mongoose/lib/internal.js index d5a3f12..8f5b73c 100644 --- a/node_modules/mongoose/lib/internal.js +++ b/node_modules/mongoose/lib/internal.js @@ -3,7 +3,7 @@ */ var StateMachine = require('./statemachine') -var ActiveRoster = StateMachine.ctor('require', 'modify', 'init', 'default') +var ActiveRoster = StateMachine.ctor('require', 'modify', 'init', 'default', 'ignore'); module.exports = exports = InternalCache; diff --git a/node_modules/mongoose/lib/model.js b/node_modules/mongoose/lib/model.js index 5348ff2..6b3b163 100644 --- a/node_modules/mongoose/lib/model.js +++ b/node_modules/mongoose/lib/model.js @@ -4,11 +4,13 @@ var Document = require('./document') , MongooseArray = require('./types/array') + , MongooseDocumentArray = require('./types/documentarray') , MongooseBuffer = require('./types/buffer') , MongooseError = require('./error') , VersionError = MongooseError.VersionError , DivergentArrayError = MongooseError.DivergentArrayError , Query = require('./query') + , Aggregate = require('./aggregate') , Schema = require('./schema') , Types = require('./schema/index') , utils = require('./utils') @@ -18,7 +20,8 @@ var Document = require('./document') , merge = utils.merge , Promise = require('./promise') , assert = require('assert') - , tick = utils.tick + , util = require('util') + , tick = utils.tick; var VERSION_WHERE = 1 , VERSION_INC = 2 @@ -27,9 +30,11 @@ var VERSION_WHERE = 1 /** * Model constructor * - * @param {Object} doc values to with which to create the document + * Provides the interface to MongoDB collections as well as creates document instances. + * + * @param {Object} doc values with which to create the document * @inherits Document - * @event `error`: If listening to this Model event, it is emitted when a document was saved without passing a callback and an `error` occurred. If not listening, the event bubbles to the connection used to create this Model. + * @event `error`: If listening to this event, it is emitted when a document was saved without passing a callback and an `error` occurred. If not listening, the event bubbles to the connection used to create this Model. * @event `index`: Emitted after `Model#ensureIndexes` completes. If an error occurred it is passed with the event. * @api public */ @@ -136,10 +141,12 @@ function handleSave (promise, self) { * ####Example: * * product.sold = Date.now(); - * product.save(function (err, product) { + * product.save(function (err, product, numberAffected) { * if (err) .. * }) * + * The callback will receive three parameters, `err` if an error occurred, `product` which is the saved `product`, and `numberAffected` which will be 1 when the document was found and updated in the database, otherwise 0. + * * The `fn` callback is optional. If no `fn` is passed and validation fails, the validation error will be emitted on the connection used to create this model. * * var db = mongoose.createConnection(..); @@ -160,7 +167,7 @@ function handleSave (promise, self) { Model.prototype.save = function save (fn) { var promise = new Promise(fn) , complete = handleSave(promise, this) - , options = {} + , options = {}; if (this.schema.options.safe) { options.safe = this.schema.options.safe; @@ -168,7 +175,28 @@ Model.prototype.save = function save (fn) { if (this.isNew) { // send entire doc - var obj = this.toObject({ depopulate: 1 }); + var schemaOptions = utils.clone(this.schema.options); + schemaOptions.toObject = schemaOptions.toObject || {}; + + var toObjectOptions = {}; + + if (schemaOptions.toObject.retainKeyOrder) { + toObjectOptions.retainKeyOrder = schemaOptions.toObject.retainKeyOrder; + } + + toObjectOptions.depopulate = 1; + + var obj = this.toObject(toObjectOptions); + + if (!utils.object.hasOwnProperty(obj || {}, '_id')) { + // documents must have an _id else mongoose won't know + // what to update later if more changes are made. the user + // wouldn't know what _id was generated by mongodb either + // nor would the ObjectId generated my mongodb necessarily + // match the schema definition. + return complete(new Error('document must have an _id before saving')); + } + this.$__version(true, obj); this.collection.insert(obj, options, complete); this.$__reset(); @@ -183,6 +211,7 @@ Model.prototype.save = function save (fn) { this.$__.inserting = false; var delta = this.$__delta(); + if (delta) { if (delta instanceof Error) return complete(delta); var where = this.$__where(delta[0]); @@ -474,8 +503,10 @@ Model.prototype.$__version = function (where, delta) { } if (VERSION_INC === (VERSION_INC & this.$__.version)) { - delta.$inc || (delta.$inc = {}); - delta.$inc[key] = 1; + if (!delta.$set || typeof delta.$set[key] === 'undefined') { + delta.$inc || (delta.$inc = {}); + delta.$inc[key] = 1; + } } } @@ -563,7 +594,7 @@ Model.prototype.remove = function remove (fn) { return; } self.emit('remove', self); - promise.complete(); + promise.complete(self); promise = self = where = options = null; })); @@ -586,6 +617,106 @@ Model.prototype.model = function model (name) { return this.db.model(name); }; +/** + * Adds a discriminator type. + * + * ####Example: + * + * function BaseSchema() { + * Schema.apply(this, arguments); + * + * this.add({ + * name: String, + * createdAt: Date + * }); + * } + * util.inherits(BaseSchema, Schema); + * + * var PersonSchema = new BaseSchema(); + * var BossSchema = new BaseSchema({ department: String }); + * + * var Person = mongoose.model('Person', PersonSchema); + * var Boss = Person.discriminator('Boss', BossSchema); + * + * @param {String} name discriminator model name + * @param {Schema} schema discriminator model schema + * @api public + */ + +Model.discriminator = function discriminator (name, schema) { + if (!(schema instanceof Schema)) { + throw new Error("You must pass a valid discriminator Schema"); + } + + if (this.schema.discriminatorMapping && !this.schema.discriminatorMapping.isRoot) { + throw new Error("Discriminator \"" + name + "\" can only be a discriminator of the root model"); + } + + var key = this.schema.options.discriminatorKey; + if (schema.path(key)) { + throw new Error("Discriminator \"" + name + "\" cannot have field with name \"" + key + "\""); + } + + // merges base schema into new discriminator schema and sets new type field. + (function mergeSchemas(schema, baseSchema) { + utils.merge(schema, baseSchema); + + var obj = {}; + obj[key] = { type: String, default: name }; + schema.add(obj); + schema.discriminatorMapping = { key: key, value: name, isRoot: false }; + + if (baseSchema.options.collection) { + schema.options.collection = baseSchema.options.collection; + } + + // throws error if options are invalid + (function validateOptions(a, b) { + a = utils.clone(a); + b = utils.clone(b); + delete a.toJSON; + delete a.toObject; + delete b.toJSON; + delete b.toObject; + + if (!utils.deepEqual(a, b)) { + throw new Error("Discriminator options are not customizable (except toJSON & toObject)"); + } + })(schema.options, baseSchema.options); + + var toJSON = schema.options.toJSON + , toObject = schema.options.toObject; + + schema.options = utils.clone(baseSchema.options); + if (toJSON) schema.options.toJSON = toJSON; + if (toObject) schema.options.toObject = toObject; + + schema.callQueue = baseSchema.callQueue.concat(schema.callQueue); + schema._requiredpaths = undefined; // reset just in case Schema#requiredPaths() was called on either schema + })(schema, this.schema); + + if (!this.discriminators) { + this.discriminators = {}; + } + + if (!this.schema.discriminatorMapping) { + this.schema.discriminatorMapping = { key: key, value: null, isRoot: true }; + } + + if (this.discriminators[name]) { + throw new Error("Discriminator with name \"" + name + "\" already exists"); + } + + this.discriminators[name] = this.db.model(name, schema, this.collection.name); + this.discriminators[name].prototype.__proto__ = this.prototype; + + // apply methods and statics + applyMethods(this.discriminators[name], schema); + applyStatics(this.discriminators[name], schema); + + return this.discriminators[name]; +}; + // Model (class) features /*! @@ -634,13 +765,17 @@ Model.init = function init () { * The `ensureIndex` commands are not sent in parallel. This is to avoid the `MongoError: cannot add index with a background operation in progress` error. See [this ticket](https://github.com/LearnBoost/mongoose/issues/1365) for more information. * * @param {Function} [cb] optional callback + * @return {Promise} * @api public */ Model.ensureIndexes = function ensureIndexes (cb) { + var promise = new Promise(cb); + var indexes = this.schema.indexes(); if (!indexes.length) { - return cb && process.nextTick(cb); + process.nextTick(promise.fulfill.bind(promise)); + return promise; } // Indexes are created one-by-one to support how MongoDB < 2.4 deals @@ -651,7 +786,7 @@ Model.ensureIndexes = function ensureIndexes (cb) { function done (err) { self.emit('index', err); - cb && cb(err); + promise.resolve(err); } function create () { @@ -667,6 +802,7 @@ Model.ensureIndexes = function ensureIndexes (cb) { } create(); + return promise; } /** @@ -709,6 +845,16 @@ Model.collection; Model.base; +/** + * Registered discriminators for this model. + * + * @property discriminators + * @receiver Model + * @api public + */ + +Model.discriminators; + /** * Removes documents from the collection. * @@ -741,13 +887,10 @@ Model.remove = function remove (conditions, callback) { conditions = {}; } - var query = new Query(conditions).bind(this, 'remove'); + // get the mongodb collection object + var mq = new Query(conditions, {}, this, this.collection); - if ('undefined' === typeof callback) - return query; - - this._applyNamedScope(query); - return query.remove(callback); + return mq.remove(callback); }; /** @@ -806,39 +949,15 @@ Model.find = function find (conditions, fields, options, callback) { options = null; } - var query = new Query(conditions, options); - query.bind(this, 'find'); - query.select(fields); - - if ('undefined' === typeof callback) - return query; - - this._applyNamedScope(query); - return query.find(callback); -}; - -/** - * Merges the current named scope query into `query`. - * - * @param {Query} query - * @return {Query} - * @api private - */ - -Model._applyNamedScope = function _applyNamedScope (query) { - var cQuery = this._cumulativeQuery; - - if (cQuery) { - merge(query._conditions, cQuery._conditions); - if (query._fields && cQuery._fields) - merge(query._fields, cQuery._fields); - if (query.options && cQuery.options) - merge(query.options, cQuery.options); - delete this._cumulativeQuery; + // get the raw mongodb collection object + var mq = new Query({}, options, this, this.collection); + mq.select(fields); + if (this.schema.discriminatorMapping && mq._selectedInclusively()) { + mq.select(this.schema.options.discriminatorKey); } - return query; -} + return mq.find(conditions, callback); +}; /** * Finds a single document by id. @@ -935,13 +1054,14 @@ Model.findOne = function findOne (conditions, fields, options, callback) { options = null; } - var query = new Query(conditions, options).select(fields).bind(this, 'findOne'); - - if ('undefined' == typeof callback) - return query; + // get the mongodb collection object + var mq = new Query({}, options, this, this.collection); + mq.select(fields); + if (this.schema.discriminatorMapping && mq._selectedInclusively()) { + mq.select(this.schema.options.discriminatorKey); + } - this._applyNamedScope(query); - return query.findOne(callback); + return mq.findOne(conditions, callback); }; /** @@ -964,16 +1084,16 @@ Model.count = function count (conditions, callback) { if ('function' === typeof conditions) callback = conditions, conditions = {}; - var query = new Query(conditions).bind(this, 'count'); - if ('undefined' == typeof callback) - return query; + // get the mongodb collection object + var mq = new Query({}, {}, this, this.collection); - this._applyNamedScope(query); - return query.count(callback); + return mq.count(conditions, callback); }; /** - * Executes a DISTINCT command + * Creates a Query for a `distinct` operation. + * + * Passing a `callback` immediately executes the query. * * ####Example * @@ -984,6 +1104,9 @@ Model.count = function count (conditions, callback) { * console.log('unique urls with more than 100 clicks', result); * }) * + * var query = Link.distinct('url'); + * query.exec(callback); + * * @param {String} field * @param {Object} [conditions] optional * @param {Function} [callback] @@ -992,14 +1115,15 @@ Model.count = function count (conditions, callback) { */ Model.distinct = function distinct (field, conditions, callback) { - var query = new Query(conditions).bind(this, 'distinct'); - if ('undefined' == typeof callback) { - query._distinctArg = field; - return query; + // get the mongodb collection object + var mq = new Query({}, {}, this, this.collection); + + if ('function' == typeof conditions) { + callback = conditions; + conditions = {}; } - this._applyNamedScope(query); - return query.distinct(field, callback); + return mq.distinct(conditions, field, callback); }; /** @@ -1027,8 +1151,9 @@ Model.distinct = function distinct (field, conditions, callback) { */ Model.where = function where (path, val) { - var q = new Query().bind(this, 'find'); - return q.where.apply(q, arguments); + // get the mongodb collection object + var mq = new Query({}, {}, this, this.collection).find({}); + return mq.where.apply(mq, arguments); }; /** @@ -1047,8 +1172,8 @@ Model.where = function where (path, val) { */ Model.$where = function $where () { - var q = new Query().bind(this, 'find'); - return q.$where.apply(q, arguments); + var mq = new Query({}, {}, this, this.collection).find({}); + return mq.$where.apply(mq, arguments); }; /** @@ -1136,16 +1261,17 @@ Model.findOneAndUpdate = function (conditions, update, options, callback) { options.fields = undefined; } - var query = new Query(conditions); - query.setOptions(options); - query.select(fields); - query.bind(this, 'findOneAndUpdate', update); + if (this.schema.options.versionKey && options && options.upsert) { + if (!update.$inc) { + update.$inc = {}; + } + update.$inc[this.schema.options.versionKey] = 0; + } - if ('undefined' == typeof callback) - return query; + var mq = new Query({}, {}, this, this.collection); + mq.select(fields); - this._applyNamedScope(query); - return query.findOneAndUpdate(callback); + return mq.findOneAndUpdate(conditions, update, options, callback); } /** @@ -1231,7 +1357,14 @@ Model.findByIdAndUpdate = function (id, update, options, callback) { } args = utils.args(arguments, 1); - args.unshift({ _id: id }); + + // if a model is passed in instead of an id + if (id && id._id) { + id = id._id; + } + if (id) { + args.unshift({ _id: id }); + } return this.findOneAndUpdate.apply(this, args); } @@ -1255,6 +1388,20 @@ Model.findByIdAndUpdate = function (id, update, options, callback) { * A.findOneAndRemove(conditions) // returns Query * A.findOneAndRemove() // returns Query * + * Although values are cast to their appropriate types when using the findAndModify helpers, the following are *not* applied: + * + * - defaults + * - setters + * - validators + * - middleware + * + * If you need those features, use the traditional approach of first retrieving the document. + * + * Model.findById(id, function (err, doc) { + * if (err) .. + * doc.remove(callback); + * }) + * * @param {Object} conditions * @param {Object} [options] * @param {Function} [callback] @@ -1283,16 +1430,10 @@ Model.findOneAndRemove = function (conditions, options, callback) { options.select = undefined; } - var query = new Query(conditions); - query.setOptions(options); - query.select(fields); - query.bind(this, 'findOneAndRemove'); - - if ('undefined' == typeof callback) - return query; + var mq = new Query({}, {}, this, this.collection); + mq.select(fields); - this._applyNamedScope(query); - return query.findOneAndRemove(callback); + return mq.findOneAndRemove(conditions, options, callback); } /** @@ -1340,51 +1481,71 @@ Model.findByIdAndRemove = function (id, options, callback) { * * ####Example: * + * // pass individual docs * Candy.create({ type: 'jelly bean' }, { type: 'snickers' }, function (err, jellybean, snickers) { * if (err) // ... * }); * + * // pass an array * var array = [{ type: 'jelly bean' }, { type: 'snickers' }]; * Candy.create(array, function (err, jellybean, snickers) { * if (err) // ... * }); * - * @param {Array|Object...} doc - * @param {Function} fn callback + * // callback is optional; use the returned promise if you like: + * var promise = Candy.create({ type: 'jawbreaker' }); + * promise.then(function (jawbreaker) { + * // ... + * }) + * + * @param {Array|Object...} doc(s) + * @param {Function} [fn] callback + * @return {Promise} * @api public */ Model.create = function create (doc, fn) { - if (1 === arguments.length) { - return 'function' === typeof doc && doc(null); - } - - var self = this - , docs = [null] - , promise - , count + var promise = new Promise , args if (Array.isArray(doc)) { args = doc; + + if ('function' == typeof fn) { + promise.onResolve(fn); + } + } else { - args = utils.args(arguments, 0, arguments.length - 1); - fn = arguments[arguments.length - 1]; + var last = arguments[arguments.length - 1]; + + if ('function' == typeof last) { + promise.onResolve(last); + args = utils.args(arguments, 0, arguments.length - 1); + } else { + args = utils.args(arguments); + } } - if (0 === args.length) return fn(null); + var count = args.length; - promise = new Promise(fn); - count = args.length; + if (0 === count) { + promise.complete(); + return promise; + } + + var self = this; + var docs = []; args.forEach(function (arg, i) { var doc = new self(arg); - docs[i+1] = doc; + docs[i] = doc; doc.save(function (err) { if (err) return promise.error(err); - --count || fn.apply(null, docs); + --count || promise.complete.apply(promise, docs); }); }); + + return promise; }; /** @@ -1405,6 +1566,7 @@ Model.create = function create (doc, fn) { * - `upsert` (boolean) whether to create the doc if it doesn't match (false) * - `multi` (boolean) whether multiple documents should be updated (false) * - `strict` (boolean) overrides the `strict` option for this update + * - `overwrite` (boolean) disables update-only mode, allowing you to overwrite the doc (false) * * All `update` values are cast to their appropriate SchemaTypes before being sent. * @@ -1425,11 +1587,16 @@ Model.create = function create (doc, fn) { * * // is sent as * Model.update(query, { $set: { name: 'jason borne' }}, options, callback) + * // if overwrite option is false. If overwrite is true, sent without the $set wrapper. * * This helps prevent accidentally overwriting all documents in your collection with `{ name: 'jason borne' }`. * * ####Note: * + * Be careful to not use an existing model instance for the update clause (this won't work and can cause weird behavior like infinite loops). Also, ensure that the update clause does not have an _id property, which causes Mongo to return a "Mod on _id not allowed" error. + * + * ####Note: + * * To update documents without waiting for a response from MongoDB, do not pass a `callback`, then call `exec` on the returned [Query](#query-js): * * Comment.update({ _id: id }, { $set: { text: 'changed' }}).exec(); @@ -1451,7 +1618,7 @@ Model.create = function create (doc, fn) { * doc.save(callback); * }) * - * @see strict schemas http://mongoosejs.com/docs/guide.html#strict + * @see strict http://mongoosejs.com/docs/guide.html#strict * @param {Object} conditions * @param {Object} update * @param {Object} [options] @@ -1461,27 +1628,14 @@ Model.create = function create (doc, fn) { */ Model.update = function update (conditions, doc, options, callback) { - if (arguments.length < 4) { - if ('function' === typeof options) { - // Scenario: update(conditions, doc, callback) - callback = options; - options = null; - } else if ('function' === typeof doc) { - // Scenario: update(doc, callback); - callback = doc; - doc = conditions; - conditions = {}; - options = null; - } - } - - var query = new Query(conditions, options).bind(this, 'update', doc); - - if ('undefined' == typeof callback) - return query; - - this._applyNamedScope(query); - return query.update(doc, callback); + var mq = new Query({}, {}, this, this.collection); + // gh-2406 + // make local deep copy of non-function parameters + conditions = utils.clone(conditions); + doc = utils.clone(doc); + options = typeof options === 'function' ? options : utils.clone(options); + + return mq.update(conditions, doc, options, callback); }; /** @@ -1525,6 +1679,7 @@ Model.update = function update (conditions, doc, options, callback) { * o.reduce = function (k, vals) { return vals.length } * o.out = { replace: 'createdCollectionNameForResults' } * o.verbose = true; + * * User.mapReduce(o, function (err, model, stats) { * console.log('map reduce took %d ms', stats.processtime) * model.find().where('value').gt(10).exec(function (err, docs) { @@ -1532,15 +1687,24 @@ Model.update = function update (conditions, doc, options, callback) { * }); * }) * + * // a promise is returned so you may instead write + * var promise = User.mapReduce(o); + * promise.then(function (model, stats) { + * console.log('map reduce took %d ms', stats.processtime) + * return model.find().where('value').gt(10).exec(); + * }).then(function (docs) { + * console.log(docs); + * }).then(null, handleError).end() + * * @param {Object} o an object specifying map-reduce options - * @param {Function} callback + * @param {Function} [callback] optional callback * @see http://www.mongodb.org/display/DOCS/MapReduce + * @return {Promise} * @api public */ Model.mapReduce = function mapReduce (o, callback) { - if ('function' != typeof callback) throw new Error('missing callback'); - + var promise = new Promise(callback); var self = this; if (!Model.mapReduce.schema) { @@ -1549,6 +1713,7 @@ Model.mapReduce = function mapReduce (o, callback) { } if (!o.out) o.out = { inline: 1 }; + if (false !== o.verbose) o.verbose = true; o.map = String(o.map); o.reduce = String(o.reduce); @@ -1561,7 +1726,7 @@ Model.mapReduce = function mapReduce (o, callback) { } this.collection.mapReduce(null, null, o, function (err, ret, stats) { - if (err) return callback(err); + if (err) return promise.error(err); if (ret.findOne && ret.mapReduce) { // returned a collection, convert to Model @@ -1574,45 +1739,245 @@ Model.mapReduce = function mapReduce (o, callback) { model._mapreduce = true; - return callback(err, model, stats); + return promise.fulfill(model, stats); } - callback(err, ret, stats); + promise.fulfill(ret, stats); }); + + return promise; } /** - * Executes an aggregate command on this models collection. + * geoNear support for Mongoose + * + * ####Options: + * - `lean` {Boolean} return the raw object + * - All options supported by the driver are also supported * * ####Example: * - * // find the max age of all users + * // Legacy point + * Model.geoNear([1,3], { maxDistance : 5, spherical : true }, function(err, results, stats) { + * console.log(results); + * }); + * + * // geoJson + * var point = { type : "Point", coordinates : [9,9] }; + * Model.geoNear(point, { maxDistance : 5, spherical : true }, function(err, results, stats) { + * console.log(results); + * }); + * + * @param {Object/Array} GeoJSON point or legacy coordinate pair [x,y] to search near + * @param {Object} options for the qurery + * @param {Function} [callback] optional callback for the query + * @return {Promise} + * @see http://docs.mongodb.org/manual/core/2dsphere/ + * @see http://mongodb.github.io/node-mongodb-native/api-generated/collection.html?highlight=geonear#geoNear + * @api public + */ + +Model.geoNear = function (near, options, callback) { + if ('function' == typeof options) { + callback = options; + options = {}; + } + + var promise = new Promise(callback); + if (!near) { + promise.error(new Error("Must pass a near option to geoNear")); + return promise; + } + + var x,y; + + if (Array.isArray(near)) { + if (near.length != 2) { + promise.error(new Error("If using legacy coordinates, must be an array of size 2 for geoNear")); + return promise; + } + x = near[0]; + y = near[1]; + } else { + if (near.type != "Point" || !Array.isArray(near.coordinates)) { + promise.error(new Error("Must pass either a legacy coordinate array or GeoJSON Point to geoNear")); + return promise; + } + + x = near.coordinates[0]; + y = near.coordinates[1]; + } + + var self = this; + this.collection.geoNear(x, y, options, function (err, res) { + if (err) return promise.error(err); + if (options.lean) return promise.fulfill(res.results, res.stats); + + var count = res.results.length; + // if there are no results, fulfill the promise now + if (count == 0) { + return promise.fulfill(res.results, res.stats); + } + + var errSeen = false; + for (var i=0; i < res.results.length; i++) { + var temp = res.results[i].obj; + res.results[i].obj = new self(); + res.results[i].obj.init(temp, function (err) { + if (err && !errSeen) { + errSeen = true; + return promise.error(err); + } + --count || promise.fulfill(res.results, res.stats); + }); + } + }); + return promise; +}; + +/** + * Performs [aggregations](http://docs.mongodb.org/manual/applications/aggregation/) on the models collection. + * + * If a `callback` is passed, the `aggregate` is executed and a `Promise` is returned. If a callback is not passed, the `aggregate` itself is returned. + * + * ####Example: + * + * // Find the max balance of all accounts * Users.aggregate( - * { $group: { _id: null, maxAge: { $max: '$age' }}} - * , { $project: { _id: 0, maxAge: 1 }} + * { $group: { _id: null, maxBalance: { $max: '$balance' }}} + * , { $project: { _id: 0, maxBalance: 1 }} * , function (err, res) { * if (err) return handleError(err); - * console.log(res); // [ { maxAge: 98 } ] + * console.log(res); // [ { maxBalance: 98000 } ] + * }); + * + * // Or use the aggregation pipeline builder. + * Users.aggregate() + * .group({ _id: null, maxBalance: { $max: '$balance' } }) + * .select('-id maxBalance') + * .exec(function (err, res) { + * if (err) return handleError(err); + * console.log(res); // [ { maxBalance: 98 } ] * }); * * ####NOTE: * - * - At this time, arguments are not cast to the schema because $project operators allow redefining the "shape" of the documents at any stage of the pipeline. - * - The documents returned are plain javascript objects, not mongoose documents cast to this models schema definition (since any shape of document can be returned). + * - Arguments are not cast to the model's schema because `$project` operators allow redefining the "shape" of the documents at any stage of the pipeline, which may leave documents in an incompatible format. + * - The documents returned are plain javascript objects, not mongoose documents (since any shape of document can be returned). * - Requires MongoDB >= 2.1 * - * @param {Array} array an array of pipeline commands - * @param {Object} [options] - * @param {Function} callback - * @see aggregation http://docs.mongodb.org/manual/applications/aggregation/ - * @see driver http://mongodb.github.com/node-mongodb-native/api-generated/collection.html#aggregate + * @see Aggregate #aggregate_Aggregate + * @see MongoDB http://docs.mongodb.org/manual/applications/aggregation/ + * @param {Object|Array} [...] aggregation pipeline operator(s) or operator array + * @param {Function} [callback] + * @return {Aggregate|Promise} * @api public */ Model.aggregate = function aggregate () { - return this.collection.aggregate.apply(this.collection, arguments); + var args = [].slice.call(arguments) + , aggregate + , callback; + + if ('function' === typeof args[args.length - 1]) { + callback = args.pop(); + } + + if (1 === args.length && util.isArray(args[0])) { + aggregate = new Aggregate(args[0]); + } else { + aggregate = new Aggregate(args); + } + + aggregate.bind(this); + + if ('undefined' === typeof callback) { + return aggregate; + } + + return aggregate.exec(callback); } +/** + * Implements `$geoSearch` functionality for Mongoose + * + * ####Example: + * + * var options = { near: [10, 10], maxDistance: 5 }; + * Locations.geoSearch({ type : "house" }, options, function(err, res) { + * console.log(res); + * }); + * + * ####Options: + * - `near` {Array} x,y point to search for + * - `maxDistance` {Number} the maximum distance from the point near that a result can be + * - `limit` {Number} The maximum number of results to return + * - `lean` {Boolean} return the raw object instead of the Mongoose Model + * + * @param {Object} condition an object that specifies the match condition (required) + * @param {Object} options for the geoSearch, some (near, maxDistance) are required + * @param {Function} [callback] optional callback + * @return {Promise} + * @see http://docs.mongodb.org/manual/reference/command/geoSearch/ + * @see http://docs.mongodb.org/manual/core/geohaystack/ + * @api public + */ + +Model.geoSearch = function (conditions, options, callback) { + if ('function' == typeof options) { + callback = options; + options = {}; + } + + var promise = new Promise(callback); + + if (conditions == undefined || !utils.isObject(conditions)) { + return promise.error(new Error("Must pass conditions to geoSearch")); + } + + if (!options.near) { + return promise.error(new Error("Must specify the near option in geoSearch")); + } + + if (!Array.isArray(options.near)) { + return promise.error(new Error("near option must be an array [x, y]")); + } + + + // send the conditions in the options object + options.search = conditions; + var self = this; + + this.collection.geoHaystackSearch(options.near[0], options.near[1], options, function (err, res) { + // have to deal with driver problem. Should be fixed in a soon-ish release + // (7/8/2013) + if (err || res.errmsg) { + if (!err) err = new Error(res.errmsg); + if (res && res.code !== undefined) err.code = res.code; + return promise.error(err); + } + + var count = res.results.length; + if (options.lean || (count == 0)) return promise.fulfill(res.results, res.stats); + + var errSeen = false; + for (var i=0; i < res.results.length; i++) { + var temp = res.results[i]; + res.results[i] = new self(); + res.results[i].init(temp, {}, function (err) { + if (err && !errSeen) { + errSeen = true; + return promise.error(err); + } + + --count || (!errSeen && promise.fulfill(res.results, res.stats)); + }); + } + }); + + return promise; +}; + /** * Populates document references. * @@ -1642,9 +2007,8 @@ Model.aggregate = function aggregate () { * User.find(match, function (err, users) { * var opts = [{ path: 'company', match: { x: 1 }, select: 'name' }] * - * User.populate(users, opts, function (err, user) { - * console.log(user); - * }) + * var promise = User.populate(users, opts); + * promise.then(console.log).end(); * }) * * // imagine a Weapon model exists with two saved documents: @@ -1671,18 +2035,19 @@ Model.aggregate = function aggregate () { * * @param {Document|Array} docs Either a single document or array of documents to populate. * @param {Object} options A hash of key/val (path, options) used for population. - * @param {Function} cb(err,doc) A callback, executed upon completion. Receives `err` and the `doc(s)`. + * @param {Function} [cb(err,doc)] Optional callback, executed upon completion. Receives `err` and the `doc(s)`. + * @return {Promise} * @api public */ Model.populate = function (docs, paths, cb) { - assert.equal('function', typeof cb); + var promise = new Promise(cb); - // always callback on nextTick for consistent async behavior - function callback () { + // always resolve on nextTick for consistent async behavior + function resolve () { var args = utils.args(arguments); process.nextTick(function () { - cb.apply(null, args); + promise.resolve.apply(promise, args); }); } @@ -1691,7 +2056,8 @@ Model.populate = function (docs, paths, cb) { var pending = paths.length; if (0 === pending) { - return callback(null, docs); + resolve(null, docs); + return promise; } // each path has its own query options and must be executed separately @@ -1702,21 +2068,26 @@ Model.populate = function (docs, paths, cb) { populate(this, docs, path, next); } + return promise; + function next (err) { - if (next.err) return; - if (err) return callback(next.err = err); + if (err) return resolve(err); if (--pending) return; - callback(null, docs); + resolve(null, docs); } } /*! - * Prepare population options + * Populates `docs` */ function populate (model, docs, options, cb) { - var path = options.path + var select = options.select + , match = options.match + , path = options.path; + var schema = model._getSchema(path); + var subpath; // handle document arrays if (schema && schema.caster) { @@ -1726,8 +2097,8 @@ function populate (model, docs, options, cb) { // model name for the populate query var modelName = options.model && options.model.modelName || options.model // query options - || schema && schema.options.ref // declared in schema - || model.modelName // an ad-hoc structure + || schema && schema.options && schema.options.ref // declared in schema + || model.modelName; // an ad-hoc structure var Model = model.db.model(modelName); @@ -1743,48 +2114,26 @@ function populate (model, docs, options, cb) { return cb(); } - populateDocs(docs, options, cb); -} - -/*! - * Populates `docs` - */ - -function populateDocs (docs, options, cb) { - var select = options.select; - var match = options.match; - var path = options.path; - var Model = options.model; - var rawIds = []; var i, doc, id; - var len = docs.length; + var ret; var found = 0; var isDocument; - var subpath; - var ret; + var numDocuments = docs.length; - for (i = 0; i < len; i++) { + for (i = 0; i < numDocuments; ++i) { ret = undefined; doc = docs[i]; id = String(utils.getValue("_id", doc)); isDocument = !! doc.$__; - if (isDocument && !doc.isModified(path)) { - // it is possible a previously populated path is being - // populated again. because users can specify matcher - // clauses in their populate arguments we use the cached - // _ids from the original populate call to ensure all _ids - // are looked up, but only if the path wasn't modified which - // signifies the users intent of the state of the path. - ret = doc.populated(path); - } - if (!ret || Array.isArray(ret) && 0 === ret.length) { ret = utils.getValue(path, doc); } if (ret) { + ret = convertTo_id(ret); + // previously we always assigned this even if the document had no _id options._docs[id] = Array.isArray(ret) ? ret.slice() @@ -1828,7 +2177,7 @@ function populateDocs (docs, options, cb) { // for document matching during assignment. we'll delete the // _id back off before returning the result. if ('string' == typeof select) { - select = null; + select = select.replace(/\s?-_id\s?/g, ' '); } else { // preserve original select conditions by copying select = utils.object.shallowCopy(select); @@ -1836,6 +2185,13 @@ function populateDocs (docs, options, cb) { } } + // if a limit option is passed, we should have the limit apply to *each* + // document, not apply in the aggregate + if (options.options && options.options.limit) { + assignmentOpts.originalLimit = options.options.limit; + options.options.limit = options.options.limit * numDocuments; + } + Model.find(match, select, options.options, function (err, vals) { if (err) return cb(err); @@ -1872,6 +2228,28 @@ function populateDocs (docs, options, cb) { }); } +/*! + * Retrieve the _id of `val` if a Document or Array of Documents. + * + * @param {Array|Document|Any} val + * @return {Array|Document|Any} + */ + +function convertTo_id (val) { + if (val instanceof Model) return val._id; + + if (Array.isArray(val)) { + for (var i = 0; i < val.length; ++i) { + if (val[i] instanceof Model) { + val[i] = val[i]._id; + } + } + return val; + } + + return val; +} + /*! * Assigns documents returned from a population query back * to the original document path. @@ -1920,13 +2298,27 @@ function valueFilter (val, assignmentOpts) { if (Array.isArray(val)) { // find logic var ret = []; - for (var i = 0; i < val.length; ++i) { + var numValues = val.length; + for (var i = 0; i < numValues; ++i) { var subdoc = val[i]; if (!isDoc(subdoc)) continue; maybeRemoveId(subdoc, assignmentOpts); ret.push(subdoc); + if (assignmentOpts.originalLimit && + ret.length >= assignmentOpts.originalLimit) { + break; + } } - return ret; + + // Since we don't want to have to create a new mongoosearray, make sure to + // modify the array in place + while (val.length > ret.length) { + Array.prototype.pop.apply(val, []); + } + for (var i = 0; i < ret.length; ++i) { + val[i] = ret[i]; + } + return val; } // findOne @@ -1945,7 +2337,7 @@ function valueFilter (val, assignmentOpts) { function maybeRemoveId (subdoc, assignmentOpts) { if (assignmentOpts.excludeId) { if ('function' == typeof subdoc.setValue) { - subdoc.setValue('_id', undefined); + delete subdoc._doc._id; } else { delete subdoc._id; } @@ -2098,7 +2490,9 @@ Model._getSchema = function _getSchema (path) { // are remaining document paths to look up for casting. // Also we need to handle array.$.path since schema.path // doesn't work for that. - if (p !== parts.length) { + // If there is no foundschema.schema we are dealing with + // a path like array.$ + if (p !== parts.length && foundschema.schema) { if ('$' === parts[p]) { // comments.$.comments.$.title return search(parts.slice(p+1), foundschema.schema); @@ -2147,6 +2541,7 @@ Model.compile = function compile (name, schema, collectionName, connection, base model.prototype.__proto__ = Model.prototype; model.model = Model.prototype.model; model.db = model.prototype.db = connection; + model.discriminators = model.prototype.discriminators = undefined; model.prototype.$__setSchema(schema); @@ -2160,16 +2555,9 @@ Model.compile = function compile (name, schema, collectionName, connection, base , collectionOptions ); - // apply methods - for (var i in schema.methods) - model.prototype[i] = schema.methods[i]; - - // apply statics - for (var i in schema.statics) - model[i] = schema.statics[i]; - - // apply named scopes - if (schema.namedScopes) schema.namedScopes.compile(model); + // apply methods and statics + applyMethods(model, schema); + applyStatics(model, schema); model.schema = model.prototype.schema; model.options = model.prototype.options; @@ -2178,6 +2566,53 @@ Model.compile = function compile (name, schema, collectionName, connection, base return model; }; +/*! + * Register methods for this model + * + * @param {Model} model + * @param {Schema} schema + */ +var applyMethods = function(model, schema) { + for (var i in schema.methods) { + if (typeof schema.methods[i] === 'function') { + model.prototype[i] = schema.methods[i]; + } else { + (function(_i) { + Object.defineProperty(model.prototype, _i, { + get: function() { + var h = {}; + for (var k in schema.methods[_i]) { + h[k] = schema.methods[_i][k].bind(this); + } + return h; + } + }); + })(i); + } + } + + for (var i in schema.methods) + model.prototype[i] = schema.methods[i]; +}; + +/*! + * Register statics for this model + * @param {Model} model + * @param {Schema} schema + */ +var applyStatics = function(model, schema) { + for (var i in schema.statics) { + // use defineProperty so that static props can't be overwritten + Object.defineProperty(model, i, { + value: schema.statics[i], + writable: false + }); + } + + for (var i in schema.statics) + model[i] = schema.statics[i]; +}; + /*! * Subclass this model with `conn`, `schema`, and `collection` settings. * @@ -2206,14 +2641,16 @@ Model.__subclass = function subclass (conn, schema, collection) { ? schema : model.prototype.schema; + var options = s.options || {}; + if (!collection) { collection = model.prototype.schema.get('collection') - || utils.toCollectionName(model.modelName); + || utils.toCollectionName(model.modelName, options); } var collectionOptions = { - bufferCommands: s ? s.options.bufferCommands : true - , capped: s && s.options.capped + bufferCommands: s ? options.bufferCommands : true + , capped: s && options.capped }; Model.prototype.collection = conn.collection(collection, collectionOptions); diff --git a/node_modules/mongoose/lib/namedscope.js b/node_modules/mongoose/lib/namedscope.js deleted file mode 100644 index 1b3f5d4..0000000 --- a/node_modules/mongoose/lib/namedscope.js +++ /dev/null @@ -1,70 +0,0 @@ -var Query = require('./query'); -function NamedScope () {} - -NamedScope.prototype.query; - -NamedScope.prototype.where = function () { - var q = this.query || (this.query = new Query()); - q.where.apply(q, arguments); - return q; -}; - -/** - * Decorate - * - * @param {NamedScope} target - * @param {Object} getters - * @api private - */ - -NamedScope.prototype.decorate = function (target, getters) { - var name = this.name - , block = this.block - , query = this.query; - if (block) { - if (block.length === 0) { - Object.defineProperty(target, name, { - get: getters.block0(block) - }); - } else { - target[name] = getters.blockN(block); - } - } else { - Object.defineProperty(target, name, { - get: getters.basic(query) - }); - } -}; - -NamedScope.prototype.compile = function (model) { - var allScopes = this.scopesByName - , scope; - for (var k in allScopes) { - scope = allScopes[k]; - scope.decorate(model, { - block0: function (block) { - return function () { - var cquery = this._cumulativeQuery || (this._cumulativeQuery = new Query().bind(this)); - block.call(cquery); - return this; - }; - }, - blockN: function (block) { - return function () { - var cquery = this._cumulativeQuery || (this._cumulativeQuery = new Query().bind(this)); - block.apply(cquery, arguments); - return this; - }; - }, - basic: function (query) { - return function () { - var cquery = this._cumulativeQuery || (this._cumulativeQuery = new Query().bind(this)); - cquery.find(query); - return this; - }; - } - }); - } -}; - -module.exports = NamedScope; diff --git a/node_modules/mongoose/lib/promise.js b/node_modules/mongoose/lib/promise.js index 20ab42a..d0923bd 100644 --- a/node_modules/mongoose/lib/promise.js +++ b/node_modules/mongoose/lib/promise.js @@ -4,6 +4,7 @@ */ var MPromise = require('mpromise'); +var util = require('util'); /** * Promise constructor. @@ -85,7 +86,12 @@ Promise.FAILURE = 'err'; */ Promise.prototype.error = function (err) { - if (!(err instanceof Error)) err = new Error(err); + if (!(err instanceof Error)) { + if (err instanceof Object) { + err = util.inspect(err); + } + err = new Error(err); + } return this.reject(err); } @@ -103,10 +109,10 @@ Promise.prototype.error = function (err) { * @api public */ -Promise.prototype.resolve = function (err, val) { +Promise.prototype.resolve = function (err) { if (err) return this.error(err); - return this.fulfill(val); -} + return this.fulfill.apply(this, Array.prototype.slice.call(arguments, 1)); +}; /** * Adds a single function as a listener to both err and complete. @@ -120,21 +126,45 @@ Promise.prototype.resolve = function (err, val) { * * Alias of [mpromise#onResolve](https://github.com/aheckmann/mpromise#onresolve). * + * _Deprecated. Use `onResolve` instead._ + * * @method addBack * @param {Function} listener * @return {Promise} this + * @deprecated */ Promise.prototype.addBack = Promise.prototype.onResolve; +/** + * Fulfills this promise with passed arguments. + * + * @method fulfill + * @see https://github.com/aheckmann/mpromise#fulfill + * @param {any} args + * @api public + */ + +/** + * Fulfills this promise with passed arguments. + * + * @method fulfill + * @see https://github.com/aheckmann/mpromise#fulfill + * @param {any} args + * @api public + */ + /** * Fulfills this promise with passed arguments. * * Alias of [mpromise#fulfill](https://github.com/aheckmann/mpromise#fulfill). * + * _Deprecated. Use `fulfill` instead._ + * * @method complete * @param {any} args * @api public + * @deprecated */ Promise.prototype.complete = MPromise.prototype.fulfill; @@ -144,10 +174,13 @@ Promise.prototype.complete = MPromise.prototype.fulfill; * * Alias of [mpromise#onFulfill](https://github.com/aheckmann/mpromise#onfulfill). * + * _Deprecated. Use `onFulfill` instead._ + * * @method addCallback * @param {Function} listener * @return {Promise} this * @api public + * @deprecated */ Promise.prototype.addCallback = Promise.prototype.onFulfill; @@ -157,10 +190,13 @@ Promise.prototype.addCallback = Promise.prototype.onFulfill; * * Alias of [mpromise#onReject](https://github.com/aheckmann/mpromise#onreject). * + * _Deprecated. Use `onReject` instead._ + * * @method addErrback * @param {Function} listener * @return {Promise} this * @api public + * @deprecated */ Promise.prototype.addErrback = Promise.prototype.onReject; diff --git a/node_modules/mongoose/lib/query.js b/node_modules/mongoose/lib/query.js index 9f052e8..cb6c046 100644 --- a/node_modules/mongoose/lib/query.js +++ b/node_modules/mongoose/lib/query.js @@ -2,2175 +2,2495 @@ * Module dependencies. */ -var utils = require('./utils') - , merge = utils.merge - , Promise = require('./promise') - , Document = require('./document') - , Types = require('./schema/index') - , inGroupsOf = utils.inGroupsOf - , tick = utils.tick - , QueryStream = require('./querystream') - , helpers = require('./queryhelpers') - , ReadPref = require('mongodb').ReadPreference +var mquery = require('mquery'); +var util = require('util'); +var events = require('events'); +var mongo = require('mongodb'); + +var utils = require('./utils'); +var Promise = require('./promise'); +var helpers = require('./queryhelpers'); +var Types = require('./schema/index'); +var Document = require('./document'); +var QueryStream = require('./querystream'); /** * Query constructor used for building queries. * * ####Example: * - * var query = Model.find(); + * var query = new Query(); + * query.setOptions({ lean : true }); + * query.collection(model.collection); * query.where('age').gte(21).exec(callback); * - * @param {Object} criteria - * @param {Object} options - * @api public + * @param {Object} [options] + * @param {Object} [model] + * @param {Object} [conditions] + * @param {Object} [collection] Mongoose collection + * @api private */ -function Query (criteria, options) { - this.setOptions(options, true); - this._conditions = {}; - this._updateArg = {}; - this._fields = undefined; - this._geoComparison = undefined; - if (criteria) this.find(criteria); -} - -/** - * Sets query options. - * - * ####Options: - * - * - [tailable](http://www.mongodb.org/display/DOCS/Tailable+Cursors) * - * - [sort](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bsort(\)%7D%7D) * - * - [limit](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Blimit%28%29%7D%7D) * - * - [skip](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bskip%28%29%7D%7D) * - * - [maxscan](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24maxScan) * - * - [batchSize](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7BbatchSize%28%29%7D%7D) * - * - [comment](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24comment) * - * - [snapshot](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bsnapshot%28%29%7D%7D) * - * - [hint](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24hint) * - * - [slaveOk](http://docs.mongodb.org/manual/applications/replication/#read-preference) * - * - [lean](./api.html#query_Query-lean) * - * - [safe](http://www.mongodb.org/display/DOCS/getLastError+Command) - * - * _* denotes a query helper method is also available_ - * - * @param {Object} options - * @api public - */ +function Query(conditions, options, model, collection) { + // this stuff is for dealing with custom queries created by #toConstructor + if (!this._mongooseOptions) { + this._mongooseOptions = {}; + } -Query.prototype.setOptions = function (options, overwrite) { - // overwrite is internal use only - if (overwrite) { - options = this.options = options || {}; - this.safe = options.safe; - if ('populate' in options) { - this.populate(this.options.populate); + // this is the case where we have a CustomQuery, we need to check if we got + // options passed in, and if we did, merge them in + if (options) { + var keys = Object.keys(options); + for (var i=0; i < keys.length; i++) { + var k = keys[i]; + this._mongooseOptions[k] = options[k]; } - return this; } - if (!(options && 'Object' == options.constructor.name)) - return this; - - if ('safe' in options) - this.safe = options.safe; + if (collection) { + this.mongooseCollection = collection; + } - // set arbitrary options - var methods = Object.keys(options) - , i = methods.length - , method + if (model) { + this.model = model; + } - while (i--) { - method = methods[i]; - - // use methods if exist (safer option manipulation) - if ('function' == typeof this[method]) { - var args = Array.isArray(options[method]) - ? options[method] - : [options[method]]; - this[method].apply(this, args) - } else { - this.options[method] = options[method]; - } + // this is needed because map reduce returns a model that can be queried, but + // all of the queries on said model should be lean + if (this.model && this.model._mapreduce) { + this.lean(); } - return this; + // inherit mquery + mquery.call(this, this.mongooseCollection, options); + + if (conditions) { + this.find(conditions); + } } -/** - * Binds this query to a model. - * - * @param {Model} model the model to which the query is bound - * @param {String} op the operation to execute - * @param {Object} updateArg used in update methods - * @return {Query} - * @api private +/*! + * inherit mquery */ -Query.prototype.bind = function bind (model, op, updateArg) { - this.model = model; - this.op = op; +Query.prototype = new mquery; +Query.prototype.constructor = Query; +Query.base = mquery.prototype; - if (model._mapreduce) this.options.lean = true; - - if (op == 'update' || op == 'findOneAndUpdate') { - merge(this._updateArg, updateArg || {}); - } +/** + * Flag to opt out of using `$geoWithin`. + * + * mongoose.Query.use$geoWithin = false; + * + * MongoDB 2.4 deprecated the use of `$within`, replacing it with `$geoWithin`. Mongoose uses `$geoWithin` by default (which is 100% backward compatible with $within). If you are running an older version of MongoDB, set this flag to `false` so your `within()` queries continue to work. + * + * @see http://docs.mongodb.org/manual/reference/operator/geoWithin/ + * @default true + * @property use$geoWithin + * @memberOf Query + * @receiver Query + * @api public + */ - return this; -}; +Query.use$geoWithin = mquery.use$geoWithin; /** - * Executes the query + * Converts this query to a customized, reusable query constructor with all arguments and options retained. * - * ####Examples + * ####Example * - * query.exec(); - * query.exec(callback); - * query.exec('update'); - * query.exec('find', callback); + * // Create a query for adventure movies and read from the primary + * // node in the replica-set unless it is down, in which case we'll + * // read from a secondary node. + * var query = Movie.find({ tags: 'adventure' }).read('primaryPreferred'); + * + * // create a custom Query constructor based off these settings + * var Adventure = query.toConstructor(); + * + * // Adventure is now a subclass of mongoose.Query and works the same way but with the + * // default query parameters and options set. + * Adventure().exec(callback) + * + * // further narrow down our query results while still using the previous settings + * Adventure().where({ name: /^Life/ }).exec(callback); + * + * // since Adventure is a stand-alone constructor we can also add our own + * // helper methods and getters without impacting global queries + * Adventure.prototype.startsWith = function (prefix) { + * this.where({ name: new RegExp('^' + prefix) }) + * return this; + * } + * Object.defineProperty(Adventure.prototype, 'highlyRated', { + * get: function () { + * this.where({ rating: { $gt: 4.5 }}); + * return this; + * } + * }) + * Adventure().highlyRated.startsWith('Life').exec(callback) * - * @param {String|Function} [operation] - * @param {Function} [callback] - * @return {Promise} + * New in 3.7.3 + * + * @return {Query} subclass-of-Query * @api public */ -Query.prototype.exec = function exec (op, callback) { - var promise = new Promise(); - - switch (typeof op) { - case 'function': - callback = op; - op = null; - break; - case 'string': - this.op = op; - break; +Query.prototype.toConstructor = function toConstructor () { + function CustomQuery (criteria, options) { + if (!(this instanceof CustomQuery)) + return new CustomQuery(criteria, options); + Query.call(this, criteria, options || null); } - if (callback) promise.addBack(callback); + util.inherits(CustomQuery, Query); - if (!this.op) { - promise.complete(); - return promise; - } + // set inherited defaults + var p = CustomQuery.prototype; - if ('update' == this.op) { - this[this.op](this._updateArg, promise.resolve.bind(promise)); - return promise; - } + p.options = {}; - if ('distinct' == this.op) { - this.distinct(this._distinctArg, promise.resolve.bind(promise)); - return promise; - } + p.setOptions(this.options); - this[this.op](promise.resolve.bind(promise)); - return promise; -}; + p.op = this.op; + p._conditions = utils.clone(this._conditions); + p._fields = utils.clone(this._fields); + p._update = utils.clone(this._update); + p._path = this._path; + p._distict = this._distinct; + p._collection = this._collection; + p.model = this.model; + p.mongooseCollection = this.mongooseCollection; + p._mongooseOptions = this._mongooseOptions; + + return CustomQuery; +} /** - * Finds documents. - * - * When no `callback` is passed, the query is not executed. + * Specifies a javascript function or expression to pass to MongoDBs query system. * * ####Example * - * query.find({ name: 'Los Pollos Hermanos' }).find(callback) + * query.$where('this.comments.length === 10 || this.name.length === 5') * - * @param {Object} [criteria] mongodb selector - * @param {Function} [callback] + * // or + * + * query.$where(function () { + * return this.comments.length === 10 || this.name.length === 5; + * }) + * + * ####NOTE: + * + * Only use `$where` when you have a condition that cannot be met using other MongoDB operators like `$lt`. + * **Be sure to read about all of [its caveats](http://docs.mongodb.org/manual/reference/operator/where/) before using.** + * + * @see $where http://docs.mongodb.org/manual/reference/operator/where/ + * @method $where + * @param {String|Function} js javascript string or function * @return {Query} this + * @memberOf Query + * @method $where * @api public */ -Query.prototype.find = function (criteria, callback) { - this.op = 'find'; - if ('function' === typeof criteria) { - callback = criteria; - criteria = {}; - } else if (criteria instanceof Query) { - // TODO Merge options, too - merge(this._conditions, criteria._conditions); - } else if (criteria instanceof Document) { - merge(this._conditions, criteria.toObject()); - } else if (criteria && 'Object' === criteria.constructor.name) { - merge(this._conditions, criteria); - } - if (!callback) return this; - return this.execFind(callback); -}; +/** + * Specifies a `path` for use with chaining. + * + * ####Example + * + * // instead of writing: + * User.find({age: {$gte: 21, $lte: 65}}, callback); + * + * // we can instead write: + * User.where('age').gte(21).lte(65); + * + * // passing query conditions is permitted + * User.find().where({ name: 'vonderful' }) + * + * // chaining + * User + * .where('age').gte(21).lte(65) + * .where('name', /^vonderful/i) + * .where('friends').slice(10) + * .exec(callback) + * + * @method where + * @memberOf Query + * @param {String|Object} [path] + * @param {any} [val] + * @return {Query} this + * @api public + */ /** - * Casts this query to the schema of `model` + * Specifies the complementary comparison value for paths specified with `where()` * - * ####Note + * ####Example * - * If `obj` is present, it is cast instead of this query. + * User.where('age').equals(49); * - * @param {Model} model - * @param {Object} [obj] - * @return {Object} + * // is the same as + * + * User.where('age', 49); + * + * @method equals + * @memberOf Query + * @param {Object} val + * @return {Query} this * @api public */ -Query.prototype.cast = function (model, obj) { - obj || (obj= this._conditions); +/** + * Specifies arguments for an `$or` condition. + * + * ####Example + * + * query.or([{ color: 'red' }, { status: 'emergency' }]) + * + * @see $or http://docs.mongodb.org/manual/reference/operator/or/ + * @method or + * @memberOf Query + * @param {Array} array array of conditions + * @return {Query} this + * @api public + */ - var schema = model.schema - , paths = Object.keys(obj) - , i = paths.length - , any$conditionals - , schematype - , nested - , path - , type - , val; +/** + * Specifies arguments for a `$nor` condition. + * + * ####Example + * + * query.nor([{ color: 'green' }, { status: 'ok' }]) + * + * @see $nor http://docs.mongodb.org/manual/reference/operator/nor/ + * @method nor + * @memberOf Query + * @param {Array} array array of conditions + * @return {Query} this + * @api public + */ - while (i--) { - path = paths[i]; - val = obj[path]; +/** + * Specifies arguments for a `$and` condition. + * + * ####Example + * + * query.and([{ color: 'green' }, { status: 'ok' }]) + * + * @method and + * @memberOf Query + * @see $and http://docs.mongodb.org/manual/reference/operator/and/ + * @param {Array} array array of conditions + * @return {Query} this + * @api public + */ - if ('$or' === path || '$nor' === path || '$and' === path) { - var k = val.length - , orComponentQuery; +/** + * Specifies a $gt query condition. + * + * When called with one argument, the most recent path passed to `where()` is used. + * + * ####Example + * + * Thing.find().where('age').gt(21) + * + * // or + * Thing.find().gt('age', 21) + * + * @method gt + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @see $gt http://docs.mongodb.org/manual/reference/operator/gt/ + * @api public + */ - while (k--) { - orComponentQuery = new Query(val[k]); - orComponentQuery.cast(model); - val[k] = orComponentQuery._conditions; - } +/** + * Specifies a $gte query condition. + * + * When called with one argument, the most recent path passed to `where()` is used. + * + * @method gte + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @see $gte http://docs.mongodb.org/manual/reference/operator/gte/ + * @api public + */ - } else if (path === '$where') { - type = typeof val; - - if ('string' !== type && 'function' !== type) { - throw new Error("Must have a string or function for $where"); - } - - if ('function' === type) { - obj[path] = val.toString(); - } - - continue; - - } else { - - if (!schema) { - // no casting for Mixed types - continue; - } - - schematype = schema.path(path); - - if (!schematype) { - // Handle potential embedded array queries - var split = path.split('.') - , j = split.length - , pathFirstHalf - , pathLastHalf - , remainingConds - , castingQuery; - - // Find the part of the var path that is a path of the Schema - while (j--) { - pathFirstHalf = split.slice(0, j).join('.'); - schematype = schema.path(pathFirstHalf); - if (schematype) break; - } - - // If a substring of the input path resolves to an actual real path... - if (schematype) { - // Apply the casting; similar code for $elemMatch in schema/array.js - if (schematype.caster && schematype.caster.schema) { - remainingConds = {}; - pathLastHalf = split.slice(j).join('.'); - remainingConds[pathLastHalf] = val; - castingQuery = new Query(remainingConds); - castingQuery.cast(schematype.caster); - obj[path] = castingQuery._conditions[pathLastHalf]; - } else { - obj[path] = val; - } - continue; - } - - if (utils.isObject(val)) { - // handle geo schemas that use object notation - // { loc: { long: Number, lat: Number } - - var geo = val.$near ? '$near' : - val.$nearSphere ? '$nearSphere' : - val.$within ? '$within' : - val.$geoIntersects ? '$geoIntersects' : ''; - - if (!geo) { - continue; - } - - var numbertype = new Types.Number('__QueryCasting__') - var value = val[geo]; - - if (val.$maxDistance) { - val.$maxDistance = numbertype.castForQuery(val.$maxDistance); - } - - if ('$within' == geo) { - var withinType = value.$center - || value.$centerSphere - || value.$box - || value.$polygon; - - if (!withinType) { - throw new Error('Bad $within paramater: ' + JSON.stringify(val)); - } - - value = withinType; - - } else if ('$near' == geo && - 'string' == typeof value.type && Array.isArray(value.coordinates)) { - // geojson; cast the coordinates - value = value.coordinates; - - } else if (('$near' == geo || '$geoIntersects' == geo) && - value.$geometry && 'string' == typeof value.$geometry.type && - Array.isArray(value.$geometry.coordinates)) { - // geojson; cast the coordinates - value = value.$geometry.coordinates; - } - - ;(function _cast (val) { - if (Array.isArray(val)) { - val.forEach(function (item, i) { - if (Array.isArray(item) || utils.isObject(item)) { - return _cast(item); - } - val[i] = numbertype.castForQuery(item); - }); - } else { - var nearKeys= Object.keys(val); - var nearLen = nearKeys.length; - while (nearLen--) { - var nkey = nearKeys[nearLen]; - var item = val[nkey]; - if (Array.isArray(item) || utils.isObject(item)) { - _cast(item); - val[nkey] = item; - } else { - val[nkey] = numbertype.castForQuery(item); - } - } - } - })(value); - } - - } else if (val === null || val === undefined) { - continue; - } else if ('Object' === val.constructor.name) { - - any$conditionals = Object.keys(val).some(function (k) { - return k.charAt(0) === '$' && k !== '$id' && k !== '$ref'; - }); - - if (!any$conditionals) { - obj[path] = schematype.castForQuery(val); - } else { - - var ks = Object.keys(val) - , k = ks.length - , $cond; - - while (k--) { - $cond = ks[k]; - nested = val[$cond]; - - if ('$exists' === $cond) { - if ('boolean' !== typeof nested) { - throw new Error("$exists parameter must be Boolean"); - } - continue; - } - - if ('$type' === $cond) { - if ('number' !== typeof nested) { - throw new Error("$type parameter must be Number"); - } - continue; - } - - if ('$not' === $cond) { - this.cast(model, nested); - } else { - val[$cond] = schematype.castForQuery($cond, nested); - } - } - } - } else { - obj[path] = schematype.castForQuery(val); - } - } - } - - return obj; -}; +/** + * Specifies a $lt query condition. + * + * When called with one argument, the most recent path passed to `where()` is used. + * + * @method lt + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @see $lt http://docs.mongodb.org/manual/reference/operator/lt/ + * @api public + */ /** - * Returns default options. - * @param {Model} model - * @api private + * Specifies a $lte query condition. + * + * When called with one argument, the most recent path passed to `where()` is used. + * + * @method lte + * @see $lte http://docs.mongodb.org/manual/reference/operator/lte/ + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @api public */ -Query.prototype._optionsForExec = function (model) { - var options = utils.clone(this.options, { retainKeyOrder: true }); - delete options.populate; - - if (!('safe' in options)) - options.safe = model.schema.options.safe; - - if (!('readPreference' in options) && model.schema.options.read) - options.readPreference = model.schema.options.read; - - return options; -}; - /** - * Applies schematype selected options to this query. - * @api private + * Specifies a $ne query condition. + * + * When called with one argument, the most recent path passed to `where()` is used. + * + * @see $ne http://docs.mongodb.org/manual/reference/operator/ne/ + * @method ne + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @api public */ -Query.prototype._applyPaths = function applyPaths () { - // determine if query is selecting or excluding fields - - var fields = this._fields - , exclude - , keys - , ki - - if (fields) { - keys = Object.keys(fields); - ki = keys.length; - - while (ki--) { - if ('+' == keys[ki][0]) continue; - exclude = 0 === fields[keys[ki]]; - break; - } - } - - // if selecting, apply default schematype select:true fields - // if excluding, apply schematype select:false fields - - var selected = [] - , excluded = [] - , seen = []; - - analyzeSchema(this.model.schema); - - switch (exclude) { - case true: - excluded.length && this.select('-' + excluded.join(' -')); - break; - case false: - selected.length && this.select(selected.join(' ')); - break; - case undefined: - // user didn't specify fields, implies returning all fields. - // only need to apply excluded fields - excluded.length && this.select('-' + excluded.join(' -')); - break; - } - - return seen = excluded = selected = keys = fields = null; - - function analyzeSchema (schema, prefix) { - prefix || (prefix = ''); - - // avoid recursion - if (~seen.indexOf(schema)) return; - seen.push(schema); - - schema.eachPath(function (path, type) { - if (prefix) path = prefix + '.' + path; - - analyzePath(path, type); - - // array of subdocs? - if (type.schema) { - analyzeSchema(type.schema, path); - } - - }); - } - - function analyzePath (path, type) { - if ('boolean' != typeof type.selected) return; - - var plusPath = '+' + path; - if (fields && plusPath in fields) { - // forced inclusion - delete fields[plusPath]; - - // if there are other fields being included, add this one - // if no other included fields, leave this out (implied inclusion) - if (false === exclude && keys.length > 1 && !~keys.indexOf(path)) { - fields[path] = 1; - } - - return - }; +/** + * Specifies an $in query condition. + * + * When called with one argument, the most recent path passed to `where()` is used. + * + * @see $in http://docs.mongodb.org/manual/reference/operator/in/ + * @method in + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @api public + */ - // check for parent exclusions - var root = path.split('.')[0]; - if (~excluded.indexOf(root)) return; +/** + * Specifies an $nin query condition. + * + * When called with one argument, the most recent path passed to `where()` is used. + * + * @see $nin http://docs.mongodb.org/manual/reference/operator/nin/ + * @method nin + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @api public + */ - ;(type.selected ? selected : excluded).push(path); - } -} +/** + * Specifies an $all query condition. + * + * When called with one argument, the most recent path passed to `where()` is used. + * + * @see $all http://docs.mongodb.org/manual/reference/operator/all/ + * @method all + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @api public + */ /** - * Specifies a javascript function or expression to pass to MongoDBs query system. + * Specifies a $size query condition. + * + * When called with one argument, the most recent path passed to `where()` is used. * * ####Example * - * query.$where('this.comments.length > 10 || this.name.length > 5') + * MyModel.where('tags').size(0).exec(function (err, docs) { + * if (err) return handleError(err); + * + * assert(Array.isArray(docs)); + * console.log('documents with 0 tags', docs); + * }) * - * // or + * @see $size http://docs.mongodb.org/manual/reference/operator/size/ + * @method size + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @api public + */ + +/** + * Specifies a $regex query condition. * - * query.$where(function () { - * return this.comments.length > 10 || this.name.length > 5; - * }) + * When called with one argument, the most recent path passed to `where()` is used. * - * ####NOTE: + * @see $regex http://docs.mongodb.org/manual/reference/operator/regex/ + * @method regex + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @api public + */ + +/** + * Specifies a $maxDistance query condition. * - * Only use `$where` when you have a condition that cannot be met using other MongoDB operators like `$lt`. - * **Be sure to read about all of [its caveats](http://docs.mongodb.org/manual/reference/operator/where/) before using.** + * When called with one argument, the most recent path passed to `where()` is used. * - * @see $where http://docs.mongodb.org/manual/reference/operator/where/ - * @param {String|Function} js javascript string or function - * @return {Query} this + * @see $maxDistance http://docs.mongodb.org/manual/reference/operator/maxDistance/ + * @method maxDistance * @memberOf Query - * @method $where + * @param {String} [path] + * @param {Number} val * @api public */ -Query.prototype.$where = function (js) { - this._conditions['$where'] = js; - return this; -}; +/** + * Specifies a `$mod` condition + * + * @method mod + * @memberOf Query + * @param {String} [path] + * @param {Number} val + * @return {Query} this + * @see $mod http://docs.mongodb.org/manual/reference/operator/mod/ + * @api public + */ /** - * Specifies a `path` for use with chaining. + * Specifies an `$exists` condition * * ####Example * - * // instead of writing: - * User.find({age: {$gte: 21, $lte: 65}}, callback); - * - * // we can instead write: - * User.where('age').gte(21).lte(65); + * // { name: { $exists: true }} + * Thing.where('name').exists() + * Thing.where('name').exists(true) + * Thing.find().exists('name') * - * // Moreover, you can also chain a bunch of these together: - * - * User - * .where('age').gte(21).lte(65) - * .where('name', /^b/i) - * .where('friends').slice(10) - * .exec(callback) + * // { name: { $exists: false }} + * Thing.where('name').exists(false); + * Thing.find().exists('name', false); * + * @method exists + * @memberOf Query * @param {String} [path] - * @param {Object} [val] + * @param {Number} val * @return {Query} this + * @see $exists http://docs.mongodb.org/manual/reference/operator/exists/ * @api public */ -Query.prototype.where = function (path, val) { - if (!arguments.length) return this; - - if ('string' != typeof path) { - throw new TypeError('path must be a string'); - } - - this._currPath = path; - - if (2 === arguments.length) { - this._conditions[path] = val; - } - - return this; -}; - /** - * Specifies the complementary comparison value for paths specified with `where()` + * Specifies an `$elemMatch` condition * * ####Example * - * User.where('age').equals(49); + * query.elemMatch('comment', { author: 'autobot', votes: {$gte: 5}}) * - * // is the same as + * query.where('comment').elemMatch({ author: 'autobot', votes: {$gte: 5}}) * - * User.where('age', 49); + * query.elemMatch('comment', function (elem) { + * elem.where('author').equals('autobot'); + * elem.where('votes').gte(5); + * }) * - * @param {Object} val + * query.where('comment').elemMatch(function (elem) { + * elem.where({ author: 'autobot' }); + * elem.where('votes').gte(5); + * }) + * + * @method elemMatch + * @memberOf Query + * @param {String|Object|Function} path + * @param {Object|Function} criteria * @return {Query} this + * @see $elemMatch http://docs.mongodb.org/manual/reference/operator/elemMatch/ * @api public */ -Query.prototype.equals = function equals (val) { - var path = this._currPath; - if (!path) throw new Error('equals() must be used after where()'); - this._conditions[path] = val; - return this; -} - /** - * Specifies arguments for an `$or` condition. + * Defines a `$within` or `$geoWithin` argument for geo-spatial queries. * * ####Example * - * query.or([{ color: 'red' }, { status: 'emergency' }]) + * query.where(path).within().box() + * query.where(path).within().circle() + * query.where(path).within().geometry() * - * @see $or http://docs.mongodb.org/manual/reference/operator/or/ - * @param {Array} array array of conditions + * query.where('loc').within({ center: [50,50], radius: 10, unique: true, spherical: true }); + * query.where('loc').within({ box: [[40.73, -73.9], [40.7, -73.988]] }); + * query.where('loc').within({ polygon: [[],[],[],[]] }); + * + * query.where('loc').within([], [], []) // polygon + * query.where('loc').within([], []) // box + * query.where('loc').within({ type: 'LineString', coordinates: [...] }); // geometry + * + * **MUST** be used after `where()`. + * + * ####NOTE: + * + * As of Mongoose 3.7, `$geoWithin` is always used for queries. To change this behavior, see [Query.use$geoWithin](#query_Query-use%2524geoWithin). + * + * ####NOTE: + * + * In Mongoose 3.7, `within` changed from a getter to a function. If you need the old syntax, use [this](https://github.com/ebensing/mongoose-within). + * + * @method within + * @see $polygon http://docs.mongodb.org/manual/reference/operator/polygon/ + * @see $box http://docs.mongodb.org/manual/reference/operator/box/ + * @see $geometry http://docs.mongodb.org/manual/reference/operator/geometry/ + * @see $center http://docs.mongodb.org/manual/reference/operator/center/ + * @see $centerSphere http://docs.mongodb.org/manual/reference/operator/centerSphere/ + * @memberOf Query * @return {Query} this * @api public */ -Query.prototype.or = function or (array) { - var or = this._conditions.$or || (this._conditions.$or = []); - if (!Array.isArray(array)) array = [array]; - or.push.apply(or, array); - return this; -} - /** - * Specifies arguments for a `$nor` condition. + * Specifies a $slice projection for an array. * * ####Example * - * query.nor([{ color: 'green' }, { status: 'ok' }]) + * query.slice('comments', 5) + * query.slice('comments', -5) + * query.slice('comments', [10, 5]) + * query.where('comments').slice(5) + * query.where('comments').slice([-10, 5]) * - * @see $nor http://docs.mongodb.org/manual/reference/operator/nor/ - * @param {Array} array array of conditions + * @method slice + * @memberOf Query + * @param {String} [path] + * @param {Number} val number/range of elements to slice * @return {Query} this + * @see mongodb http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-RetrievingaSubrangeofArrayElements + * @see $slice http://docs.mongodb.org/manual/reference/projection/slice/#prj._S_slice * @api public */ -Query.prototype.nor = function nor (array) { - var nor = this._conditions.$nor || (this._conditions.$nor = []); - if (!Array.isArray(array)) array = [array]; - nor.push.apply(nor, array); - return this; -} - /** - * Specifies arguments for a `$and` condition. + * Specifies the maximum number of documents the query will return. * * ####Example * - * query.and([{ color: 'green' }, { status: 'ok' }]) + * query.limit(20) * - * @see $and http://docs.mongodb.org/manual/reference/operator/and/ - * @param {Array} array array of conditions - * @return {Query} this + * ####Note + * + * Cannot be used with `distinct()` + * + * @method limit + * @memberOf Query + * @param {Number} val * @api public */ -Query.prototype.and = function and (array) { - var and = this._conditions.$and || (this._conditions.$and = []); - if (!Array.isArray(array)) array = [array]; - and.push.apply(and, array); - return this; -} - /** - * Specifies a $gt query condition. - * - * When called with one argument, the most recent path passed to `where()` is used. + * Specifies the number of documents to skip. * * ####Example * - * Thing.find().where('age').gt(21) + * query.skip(100).limit(20) * - * // or - * Thing.find().gt('age', 21) + * ####Note * - * @see $gt http://docs.mongodb.org/manual/reference/operator/gt/ - * @method gt + * Cannot be used with `distinct()` + * + * @method skip * @memberOf Query - * @param {String} path * @param {Number} val + * @see cursor.skip http://docs.mongodb.org/manual/reference/method/cursor.skip/ * @api public */ /** - * Specifies a $gte query condition. + * Specifies the maxScan option. * - * When called with one argument, the most recent path passed to `where()` is used. + * ####Example * - * @see $gte http://docs.mongodb.org/manual/reference/operator/gte/ - * @method gte + * query.maxScan(100) + * + * ####Note + * + * Cannot be used with `distinct()` + * + * @method maxScan * @memberOf Query - * @param {String} path * @param {Number} val + * @see maxScan http://docs.mongodb.org/manual/reference/operator/maxScan/ * @api public */ /** - * Specifies a $lt query condition. + * Specifies the batchSize option. * - * When called with one argument, the most recent path passed to `where()` is used. + * ####Example * - * @see $lt http://docs.mongodb.org/manual/reference/operator/lt/ - * @method lt + * query.batchSize(100) + * + * ####Note + * + * Cannot be used with `distinct()` + * + * @method batchSize * @memberOf Query - * @param {String} path * @param {Number} val + * @see batchSize http://docs.mongodb.org/manual/reference/method/cursor.batchSize/ * @api public */ /** - * Specifies a $lte query condition. + * Specifies the `comment` option. * - * When called with one argument, the most recent path passed to `where()` is used. + * ####Example * - * @see $lte http://docs.mongodb.org/manual/reference/operator/lte/ - * @method lte + * query.comment('login query') + * + * ####Note + * + * Cannot be used with `distinct()` + * + * @method comment * @memberOf Query - * @param {String} path * @param {Number} val + * @see comment http://docs.mongodb.org/manual/reference/operator/comment/ * @api public */ /** - * Specifies a $ne query condition. + * Specifies this query as a `snapshot` query. * - * When called with one argument, the most recent path passed to `where()` is used. + * ####Example * - * @see $ne http://docs.mongodb.org/manual/reference/operator/ne/ - * @method ne + * query.snapshot() // true + * query.snapshot(true) + * query.snapshot(false) + * + * ####Note + * + * Cannot be used with `distinct()` + * + * @method snapshot * @memberOf Query - * @param {String} path - * @param {Number} val + * @see snapshot http://docs.mongodb.org/manual/reference/operator/snapshot/ + * @return {Query} this * @api public */ /** - * Specifies an $in query condition. + * Sets query hints. * - * When called with one argument, the most recent path passed to `where()` is used. + * ####Example * - * @see $in http://docs.mongodb.org/manual/reference/operator/in/ - * @method in + * query.hint({ indexA: 1, indexB: -1}) + * + * ####Note + * + * Cannot be used with `distinct()` + * + * @method hint * @memberOf Query - * @param {String} path - * @param {Number} val + * @param {Object} val a hint object + * @return {Query} this + * @see $hint http://docs.mongodb.org/manual/reference/operator/hint/ * @api public */ /** - * Specifies an $nin query condition. + * Specifies which document fields to include or exclude * - * When called with one argument, the most recent path passed to `where()` is used. + * When using string syntax, prefixing a path with `-` will flag that path as excluded. When a path does not have the `-` prefix, it is included. Lastly, if a path is prefixed with `+`, it forces inclusion of the path, which is useful for paths excluded at the [schema level](/docs/api.html#schematype_SchemaType-select). * - * @see $nin http://docs.mongodb.org/manual/reference/operator/nin/ - * @method nin + * ####Example + * + * // include a and b, exclude c + * query.select('a b -c'); + * + * // or you may use object notation, useful when + * // you have keys already prefixed with a "-" + * query.select({a: 1, b: 1, c: 0}); + * + * // force inclusion of field excluded at schema level + * query.select('+path') + * + * ####NOTE: + * + * Cannot be used with `distinct()`. + * + * _v2 had slightly different syntax such as allowing arrays of field names. This support was removed in v3._ + * + * @method select * @memberOf Query - * @param {String} path - * @param {Number} val + * @param {Object|String} arg + * @return {Query} this + * @see SchemaType * @api public */ /** - * Specifies an $all query condition. + * _DEPRECATED_ Sets the slaveOk option. + * + * **Deprecated** in MongoDB 2.2 in favor of [read preferences](#query_Query-read). + * + * ####Example: * - * When called with one argument, the most recent path passed to `where()` is used. + * query.slaveOk() // true + * query.slaveOk(true) + * query.slaveOk(false) * - * @see $all http://docs.mongodb.org/manual/reference/operator/all/ - * @method all + * @method slaveOk * @memberOf Query - * @param {String} path - * @param {Number} val + * @deprecated use read() preferences instead if on mongodb >= 2.2 + * @param {Boolean} v defaults to true + * @see mongodb http://docs.mongodb.org/manual/applications/replication/#read-preference + * @see slaveOk http://docs.mongodb.org/manual/reference/method/rs.slaveOk/ + * @see read() #query_Query-read + * @return {Query} this * @api public */ /** - * Specifies an $size query condition. + * Determines the MongoDB nodes from which to read. * - * ####Example + * ####Preferences: * - * MyModel.where('tags').size(0).exec(function (err, docs) { - * if (err) return handleError(err); + * primary - (default) Read from primary only. Operations will produce an error if primary is unavailable. Cannot be combined with tags. + * secondary Read from secondary if available, otherwise error. + * primaryPreferred Read from primary if available, otherwise a secondary. + * secondaryPreferred Read from a secondary if available, otherwise read from the primary. + * nearest All operations read from among the nearest candidates, but unlike other modes, this option will include both the primary and all secondaries in the random selection. * - * assert(Array.isArray(docs)); - * console.log('documents with 0 tags', docs); - * }) + * Aliases * - * When called with one argument, the most recent path passed to `where()` is used. + * p primary + * pp primaryPreferred + * s secondary + * sp secondaryPreferred + * n nearest * - * @see $size http://docs.mongodb.org/manual/reference/operator/size/ - * @method size + * ####Example: + * + * new Query().read('primary') + * new Query().read('p') // same as primary + * + * new Query().read('primaryPreferred') + * new Query().read('pp') // same as primaryPreferred + * + * new Query().read('secondary') + * new Query().read('s') // same as secondary + * + * new Query().read('secondaryPreferred') + * new Query().read('sp') // same as secondaryPreferred + * + * new Query().read('nearest') + * new Query().read('n') // same as nearest + * + * // read from secondaries with matching tags + * new Query().read('s', [{ dc:'sf', s: 1 },{ dc:'ma', s: 2 }]) + * + * Read more about how to use read preferrences [here](http://docs.mongodb.org/manual/applications/replication/#read-preference) and [here](http://mongodb.github.com/node-mongodb-native/driver-articles/anintroductionto1_1and2_2.html#read-preferences). + * + * @method read * @memberOf Query - * @param {String} path - * @param {Number} val + * @param {String} pref one of the listed preference options or aliases + * @param {Array} [tags] optional tags for this query + * @see mongodb http://docs.mongodb.org/manual/applications/replication/#read-preference + * @see driver http://mongodb.github.com/node-mongodb-native/driver-articles/anintroductionto1_1and2_2.html#read-preferences + * @return {Query} this * @api public */ +Query.prototype.read = function read (pref, tags) { + // first cast into a ReadPreference object to support tags + var readPref = utils.readPref.apply(utils.readPref, arguments); + return Query.base.read.call(this, readPref); +} + /** - * Specifies a $regex query condition. + * Merges another Query or conditions object into this one. * - * When called with one argument, the most recent path passed to `where()` is used. + * When a Query is passed, conditions, field selection and options are merged. * - * @see $regex http://docs.mongodb.org/manual/reference/operator/regex/ - * @method regex + * New in 3.7.0 + * + * @method merge * @memberOf Query - * @param {String} path - * @param {Number} val - * @api public + * @param {Query|Object} source + * @return {Query} this */ /** - * Specifies a $maxDistance query condition. + * Sets query options. * - * When called with one argument, the most recent path passed to `where()` is used. + * ####Options: * - * @see $maxDistance http://docs.mongodb.org/manual/reference/operator/maxDistance/ - * @method maxDistance - * @memberOf Query - * @param {String} path - * @param {Number} val + * - [tailable](http://www.mongodb.org/display/DOCS/Tailable+Cursors) * + * - [sort](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bsort(\)%7D%7D) * + * - [limit](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Blimit%28%29%7D%7D) * + * - [skip](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bskip%28%29%7D%7D) * + * - [maxscan](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24maxScan) * + * - [batchSize](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7BbatchSize%28%29%7D%7D) * + * - [comment](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24comment) * + * - [snapshot](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Bsnapshot%28%29%7D%7D) * + * - [hint](http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24hint) * + * - [slaveOk](http://docs.mongodb.org/manual/applications/replication/#read-preference) * + * - [lean](./api.html#query_Query-lean) * + * - [safe](http://www.mongodb.org/display/DOCS/getLastError+Command) + * + * _* denotes a query helper method is also available_ + * + * @param {Object} options * @api public */ -/*! - * gt, gte, lt, lte, ne, in, nin, all, regex, size, maxDistance - * - * Thing.where('type').nin(array) - */ +Query.prototype.setOptions = function (options, overwrite) { + // overwrite is only for internal use + if (overwrite) { + // ensure that _mongooseOptions & options are two different objects + this._mongooseOptions = (options && utils.clone(options)) || {}; + this.options = options || {}; -'gt gte lt lte ne in nin all regex size maxDistance'.split(' ').forEach(function ($conditional) { - Query.prototype[$conditional] = function (path, val) { - if (arguments.length === 1) { - val = path; - path = this._currPath + if('populate' in options) { + this.populate(this._mongooseOptions); } - var conds = this._conditions[path] || (this._conditions[path] = {}); - conds['$' + $conditional] = val; return this; - }; -}); + } + + if (!(options && 'Object' == options.constructor.name)) { + return this; + } + + return Query.base.setOptions.call(this, options); +} /** - * Specifies a `$near` condition + * Returns fields selection for this query. * - * @param {String} path - * @param {Number} val - * @return {Query} this - * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing - * @see $near http://docs.mongodb.org/manual/reference/operator/near/ - * @api public + * @method _fieldsForExec + * @return {Object} + * @api private */ -Query.prototype.near = function (path, val) { - if (arguments.length === 1) { - val = path; - path = this._currPath - } else if (arguments.length === 2 && !Array.isArray(val)) { - val = utils.args(arguments); - path = this._currPath; - } else if (arguments.length === 3) { - val = utils.args(arguments, 1); - } - var conds = this._conditions[path] || (this._conditions[path] = {}); - conds.$near = val; - return this; -} +/** + * Return an update document with corrected $set operations. + * + * @method _updateForExec + * @api private + */ /** - * Specifies a `$nearSphere` condition. + * Makes sure _path is set. * - * @param {String} path - * @param {Object} val - * @return {Query} this - * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing - * @see $nearSphere http://docs.mongodb.org/manual/reference/operator/nearSphere/ - * @api public + * @method _ensurePath + * @param {String} method + * @api private */ -Query.prototype.nearSphere = function (path, val) { - if (arguments.length === 1) { - val = path; - path = this._currPath - } else if (arguments.length === 2 && !Array.isArray(val)) { - val = utils.args(arguments); - path = this._currPath; - } else if (arguments.length === 3) { - val = utils.args(arguments, 1); - } - var conds = this._conditions[path] || (this._conditions[path] = {}); - conds.$nearSphere = val; - return this; -} +/** + * Determines if `conds` can be merged using `mquery().merge()` + * + * @method canMerge + * @memberOf Query + * @param {Object} conds + * @return {Boolean} + * @api private + */ /** - * Specifies a `$mod` condition + * Returns default options for this query. * - * @param {String} path - * @param {Number} val - * @return {Query} this - * @see $mod http://docs.mongodb.org/manual/reference/operator/mod/ - * @api public + * @param {Model} model + * @api private */ -Query.prototype.mod = function (path, val) { - if (arguments.length === 1) { - val = path; - path = this._currPath - } else if (arguments.length === 2 && !Array.isArray(val)) { - val = utils.args(arguments); - path = this._currPath; - } else if (arguments.length === 3) { - val = utils.args(arguments, 1); +Query.prototype._optionsForExec = function (model) { + var options = Query.base._optionsForExec.call(this); + + delete options.populate; + model = model || this.model; + + if (!model) { + return options; + } else { + if (!('safe' in options) && model.schema.options.safe) { + options.safe = model.schema.options.safe; + } + + if (!('readPreference' in options) && model.schema.options.read) { + options.readPreference = model.schema.options.read; + } + + return options; } - var conds = this._conditions[path] || (this._conditions[path] = {}); - conds.$mod = val; - return this; -} +}; /** - * Specifies an `$exists` condition + * Sets the lean option. * - * @param {String} path - * @param {Number} val + * Documents returned from queries with the `lean` option enabled are plain javascript objects, not [MongooseDocuments](#document-js). They have no `save` method, getters/setters or other Mongoose magic applied. + * + * ####Example: + * + * new Query().lean() // true + * new Query().lean(true) + * new Query().lean(false) + * + * Model.find().lean().exec(function (err, docs) { + * docs[0] instanceof mongoose.Document // false + * }); + * + * This is a [great](https://groups.google.com/forum/#!topic/mongoose-orm/u2_DzDydcnA/discussion) option in high-performance read-only scenarios, especially when combined with [stream](#query_Query-stream). + * + * @param {Boolean} bool defaults to true * @return {Query} this - * @see $exists http://docs.mongodb.org/manual/reference/operator/exists/ * @api public */ -Query.prototype.exists = function (path, val) { - if (arguments.length === 0) { - path = this._currPath - val = true; - } else if (arguments.length === 1) { - if ('boolean' === typeof path) { - val = path; - path = this._currPath; - } else { - val = true; - } - } - var conds = this._conditions[path] || (this._conditions[path] = {}); - conds['$exists'] = val; +Query.prototype.lean = function (v) { + this._mongooseOptions.lean = arguments.length ? !!v : true; return this; -}; +} /** - * Specifies an `$elemMatch` condition - * - * ####Example - * - * query.elemMatch('comment', { author: 'autobot', votes: {$gte: 5}}) + * Finds documents. * - * query.where('comment').elemMatch({ author: 'autobot', votes: {$gte: 5}}) + * When no `callback` is passed, the query is not executed. * - * query.elemMatch('comment', function (elem) { - * elem.where('author').equals('autobot'); - * elem.where('votes').gte(5); - * }) + * ####Example * - * query.where('comment').elemMatch(function (elem) { - * elem.where('author').equals('autobot'); - * elem.where('votes').gte(5); - * }) + * query.find({ name: 'Los Pollos Hermanos' }).find(callback) * - * @param {String|Object|Function} path - * @param {Object|Function} criteria + * @param {Object} [criteria] mongodb selector + * @param {Function} [callback] * @return {Query} this - * @see $elemMatch http://docs.mongodb.org/manual/reference/operator/elemMatch/ * @api public */ -Query.prototype.elemMatch = function (path, criteria) { - var block; - if ('Object' === path.constructor.name) { - criteria = path; - path = this._currPath; - } else if ('function' === typeof path) { - block = path; - path = this._currPath; - } else if ('Object' === criteria.constructor.name) { - } else if ('function' === typeof criteria) { - block = criteria; - } else { - throw new Error("Argument error"); +Query.prototype.find = function (conditions, callback) { + if ('function' == typeof conditions) { + callback = conditions; + conditions = {}; + } else if (conditions instanceof Document) { + conditions = conditions.toObject(); } - var conds = this._conditions[path] || (this._conditions[path] = {}); - if (block) { - criteria = new Query(); - block(criteria); - conds['$elemMatch'] = criteria._conditions; - } else { - conds['$elemMatch'] = criteria; + + if (mquery.canMerge(conditions)) { + this.merge(conditions); } - return this; -}; -// Spatial queries + prepareDiscriminatorCriteria(this); + + try { + this.cast(this.model); + this._castError = null; + } catch (err) { + this._castError = err; + } + + // if we don't have a callback, then just return the query object + if (!callback) { + return Query.base.find.call(this); + } + + var promise = new Promise(callback); + if (this._castError) { + promise.error(this._castError); + return this; + } + + this._applyPaths(); + this._fields = this._castFields(this._fields); + + var fields = this._fieldsForExec(); + var options = this._mongooseOptions; + var self = this; + + return Query.base.find.call(this, {}, cb); + + function cb(err, docs) { + if (err) return promise.error(err); + + if (0 === docs.length) { + return promise.complete(docs); + } + + if (!options.populate) { + return true === options.lean + ? promise.complete(docs) + : completeMany(self.model, docs, fields, self, null, promise); + } + + + var pop = helpers.preparePopulationOptionsMQ(self, options); + self.model.populate(docs, pop, function (err, docs) { + if(err) return promise.error(err); + return true === options.lean + ? promise.complete(docs) + : completeMany(self.model, docs, fields, self, pop, promise); + }); + } +} + +/*! + * hydrates many documents + * + * @param {Model} model + * @param {Array} docs + * @param {Object} fields + * @param {Query} self + * @param {Array} [pop] array of paths used in population + * @param {Promise} promise + */ + +function completeMany (model, docs, fields, self, pop, promise) { + var arr = []; + var count = docs.length; + var len = count; + var opts = pop ? + { populated: pop } + : undefined; + for (var i=0; i < len; ++i) { + arr[i] = helpers.createModel(model, docs[i], fields); + arr[i].init(docs[i], opts, function (err) { + if (err) return promise.error(err); + --count || promise.complete(arr); + }); + } +} /** - * Defines a $within query for `box()`, `center()`, etc + * Declares the query a findOne operation. When executed, the first found document is passed to the callback. + * + * Passing a `callback` executes the query. * * ####Example * - * query.within.box() - * query.within.center() - * query.within.geometry() + * var query = Kitten.where({ color: 'white' }); + * query.findOne(function (err, kitten) { + * if (err) return handleError(err); + * if (kitten) { + * // doc may be null if no document matched + * } + * }); * - * @property within - * @memberOf Query - * @see Query#box #query_Query-box - * @see Query#center #query_Query-center - * @see Query#centerSphere #query_Query-centerSphere - * @see Query#polygon #query_Query-polygon - * @see Query#geometry #query_Query-geometry - * @see $geoWithin http://docs.mongodb.org/manual/reference/operator/within/ + * @param {Object|Query} [criteria] mongodb selector + * @param {Function} [callback] * @return {Query} this + * @see findOne http://docs.mongodb.org/manual/reference/method/db.collection.findOne/ * @api public */ -Object.defineProperty(Query.prototype, 'within', { - get: function () { - this._geoComparison = '$within'; - return this +Query.prototype.findOne = function (conditions, fields, options, callback) { + if ('function' == typeof conditions) { + callback = conditions; + conditions = null; + fields = null; + options = null; } -}); -/** - * Declares an intersects query for `geometry()`. - * - * ####Example - * - * query.intersects.geometry({ - * type: 'LineString' - * , coordinates: [[180.0, 11.0], [180, 9.0]] - * }) - * - * @property intersects - * @see Query#geometry #query_Query-geometry - * @see $geometry http://docs.mongodb.org/manual/reference/operator/geometry/ - * @see geoIntersects http://docs.mongodb.org/manual/reference/operator/geoIntersects/ - * @memberOf Query - * @return {Query} this - * @api public - */ + if ('function' == typeof fields) { + callback = fields; + options = null; + fields = null; + } -Object.defineProperty(Query.prototype, 'intersects', { - get: function () { - this._geoComparison = '$geoIntersects'; - return this + if ('function' == typeof options) { + callback = options; + options = null; } -}); -/** - * Specifies a $box condition - * - * ####Example - * - * var lowerLeft = [40.73083, -73.99756] - * var upperRight= [40.741404, -73.988135] - * query.where('loc').within.box({ ll: lowerLeft , ur: upperRight }) - * - * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing - * @see Query#within #query_Query-within - * @see $box http://docs.mongodb.org/manual/reference/operator/box/ - * @param {String} path - * @param {Object} val - * @return {Query} this - * @api public - */ + // make sure we don't send in the whole Document to merge() + if (conditions instanceof Document) { + conditions = conditions.toObject(); + } -Query.prototype.box = function (path, val) { - if (arguments.length === 1) { - val = path; - path = this._currPath; + if (options) { + this.setOptions(options); } - var conds = this._conditions[path] || (this._conditions[path] = {}); - conds['$within'] = { '$box': [val.ll, val.ur] }; - return this; -}; -/** - * Specifies a $center condition - * - * ####Example - * - * var area = { center: [50, 50], radius: 10 } - * query.where('loc').within.center(area) - * - * @param {String} path - * @param {Object} val - * @param {Object} [opts] options e.g. { $uniqueDocs: true } - * @return {Query} this - * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing - * @see $center http://docs.mongodb.org/manual/reference/operator/center/ - * @api public - */ + if (fields) { + this.select(fields); + } -Query.prototype.center = function (path, val, opts) { - if (arguments.length === 1) { - val = path; - path = this._currPath; + if (mquery.canMerge(conditions)) { + this.merge(conditions); } - var conds = this._conditions[path] || (this._conditions[path] = {}); - conds['$within'] = { '$center': [val.center, val.radius] }; - // copy any options - if (opts && 'Object' == opts.constructor.name) { - utils.options(opts, conds.$within); + prepareDiscriminatorCriteria(this); + + try { + this.cast(this.model); + this._castError = null; + } catch (err) { + this._castError = err; } - return this; -}; + if (!callback) { + // already merged in the conditions, don't need to send them in. + return Query.base.findOne.call(this); + } -/** - * Specifies a $centerSphere condition - * - * ####Example - * - * var area = { center: [50, 50], radius: 10 } - * query.where('loc').within.centerSphere(area) - * - * @param {String} [path] - * @param {Object} val - * @return {Query} this - * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing - * @see $centerSphere http://docs.mongodb.org/manual/reference/operator/centerSphere/ - * @api public - */ + var promise = new Promise(callback); -Query.prototype.centerSphere = function (path, val) { - if (arguments.length === 1) { - val = path; - path = this._currPath; + if (this._castError) { + promise.error(this._castError); + return this; } - var conds = this._conditions[path] || (this._conditions[path] = {}); - conds['$within'] = { '$centerSphere': [val.center, val.radius] }; + + this._applyPaths(); + this._fields = this._castFields(this._fields); + + var options = this._mongooseOptions; + var fields = this._fieldsForExec(); + var self = this; + + // don't pass in the conditions because we already merged them in + Query.base.findOne.call(this, {}, function cb (err, doc) { + if (err) return promise.error(err); + if (!doc) return promise.complete(null); + + if (!options.populate) { + return true === options.lean + ? promise.complete(doc) + : completeOne(self.model, doc, fields, self, null, promise); + } + + var pop = helpers.preparePopulationOptionsMQ(self, options); + self.model.populate(doc, pop, function (err, doc) { + if (err) return promise.error(err); + + return true === options.lean + ? promise.complete(doc) + : completeOne(self.model, doc, fields, self, pop, promise); + }); + }) + return this; -}; +} /** - * Specifies a $polygon condition + * Specifying this query as a `count` query. * - * ####Example + * Passing a `callback` executes the query. + * + * ####Example: * - * var polyA = [ [ 10, 20 ], [ 10, 40 ], [ 30, 40 ], [ 30, 20 ] ] - * query.where('loc').within.polygon(polyA) + * var countQuery = model.where({ 'color': 'black' }).count(); * - * // or - * var polyB = { a : { x : 10, y : 20 }, b : { x : 15, y : 25 }, c : { x : 20, y : 20 } } - * query.where('loc').within.polygon(polyB) + * query.count({ color: 'black' }).count(callback) * - * @param {String} [path] - * @param {Array|Object} val + * query.count({ color: 'black' }, callback) + * + * query.where('color', 'black').count(function (err, count) { + * if (err) return handleError(err); + * console.log('there are %d kittens', count); + * }) + * + * @param {Object} [criteria] mongodb selector + * @param {Function} [callback] * @return {Query} this - * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing - * @see $polygon http://docs.mongodb.org/manual/reference/operator/polygon/ + * @see count http://docs.mongodb.org/manual/reference/method/db.collection.count/ * @api public */ -Query.prototype.polygon = function (path, val) { - if (arguments.length === 1) { - val = path; - path = this._currPath; +Query.prototype.count = function (conditions, callback) { + if ('function' == typeof conditions) { + callback = conditions; + conditions = undefined; + } + + if (mquery.canMerge(conditions)) { + this.merge(conditions); + } + + try { + this.cast(this.model); + } catch (err) { + callback(err); + return this; } - var conds = this._conditions[path] || (this._conditions[path] = {}); - conds['$within'] = { '$polygon': val }; - return this; -}; + + return Query.base.count.call(this, {}, callback); +} /** - * Specifies a $geometry condition - * - * ####Example - * - * var polyA = [[[ 10, 20 ], [ 10, 40 ], [ 30, 40 ], [ 30, 20 ]]] - * query.where('loc').within.geometry({ type: 'Polygon', coordinates: polyA }) - * - * // or - * var polyB = [[ 0, 0 ], [ 1, 1 ]] - * query.where('loc').within.geometry({ type: 'LineString', coordinates: polyB }) - * - * // or - * var polyC = [ 0, 0 ] - * query.where('loc').within.geometry({ type: 'Point', coordinates: polyC }) - * - * // or - * var polyC = [ 0, 0 ] - * query.where('loc').intersects.geometry({ type: 'Point', coordinates: polyC }) - * - * ####NOTE: + * Declares or executes a distict() operation. * - * `geometry()` **must** come after either `intersects` or `within`. + * Passing a `callback` executes the query. * - * The `object` argument must contain `type` and `coordinates` properties. - * - type {String} - * - coordinates {Array} + * ####Example * - * When called with one argument, the most recent path passed to `where()` is used. + * distinct(criteria, field, fn) + * distinct(criteria, field) + * distinct(field, fn) + * distinct(field) + * distinct(fn) + * distinct() * - * @param {String} [path] Optional name of a path to match against - * @param {Object} object Must contain a `type` property which is a String and a `coordinates` property which is an Array. See the example. + * @param {Object|Query} [criteria] + * @param {String} [field] + * @param {Function} [callback] * @return {Query} this - * @see http://docs.mongodb.org/manual/release-notes/2.4/#new-geospatial-indexes-with-geojson-and-improved-spherical-geometry - * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing - * @see $geometry http://docs.mongodb.org/manual/reference/operator/geometry/ + * @see distinct http://docs.mongodb.org/manual/reference/method/db.collection.distinct/ * @api public */ -Query.prototype.geometry = function (path, val) { - if (arguments.length === 1) { - val = path; - path = this._currPath; +Query.prototype.distinct = function (conditions, field, callback) { + if (!callback) { + if('function' == typeof field) { + callback = field; + if ('string' == typeof conditions) { + field = conditions; + conditions = undefined; + } + } + + switch (typeof conditions) { + case 'string': + field = conditions; + conditions = undefined; + break; + case 'function': + callback = conditions; + field = undefined; + conditions = undefined; + break; + } } - var conds = this._conditions[path] || (this._conditions[path] = {}); + if (conditions instanceof Document) { + conditions = conditions.toObject(); + } - if (!this._geoComparison) { - throw new Error('query.geometry() must come after either `within` or `intersects`'); + if (mquery.canMerge(conditions)) { + this.merge(conditions) } - conds[this._geoComparison] = { $geometry: val }; - return this; -}; + try { + this.cast(this.model); + } catch (err) { + callback(err); + return this; + } + + return Query.base.distinct.call(this, {}, field, callback); +} /** - * Specifies which document fields to include or exclude + * Sets the sort order * - * When using string syntax, prefixing a path with `-` will flag that path as excluded. When a path does not have the `-` prefix, it is included. Lastly, if a path is prefixed with `+`, it forces inclusion of the path, which is useful for paths excluded at the [schema level](/docs/api.html#schematype_SchemaType-select). + * If an object is passed, values allowed are `asc`, `desc`, `ascending`, `descending`, `1`, and `-1`. * - * ####Example + * If a string is passed, it must be a space delimited list of path names. The + * sort order of each path is ascending unless the path name is prefixed with `-` + * which will be treated as descending. * - * // include a and b, exclude c - * query.select('a b -c'); + * ####Example * - * // or you may use object notation, useful when - * // you have keys already prefixed with a "-" - * query.select({a: 1, b: 1, c: 0}); + * // sort by "field" ascending and "test" descending + * query.sort({ field: 'asc', test: -1 }); * - * // force inclusion of field excluded at schema level - * query.select('+path') + * // equivalent + * query.sort('field -test'); * - * ####NOTE: + * ####Note * - * _v2 had slightly different syntax such as allowing arrays of field names. This support was removed in v3._ + * Cannot be used with `distinct()` * * @param {Object|String} arg * @return {Query} this - * @see SchemaType + * @see cursor.sort http://docs.mongodb.org/manual/reference/method/cursor.sort/ * @api public */ -Query.prototype.select = function select (arg) { - if (!arg) return this; +Query.prototype.sort = function (arg) { + var nArg = {}; + + if (arguments.length > 1) { + throw new Error("sort() only takes 1 Argument"); + } - var fields = this._fields || (this._fields = {}); + if (Array.isArray(arg)) { + // time to deal with the terrible syntax + for (var i=0; i < arg.length; i++) { + if (!Array.isArray(arg[i])) throw new Error("Invalid sort() argument."); + nArg[arg[i][0]] = arg[i][1]; + } - if ('Object' === arg.constructor.name) { - Object.keys(arg).forEach(function (field) { - fields[field] = arg[field]; - }); - } else if (1 === arguments.length && 'string' == typeof arg) { - arg.split(/\s+/).forEach(function (field) { - if (!field) return; - var include = '-' == field[0] ? 0 : 1; - if (include === 0) field = field.substring(1); - fields[field] = include; - }); } else { - throw new TypeError('Invalid select() argument. Must be a string or object.'); + nArg = arg; } - return this; -}; + return Query.base.sort.call(this, nArg); +} /** - * Specifies a $slice projection for an array. + * Declare and/or execute this query as a remove() operation. * * ####Example * - * query.slice('comments', 5) - * query.slice('comments', -5) - * query.slice('comments', [10, 5]) - * query.where('comments').slice(5) - * query.where('comments').slice([-10, 5]) + * Model.remove({ artist: 'Anne Murray' }, callback) * - * @param {String} path - * @param {Number} val number of elements to slice - * @return {Query} this - * @see mongodb http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-RetrievingaSubrangeofArrayElements - * @see $slice http://docs.mongodb.org/manual/reference/projection/slice/#prj._S_slice - * @api public - */ - -Query.prototype.slice = function (path, val) { - if (arguments.length === 1) { - val = path; - path = this._currPath - } else if (arguments.length === 2) { - if ('number' === typeof path) { - val = [path, val]; - path = this._currPath; - } - } else if (arguments.length === 3) { - val = utils.args(arguments, 1); - } - var myFields = this._fields || (this._fields = {}); - myFields[path] = { '$slice': val }; - return this; -}; - -/** - * Sets the sort order + * ####Note * - * If an object is passed, values allowed are `asc`, `desc`, `ascending`, `descending`, `1`, and `-1`. + * The operation is only executed when a callback is passed. To force execution without a callback (which would be an unsafe write), we must first call remove() and then execute it by using the `exec()` method. * - * If a string is passed, it must be a space delimited list of path names. The sort order of each path is ascending unless the path name is prefixed with `-` which will be treated as descending. + * // not executed + * var query = Model.find().remove({ name: 'Anne Murray' }) * - * ####Example + * // executed + * query.remove({ name: 'Anne Murray' }, callback) + * query.remove({ name: 'Anne Murray' }).remove(callback) * - * // sort by "field" ascending and "test" descending - * query.sort({ field: 'asc', test: -1 }); + * // executed without a callback (unsafe write) + * query.exec() * - * // equivalent - * query.sort('field -test'); + * // summary + * query.remove(conds, fn); // executes + * query.remove(conds) + * query.remove(fn) // executes + * query.remove() * - * @param {Object|String} arg + * @param {Object|Query} [criteria] mongodb selector + * @param {Function} [callback] * @return {Query} this - * @see cursor.sort http://docs.mongodb.org/manual/reference/method/cursor.sort/ + * @see remove http://docs.mongodb.org/manual/reference/method/db.collection.remove/ * @api public */ -Query.prototype.sort = function (arg) { - if (!arg) return this; +Query.prototype.remove = function (cond, callback) { + if ('function' == typeof cond) { + callback = cond; + cond = null; + } + + var cb = 'function' == typeof callback; + + try { + this.cast(this.model); + } catch (err) { + if (cb) return process.nextTick(callback.bind(null, err)); + return this; + } + + return Query.base.remove.call(this, cond, callback); +} - var sort = this.options.sort || (this.options.sort = []); +/*! + * hydrates a document + * + * @param {Model} model + * @param {Document} doc + * @param {Object} fields + * @param {Query} self + * @param {Array} [pop] array of paths used in population + * @param {Promise} promise + */ - if ('Object' === arg.constructor.name) { - Object.keys(arg).forEach(function (field) { - push(sort, field, arg[field]); - }); - } else if (1 === arguments.length && 'string' == typeof arg) { - arg.split(/\s+/).forEach(function (field) { - if (!field) return; - var ascend = '-' == field[0] ? -1 : 1; - if (ascend === -1) field = field.substring(1); - push(sort, field, ascend); - }); - } else { - throw new TypeError('Invalid sort() argument. Must be a string or object.'); - } +function completeOne (model, doc, fields, self, pop, promise) { + var opts = pop ? + { populated: pop } + : undefined; - return this; -}; + var casted = helpers.createModel(model, doc, fields) + casted.init(doc, opts, function (err) { + if (err) return promise.error(err); + promise.complete(casted); + }); +} /*! - * @ignore + * If the model is a discriminator type and not root, then add the key & value to the criteria. */ -function push (arr, field, value) { - var val = String(value || 1).toLowerCase(); - if (!/^(?:ascending|asc|descending|desc|1|-1)$/.test(val)) { - if (Array.isArray(value)) value = '['+value+']'; - throw new TypeError('Invalid sort value: {' + field + ': ' + value + ' }'); +function prepareDiscriminatorCriteria(query) { + if (!query || !query.model || !query.model.schema) { + return; + } + + var schema = query.model.schema; + + if (schema && schema.discriminatorMapping && !schema.discriminatorMapping.isRoot) { + query._conditions[schema.discriminatorMapping.key] = schema.discriminatorMapping.value; } - arr.push([field, value]); } /** - * Specifies the maximum number of documents the query will return. + * Issues a mongodb [findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command) update command. * - * ####Example + * Finds a matching document, updates it according to the `update` arg, passing any `options`, and returns the found document (if any) to the callback. The query executes immediately if `callback` is passed. * - * Kitten.find().limit(20).exec(callback) + * ####Available options * - * @method limit - * @memberOf Query - * @param {Number} val - * @api public - */ -/** - * Specifies the number of documents to skip. + * - `new`: bool - true to return the modified document rather than the original. defaults to true + * - `upsert`: bool - creates the object if it doesn't exist. defaults to false. + * - `sort`: if multiple docs are found by the conditions, sets the sort order to choose which doc to update * - * ####Example + * ####Examples * - * Kitten.find().skip(100).limit(20) + * query.findOneAndUpdate(conditions, update, options, callback) // executes + * query.findOneAndUpdate(conditions, update, options) // returns Query + * query.findOneAndUpdate(conditions, update, callback) // executes + * query.findOneAndUpdate(conditions, update) // returns Query + * query.findOneAndUpdate(update, callback) // returns Query + * query.findOneAndUpdate(update) // returns Query + * query.findOneAndUpdate(callback) // executes + * query.findOneAndUpdate() // returns Query * - * @method skip + * @method findOneAndUpdate * @memberOf Query - * @param {Number} val - * @see cursor.skip http://docs.mongodb.org/manual/reference/method/cursor.skip/ + * @param {Object|Query} [query] + * @param {Object} [doc] + * @param {Object} [options] + * @param {Function} [callback] + * @see mongodb http://www.mongodb.org/display/DOCS/findAndModify+Command + * @return {Query} this * @api public */ + /** - * Specifies the maxscan option. + * Issues a mongodb [findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command) remove command. * - * ####Example + * Finds a matching document, removes it, passing the found document (if any) to the callback. Executes immediately if `callback` is passed. * - * Kitten.find().maxscan(100) + * ####Available options * - * @method maxscan - * @memberOf Query - * @param {Number} val - * @see maxScan http://docs.mongodb.org/manual/reference/operator/maxScan/ - * @api public - */ -/** - * Specifies the batchSize option. + * - `sort`: if multiple docs are found by the conditions, sets the sort order to choose which doc to update * - * ####Example + * ####Examples * - * Kitten.find().batchSize(100) + * A.where().findOneAndRemove(conditions, options, callback) // executes + * A.where().findOneAndRemove(conditions, options) // return Query + * A.where().findOneAndRemove(conditions, callback) // executes + * A.where().findOneAndRemove(conditions) // returns Query + * A.where().findOneAndRemove(callback) // executes + * A.where().findOneAndRemove() // returns Query * - * @method batchSize + * @method findOneAndRemove * @memberOf Query - * @param {Number} val - * @see batchSize http://docs.mongodb.org/manual/reference/method/cursor.batchSize/ + * @param {Object} [conditions] + * @param {Object} [options] + * @param {Function} [callback] + * @return {Query} this + * @see mongodb http://www.mongodb.org/display/DOCS/findAndModify+Command * @api public */ + /** - * Specifies the `comment` option. - * - * ####Example - * - * Kitten.findOne(condition).comment('login query') + * Override mquery.prototype._findAndModify to provide casting etc. * - * @method comment - * @memberOf Query - * @param {Number} val - * @see comment http://docs.mongodb.org/manual/reference/operator/comment/ - * @api public + * @param {String} type - either "remove" or "update" + * @param {Function} callback + * @api private */ -/*! - * limit, skip, maxscan, batchSize, comment - * - * Sets these associated options. - * - * query.comment('feed query'); - */ +Query.prototype._findAndModify = function (type, callback) { + if ('function' != typeof callback) { + throw new Error("Expected callback in _findAndModify"); + } -;['limit', 'skip', 'maxscan', 'batchSize', 'comment'].forEach(function (method) { - Query.prototype[method] = function (v) { - this.options[method] = v; - return this; - }; -}); + var model = this.model + , promise = new Promise(callback) + , self = this + , castedQuery + , castedDoc + , fields + , opts; -/** - * Specifies this query as a `snapshot` query. - * - * ####Example - * - * Kitten.find().snapshot() - * - * @see snapshot http://docs.mongodb.org/manual/reference/operator/snapshot/ - * @return {Query} this - * @api public - */ + castedQuery = castQuery(this); + if (castedQuery instanceof Error) { + process.nextTick(promise.error.bind(promise, castedQuery)); + return promise; + } -Query.prototype.snapshot = function () { - this.options.snapshot = true; - return this; -}; + opts = this._optionsForExec(model); -/** - * Sets query hints. - * - * ####Example - * - * Model.find().hint({ indexA: 1, indexB: -1}) - * - * @param {Object} val a hint object - * @return {Query} this - * @see $hint http://docs.mongodb.org/manual/reference/operator/hint/ - * @api public - */ + if ('remove' == type) { + opts.remove = true; + } else { + if (!('new' in opts)) opts.new = true; + if (!('upsert' in opts)) opts.upsert = false; + + castedDoc = castDoc(this, opts.overwrite); + if (!castedDoc) { + if (opts.upsert) { + // still need to do the upsert to empty doc + var doc = utils.clone(castedQuery); + delete doc._id; + castedDoc = { $set: doc }; + } else { + return this.findOne(callback); + } + } else if (castedDoc instanceof Error) { + process.nextTick(promise.error.bind(promise, castedDoc)); + return promise; + } else { + // In order to make MongoDB 2.6 happy (see + // https://jira.mongodb.org/browse/SERVER-12266 and related issues) + // if we have an actual update document but $set is empty, junk the $set. + if (castedDoc.$set && Object.keys(castedDoc.$set).length === 0) { + delete castedDoc.$set; + } + } + } -Query.prototype.hint = function (val) { - if (!val) return this; + this._applyPaths(); - var hint = this.options.hint || (this.options.hint = {}); + var self = this; + var options = this._mongooseOptions; - if ('Object' === val.constructor.name) { - // must keep object keys in order so don't use Object.keys() - for (var k in val) { - hint[k] = val[k]; + if (this._fields) { + fields = utils.clone(this._fields); + opts.fields = this._castFields(fields); + if (opts.fields instanceof Error) { + process.nextTick(promise.error.bind(promise, opts.fields)); + return promise; } - } else { - throw new TypeError('Invalid hint. ' + val); } - return this; -}; + if (opts.sort) convertSortToArray(opts); + + this._collection.findAndModify(castedQuery, castedDoc, opts, utils.tick(cb)); + function cb (err, doc) { + if (err) return promise.error(err); + + if (!doc || (utils.isObject(doc) && Object.keys(doc).length === 0)) { + return promise.complete(null); + } + + if (!options.populate) { + return true === options.lean + ? promise.complete(doc) + : completeOne(self.model, doc, fields, self, null, promise); + } + + var pop = helpers.preparePopulationOptionsMQ(self, options); + self.model.populate(doc, pop, function (err, doc) { + if (err) return promise.error(err); + + return true === options.lean + ? promise.complete(doc) + : completeOne(self.model, doc, fields, self, pop, promise); + }); + } + + return promise; +} /** - * Sets the slaveOk option. _Deprecated_ in MongoDB 2.2 in favor of [read preferences](#query_Query-read). + * Override mquery.prototype._mergeUpdate to handle mongoose objects in + * updates. * - * ####Example: - * - * new Query().slaveOk() // true - * new Query().slaveOk(true) - * new Query().slaveOk(false) - * - * @param {Boolean} v defaults to true - * @see mongodb http://docs.mongodb.org/manual/applications/replication/#read-preference - * @see slaveOk http://docs.mongodb.org/manual/reference/method/rs.slaveOk/ - * @return {Query} this - * @api public + * @param {Object} doc + * @api private */ -Query.prototype.slaveOk = function (v) { - this.options.slaveOk = arguments.length ? !!v : true; - return this; +Query.prototype._mergeUpdate = function(doc) { + if (!this._update) this._update = {}; + if (doc instanceof Query) { + if (doc._update) { + utils.mergeClone(this._update, doc._update); + } + } else { + utils.mergeClone(this._update, doc); + } +}; + +/*! + * The mongodb driver 1.3.23 only supports the nested array sort + * syntax. We must convert it or sorting findAndModify will not work. + */ + +function convertSortToArray (opts) { + if (Array.isArray(opts.sort)) return; + if (!utils.isObject(opts.sort)) return; + + var sort = []; + + for (var key in opts.sort) if (utils.object.hasOwnProperty(opts.sort, key)) { + sort.push([ key, opts.sort[key] ]); + } + + opts.sort = sort; } /** - * Determines the MongoDB nodes from which to read. + * Declare and/or execute this query as an update() operation. * - * ####Preferences: + * _All paths passed that are not $atomic operations will become $set ops._ * - * primary - (default) Read from primary only. Operations will produce an error if primary is unavailable. Cannot be combined with tags. - * secondary Read from secondary if available, otherwise error. - * primaryPreferred Read from primary if available, otherwise a secondary. - * secondaryPreferred Read from a secondary if available, otherwise read from the primary. - * nearest All operations read from among the nearest candidates, but unlike other modes, this option will include both the primary and all secondaries in the selection. + * ####Example * - * Aliases + * Model.where({ _id: id }).update({ title: 'words' }) * - * p primary - * pp primaryPreferred - * s secondary - * sp secondaryPreferred - * n nearest + * // becomes * - * ####Example: + * Model.where({ _id: id }).update({ $set: { title: 'words' }}) * - * new Query().read('primary') - * new Query().read('p') // same as primary + * ####Note * - * new Query().read('primaryPreferred') - * new Query().read('pp') // same as primaryPreferred + * Passing an empty object `{}` as the doc will result in a no-op unless the `overwrite` option is passed. Without the `overwrite` option set, the update operation will be ignored and the callback executed without sending the command to MongoDB so as to prevent accidently overwritting documents in the collection. * - * new Query().read('secondary') - * new Query().read('s') // same as secondary + * ####Note * - * new Query().read('secondaryPreferred') - * new Query().read('sp') // same as secondaryPreferred + * The operation is only executed when a callback is passed. To force execution without a callback (which would be an unsafe write), we must first call update() and then execute it by using the `exec()` method. * - * new Query().read('nearest') - * new Query().read('n') // same as nearest + * var q = Model.where({ _id: id }); + * q.update({ $set: { name: 'bob' }}).update(); // not executed * - * // read from secondaries with matching tags - * new Query().read('secondary', [{ dc:'sf', s: 1 },{ dc:'ma', s: 2 }]) + * q.update({ $set: { name: 'bob' }}).exec(); // executed as unsafe * - * Read more about how to use read preferrences [here](http://docs.mongodb.org/manual/applications/replication/#read-preference) and [here](http://mongodb.github.com/node-mongodb-native/driver-articles/anintroductionto1_1and2_2.html#read-preferences). + * // keys that are not $atomic ops become $set. + * // this executes the same command as the previous example. + * q.update({ name: 'bob' }).exec(); * - * @param {String} pref one of the listed preference options or aliases - * @param {Array} [tags] optional tags for this query - * @see mongodb http://docs.mongodb.org/manual/applications/replication/#read-preference - * @see driver http://mongodb.github.com/node-mongodb-native/driver-articles/anintroductionto1_1and2_2.html#read-preferences - * @return {Query} this - * @api public - */ - -Query.prototype.read = function (pref, tags) { - this.options.readPreference = utils.readPref(pref, tags); - return this; -} - -/** - * Sets the lean option. + * // overwriting with empty docs + * var q = Model.where({ _id: id }).setOptions({ overwrite: true }) + * q.update({ }, callback); // executes * - * Documents returned from queries with the `lean` option enabled are plain javascript objects, not [MongooseDocuments](#document-js). They have no `save` method, getters/setters or other Mongoose magic applied. + * // multi update with overwrite to empty doc + * var q = Model.where({ _id: id }); + * q.setOptions({ multi: true, overwrite: true }) + * q.update({ }); + * q.update(callback); // executed * - * ####Example: + * // multi updates + * Model.where() + * .update({ name: /^match/ }, { $set: { arr: [] }}, { multi: true }, callback) + * + * // more multi updates + * Model.where() + * .setOptions({ multi: true }) + * .update({ $set: { arr: [] }}, callback) * - * new Query().lean() // true - * new Query().lean(true) - * new Query().lean(false) + * // single update by default + * Model.where({ email: 'address@example.com' }) + * .update({ $inc: { counter: 1 }}, callback) * - * Model.find().lean().exec(function (err, docs) { - * docs[0] instanceof mongoose.Document // false - * }); + * API summary * - * This is a [great](https://groups.google.com/forum/#!topic/mongoose-orm/u2_DzDydcnA/discussion) option in high-performance read-only scenarios, especially when combined with [stream](#query_Query-stream). + * update(criteria, doc, options, cb) // executes + * update(criteria, doc, options) + * update(criteria, doc, cb) // executes + * update(criteria, doc) + * update(doc, cb) // executes + * update(doc) + * update(cb) // executes + * update(true) // executes (unsafe write) + * update() * - * @param {Boolean} bool defaults to true + * @param {Object} [criteria] + * @param {Object} [doc] the update command + * @param {Object} [options] + * @param {Function} [callback] * @return {Query} this + * @see Model.update #model_Model.update + * @see update http://docs.mongodb.org/manual/reference/method/db.collection.update/ * @api public */ -Query.prototype.lean = function (v) { - this.options.lean = arguments.length ? !!v : true; - return this; +Query.prototype.update = function (conditions, doc, options, callback) { + if ('function' === typeof options) { + // Scenario: update(conditions, doc, callback) + callback = options; + options = null; + } else if ('function' === typeof doc) { + // Scenario: update(doc, callback); + callback = doc; + doc = conditions; + conditions = {}; + options = null; + } else if ('function' === typeof conditions) { + callback = conditions; + conditions = undefined; + doc = undefined; + options = undefined; + } + + // make sure we don't send in the whole Document to merge() + if (conditions instanceof Document) { + conditions = conditions.toObject(); + } + + // strict is an option used in the update checking, make sure it gets set + if (options) { + if ('strict' in options) { + this._mongooseOptions.strict = options.strict; + } + } + + // if doc is undefined at this point, this means this function is being + // executed by exec(not always see below). Grab the update doc from here in + // order to validate + // This could also be somebody calling update() or update({}). Probably not a + // common use case, check for _update to make sure we don't do anything bad + if (!doc && this._update) { + doc = this._updateForExec(); + } + + if (mquery.canMerge(conditions)) { + this.merge(conditions); + } + + // validate the selector part of the query + var castedQuery = castQuery(this); + if (castedQuery instanceof Error) { + if(callback) { + callback(castedQuery); + return this; + } else { + throw castedQuery; + } + } + + // validate the update part of the query + var castedDoc; + try { + castedDoc = this._castUpdate(doc, options && options.overwrite); + } catch (err) { + if (callback) { + callback(err); + return this; + } else { + throw err; + } + } + + if (!castedDoc) { + callback && callback(null, 0); + return this; + } + + return Query.base.update.call(this, castedQuery, castedDoc, options, callback); } /** - * Sets the tailable option (for use with capped collections). + * Executes the query * - * ####Example + * ####Examples: * - * Kitten.find().tailable() // true - * Kitten.find().tailable(true) - * Kitten.find().tailable(false) + * var promise = query.exec(); + * var promise = query.exec('update'); * - * @param {Boolean} bool defaults to true - * @see tailable http://docs.mongodb.org/manual/tutorial/create-tailable-cursor/ + * query.exec(callback); + * query.exec('find', callback); + * + * @param {String|Function} [operation] + * @param {Function} [callback] + * @return {Promise} * @api public */ -Query.prototype.tailable = function (v) { - this.options.tailable = arguments.length ? !!v : true; - return this; -}; +Query.prototype.exec = function exec (op, callback) { + var promise = new Promise(); + + if ('function' == typeof op) { + callback = op; + op = null; + } else if ('string' == typeof op) { + this.op = op; + } + + if (callback) promise.addBack(callback); + + if (!this.op) { + promise.complete(); + return promise; + } + + Query.base.exec.call(this, op, promise.resolve.bind(promise)); + + return promise; +} /** - * Executes the query as a find() operation. + * Finds the schema for `path`. This is different than + * calling `schema.path` as it also resolves paths with + * positional selectors (something.$.another.$.path). * - * @param {Function} callback - * @return {Query} this + * @param {String} path * @api private */ -Query.prototype.execFind = function (callback) { - var model = this.model - , promise = new Promise(callback); +Query.prototype._getSchema = function _getSchema (path) { + return this.model._getSchema(path); +} - try { - this.cast(model); - } catch (err) { - promise.error(err); - return this; - } +/*! + * These operators require casting docs + * to real Documents for Update operations. + */ - // apply default schematype path selections - this._applyPaths(); +var castOps = { + $push: 1 + , $pushAll: 1 + , $addToSet: 1 + , $set: 1 +}; - var self = this - , castQuery = this._conditions - , options = this._optionsForExec(model) - , fields = utils.clone(this._fields) +/*! + * These operators should be cast to numbers instead + * of their path schema type. + */ - options.fields = this._castFields(fields); - if (options.fields instanceof Error) { - promise.error(options.fields); - return this; - } +var numberOps = { + $pop: 1 + , $unset: 1 + , $inc: 1 +}; - model.collection.find(castQuery, options, function (err, cursor) { - if (err) return promise.error(err); - cursor.toArray(tick(cb)); - }); +/** + * Casts obj for an update command. + * + * @param {Object} obj + * @return {Object} obj after casting its values + * @api private + */ - function cb (err, docs) { - if (err) return promise.error(err); +Query.prototype._castUpdate = function _castUpdate (obj, overwrite) { + if (!obj) return undefined; - if (0 === docs.length) { - return promise.complete(docs); - } + var ops = Object.keys(obj) + , i = ops.length + , ret = {} + , hasKeys + , val; - if (!self.options.populate) { - return true === options.lean - ? promise.complete(docs) - : completeMany(model, docs, fields, self, null, promise); + while (i--) { + var op = ops[i]; + // if overwrite is set, don't do any of the special $set stuff + if ('$' !== op[0] && !overwrite) { + // fix up $set sugar + if (!ret.$set) { + if (obj.$set) { + ret.$set = obj.$set; + } else { + ret.$set = {}; + } + } + ret.$set[op] = obj[op]; + ops.splice(i, 1); + if (!~ops.indexOf('$set')) ops.push('$set'); + } else if ('$set' === op) { + if (!ret.$set) { + ret[op] = obj[op]; + } + } else { + ret[op] = obj[op]; } + } - var pop = helpers.preparePopulationOptions(self, options); - model.populate(docs, pop, function (err, docs) { - if (err) return promise.error(err); - return true === options.lean - ? promise.complete(docs) - : completeMany(model, docs, fields, self, pop, promise); - }); + // cast each value + i = ops.length; + + // if we get passed {} for the update, we still need to respect that when it + // is an overwrite scenario + if (overwrite) { + hasKeys = true; } - return this; + while (i--) { + op = ops[i]; + val = ret[op]; + if (val && 'Object' === val.constructor.name && !overwrite) { + hasKeys |= this._walkUpdatePath(val, op); + } else if (overwrite && 'Object' === ret.constructor.name) { + // if we are just using overwrite, cast the query and then we will + // *always* return the value, even if it is an empty object. We need to + // set hasKeys above because we need to account for the case where the + // user passes {} and wants to clobber the whole document + // Also, _walkUpdatePath expects an operation, so give it $set since that + // is basically what we're doing + this._walkUpdatePath(ret, '$set'); + } else { + var msg = 'Invalid atomic update value for ' + op + '. ' + + 'Expected an object, received ' + typeof val; + throw new Error(msg); + } + } + + return hasKeys && ret; } -/*! - * hydrates many documents +/** + * Walk each path of obj and cast its values + * according to its schema. * - * @param {Model} model - * @param {Array} docs - * @param {Object} fields - * @param {Query} self - * @param {Array} [pop] array of paths used in population - * @param {Promise} promise + * @param {Object} obj - part of a query + * @param {String} op - the atomic operator ($pull, $set, etc) + * @param {String} pref - path prefix (internal only) + * @return {Bool} true if this path has keys to update + * @api private */ -function completeMany (model, docs, fields, self, pop, promise) { - var arr = []; - var count = docs.length; - var len = count; - var i = 0; - var opts = pop ? - { populated: pop } - : undefined; +Query.prototype._walkUpdatePath = function _walkUpdatePath (obj, op, pref) { + var prefix = pref ? pref + '.' : '' + , keys = Object.keys(obj) + , i = keys.length + , hasKeys = false + , schema + , key + , val; - for (; i < len; ++i) { - arr[i] = new model(undefined, fields, true); - arr[i].init(docs[i], opts, function (err) { - if (err) return promise.error(err); - --count || promise.complete(arr); - }); + var strict = 'strict' in this._mongooseOptions + ? this._mongooseOptions.strict + : this.model.schema.options.strict; + + while (i--) { + key = keys[i]; + val = obj[key]; + + if (val && 'Object' === val.constructor.name) { + // watch for embedded doc schemas + schema = this._getSchema(prefix + key); + if (schema && schema.caster && op in castOps) { + // embedded doc schema + + if (strict && !schema) { + // path is not in our strict schema + if ('throw' == strict) { + throw new Error('Field `' + key + '` is not in schema.'); + } else { + // ignore paths not specified in schema + delete obj[key]; + } + } else { + hasKeys = true; + + if ('$each' in val) { + obj[key] = { + $each: this._castUpdateVal(schema, val.$each, op) + } + + if (val.$slice) { + obj[key].$slice = val.$slice | 0; + } + + if (val.$sort) { + obj[key].$sort = val.$sort; + } + + if (!!val.$position || val.$position === 0) { + obj[key].$position = val.$position; + } + } else { + obj[key] = this._castUpdateVal(schema, val, op); + } + } + } else if (op === '$currentDate') { + // $currentDate can take an object + obj[key] = this._castUpdateVal(schema, val, op); + } else { + // gh-2314 + // we should be able to set a schema-less field + // to an empty object literal + hasKeys |= this._walkUpdatePath(val, op, prefix + key) || + (utils.isObject(val) && Object.keys(val).length === 0); + } + } else { + schema = ('$each' === key || '$or' === key || '$and' === key) + ? this._getSchema(pref) + : this._getSchema(prefix + key); + + var skip = strict && + !schema && + !/real|nested/.test(this.model.schema.pathType(prefix + key)); + + if (skip) { + if ('throw' == strict) { + throw new Error('Field `' + prefix + key + '` is not in schema.'); + } else { + delete obj[key]; + } + } else { + hasKeys = true; + obj[key] = this._castUpdateVal(schema, val, op, key); + } + } } + return hasKeys; } /** - * Executes the query as a findOne() operation, passing the first found document to the callback. - * - * ####Example - * - * var query = Kitten.find({ color: 'white'}); - * - * query.findOne(function (err, kitten) { - * if (err) return handleError(err); - * - * // kitten may be null if no document matched - * if (kitten) { - * ... - * } - * }) + * Casts `val` according to `schema` and atomic `op`. * - * @param {Function} callback - * @return {Query} this - * @see findOne http://docs.mongodb.org/manual/reference/method/db.collection.findOne/ - * @api public + * @param {Schema} schema + * @param {Object} val + * @param {String} op - the atomic operator ($pull, $set, etc) + * @param {String} [$conditional] + * @api private */ -Query.prototype.findOne = function (callback) { - this.op = 'findOne'; - - if (!callback) return this; - - var model = this.model; - var promise = new Promise(callback); - - try { - this.cast(model); - } catch (err) { - promise.error(err); - return this; +Query.prototype._castUpdateVal = function _castUpdateVal (schema, val, op, $conditional) { + if (!schema) { + // non-existing schema path + return op in numberOps + ? Number(val) + : val } - // apply default schematype path selections - this._applyPaths(); - - var self = this - , castQuery = this._conditions - , options = this._optionsForExec(model) - , fields = utils.clone(this._fields) + var cond = schema.caster && op in castOps && + (utils.isObject(val) || Array.isArray(val)); + if (cond) { + // Cast values for ops that add data to MongoDB. + // Ensures embedded documents get ObjectIds etc. + var tmp = schema.cast(val); - options.fields = this._castFields(fields); - if (options.fields instanceof Error) { - promise.error(options.fields); - return this; + if (Array.isArray(val)) { + val = tmp; + } else { + val = tmp[0]; + } } - model.collection.findOne(castQuery, options, tick(function (err, doc) { - if (err) return promise.error(err); - if (!doc) return promise.complete(null); - - if (!self.options.populate) { - return true === options.lean - ? promise.complete(doc) - : completeOne(model, doc, fields, self, null, promise); + if (op in numberOps) { + return Number(val); + } + if (op === '$currentDate') { + if (typeof val === 'object') { + return { $type: val.$type }; } + return Boolean(val); + } + if (/^\$/.test($conditional)) { + return schema.castForQuery($conditional, val); + } + return schema.castForQuery(val) +} - var pop = helpers.preparePopulationOptions(self, options); - model.populate(doc, pop, function (err, doc) { - if (err) return promise.error(err); - return true === options.lean - ? promise.complete(doc) - : completeOne(model, doc, fields, self, pop, promise); - }) - })); +/*! + * castQuery + * @api private + */ - return this; +function castQuery (query) { + try { + return query.cast(query.model); + } catch (err) { + return err; + } } /*! - * hydrates a document - * - * @param {Model} model - * @param {Document} doc - * @param {Object} fields - * @param {Query} self - * @param {Array} [pop] array of paths used in population - * @param {Promise} promise + * castDoc + * @api private */ -function completeOne (model, doc, fields, self, pop, promise) { - var opts = pop ? - { populated: pop } - : undefined; - - var casted = new model(undefined, fields, true); - casted.init(doc, opts, function (err) { - if (err) return promise.error(err); - promise.complete(casted); - }); +function castDoc (query, overwrite) { + try { + return query._castUpdate(query._update, overwrite); + } catch (err) { + return err; + } } /** - * Exectues the query as a count() operation. + * Specifies paths which should be populated with other documents. * - * ####Example + * ####Example: * - * Kitten.where('color', 'black').count(function (err, count) { - * if (err) return handleError(err); - * console.log('there are %d black kittens', count); + * Kitten.findOne().populate('owner').exec(function (err, kitten) { + * console.log(kitten.owner.name) // Max * }) * - * @param {Function} callback + * Kitten.find().populate({ + * path: 'owner' + * , select: 'name' + * , match: { color: 'black' } + * , options: { sort: { name: -1 }} + * }).exec(function (err, kittens) { + * console.log(kittens[0].owner.name) // Zoopa + * }) + * + * // alternatively + * Kitten.find().populate('owner', 'name', null, {sort: { name: -1 }}).exec(function (err, kittens) { + * console.log(kittens[0].owner.name) // Zoopa + * }) + * + * Paths are populated after the query executes and a response is received. A separate query is then executed for each path specified for population. After a response for each query has also been returned, the results are passed to the callback. + * + * @param {Object|String} path either the path to populate or an object specifying all parameters + * @param {Object|String} [select] Field selection for the population query + * @param {Model} [model] The name of the model you wish to use for population. If not specified, the name is looked up from the Schema ref. + * @param {Object} [match] Conditions for the population query + * @param {Object} [options] Options for the population query (sort, etc) + * @see population ./populate.html + * @see Query#select #query_Query-select + * @see Model.populate #model_Model.populate * @return {Query} this - * @see count http://docs.mongodb.org/manual/reference/method/db.collection.count/ * @api public */ -Query.prototype.count = function (callback) { - this.op = 'count'; - var model = this.model; +Query.prototype.populate = function () { + var res = utils.populate.apply(null, arguments); + var opts = this._mongooseOptions; - try { - this.cast(model); - } catch (err) { - return callback(err); + if (!utils.isObject(opts.populate)) { + opts.populate = {}; } - var castQuery = this._conditions; - model.collection.count(castQuery, tick(callback)); + for (var i = 0; i < res.length; ++i) { + opts.populate[res[i].path] = res[i]; + } return this; -}; +} /** - * Executes this query as a distict() operation. - * - * ####Example + * Casts this query to the schema of `model` * - * Link.find({ clicks: { $gt: 100 }}).distinct('url', function (err, result) { - * if (err) return handleError(err); + * ####Note * - * assert(Array.isArray(result)); - * console.log('unique urls with more than 100 clicks', result); - * }) + * If `obj` is present, it is cast instead of this query. * - * @param {String} field - * @param {Function} callback - * @return {Query} this - * @see distinct http://docs.mongodb.org/manual/reference/method/db.collection.distinct/ + * @param {Model} model + * @param {Object} [obj] + * @return {Object} * @api public */ -Query.prototype.distinct = function (field, callback) { - this.op = 'distinct'; - var model = this.model; +Query.prototype.cast = function (model, obj) { + obj || (obj = this._conditions); + + var schema = model.schema + , paths = Object.keys(obj) + , i = paths.length + , any$conditionals + , schematype + , nested + , path + , type + , val; - try { - this.cast(model); - } catch (err) { - return callback(err); - } + while (i--) { + path = paths[i]; + val = obj[path]; - var castQuery = this._conditions; - model.collection.distinct(field, castQuery, tick(callback)); + if ('$or' === path || '$nor' === path || '$and' === path) { + var k = val.length + , orComponentQuery; - return this; -}; + while (k--) { + orComponentQuery = new Query(val[k], {}, null, this.mongooseCollection); + orComponentQuery.cast(model); + val[k] = orComponentQuery._conditions; + } -/*! - * These operators require casting docs - * to real Documents for Update operations. - */ + } else if (path === '$where') { + type = typeof val; + + if ('string' !== type && 'function' !== type) { + throw new Error("Must have a string or function for $where"); + } + + if ('function' === type) { + obj[path] = val.toString(); + } + + continue; + + } else { + + if (!schema) { + // no casting for Mixed types + continue; + } + + schematype = schema.path(path); + + if (!schematype) { + // Handle potential embedded array queries + var split = path.split('.') + , j = split.length + , pathFirstHalf + , pathLastHalf + , remainingConds + , castingQuery; + + // Find the part of the var path that is a path of the Schema + while (j--) { + pathFirstHalf = split.slice(0, j).join('.'); + schematype = schema.path(pathFirstHalf); + if (schematype) break; + } + + // If a substring of the input path resolves to an actual real path... + if (schematype) { + // Apply the casting; similar code for $elemMatch in schema/array.js + if (schematype.caster && schematype.caster.schema) { + remainingConds = {}; + pathLastHalf = split.slice(j).join('.'); + remainingConds[pathLastHalf] = val; + castingQuery = new Query(remainingConds, {}, null, this.mongooseCollection); + castingQuery.cast(schematype.caster); + obj[path] = castingQuery._conditions[pathLastHalf]; + } else { + obj[path] = val; + } + continue; + } + + if (utils.isObject(val)) { + // handle geo schemas that use object notation + // { loc: { long: Number, lat: Number } + + var geo = val.$near ? '$near' : + val.$nearSphere ? '$nearSphere' : + val.$within ? '$within' : + val.$geoIntersects ? '$geoIntersects' : ''; + + if (!geo) { + continue; + } + + var numbertype = new Types.Number('__QueryCasting__') + var value = val[geo]; -var castOps = { - $push: 1 - , $pushAll: 1 - , $addToSet: 1 - , $set: 1 -}; + if (val.$maxDistance) { + val.$maxDistance = numbertype.castForQuery(val.$maxDistance); + } -/*! - * These operators should be cast to numbers instead - * of their path schema type. - */ + if ('$within' == geo) { + var withinType = value.$center + || value.$centerSphere + || value.$box + || value.$polygon; -var numberOps = { - $pop: 1 - , $unset: 1 - , $inc: 1 -} + if (!withinType) { + throw new Error('Bad $within paramater: ' + JSON.stringify(val)); + } -/** - * Executes this query as an update() operation. - * - * _All paths passed that are not $atomic operations will become $set ops so we retain backwards compatibility._ - * - * ####Example - * - * Model.update({..}, { title: 'remove words' }, ...) - * - * // becomes - * - * Model.update({..}, { $set: { title: 'remove words' }}, ...) - * - * ####Note - * - * Passing an empty object `{}` as the doc will result in a no-op. The update operation will be ignored and the callback executed without sending the command to MongoDB so as to prevent accidently overwritting the collection. - * - * @param {Object} doc the update conditions - * @param {Function} callback - * @return {Query} this - * @api public - * @see Model.update #model_Model.update - * @see update http://docs.mongodb.org/manual/reference/method/db.collection.update/ - */ + value = withinType; -Query.prototype.update = function update (doc, callback) { - this.op = 'update'; - this._updateArg = doc; + } else if ('$near' == geo && + 'string' == typeof value.type && Array.isArray(value.coordinates)) { + // geojson; cast the coordinates + value = value.coordinates; - var model = this.model - , options = this._optionsForExec(model) - , fn = 'function' == typeof callback - , castedQuery - , castedDoc + } else if (('$near' == geo || '$nearSphere' == geo || '$geoIntersects' == geo) && + value.$geometry && 'string' == typeof value.$geometry.type && + Array.isArray(value.$geometry.coordinates)) { + // geojson; cast the coordinates + value = value.$geometry.coordinates; + } - castedQuery = castQuery(this); - if (castedQuery instanceof Error) { - if (fn) { - process.nextTick(callback.bind(null, castedQuery)); - return this; - } - throw castedQuery; - } + ;(function _cast (val) { + if (Array.isArray(val)) { + val.forEach(function (item, i) { + if (Array.isArray(item) || utils.isObject(item)) { + return _cast(item); + } + val[i] = numbertype.castForQuery(item); + }); + } else { + var nearKeys= Object.keys(val); + var nearLen = nearKeys.length; + while (nearLen--) { + var nkey = nearKeys[nearLen]; + var item = val[nkey]; + if (Array.isArray(item) || utils.isObject(item)) { + _cast(item); + val[nkey] = item; + } else { + val[nkey] = numbertype.castForQuery(item); + } + } + } + })(value); + } - castedDoc = castDoc(this); - if (!castedDoc) { - fn && process.nextTick(callback.bind(null, null, 0)); - return this; - } + } else if (val === null || val === undefined) { + continue; + } else if ('Object' === val.constructor.name) { - if (castedDoc instanceof Error) { - if (fn) { - process.nextTick(callback.bind(null, castedDoc)); - return this; - } - throw castedDoc; - } + any$conditionals = Object.keys(val).some(function (k) { + return k.charAt(0) === '$' && k !== '$id' && k !== '$ref'; + }); - if (!fn) { - options.safe = { w: 0 }; - } + if (!any$conditionals) { + obj[path] = schematype.castForQuery(val); + } else { - model.collection.update(castedQuery, castedDoc, options, tick(callback)); - return this; -}; + var ks = Object.keys(val) + , k = ks.length + , $cond; -/** - * Casts obj for an update command. - * - * @param {Object} obj - * @return {Object} obj after casting its values - * @api private - */ + while (k--) { + $cond = ks[k]; + nested = val[$cond]; -Query.prototype._castUpdate = function _castUpdate (obj) { - var ops = Object.keys(obj) - , i = ops.length - , ret = {} - , hasKeys - , val + if ('$exists' === $cond) { + if ('boolean' !== typeof nested) { + throw new Error("$exists parameter must be Boolean"); + } + continue; + } - while (i--) { - var op = ops[i]; - if ('$' !== op[0]) { - // fix up $set sugar - if (!ret.$set) { - if (obj.$set) { - ret.$set = obj.$set; - } else { - ret.$set = {}; + if ('$type' === $cond) { + if ('number' !== typeof nested) { + throw new Error("$type parameter must be Number"); + } + continue; + } + + if ('$not' === $cond) { + this.cast(model, nested); + } else { + val[$cond] = schematype.castForQuery($cond, nested); + } + } } + } else { + obj[path] = schematype.castForQuery(val); } - ret.$set[op] = obj[op]; - ops.splice(i, 1); - if (!~ops.indexOf('$set')) ops.push('$set'); - } else if ('$set' === op) { - if (!ret.$set) { - ret[op] = obj[op]; - } - } else { - ret[op] = obj[op]; } } - // cast each value - i = ops.length; - - while (i--) { - op = ops[i]; - val = ret[op]; - if ('Object' === val.constructor.name) { - hasKeys |= this._walkUpdatePath(val, op); - } else { - var msg = 'Invalid atomic update value for ' + op + '. ' - + 'Expected an object, received ' + typeof val; - throw new Error(msg); - } - } - - return hasKeys && ret; + return obj; } /** - * Walk each path of obj and cast its values - * according to its schema. + * Casts selected field arguments for field selection with mongo 2.2 * - * @param {Object} obj - part of a query - * @param {String} op - the atomic operator ($pull, $set, etc) - * @param {String} pref - path prefix (internal only) - * @return {Bool} true if this path has keys to update + * query.select({ ids: { $elemMatch: { $in: [hexString] }}) + * + * @param {Object} fields + * @see https://github.com/LearnBoost/mongoose/issues/1091 + * @see http://docs.mongodb.org/manual/reference/projection/elemMatch/ * @api private */ -Query.prototype._walkUpdatePath = function _walkUpdatePath (obj, op, pref) { - var prefix = pref ? pref + '.' : '' - , keys = Object.keys(obj) - , i = keys.length - , hasKeys = false - , schema +Query.prototype._castFields = function _castFields (fields) { + var selected + , elemMatchKeys + , keys , key - , val - - var strict = 'strict' in this.options - ? this.options.strict - : this.model.schema.options.strict; - - while (i--) { - key = keys[i]; - val = obj[key]; - - if (val && 'Object' === val.constructor.name) { - // watch for embedded doc schemas - schema = this._getSchema(prefix + key); - if (schema && schema.caster && op in castOps) { - // embedded doc schema - - if (strict && !schema) { - // path is not in our strict schema - if ('throw' == strict) { - throw new Error('Field `' + key + '` is not in schema.'); - } else { - // ignore paths not specified in schema - delete obj[key]; - } - } else { - hasKeys = true; - - if ('$each' in val) { - obj[key] = { - $each: this._castUpdateVal(schema, val.$each, op) - } - - if (val.$slice) { - obj[key].$slice = val.$slice | 0; - } + , out + , i - if (val.$sort) { - obj[key].$sort = val.$sort; - } + if (fields) { + keys = Object.keys(fields); + elemMatchKeys = []; + i = keys.length; - } else { - obj[key] = this._castUpdateVal(schema, val, op); - } - } - } else { - hasKeys |= this._walkUpdatePath(val, op, prefix + key); + // collect $elemMatch args + while (i--) { + key = keys[i]; + if (fields[key].$elemMatch) { + selected || (selected = {}); + selected[key] = fields[key]; + elemMatchKeys.push(key); } - } else { - schema = '$each' === key - ? this._getSchema(pref) - : this._getSchema(prefix + key); + } + } - var skip = strict && - !schema && - !/real|nested/.test(this.model.schema.pathType(prefix + key)); + if (selected) { + // they passed $elemMatch, cast em + try { + out = this.cast(this.model, selected); + } catch (err) { + return err; + } - if (skip) { - if ('throw' == strict) { - throw new Error('Field `' + prefix + key + '` is not in schema.'); - } else { - delete obj[key]; - } - } else { - hasKeys = true; - obj[key] = this._castUpdateVal(schema, val, op, key); - } + // apply the casted field args + i = elemMatchKeys.length; + while (i--) { + key = elemMatchKeys[i]; + fields[key] = out[key]; } } - return hasKeys; + + return fields; } /** - * Casts `val` according to `schema` and atomic `op`. - * - * @param {Schema} schema - * @param {Object} val - * @param {String} op - the atomic operator ($pull, $set, etc) - * @param {String} [$conditional] + * Applies schematype selected options to this query. * @api private */ -Query.prototype._castUpdateVal = function _castUpdateVal (schema, val, op, $conditional) { - if (!schema) { - // non-existing schema path - return op in numberOps - ? Number(val) - : val - } +Query.prototype._applyPaths = function applyPaths () { + // determine if query is selecting or excluding fields - if (schema.caster && op in castOps && - ('Object' === val.constructor.name || Array.isArray(val))) { - // Cast values for ops that add data to MongoDB. - // Ensures embedded documents get ObjectIds etc. - var tmp = schema.cast(val); + var fields = this._fields + , exclude + , keys + , ki - if (Array.isArray(val)) { - val = tmp; - } else { - val = tmp[0]; + if (fields) { + keys = Object.keys(fields); + ki = keys.length; + + while (ki--) { + if ('+' == keys[ki][0]) continue; + exclude = 0 === fields[keys[ki]]; + break; } } - if (op in numberOps) return Number(val); - if (/^\$/.test($conditional)) return schema.castForQuery($conditional, val); - return schema.castForQuery(val) -} + // if selecting, apply default schematype select:true fields + // if excluding, apply schematype select:false fields -/** - * Finds the schema for `path`. This is different than - * calling `schema.path` as it also resolves paths with - * positional selectors (something.$.another.$.path). - * - * @param {String} path - * @api private - */ + var selected = [] + , excluded = [] + , seen = []; -Query.prototype._getSchema = function _getSchema (path) { - return this.model._getSchema(path); + analyzeSchema(this.model.schema); + + switch (exclude) { + case true: + excluded.length && this.select('-' + excluded.join(' -')); + break; + case false: + selected.length && this.select(selected.join(' ')); + break; + case undefined: + // user didn't specify fields, implies returning all fields. + // only need to apply excluded fields + excluded.length && this.select('-' + excluded.join(' -')); + break; + } + + return seen = excluded = selected = keys = fields = null; + + function analyzeSchema (schema, prefix) { + prefix || (prefix = ''); + + // avoid recursion + if (~seen.indexOf(schema)) return; + seen.push(schema); + + schema.eachPath(function (path, type) { + if (prefix) path = prefix + '.' + path; + + analyzePath(path, type); + + // array of subdocs? + if (type.schema) { + analyzeSchema(type.schema, path); + } + + }); + } + + function analyzePath (path, type) { + if ('boolean' != typeof type.selected) return; + + var plusPath = '+' + path; + if (fields && plusPath in fields) { + // forced inclusion + delete fields[plusPath]; + + // if there are other fields being included, add this one + // if no other included fields, leave this out (implied inclusion) + if (false === exclude && keys.length > 1 && !~keys.indexOf(path)) { + fields[path] = 1; + } + + return + }; + + // check for parent exclusions + var root = path.split('.')[0]; + if (~excluded.indexOf(root)) return; + + ;(type.selected ? selected : excluded).push(path); + } } /** @@ -2228,381 +2548,421 @@ Query.prototype._castFields = function _castFields (fields) { } /** - * Executes this query as a remove() operation. + * Returns a Node.js 0.8 style [read stream](http://nodejs.org/docs/v0.8.21/api/stream.html#stream_readable_stream) interface. * * ####Example * - * Cassette.where('artist').equals('Anne Murray').remove(callback) + * // follows the nodejs 0.8 stream api + * Thing.find({ name: /^hello/ }).stream().pipe(res) + * + * // manual streaming + * var stream = Thing.find({ name: /^hello/ }).stream(); * - * @param {Function} callback + * stream.on('data', function (doc) { + * // do something with the mongoose document + * }).on('error', function (err) { + * // handle the error + * }).on('close', function () { + * // the stream is closed + * }); + * + * ####Valid options + * + * - `transform`: optional function which accepts a mongoose document. The return value of the function will be emitted on `data`. + * + * ####Example + * + * // JSON.stringify all documents before emitting + * var stream = Thing.find().stream({ transform: JSON.stringify }); + * stream.pipe(writeStream); + * + * @return {QueryStream} + * @param {Object} [options] + * @see QueryStream * @api public - * @see remove http://docs.mongodb.org/manual/reference/method/db.collection.remove/ */ -Query.prototype.remove = function (callback) { - this.op = 'remove'; - - var model = this.model - , options = this._optionsForExec(model) - , cb = 'function' == typeof callback +Query.prototype.stream = function stream (opts) { + this._applyPaths(); + this._fields = this._castFields(this._fields); + return new QueryStream(this, opts); +} - try { - this.cast(model); - } catch (err) { - if (cb) return callback(err); - throw err; - } +// the rest of these are basically to support older Mongoose syntax with mquery - if (!cb) { - options.safe = { w: 0 }; - } +/** + * _DEPRECATED_ Alias of `maxScan` + * + * @deprecated + * @see maxScan #query_Query-maxScan + * @method maxscan + * @memberOf Query + */ - var castQuery = this._conditions; - model.collection.remove(castQuery, options, tick(callback)); - return this; -}; +Query.prototype.maxscan = Query.base.maxScan; /** - * Issues a mongodb [findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command) update command. - * - * Finds a matching document, updates it according to the `update` arg, passing any `options`, and returns the found document (if any) to the callback. The query executes immediately if `callback` is passed else a Query object is returned. + * Sets the tailable option (for use with capped collections). * - * ####Available options + * ####Example * - * - `new`: bool - true to return the modified document rather than the original. defaults to true - * - `upsert`: bool - creates the object if it doesn't exist. defaults to false. - * - `sort`: if multiple docs are found by the conditions, sets the sort order to choose which doc to update + * query.tailable() // true + * query.tailable(true) + * query.tailable(false) * - * ####Examples + * ####Note * - * query.findOneAndUpdate(conditions, update, options, callback) // executes - * query.findOneAndUpdate(conditions, update, options) // returns Query - * query.findOneAndUpdate(conditions, update, callback) // executes - * query.findOneAndUpdate(conditions, update) // returns Query - * query.findOneAndUpdate(callback) // executes - * query.findOneAndUpdate() // returns Query + * Cannot be used with `distinct()` * - * @param {Object} [query] - * @param {Object} [doc] - * @param {Object} [options] - * @param {Function} [callback] - * @see mongodb http://www.mongodb.org/display/DOCS/findAndModify+Command - * @return {Query} this + * @param {Boolean} bool defaults to true + * @see tailable http://docs.mongodb.org/manual/tutorial/create-tailable-cursor/ * @api public */ -Query.prototype.findOneAndUpdate = function (query, doc, options, callback) { - this.op = 'findOneAndUpdate'; - - switch (arguments.length) { - case 3: - if ('function' == typeof options) - callback = options, options = {}; - break; - case 2: - if ('function' == typeof doc) { - callback = doc; - doc = query; - query = undefined; - } - options = undefined; - break; - case 1: - if ('function' == typeof query) { - callback = query; - query = options = doc = undefined; - } else { - doc = query; - query = options = undefined; - } - } - - // apply query - if (query) { - if ('Object' === query.constructor.name) { - merge(this._conditions, query); - } else if (query instanceof Query) { - merge(this._conditions, query._conditions); - } else if (query instanceof Document) { - merge(this._conditions, query.toObject()); - } +Query.prototype.tailable = function (val, opts) { + // we need to support the tailable({ awaitdata : true }) as well as the + // tailable(true, {awaitdata :true}) syntax that mquery does not support + if (val && val.constructor.name == 'Object') { + opts = val; + val = true; } - // apply doc - if (doc) { - merge(this._updateArg, doc); + if (val === undefined) { + val = true; } - // apply options - options && this.setOptions(options); - - if (!callback) return this; - - return this._findAndModify('update', callback); + if (opts && opts.awaitdata) this.options.awaitdata = true; + return Query.base.tailable.call(this, val); } /** - * Issues a mongodb [findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command) remove command. + * Declares an intersects query for `geometry()`. + * + * ####Example + * + * query.where('path').intersects().geometry({ + * type: 'LineString' + * , coordinates: [[180.0, 11.0], [180, 9.0]] + * }) + * + * query.where('path').intersects({ + * type: 'LineString' + * , coordinates: [[180.0, 11.0], [180, 9.0]] + * }) + * + * ####NOTE: + * + * **MUST** be used after `where()`. + * + * ####NOTE: + * + * In Mongoose 3.7, `intersects` changed from a getter to a function. If you need the old syntax, use [this](https://github.com/ebensing/mongoose-within). + * + * @method intersects + * @memberOf Query + * @param {Object} [arg] + * @return {Query} this + * @see $geometry http://docs.mongodb.org/manual/reference/operator/geometry/ + * @see geoIntersects http://docs.mongodb.org/manual/reference/operator/geoIntersects/ + * @api public + */ + +/** + * Specifies a `$geometry` condition + * + * ####Example + * + * var polyA = [[[ 10, 20 ], [ 10, 40 ], [ 30, 40 ], [ 30, 20 ]]] + * query.where('loc').within().geometry({ type: 'Polygon', coordinates: polyA }) + * + * // or + * var polyB = [[ 0, 0 ], [ 1, 1 ]] + * query.where('loc').within().geometry({ type: 'LineString', coordinates: polyB }) * - * Finds a matching document, removes it, passing the found document (if any) to the callback. Executes immediately if `callback` is passed else a Query object is returned. + * // or + * var polyC = [ 0, 0 ] + * query.where('loc').within().geometry({ type: 'Point', coordinates: polyC }) * - * ####Available options + * // or + * query.where('loc').intersects().geometry({ type: 'Point', coordinates: polyC }) * - * - `sort`: if multiple docs are found by the conditions, sets the sort order to choose which doc to update + * The argument is assigned to the most recent path passed to `where()`. * - * ####Examples + * ####NOTE: * - * A.where().findOneAndRemove(conditions, options, callback) // executes - * A.where().findOneAndRemove(conditions, options) // return Query - * A.where().findOneAndRemove(conditions, callback) // executes - * A.where().findOneAndRemove(conditions) // returns Query - * A.where().findOneAndRemove(callback) // executes - * A.where().findOneAndRemove() // returns Query + * `geometry()` **must** come after either `intersects()` or `within()`. * - * @param {Object} [conditions] - * @param {Object} [options] - * @param {Function} [callback] + * The `object` argument must contain `type` and `coordinates` properties. + * - type {String} + * - coordinates {Array} + * + * @method geometry + * @memberOf Query + * @param {Object} object Must contain a `type` property which is a String and a `coordinates` property which is an Array. See the examples. * @return {Query} this - * @see mongodb http://www.mongodb.org/display/DOCS/findAndModify+Command + * @see $geometry http://docs.mongodb.org/manual/reference/operator/geometry/ + * @see http://docs.mongodb.org/manual/release-notes/2.4/#new-geospatial-indexes-with-geojson-and-improved-spherical-geometry + * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing * @api public */ -Query.prototype.findOneAndRemove = function (conditions, options, callback) { - this.op = 'findOneAndRemove'; - - if ('function' == typeof options) { - callback = options; - options = undefined; - } else if ('function' == typeof conditions) { - callback = conditions; - conditions = undefined; - } - - // apply conditions - if (conditions) { - if ('Object' === conditions.constructor.name) { - merge(this._conditions, conditions); - } else if (conditions instanceof Query) { - merge(this._conditions, conditions._conditions); - } else if (conditions instanceof Document) { - merge(this._conditions, conditions.toObject()); - } - } - - // apply options - options && this.setOptions(options); - - if (!callback) return this; - - return this._findAndModify('remove', callback); -} - /** - * _findAndModify + * Specifies a `$near` or `$nearSphere` condition * - * @param {String} type - either "remove" or "update" - * @param {Function} callback - * @api private + * These operators return documents sorted by distance. + * + * ####Example + * + * query.where('loc').near({ center: [10, 10] }); + * query.where('loc').near({ center: [10, 10], maxDistance: 5 }); + * query.where('loc').near({ center: [10, 10], maxDistance: 5, spherical: true }); + * query.near('loc', { center: [10, 10], maxDistance: 5 }); + * + * @method near + * @memberOf Query + * @param {String} [path] + * @param {Object} val + * @return {Query} this + * @see $near http://docs.mongodb.org/manual/reference/operator/near/ + * @see $nearSphere http://docs.mongodb.org/manual/reference/operator/nearSphere/ + * @see $maxDistance http://docs.mongodb.org/manual/reference/operator/maxDistance/ + * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing + * @api public */ -Query.prototype._findAndModify = function (type, callback) { - var model = this.model - , promise = new Promise(callback) - , self = this - , castedQuery - , castedDoc - , fields - , sort - , opts - - castedQuery = castQuery(this); - if (castedQuery instanceof Error) { - process.nextTick(promise.error.bind(promise, castedQuery)); - return promise; - } +/*! + * Overwriting mquery is needed to support a couple different near() forms found in older + * versions of mongoose + * near([1,1]) + * near(1,1) + * near(field, [1,2]) + * near(field, 1, 2) + * In addition to all of the normal forms supported by mquery + */ - opts = this._optionsForExec(model); +Query.prototype.near = function () { + var params = []; + var sphere = this._mongooseOptions.nearSphere; - if ('remove' == type) { - opts.remove = true; - } else { - if (!('new' in opts)) opts.new = true; - if (!('upsert' in opts)) opts.upsert = false; + // TODO refactor - castedDoc = castDoc(this); - if (!castedDoc) { - if (opts.upsert) { - // still need to do the upsert to empty doc - castedDoc = { $set: {} }; - } else { - return this.findOne(callback); + if (arguments.length === 1) { + if (Array.isArray(arguments[0])) { + params.push({ center: arguments[0], spherical: sphere }); + } else if ('string' == typeof arguments[0]) { + // just passing a path + params.push(arguments[0]); + } else if (utils.isObject(arguments[0])) { + if ('boolean' != typeof arguments[0].spherical) { + arguments[0].spherical = sphere; } - } else if (castedDoc instanceof Error) { - process.nextTick(promise.error.bind(promise, castedDoc)); - return promise; + params.push(arguments[0]); + } else { + throw new TypeError('invalid argument'); } - } - - this._applyPaths(); - - if (this._fields) { - fields = utils.clone(this._fields) - opts.fields = this._castFields(fields); - if (opts.fields instanceof Error) { - process.nextTick(promise.error.bind(promise, opts.fields)); - return promise; + } else if (arguments.length === 2) { + if ('number' == typeof arguments[0] && 'number' == typeof arguments[1]) { + params.push({ center: [arguments[0], arguments[1]], spherical: sphere}); + } else if ('string' == typeof arguments[0] && Array.isArray(arguments[1])) { + params.push(arguments[0]); + params.push({ center: arguments[1], spherical: sphere }); + } else if ('string' == typeof arguments[0] && utils.isObject(arguments[1])) { + params.push(arguments[0]); + if ('boolean' != typeof arguments[1].spherical) { + arguments[1].spherical = sphere; + } + params.push(arguments[1]); + } else { + throw new TypeError('invalid argument'); + } + } else if (arguments.length === 3) { + if ('string' == typeof arguments[0] && 'number' == typeof arguments[1] + && 'number' == typeof arguments[2]) { + params.push(arguments[0]); + params.push({ center: [arguments[1], arguments[2]], spherical: sphere }); + } else { + throw new TypeError('invalid argument'); } + } else { + throw new TypeError('invalid argument'); } - // the driver needs a default - sort = opts.sort || []; - - model - .collection - .findAndModify(castedQuery, sort, castedDoc, opts, tick(function (err, doc) { - if (err) return promise.error(err); - if (!doc) return promise.complete(null); - - if (!self.options.populate) { - return true === opts.lean - ? promise.complete(doc) - : completeOne(model, doc, fields, self, null, promise); - } + return Query.base.near.apply(this, params); +} - var pop = helpers.preparePopulationOptions(self, opts); - model.populate(doc, pop, function (err, doc) { - if (err) return promise.error(err); - return true === opts.lean - ? promise.complete(doc) - : completeOne(model, doc, fields, self, pop, promise); - }) - })); +/** + * _DEPRECATED_ Specifies a `$nearSphere` condition + * + * ####Example + * + * query.where('loc').nearSphere({ center: [10, 10], maxDistance: 5 }); + * + * **Deprecated.** Use `query.near()` instead with the `spherical` option set to `true`. + * + * ####Example + * + * query.where('loc').near({ center: [10, 10], spherical: true }); + * + * @deprecated + * @see near() #query_Query-near + * @see $near http://docs.mongodb.org/manual/reference/operator/near/ + * @see $nearSphere http://docs.mongodb.org/manual/reference/operator/nearSphere/ + * @see $maxDistance http://docs.mongodb.org/manual/reference/operator/maxDistance/ + */ - return promise; +Query.prototype.nearSphere = function () { + this._mongooseOptions.nearSphere = true; + this.near.apply(this, arguments); + return this; } /** - * Specifies paths which should be populated with other documents. + * Specifies a $polygon condition * - * ####Example: + * ####Example * - * Kitten.findOne().populate('owner').exec(function (err, kitten) { - * console.log(kitten.owner.name) // Max - * }) + * query.where('loc').within().polygon([10,20], [13, 25], [7,15]) + * query.polygon('loc', [10,20], [13, 25], [7,15]) * - * Kitten.find().populate({ - * path: 'owner' - * , select: 'name' - * , match: { color: 'black' } - * , options: { sort: { name: -1 }} - * }).exec(function (err, kittens) { - * console.log(kittens[0].owner.name) // Zoopa - * }) + * @method polygon + * @memberOf Query + * @param {String|Array} [path] + * @param {Array|Object} [coordinatePairs...] + * @return {Query} this + * @see $polygon http://docs.mongodb.org/manual/reference/operator/polygon/ + * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing + * @api public + */ + +/** + * Specifies a $box condition * - * // alternatively - * Kitten.find().populate('owner', 'name', null, {sort: { name: -1 }}).exec(function (err, kittens) { - * console.log(kittens[0].owner.name) // Zoopa - * }) + * ####Example * - * Paths are populated after the query executes and a response is received. A separate query is then executed for each path specified for population. After a response for each query has also been returned, the results are passed to the callback. + * var lowerLeft = [40.73083, -73.99756] + * var upperRight= [40.741404, -73.988135] * - * @param {Object|String} path either the path to populate or an object specifying all parameters - * @param {Object|String} [select] Field selection for the population query - * @param {Model} [model] The name of the model you wish to use for population. If not specified, the name is looked up from the Schema ref. - * @param {Object} [match] Conditions for the population query - * @param {Object} [options] Options for the population query (sort, etc) - * @see population ./populate.html - * @see Query#select #query_Query-select - * @see Model.populate #model_Model.populate + * query.where('loc').within().box(lowerLeft, upperRight) + * query.box({ ll : lowerLeft, ur : upperRight }) + * + * @method box + * @memberOf Query + * @see $box http://docs.mongodb.org/manual/reference/operator/box/ + * @see within() Query#within #query_Query-within + * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing + * @param {Object} val + * @param [Array] Upper Right Coords * @return {Query} this * @api public */ -Query.prototype.populate = function populate () { - var res = utils.populate.apply(null, arguments); - var opts = this.options; - - if (!utils.isObject(opts.populate)) { - opts.populate = {}; - } +/*! + * this is needed to support the mongoose syntax of: + * box(field, { ll : [x,y], ur : [x2,y2] }) + * box({ ll : [x,y], ur : [x2,y2] }) + */ - for (var i = 0; i < res.length; ++i) { - opts.populate[res[i].path] = res[i]; +Query.prototype.box = function (ll, ur) { + if (!Array.isArray(ll) && utils.isObject(ll)) { + ur = ll.ur; + ll = ll.ll; } - - return this; + return Query.base.box.call(this, ll, ur); } /** - * Returns a Node.js 0.8 style [read stream](http://nodejs.org/docs/v0.8.21/api/stream.html#stream_readable_stream) interface. + * Specifies a $center or $centerSphere condition. * * ####Example * - * // follows the nodejs 0.8 stream api - * Thing.find({ name: /^hello/ }).stream().pipe(res) + * var area = { center: [50, 50], radius: 10, unique: true } + * query.where('loc').within().circle(area) + * // alternatively + * query.circle('loc', area); * - * // manual streaming - * var stream = Thing.find({ name: /^hello/ }).stream(); + * // spherical calculations + * var area = { center: [50, 50], radius: 10, unique: true, spherical: true } + * query.where('loc').within().circle(area) + * // alternatively + * query.circle('loc', area); * - * stream.on('data', function (doc) { - * // do something with the mongoose document - * }).on('error', function (err) { - * // handle the error - * }).on('close', function () { - * // the stream is closed - * }); + * New in 3.7.0 * - * ####Valid options + * @method circle + * @memberOf Query + * @param {String} [path] + * @param {Object} area + * @return {Query} this + * @see $center http://docs.mongodb.org/manual/reference/operator/center/ + * @see $centerSphere http://docs.mongodb.org/manual/reference/operator/centerSphere/ + * @see $geoWithin http://docs.mongodb.org/manual/reference/operator/within/ + * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing + * @api public + */ + +/** + * _DEPRECATED_ Alias for [circle](#query_Query-circle) * - * - `transform`: optional function which accepts a mongoose document. The return value of the function will be emitted on `data`. + * **Deprecated.** Use [circle](#query_Query-circle) instead. + * + * @deprecated + * @method center + * @memberOf Query + * @api public + */ + +Query.prototype.center = Query.base.circle; + +/** + * _DEPRECATED_ Specifies a $centerSphere condition + * + * **Deprecated.** Use [circle](#query_Query-circle) instead. * * ####Example * - * // JSON.stringify all documents before emitting - * var stream = Thing.find().stream({ transform: JSON.stringify }); - * stream.pipe(writeStream); + * var area = { center: [50, 50], radius: 10 }; + * query.where('loc').within().centerSphere(area); * - * @return {QueryStream} - * @param {Object} [options] - * @see QueryStream + * @deprecated + * @param {String} [path] + * @param {Object} val + * @return {Query} this + * @see http://www.mongodb.org/display/DOCS/Geospatial+Indexing + * @see $centerSphere http://docs.mongodb.org/manual/reference/operator/centerSphere/ * @api public */ -Query.prototype.stream = function stream (opts) { - return new QueryStream(this, opts); -} +Query.prototype.centerSphere = function () { + if (arguments[0] && arguments[0].constructor.name == 'Object') { + arguments[0].spherical = true; + } + + if (arguments[1] && arguments[1].constructor.name == 'Object') { + arguments[1].spherical = true; + } -// helpers + Query.base.circle.apply(this, arguments); +} -/*! - * castDoc +/** + * Determines if query fields are inclusive + * + * @return {Boolean} bool defaults to true * @api private */ -function castDoc (query) { - try { - return query._castUpdate(query._updateArg); - } catch (err) { - return err; - } -} +Query.prototype._selectedInclusively = Query.prototype.selectedInclusively; /*! - * castQuery - * @api private + * Remove from public api for 3.8 */ -function castQuery (query) { - try { - return query.cast(query.model); - } catch (err) { - return err; - } -} +Query.prototype.selected = +Query.prototype.selectedInclusively = +Query.prototype.selectedExclusively = undefined; /*! - * Exports. + * Export */ module.exports = Query; -module.exports.QueryStream = QueryStream; diff --git a/node_modules/mongoose/lib/queryhelpers.js b/node_modules/mongoose/lib/queryhelpers.js index 4637fad..d382dd6 100644 --- a/node_modules/mongoose/lib/queryhelpers.js +++ b/node_modules/mongoose/lib/queryhelpers.js @@ -22,6 +22,50 @@ exports.preparePopulationOptions = function preparePopulationOptions (query, opt return pop; } +/*! + * Prepare a set of path options for query population. This is the MongooseQuery + * version + * + * @param {Query} query + * @param {Object} options + * @return {Array} + */ + +exports.preparePopulationOptionsMQ = function preparePopulationOptionsMQ (query, options) { + var pop = utils.object.vals(query._mongooseOptions.populate); + + // lean options should trickle through all queries + if (options.lean) pop.forEach(makeLean); + + return pop; +} + +/*! + * If the document is a mapped discriminator type, it returns a model instance for that type, otherwise, + * it returns an instance of the given model. + * + * @param {Model} model + * @param {Object} doc + * @param {Object} fields + * + * @return {Model} + */ +exports.createModel = function createModel(model, doc, fields) { + var discriminatorMapping = model.schema + ? model.schema.discriminatorMapping + : null; + + var key = discriminatorMapping && discriminatorMapping.isRoot + ? discriminatorMapping.key + : null; + + if (key && doc[key] && model.discriminators && model.discriminators[doc[key]]) { + return new model.discriminators[doc[key]](undefined, fields, true); + } + + return new model(undefined, fields, true); +} + /*! * Set each path query option to lean * diff --git a/node_modules/mongoose/lib/querystream.js b/node_modules/mongoose/lib/querystream.js index 6db7570..f828d1c 100644 --- a/node_modules/mongoose/lib/querystream.js +++ b/node_modules/mongoose/lib/querystream.js @@ -212,7 +212,7 @@ QueryStream.prototype._onNextObject = function _onNextObject (err, doc) { return this.destroy(); } - var opts = this.query.options; + var opts = this.query._mongooseOptions; if (!opts.populate) { return true === opts.lean @@ -221,7 +221,7 @@ QueryStream.prototype._onNextObject = function _onNextObject (err, doc) { } var self = this; - var pop = helpers.preparePopulationOptions(self.query, self.query.options); + var pop = helpers.preparePopulationOptionsMQ(self.query, self.query._mongooseOptions); self.query.model.populate(doc, pop, function (err, doc) { if (err) return self.destroy(err); @@ -232,7 +232,8 @@ QueryStream.prototype._onNextObject = function _onNextObject (err, doc) { } function createAndEmit (self, doc) { - var instance = new self.query.model(undefined, self._fields, true); + var instance = helpers.createModel(self.query.model, doc, self._fields); + instance.init(doc, function (err) { if (err) return self.destroy(err); emit(self, instance); diff --git a/node_modules/mongoose/lib/schema.js b/node_modules/mongoose/lib/schema.js index 53effd4..d3dd3ca 100644 --- a/node_modules/mongoose/lib/schema.js +++ b/node_modules/mongoose/lib/schema.js @@ -5,7 +5,7 @@ var EventEmitter = require('events').EventEmitter , VirtualType = require('./virtualtype') , utils = require('./utils') - , NamedScope + , mquery = require('mquery') , Query , Types @@ -63,6 +63,8 @@ function Schema (obj, options) { this.statics = {}; this.tree = {}; this._requiredpaths = undefined; + this.discriminatorMapping = undefined; + this._indexedpaths = undefined; this.options = this.defaultOptions(options); @@ -149,11 +151,17 @@ Schema.prototype.defaultOptions = function (options) { options.safe = { w: 0 }; } + if (options && options.safe && 0 === options.safe.w) { + // if you turn off safe writes, then versioning goes off as well + options.versionKey = false; + } + options = utils.options({ strict: true , bufferCommands: true , capped: false // { size, max, autoIndexId } , versionKey: '__v' + , discriminatorKey: '__t' , minimize: true , autoIndex: true , shardKey: null @@ -163,10 +171,12 @@ Schema.prototype.defaultOptions = function (options) { , _id: true , noVirtualId: false // deprecated, use { id: false } , id: true +// , pluralization: true // only set this to override the global option }, options); - if (options.read) + if (options.read) { options.read = utils.readPref(options.read); + } return options; } @@ -214,7 +224,7 @@ Schema.prototype.add = function add (obj, prefix) { * * Keys in this object are names that are rejected in schema declarations b/c they conflict with mongoose functionality. Using these key name will throw an error. * - * on, emit, _events, db, init, isNew, errors, schema, options, modelName, collection, _pres, _posts, toObject + * on, emit, _events, db, get, set, init, isNew, errors, schema, options, modelName, collection, _pres, _posts, toObject * * _NOTE:_ Use of these terms as method names is permitted, but play at your own risk, as they may be existing mongoose document methods you are stomping on. * @@ -226,6 +236,8 @@ Schema.reserved = Object.create(null); var reserved = Schema.reserved; reserved.on = reserved.db = +reserved.set = +reserved.get = reserved.init = reserved.isNew = reserved.errors = @@ -398,6 +410,19 @@ Schema.prototype.requiredPaths = function requiredPaths () { return this._requiredpaths = ret; } +/** + * Returns indexes from fields and schema-level indexes (cached). + * + * @api private + * @return {Array} + */ + +Schema.prototype.indexedPaths = function indexedPaths () { + if (this._indexedpaths) return this._indexedpaths; + + return this._indexedpaths = this.indexes(); +} + /** * Returns the pathType of `path` for this schema. * @@ -506,7 +531,7 @@ Schema.prototype.pre = function(){ }; /** - * Defines a post for the document + * Defines a post hook for the document * * Post hooks fire `on` the event emitted from document instances of Models compiled from this schema. * @@ -826,42 +851,6 @@ Schema.prototype.virtualpath = function (name) { return this.virtuals[name]; }; -/** - * These still haven't been fixed. Once they're working we'll make them public again. - * @api private - */ - -Schema.prototype.namedScope = function (name, fn) { - var namedScopes = this.namedScopes || (this.namedScopes = new NamedScope) - , newScope = Object.create(namedScopes) - , allScopes = namedScopes.scopesByName || (namedScopes.scopesByName = {}); - allScopes[name] = newScope; - newScope.name = name; - newScope.block = fn; - newScope.query = new Query(); - newScope.decorate(namedScopes, { - block0: function (block) { - return function () { - block.call(this.query); - return this; - }; - }, - blockN: function (block) { - return function () { - block.apply(this.query, arguments); - return this; - }; - }, - basic: function (query) { - return function () { - this.query.find(query); - return this; - }; - } - }); - return newScope; -}; - /*! * Module exports. */ @@ -904,7 +893,6 @@ Schema.Types = require('./schema/index'); */ Types = Schema.Types; -NamedScope = require('./namedscope') Query = require('./query'); var ObjectId = exports.ObjectId = Types.ObjectId; diff --git a/node_modules/mongoose/lib/schema/array.js b/node_modules/mongoose/lib/schema/array.js index 81f3dd5..7fc6c91 100644 --- a/node_modules/mongoose/lib/schema/array.js +++ b/node_modules/mongoose/lib/schema/array.js @@ -113,7 +113,7 @@ SchemaArray.prototype.applyGetters = function (value, scope) { }; /** - * Casts contents + * Casts values for set(). * * @param {Object} value * @param {Document} doc document that triggers the casting @@ -123,6 +123,18 @@ SchemaArray.prototype.applyGetters = function (value, scope) { SchemaArray.prototype.cast = function (value, doc, init) { if (Array.isArray(value)) { + + if (!value.length && doc) { + var indexes = doc.schema.indexedPaths(); + + for (var i = 0, l = indexes.length; i < l; ++i) { + var pathIndex = indexes[i][0][this.path]; + if ('2dsphere' === pathIndex || '2d' === pathIndex) { + return; + } + } + } + if (!(value instanceof MongooseArray)) { value = new MongooseArray(value, this.path, doc); } @@ -145,7 +157,7 @@ SchemaArray.prototype.cast = function (value, doc, init) { }; /** - * Casts contents for queries. + * Casts values for queries. * * @param {String} $conditional * @param {any} [value] @@ -155,29 +167,36 @@ SchemaArray.prototype.cast = function (value, doc, init) { SchemaArray.prototype.castForQuery = function ($conditional, value) { var handler , val; + if (arguments.length === 2) { handler = this.$conditionalHandlers[$conditional]; - if (!handler) + + if (!handler) { throw new Error("Can't use " + $conditional + " with Array."); + } + val = handler.call(this, value); + } else { + val = $conditional; var proto = this.casterConstructor.prototype; var method = proto.castForQuery || proto.cast; - var caster = this.caster; + if (Array.isArray(val)) { val = val.map(function (v) { if (method) v = method.call(caster, v); - return isMongooseObject(v) ? v.toObject() : v; }); + } else if (method) { val = method.call(caster, val); } } + return val && isMongooseObject(val) ? val.toObject() : val; @@ -185,128 +204,172 @@ SchemaArray.prototype.castForQuery = function ($conditional, value) { /*! * @ignore + * + * $atomic cast helpers */ function castToNumber (val) { return Types.Number.prototype.cast.call(this, val); } -function castArray (arr, self) { +function castArraysOfNumbers (arr, self) { self || (self = this); arr.forEach(function (v, i) { if (Array.isArray(v)) { - castArray(v, self); + castArraysOfNumbers(v, self); } else { arr[i] = castToNumber.call(self, v); } }); } -SchemaArray.prototype.$conditionalHandlers = { - '$all': function handle$all (val) { - if (!Array.isArray(val)) { - val = [val]; - } +function cast$near (val) { + if (Array.isArray(val)) { + castArraysOfNumbers(val, this); + return val; + } - val = val.map(function (v) { - if (v && 'Object' === v.constructor.name) { - var o = {}; - o[this.path] = v; - var query = new Query(o); - query.cast(this.casterConstructor); - return query._conditions[this.path]; - } - return v; - }, this); + if (val && val.$geometry) { + return cast$geometry(val, this); + } - return this.castForQuery(val); - } - , '$elemMatch': function (val) { - if (val.$in) { - val.$in = this.castForQuery('$in', val.$in); - return val; + return SchemaArray.prototype.castForQuery.call(this, val); +} + +function cast$geometry (val, self) { + switch (val.$geometry.type) { + case 'Polygon': + case 'LineString': + case 'Point': + castArraysOfNumbers(val.$geometry.coordinates, self); + break; + default: + // ignore unknowns + break; + } + + if (val.$maxDistance) { + val.$maxDistance = castToNumber.call(self, val.$maxDistance); + } + + return val; +} + +function cast$within (val) { + var self = this; + + if (val.$maxDistance) { + val.$maxDistance = castToNumber.call(self, val.$maxDistance); + } + + if (val.$box || val.$polygon) { + var type = val.$box ? '$box' : '$polygon'; + val[type].forEach(function (arr) { + if (!Array.isArray(arr)) { + var msg = 'Invalid $within $box argument. ' + + 'Expected an array, received ' + arr; + throw new TypeError(msg); + } + arr.forEach(function (v, i) { + arr[i] = castToNumber.call(this, v); + }); + }) + } else if (val.$center || val.$centerSphere) { + var type = val.$center ? '$center' : '$centerSphere'; + val[type].forEach(function (item, i) { + if (Array.isArray(item)) { + item.forEach(function (v, j) { + item[j] = castToNumber.call(this, v); + }); + } else { + val[type][i] = castToNumber.call(this, item); } + }) + } else if (val.$geometry) { + cast$geometry(val, this); + } + + return val; +} - var query = new Query(val); +function cast$all (val) { + if (!Array.isArray(val)) { + val = [val]; + } + + val = val.map(function (v) { + if (utils.isObject(v)) { + var o = {}; + o[this.path] = v; + var query = new Query(o); query.cast(this.casterConstructor); - return query._conditions; + return query._conditions[this.path]; } - , '$size': castToNumber - , '$ne': SchemaArray.prototype.castForQuery - , '$in': SchemaArray.prototype.castForQuery - , '$nin': SchemaArray.prototype.castForQuery - , '$regex': SchemaArray.prototype.castForQuery - , '$options': String - , '$near': SchemaArray.prototype.castForQuery - , '$nearSphere': SchemaArray.prototype.castForQuery - , '$gt': SchemaArray.prototype.castForQuery - , '$gte': SchemaArray.prototype.castForQuery - , '$lt': SchemaArray.prototype.castForQuery - , '$lte': SchemaArray.prototype.castForQuery - , '$within': function (val) { - var self = this; - - if (val.$maxDistance) { - val.$maxDistance = castToNumber.call(this, val.$maxDistance); - } + return v; + }, this); - if (val.$box || val.$polygon) { - var type = val.$box ? '$box' : '$polygon'; - val[type].forEach(function (arr) { - if (!Array.isArray(arr)) { - var msg = 'Invalid $within $box argument. ' - + 'Expected an array, received ' + arr; - throw new TypeError(msg); - } - arr.forEach(function (v, i) { - arr[i] = castToNumber.call(this, v); - }); - }) - } else if (val.$center || val.$centerSphere) { - var type = val.$center ? '$center' : '$centerSphere'; - val[type].forEach(function (item, i) { - if (Array.isArray(item)) { - item.forEach(function (v, j) { - item[j] = castToNumber.call(this, v); - }); - } else { - val[type][i] = castToNumber.call(this, item); - } - }) - } else if (val.$geometry) { - switch (val.$geometry.type) { - case 'Polygon': - case 'LineString': - case 'Point': - val.$geometry.coordinates.forEach(castArray); - break; - default: - // ignore unknowns - break; - } - } + return this.castForQuery(val); +} - return val; - } - , '$geoIntersects': function (val) { - var geo = val.$geometry; - if (!geo) return; - - switch (val.$geometry.type) { - case 'Polygon': - case 'LineString': - case 'Point': - val.$geometry.coordinates.forEach(castArray); - break; - default: - // ignore unknowns - break; - } - } - , '$maxDistance': castToNumber +function cast$elemMatch (val) { + if (val.$in) { + val.$in = this.castForQuery('$in', val.$in); + return val; + } + + var query = new Query(val); + query.cast(this.casterConstructor); + return query._conditions; +} + +function cast$geoIntersects (val) { + var geo = val.$geometry; + if (!geo) return; + + cast$geometry(val, this); + return val; +} + +var handle = SchemaArray.prototype.$conditionalHandlers = {}; + +handle.$all = cast$all; +handle.$options = String; +handle.$elemMatch = cast$elemMatch; +handle.$geoIntersects = cast$geoIntersects; +handle.$or = handle.$and = function(val) { + if (!Array.isArray(val)) { + throw new TypeError('conditional $or/$and require array'); + } + + var ret = []; + for (var i = 0; i < val.length; ++i) { + var query = new Query(val[i]); + query.cast(this.casterConstructor); + ret.push(query._conditions); + } + + return ret; }; +handle.$near = +handle.$nearSphere = cast$near; + +handle.$within = +handle.$geoWithin = cast$within; + +handle.$size = +handle.$maxDistance = castToNumber; + +handle.$regex = +handle.$ne = +handle.$in = +handle.$nin = +handle.$gt = +handle.$gte = +handle.$lt = +handle.$lte = SchemaArray.prototype.castForQuery; + /*! * Module exports. */ diff --git a/node_modules/mongoose/lib/schema/buffer.js b/node_modules/mongoose/lib/schema/buffer.js index 55c0628..dbaf193 100644 --- a/node_modules/mongoose/lib/schema/buffer.js +++ b/node_modules/mongoose/lib/schema/buffer.js @@ -98,14 +98,19 @@ SchemaBuffer.prototype.cast = function (value, doc, init) { return value; } else if (value instanceof Binary) { - return new MongooseBuffer(value.value(true), [this.path, doc]); + var ret = new MongooseBuffer(value.value(true), [this.path, doc]); + ret.subtype(value.sub_type); + // do not override Binary subtypes. users set this + // to whatever they want. + return ret; } if (null === value) return value; var type = typeof value; if ('string' == type || 'number' == type || Array.isArray(value)) { - return new MongooseBuffer(value, [this.path, doc]); + var ret = new MongooseBuffer(value, [this.path, doc]); + return ret; } throw new CastError('buffer', value, this.path); diff --git a/node_modules/mongoose/lib/schema/documentarray.js b/node_modules/mongoose/lib/schema/documentarray.js index 3b02887..ba3d4ac 100644 --- a/node_modules/mongoose/lib/schema/documentarray.js +++ b/node_modules/mongoose/lib/schema/documentarray.js @@ -123,6 +123,11 @@ DocumentArray.prototype.cast = function (value, doc, init, prev) { if (!(value instanceof MongooseDocumentArray)) { value = new MongooseDocumentArray(value, this.path, doc); + if (prev && prev._handlers) { + for (var key in prev._handlers) { + doc.removeListener(key, prev._handlers[key]); + } + } } i = value.length; @@ -134,7 +139,11 @@ DocumentArray.prototype.cast = function (value, doc, init, prev) { subdoc = new this.casterConstructor(null, value, true, selected); value[i] = subdoc.init(value[i]); } else { - if (prev && (subdoc = prev.id(value[i]._id))) { + try { + subdoc = prev.id(value[i]._id); + } catch(e) {} + + if (prev && subdoc) { // handle resetting doc with existing id but differing data // doc.array = [{ doc: 'val' }] subdoc.set(value[i]); diff --git a/node_modules/mongoose/lib/schema/mixed.js b/node_modules/mongoose/lib/schema/mixed.js index 6e2e4d3..c34eb39 100644 --- a/node_modules/mongoose/lib/schema/mixed.js +++ b/node_modules/mongoose/lib/schema/mixed.js @@ -47,7 +47,7 @@ Mixed.prototype.__proto__ = SchemaType.prototype; */ Mixed.prototype.checkRequired = function (val) { - return true; + return (val !== undefined) && (val !== null); }; /** diff --git a/node_modules/mongoose/lib/schema/number.js b/node_modules/mongoose/lib/schema/number.js index 1cdc56e..29a372f 100644 --- a/node_modules/mongoose/lib/schema/number.js +++ b/node_modules/mongoose/lib/schema/number.js @@ -4,6 +4,7 @@ var SchemaType = require('../schematype') , CastError = SchemaType.CastError + , errorMessages = require('../error').messages , utils = require('../utils') , Document @@ -54,21 +55,36 @@ SchemaNumber.prototype.checkRequired = function checkRequired (value, doc) { * m.save() // success * }) * + * // custom error messages + * // We can also use the special {MIN} token which will be replaced with the invalid value + * var min = [10, 'The value of path `{PATH}` ({VALUE}) is beneath the limit ({MIN}).']; + * var schema = new Schema({ n: { type: Number, min: min }) + * var M = mongoose.model('Measurement', schema); + * var s= new M({ n: 4 }); + * s.validate(function (err) { + * console.log(String(err)) // ValidationError: The value of path `n` (4) is beneath the limit (10). + * }) + * * @param {Number} value minimum number + * @param {String} [message] optional custom error message + * @return {SchemaType} this + * @see Customized Error Messages #error_messages_MongooseError-messages * @api public */ -SchemaNumber.prototype.min = function (value) { +SchemaNumber.prototype.min = function (value, message) { if (this.minValidator) { this.validators = this.validators.filter(function (v) { - return 'min' != v[1]; - }); + return v[0] != this.minValidator; + }, this); } - if (value != null) { + if (null != value) { + var msg = message || errorMessages.Number.min; + msg = msg.replace(/{MIN}/, value); this.validators.push([this.minValidator = function (v) { return v === null || v >= value; - }, 'min']); + }, msg, 'min']); } return this; @@ -88,21 +104,36 @@ SchemaNumber.prototype.min = function (value) { * m.save() // success * }) * + * // custom error messages + * // We can also use the special {MAX} token which will be replaced with the invalid value + * var max = [10, 'The value of path `{PATH}` ({VALUE}) exceeds the limit ({MAX}).']; + * var schema = new Schema({ n: { type: Number, max: max }) + * var M = mongoose.model('Measurement', schema); + * var s= new M({ n: 4 }); + * s.validate(function (err) { + * console.log(String(err)) // ValidationError: The value of path `n` (4) exceeds the limit (10). + * }) + * * @param {Number} maximum number + * @param {String} [message] optional custom error message + * @return {SchemaType} this + * @see Customized Error Messages #error_messages_MongooseError-messages * @api public */ -SchemaNumber.prototype.max = function (value) { +SchemaNumber.prototype.max = function (value, message) { if (this.maxValidator) { this.validators = this.validators.filter(function(v){ - return 'max' != v[1]; - }); + return v[0] != this.maxValidator; + }, this); } - if (value != null) { + if (null != value) { + var msg = message || errorMessages.Number.max; + msg = msg.replace(/{MAX}/, value); this.validators.push([this.maxValidator = function(v){ return v === null || v <= value; - }, 'max']); + }, msg, 'max']); } return this; diff --git a/node_modules/mongoose/lib/schema/objectid.js b/node_modules/mongoose/lib/schema/objectid.js index 65ef132..664f686 100644 --- a/node_modules/mongoose/lib/schema/objectid.js +++ b/node_modules/mongoose/lib/schema/objectid.js @@ -28,6 +28,22 @@ function ObjectId (key, options) { ObjectId.prototype.__proto__ = SchemaType.prototype; +/** + * Adds an auto-generated ObjectId default if turnOn is true. + * @param {Boolean} turnOn auto generated ObjectId defaults + * @api public + * @return {SchemaType} this + */ + +ObjectId.prototype.auto = function (turnOn) { + if (turnOn) { + this.default(defaultId); + this.set(resetId) + } + + return this; +}; + /** * Check required * @@ -95,7 +111,7 @@ ObjectId.prototype.cast = function (value, doc, init) { if (value.toString) { try { - return oid.fromString(value.toString()); + return oid.createFromHexString(value.toString()); } catch (err) { throw new CastError('ObjectId', value, this.path); } @@ -150,19 +166,6 @@ ObjectId.prototype.castForQuery = function ($conditional, val) { } }; -/** - * Adds an auto-generated ObjectId default if turnOn is true. - * @param {Boolean} turnOn auto generated ObjectId defaults - * @api public - */ - -ObjectId.prototype.auto = function (turnOn) { - if (turnOn) { - this.default(defaultId); - this.set(resetId) - } -}; - /*! * ignore */ diff --git a/node_modules/mongoose/lib/schema/string.js b/node_modules/mongoose/lib/schema/string.js index 6981ff3..edcf19e 100644 --- a/node_modules/mongoose/lib/schema/string.js +++ b/node_modules/mongoose/lib/schema/string.js @@ -5,6 +5,7 @@ var SchemaType = require('../schematype') , CastError = SchemaType.CastError + , errorMessages = require('../error').messages , utils = require('../utils') , Document @@ -30,49 +31,76 @@ function SchemaString (key, options) { SchemaString.prototype.__proto__ = SchemaType.prototype; /** - * Adds enumeration values and a coinciding validator. + * Adds an enum validator * * ####Example: * * var states = 'opening open closing closed'.split(' ') - * var s = new Schema({ state: { type: String, enum: states }) + * var s = new Schema({ state: { type: String, enum: states }}) * var M = db.model('M', s) * var m = new M({ state: 'invalid' }) * m.save(function (err) { - * console.error(err) // validator error + * console.error(String(err)) // ValidationError: `invalid` is not a valid enum value for path `state`. * m.state = 'open' - * m.save() // success + * m.save(callback) // success * }) * - * @param {String} [args...] enumeration values + * // or with custom error messages + * var enu = { + * values: 'opening open closing closed'.split(' '), + * message: 'enum validator failed for path `{PATH}` with value `{VALUE}`' + * } + * var s = new Schema({ state: { type: String, enum: enu }) + * var M = db.model('M', s) + * var m = new M({ state: 'invalid' }) + * m.save(function (err) { + * console.error(String(err)) // ValidationError: enum validator failed for path `state` with value `invalid` + * m.state = 'open' + * m.save(callback) // success + * }) + * + * @param {String|Object} [args...] enumeration values + * @return {SchemaType} this + * @see Customized Error Messages #error_messages_MongooseError-messages * @api public */ SchemaString.prototype.enum = function () { - var len = arguments.length; - if (!len || undefined === arguments[0] || false === arguments[0]) { - if (this.enumValidator){ - this.enumValidator = false; - this.validators = this.validators.filter(function(v){ - return v[1] != 'enum'; - }); - } - return; + if (this.enumValidator) { + this.validators = this.validators.filter(function(v){ + return v[0] != this.enumValidator; + }, this); + this.enumValidator = false; } - for (var i = 0; i < len; i++) { - if (undefined !== arguments[i]) { - this.enumValues.push(this.cast(arguments[i])); - } + if (undefined === arguments[0] || false === arguments[0]) { + return this; + } + + var values; + var errorMessage; + + if (utils.isObject(arguments[0])) { + values = arguments[0].values; + errorMessage = arguments[0].message; + } else { + values = arguments; + errorMessage = errorMessages.String.enum; } - if (!this.enumValidator) { - var values = this.enumValues; - this.enumValidator = function(v){ - return undefined === v || ~values.indexOf(v); - }; - this.validators.push([this.enumValidator, 'enum']); + for (var i = 0; i < values.length; i++) { + if (undefined !== values[i]) { + this.enumValues.push(this.cast(values[i])); + } } + + var vals = this.enumValues; + this.enumValidator = function (v) { + return undefined === v || ~vals.indexOf(v); + }; + this.validators.push([this.enumValidator, errorMessage, 'enum']); + + return this; }; /** @@ -86,6 +114,7 @@ SchemaString.prototype.enum = function () { * console.log(m.email) // someemail@example.com * * @api public + * @return {SchemaType} this */ SchemaString.prototype.lowercase = function () { @@ -107,6 +136,7 @@ SchemaString.prototype.lowercase = function () { * console.log(m.caps) // AN EXAMPLE * * @api public + * @return {SchemaType} this */ SchemaString.prototype.uppercase = function () { @@ -132,6 +162,7 @@ SchemaString.prototype.uppercase = function () { * console.log(m.name.length) // 9 * * @api public + * @return {SchemaType} this */ SchemaString.prototype.trim = function () { @@ -151,25 +182,48 @@ SchemaString.prototype.trim = function () { * * var s = new Schema({ name: { type: String, match: /^a/ }}) * var M = db.model('M', s) - * var m = new M({ name: 'invalid' }) + * var m = new M({ name: 'I am invalid' }) * m.validate(function (err) { - * console.error(err) // validation error + * console.error(String(err)) // "ValidationError: Path `name` is invalid (I am invalid)." * m.name = 'apples' * m.validate(function (err) { * assert.ok(err) // success * }) * }) * + * // using a custom error message + * var match = [ /\.html$/, "That file doesn't end in .html ({VALUE})" ]; + * var s = new Schema({ file: { type: String, match: match }}) + * var M = db.model('M', s); + * var m = new M({ file: 'invalid' }); + * m.validate(function (err) { + * console.log(String(err)) // "ValidationError: That file doesn't end in .html (invalid)" + * }) + * + * Empty strings, `undefined`, and `null` values always pass the match validator. If you require these values, enable the `required` validator also. + * + * var s = new Schema({ name: { type: String, match: /^a/, required: true }}) + * * @param {RegExp} regExp regular expression to test against + * @param {String} [message] optional custom error message + * @return {SchemaType} this + * @see Customized Error Messages #error_messages_MongooseError-messages * @api public */ -SchemaString.prototype.match = function match (regExp) { - this.validators.push([function(v){ +SchemaString.prototype.match = function match (regExp, message) { + // yes, we allow multiple match validators + + var msg = message || errorMessages.String.match; + + function matchValidator (v){ return null != v && '' !== v ? regExp.test(v) : true - }, 'regexp']); + } + + this.validators.push([matchValidator, msg, 'regexp']); + return this; }; /** diff --git a/node_modules/mongoose/lib/schematype.js b/node_modules/mongoose/lib/schematype.js index d5dc7fd..5030215 100644 --- a/node_modules/mongoose/lib/schematype.js +++ b/node_modules/mongoose/lib/schematype.js @@ -3,8 +3,10 @@ */ var utils = require('./utils'); -var CastError = require('./error').CastError; -var ValidatorError = require('./error').ValidatorError; +var error = require('./error'); +var errorMessages = error.messages; +var CastError = error.CastError; +var ValidatorError = error.ValidatorError; /** * SchemaType constructor @@ -55,7 +57,25 @@ function SchemaType (path, options, instance) { * var schema = new Schema({ aNumber: Number, default: "4.815162342" }) * var M = db.model('M', schema) * var m = new M; - * console.log(m.aNumber, typeof m.aNumber) // 4.815162342 "number" + * console.log(m.aNumber) // 4.815162342 + * + * // default unique objects for Mixed types: + * var schema = new Schema({ mixed: Schema.Types.Mixed }); + * schema.path('mixed').default(function () { + * return {}; + * }); + * + * // if we don't use a function to return object literals for Mixed defaults, + * // each document will receive a reference to the same object literal creating + * // a "shared" object instance: + * var schema = new Schema({ mixed: Schema.Types.Mixed }); + * schema.path('mixed').default({}); + * var M = db.model('M', schema); + * var m1 = new M; + * m1.mixed.added = 1; + * console.log(m1.mixed); // { added: 1 } + * var m2 = new M; + * console.log(m2.mixed); // { added: 1 } * * @param {Function|any} val the default value * @return {defaultValue} @@ -307,42 +327,50 @@ SchemaType.prototype.get = function (fn) { /** * Adds validator(s) for this document path. * - * Validators always receive the value to validate as their first argument and must return `Boolean`. Returning false is interpreted as validation failure. + * Validators always receive the value to validate as their first argument and must return `Boolean`. Returning `false` means validation failed. + * + * The error message argument is optional. If not passed, the [default generic error message template](#error_messages_MongooseError-messages) will be used. * * ####Examples: * + * // make sure every value is equal to "something" * function validator (val) { * return val == 'something'; * } - * * new Schema({ name: { type: String, validate: validator }}); * * // with a custom error message * - * var custom = [validator, 'validation failed'] + * var custom = [validator, 'Uh oh, {PATH} does not equal "something".'] * new Schema({ name: { type: String, validate: custom }}); * + * // adding many validators at a time + * * var many = [ * { validator: validator, msg: 'uh oh' } - * , { validator: fn, msg: 'failed' } + * , { validator: anotherValidator, msg: 'failed' } * ] * new Schema({ name: { type: String, validate: many }}); * * // or utilizing SchemaType methods directly: * * var schema = new Schema({ name: 'string' }); - * schema.path('name').validate(validator, 'validation failed'); + * schema.path('name').validate(validator, 'validation of `{PATH}` failed with value `{VALUE}`'); + * + * ####Error message templates: + * + * From the examples above, you may have noticed that error messages support baseic templating. There are a few other template keywords besides `{PATH}` and `{VALUE}` too. To find out more, details are available [here](#error_messages_MongooseError-messages) * * ####Asynchronous validation: * - * Passing a validator function that receives two arguments tells mongoose that the validator is an asynchronous validator. The second argument is an callback function that must be passed either `true` or `false` when validation is complete. + * Passing a validator function that receives two arguments tells mongoose that the validator is an asynchronous validator. The first argument passed to the validator function is the value being validated. The second argument is a callback function that must called when you finish validating the value and passed either `true` or `false` to communicate either success or failure respectively. * * schema.path('name').validate(function (value, respond) { * doStuff(value, function () { * ... * respond(false); // validation failed * }) -* }, 'my error type'); +* }, '{PATH} failed validation.'); * * You might use asynchronous validators to retreive other documents from the database to validate against or to meet other I/O bound validation needs. * @@ -363,13 +391,15 @@ SchemaType.prototype.get = function (fn) { * Product.on('error', handleError); * * @param {RegExp|Function|Object} obj validator - * @param {String} [error] optional error message + * @param {String} [errorMsg] optional error message + * @return {SchemaType} this * @api public */ -SchemaType.prototype.validate = function (obj, error) { +SchemaType.prototype.validate = function (obj, message) { if ('function' == typeof obj || obj && 'RegExp' === obj.constructor.name) { - this.validators.push([obj, error]); + if (!message) message = errorMessages.general.default; + this.validators.push([obj, message, 'user defined']); return this; } @@ -397,19 +427,41 @@ SchemaType.prototype.validate = function (obj, error) { * ####Example: * * var s = new Schema({ born: { type: Date, required: true }) - * // or + * + * // or with custom error message + * + * var s = new Schema({ born: { type: Date, required: '{PATH} is required!' }) + * + * // or through the path API + * * Schema.path('name').required(true); * + * // with custom error messaging + * + * Schema.path('name').required(true, 'grrr :( '); + * * * @param {Boolean} required enable/disable the validator + * @param {String} [message] optional custom error message * @return {SchemaType} this + * @see Customized Error Messages #error_messages_MongooseError-messages * @api public */ -SchemaType.prototype.required = function (required) { +SchemaType.prototype.required = function (required, message) { + if (false === required) { + this.validators = this.validators.filter(function (v) { + return v[0] != this.requiredValidator; + }, this); + + this.isRequired = false; + return this; + } + var self = this; + this.isRequired = true; - function __checkRequired (v) { + this.requiredValidator = function (v) { // in here, `this` refers to the validating document. // no validation when this path wasn't selected in the query. if ('isSelected' in this && @@ -418,16 +470,14 @@ SchemaType.prototype.required = function (required) { return self.checkRequired(v, this); } - if (false === required) { - this.isRequired = false; - this.validators = this.validators.filter(function (v) { - return v[0].name !== '__checkRequired'; - }); - } else { - this.isRequired = true; - this.validators.push([__checkRequired, 'required']); + if ('string' == typeof required) { + message = required; + required = undefined; } + var msg = message || errorMessages.general.required; + this.validators.push([this.requiredValidator, msg, 'required']); + return this; }; @@ -527,11 +577,13 @@ SchemaType.prototype.applyGetters = function (value, scope) { * T.find().select('-x').exec(callback); * * @param {Boolean} val + * @return {SchemaType} this * @api public */ SchemaType.prototype.select = function select (val) { this.selected = !! val; + return this; } /** @@ -550,28 +602,29 @@ SchemaType.prototype.doValidate = function (value, fn, scope) { if (!count) return fn(null); - function validate (ok, msg, val) { + function validate (ok, message, type, val) { if (err) return; if (ok === undefined || ok) { --count || fn(null); } else { - fn(err = new ValidatorError(path, msg, val)); + fn(err = new ValidatorError(path, message, type, val)); } } this.validators.forEach(function (v) { var validator = v[0] - , message = v[1]; + , message = v[1] + , type = v[2]; if (validator instanceof RegExp) { - validate(validator.test(value), message, value); + validate(validator.test(value), message, type, value); } else if ('function' === typeof validator) { if (2 === validator.length) { validator.call(scope, value, function (ok) { - validate(ok, message, value); + validate(ok, message, type, value); }); } else { - validate(validator.call(scope, value), message, value); + validate(validator.call(scope, value), message, type, value); } } }); diff --git a/node_modules/mongoose/lib/types/array.js b/node_modules/mongoose/lib/types/array.js index e0d7700..143da94 100644 --- a/node_modules/mongoose/lib/types/array.js +++ b/node_modules/mongoose/lib/types/array.js @@ -650,9 +650,7 @@ MongooseArray.prototype.toObject = function (options) { */ MongooseArray.prototype.inspect = function () { - return '[' + this.map(function (doc) { - return ' ' + doc; - }) + ' ]'; + return JSON.stringify(this); }; /** diff --git a/node_modules/mongoose/lib/types/buffer.js b/node_modules/mongoose/lib/types/buffer.js index d84370b..bb41e4b 100644 --- a/node_modules/mongoose/lib/types/buffer.js +++ b/node_modules/mongoose/lib/types/buffer.js @@ -62,6 +62,7 @@ function MongooseBuffer (value, encode, offset) { }); } + buf._subtype = 0; return buf; }; @@ -80,6 +81,15 @@ MongooseBuffer.prototype = new Buffer(0); MongooseBuffer.prototype._parent; +/** + * Default subtype for the Binary representing this Buffer + * + * @api private + * @property _subtype + */ + +MongooseBuffer.prototype._subtype; + /** * Marks this buffer as modified. * @@ -158,12 +168,15 @@ MongooseBuffer.prototype.copy = function (target) { * * ####SubTypes: * - * - 0x00: Binary/Generic - * - 0x01: Function - * - 0x02: Binary (Deprecated, 0x00 is new default) - * - 0x03: UUID - * - 0x04: MD5 - * - 0x80: User Defined + * var bson = require('bson') + * bson.BSON_BINARY_SUBTYPE_DEFAULT + * bson.BSON_BINARY_SUBTYPE_FUNCTION + * bson.BSON_BINARY_SUBTYPE_BYTE_ARRAY + * bson.BSON_BINARY_SUBTYPE_UUID + * bson.BSON_BINARY_SUBTYPE_MD5 + * bson.BSON_BINARY_SUBTYPE_USER_DEFINED + * + * doc.buffer.toObject(bson.BSON_BINARY_SUBTYPE_USER_DEFINED); * * @see http://bsonspec.org/#/specification * @param {Hex} [subtype] @@ -174,7 +187,7 @@ MongooseBuffer.prototype.copy = function (target) { MongooseBuffer.prototype.toObject = function (options) { var subtype = 'number' == typeof options ? options - : 0x00; + : (this._subtype || 0); return new Binary(this, subtype); }; @@ -201,6 +214,38 @@ MongooseBuffer.prototype.equals = function (other) { return true; } +/** + * Sets the subtype option and marks the buffer modified. + * + * ####SubTypes: + * + * var bson = require('bson') + * bson.BSON_BINARY_SUBTYPE_DEFAULT + * bson.BSON_BINARY_SUBTYPE_FUNCTION + * bson.BSON_BINARY_SUBTYPE_BYTE_ARRAY + * bson.BSON_BINARY_SUBTYPE_UUID + * bson.BSON_BINARY_SUBTYPE_MD5 + * bson.BSON_BINARY_SUBTYPE_USER_DEFINED + * + * doc.buffer.subtype(bson.BSON_BINARY_SUBTYPE_UUID); + * + * @see http://bsonspec.org/#/specification + * @param {Hex} subtype + * @api public + */ + +MongooseBuffer.prototype.subtype = function (subtype) { + if ('number' != typeof subtype) { + throw new TypeError('Invalid subtype. Expected a number'); + } + + if (this._subtype != subtype) { + this._markModified(); + } + + this._subtype = subtype; +} + /*! * Module exports. */ diff --git a/node_modules/mongoose/lib/types/documentarray.js b/node_modules/mongoose/lib/types/documentarray.js index d5ca8de..a6120d3 100644 --- a/node_modules/mongoose/lib/types/documentarray.js +++ b/node_modules/mongoose/lib/types/documentarray.js @@ -9,6 +9,7 @@ var MongooseArray = require('./array') , ObjectIdSchema = require('../schema/objectid') , utils = require('../utils') , util = require('util') + , Document = require('../document') /** * DocumentArray constructor @@ -37,8 +38,12 @@ function MongooseDocumentArray (values, path, doc) { if (doc) { arr._parent = doc; arr._schema = doc.schema.path(path); - doc.on('save', arr.notify('save')); - doc.on('isNew', arr.notify('isNew')); + arr._handlers = { + isNew: arr.notify('isNew'), + save: arr.notify('save') + } + doc.on('save', arr._handlers.save); + doc.on('isNew', arr._handlers.isNew); } return arr; @@ -86,6 +91,7 @@ MongooseDocumentArray.prototype._cast = function (value) { * * @return {EmbeddedDocument|null} the subdocuent or null if not found. * @param {ObjectId|String|Number|Buffer} id + * @TODO cast to the _id based on schema for proper comparison * @api public */ @@ -95,20 +101,23 @@ MongooseDocumentArray.prototype.id = function (id) { , _id try { - casted = ObjectId.toString(ObjectIdSchema.prototype.cast.call({}, id)); + var casted_ = ObjectIdSchema.prototype.cast.call({}, id); + if (casted_) casted = String(casted_); } catch (e) { casted = null; } for (var i = 0, l = this.length; i < l; i++) { _id = this[i].get('_id'); - if (!(_id instanceof ObjectId)) { + + if (_id instanceof Document) { + sid || (sid = String(id)); + if (sid == _id._id) return this[i]; + } else if (!(_id instanceof ObjectId)) { sid || (sid = String(id)); - if (sid == _id) - return this[i]; - } else { - if (casted == _id) - return this[i]; + if (sid == _id) return this[i]; + } else if (casted == _id) { + return this[i]; } } @@ -177,6 +186,15 @@ MongooseDocumentArray.prototype.notify = function notify (event) { var i = self.length; while (i--) { if (!self[i]) continue; + switch(event) { + // only swap for save event for now, we may change this to all event types later + case 'save': + val = self[i]; + break; + default: + // NO-OP + break; + } self[i].emit(event, val); } } diff --git a/node_modules/mongoose/lib/types/embedded.js b/node_modules/mongoose/lib/types/embedded.js index 6de36e6..e196306 100644 --- a/node_modules/mongoose/lib/types/embedded.js +++ b/node_modules/mongoose/lib/types/embedded.js @@ -55,14 +55,14 @@ EmbeddedDocument.prototype.markModified = function (path) { if (!this.__parentArray) return; this.$__.activePaths.modify(path); - if (this.isNew) { // Mark the WHOLE parent array as modified // if this is a new document (i.e., we are initializing // a document), this.__parentArray._markModified(); - } else + } else { this.__parentArray._markModified(this, path); + } }; /** @@ -102,6 +102,7 @@ EmbeddedDocument.prototype.remove = function (fn) { } this.__parentArray.pull({ _id: _id }); this.willRemove = true; + registerRemoveListener(this); } if (fn) @@ -110,6 +111,28 @@ EmbeddedDocument.prototype.remove = function (fn) { return this; }; +/*! + * Registers remove event listeners for triggering + * on subdocuments. + * + * @param {EmbeddedDocument} sub + * @api private + */ + +function registerRemoveListener (sub) { + var owner = sub.ownerDocument(); + + owner.on('save', emitRemove); + owner.on('remove', emitRemove); + + function emitRemove () { + owner.removeListener('save', emitRemove); + owner.removeListener('remove', emitRemove); + sub.emit('remove', sub); + owner = sub = emitRemove = null; + }; +}; + /** * Override #update method of parent documents. * @api private diff --git a/node_modules/mongoose/lib/types/objectid.js b/node_modules/mongoose/lib/types/objectid.js index 44ad43f..1282b91 100644 --- a/node_modules/mongoose/lib/types/objectid.js +++ b/node_modules/mongoose/lib/types/objectid.js @@ -18,26 +18,3 @@ var driver = global.MONGOOSE_DRIVER_PATH || '../drivers/node-mongodb-native'; var ObjectId = require(driver + '/objectid'); module.exports = ObjectId; -/** - * Creates an ObjectId from `str` - * - * @param {ObjectId|HexString} str - * @static fromString - * @receiver ObjectId - * @return {ObjectId} - * @api private - */ - -ObjectId.fromString; - -/** - * Converts `oid` to a string. - * - * @param {ObjectId} oid ObjectId instance - * @static toString - * @receiver ObjectId - * @return {String} - * @api private - */ - -ObjectId.toString; diff --git a/node_modules/mongoose/lib/utils.js b/node_modules/mongoose/lib/utils.js index 678a7a8..e3f6160 100644 --- a/node_modules/mongoose/lib/utils.js +++ b/node_modules/mongoose/lib/utils.js @@ -20,9 +20,11 @@ var ReadPref = require('mongodb').ReadPreference * @api private */ -exports.toCollectionName = function (name) { +exports.toCollectionName = function (name, options) { + options = options || {}; if ('system.profile' === name) return name; if ('system.indexes' === name) return name; + if (options.pluralization === false) return name; return pluralize(name.toLowerCase()); }; @@ -54,6 +56,7 @@ exports.pluralization = [ [/([m|l])ouse$/gi, '$1ice'], [/(quiz)$/gi, '$1zes'], [/s$/gi, 's'], + [/([^a-z])$/, '$1'], [/$/gi, 's'] ]; var rules = exports.pluralization; @@ -157,12 +160,7 @@ exports.deepEqual = function deepEqual (a, b) { } if (Buffer.isBuffer(a)) { - if (!Buffer.isBuffer(b)) return false; - if (a.length !== b.length) return false; - for (var i = 0, len = a.length; i < len; ++i) { - if (a[i] !== b[i]) return false; - } - return true; + return exports.buffer.areEqual(a, b); } if (isMongooseObject(a)) a = a.toObject(); @@ -355,18 +353,14 @@ exports.random = function () { exports.merge = function merge (to, from) { var keys = Object.keys(from) , i = keys.length - , key + , key; while (i--) { key = keys[i]; if ('undefined' === typeof to[key]) { to[key] = from[key]; - } else { - if (exports.isObject(from[key])) { - merge(to[key], from[key]); - } else { - to[key] = from[key]; - } + } else if (exports.isObject(from[key])) { + merge(to[key], from[key]); } } }; @@ -478,6 +472,10 @@ exports.readPref = function readPref (pref, tags) { pref = pref[0]; } + if (pref instanceof ReadPref) { + return pref; + } + switch (pref) { case 'p': pref = 'primary'; @@ -622,8 +620,9 @@ exports.object.shallowCopy = exports.options; * @param {String} prop */ +var hop = Object.prototype.hasOwnProperty; exports.object.hasOwnProperty = function (obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); + return hop.call(obj, prop); } /*! @@ -669,3 +668,52 @@ exports.array.flatten = function flatten (arr, filter, ret) { return ret; } +/*! + * Determines if two buffers are equal. + * + * @param {Buffer} a + * @param {Object} b + */ + +exports.buffer = {}; +exports.buffer.areEqual = function (a, b) { + if (!Buffer.isBuffer(a)) return false; + if (!Buffer.isBuffer(b)) return false; + if (a.length !== b.length) return false; + for (var i = 0, len = a.length; i < len; ++i) { + if (a[i] !== b[i]) return false; + } + return true; +} + +/** + * merges to with a copy of from + * + * @param {Object} to + * @param {Object} from + * @api private + */ + +exports.mergeClone = function(to, from) { + var keys = Object.keys(from) + , i = keys.length + , key + + while (i--) { + key = keys[i]; + if ('undefined' === typeof to[key]) { + // make sure to retain key order here because of a bug handling the $each + // operator in mongodb 2.4.4 + to[key] = exports.clone(from[key], { retainKeyOrder : 1}); + } else { + if (exports.isObject(from[key])) { + exports.mergeClone(to[key], from[key]); + } else { + // make sure to retain key order here because of a bug handling the + // $each operator in mongodb 2.4.4 + to[key] = exports.clone(from[key], { retainKeyOrder : 1}); + } + } + } +} + diff --git a/node_modules/mongoose/node_modules/mongodb/.travis.yml b/node_modules/mongoose/node_modules/mongodb/.travis.yml index 0140117..a55b235 100644 --- a/node_modules/mongoose/node_modules/mongodb/.travis.yml +++ b/node_modules/mongoose/node_modules/mongodb/.travis.yml @@ -1,5 +1,5 @@ language: node_js node_js: - - 0.6 - 0.8 - - 0.10 # development version of 0.8, may be unstable \ No newline at end of file + - 0.10 + - 0.11 \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/CONTRIBUTING.md b/node_modules/mongoose/node_modules/mongodb/CONTRIBUTING.md index 2a1c52e..c23e426 100644 --- a/node_modules/mongoose/node_modules/mongodb/CONTRIBUTING.md +++ b/node_modules/mongoose/node_modules/mongodb/CONTRIBUTING.md @@ -2,7 +2,7 @@ ### Bugfixes -- Before starting to write code, look for existing [tickets](https://github.com/mongodb/node-mongodb-native/issues) or [create one](https://github.com/mongodb/node-mongodb-native/issues/new) for your specific issue. That way you avoid working on something that might not be of interest or that has been addressed already in a different branch. +- Before starting to write code, look for existing [tickets](https://jira.mongodb.org/browse/NODE) or [create one](https://jira.mongodb.org/secure/CreateIssue!default.jspa) for your specific issue under the "Node Driver" project. That way you avoid working on something that might not be of interest or that has been addressed already in a different branch. - Fork the [repo](https://github.com/mongodb/node-mongodb-native) _or_ for small documentation changes, navigate to the source on github and click the [Edit](https://github.com/blog/844-forking-with-the-edit-button) button. - Follow the general coding style of the rest of the project: - 2 space tabs @@ -14,10 +14,10 @@ - `for(..) {` - `while(..) {` - `function(err) {` -- Write tests and make sure they pass (execute `make test` from the cmd line to run the test suite). +- Write tests and make sure they pass (execute `npm test` from the cmd line to run the test suite). ### Documentation To contribute to the [API documentation](http://mongodb.github.com/node-mongodb-native/) just make your changes to the inline documentation of the appropriate [source code](https://github.com/mongodb/node-mongodb-native/tree/master/docs) in the master branch and submit a [pull request](https://help.github.com/articles/using-pull-requests/). You might also use the github [Edit](https://github.com/blog/844-forking-with-the-edit-button) button. -If you'd like to preview your documentation changes, first commit your changes to your local master branch, then execute `make generate_docs`. Make sure you have the python documentation framework sphinx installed `easy_install sphinx`. The docs are generated under `docs/build'. If all looks good, submit a [pull request](https://help.github.com/articles/using-pull-requests/) to the master branch with your changes. \ No newline at end of file +If you'd like to preview your documentation changes, first commit your changes to your local master branch, then execute `make generate_docs`. Make sure you have the python documentation framework sphinx installed `easy_install sphinx`. The docs are generated under `docs/build'. If all looks good, submit a [pull request](https://help.github.com/articles/using-pull-requests/) to the master branch with your changes. diff --git a/node_modules/mongoose/node_modules/mongodb/Readme.md b/node_modules/mongoose/node_modules/mongodb/Readme.md index 306fde7..66dd46e 100644 --- a/node_modules/mongoose/node_modules/mongodb/Readme.md +++ b/node_modules/mongoose/node_modules/mongodb/Readme.md @@ -1,10 +1,38 @@ -Up to date documentation -======================== +## MongoDB Node.JS Driver + +| what | where | +|---------------|------------------------------------------------| +| documentation | http://mongodb.github.io/node-mongodb-native/ | +| apidoc | http://mongodb.github.io/node-mongodb-native/ | +| source | https://github.com/mongodb/node-mongodb-native | +| mongodb | http://www.mongodb.org/ | -[Documentation](http://mongodb.github.com/node-mongodb-native/) +### Blogs of Engineers involved in the driver +- Christian Kvalheim [@christkv](https://twitter.com/christkv) +- Valeri Karpov [@code_barbarian](https://twitter.com/code_barbarian) -Install -======= +### Bugs / Feature Requests + +Think you’ve found a bug? Want to see a new feature in node-mongodb-native? Please open a +case in our issue management tool, JIRA: + +- Create an account and login . +- Navigate to the NODE project . +- Click **Create Issue** - Please provide as much information as possible about the issue type and how to reproduce it. + +Bug reports in JIRA for all driver projects (i.e. NODE, PYTHON, CSHARP, JAVA) and the +Core Server (i.e. SERVER) project are **public**. + +### Questions and Bug Reports + + * mailing list: https://groups.google.com/forum/#!forum/node-mongodb-native + * jira: http://jira.mongodb.org/ + +### Change Log + +http://jira.mongodb.org/browse/NODE + +## Install To install the most recent release from npm, run: @@ -16,96 +44,85 @@ To install the latest from the repository, run:: npm install path/to/node-mongodb-native -Community -========= -Check out the google group [node-mongodb-native](http://groups.google.com/group/node-mongodb-native) for questions/answers from users of the driver. - -Live Examples -============ +## Live Examples -Introduction -============ +## Introduction This is a node.js driver for MongoDB. It's a port (or close to a port) of the library for ruby at http://github.com/mongodb/mongo-ruby-driver/. A simple example of inserting a document. ```javascript - var client = new Db('test', new Server("127.0.0.1", 27017, {}), {w: 1}), - test = function (err, collection) { - collection.insert({a:2}, function(err, docs) { - - collection.count(function(err, count) { - test.assertEquals(1, count); - }); - - // Locate all the entries using find - collection.find().toArray(function(err, results) { - test.assertEquals(1, results.length); - test.assertTrue(results[0].a === 2); - - // Let's close the db - client.close(); - }); - }); - }; + var MongoClient = require('mongodb').MongoClient + , format = require('util').format; - client.open(function(err, p_client) { - client.collection('test_insert', test); + MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { + if(err) throw err; + + var collection = db.collection('test_insert'); + collection.insert({a:2}, function(err, docs) { + + collection.count(function(err, count) { + console.log(format("count = %s", count)); + }); + + // Locate all the entries using find + collection.find().toArray(function(err, results) { + console.dir(results); + // Let's close the db + db.close(); + }); }); + }) ``` -Data types -========== +## Data types To store and retrieve the non-JSON MongoDb primitives ([ObjectID](http://www.mongodb.org/display/DOCS/Object+IDs), Long, Binary, [Timestamp](http://www.mongodb.org/display/DOCS/Timestamp+data+type), [DBRef](http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef), Code). In particular, every document has a unique `_id` which can be almost any type, and by default a 12-byte ObjectID is created. ObjectIDs can be represented as 24-digit hexadecimal strings, but you must convert the string back into an ObjectID before you can use it in the database. For example: ```javascript - // Get the objectID type - var ObjectID = require('mongodb').ObjectID; + // Get the objectID type + var ObjectID = require('mongodb').ObjectID; - var idString = '4e4e1638c85e808431000003'; - collection.findOne({_id: new ObjectID(idString)}, console.log) // ok - collection.findOne({_id: idString}, console.log) // wrong! callback gets undefined + var idString = '4e4e1638c85e808431000003'; + collection.findOne({_id: new ObjectID(idString)}, console.log) // ok + collection.findOne({_id: idString}, console.log) // wrong! callback gets undefined ``` Here are the constructors the non-Javascript BSON primitive types: ```javascript - // Fetch the library - var mongo = require('mongodb'); - // Create new instances of BSON types - new mongo.Long(numberString) - new mongo.ObjectID(hexString) - new mongo.Timestamp() // the actual unique number is generated on insert. - new mongo.DBRef(collectionName, id, dbName) - new mongo.Binary(buffer) // takes a string or Buffer - new mongo.Code(code, [context]) - new mongo.Symbol(string) - new mongo.MinKey() - new mongo.MaxKey() - new mongo.Double(number) // Force double storage + // Fetch the library + var mongo = require('mongodb'); + // Create new instances of BSON types + new mongo.Long(numberString) + new mongo.ObjectID(hexString) + new mongo.Timestamp() // the actual unique number is generated on insert. + new mongo.DBRef(collectionName, id, dbName) + new mongo.Binary(buffer) // takes a string or Buffer + new mongo.Code(code, [context]) + new mongo.Symbol(string) + new mongo.MinKey() + new mongo.MaxKey() + new mongo.Double(number) // Force double storage ``` -The C/C++ bson parser/serializer --------------------------------- +### The C/C++ bson parser/serializer If you are running a version of this library has the C/C++ parser compiled, to enable the driver to use the C/C++ bson parser pass it the option native_parser:true like below ```javascript - // using native_parser: - var client = new Db('integration_tests_20', - new Server("127.0.0.1", 27017), - {native_parser:true}); + // using native_parser: + MongoClient.connect('mongodb://127.0.0.1:27017/test' + , {db: {native_parser: true}}, function(err, db) {}) ``` The C++ parser uses the js objects both for serialization and deserialization. -GitHub information -================== +## GitHub information The source code is available at http://github.com/mongodb/node-mongodb-native. You can either clone the repository or download a tarball of the latest release. @@ -116,27 +133,24 @@ Once you have the source you can test the driver by running in the main directory. You will need to have a mongo instance running on localhost for the integration tests to pass. -Examples -======== +## Examples For examples look in the examples/ directory. You can execute the examples using node. $ cd examples $ node queries.js -GridStore -========= +## GridStore The GridStore class allows for storage of binary files in mongoDB using the mongoDB defined files and chunks collection definition. For more information have a look at [Gridstore](https://github.com/mongodb/node-mongodb-native/blob/master/docs/gridfs.md) -Replicasets -=========== -For more information about how to connect to a replicaset have a look at [Replicasets](https://github.com/mongodb/node-mongodb-native/blob/master/docs/replicaset.md) +## Replicasets + +For more information about how to connect to a replicaset have a look at the extensive documentation [Documentation](http://mongodb.github.com/node-mongodb-native/) -Primary Key Factories ---------------------- +### Primary Key Factories Defining your own primary key factory allows you to generate your own series of id's (this could f.ex be to use something like ISBN numbers). The generated the id needs to be a 12 byte long "string". @@ -144,69 +158,44 @@ Defining your own primary key factory allows you to generate your own series of Simple example below ```javascript - // Custom factory (need to provide a 12 byte array); - CustomPKFactory = function() {} - CustomPKFactory.prototype = new Object(); - CustomPKFactory.createPk = function() { - return new ObjectID("aaaaaaaaaaaa"); - } - - var p_client = new Db('integration_tests_20', new Server("127.0.0.1", 27017, {}), {'pk':CustomPKFactory}); - p_client.open(function(err, p_client) { - p_client.dropDatabase(function(err, done) { - p_client.createCollection('test_custom_key', function(err, collection) { - collection.insert({'a':1}, function(err, docs) { - collection.find({'_id':new ObjectID("aaaaaaaaaaaa")}, function(err, cursor) { - cursor.toArray(function(err, items) { - test.assertEquals(1, items.length); - - // Let's close the db - p_client.close(); - }); - }); + var MongoClient = require('mongodb').MongoClient + , format = require('util').format; + + // Custom factory (need to provide a 12 byte array); + CustomPKFactory = function() {} + CustomPKFactory.prototype = new Object(); + CustomPKFactory.createPk = function() { + return new ObjectID("aaaaaaaaaaaa"); + } + + MongoClient.connect('mongodb://127.0.0.1:27017/test', {'pkFactory':CustomPKFactory}, function(err, db) { + if(err) throw err; + + db.dropDatabase(function(err, done) { + + db.createCollection('test_custom_key', function(err, collection) { + + collection.insert({'a':1}, function(err, docs) { + + collection.find({'_id':new ObjectID("aaaaaaaaaaaa")}).toArray(function(err, items) { + console.dir(items); + // Let's close the db + db.close(); }); }); }); }); + }); ``` -Strict mode ------------ - -Each database has an optional strict mode. If it is set then asking for a collection -that does not exist will return an Error object in the callback. Similarly if you -attempt to create a collection that already exists. Strict is provided for convenience. - -```javascript - var error_client = new Db('integration_tests_', new Server("127.0.0.1", 27017, {auto_reconnect: false}), {strict:true}); - test.assertEquals(true, error_client.strict); - - error_client.open(function(err, error_client) { - error_client.collection('does-not-exist', function(err, collection) { - test.assertTrue(err instanceof Error); - test.assertEquals("Collection does-not-exist does not exist. Currently in strict mode.", err.message); - }); - - error_client.createCollection('test_strict_access_collection', function(err, collection) { - error_client.collection('test_strict_access_collection', function(err, collection) { - test.assertTrue(collection instanceof Collection); - // Let's close the db - error_client.close(); - }); - }); - }); -``` - -Documentation -============= +## Documentation If this document doesn't answer your questions, see the source of [Collection](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js) or [Cursor](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/cursor.js), or the documentation at MongoDB for query and update formats. -Find ----- +### Find The find method is actually a factory method to create Cursor objects. A Cursor lazily uses the connection the first time @@ -219,20 +208,20 @@ methods `each` and `toArray` call `nextObject` until the cursor is exhausted. Signatures: ```javascript - var cursor = collection.find(query, [fields], options); - cursor.sort(fields).limit(n).skip(m). + var cursor = collection.find(query, [fields], options); + cursor.sort(fields).limit(n).skip(m). - cursor.nextObject(function(err, doc) {}); - cursor.each(function(err, doc) {}); - cursor.toArray(function(err, docs) {}); + cursor.nextObject(function(err, doc) {}); + cursor.each(function(err, doc) {}); + cursor.toArray(function(err, docs) {}); - cursor.rewind() // reset the cursor to its initial state. + cursor.rewind() // reset the cursor to its initial state. ``` Useful chainable methods of cursor. These can optionally be options of `find` instead of method calls: -* `.limit(n).skip(m)` to control paging. -* `.sort(fields)` Order by the given fields. There are several equivalent syntaxes: + * `.limit(n).skip(m)` to control paging. + * `.sort(fields)` Order by the given fields. There are several equivalent syntaxes: * `.sort({field1: -1, field2: 1})` descending by field1, then ascending by field2. * `.sort([['field1', 'desc'], ['field2', 'asc']])` same as above * `.sort([['field1', 'desc'], 'field2'])` same as above @@ -255,65 +244,67 @@ from being returned multiple times. See more * `timeout` if false, asks MongoDb not to time out this cursor after an inactivity period. - For information on how to create queries, see the [MongoDB section on querying](http://www.mongodb.org/display/DOCS/Querying). ```javascript - var mongodb = require('mongodb'); - var server = new mongodb.Server("127.0.0.1", 27017, {}); - new mongodb.Db('test', server, {}).open(function (error, client) { - if (error) throw error; - var collection = new mongodb.Collection(client, 'test_collection'); - collection.find({}, {limit:10}).toArray(function(err, docs) { + var MongoClient = require('mongodb').MongoClient + , format = require('util').format; + + MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { + if(err) throw err; + + var collection = db + .collection('test') + .find({}) + .limit(10) + .toArray(function(err, docs) { console.dir(docs); - }); }); + }); ``` -Insert ------- +### Insert Signature: ```javascript - collection.insert(docs, options, [callback]); + collection.insert(docs, options, [callback]); ``` where `docs` can be a single document or an array of documents. Useful options: -* `safe:true` Should always set if you have a callback. +* `w:1` Should always set if you have a callback. See also: [MongoDB docs for insert](http://www.mongodb.org/display/DOCS/Inserting). ```javascript - var mongodb = require('mongodb'); - var server = new mongodb.Server("127.0.0.1", 27017, {}); - new mongodb.Db('test', server, {w: 1}).open(function (error, client) { - if (error) throw error; - var collection = new mongodb.Collection(client, 'test_collection'); - collection.insert({hello: 'world'}, {safe:true}, - function(err, objects) { - if (err) console.warn(err.message); - if (err && err.message.indexOf('E11000 ') !== -1) { - // this _id was already inserted in the database - } - }); + var MongoClient = require('mongodb').MongoClient + , format = require('util').format; + + MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { + if(err) throw err; + + db.collection('test').insert({hello: 'world'}, {w:1}, function(err, objects) { + if (err) console.warn(err.message); + if (err && err.message.indexOf('E11000 ') !== -1) { + // this _id was already inserted in the database + } }); + }); ``` Note that there's no reason to pass a callback to the insert or update commands -unless you use the `safe:true` option. If you don't specify `safe:true`, then +unless you use the `w:1` option. If you don't specify `w:1`, then your callback will be called immediately. -Update; update and insert (upsert) ----------------------------------- +### Update: update and insert (upsert) The update operation will update the first document that matches your query (or all documents that match if you use `multi:true`). -If `safe:true`, `upsert` is not set, and no documents match, your callback will return 0 documents updated. +If `w:1`, `upsert` is not set, and no documents match, your callback will return 0 documents updated. See the [MongoDB docs](http://www.mongodb.org/display/DOCS/Updating) for the modifier (`$inc`, `$set`, `$push`, etc.) formats. @@ -321,33 +312,32 @@ the modifier (`$inc`, `$set`, `$push`, etc.) formats. Signature: ```javascript - collection.update(criteria, objNew, options, [callback]); + collection.update(criteria, objNew, options, [callback]); ``` Useful options: -* `safe:true` Should always set if you have a callback. +* `w:1` Should always set if you have a callback. * `multi:true` If set, all matching documents are updated, not just the first. * `upsert:true` Atomically inserts the document if no documents matched. Example for `update`: ```javascript - var mongodb = require('mongodb'); - var server = new mongodb.Server("127.0.0.1", 27017, {}); - new mongodb.Db('test', server, {w: 1}).open(function (error, client) { - if (error) throw error; - var collection = new mongodb.Collection(client, 'test_collection'); - collection.update({hi: 'here'}, {$set: {hi: 'there'}}, {safe:true}, - function(err) { - if (err) console.warn(err.message); - else console.log('successfully updated'); - }); + var MongoClient = require('mongodb').MongoClient + , format = require('util').format; + + MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { + if(err) throw err; + + db.collection('test').update({hi: 'here'}, {$set: {hi: 'there'}}, {w:1}, function(err) { + if (err) console.warn(err.message); + else console.log('successfully updated'); }); + }); ``` -Find and modify ---------------- +### Find and modify `findAndModify` is like `update`, but it also gives the updated document to your callback. But there are a few key differences between findAndModify and @@ -379,54 +369,40 @@ Useful options: Example for `findAndModify`: ```javascript - var mongodb = require('mongodb'); - var server = new mongodb.Server("127.0.0.1", 27017, {}); - new mongodb.Db('test', server, {w: 1}).open(function (error, client) { - if (error) throw error; - var collection = new mongodb.Collection(client, 'test_collection'); - collection.findAndModify({hello: 'world'}, [['_id','asc']], {$set: {hi: 'there'}}, {}, - function(err, object) { - if (err) console.warn(err.message); - else console.dir(object); // undefined if no matching object exists. - }); + var MongoClient = require('mongodb').MongoClient + , format = require('util').format; + + MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) { + if(err) throw err; + db.collection('test').findAndModify({hello: 'world'}, [['_id','asc']], {$set: {hi: 'there'}}, {}, function(err, object) { + if (err) console.warn(err.message); + else console.dir(object); // undefined if no matching object exists. }); + }); ``` -Save ----- +### Save The `save` method is a shorthand for upsert if the document contains an `_id`, or an insert if there is no `_id`. -Sponsors -======== -Just as Felix Geisendörfer I'm also working on the driver for my own startup and this driver is a big project that also benefits other companies who are using MongoDB. - -If your company could benefit from a even better-engineered node.js mongodb driver I would appreciate any type of sponsorship you may be able to provide. All the sponsors will get a lifetime display in this readme, priority support and help on problems and votes on the roadmap decisions for the driver. If you are interested contact me on [christkv AT g m a i l.com](mailto:christkv@gmail.com) for details. - -And I'm very thankful for code contributions. If you are interested in working on features please contact me so we can discuss API design and testing. - -Release Notes -============= +## Release Notes See HISTORY -Credits -======= +## Credits 1. [10gen](http://github.com/mongodb/mongo-ruby-driver/) 2. [Google Closure Library](http://code.google.com/closure/library/) 3. [Jonas Raoni Soares Silva](http://jsfromhell.com/classes/binary-parser) -Contributors -============ +## Contributors Aaron Heckmann, Christoph Pojer, Pau Ramon Revilla, Nathan White, Emmerman, Seth LaForge, Boris Filipov, Stefan Schärmeli, Tedde Lundgren, renctan, Sergey Ukustov, Ciaran Jessup, kuno, srimonti, Erik Abele, Pratik Daga, Slobodan Utvic, Kristina Chodorow, Yonathan Randolph, Brian Noguchi, Sam Epstein, James Harrison Fisher, Vladimir Dronnikov, Ben Hockey, Henrik Johansson, Simon Weare, Alex Gorbatchev, Shimon Doodkin, Kyle Mueller, Eran Hammer-Lahav, Marcin Ciszak, François de Metz, Vinay Pulim, nstielau, Adam Wiggins, entrinzikyl, Jeremy Selier, Ian Millington, Public Keating, andrewjstone, Christopher Stott, Corey Jewett, brettkiefer, Rob Holland, Senmiao Liu, heroic, gitfy -License -======= +## License - Copyright 2009 - 2012 Christian Amor Kvalheim. + Copyright 2009 - 2013 MongoDb Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/node_modules/mongoose/node_modules/mongodb/install.js b/node_modules/mongoose/node_modules/mongodb/install.js deleted file mode 100644 index f9f2a57..0000000 --- a/node_modules/mongoose/node_modules/mongodb/install.js +++ /dev/null @@ -1,40 +0,0 @@ -var spawn = require('child_process').spawn, - exec = require('child_process').exec; - -process.stdout.write("================================================================================\n"); -process.stdout.write("= =\n"); -process.stdout.write("= To install with C++ bson parser do =\n"); -process.stdout.write("= =\n"); -process.stdout.write("================================================================================\n"); - -// Check if we want to build the native code -var build_native = process.env['npm_package_config_native'] != null ? process.env['npm_package_config_native'] : 'false'; -build_native = build_native == 'true' ? true : false; -// If we are building the native bson extension ensure we use gmake if available -if(build_native) { - // Check if we need to use gmake - exec('which gmake', function(err, stdout, stderr) { - // Set up spawn command - var make = null; - // No gmake build using make - if(err != null) { - make = spawn('make', ['total']); - } else { - make = spawn('gmake', ['total']); - } - - // Execute spawn - make.stdout.on('data', function(data) { - process.stdout.write(data); - }) - - make.stderr.on('data', function(data) { - process.stdout.write(data); - }) - - make.on('exit', function(code) { - process.stdout.write('child process exited with code ' + code + "\n"); - }) - }); -} - diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/admin.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/admin.js index 6e9cd30..c1f6eb5 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/admin.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/admin.js @@ -15,322 +15,323 @@ var Collection = require('./collection').Collection, */ function Admin(db) { if(!(this instanceof Admin)) return new Admin(db); - this.db = db; -}; -/** - * Retrieve the server information for the current - * instance of the db client - * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from buildInfo or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.buildInfo = function(callback) { - this.serverInfo(callback); -} + /** + * Retrieve the server information for the current + * instance of the db client + * + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from buildInfo or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.buildInfo = function(callback) { + this.serverInfo(callback); + } -/** - * Retrieve the server information for the current - * instance of the db client - * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from serverInfo or null if an error occured. - * @return {null} Returns no result - * @api private - */ -Admin.prototype.serverInfo = function(callback) { - this.db.executeDbAdminCommand({buildinfo:1}, function(err, doc) { - if(err != null) return callback(err, null); - return callback(null, doc.documents[0]); - }); -} + /** + * Retrieve the server information for the current + * instance of the db client + * + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from serverInfo or null if an error occured. + * @return {null} Returns no result + * @api private + */ + this.serverInfo = function(callback) { + db.executeDbAdminCommand({buildinfo:1}, function(err, doc) { + if(err != null) return callback(err, null); + return callback(null, doc.documents[0]); + }); + } -/** - * Retrieve this db's server status. - * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from serverStatus or null if an error occured. - * @return {null} - * @api public - */ -Admin.prototype.serverStatus = function(callback) { - var self = this; + /** + * Retrieve this db's server status. + * + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from serverStatus or null if an error occured. + * @return {null} + * @api public + */ + this.serverStatus = function(callback) { + var self = this; + + db.executeDbAdminCommand({serverStatus: 1}, function(err, doc) { + if(err == null && doc.documents[0].ok === 1) { + callback(null, doc.documents[0]); + } else { + if(err) return callback(err, false); + return callback(utils.toError(doc.documents[0]), false); + } + }); + }; + + /** + * Retrieve the current profiling Level for MongoDB + * + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from profilingLevel or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.profilingLevel = function(callback) { + var self = this; + + db.executeDbAdminCommand({profile:-1}, function(err, doc) { + doc = doc.documents[0]; + + if(err == null && doc.ok === 1) { + var was = doc.was; + if(was == 0) return callback(null, "off"); + if(was == 1) return callback(null, "slow_only"); + if(was == 2) return callback(null, "all"); + return callback(new Error("Error: illegal profiling level value " + was), null); + } else { + err != null ? callback(err, null) : callback(new Error("Error with profile command"), null); + } + }); + }; + + /** + * Ping the MongoDB server and retrieve results + * + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from ping or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.ping = function(options, callback) { + // Unpack calls + var args = Array.prototype.slice.call(arguments, 0); + db.executeDbAdminCommand({ping: 1}, args.pop()); + } - this.db.executeDbAdminCommand({serverStatus: 1}, function(err, doc) { - if(err == null && doc.documents[0].ok === 1) { - callback(null, doc.documents[0]); - } else { - if(err) return callback(err, false); - return callback(utils.toError(doc.documents[0]), false); - } - }); -}; + /** + * Authenticate against MongoDB + * + * @param {String} username The user name for the authentication. + * @param {String} password The password for the authentication. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from authenticate or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.authenticate = function(username, password, callback) { + db.authenticate(username, password, {authdb: 'admin'}, function(err, doc) { + return callback(err, doc); + }) + } -/** - * Retrieve the current profiling Level for MongoDB - * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from profilingLevel or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.profilingLevel = function(callback) { - var self = this; + /** + * Logout current authenticated user + * + * @param {Object} [options] Optional parameters to the command. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from logout or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.logout = function(callback) { + db.logout({authdb: 'admin'}, function(err, doc) { + return callback(err, doc); + }) + } - this.db.executeDbAdminCommand({profile:-1}, function(err, doc) { - doc = doc.documents[0]; + /** + * Add a user to the MongoDB server, if the user exists it will + * overwrite the current password + * + * Options + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning + * + * @param {String} username The user name for the authentication. + * @param {String} password The password for the authentication. + * @param {Object} [options] additional options during update. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from addUser or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.addUser = function(username, password, options, callback) { + var args = Array.prototype.slice.call(arguments, 2); + callback = args.pop(); + options = args.length ? args.shift() : {}; + // Set the db name to admin + options.dbName = 'admin'; + // Add user + db.addUser(username, password, options, function(err, doc) { + return callback(err, doc); + }) + } + /** + * Remove a user from the MongoDB server + * + * Options + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning + * + * @param {String} username The user name for the authentication. + * @param {Object} [options] additional options during update. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from removeUser or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.removeUser = function(username, options, callback) { + var self = this; + var args = Array.prototype.slice.call(arguments, 1); + callback = args.pop(); + options = args.length ? args.shift() : {}; + options.dbName = 'admin'; + + db.removeUser(username, options, function(err, doc) { + return callback(err, doc); + }) + } - if(err == null && doc.ok === 1) { - var was = doc.was; - if(was == 0) return callback(null, "off"); - if(was == 1) return callback(null, "slow_only"); - if(was == 2) return callback(null, "all"); - return callback(new Error("Error: illegal profiling level value " + was), null); + /** + * Set the current profiling level of MongoDB + * + * @param {String} level The new profiling level (off, slow_only, all) + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from setProfilingLevel or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.setProfilingLevel = function(level, callback) { + var self = this; + var command = {}; + var profile = 0; + + if(level == "off") { + profile = 0; + } else if(level == "slow_only") { + profile = 1; + } else if(level == "all") { + profile = 2; } else { - err != null ? callback(err, null) : callback(new Error("Error with profile command"), null); + return callback(new Error("Error: illegal profiling level value " + level)); } - }); -}; - -/** - * Ping the MongoDB server and retrieve results - * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from ping or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.ping = function(options, callback) { - // Unpack calls - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - - this.db.executeDbAdminCommand({ping: 1}, callback); -} - -/** - * Authenticate against MongoDB - * - * @param {String} username The user name for the authentication. - * @param {String} password The password for the authentication. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from authenticate or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.authenticate = function(username, password, callback) { - this.db.authenticate(username, password, {authdb: 'admin'}, function(err, doc) { - return callback(err, doc); - }) -} - -/** - * Logout current authenticated user - * - * @param {Object} [options] Optional parameters to the command. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from logout or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.logout = function(callback) { - this.db.logout({authdb: 'admin'}, function(err, doc) { - return callback(err, doc); - }) -} -/** - * Add a user to the MongoDB server, if the user exists it will - * overwrite the current password - * - * Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. - * - * @param {String} username The user name for the authentication. - * @param {String} password The password for the authentication. - * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from addUser or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.addUser = function(username, password, options, callback) { - var args = Array.prototype.slice.call(arguments, 2); - callback = args.pop(); - options = args.length ? args.shift() : {}; + // Set up the profile number + command['profile'] = profile; - options.dbName = 'admin'; - // Add user - this.db.addUser(username, password, options, function(err, doc) { - return callback(err, doc); - }) -} + db.executeDbAdminCommand(command, function(err, doc) { + doc = doc.documents[0]; -/** - * Remove a user from the MongoDB server - * - * Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. - * - * @param {String} username The user name for the authentication. - * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from removeUser or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.removeUser = function(username, options, callback) { - var self = this; - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - options = args.length ? args.shift() : {}; - options.dbName = 'admin'; - - this.db.removeUser(username, options, function(err, doc) { - return callback(err, doc); - }) -} - -/** - * Set the current profiling level of MongoDB - * - * @param {String} level The new profiling level (off, slow_only, all) - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from setProfilingLevel or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.setProfilingLevel = function(level, callback) { - var self = this; - var command = {}; - var profile = 0; - - if(level == "off") { - profile = 0; - } else if(level == "slow_only") { - profile = 1; - } else if(level == "all") { - profile = 2; - } else { - return callback(new Error("Error: illegal profiling level value " + level)); - } - - // Set up the profile number - command['profile'] = profile; - - this.db.executeDbAdminCommand(command, function(err, doc) { - doc = doc.documents[0]; - - if(err == null && doc.ok === 1) - return callback(null, level); - return err != null ? callback(err, null) : callback(new Error("Error with profile command"), null); - }); -}; - -/** - * Retrive the current profiling information for MongoDB - * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from profilingInfo or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.profilingInfo = function(callback) { - try { - new Cursor(this.db, new Collection(this.db, DbCommand.SYSTEM_PROFILE_COLLECTION), {}, {}, {dbName: 'admin'}).toArray(function(err, items) { - return callback(err, items); + if(err == null && doc.ok === 1) + return callback(null, level); + return err != null ? callback(err, null) : callback(new Error("Error with profile command"), null); }); - } catch (err) { - return callback(err, null); - } -}; - -/** - * Execute a db command against the Admin database - * - * @param {Object} command A command object `{ping:1}`. - * @param {Object} [options] Optional parameters to the command. - * @param {Function} callback this will be called after executing this method. The command always return the whole result of the command as the second parameter. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.command = function(command, options, callback) { - var self = this; - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - options = args.length ? args.shift() : {}; - - // Execute a command - this.db.executeDbAdminCommand(command, options, function(err, doc) { - // Ensure change before event loop executes - return callback != null ? callback(err, doc) : null; - }); -} - -/** - * Validate an existing collection - * - * @param {String} collectionName The name of the collection to validate. - * @param {Object} [options] Optional parameters to the command. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from validateCollection or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.validateCollection = function(collectionName, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - options = args.length ? args.shift() : {}; - - var self = this; - var command = {validate: collectionName}; - var keys = Object.keys(options); - - // Decorate command with extra options - for(var i = 0; i < keys.length; i++) { - if(options.hasOwnProperty(keys[i])) { - command[keys[i]] = options[keys[i]]; + }; + + /** + * Retrive the current profiling information for MongoDB + * + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from profilingInfo or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.profilingInfo = function(callback) { + try { + new Cursor(db, new Collection(db, DbCommand.SYSTEM_PROFILE_COLLECTION), {}, {}, {dbName: 'admin'}).toArray(function(err, items) { + return callback(err, items); + }); + } catch (err) { + return callback(err, null); } + }; + + /** + * Execute a db command against the Admin database + * + * @param {Object} command A command object `{ping:1}`. + * @param {Object} [options] Optional parameters to the command. + * @param {Function} callback this will be called after executing this method. The command always return the whole result of the command as the second parameter. + * @return {null} Returns no result + * @api public + */ + this.command = function(command, options, callback) { + var self = this; + var args = Array.prototype.slice.call(arguments, 1); + callback = args.pop(); + options = args.length ? args.shift() : {}; + + // Execute a command + db.executeDbAdminCommand(command, options, function(err, doc) { + // Ensure change before event loop executes + return callback != null ? callback(err, doc) : null; + }); } - this.db.executeDbCommand(command, function(err, doc) { - if(err != null) return callback(err, null); - doc = doc.documents[0]; - - if(doc.ok === 0) - return callback(new Error("Error with validate command"), null); - if(doc.result != null && doc.result.constructor != String) - return callback(new Error("Error with validation data"), null); - if(doc.result != null && doc.result.match(/exception|corrupt/) != null) - return callback(new Error("Error: invalid collection " + collectionName), null); - if(doc.valid != null && !doc.valid) - return callback(new Error("Error: invalid collection " + collectionName), null); - - return callback(null, doc); - }); -}; + /** + * Validate an existing collection + * + * @param {String} collectionName The name of the collection to validate. + * @param {Object} [options] Optional parameters to the command. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from validateCollection or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.validateCollection = function(collectionName, options, callback) { + var args = Array.prototype.slice.call(arguments, 1); + callback = args.pop(); + options = args.length ? args.shift() : {}; + + var self = this; + var command = {validate: collectionName}; + var keys = Object.keys(options); + + // Decorate command with extra options + for(var i = 0; i < keys.length; i++) { + if(options.hasOwnProperty(keys[i])) { + command[keys[i]] = options[keys[i]]; + } + } -/** - * List the available databases - * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from listDatabases or null if an error occured. - * @return {null} Returns no result - * @api public - */ -Admin.prototype.listDatabases = function(callback) { - // Execute the listAllDatabases command - this.db.executeDbAdminCommand({listDatabases:1}, {}, function(err, doc) { - if(err != null) return callback(err, null); - return callback(null, doc.documents[0]); - }); -} + db.command(command, function(err, doc) { + if(err != null) return callback(err, null); -/** - * Get ReplicaSet status - * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from replSetGetStatus or null if an error occured. - * @return {null} - * @api public - */ -Admin.prototype.replSetGetStatus = function(callback) { - var self = this; + if(doc.ok === 0) + return callback(new Error("Error with validate command"), null); + if(doc.result != null && doc.result.constructor != String) + return callback(new Error("Error with validation data"), null); + if(doc.result != null && doc.result.match(/exception|corrupt/) != null) + return callback(new Error("Error: invalid collection " + collectionName), null); + if(doc.valid != null && !doc.valid) + return callback(new Error("Error: invalid collection " + collectionName), null); - this.db.executeDbAdminCommand({replSetGetStatus:1}, function(err, doc) { - if(err == null && doc.documents[0].ok === 1) + return callback(null, doc); + }); + }; + + /** + * List the available databases + * + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from listDatabases or null if an error occured. + * @return {null} Returns no result + * @api public + */ + this.listDatabases = function(callback) { + // Execute the listAllDatabases command + db.executeDbAdminCommand({listDatabases:1}, {}, function(err, doc) { + if(err != null) return callback(err, null); return callback(null, doc.documents[0]); - if(err) return callback(err, false); - return callback(utils.toError(doc.documents[0]), false); - }); + }); + } + + /** + * Get ReplicaSet status + * + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from replSetGetStatus or null if an error occured. + * @return {null} + * @api public + */ + this.replSetGetStatus = function(callback) { + var self = this; + + db.executeDbAdminCommand({replSetGetStatus:1}, function(err, doc) { + if(err == null && doc.documents[0].ok === 1) + return callback(null, doc.documents[0]); + if(err) return callback(err, false); + return callback(utils.toError(doc.documents[0]), false); + }); + }; }; /** diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_cr.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_cr.js index 51b09b1..ffa0292 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_cr.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_cr.js @@ -1,9 +1,13 @@ var DbCommand = require('../commands/db_command').DbCommand - , utils = require('../utils'); + // , ReplSet = require('../connection/repl_set/repl_set').ReplSet + , utils = require('../utils') + , crypto = require('crypto'); var authenticate = function(db, username, password, authdb, options, callback) { var numberOfConnections = 0; var errorObject = null; + var numberOfValidConnections = 0; + var credentialsValid = false; if(options['connection'] != null) { //if a connection was explicitly passed on options, then we have only one... @@ -14,21 +18,40 @@ var authenticate = function(db, username, password, authdb, options, callback) { options['onAll'] = true; } - // Execute all four - db._executeQueryCommand(DbCommand.createGetNonceCommand(db), options, function(err, result, connection) { + // Return connection option + options.returnConnection = true; + + // Execute nonce command + db.command({'getnonce':1}, options, function(err, result, connection) { // Execute on all the connections if(err == null) { // Nonce used to make authentication request with md5 hash - var nonce = result.documents[0].nonce; + var nonce = result.nonce; + + // Use node md5 generator + var md5 = crypto.createHash('md5'); + // Generate keys used for authentication + md5.update(username + ":mongo:" + password); + var hash_password = md5.digest('hex'); + // Final key + md5 = crypto.createHash('md5'); + md5.update(nonce + username + hash_password); + var key = md5.digest('hex'); + + // Creat cmd + var cmd = {'authenticate':1, 'user':username, 'nonce':nonce, 'key':key}; + // Execute command - db._executeQueryCommand(DbCommand.createAuthenticationCommand(db, username, password, nonce, authdb), {connection:connection}, function(err, result) { + db.db(authdb).command(cmd, {connection:connection}, function(err, result) { // Count down numberOfConnections = numberOfConnections - 1; + // Ensure we save any error - if(err) { + if(err) { errorObject = err; - } else if(result.documents[0].err != null || result.documents[0].errmsg != null){ - errorObject = utils.toError(result.documents[0]); + } else { + credentialsValid = true; + numberOfValidConnections = numberOfValidConnections + 1; } // Work around the case where the number of connections are 0 @@ -36,18 +59,23 @@ var authenticate = function(db, username, password, authdb, options, callback) { var internalCallback = callback; callback = null; - if(errorObject == null && result.documents[0].ok == 1) { - // We authenticated correctly save the credentials + if(errorObject == null && credentialsValid) { db.serverConfig.auth.add('MONGODB-CR', db.databaseName, username, password, authdb); // Return callback internalCallback(errorObject, true); + } else if(numberOfValidConnections > 0 && numberOfValidConnections != numberOfConnections + && credentialsValid) { + // One or more servers failed on auth (f.ex secondary hanging on foreground indexing) + db.serverConfig.auth.add('MONGODB-CR', db.databaseName, username, password, authdb); + // Return callback + internalCallback(errorObject, true); } else { internalCallback(errorObject, false); } } }); } - }); + }); } exports.authenticate = authenticate; \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_gssapi.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_gssapi.js index f41cd5d..24f6164 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_gssapi.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_gssapi.js @@ -15,8 +15,11 @@ try { var authenticate = function(db, username, password, authdb, options, callback) { var numberOfConnections = 0; var errorObject = null; + var numberOfValidConnections = 0; + var credentialsValid = false; + // We don't have the Kerberos library - if(Kerberos == null) return callback(new Error("Kerberos library is not installed")); + if(Kerberos == null) return callback(new Error("Kerberos library is not installed")); if(options['connection'] != null) { //if a connection was explicitly passed on options, then we have only one... @@ -29,24 +32,44 @@ var authenticate = function(db, username, password, authdb, options, callback) { // Grab all the connections var connections = options['connection'] != null ? [options['connection']] : db.serverConfig.allRawConnections(); - var error = null; + var gssapiServiceName = options['gssapiServiceName'] || 'mongodb'; + // Authenticate all connections for(var i = 0; i < numberOfConnections; i++) { // Start Auth process for a connection - GSSAPIInitialize(db, username, password, authdb, connections[i], function(err, result) { + GSSAPIInitialize(db, username, password, authdb, gssapiServiceName, connections[i], function(err, result) { // Adjust number of connections left to connect numberOfConnections = numberOfConnections - 1; - // If we have an error save it - if(err) error = err; - - // We are done - if(numberOfConnections == 0) { - if(err) return callback(error, false); - // We authenticated correctly save the credentials - db.serverConfig.auth.add('GSSAPI', db.databaseName, username, password, authdb); - // Return valid callback - return callback(null, true); + + // Ensure we save any error + if(err) { + errorObject = err; + } else { + credentialsValid = true; + numberOfValidConnections = numberOfValidConnections + 1; + } + + // Work around the case where the number of connections are 0 + if(numberOfConnections <= 0 && typeof callback == 'function') { + var internalCallback = callback; + callback = null; + + // We are done + if(errorObject == null && numberOfConnections == 0) { + // We authenticated correctly save the credentials + db.serverConfig.auth.add('GSSAPI', db.databaseName, username, password, authdb, gssapiServiceName); + // Return valid callback + return internalCallback(null, true); + } else if(numberOfValidConnections > 0 && numberOfValidConnections != numberOfConnections + && credentialsValid) { + // We authenticated correctly save the credentials + db.serverConfig.auth.add('GSSAPI', db.databaseName, username, password, authdb, gssapiServiceName); + // Return valid callback + return internalCallback(null, true); + } else { + return internalCallback(errorObject, false); + } } }); } @@ -54,9 +77,9 @@ var authenticate = function(db, username, password, authdb, options, callback) { // // Initialize step -var GSSAPIInitialize = function(db, username, password, authdb, connection, callback) { +var GSSAPIInitialize = function(db, username, password, authdb, gssapiServiceName, connection, callback) { // Create authenticator - var mongo_auth_process = new MongoAuthProcess(connection.socketOptions.host, connection.socketOptions.port); + var mongo_auth_process = new MongoAuthProcess(connection.socketOptions.host, connection.socketOptions.port, gssapiServiceName); // Perform initialization mongo_auth_process.init(username, password, function(err, context) { diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_sspi.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_sspi.js index 1990efd..66ff776 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_sspi.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/auth/mongodb_sspi.js @@ -15,6 +15,9 @@ try { var authenticate = function(db, username, password, authdb, options, callback) { var numberOfConnections = 0; var errorObject = null; + var numberOfValidConnections = 0; + var credentialsValid = false; + // We don't have the Kerberos library if(Kerberos == null) return callback(new Error("Kerberos library is not installed")); @@ -27,34 +30,52 @@ var authenticate = function(db, username, password, authdb, options, callback) { options['onAll'] = true; } - var connection = db.serverConfig.allRawConnections()[0]; + // Set the sspi server name + var gssapiServiceName = options['gssapiServiceName'] || 'mongodb'; // Grab all the connections var connections = db.serverConfig.allRawConnections(); - var error = null; // Authenticate all connections for(var i = 0; i < numberOfConnections; i++) { // Start Auth process for a connection - SSIPAuthenticate(db, username, password, authdb, connections[i], function(err, result) { + SSIPAuthenticate(db, username, password, authdb, gssapiServiceName, connections[i], function(err, result) { // Adjust number of connections left to connect numberOfConnections = numberOfConnections - 1; - // If we have an error save it - if(err) error = err; - - // We are done - if(numberOfConnections == 0) { - if(err) return callback(err, false); - // We authenticated correctly save the credentials - db.serverConfig.auth.add('GSSAPI', db.databaseName, username, password, authdb); - // Return valid callback - return callback(null, true); + + // Ensure we save any error + if(err) { + errorObject = err; + } else { + credentialsValid = true; + numberOfValidConnections = numberOfValidConnections + 1; + } + + // Work around the case where the number of connections are 0 + if(numberOfConnections <= 0 && typeof callback == 'function') { + var internalCallback = callback; + callback = null; + + if(errorObject == null) { + // We authenticated correctly save the credentials + db.serverConfig.auth.add('GSSAPI', db.databaseName, username, password, authdb, gssapiServiceName); + // Return valid callback + return internalCallback(null, true); + } else if(numberOfValidConnections > 0 && numberOfValidConnections != numberOfConnections + && credentialsValid) { + // We authenticated correctly save the credentials + db.serverConfig.auth.add('GSSAPI', db.databaseName, username, password, authdb, gssapiServiceName); + // Return valid callback + return internalCallback(null, true); + } else { + return internalCallback(errorObject, false); + } } }); } } -var SSIPAuthenticate = function(db, username, password, authdb, connection, callback) { +var SSIPAuthenticate = function(db, username, password, authdb, service_name, connection, callback) { // -------------------------------------------------------------- // Async Version // -------------------------------------------------------------- @@ -66,7 +87,7 @@ var SSIPAuthenticate = function(db, username, password, authdb, connection, call }; // Create authenticator - var mongo_auth_process = new MongoAuthProcess(connection.socketOptions.host, connection.socketOptions.port); + var mongo_auth_process = new MongoAuthProcess(connection.socketOptions.host, connection.socketOptions.port, service_name); // Execute first sasl step db._executeQueryCommand(DbCommand.createDbCommand(db, command, {}, '$external'), {connection:connection}, function(err, doc) { diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/collection.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/collection.js index 7b3938b..b8e8a70 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/collection.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/collection.js @@ -10,22 +10,19 @@ var InsertCommand = require('./commands/insert_command').InsertCommand , ObjectID = require('bson').ObjectID , Code = require('bson').Code , Cursor = require('./cursor').Cursor - , utils = require('./utils'); + , utils = require('./utils') + , shared = require('./collection/shared') + , core = require('./collection/core') + , query = require('./collection/query') + , index = require('./collection/index') + , geo = require('./collection/geo') + , commands = require('./collection/commands') + , aggregation = require('./collection/aggregation') + , unordered = require('./collection/batch/unordered') + , ordered = require('./collection/batch/ordered'); /** - * Precompiled regexes - * @ignore -**/ -const eErrorMessages = /No matching object found/; - -/** - * toString helper. - * @ignore - */ -var toString = Object.prototype.toString; - -/** - * Create a new Collection instance (INTERNAL TYPE) + * Create a new Collection instance (INTERNAL TYPE, do not instantiate directly) * * Options * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). @@ -44,7 +41,7 @@ var toString = Object.prototype.toString; function Collection (db, collectionName, pkFactory, options) { if(!(this instanceof Collection)) return new Collection(db, collectionName, pkFactory, options); - checkCollectionName(collectionName); + shared.checkCollectionName(collectionName); this.db = db; this.collectionName = collectionName; @@ -54,79 +51,56 @@ function Collection (db, collectionName, pkFactory, options) { this.serializeFunctions = options == null || options.serializeFunctions == null ? db.serializeFunctions : options.serializeFunctions; this.raw = options == null || options.raw == null ? db.raw : options.raw; - this.readPreference = options == null || options.readPreference == null ? db.serverConfig.options.readPreference : options.readPreference; - this.readPreference = this.readPreference == null ? 'primary' : this.readPreference; + // Assign the right collection level readPreference + if(options && options.readPreference) { + this.readPreference = options.readPreference; + } else if(this.db.options.readPreference) { + this.readPreference = this.db.options.readPreference; + } else if(this.db.serverConfig.options.readPreference) { + this.readPreference = this.db.serverConfig.options.readPreference; + } + // Set custom primary key factory if provided this.pkFactory = pkFactory == null ? ObjectID : pkFactory; - var self = this; + // Server Capabilities + this.serverCapabilities = this.db.serverConfig._serverCapabilities; } /** * Inserts a single document or a an array of documents into MongoDB. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **continueOnError/keepGoing** {Boolean, default:false}, keep inserting documents even if one document has an error, *mongodb 1.9.1 >*. * - **serializeFunctions** {Boolean, default:false}, serialize functions on the document. - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **forceServerObjectId** {Boolean, default:false}, let server assign ObjectId instead of the driver + * - **checkKeys** {Boolean, default:true}, allows for disabling of document key checking (WARNING OPENS YOU UP TO INJECTION ATTACKS) + * - **fullResult** {Boolean, default:false}, returns the full result document (document returned will differ by server version) * * @param {Array|Object} docs * @param {Object} [options] optional options for insert command * @param {Function} [callback] optional callback for the function, must be provided when using a writeconcern - * @return {null} + * @return {Collection} * @api public */ -Collection.prototype.insert = function insert (docs, options, callback) { - if ('function' === typeof options) callback = options, options = {}; - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - var self = this; - insertAll(self, Array.isArray(docs) ? docs : [docs], options, callback); - return this; -}; - -/** - * @ignore - */ -var checkCollectionName = function checkCollectionName (collectionName) { - if ('string' !== typeof collectionName) { - throw Error("collection name must be a String"); - } - - if (!collectionName || collectionName.indexOf('..') != -1) { - throw Error("collection names cannot be empty"); - } - - if (collectionName.indexOf('$') != -1 && - collectionName.match(/((^\$cmd)|(oplog\.\$main))/) == null) { - throw Error("collection names must not contain '$'"); - } - - if (collectionName.match(/^\.|\.$/) != null) { - throw Error("collection names must not start or end with '.'"); - } -}; +Collection.prototype.insert = function() { return core.insert; }(); /** * Removes documents specified by `selector` from the db. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **single** {Boolean, default:false}, removes the first document found. - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **fullResult** {Boolean, default:false}, returns the full result document (document returned will differ by server version) * * @param {Object} [selector] optional select, no selector is equivalent to removing all documents. * @param {Object} [options] additional options during remove. @@ -134,82 +108,7 @@ var checkCollectionName = function checkCollectionName (collectionName) { * @return {null} * @api public */ -Collection.prototype.remove = function remove(selector, options, callback) { - if ('function' === typeof selector) { - callback = selector; - selector = options = {}; - } else if ('function' === typeof options) { - callback = options; - options = {}; - } - - // Ensure options - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - // Ensure we have at least an empty selector - selector = selector == null ? {} : selector; - // Set up flags for the command, if we have a single document remove - var flags = 0 | (options.single ? 1 : 0); - - // DbName - var dbName = options['dbName']; - // If no dbname defined use the db one - if(dbName == null) { - dbName = this.db.databaseName; - } - - // Create a delete command - var deleteCommand = new DeleteCommand( - this.db - , dbName + "." + this.collectionName - , selector - , flags); - - var self = this; - var errorOptions = _getWriteConcern(self, options, callback); - // Execute the command, do not add a callback as it's async - if(_hasWriteConcern(errorOptions) && typeof callback == 'function') { - // Insert options - var commandOptions = {read:false}; - // If we have safe set set async to false - if(errorOptions == null) commandOptions['async'] = true; - // Set safe option - commandOptions['safe'] = true; - // If we have an error option - if(typeof errorOptions == 'object') { - var keys = Object.keys(errorOptions); - for(var i = 0; i < keys.length; i++) { - commandOptions[keys[i]] = errorOptions[keys[i]]; - } - } - - // Execute command with safe options (rolls up both command and safe command into one and executes them on the same connection) - this.db._executeRemoveCommand(deleteCommand, commandOptions, function (err, error) { - error = error && error.documents; - if(!callback) return; - - if(err) { - callback(err); - } else if(error[0].err || error[0].errmsg) { - callback(utils.toError(error[0])); - } else { - callback(null, error[0].n); - } - }); - } else if(_hasWriteConcern(errorOptions) && callback == null) { - throw new Error("Cannot use a writeConcern without a provided callback"); - } else { - var result = this.db._executeRemoveCommand(deleteCommand); - // If no callback just return - if (!callback) return; - // If error return error - if (result instanceof Error) { - return callback(result); - } - // Otherwise just return - return callback(); - } -}; +Collection.prototype.remove = function() { return core.remove; }(); /** * Renames the collection. @@ -223,197 +122,39 @@ Collection.prototype.remove = function remove(selector, options, callback) { * @return {null} * @api public */ -Collection.prototype.rename = function rename (newName, options, callback) { - var self = this; - - if(typeof options == 'function') { - callback = options; - options = {} - } - - // Ensure the new name is valid - checkCollectionName(newName); - // Execute the command, return the new renamed collection if successful - self.db._executeQueryCommand(DbCommand.createRenameCollectionCommand(self.db, self.collectionName, newName, options), function(err, result) { - if(err == null && result.documents[0].ok == 1) { - if(callback != null) { - // Set current object to point to the new name - self.collectionName = newName; - // Return the current collection - callback(null, self); - } - } else if(result.documents[0].errmsg != null) { - if(null != callback) { - if (null == err) { - err = utils.toError(result.documents[0]); - } - callback(err, null); - } - } - }); -}; - -/** - * @ignore - */ -var insertAll = function insertAll (self, docs, options, callback) { - if('function' === typeof options) callback = options, options = {}; - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - - // Insert options (flags for insert) - var insertFlags = {}; - // If we have a mongodb version >= 1.9.1 support keepGoing attribute - if(options['keepGoing'] != null) { - insertFlags['keepGoing'] = options['keepGoing']; - } - - // If we have a mongodb version >= 1.9.1 support keepGoing attribute - if(options['continueOnError'] != null) { - insertFlags['continueOnError'] = options['continueOnError']; - } - - // DbName - var dbName = options['dbName']; - // If no dbname defined use the db one - if(dbName == null) { - dbName = self.db.databaseName; - } - - // Either use override on the function, or go back to default on either the collection - // level or db - if(options['serializeFunctions'] != null) { - insertFlags['serializeFunctions'] = options['serializeFunctions']; - } else { - insertFlags['serializeFunctions'] = self.serializeFunctions; - } - - // Pass in options - var insertCommand = new InsertCommand( - self.db - , dbName + "." + self.collectionName, true, insertFlags); - - // Add the documents and decorate them with id's if they have none - for(var index = 0, len = docs.length; index < len; ++index) { - var doc = docs[index]; - - // Add id to each document if it's not already defined - if (!(Buffer.isBuffer(doc)) && doc['_id'] == null && self.db.forceServerObjectId != true) { - doc['_id'] = self.pkFactory.createPk(); - } - - insertCommand.add(doc); - } - - // Collect errorOptions - var errorOptions = _getWriteConcern(self, options, callback); - // Default command options - var commandOptions = {}; - // If safe is defined check for error message - if(_hasWriteConcern(errorOptions) && typeof callback == 'function') { - // Insert options - commandOptions['read'] = false; - // If we have safe set set async to false - if(errorOptions == null) commandOptions['async'] = true; - - // Set safe option - commandOptions['safe'] = errorOptions; - // If we have an error option - if(typeof errorOptions == 'object') { - var keys = Object.keys(errorOptions); - for(var i = 0; i < keys.length; i++) { - commandOptions[keys[i]] = errorOptions[keys[i]]; - } - } - - // Execute command with safe options (rolls up both command and safe command into one and executes them on the same connection) - self.db._executeInsertCommand(insertCommand, commandOptions, function (err, error) { - error = error && error.documents; - if(!callback) return; - - if (err) { - callback(err); - } else if(error[0].err || error[0].errmsg) { - callback(utils.toError(error[0])); - } else { - callback(null, docs); - } - }); - } else if(_hasWriteConcern(errorOptions) && callback == null) { - throw new Error("Cannot use a writeConcern without a provided callback"); - } else { - // Execute the call without a write concern - var result = self.db._executeInsertCommand(insertCommand, commandOptions); - // If no callback just return - if(!callback) return; - // If error return error - if(result instanceof Error) { - return callback(result); - } - // Otherwise just return - return callback(null, docs); - } -}; +Collection.prototype.rename = function() { return commands.rename; }(); /** * Save a document. Simple full document replacement function. Not recommended for efficiency, use atomic * operators and update instead for more efficient operations. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * * @param {Object} [doc] the document to save * @param {Object} [options] additional options during remove. - * @param {Function} [callback] must be provided if you performing a safe save + * @param {Function} [callback] must be provided if you performing an update with a writeconcern * @return {null} * @api public */ -Collection.prototype.save = function save(doc, options, callback) { - if('function' === typeof options) callback = options, options = null; - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - // Throw an error if attempting to perform a bulk operation - if(Array.isArray(doc)) throw new Error("doc parameter must be a single document"); - // Extract the id, if we have one we need to do a update command - var id = doc['_id']; - var commandOptions = _getWriteConcern(this, options, callback); - - if(id) { - commandOptions.upsert = true; - this.update({ _id: id }, doc, commandOptions, callback); - } else { - this.insert(doc, commandOptions, callback && function (err, docs) { - if (err) return callback(err, null); - - if (Array.isArray(docs)) { - callback(err, docs[0]); - } else { - callback(err, docs); - } - }); - } -}; +Collection.prototype.save = function() { return core.save; }(); /** * Updates documents. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **upsert** {Boolean, default:false}, perform an upsert operation. * - **multi** {Boolean, default:false}, update all documents matching the selector. * - **serializeFunctions** {Boolean, default:false}, serialize functions on the document. - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **checkKeys** {Boolean, default:true}, allows for disabling of document key checking (WARNING OPENS YOU UP TO INJECTION ATTACKS) + * - **fullResult** {Boolean, default:false}, returns the full result document (document returned will differ by server version) * * @param {Object} selector the query to select the document/documents to be updated * @param {Object} document the fields/vals to be updated, or in the case of an upsert operation, inserted. @@ -422,91 +163,13 @@ Collection.prototype.save = function save(doc, options, callback) { * @return {null} * @api public */ -Collection.prototype.update = function update(selector, document, options, callback) { - if('function' === typeof options) callback = options, options = null; - if(options == null) options = {}; - if(!('function' === typeof callback)) callback = null; - - // DbName - var dbName = options['dbName']; - // If no dbname defined use the db one - if(dbName == null) { - dbName = this.db.databaseName; - } - - // If we are not providing a selector or document throw - if(selector == null || typeof selector != 'object') return callback(new Error("selector must be a valid JavaScript object")); - if(document == null || typeof document != 'object') return callback(new Error("document must be a valid JavaScript object")); - - // Either use override on the function, or go back to default on either the collection - // level or db - if(options['serializeFunctions'] != null) { - options['serializeFunctions'] = options['serializeFunctions']; - } else { - options['serializeFunctions'] = this.serializeFunctions; - } - - var updateCommand = new UpdateCommand( - this.db - , dbName + "." + this.collectionName - , selector - , document - , options); - - var self = this; - // Unpack the error options if any - var errorOptions = _getWriteConcern(this, options, callback); - // If safe is defined check for error message - if(_hasWriteConcern(errorOptions) && typeof callback == 'function') { - // Insert options - var commandOptions = {read:false}; - // If we have safe set set async to false - if(errorOptions == null) commandOptions['async'] = true; - // Set safe option - commandOptions['safe'] = errorOptions; - // If we have an error option - if(typeof errorOptions == 'object') { - var keys = Object.keys(errorOptions); - for(var i = 0; i < keys.length; i++) { - commandOptions[keys[i]] = errorOptions[keys[i]]; - } - } - - // Execute command with safe options (rolls up both command and safe command into one and executes them on the same connection) - this.db._executeUpdateCommand(updateCommand, commandOptions, function (err, error) { - error = error && error.documents; - if(!callback) return; - - if(err) { - callback(err); - } else if(error[0].err || error[0].errmsg) { - callback(utils.toError(error[0])); - } else { - // Perform the callback - callback(null, error[0].n, error[0]); - } - }); - } else if(_hasWriteConcern(errorOptions) && callback == null) { - throw new Error("Cannot use a writeConcern without a provided callback"); - } else { - // Execute update - var result = this.db._executeUpdateCommand(updateCommand); - // If no callback just return - if (!callback) return; - // If error return error - if (result instanceof Error) { - return callback(result); - } - // Otherwise just return - return callback(); - } -}; +Collection.prototype.update = function() { return core.update; }(); /** * The distinct command returns returns a list of distinct values for the given key across a collection. * * Options - * - **readPreference** {String}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {String} key key to run distinct against. * @param {Object} [query] option query to narrow the returned objects. @@ -515,31 +178,7 @@ Collection.prototype.update = function update(selector, document, options, callb * @return {null} * @api public */ -Collection.prototype.distinct = function distinct(key, query, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - query = args.length ? args.shift() || {} : {}; - options = args.length ? args.shift() || {} : {}; - - var mapCommandHash = { - 'distinct': this.collectionName - , 'query': query - , 'key': key - }; - - // Set read preference if we set one - var readPreference = options['readPreference'] ? options['readPreference'] : false; - // Create the command - var cmd = DbCommand.createDbSlaveOkCommand(this.db, mapCommandHash); - - this.db._executeQueryCommand(cmd, {read:readPreference}, function (err, result) { - if(err) - return callback(err); - if(result.documents[0].ok != 1) - return callback(new Error(result.documents[0].errmsg)); - callback(null, result.documents[0].values); - }); -}; +Collection.prototype.distinct = function() { return commands.distinct; }(); /** * Count number of matching documents in the db to a query. @@ -547,7 +186,7 @@ Collection.prototype.distinct = function distinct(key, query, options, callback) * Options * - **skip** {Number}, The number of documents to skip for the count. * - **limit** {Number}, The limit of documents to count. - * - **readPreference** {String}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Object} [query] query to filter by before performing count. * @param {Object} [options] additional options during count. @@ -555,57 +194,7 @@ Collection.prototype.distinct = function distinct(key, query, options, callback) * @return {null} * @api public */ -Collection.prototype.count = function count (query, options, callback) { - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - query = args.length ? args.shift() || {} : {}; - options = args.length ? args.shift() || {} : {}; - var skip = options.skip; - var limit = options.limit; - - // Final query - var final_query = { - 'count': this.collectionName - , 'query': query - , 'fields': null - }; - - // Add limit and skip if defined - if(typeof skip == 'number') final_query.skip = skip; - if(typeof limit == 'number') final_query.limit = limit; - - // Set read preference if we set one - var readPreference = options['readPreference'] ? options['readPreference'] : false; - - // Set up query options - var queryOptions = QueryCommand.OPTS_NO_CURSOR_TIMEOUT; - if (this.slaveOk || this.db.slaveOk) { - queryOptions |= QueryCommand.OPTS_SLAVE; - } - - var queryCommand = new QueryCommand( - this.db - , this.db.databaseName + ".$cmd" - , queryOptions - , 0 - , -1 - , final_query - , null - ); - - var self = this; - this.db._executeQueryCommand(queryCommand, {read:readPreference}, function (err, result) { - result = result && result.documents; - if(!callback) return; - - if(err) return callback(err); - if (result[0].ok != 1 || result[0].errmsg) { - return callback(utils.toError(result[0])); - } - callback(null, result[0].n); - }); -}; - +Collection.prototype.count = function() { return commands.count; }(); /** * Drop the collection @@ -622,16 +211,13 @@ Collection.prototype.drop = function drop(callback) { * Find and update a document. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **remove** {Boolean, default:false}, set to true to remove the object before returning. * - **upsert** {Boolean, default:false}, perform an upsert operation. * - **new** {Boolean, default:false}, set to true if you want to return the modified object rather than the original. Ignored for remove. - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {Object} query query object to locate the object to modify * @param {Array} sort - if multiple docs match, choose the first one in the specified sort order as the object to manipulate @@ -641,109 +227,16 @@ Collection.prototype.drop = function drop(callback) { * @return {null} * @api public */ -Collection.prototype.findAndModify = function findAndModify (query, sort, doc, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - sort = args.length ? args.shift() || [] : []; - doc = args.length ? args.shift() : null; - options = args.length ? args.shift() || {} : {}; - var self = this; - - var queryObject = { - 'findandmodify': this.collectionName - , 'query': query - , 'sort': utils.formattedOrderClause(sort) - }; - - queryObject.new = options.new ? 1 : 0; - queryObject.remove = options.remove ? 1 : 0; - queryObject.upsert = options.upsert ? 1 : 0; - - if (options.fields) { - queryObject.fields = options.fields; - } - - if (doc && !options.remove) { - queryObject.update = doc; - } - - // Either use override on the function, or go back to default on either the collection - // level or db - if(options['serializeFunctions'] != null) { - options['serializeFunctions'] = options['serializeFunctions']; - } else { - options['serializeFunctions'] = this.serializeFunctions; - } - - // Unpack the error options if any - var errorOptions = _getWriteConcern(this, options, callback); - - // If we have j, w or something else do the getLast Error path - if(errorOptions != null - && typeof errorOptions == 'object' - && (errorOptions.w != 0 && errorOptions.safe != false)) { - // Commands to send - var commands = []; - // Add the find and modify command - commands.push(DbCommand.createDbCommand(this.db, queryObject, options)); - // If we have safe defined we need to return both call results - var chainedCommands = errorOptions != null ? true : false; - // Add error command if we have one - if(chainedCommands) { - commands.push(DbCommand.createGetLastErrorCommand(errorOptions, this.db)); - } - - // Fire commands and - this.db._executeQueryCommand(commands, {read:false}, function(err, result) { - if(err != null) return callback(err); - result = result && result.documents; - - if(result[0].err != null) { - return callback(utils.toError(result[0]), null); - } - - // Workaround due to 1.8.X returning an error on no matching object - // while 2.0.X does not not, making 2.0.X behaviour standard - if(result[0].errmsg != null && !result[0].errmsg.match(eErrorMessages)) { - return callback(utils.toError(result[0]), null, result[0]); - } - - return callback(null, result[0].value, result[0]); - }); - } else { - // Only run command and rely on getLastError command - var command = DbCommand.createDbCommand(this.db, queryObject, options) - // Execute command - this.db._executeQueryCommand(command, {read:false}, function(err, result) { - if(err != null) return callback(err); - - result = result && result.documents; - - if(result[0].errmsg != null && !result[0].errmsg.match(eErrorMessages)) { - return callback(utils.toError(result[0]), null, result[0]); - } - - // If we have an error return it - if(result[0].lastErrorObject && result[0].lastErrorObject.err != null) { - return callback(utils.toError(result[0].lastErrorObject), null); - } - - return callback(null, result[0].value, result[0]); - }); - } -} +Collection.prototype.findAndModify = function() { return core.findAndModify; }(); /** * Find and remove a document * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * * @param {Object} query query object to locate the object to modify * @param {Array} sort - if multiple docs match, choose the first one in the specified sort order as the object to manipulate @@ -752,22 +245,7 @@ Collection.prototype.findAndModify = function findAndModify (query, sort, doc, o * @return {null} * @api public */ -Collection.prototype.findAndRemove = function(query, sort, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - sort = args.length ? args.shift() || [] : []; - options = args.length ? args.shift() || {} : {}; - // Add the remove option - options['remove'] = true; - // Execute the callback - this.findAndModify(query, sort, null, options, callback); -} - -var testForFields = { - limit: 1, sort: 1, fields:1, skip: 1, hint: 1, explain: 1, snapshot: 1, timeout: 1, tailable: 1, tailableRetryInterval: 1 - , numberOfRetries: 1, awaitdata: 1, exhaust: 1, batchSize: 1, returnKey: 1, maxScan: 1, min: 1, max: 1, showDiskLoc: 1 - , comment: 1, raw: 1, readPreference: 1, partial: 1, read: 1, dbName: 1 -}; +Collection.prototype.findAndRemove = function() { return core.findAndRemove; }(); /** * Creates a cursor for a query that can be used to iterate over results from MongoDB @@ -794,6 +272,7 @@ var testForFields = { * - **tailableRetryInterval** {Number, default:100}, specify the miliseconds between getMores on tailable cursor. * - **numberOfRetries** {Number, default:5}, specify the number of times to retry the tailable cursor. * - **awaitdata** {Boolean, default:false} allow the cursor to wait for data, only applicable for tailable cursor. + * - **oplogReplay** {Boolean, default:false} sets an internal flag, only applicable for tailable cursor. * - **exhaust** {Boolean, default:false} have the server send all the documents at once as getMore packets, not recommended. * - **batchSize** {Number, default:0}, set the batchSize for the getMoreCommand when iterating over the query results. * - **returnKey** {Boolean, default:false}, only return the index key. @@ -803,9 +282,10 @@ var testForFields = { * - **showDiskLoc** {Boolean, default:false}, Show disk location of results. * - **comment** {String}, You can put a $comment field on a query to make looking in the profiler logs simpler. * - **raw** {Boolean, default:false}, Return all BSON documents as Raw Buffer documents. - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **numberOfRetries** {Number, default:5}, if using awaidata specifies the number of times to retry on timeout. * - **partial** {Boolean, default:false}, specify if the cursor should return partial results when querying against a sharded system + * - **maxTimeMS** {Number}, number of miliseconds to wait before aborting the query. * * @param {Object|ObjectID} query query object to locate the object to modify * @param {Object} [options] additional options during update. @@ -813,154 +293,7 @@ var testForFields = { * @return {Cursor} returns a cursor to the query * @api public */ -Collection.prototype.find = function find () { - var options - , args = Array.prototype.slice.call(arguments, 0) - , has_callback = typeof args[args.length - 1] === 'function' - , has_weird_callback = typeof args[0] === 'function' - , callback = has_callback ? args.pop() : (has_weird_callback ? args.shift() : null) - , len = args.length - , selector = len >= 1 ? args[0] : {} - , fields = len >= 2 ? args[1] : undefined; - - if(len === 1 && has_weird_callback) { - // backwards compat for callback?, options case - selector = {}; - options = args[0]; - } - - if(len === 2 && !Array.isArray(fields)) { - var fieldKeys = Object.getOwnPropertyNames(fields); - var is_option = false; - - for(var i = 0; i < fieldKeys.length; i++) { - if(testForFields[fieldKeys[i]] != null) { - is_option = true; - break; - } - } - - if(is_option) { - options = fields; - fields = undefined; - } else { - options = {}; - } - } else if(len === 2 && Array.isArray(fields) && !Array.isArray(fields[0])) { - var newFields = {}; - // Rewrite the array - for(var i = 0; i < fields.length; i++) { - newFields[fields[i]] = 1; - } - // Set the fields - fields = newFields; - } - - if(3 === len) { - options = args[2]; - } - - // Ensure selector is not null - selector = selector == null ? {} : selector; - // Validate correctness off the selector - var object = selector; - if(Buffer.isBuffer(object)) { - var object_size = object[0] | object[1] << 8 | object[2] << 16 | object[3] << 24; - if(object_size != object.length) { - var error = new Error("query selector raw message size does not match message header size [" + object.length + "] != [" + object_size + "]"); - error.name = 'MongoError'; - throw error; - } - } - - // Validate correctness of the field selector - var object = fields; - if(Buffer.isBuffer(object)) { - var object_size = object[0] | object[1] << 8 | object[2] << 16 | object[3] << 24; - if(object_size != object.length) { - var error = new Error("query fields raw message size does not match message header size [" + object.length + "] != [" + object_size + "]"); - error.name = 'MongoError'; - throw error; - } - } - - // Check special case where we are using an objectId - if(selector instanceof ObjectID || (selector != null && selector._bsontype == 'ObjectID')) { - selector = {_id:selector}; - } - - // If it's a serialized fields field we need to just let it through - // user be warned it better be good - if(options && options.fields && !(Buffer.isBuffer(options.fields))) { - fields = {}; - - if(Array.isArray(options.fields)) { - if(!options.fields.length) { - fields['_id'] = 1; - } else { - for (var i = 0, l = options.fields.length; i < l; i++) { - fields[options.fields[i]] = 1; - } - } - } else { - fields = options.fields; - } - } - - if (!options) options = {}; - options.skip = len > 3 ? args[2] : options.skip ? options.skip : 0; - options.limit = len > 3 ? args[3] : options.limit ? options.limit : 0; - options.raw = options.raw != null && typeof options.raw === 'boolean' ? options.raw : this.raw; - options.hint = options.hint != null ? normalizeHintField(options.hint) : this.internalHint; - options.timeout = len == 5 ? args[4] : typeof options.timeout === 'undefined' ? undefined : options.timeout; - // If we have overridden slaveOk otherwise use the default db setting - options.slaveOk = options.slaveOk != null ? options.slaveOk : this.db.slaveOk; - - // Set option - var o = options; - // Support read/readPreference - if(o["read"] != null) o["readPreference"] = o["read"]; - // Set the read preference - o.read = o["readPreference"] ? o.readPreference : this.readPreference; - // Adjust slave ok if read preference is secondary or secondary only - if(o.read == "secondary" || o.read == "secondaryOnly") options.slaveOk = true; - - // callback for backward compatibility - if(callback) { - // TODO refactor Cursor args - callback(null, new Cursor(this.db, this, selector, fields, o)); - } else { - return new Cursor(this.db, this, selector, fields, o); - } -}; - -/** - * Normalizes a `hint` argument. - * - * @param {String|Object|Array} hint - * @return {Object} - * @api private - */ -var normalizeHintField = function normalizeHintField(hint) { - var finalHint = null; - - if(typeof hint == 'string') { - finalHint = hint; - } else if(Array.isArray(hint)) { - finalHint = {}; - - hint.forEach(function(param) { - finalHint[param] = 1; - }); - } else if(hint != null && typeof hint == 'object') { - finalHint = {}; - for (var name in hint) { - finalHint[name] = hint[name]; - } - } - - return finalHint; -}; +Collection.prototype.find = function() { return query.find; }(); /** * Finds a single document based on the query @@ -992,8 +325,9 @@ var normalizeHintField = function normalizeHintField(hint) { * - **showDiskLoc** {Boolean, default:false}, Show disk location of results. * - **comment** {String}, You can put a $comment field on a query to make looking in the profiler logs simpler. * - **raw** {Boolean, default:false}, Return all BSON documents as Raw Buffer documents. - * - **readPreference** {String}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **partial** {Boolean, default:false}, specify if the cursor should return partial results when querying against a sharded system + * - **maxTimeMS** {Number}, number of miliseconds to wait before aborting the query. * * @param {Object|ObjectID} query query object to locate the object to modify * @param {Object} [options] additional options during update. @@ -1001,38 +335,24 @@ var normalizeHintField = function normalizeHintField(hint) { * @return {Cursor} returns a cursor to the query * @api public */ -Collection.prototype.findOne = function findOne () { - var self = this; - var args = Array.prototype.slice.call(arguments, 0); - var callback = args.pop(); - var cursor = this.find.apply(this, args).limit(-1).batchSize(1); - // Return the item - cursor.nextObject(function(err, item) { - if(err != null) return callback(utils.toError(err), null); - callback(null, item); - }); -}; +Collection.prototype.findOne = function() { return query.findOne; }(); /** * Creates an index on the collection. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **unique** {Boolean, default:false}, creates an unique index. * - **sparse** {Boolean, default:false}, creates a sparse index. * - **background** {Boolean, default:false}, creates the index in the background, yielding whenever possible. - * - **dropDups** {Boolean, default:false}, a unique index cannot be created on a key that has pre-existing duplicate values. If you would like to create the index anyway, keeping the first document the database indexes and deleting all subsequent documents that have duplicate value * - **min** {Number}, for geospatial indexes set the lower bound for the co-ordinates. * - **max** {Number}, for geospatial indexes set the high bound for the co-ordinates. * - **v** {Number}, specify the format version of the indexes. * - **expireAfterSeconds** {Number}, allows you to expire data on indexes applied to a data (MongoDB 2.2 or higher) * - **name** {String}, override the autogenerated index name (useful if the resulting name is larger than 128 bytes) - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {Object} fieldOrSpec fieldOrSpec that defines the index. * @param {Object} [options] additional options during update. @@ -1040,40 +360,24 @@ Collection.prototype.findOne = function findOne () { * @return {null} * @api public */ -Collection.prototype.createIndex = function createIndex (fieldOrSpec, options, callback) { - // Clean up call - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - options = args.length ? args.shift() || {} : {}; - options = typeof callback === 'function' ? options : callback; - options = options == null ? {} : options; - - // Collect errorOptions - var errorOptions = _getWriteConcern(this, options, callback); - // Execute create index - this.db.createIndex(this.collectionName, fieldOrSpec, options, callback); -}; +Collection.prototype.createIndex = function() { return index.createIndex; }(); /** * Ensures that an index exists, if it does not it creates it * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **unique** {Boolean, default:false}, creates an unique index. * - **sparse** {Boolean, default:false}, creates a sparse index. * - **background** {Boolean, default:false}, creates the index in the background, yielding whenever possible. - * - **dropDups** {Boolean, default:false}, a unique index cannot be created on a key that has pre-existing duplicate values. If you would like to create the index anyway, keeping the first document the database indexes and deleting all subsequent documents that have duplicate value * - **min** {Number}, for geospatial indexes set the lower bound for the co-ordinates. * - **max** {Number}, for geospatial indexes set the high bound for the co-ordinates. * - **v** {Number}, specify the format version of the indexes. * - **expireAfterSeconds** {Number}, allows you to expire data on indexes applied to a data (MongoDB 2.2 or higher) * - **name** {String}, override the autogenerated index name (useful if the resulting name is larger than 128 bytes) - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {Object} fieldOrSpec fieldOrSpec that defines the index. * @param {Object} [options] additional options during update. @@ -1081,20 +385,7 @@ Collection.prototype.createIndex = function createIndex (fieldOrSpec, options, c * @return {null} * @api public */ -Collection.prototype.ensureIndex = function ensureIndex (fieldOrSpec, options, callback) { - // Clean up call - if (typeof callback === 'undefined' && typeof options === 'function') { - callback = options; - options = {}; - } - - if (options == null) { - options = {}; - } - - // Execute create index - this.db.ensureIndex(this.collectionName, fieldOrSpec, options, callback); -}; +Collection.prototype.ensureIndex = function() { return index.ensureIndex; }(); /** * Retrieves this collections index info. @@ -1107,14 +398,7 @@ Collection.prototype.ensureIndex = function ensureIndex (fieldOrSpec, options, c * @return {null} * @api public */ -Collection.prototype.indexInformation = function indexInformation (options, callback) { - // Unpack calls - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - options = args.length ? args.shift() || {} : {}; - // Call the index information - this.db.indexInformation(this.collectionName, options, callback); -}; +Collection.prototype.indexInformation = function() { return index.indexInformation; }(); /** * Drops an index from this collection. @@ -1124,8 +408,13 @@ Collection.prototype.indexInformation = function indexInformation (options, call * @return {null} * @api public */ -Collection.prototype.dropIndex = function dropIndex (name, callback) { - this.db.dropIndex(this.collectionName, name, callback); +Collection.prototype.dropIndex = function dropIndex (name, options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } + // Execute dropIndex command + this.db.dropIndex(this.collectionName, name, options, callback); }; /** @@ -1135,17 +424,7 @@ Collection.prototype.dropIndex = function dropIndex (name, callback) { * @return {null} * @api public */ -Collection.prototype.dropAllIndexes = function dropIndexes (callback) { - this.db.dropIndex(this.collectionName, '*', function (err, result) { - if(err != null) { - callback(err, false); - } else if(result.documents[0].errmsg == null) { - callback(null, true); - } else { - callback(new Error(result.documents[0].errmsg), false); - } - }); -}; +Collection.prototype.dropAllIndexes = function() { return index.dropAllIndexes; }(); /** * Drops all indexes from this collection. @@ -1155,7 +434,7 @@ Collection.prototype.dropAllIndexes = function dropIndexes (callback) { * @return {null} * @api private */ -Collection.prototype.dropIndexes = Collection.prototype.dropAllIndexes; +Collection.prototype.dropIndexes = function() { return Collection.prototype.dropAllIndexes; }(); /** * Reindex all indexes on the collection @@ -1165,8 +444,13 @@ Collection.prototype.dropIndexes = Collection.prototype.dropAllIndexes; * @return {null} * @api public **/ -Collection.prototype.reIndex = function(callback) { - this.db.reIndex(this.collectionName, callback); +Collection.prototype.reIndex = function(options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } + // Execute reIndex + this.db.reIndex(this.collectionName, options, callback); } /** @@ -1182,7 +466,7 @@ Collection.prototype.reIndex = function(callback) { * - **scope** {Object}, can pass in variables that can be access from map/reduce/finalize. * - **jsMode** {Boolean, default:false}, it is possible to make the execution stay in JS. Provided in MongoDB > 2.0.X. * - **verbose** {Boolean, default:false}, provide statistics on job execution time. - * - **readPreference** {String, only for inline results}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String, only for inline results}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Function|String} map the mapping function. * @param {Function|String} reduce the reduce function. @@ -1191,155 +475,13 @@ Collection.prototype.reIndex = function(callback) { * @return {null} * @api public */ -Collection.prototype.mapReduce = function mapReduce (map, reduce, options, callback) { - if ('function' === typeof options) callback = options, options = {}; - // Out must allways be defined (make sure we don't break weirdly on pre 1.8+ servers) - if(null == options.out) { - throw new Error("the out option parameter must be defined, see mongodb docs for possible values"); - } - - if ('function' === typeof map) { - map = map.toString(); - } - - if ('function' === typeof reduce) { - reduce = reduce.toString(); - } - - if ('function' === typeof options.finalize) { - options.finalize = options.finalize.toString(); - } - - var mapCommandHash = { - mapreduce: this.collectionName - , map: map - , reduce: reduce - }; - - // Add any other options passed in - for (var name in options) { - if ('scope' == name) { - mapCommandHash[name] = processScope(options[name]); - } else { - mapCommandHash[name] = options[name]; - } - } - - // Set read preference if we set one - var readPreference = options['readPreference'] ? options['readPreference'] : false; - // If we have a read preference and inline is not set as output fail hard - if(readPreference != false && options['out'] != 'inline') { - throw new Error("a readPreference can only be provided when performing an inline mapReduce"); - } - - // self - var self = this; - var cmd = DbCommand.createDbCommand(this.db, mapCommandHash); - - this.db._executeQueryCommand(cmd, {read:readPreference}, function (err, result) { - if (err) { - return callback(err); - } - - // - if (1 != result.documents[0].ok || result.documents[0].err || result.documents[0].errmsg) { - return callback(utils.toError(result.documents[0])); - } - - // Create statistics value - var stats = {}; - if(result.documents[0].timeMillis) stats['processtime'] = result.documents[0].timeMillis; - if(result.documents[0].counts) stats['counts'] = result.documents[0].counts; - if(result.documents[0].timing) stats['timing'] = result.documents[0].timing; - - // invoked with inline? - if(result.documents[0].results) { - return callback(null, result.documents[0].results, stats); - } - - // The returned collection - var collection = null; - - // If we have an object it's a different db - if(result.documents[0].result != null && typeof result.documents[0].result == 'object') { - var doc = result.documents[0].result; - collection = self.db.db(doc.db).collection(doc.collection); - } else { - // Create a collection object that wraps the result collection - collection = self.db.collection(result.documents[0].result) - } - - // If we wish for no verbosity - if(options['verbose'] == null || !options['verbose']) { - return callback(err, collection); - } - - // Return stats as third set of values - callback(err, collection, stats); - }); -}; - -/** - * Functions that are passed as scope args must - * be converted to Code instances. - * @ignore - */ -function processScope (scope) { - if (!utils.isObject(scope)) { - return scope; - } - - var keys = Object.keys(scope); - var i = keys.length; - var key; - - while (i--) { - key = keys[i]; - if ('function' == typeof scope[key]) { - scope[key] = new Code(String(scope[key])); - } - } - - return scope; -} - -/** - * Group function helper - * @ignore - */ -var groupFunction = function () { - var c = db[ns].find(condition); - var map = new Map(); - var reduce_function = reduce; - - while (c.hasNext()) { - var obj = c.next(); - var key = {}; - - for (var i = 0, len = keys.length; i < len; ++i) { - var k = keys[i]; - key[k] = obj[k]; - } - - var aggObj = map.get(key); - - if (aggObj == null) { - var newObj = Object.extend({}, key); - aggObj = Object.extend(newObj, initial); - map.put(key, aggObj); - } - - reduce_function(obj, aggObj); - } - - return { "result": map.values() }; -}.toString(); +Collection.prototype.mapReduce = function() { return aggregation.mapReduce; }(); /** * Run a group command across a collection - * + * * Options - * - **readPreference** {String}, the preferred read preference (Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Object|Array|Function|Code} keys an object, array or function expressing the keys to group by. * @param {Object} condition an optional condition that must be true for a row to be considered. @@ -1352,102 +494,7 @@ var groupFunction = function () { * @return {null} * @api public */ -Collection.prototype.group = function group(keys, condition, initial, reduce, finalize, command, options, callback) { - var args = Array.prototype.slice.call(arguments, 3); - callback = args.pop(); - // Fetch all commands - reduce = args.length ? args.shift() : null; - finalize = args.length ? args.shift() : null; - command = args.length ? args.shift() : null; - options = args.length ? args.shift() || {} : {}; - - // Make sure we are backward compatible - if(!(typeof finalize == 'function')) { - command = finalize; - finalize = null; - } - - if (!Array.isArray(keys) && keys instanceof Object && typeof(keys) !== 'function' && !(keys instanceof Code)) { - keys = Object.keys(keys); - } - - if(typeof reduce === 'function') { - reduce = reduce.toString(); - } - - if(typeof finalize === 'function') { - finalize = finalize.toString(); - } - - // Set up the command as default - command = command == null ? true : command; - - // Execute using the command - if(command) { - var reduceFunction = reduce instanceof Code - ? reduce - : new Code(reduce); - - var selector = { - group: { - 'ns': this.collectionName - , '$reduce': reduceFunction - , 'cond': condition - , 'initial': initial - , 'out': "inline" - } - }; - - // if finalize is defined - if(finalize != null) selector.group['finalize'] = finalize; - // Set up group selector - if ('function' === typeof keys || keys instanceof Code) { - selector.group.$keyf = keys instanceof Code - ? keys - : new Code(keys); - } else { - var hash = {}; - keys.forEach(function (key) { - hash[key] = 1; - }); - selector.group.key = hash; - } - - var cmd = DbCommand.createDbSlaveOkCommand(this.db, selector); - // Set read preference if we set one - var readPreference = options['readPreference'] ? options['readPreference'] : this.readPreference; - - this.db._executeQueryCommand(cmd, {read:readPreference}, function (err, result) { - if(err != null) return callback(err); - - var document = result.documents[0]; - if (null == document.retval) { - return callback(new Error("group command failed: " + document.errmsg)); - } - - callback(null, document.retval); - }); - - } else { - // Create execution scope - var scope = reduce != null && reduce instanceof Code - ? reduce.scope - : {}; - - scope.ns = this.collectionName; - scope.keys = keys; - scope.condition = condition; - scope.initial = initial; - - // Pass in the function text to execute within mongodb. - var groupfn = groupFunction.replace(/ reduce;/, reduce.toString() + ';'); - - this.db.eval(new Code(groupfn, scope), function (err, results) { - if (err) return callback(err, null); - callback(null, results.result || results); - }); - } -}; +Collection.prototype.group = function() { return aggregation.group; }(); /** * Returns the options of the collection. @@ -1456,14 +503,7 @@ Collection.prototype.group = function group(keys, condition, initial, reduce, fi * @return {null} * @api public */ -Collection.prototype.options = function options(callback) { - this.db.collectionsInfo(this.collectionName, function (err, cursor) { - if (err) return callback(err); - cursor.nextObject(function (err, document) { - callback(err, document && document.options || null); - }); - }); -}; +Collection.prototype.options = function() { return commands.options; }(); /** * Returns if the collection is a capped collection @@ -1472,15 +512,7 @@ Collection.prototype.options = function options(callback) { * @return {null} * @api public */ -Collection.prototype.isCapped = function isCapped(callback) { - this.options(function(err, document) { - if(err != null) { - callback(err); - } else { - callback(null, document && document.capped); - } - }); -}; +Collection.prototype.isCapped = function() { return commands.isCapped; }(); /** * Checks if one or more indexes exist on the collection @@ -1490,38 +522,21 @@ Collection.prototype.isCapped = function isCapped(callback) { * @return {null} * @api public */ -Collection.prototype.indexExists = function indexExists(indexes, callback) { - this.indexInformation(function(err, indexInformation) { - // If we have an error return - if(err != null) return callback(err, null); - // Let's check for the index names - if(Array.isArray(indexes)) { - for(var i = 0; i < indexes.length; i++) { - if(indexInformation[indexes[i]] == null) { - return callback(null, false); - } - } - - // All keys found return true - return callback(null, true); - } else { - return callback(null, indexInformation[indexes] != null); - } - }); -} +Collection.prototype.indexExists = function() { return index.indexExists; }(); /** * Execute the geoNear command to search for items in the collection * * Options * - **num** {Number}, max number of results to return. + * - **minDistance** {Number}, include results starting at minDistance from a point (2.6 or higher) * - **maxDistance** {Number}, include results up to maxDistance from the point. * - **distanceMultiplier** {Number}, include a value to multiply the distances with allowing for range conversions. * - **query** {Object}, filter the results by a query. * - **spherical** {Boolean, default:false}, perform query using a spherical model. * - **uniqueDocs** {Boolean, default:false}, the closest location in a document to the center of the search region will always be returned MongoDB > 2.X. * - **includeLocs** {Boolean, default:false}, include the location data fields in the top level of the results MongoDB > 2.X. - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Number} x point to search on the x axis, ensure the indexes are ordered in the same order. * @param {Number} y point to search on the y axis, ensure the indexes are ordered in the same order. @@ -1530,30 +545,7 @@ Collection.prototype.indexExists = function indexExists(indexes, callback) { * @return {null} * @api public */ -Collection.prototype.geoNear = function geoNear(x, y, options, callback) { - var args = Array.prototype.slice.call(arguments, 2); - callback = args.pop(); - // Fetch all commands - options = args.length ? args.shift() || {} : {}; - - // Build command object - var commandObject = { - geoNear:this.collectionName, - near: [x, y] - } - - // Decorate object if any with known properties - if(options['num'] != null) commandObject['num'] = options['num']; - if(options['maxDistance'] != null) commandObject['maxDistance'] = options['maxDistance']; - if(options['distanceMultiplier'] != null) commandObject['distanceMultiplier'] = options['distanceMultiplier']; - if(options['query'] != null) commandObject['query'] = options['query']; - if(options['spherical'] != null) commandObject['spherical'] = options['spherical']; - if(options['uniqueDocs'] != null) commandObject['uniqueDocs'] = options['uniqueDocs']; - if(options['includeLocs'] != null) commandObject['includeLocs'] = options['includeLocs']; - - // Execute the command - this.db.command(commandObject, options, callback); -} +Collection.prototype.geoNear = function() { return geo.geoNear; }(); /** * Execute a geo search using a geo haystack index on a collection. @@ -1562,7 +554,7 @@ Collection.prototype.geoNear = function geoNear(x, y, options, callback) { * - **maxDistance** {Number}, include results up to maxDistance from the point. * - **search** {Object}, filter the results by a query. * - **limit** {Number}, max number of results to return. - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Number} x point to search on the x axis, ensure the indexes are ordered in the same order. * @param {Number} y point to search on the y axis, ensure the indexes are ordered in the same order. @@ -1571,27 +563,7 @@ Collection.prototype.geoNear = function geoNear(x, y, options, callback) { * @return {null} * @api public */ -Collection.prototype.geoHaystackSearch = function geoHaystackSearch(x, y, options, callback) { - var args = Array.prototype.slice.call(arguments, 2); - callback = args.pop(); - // Fetch all commands - options = args.length ? args.shift() || {} : {}; - - // Build command object - var commandObject = { - geoSearch:this.collectionName, - near: [x, y] - } - - // Decorate object if any with known properties - if(options['maxDistance'] != null) commandObject['maxDistance'] = options['maxDistance']; - if(options['query'] != null) commandObject['search'] = options['query']; - if(options['search'] != null) commandObject['search'] = options['search']; - if(options['limit'] != null) commandObject['limit'] = options['limit']; - - // Execute the command - this.db.command(commandObject, options, callback); -} +Collection.prototype.geoHaystackSearch = function() { return geo.geoHaystackSearch; }(); /** * Retrieve all the indexes on the collection. @@ -1601,15 +573,19 @@ Collection.prototype.geoHaystackSearch = function geoHaystackSearch(x, y, option * @api public */ Collection.prototype.indexes = function indexes(callback) { - // Return all the index information this.db.indexInformation(this.collectionName, {full:true}, callback); } /** - * Execute an aggregation framework pipeline against the collection, needs MongoDB >= 2.1 + * Execute an aggregation framework pipeline against the collection, needs MongoDB >= 2.2 * * Options - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **cursor** {Object}, return the query as cursor, on 2.6 > it returns as a real cursor on pre 2.6 it returns as an emulated cursor. + * - **cursor.batchSize** {Number}, the batchSize for the cursor + * - **out** {String}, the collection name to where to write the results from the aggregation (MongoDB 2.6 or higher). Warning any existing collection will be overwritten. + * - **explain** {Boolean, default:false}, explain returns the aggregation execution plan (requires mongodb 2.6 >). + * - **allowDiskUse** {Boolean, default:false}, allowDiskUse lets the server know if it can use disk to store temporary results for the aggregation (requires mongodb 2.6 >). * * @param {Array} array containing all the aggregation framework commands for the execution. * @param {Object} [options] additional options during update. @@ -1617,75 +593,69 @@ Collection.prototype.indexes = function indexes(callback) { * @return {null} * @api public */ -Collection.prototype.aggregate = function(pipeline, options, callback) { - // * - **explain** {Boolean}, return the query plan for the aggregation pipeline instead of the results. 2.3, 2.4 - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - var self = this; - - // If we have any of the supported options in the options object - var opts = args[args.length - 1]; - options = opts.readPreference || opts.explain ? args.pop() : {} - - // Convert operations to an array - if(!Array.isArray(args[0])) { - pipeline = []; - // Push all the operations to the pipeline - for(var i = 0; i < args.length; i++) pipeline.push(args[i]); - } - - // Build the command - var command = { aggregate : this.collectionName, pipeline : pipeline}; - // Add all options - var keys = Object.keys(options); - // Add all options - for(var i = 0; i < keys.length; i++) { - command[keys[i]] = options[keys[i]]; - } - - // Execute the command - this.db.command(command, options, function(err, result) { - if(err) { - callback(err); - } else if(result['err'] || result['errmsg']) { - callback(utils.toError(result)); - } else if(typeof result == 'object' && result['serverPipeline']) { - callback(null, result); - } else { - callback(null, result.result); - } - }); -} +Collection.prototype.aggregate = function() { return aggregation.aggregate; }(); /** * Get all the collection statistics. * * Options * - **scale** {Number}, divide the returned sizes by scale value. - * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). + * - **readPreference** {String}, the preferred read preference, require('mongodb').ReadPreference ((ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Objects} [options] options for the stats command. * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from the stats method or null if an error occured. * @return {null} * @api public */ -Collection.prototype.stats = function stats(options, callback) { - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - // Fetch all commands - options = args.length ? args.shift() || {} : {}; +Collection.prototype.stats = function() { return commands.stats; }(); - // Build command object - var commandObject = { - collStats:this.collectionName, - } +/** + * Initiate a Out of order batch write operation. All operations will be buffered into insert/update/remove commands executed out of order. + * + * Options + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning + * + * @param {Objects} [options] options for the initializeUnorderedBatch + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. The second argument will be a UnorderedBulkOperation object. + * @return {UnorderedBulkOperation} + * @api public + */ +Collection.prototype.initializeUnorderedBulkOp = function() { return unordered.initializeUnorderedBulkOp; }(); - // Check if we have the scale value - if(options['scale'] != null) commandObject['scale'] = options['scale']; +/** + * Initiate an In order bulk write operation, operations will be serially executed in the order they are added, creating a new operation for each switch in types. + * + * Options + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning + * + * @param {Objects} [options] options for the initializeOrderedBulkOp + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. The second argument will be a OrderedBulkOperation object. + * @return {OrderedBulkOperation} + * @api public + */ +Collection.prototype.initializeOrderedBulkOp = function() { return ordered.initializeOrderedBulkOp; }(); - // Execute the command - this.db.command(commandObject, options, callback); -} +/** + * Return N number of parallel cursors for a collection allowing parallel reading of entire collection. There are + * no ordering guarantees for returned results. + * + * Options + * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **batchSize** {Number, default:0}, set the batchSize for the getMoreCommand when iterating over the query results. + * - **numCursors**, {Number, 1} the maximum number of parallel command cursors to return (the number of returned cursors will be in the range 1:numCursors) + * + * @param {Objects} [options] options for the initializeOrderedBulkOp + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. The second argument will be an array of CommandCursor instances. + * @return {OrderedBulkOperation} + * @api public + */ +Collection.prototype.parallelCollectionScan = function() { return query.parallelCollectionScan; }(); /** * @ignore @@ -1696,68 +666,10 @@ Object.defineProperty(Collection.prototype, "hint", { return this.internalHint; } , set: function (v) { - this.internalHint = normalizeHintField(v); + this.internalHint = shared.normalizeHintField(v); } }); -/** - * @ignore - */ -var _hasWriteConcern = function(errorOptions) { - return errorOptions == true - || errorOptions.w > 0 - || errorOptions.w == 'majority' - || errorOptions.j == true - || errorOptions.journal == true - || errorOptions.fsync == true -} - -/** - * @ignore - */ -var _setWriteConcernHash = function(options) { - var finalOptions = {}; - if(options.w != null) finalOptions.w = options.w; - if(options.journal == true) finalOptions.j = options.journal; - if(options.j == true) finalOptions.j = options.j; - if(options.fsync == true) finalOptions.fsync = options.fsync; - if(options.wtimeout != null) finalOptions.wtimeout = options.wtimeout; - return finalOptions; -} - -/** - * @ignore - */ -var _getWriteConcern = function(self, options, callback) { - // Final options - var finalOptions = {w:1}; - // Local options verification - if(options.w != null || typeof options.j == 'boolean' || typeof options.journal == 'boolean' || typeof options.fsync == 'boolean') { - finalOptions = _setWriteConcernHash(options); - } else if(typeof options.safe == "boolean") { - finalOptions = {w: (options.safe ? 1 : 0)}; - } else if(options.safe != null && typeof options.safe == 'object') { - finalOptions = _setWriteConcernHash(options.safe); - } else if(self.opts.w != null || typeof self.opts.j == 'boolean' || typeof self.opts.journal == 'boolean' || typeof self.opts.fsync == 'boolean') { - finalOptions = _setWriteConcernHash(self.opts); - } else if(typeof self.opts.safe == "boolean") { - finalOptions = {w: (self.opts.safe ? 1 : 0)}; - } else if(self.db.safe.w != null || typeof self.db.safe.j == 'boolean' || typeof self.db.safe.journal == 'boolean' || typeof self.db.safe.fsync == 'boolean') { - finalOptions = _setWriteConcernHash(self.db.safe); - } else if(self.db.options.w != null || typeof self.db.options.j == 'boolean' || typeof self.db.options.journal == 'boolean' || typeof self.db.options.fsync == 'boolean') { - finalOptions = _setWriteConcernHash(self.db.options); - } else if(typeof self.db.safe == "boolean") { - finalOptions = {w: (self.db.safe ? 1 : 0)}; - } - - // Ensure we don't have an invalid combination of write concerns - if(finalOptions.w < 1 - && (finalOptions.journal == true || finalOptions.j == true || finalOptions.fsync == true)) throw new Error("No acknowlegement using w < 1 cannot be combined with journal:true or fsync:true"); - - // Return the options - return finalOptions; -} - /** * Expose. */ diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/db_command.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/db_command.js index f8751b5..39bdb6e 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/db_command.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/db_command.js @@ -17,8 +17,17 @@ var DbCommand = exports.DbCommand = function(dbInstance, collectionName, queryOp this.returnFieldSelector = returnFieldSelector; this.db = dbInstance; + // Set the slave ok bit + if(this.db && this.db.slaveOk) { + this.queryOptions |= QueryCommand.OPTS_SLAVE; + } + // Make sure we don't get a null exception options = options == null ? {} : options; + + // Allow for overriding the BSON checkKeys function + this.checkKeys = typeof options['checkKeys'] == 'boolean' ? options["checkKeys"] : true; + // Let us defined on a command basis if we want functions to be serialized or not if(options['serializeFunctions'] != null && options['serializeFunctions']) { this.serializeFunctions = true; @@ -45,57 +54,7 @@ DbCommand.createIsMasterCommand = function(db) { return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'ismaster':1}, null); }; -DbCommand.createCollectionInfoCommand = function(db, selector) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_NAMESPACE_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, 0, selector, null); -}; - -DbCommand.createGetNonceCommand = function(db, options) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'getnonce':1}, null); -}; - -DbCommand.createAuthenticationCommand = function(db, username, password, nonce, authdb) { - // Use node md5 generator - var md5 = crypto.createHash('md5'); - // Generate keys used for authentication - md5.update(username + ":mongo:" + password); - var hash_password = md5.digest('hex'); - // Final key - md5 = crypto.createHash('md5'); - md5.update(nonce + username + hash_password); - var key = md5.digest('hex'); - // Creat selector - var selector = {'authenticate':1, 'user':username, 'nonce':nonce, 'key':key}; - // Create db command - return new DbCommand(db, authdb + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NONE, 0, -1, selector, null); -}; - -DbCommand.createLogoutCommand = function(db) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'logout':1}, null); -}; - -DbCommand.createCreateCollectionCommand = function(db, collectionName, options) { - var selector = {'create':collectionName}; - // Modify the options to ensure correct behaviour - for(var name in options) { - if(options[name] != null && options[name].constructor != Function) selector[name] = options[name]; - } - // Execute the command - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, selector, null); -}; - -DbCommand.createDropCollectionCommand = function(db, collectionName) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'drop':collectionName}, null); -}; - -DbCommand.createRenameCollectionCommand = function(db, fromCollectionName, toCollectionName, options) { - var renameCollection = db.databaseName + "." + fromCollectionName; - var toCollection = db.databaseName + "." + toCollectionName; - var dropTarget = options && options.dropTarget ? options.dropTarget : false; - return new DbCommand(db, "admin." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'renameCollection':renameCollection, 'to':toCollection, 'dropTarget':dropTarget}, null); -}; - DbCommand.createGetLastErrorCommand = function(options, db) { - if (typeof db === 'undefined') { db = options; options = {}; @@ -120,111 +79,9 @@ DbCommand.createGetLastErrorCommand = function(options, db) { DbCommand.createGetLastStatusCommand = DbCommand.createGetLastErrorCommand; -DbCommand.createGetPreviousErrorsCommand = function(db) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'getpreverror':1}, null); -}; - -DbCommand.createResetErrorHistoryCommand = function(db) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'reseterror':1}, null); -}; - -DbCommand.createCreateIndexCommand = function(db, collectionName, fieldOrSpec, options) { - var fieldHash = {}; - var indexes = []; - var keys; - - // Get all the fields accordingly - if('string' == typeof fieldOrSpec) { - // 'type' - indexes.push(fieldOrSpec + '_' + 1); - fieldHash[fieldOrSpec] = 1; - - } else if(utils.isArray(fieldOrSpec)) { - - fieldOrSpec.forEach(function(f) { - if('string' == typeof f) { - // [{location:'2d'}, 'type'] - indexes.push(f + '_' + 1); - fieldHash[f] = 1; - } else if(utils.isArray(f)) { - // [['location', '2d'],['type', 1]] - indexes.push(f[0] + '_' + (f[1] || 1)); - fieldHash[f[0]] = f[1] || 1; - } else if(utils.isObject(f)) { - // [{location:'2d'}, {type:1}] - keys = Object.keys(f); - keys.forEach(function(k) { - indexes.push(k + '_' + f[k]); - fieldHash[k] = f[k]; - }); - } else { - // undefined (ignore) - } - }); - - } else if(utils.isObject(fieldOrSpec)) { - // {location:'2d', type:1} - keys = Object.keys(fieldOrSpec); - keys.forEach(function(key) { - indexes.push(key + '_' + fieldOrSpec[key]); - fieldHash[key] = fieldOrSpec[key]; - }); - } - - // Generate the index name - var indexName = typeof options.name == 'string' - ? options.name - : indexes.join("_"); - - var selector = { - 'ns': db.databaseName + "." + collectionName, - 'key': fieldHash, - 'name': indexName - } - - // Ensure we have a correct finalUnique - var finalUnique = options == null || 'object' === typeof options - ? false - : options; - - // Set up options - options = options == null || typeof options == 'boolean' - ? {} - : options; - - // Add all the options - var keys = Object.keys(options); - for(var i = 0; i < keys.length; i++) { - selector[keys[i]] = options[keys[i]]; - } - - if(selector['unique'] == null) - selector['unique'] = finalUnique; - - var name = db.databaseName + "." + DbCommand.SYSTEM_INDEX_COLLECTION; - var cmd = new InsertCommand(db, name, false); - return cmd.add(selector); -}; - -DbCommand.logoutCommand = function(db, command_hash, options) { - var dbName = options != null && options['authdb'] != null ? options['authdb'] : db.databaseName; - return new DbCommand(db, dbName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, command_hash, null); -} - -DbCommand.createDropIndexCommand = function(db, collectionName, indexName) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'deleteIndexes':collectionName, 'index':indexName}, null); -}; - -DbCommand.createReIndexCommand = function(db, collectionName) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'reIndex':collectionName}, null); -}; - -DbCommand.createDropDatabaseCommand = function(db) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, {'dropDatabase':1}, null); -}; - DbCommand.createDbCommand = function(db, command_hash, options, auth_db) { var db_name = (auth_db ? auth_db : db.databaseName) + "." + DbCommand.SYSTEM_COMMAND_COLLECTION; + options = options == null ? {checkKeys: false} : options; return new DbCommand(db, db_name, QueryCommand.OPTS_NO_CURSOR_TIMEOUT, 0, -1, command_hash, null, options); }; @@ -237,5 +94,8 @@ DbCommand.createAdminDbCommandSlaveOk = function(db, command_hash) { }; DbCommand.createDbSlaveOkCommand = function(db, command_hash, options) { - return new DbCommand(db, db.databaseName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, QueryCommand.OPTS_NO_CURSOR_TIMEOUT | QueryCommand.OPTS_SLAVE, 0, -1, command_hash, null, options); + options = options == null ? {checkKeys: false} : options; + var dbName = options.dbName ? options.dbName : db.databaseName; + var flags = options.slaveOk ? QueryCommand.OPTS_NO_CURSOR_TIMEOUT | QueryCommand.OPTS_SLAVE : QueryCommand.OPTS_NO_CURSOR_TIMEOUT; + return new DbCommand(db, dbName + "." + DbCommand.SYSTEM_COMMAND_COLLECTION, flags, 0, -1, command_hash, null, options); }; diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/delete_command.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/delete_command.js index e6ae20a..61a37ed 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/delete_command.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/delete_command.js @@ -37,9 +37,24 @@ struct { mongo.BSON selector; // query object. See below for details. } */ -DeleteCommand.prototype.toBinary = function() { +DeleteCommand.prototype.toBinary = function(bsonSettings) { + // Validate that we are not passing 0x00 in the colletion name + if(!!~this.collectionName.indexOf("\x00")) { + throw new Error("namespace cannot contain a null character"); + } + // Calculate total length of the document var totalLengthOfCommand = 4 + Buffer.byteLength(this.collectionName) + 1 + 4 + this.db.bson.calculateObjectSize(this.selector, false, true) + (4 * 4); + + // Enforce maximum bson size + if(!bsonSettings.disableDriverBSONSizeCheck + && totalLengthOfCommand > bsonSettings.maxBsonSize) + throw new Error("Document exceeds maximum allowed bson size of " + bsonSettings.maxBsonSize + " bytes"); + + if(bsonSettings.disableDriverBSONSizeCheck + && totalLengthOfCommand > bsonSettings.maxMessageSizeBytes) + throw new Error("Command exceeds maximum message size of " + bsonSettings.maxMessageSizeBytes + " bytes"); + // Let's build the single pass buffer command var _index = 0; var _command = new Buffer(totalLengthOfCommand); @@ -98,7 +113,7 @@ DeleteCommand.prototype.toBinary = function() { // Copy the data into the current buffer this.selector.copy(_command, _index); } else { - documentLength = this.db.bson.serializeWithBufferAndIndex(this.selector, this.checkKeys, _command, _index) - _index + 1; + documentLength = this.db.bson.serializeWithBufferAndIndex(this.selector, false, _command, _index) - _index + 1; } // Write the length to the document diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/get_more_command.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/get_more_command.js index d3aac02..1b6b172 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/get_more_command.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/get_more_command.js @@ -19,6 +19,11 @@ inherits(GetMoreCommand, BaseCommand); GetMoreCommand.OP_GET_MORE = 2005; GetMoreCommand.prototype.toBinary = function() { + // Validate that we are not passing 0x00 in the colletion name + if(!!~this.collectionName.indexOf("\x00")) { + throw new Error("namespace cannot contain a null character"); + } + // Calculate total length of the document var totalLengthOfCommand = 4 + Buffer.byteLength(this.collectionName) + 1 + 4 + 8 + (4 * 4); // Let's build the single pass buffer command diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/insert_command.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/insert_command.js index d6a2100..c6e51e9 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/insert_command.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/insert_command.js @@ -62,7 +62,12 @@ struct { BSON[] documents; // one or more documents to insert into the collection } */ -InsertCommand.prototype.toBinary = function() { +InsertCommand.prototype.toBinary = function(bsonSettings) { + // Validate that we are not passing 0x00 in the colletion name + if(!!~this.collectionName.indexOf("\x00")) { + throw new Error("namespace cannot contain a null character"); + } + // Calculate total length of the document var totalLengthOfCommand = 4 + Buffer.byteLength(this.collectionName) + 1 + (4 * 4); // var docLength = 0 @@ -75,6 +80,15 @@ InsertCommand.prototype.toBinary = function() { } } + // Enforce maximum bson size + if(!bsonSettings.disableDriverBSONSizeCheck + && totalLengthOfCommand > bsonSettings.maxBsonSize) + throw new Error("Document exceeds maximum allowed bson size of " + bsonSettings.maxBsonSize + " bytes"); + + if(bsonSettings.disableDriverBSONSizeCheck + && totalLengthOfCommand > bsonSettings.maxMessageSizeBytes) + throw new Error("Command exceeds maximum message size of " + bsonSettings.maxMessageSizeBytes + " bytes"); + // Let's build the single pass buffer command var _index = 0; var _command = new Buffer(totalLengthOfCommand); diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/query_command.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/query_command.js index 76829d9..196c9f1 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/query_command.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/query_command.js @@ -44,6 +44,14 @@ var QueryCommand = exports.QueryCommand = function(db, collectionName, queryOpti this.returnFieldSelector = returnFieldSelector; this.db = db; + // Force the slave ok flag to be set if we are not using primary read preference + if(this.db && this.db.slaveOk) { + this.queryOptions |= QueryCommand.OPTS_SLAVE; + } + + // If checkKeys set + this.checkKeys = typeof options.checkKeys == 'boolean' ? options.checkKeys : false; + // Let us defined on a command basis if we want functions to be serialized or not if(options['serializeFunctions'] != null && options['serializeFunctions']) { this.serializeFunctions = true; @@ -58,6 +66,8 @@ QueryCommand.OP_QUERY = 2004; * Adds the read prefrence to the current command */ QueryCommand.prototype.setMongosReadPreference = function(readPreference, tags) { + // No read preference specified + if(readPreference == false) return; // If we have readPreference set to true set to secondary prefered if(readPreference == true) { readPreference = 'secondaryPreferred'; @@ -65,6 +75,10 @@ QueryCommand.prototype.setMongosReadPreference = function(readPreference, tags) readPreference = 'primary'; } + // If we have primary read preference ignore it + if(readPreference == 'primary' + || readPreference.mode == 'primary') return; + // Force the slave ok flag to be set if we are not using primary read preference if(readPreference != false && readPreference != 'primary') { this.queryOptions |= QueryCommand.OPTS_SLAVE; @@ -110,7 +124,12 @@ struct { [ BSON returnFieldSelector; ] // OPTIONAL : selector indicating the fields to return. See below for details. } */ -QueryCommand.prototype.toBinary = function() { +QueryCommand.prototype.toBinary = function(bsonSettings) { + // Validate that we are not passing 0x00 in the colletion name + if(!!~this.collectionName.indexOf("\x00")) { + throw new Error("namespace cannot contain a null character"); + } + // Total length of the command var totalLengthOfCommand = 0; // Calculate total length of the document @@ -129,6 +148,15 @@ QueryCommand.prototype.toBinary = function() { totalLengthOfCommand += this.returnFieldSelector.length; } + // Enforce maximum bson size + if(!bsonSettings.disableDriverBSONSizeCheck + && totalLengthOfCommand > bsonSettings.maxBsonSize) + throw new Error("Document exceeds maximum allowed bson size of " + bsonSettings.maxBsonSize + " bytes"); + + if(bsonSettings.disableDriverBSONSizeCheck + && totalLengthOfCommand > bsonSettings.maxMessageSizeBytes) + throw new Error("Command exceeds maximum message size of " + bsonSettings.maxMessageSizeBytes + " bytes"); + // Let's build the single pass buffer command var _index = 0; var _command = new Buffer(totalLengthOfCommand); @@ -197,6 +225,13 @@ QueryCommand.prototype.toBinary = function() { // Copy the data into the current buffer object.copy(_command, _index); } else { + // If $query we need to check for a valid document + if(this.query['$query']) { + this.db.bson.serializeWithBufferAndIndex(object['$query'], this.checkKeys, _command, _index, this.serializeFunctions) - _index + 1; + // Cannot check keys due to $query + this.checkKeys = false; + } + // Serialize the document straight to the buffer documentLength = this.db.bson.serializeWithBufferAndIndex(object, this.checkKeys, _command, _index, this.serializeFunctions) - _index + 1; } @@ -208,7 +243,7 @@ QueryCommand.prototype.toBinary = function() { _command[_index] = documentLength & 0xff; // Update index in buffer _index = _index + documentLength; - // Add terminating 0 for the object + // // Add terminating 0 for the object _command[_index - 1] = 0; // Push field selector if available @@ -254,7 +289,7 @@ QueryCommand.prototype.toBinary = function() { QueryCommand.OPTS_NONE = 0; QueryCommand.OPTS_TAILABLE_CURSOR = 2; QueryCommand.OPTS_SLAVE = 4; -QueryCommand.OPTS_OPLOG_REPLY = 8; +QueryCommand.OPTS_OPLOG_REPLAY = 8; QueryCommand.OPTS_NO_CURSOR_TIMEOUT = 16; QueryCommand.OPTS_AWAIT_DATA = 32; QueryCommand.OPTS_EXHAUST = 64; diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/update_command.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/update_command.js index 9829dea..daa3cba 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/update_command.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/commands/update_command.js @@ -32,6 +32,7 @@ var UpdateCommand = exports.UpdateCommand = function(db, collectionName, spec, d this.document = document; this.db = db; this.serializeFunctions = false; + this.checkKeys = typeof options.checkKeys != 'boolean' ? false : options.checkKeys; // Generate correct flags var db_upsert = 0; @@ -61,11 +62,25 @@ struct { BSON document; // the document data to update with or insert } */ -UpdateCommand.prototype.toBinary = function() { +UpdateCommand.prototype.toBinary = function(bsonSettings) { + // Validate that we are not passing 0x00 in the colletion name + if(!!~this.collectionName.indexOf("\x00")) { + throw new Error("namespace cannot contain a null character"); + } + // Calculate total length of the document var totalLengthOfCommand = 4 + Buffer.byteLength(this.collectionName) + 1 + 4 + this.db.bson.calculateObjectSize(this.spec, false, true) + this.db.bson.calculateObjectSize(this.document, this.serializeFunctions, true) + (4 * 4); + // Enforce maximum bson size + if(!bsonSettings.disableDriverBSONSizeCheck + && totalLengthOfCommand > bsonSettings.maxBsonSize) + throw new Error("Document exceeds maximum allowed bson size of " + bsonSettings.maxBsonSize + " bytes"); + + if(bsonSettings.disableDriverBSONSizeCheck + && totalLengthOfCommand > bsonSettings.maxMessageSizeBytes) + throw new Error("Command exceeds maximum message size of " + bsonSettings.maxMessageSizeBytes + " bytes"); + // Let's build the single pass buffer command var _index = 0; var _command = new Buffer(totalLengthOfCommand); @@ -153,7 +168,7 @@ UpdateCommand.prototype.toBinary = function() { // Copy the data into the current buffer object.copy(_command, _index); } else { - documentLength = this.db.bson.serializeWithBufferAndIndex(object, this.checkKeys, _command, _index, this.serializeFunctions) - _index + 1; + documentLength = this.db.bson.serializeWithBufferAndIndex(object, false, _command, _index, this.serializeFunctions) - _index + 1; } // Write the length to the document diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js index 372b586..b4bc8e4 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/base.js @@ -1,8 +1,12 @@ var EventEmitter = require('events').EventEmitter , inherits = require('util').inherits + , utils = require('../utils') , mongodb_cr_authenticate = require('../auth/mongodb_cr.js').authenticate , mongodb_gssapi_authenticate = require('../auth/mongodb_gssapi.js').authenticate - , mongodb_sspi_authenticate = require('../auth/mongodb_sspi.js').authenticate; + , mongodb_sspi_authenticate = require('../auth/mongodb_sspi.js').authenticate + , mongodb_plain_authenticate = require('../auth/mongodb_plain.js').authenticate + , mongodb_x509_authenticate = require('../auth/mongodb_x509.js').authenticate + , mongodb_scram_authenticate = require('../auth/mongodb_scram.js').authenticate; var id = 0; @@ -36,63 +40,99 @@ CallbackStore.prototype.callbackInfo = function(id) { * @ignore */ var NonExecutedOperationStore = function(config) { - this.config = config; - this.commands = { + var commands = { read: [] , write_reads: [] , write: [] }; -} -NonExecutedOperationStore.prototype.write = function(op) { - this.commands.write.push(op); -} + // Execute all callbacks + var fireCallbacksWithError = function(error, commands) { + while(commands.length > 0) { + var command = commands.shift(); + if(typeof command.callback == 'function') { + command.callback(error); + } + } + } -NonExecutedOperationStore.prototype.read_from_writer = function(op) { - this.commands.write_reads.push(op); -} + this.count = function() { + return commands.read.length + + commands.write_reads.length + + commands.write.length; + } -NonExecutedOperationStore.prototype.read = function(op) { - this.commands.read.push(op); -} + this.write = function(op) { + commands.write.push(op); + } -NonExecutedOperationStore.prototype.execute_queries = function(executeInsertCommand) { - var connection = this.config.checkoutReader(); - if(connection == null || connection instanceof Error) return; - - // Write out all the queries - while(this.commands.read.length > 0) { - // Get the next command - var command = this.commands.read.shift(); - // command['options'].connection = this.config.checkoutReader(); - command.options.connection = connection; - // Execute the next command - command.executeQueryCommand(command.db, command.db_command, command.options, command.callback); + this.read_from_writer = function(op) { + commands.write_reads.push(op); } -} -NonExecutedOperationStore.prototype.execute_writes = function() { - var connection = this.config.checkoutWriter(); - if(connection == null || connection instanceof Error) return; - - // Write out all the queries to the primary - while(this.commands.write_reads.length > 0) { - // Get the next command - var command = this.commands.write_reads.shift(); - command.options.connection = connection; - // Execute the next command - command.executeQueryCommand(command.db, command.db_command, command.options, command.callback); + this.read = function(op) { + commands.read.push(op); + } + + this.validateBufferLimit = function(numberToFailOn) { + if(numberToFailOn == -1 || numberToFailOn == null) + return true; + + // Error passed back + var error = utils.toError("No connection operations buffering limit of " + numberToFailOn + " reached"); + + // If we have passed the number of items to buffer we need to fail + if(numberToFailOn < this.count()) { + // Fail all of the callbacks + fireCallbacksWithError(error, commands.read); + fireCallbacksWithError(error, commands.write_reads); + fireCallbacksWithError(error, commands.write); + + // Report back that the buffer has been filled + return false; + } + + // There is still some room to go + return true; } - // Execute all write operations - while(this.commands.write.length > 0) { - // Get the next command - var command = this.commands.write.shift(); - // Set the connection - command.options.connection = connection; - // Execute the next command - command.executeInsertCommand(command.db, command.db_command, command.options, command.callback); - } + this.execute_queries = function(executeInsertCommand) { + var connection = config.checkoutReader(); + if(connection == null || connection instanceof Error) return; + + // Write out all the queries + while(commands.read.length > 0) { + // Get the next command + var command = commands.read.shift(); + command.options.connection = connection; + // Execute the next command + command.executeQueryCommand(command.db, command.db_command, command.options, command.callback); + } + } + + this.execute_writes = function() { + var connection = config.checkoutWriter(); + if(connection == null || connection instanceof Error) return; + + // Write out all the queries to the primary + while(commands.write_reads.length > 0) { + // Get the next command + var command = commands.write_reads.shift(); + command.options.connection = connection; + // Execute the next command + command.executeQueryCommand(command.db, command.db_command, command.options, command.callback); + } + + // Execute all write operations + while(commands.write.length > 0) { + // Get the next command + var command = commands.write.shift(); + // Set the connection + command.options.connection = connection; + // Execute the next command + command.executeInsertCommand(command.db, command.db_command, command.options, command.callback); + } + } } /** @@ -100,60 +140,61 @@ NonExecutedOperationStore.prototype.execute_writes = function() { * @ignore */ var AuthStore = function() { - this._auths = []; -} + var _auths = []; + + this.add = function(authMechanism, dbName, username, password, authdbName, gssapiServiceName) { + // Check for duplicates + if(!this.contains(dbName)) { + // Base config + var config = { + 'username':username + , 'password':password + , 'db': dbName + , 'authMechanism': authMechanism + , 'gssapiServiceName': gssapiServiceName + }; + + // Add auth source if passed in + if(typeof authdbName == 'string') { + config['authdb'] = authdbName; + } -AuthStore.prototype.add = function(authMechanism, dbName, username, password, authdbName) { - // Check for duplicates - if(!this.contains(dbName)) { - // Base config - var config = { - 'username':username - , 'password':password - , 'db': dbName - , 'authMechanism': authMechanism - }; - - // Add auth source if passed in - if(typeof authdbName == 'string') { - config['authdb'] = authdbName; + // Push the config + _auths.push(config); } + } - // Push the config - this._auths.push(config); - } -} + this.contains = function(dbName) { + for(var i = 0; i < _auths.length; i++) { + if(_auths[i].db == dbName) return true; + } -AuthStore.prototype.contains = function(dbName) { - for(var i = 0; i < this._auths.length; i++) { - if(this._auths[i].db == dbName) return true; + return false; } - return false; -} + this.remove = function(dbName) { + var newAuths = []; -AuthStore.prototype.remove = function(dbName) { - var newAuths = []; + // Filter out all the login details + for(var i = 0; i < _auths.length; i++) { + if(_auths[i].db != dbName) newAuths.push(_auths[i]); + } - // Filter out all the login details - for(var i = 0; i < this._auths.length; i++) { - if(this._auths[i].db != dbName) newAuths.push(this._auths[i]); + // Set the filtered list + _auths = newAuths; } - // Set the filtered list - this._auths = newAuths; -} - -AuthStore.prototype.get = function(index) { - return this._auths[index]; -} + this.get = function(index) { + return _auths[index]; + } -AuthStore.prototype.length = function() { - return this._auths.length; -} + this.length = function() { + return _auths.length; + } -AuthStore.prototype.toArray = function() { - return this._auths.slice(0); + this.toArray = function() { + return _auths.slice(0); + } } /** @@ -161,45 +202,72 @@ AuthStore.prototype.toArray = function() { * @ignore */ var DbStore = function() { - this._dbs = []; -} + var _dbs = []; + + this.add = function(db) { + var found = false; + + // Only add if it does not exist already + for(var i = 0; i < _dbs.length; i++) { + if(db.databaseName == _dbs[i].databaseName) found = true; + } -DbStore.prototype.add = function(db) { - // this._dbs.push(db); - var found = false; - // Only add if it does not exist already - for(var i = 0; i < this._dbs.length; i++) { - if(db.databaseName == this._dbs[i].databaseName) found = true; + // Only add if it does not already exist + if(!found) { + _dbs.push(db); + } } - if(!found) this._dbs.push(db); -} + this.reset = function() { + _dbs = []; + } -DbStore.prototype.reset = function() { - this._dbs = []; -} + this.db = function() { + return _dbs; + } -DbStore.prototype.emit = function(event, message, object, reset, filterDb) { - if(reset) { - while(this._dbs.length > 0) { - var db = this._dbs.shift(); - // Only emit if there is a listener - if(db.listeners(event).length > 0) { - if(filterDb == null || filterDb.databaseName !== db.databaseName - || filterDb.tag !== db.tag) { - db.emit(event, message, object); - } - } + this.fetch = function(databaseName) { + // Only add if it does not exist already + for(var i = 0; i < _dbs.length; i++) { + if(databaseName == _dbs[i].databaseName) + return _dbs[i]; + } + + return null; + } + + this.emit = function(event, message, object, reset, filterDb, rethrow_if_no_listeners) { + var emitted = false; + + // Not emitted and we have enabled rethrow, let process.uncaughtException + // deal with the issue + if(!emitted && rethrow_if_no_listeners) { + return process.nextTick(function() { + throw message; + }) } - } else { - for(var i = 0; i < this._dbs.length; i++) { - if(this._dbs[i].listeners(event).length > 0) { - if(filterDb == null || filterDb.databaseName !== this._dbs[i].databaseName - || filterDb.tag !== this._dbs[i].tag) { - this._dbs[i].emit(event, message, object); + + // Emit the events + for(var i = 0; i < _dbs.length; i++) { + if(_dbs[i].listeners(event).length > 0) { + if(filterDb == null || filterDb.databaseName !== _dbs[i].databaseName + || filterDb.tag !== _dbs[i].tag) { + _dbs[i].emit(event, message, object == null ? _dbs[i] : object); + emitted = true; } } } + + // Emit error message + if(message + && event == 'error' + && !emitted + && rethrow_if_no_listeners + && object && object.db) { + process.nextTick(function() { + object.db.emit(event, message, null); + }) + } } } @@ -239,29 +307,23 @@ var _apply_auths_serially = function(self, db, auths, callback) { var auth = auths.shift(); var connections = self.allRawConnections(); var connectionsLeft = connections.length; + var options = {}; - // Let's apply it to all raw connections - for(var i = 0; i < connections.length; i++) { - if(auth.authMechanism == 'GSSAPI') { - var options = {connection: connections[i]}; - - var connectionHandler = function(err, result) { - connectionsLeft = connectionsLeft - 1; - // If no more connections are left return - if(connectionsLeft == 0) { - return _apply_auths_serially(self, db, auths, callback); - } - } - - // We have the kerberos library, execute auth process - if(process.platform == 'win32') { - mongodb_sspi_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); - } else { - mongodb_gssapi_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); - } - } else if(auth.authMechanism == 'MONGODB-CR') { - mongodb_cr_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); + if(auth.authMechanism == 'GSSAPI') { + // We have the kerberos library, execute auth process + if(process.platform == 'win32') { + mongodb_sspi_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); + } else { + mongodb_gssapi_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); } + } else if(auth.authMechanism == 'MONGODB-CR') { + mongodb_cr_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); + } else if(auth.authMechanism == 'SCRAM-SHA-1') { + mongodb_scram_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); + } else if(auth.authMechanism == 'PLAIN') { + mongodb_plain_authenticate(db, auth.username, auth.password, auth.authdb, options, callback); + } else if(auth.authMechanism == 'MONGODB-X509') { + mongodb_x509_authenticate(db, auth.username, auth.password, options, callback); } } @@ -275,27 +337,13 @@ Base.prototype.__executeAllCallbacksWithError = function(err) { // For each key check if it's a callback that needs to be returned for(var j = 0; j < keys.length; j++) { var info = this._callBackStore._notReplied[keys[j]]; - // Check if we have a chained command (findAndModify) - if(info && info['chained'] && Array.isArray(info['chained']) && info['chained'].length > 0) { - var chained = info['chained']; - // Only callback once and the last one is the right one - var finalCallback = chained.pop(); - // Emit only the last event - this._callBackStore.emit(finalCallback, err, null); - - // Put back the final callback to ensure we don't call all commands in the chain - chained.push(finalCallback); - - // Remove all chained callbacks - for(var i = 0; i < chained.length; i++) { - delete this._callBackStore._notReplied[chained[i]]; - } - // Remove the key - delete this._callBackStore._notReplied[keys[j]]; - } else { - this._callBackStore.emit(keys[j], err, null); - // Remove the key - delete this._callBackStore._notReplied[keys[j]]; + // Execute callback with error + this._callBackStore.emit(keys[j], err, null); + // Remove the key + delete this._callBackStore._notReplied[keys[j]]; + // Force cleanup _events, node.js seems to set it as a null value + if(this._callBackStore._events) { + delete this._callBackStore._events[keys[j]]; } } } @@ -311,34 +359,19 @@ Base.prototype.__executeAllServerSpecificErrorCallbacks = function(host, port, e for(var j = 0; j < keys.length; j++) { var info = this._callBackStore._notReplied[keys[j]]; - if(info.connection) { + if(info && info.connection) { // Unpack the connection settings var _host = info.connection.socketOptions.host; var _port = info.connection.socketOptions.port; - // Check if we have a chained command (findAndModify) - if(info && info['chained'] - && Array.isArray(info['chained']) - && info['chained'].length > 0 - && _port == port && _host == host) { - var chained = info['chained']; - // Only callback once and the last one is the right one - var finalCallback = chained.pop(); - // Emit only the last event - this._callBackStore.emit(finalCallback, err, null); - - // Put back the final callback to ensure we don't call all commands in the chain - chained.push(finalCallback); - - // Remove all chained callbacks - for(var i = 0; i < chained.length; i++) { - delete this._callBackStore._notReplied[chained[i]]; - } - // Remove the key - delete this._callBackStore._notReplied[keys[j]]; - } else if(_port == port && _host == host) { + // If the server matches execute the callback with the error + if(_port == port && _host == host) { this._callBackStore.emit(keys[j], err, null); // Remove the key delete this._callBackStore._notReplied[keys[j]]; + // Force cleanup _events, node.js seems to set it as a null value + if(this._callBackStore._events) { + delete this._callBackStore._events[keys[j]]; + } } } } @@ -350,35 +383,16 @@ Base.prototype.__executeAllServerSpecificErrorCallbacks = function(host, port, e * @api private */ Base.prototype._registerHandler = function(db_command, raw, connection, exhaust, callback) { - // If we have an array of commands, chain them - var chained = Array.isArray(db_command); - // Check if we have exhausted if(typeof exhaust == 'function') { callback = exhaust; exhaust = false; } - // If they are chained we need to add a special handler situation - if(chained) { - // List off chained id's - var chainedIds = []; - // Add all id's - for(var i = 0; i < db_command.length; i++) chainedIds.push(db_command[i].getRequestId().toString()); - // Register all the commands together - for(var i = 0; i < db_command.length; i++) { - var command = db_command[i]; - // Add the callback to the store - this._callBackStore.once(command.getRequestId(), callback); - // Add the information about the reply - this._callBackStore._notReplied[command.getRequestId().toString()] = {start: new Date().getTime(), 'raw': raw, chained:chainedIds, connection:connection, exhaust:false}; - } - } else { - // Add the callback to the list of handlers - this._callBackStore.once(db_command.getRequestId(), callback); - // Add the information about the reply - this._callBackStore._notReplied[db_command.getRequestId().toString()] = {start: new Date().getTime(), 'raw': raw, connection:connection, exhaust:exhaust}; - } + // Add the callback to the list of handlers + this._callBackStore.once(db_command.getRequestId(), callback); + // Add the information about the reply + this._callBackStore._notReplied[db_command.getRequestId().toString()] = {start: new Date().getTime(), 'raw': raw, connection:connection, exhaust:exhaust}; } /** @@ -393,20 +407,48 @@ Base.prototype._reRegisterHandler = function(newId, object, callback) { this._callBackStore._notReplied[newId] = object.info; } +/** + * + * @ignore + * @api private + */ +Base.prototype._flushAllCallHandlers = function(err) { + var keys = Object.keys(this._callBackStore._notReplied); + + for(var i = 0; i < keys.length; i++) { + this._callHandler(keys[i], null, err); + } +} + /** * * @ignore * @api private */ Base.prototype._callHandler = function(id, document, err) { + var self = this; + // If there is a callback peform it if(this._callBackStore.listeners(id).length >= 1) { // Get info object var info = this._callBackStore._notReplied[id]; // Delete the current object - delete this._callBackStore._notReplied[id]; - // Emit to the callback of the object - this._callBackStore.emit(id, err, document, info.connection); + delete this._callBackStore._notReplied[id]; + // Call the handle directly don't emit + var callback = this._callBackStore.listeners(id)[0].listener; + // Remove the listeners + this._callBackStore.removeAllListeners(id); + // Force key deletion because it nulling it not deleting in 0.10.X + if(this._callBackStore._events) { + delete this._callBackStore._events[id]; + } + + try { + // Execute the callback if one was provided + if(typeof callback == 'function') callback(err, document, info.connection); + } catch(err) { + self._emitAcrossAllDbInstances(self, null, "error", utils.toError(err), self, true, true); + } } } @@ -416,7 +458,6 @@ Base.prototype._callHandler = function(id, document, err) { * @api private */ Base.prototype._hasHandler = function(id) { - // If there is a callback peform it return this._callBackStore.listeners(id).length >= 1; } @@ -431,7 +472,9 @@ Base.prototype._removeHandler = function(id) { // Remove the callback if it's registered this._callBackStore.removeAllListeners(id); // Force cleanup _events, node.js seems to set it as a null value - if(this._callBackStore._events != null) delete this._callBackStore._events[id]; + if(this._callBackStore._events) { + delete this._callBackStore._events[id]; + } } /** @@ -450,16 +493,18 @@ Base.prototype._findHandler = function(id) { * @ignore * @api private */ -Base.prototype._emitAcrossAllDbInstances = function(server, filterDb, event, message, object, resetConnection) { +Base.prototype._emitAcrossAllDbInstances = function(server, filterDb, event, message, object, resetConnection, rethrow_if_no_listeners) { if(resetConnection) { - for(var i = 0; i < this._dbStore._dbs.length; i++) { - if(typeof this._dbStore._dbs[i].openCalled != 'undefined') - this._dbStore._dbs[i].openCalled = false; + var dbs = this._dbStore.db(); + + for(var i = 0; i < dbs.length; i++) { + if(typeof dbs[i].openCalled != 'undefined') + dbs[i].openCalled = false; } } // Fire event - this._dbStore.emit(event, message, object, resetConnection, filterDb); + this._dbStore.emit(event, message, object, resetConnection, filterDb, rethrow_if_no_listeners); } exports.Base = Base; \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js index 6753fd2..2e11d83 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js @@ -7,6 +7,7 @@ var utils = require('./connection_utils'), tls = require('tls'); var Connection = exports.Connection = function(id, socketOptions) { + var self = this; // Set up event emitter EventEmitter.call(this); // Store all socket options @@ -20,11 +21,16 @@ var Connection = exports.Connection = function(id, socketOptions) { // Set if this is a domain socket this.domainSocket = this.socketOptions.domainSocket; + // Supported min and max wire protocol + this.minWireVersion = 0; + this.maxWireVersion = 2; + // // Connection parsing state // this.maxBsonSize = socketOptions.maxBsonSize ? socketOptions.maxBsonSize : Connection.DEFAULT_MAX_BSON_SIZE; this.maxMessageSizeBytes = socketOptions.maxMessageSizeBytes ? socketOptions.maxMessageSizeBytes : Connection.DEFAULT_MAX_MESSAGE_SIZE; + this.maxNumberOfDocsInBatch = socketOptions.maxWriteBatchSize ? socketOptions.maxWriteBatchSize : Connection.DEFAULT_MAX_WRITE_BATCH_SIZE; // Contains the current message bytes this.buffer = null; // Contains the current message size @@ -39,12 +45,34 @@ var Connection = exports.Connection = function(id, socketOptions) { // Just keeps list of events we allow resetHandlers(this, false); + + // Bson object + this.maxBsonSettings = { + disableDriverBSONSizeCheck: this.socketOptions['disableDriverBSONSizeCheck'] || false + , maxBsonSize: this.maxBsonSize + , maxMessageSizeBytes: this.maxMessageSizeBytes + } + + // Allow setting the socketTimeoutMS on all connections + // to work around issues such as secondaries blocking due to compaction + Object.defineProperty(this, "socketTimeoutMS", { + enumerable: true + , get: function () { return self.socketOptions.socketTimeoutMS; } + , set: function (value) { + // Set the socket timeoutMS value + self.socketOptions.socketTimeoutMS = value; + // Set the physical connection timeout + self.connection.setTimeout(self.socketOptions.socketTimeoutMS); + } + }); } // Set max bson size Connection.DEFAULT_MAX_BSON_SIZE = 1024 * 1024 * 4; // Set default to max bson to avoid overflow or bad guesses Connection.DEFAULT_MAX_MESSAGE_SIZE = Connection.DEFAULT_MAX_BSON_SIZE; +// Max default write bulk ops +Connection.DEFAULT_MAX_WRITE_BATCH_SIZE = 2000; // Inherit event emitter so we can emit stuff wohoo inherits(Connection, EventEmitter); @@ -63,6 +91,7 @@ Connection.prototype.start = function() { if(this.logger != null && this.logger.doDebug){ this.logger.debug("opened connection", this.socketOptions); } + // Set options on the socket this.connection.setTimeout(this.socketOptions.connectTimeoutMS != null ? this.socketOptions.connectTimeoutMS : this.socketOptions.timeout); // Work around for 0.4.X @@ -174,9 +203,41 @@ Connection.prototype.start = function() { } } +/** + * @ignore + */ +Connection.prototype.setSocketOptions = function(options) { + options = options || {}; + + if(typeof options.connectTimeoutMS == 'number') { + this.socketOptions.connectTimeoutMS = options.connectTimeoutMS; + } + + if(typeof options.socketTimeoutMS == 'number') { + this.socketOptions.socketTimeoutMS = options.socketTimeoutMS; + // Set the current socket timeout + this.connection.setTimeout(options.socketTimeoutMS); + } +} + // Check if the sockets are live Connection.prototype.isConnected = function() { - return this.connected && !this.connection.destroyed && this.connection.writable && this.connection.readable; + return this.connected && !this.connection.destroyed && this.connection.writable; +} + +// Validate if the driver supports this server +Connection.prototype.isCompatible = function() { + if(this.serverCapabilities == null) return true; + // Is compatible with backward server + if(this.serverCapabilities.minWireVersion == 0 + && this.serverCapabilities.maxWireVersion ==0) return true; + + // Check if we overlap + if(this.serverCapabilities.minWireVersion >= this.minWireVersion + && this.serverCapabilities.maxWireVersion <= this.maxWireVersion) return true; + + // Not compatible + return false; } // Write the data out to the socket @@ -185,34 +246,30 @@ Connection.prototype.write = function(command, callback) { // If we have a list off commands to be executed on the same socket if(Array.isArray(command)) { for(var i = 0; i < command.length; i++) { - var binaryCommand = command[i].toBinary() - - if(!this.socketOptions['disableDriverBSONSizeCheck'] && binaryCommand.length > this.maxBsonSize) - return callback(new Error("Document exceeds maximum allowed bson size of " + this.maxBsonSize + " bytes")); - - if(this.socketOptions['disableDriverBSONSizeCheck'] && binaryCommand.length > this.maxMessageSizeBytes) { - return callback(new Error("Command exceeds maximum message size of " + this.maxMessageSizeBytes + " bytes")); - } + try { + // Pass in the bson validation settings (validate early) + var binaryCommand = command[i].toBinary(this.maxBsonSettings); - if(this.logger != null && this.logger.doDebug) - this.logger.debug("writing command to mongodb", {binary: binaryCommand, json: command[i]}); - - var r = this.writeSteam.write(binaryCommand); + if(this.logger != null && this.logger.doDebug) + this.logger.debug("writing command to mongodb", {binary: binaryCommand, json: command[i]}); + + this.writeSteam.write(binaryCommand); + } catch(err) { + return callback(err, null); + } } } else { - var binaryCommand = command.toBinary() - - if(!this.socketOptions['disableDriverBSONSizeCheck'] && binaryCommand.length > this.maxBsonSize) - return callback(new Error("Document exceeds maximum allowed bson size of " + this.maxBsonSize + " bytes")); - - if(this.socketOptions['disableDriverBSONSizeCheck'] && binaryCommand.length > this.maxMessageSizeBytes) { - return callback(new Error("Command exceeds maximum message size of " + this.maxMessageSizeBytes + " bytes")); + try { + // Pass in the bson validation settings (validate early) + var binaryCommand = command.toBinary(this.maxBsonSettings); + // Do we have a logger active log the event + if(this.logger != null && this.logger.doDebug) + this.logger.debug("writing command to mongodb", {binary: binaryCommand, json: command}); + // Write the binary command out to socket + this.writeSteam.write(binaryCommand); + } catch(err) { + return callback(err, null); } - - if(this.logger != null && this.logger.doDebug) - this.logger.debug("writing command to mongodb", {binary: binaryCommand, json: command}); - - var r = this.writeSteam.write(binaryCommand); } } catch (err) { if(typeof callback === 'function') callback(err); @@ -343,7 +400,7 @@ var createDataHandler = exports.Connection.createDataHandler = function(self) { // Retrieve the message size var sizeOfMessage = binaryutils.decodeUInt32(data, 0); // If we have a negative sizeOfMessage emit error and return - if(sizeOfMessage < 0 || sizeOfMessage > self.maxBsonSize) { + if(sizeOfMessage < 0 || sizeOfMessage > self.maxMessageSizeBytes) { var errorObject = {err:"socketHandler", trace:'', bin:self.buffer, parseState:{ sizeOfMessage: sizeOfMessage, bytesRead: self.bytesRead, diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js index 94cf754..e669354 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js @@ -8,8 +8,7 @@ var utils = require('./connection_utils'), Connection = require("./connection").Connection; // Set processor, setImmediate if 0.10 otherwise nextTick -var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; -processor = process.nextTick +var processor = require('../utils').processor(); var ConnectionPool = exports.ConnectionPool = function(host, port, poolSize, bson, socketOptions) { if(typeof host !== 'string') { @@ -78,6 +77,7 @@ ConnectionPool.prototype.setMaxBsonSize = function(maxBsonSize) { for(var i = 0; i < this.openConnections.length; i++) { this.openConnections[i].maxBsonSize = maxBsonSize; + this.openConnections[i].maxBsonSettings.maxBsonSize = maxBsonSize; } } @@ -88,9 +88,20 @@ ConnectionPool.prototype.setMaxMessageSizeBytes = function(maxMessageSizeBytes) for(var i = 0; i < this.openConnections.length; i++) { this.openConnections[i].maxMessageSizeBytes = maxMessageSizeBytes; + this.openConnections[i].maxBsonSettings.maxMessageSizeBytes = maxMessageSizeBytes; } } +ConnectionPool.prototype.setMaxWriteBatchSize = function(maxWriteBatchSize) { + if(maxWriteBatchSize == null){ + maxWriteBatchSize = Connection.DEFAULT_MAX_WRITE_BATCH_SIZE; + } + + for(var i = 0; i < this.openConnections.length; i++) { + this.openConnections[i].maxWriteBatchSize = maxWriteBatchSize; + } +} + // Start a function var _connect = function(_self) { // return new function() { diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/mongos.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/mongos.js index f0617ab..1a1b9d9 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/mongos.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/mongos.js @@ -1,8 +1,14 @@ var ReadPreference = require('./read_preference').ReadPreference , Base = require('./base').Base , Server = require('./server').Server + , format = require('util').format + , timers = require('timers') + , utils = require('../utils') , inherits = require('util').inherits; +// Set processor, setImmediate if 0.10 otherwise nextTick +var processor = require('../utils').processor(); + /** * Mongos constructor provides a connection to a mongos proxy including failover to additional servers * @@ -39,11 +45,16 @@ var Mongos = function Mongos(servers, options) { // Save all the server connections this.servers = servers; // Servers we need to attempt reconnect with - this.downServers = []; + this.downServers = {}; + // Servers that are up + this.upServers = {}; + // Up servers by ping time + this.upServersByUpTime = {}; + // Emit open setup + this.emitOpen = this.options.emitOpen || true; // Just contains the current lowest ping time and server this.lowestPingTimeServer = null; this.lowestPingTime = 0; - // Connection timeout this._connectTimeoutMS = this.socketOptions.connectTimeoutMS ? this.socketOptions.connectTimeoutMS @@ -65,6 +76,10 @@ var Mongos = function Mongos(servers, options) { // Set socket options server.socketOptions = socketOptions; } + + // Allow setting the socketTimeoutMS on all connections + // to work around issues such as secondaries blocking due to compaction + utils.setSocketTimeoutProperty(this, this.socketOptions); } /** @@ -99,7 +114,19 @@ Mongos.prototype.connect = function(db, options, callback) { return function(err, result) { self._numberOfServersLeftToInitialize = self._numberOfServersLeftToInitialize - 1; + // Add the server to the list of servers that are up + if(!err) { + self.upServers[format("%s:%s", _server.host, _server.port)] = _server; + } + + // We are done connecting if(self._numberOfServersLeftToInitialize == 0) { + // If we have no valid mongos server instances error out + if(Object.keys(self.upServers).length == 0) { + // return self.emit("connectionError", new Error("No valid mongos instances found")); + return callback(new Error("No valid mongos instances found"), null); + } + // Start ha function if it exists if(self.haEnabled) { // Setup the ha process @@ -109,8 +136,12 @@ Mongos.prototype.connect = function(db, options, callback) { // Set the mongos to connected self._serverState = "connected"; + // Emit the open event - self.db.emit("open", null, self.db); + if(self.emitOpen) + self._emitAcrossAllDbInstances(self, null, "open", null, null, null); + + self._emitAcrossAllDbInstances(self, null, "fullsetup", null, null, null); // Callback callback(null, self.db); } @@ -120,73 +151,40 @@ Mongos.prototype.connect = function(db, options, callback) { // Error handler var errorOrCloseHandler = function(_server) { return function(err, result) { - var validServers = []; + // Emit left event, signaling mongos left the ha + self.emit('left', 'mongos', _server); // Execute all the callbacks with errors self.__executeAllCallbacksWithError(err); - - // // We are going to process all the non-replied to callbacks timing out any that has gone over the socket time out settings - // if(typeof self.socketOptions.socketTimeoutMS == 'number' && self.socketOptions.socketTimeoutMS > 0) - // self._timeoutCalls(self.socketOptions.socketTimeoutMS * 1.1); - // Check if we have the server var found = false; - // Save the down server if it does not already exists - for(var i = 0; i < self.downServers.length; i++) { - if(self.downServers[i].host == _server.host && self.downServers[i].port == _server.port) { - found = true; - break; - } - } - - if(!found) - self.downServers.push(_server); - + + // Get the server name + var server_name = format("%s:%s", _server.host, _server.port); + // Add the downed server + self.downServers[server_name] = _server; // Remove the current server from the list - for(var i = 0; i < self.servers.length; i++) { - if(!(self.servers[i].host == _server.host && self.servers[i].port == _server.port) && self.servers[i].isConnected()) { - validServers.push(self.servers[i]); - } - } + delete self.upServers[server_name]; - // Set current list of servers - self.servers = validServers; - // Emit close across all the attached db instances - if(self.servers.length == 0) { - self._dbStore.emit("close", new Error("mongos disconnected, no valid proxies contactable over tcp"), null, true); + if(Object.keys(self.upServers).length == 0) { + self._emitAcrossAllDbInstances(self, null, "close", new Error("mongos disconnected, no valid proxies contactable over tcp"), null, null); } } } // Mongo function this.mongosCheckFunction = function() { - if(self._haInProgress) return; - // If all servers are down we are done - if(self.servers.length == 0) return; - - // Check that at least one server is available - var alldown = true; - for(var i = 0; i < self.servers.length; i++) { - if(self.servers[i].isConnected()) { - alldown = false; - break; - } - } - - // All servers are down - if(alldown) return; - // Set as not waiting for check event self._haInProgress = true; + + // Servers down + var numberOfServersLeft = Object.keys(self.downServers).length; + // Check downed servers - if(self.downServers.length > 0) { - var numberOfServersLeft = self.downServers.length; - - // Iterate over all the downed servers - for(var i = 0; i < self.downServers.length; i++) { + if(numberOfServersLeft > 0) { + for(var name in self.downServers) { // Pop a downed server - var downServer = self.downServers.pop(); - + var downServer = self.downServers[name]; // Set up the connection options for a Mongos var options = { auto_reconnect: false, @@ -210,10 +208,10 @@ Mongos.prototype.connect = function(db, options, callback) { if(err) { return _callback(err, _server); - } else { + } else { // Set the new server settings _server._callBackStore = self._callBackStore; - + // Add server event handlers _server.on("close", errorOrCloseHandler(_server)); _server.on("timeout", errorOrCloseHandler(_server)); @@ -231,11 +229,15 @@ Mongos.prototype.connect = function(db, options, callback) { var endTime = new Date().getTime(); // Mark the server with the ping time _server.runtimeStats['pingMs'] = endTime - startTime; - // Sort the servers on runtime so the first server always is the closest one - self.servers.sort(function(a, b) { - return a.runtimeStats['pingMs'] > b.runtimeStats['pingMs']; - }); + // If we have any buffered commands let's signal reconnect event + if(self._commandsStore.count() > 0) { + self.emit('reconnect'); + } + + // Execute any waiting reads + self._commandsStore.execute_writes(); + self._commandsStore.execute_queries(); // Callback return _callback(null, _server); }); @@ -248,7 +250,7 @@ Mongos.prototype.connect = function(db, options, callback) { connectFunction(self.db, newServer, options, function(err, _server) { // If we have an error if(err) { - self.downServers.push(_server); + self.downServers[format("%s:%s", _server.host, _server.port)] = _server; } // Connection function @@ -267,6 +269,10 @@ Mongos.prototype.connect = function(db, options, callback) { , connection: _connection }; + // If we have changed the service name + if(_auth.gssapiServiceName) + options.gssapiServiceName = _auth.gssapiServiceName; + // Hold any error var _error = null; // Authenticate against the credentials @@ -313,20 +319,38 @@ Mongos.prototype.connect = function(db, options, callback) { self._haInProgress = false; } - if(finalError) { - return self.downServers.push(_server); + if(!err) { + add_server(self, _server); + } + + // If we have any buffered commands let's signal reconnect event + if(self._commandsStore.count() > 0) { + self.emit('reconnect'); } - // Push to list of valid server - self.servers.push(_server); + // Execute any waiting reads + self._commandsStore.execute_writes(); + self._commandsStore.execute_queries(); } }); } } else { - self.servers.push(_server); + if(!err) { + add_server(self, _server); + } + // Set ha done if(numberOfServersLeft == 0) { self._haInProgress = false; + + // If we have any buffered commands let's signal reconnect event + if(self._commandsStore.count() > 0) { + self.emit('reconnect'); + } + + // Execute any waiting reads + self._commandsStore.execute_writes(); + self._commandsStore.execute_queries(); } } })(); @@ -359,6 +383,44 @@ Mongos.prototype.connect = function(db, options, callback) { } } +/** + * @ignore + * Add a server to the list of up servers and sort them by ping time + */ +var add_server = function(self, _server) { + // Emit a new server joined + self.emit('joined', "mongos", null, _server); + // Get the server url + var server_key = format("%s:%s", _server.host, _server.port); + // Push to list of valid server + self.upServers[server_key] = _server; + // Remove the server from the list of downed servers + delete self.downServers[server_key]; + + // Sort the keys by ping time + var keys = Object.keys(self.upServers); + var _upServersSorted = {}; + var _upServers = [] + + // Get all the servers + for(var name in self.upServers) { + _upServers.push(self.upServers[name]); + } + + // Sort all the server + _upServers.sort(function(a, b) { + return a.runtimeStats['pingMs'] > b.runtimeStats['pingMs']; + }); + + // Rebuild the upServer + for(var i = 0; i < _upServers.length; i++) { + _upServersSorted[format("%s:%s", _upServers[i].host, _upServers[i].port)] = _upServers[i]; + } + + // Set the up servers + self.upServers = _upServersSorted; +} + /** * @ignore * Just return the currently picked active connection @@ -367,6 +429,16 @@ Mongos.prototype.allServerInstances = function() { return this.servers; } +/** + * @ignore + */ +Mongos.prototype.setSocketOptions = function(options) { + var servers = this.allServerInstances(); + for(var i = 0; i < servers.length; i++) { + servers[i].setSocketOptions(options); + } +} + /** * Always ourselves * @ignore @@ -379,11 +451,10 @@ Mongos.prototype.setReadPreference = function() {} Mongos.prototype.allRawConnections = function() { // Neeed to build a complete list of all raw connections, start with master server var allConnections = []; - // Add all connections - for(var i = 0; i < this.servers.length; i++) { - allConnections = allConnections.concat(this.servers[i].allRawConnections()); + // Get all connected connections + for(var name in this.upServers) { + allConnections = allConnections.concat(this.upServers[name].allRawConnections()); } - // Return all the conections return allConnections; } @@ -392,7 +463,14 @@ Mongos.prototype.allRawConnections = function() { * @ignore */ Mongos.prototype.isConnected = function() { - return this._serverState == "connected"; + return Object.keys(this.upServers).length > 0; +} + +/** + * @ignore + */ +Mongos.prototype.isAutoReconnect = function() { + return true; } /** @@ -416,24 +494,30 @@ Mongos.prototype.isDestroyed = function() { * @ignore */ Mongos.prototype.checkoutWriter = function() { - if(this.servers.length == 0) return null; - return this.servers[0].checkoutWriter(); + // Checkout a writer + var keys = Object.keys(this.upServers); + if(keys.length == 0) return null; + return this.upServers[keys[0]].checkoutWriter(); } /** * @ignore */ Mongos.prototype.checkoutReader = function(read) { + // If read is set to null default to primary + read = read || 'primary' // If we have a read preference object unpack it if(read != null && typeof read == 'object' && read['_type'] == 'ReadPreference') { // Validate if the object is using a valid mode - if(!read.isValid()) throw new Error("Illegal readPreference mode specified, " + read.mode); + if(!read.isValid()) throw new Error("Illegal readPreference mode specified, " + JSON.stringify(read)); } else if(!ReadPreference.isValid(read)) { - throw new Error("Illegal readPreference mode specified, " + read); + throw new Error("Illegal readPreference mode specified, " + JSON.stringify(read)); } - if(this.servers.length == 0) return null; - return this.servers[0].checkoutWriter(); + // Checkout a writer + var keys = Object.keys(this.upServers); + if(keys.length == 0) return null; + return this.upServers[keys[0]].checkoutWriter(); } /** @@ -448,10 +532,25 @@ Mongos.prototype.close = function(callback) { // If we have a ha process running kill it if(self._replicasetTimeoutId != null) clearInterval(self._replicasetTimeoutId); self._replicasetTimeoutId = null; - // Close all proxy connections - for(var i = 0; i < self.servers.length; i++) { - self.servers[i].close(function(err, result) { + + // Emit close event + processor(function() { + self._emitAcrossAllDbInstances(self, null, "close", null, null, true) + }); + + // Flush out any remaining call handlers + self._flushAllCallHandlers(utils.toError("Connection Closed By Application")); + + // No up servers just return + if(Object.keys(this.upServers) == 0) { + return callback(null); + } + + // Close all the up servers + for(var name in this.upServers) { + this.upServers[name].close(function(err, result) { numberOfConnectionsToClose = numberOfConnectionsToClose - 1; + // Callback if we have one defined if(numberOfConnectionsToClose == 0 && typeof callback == 'function') { callback(null); diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/read_preference.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/read_preference.js index 6845171..6caafa9 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/read_preference.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/read_preference.js @@ -28,7 +28,7 @@ ReadPreference.isValid = function(_mode) { return (_mode == ReadPreference.PRIMARY || _mode == ReadPreference.PRIMARY_PREFERRED || _mode == ReadPreference.SECONDARY || _mode == ReadPreference.SECONDARY_PREFERRED || _mode == ReadPreference.NEAREST - || _mode == true || _mode == false); + || _mode == true || _mode == false || _mode == null); } /** diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/ha.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/ha.js index c899712..1a0353b 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/ha.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/ha.js @@ -55,12 +55,12 @@ HighAvailabilityProcess.prototype.start = function() { socketTimeoutMS: socketTimeoutMS, keepAlive: 100 } - , ssl: this.options.ssl - , sslValidate: this.options.sslValidate - , sslCA: this.options.sslCA - , sslCert: this.options.sslCert - , sslKey: this.options.sslKey - , sslPass: this.options.sslPass + , ssl: self.replset.options.ssl + , sslValidate: self.replset.options.sslValidate + , sslCA: self.replset.options.sslCA + , sslCert: self.replset.options.sslCert + , sslKey: self.replset.options.sslKey + , sslPass: self.replset.options.sslPass }); // Create new dummy db for app @@ -74,6 +74,9 @@ HighAvailabilityProcess.prototype.start = function() { // Let's attempt a connection over here newServer.connect(self.db, function(err, result, _server) { + // Emit ha_connect + self.replset.emit("ha_connect", err, result, _server); + if(self.state == HighAvailabilityProcess.STOPPED) { _server.close(); } @@ -124,8 +127,13 @@ var _timeoutHandle = function(self) { self.db._executeQueryCommand(DbCommand.createIsMasterCommand(self.db), {failFast:true, connection: self.server.checkoutReader()} , function(err, res) { + // Emit ha event + self.replset.emit("ha_ismaster", err, res); + + // If we have an error close if(err) { self.server.close(); + // Re-run loop return setTimeout(_timeoutHandle(self), self.options.haInterval); } @@ -135,41 +143,63 @@ var _timeoutHandle = function(self) { var reconnect_servers = []; var state = self.replset._state; + // We are in recovery mode, let's remove the current server + if(!master.ismaster + && !master.secondary + && state.addresses[master.me]) { + self.server.close(); + state.addresses[master.me].close(); + delete state.secondaries[master.me]; + // Re-run loop + return setTimeout(_timeoutHandle(self), self.options.haInterval); + } + + // We have a new master different front he current one + if((master.primary && state.master == null) + || (master.primary && state.master.name != master.primary)) { + + // Locate the primary and set it + if(state.addresses[master.primary]) { + if(state.master) state.master.close(); + delete state.secondaries[master.primary]; + state.master = state.addresses[master.primary]; + } + + // Emit joined event due to primary change + self.replset.emit('joined', "primary", master, state.master); + + // Set up the changes + if(state.master != null && state.master.isMasterDoc != null) { + state.master.isMasterDoc.ismaster = true; + state.master.isMasterDoc.secondary = false; + } else if(state.master != null) { + state.master.isMasterDoc = master; + state.master.isMasterDoc.ismaster = true; + state.master.isMasterDoc.secondary = false; + } + + // If we have any buffered commands let's signal reconnect event + if(self.replset._commandsStore.count() > 0) { + self.replset.emit('reconnect'); + } + + // Execute any waiting commands (queries or writes) + self.replset._commandsStore.execute_queries(); + self.replset._commandsStore.execute_writes(); + } + // For all the hosts let's check that we have connections for(var i = 0; i < hosts.length; i++) { var host = hosts[i]; - + // Check if we need to reconnect to a server if(state.addresses[host] == null) { reconnect_servers.push(host); } else if(state.addresses[host] && !state.addresses[host].isConnected()) { state.addresses[host].close(); + delete state.secondaries[host]; reconnect_servers.push(host); } - - if((master.primary && state.master == null) - || (master.primary && state.master.name != master.primary)) { - - // Locate the primary and set it - if(state.addresses[master.primary]) { - if(state.master) state.master.close(); - delete state.secondaries[master.primary]; - state.master = state.addresses[master.primary]; - } - - // Set up the changes - if(state.master != null && state.master.isMasterDoc != null) { - state.master.isMasterDoc.ismaster = true; - state.master.isMasterDoc.secondary = false; - } else if(state.master != null) { - state.master.isMasterDoc = master; - state.master.isMasterDoc.ismaster = true; - state.master.isMasterDoc.secondary = false; - } - - // Execute any waiting writes - self.replset._commandsStore.execute_writes(); - } } // Let's reconnect to any server needed @@ -198,7 +228,7 @@ var _reconnect_servers = function(self, reconnect_servers) { // Unpack connection options var connectTimeoutMS = self.options.connectTimeoutMS || 10000; - var socketTimeoutMS = self.options.socketTimeoutMS || 30000; + var socketTimeoutMS = self.options.socketTimeoutMS || 0; // Server class var Db = require('../../db').Db @@ -218,12 +248,12 @@ var _reconnect_servers = function(self, reconnect_servers) { connectTimeoutMS: connectTimeoutMS, socketTimeoutMS: socketTimeoutMS } - , ssl: self.options.ssl - , sslValidate: self.options.sslValidate - , sslCA: self.options.sslCA - , sslCert: self.options.sslCert - , sslKey: self.options.sslKey - , sslPass: self.options.sslPass + , ssl: self.replset.options.ssl + , sslValidate: self.replset.options.sslValidate + , sslCA: self.replset.options.sslCA + , sslCert: self.replset.options.sslCert + , sslKey: self.replset.options.sslKey + , sslPass: self.replset.options.sslPass }); // Create new dummy db for app @@ -243,6 +273,9 @@ var _reconnect_servers = function(self, reconnect_servers) { // Let's attempt a connection over here newServer.connect(db, function(err, result, _server) { + // Emit ha_connect + self.replset.emit("ha_connect", err, result, _server); + if(self.state == HighAvailabilityProcess.STOPPED) { _server.close(); } @@ -257,11 +290,16 @@ var _reconnect_servers = function(self, reconnect_servers) { _reconnect_servers(self, reconnect_servers); }, self.options.haInterval); } + var doc = _server.isMasterDoc; // Fire error on any unknown callbacks for this server self.replset.__executeAllServerSpecificErrorCallbacks(_server.socketOptions.host, _server.socketOptions.port, err); if(doc.ismaster) { + // Emit primary added + self.replset.emit('joined', "primary", doc, _server); + + // If it was a secondary remove it if(state.secondaries[doc.me]) { delete state.secondaries[doc.me]; } @@ -269,13 +307,28 @@ var _reconnect_servers = function(self, reconnect_servers) { // Override any server in list of addresses state.addresses[doc.me] = _server; // Set server as master - state.master = _server; + state.master = _server; + + // If we have any buffered commands let's signal reconnect event + if(self.replset._commandsStore.count() > 0) { + self.replset.emit('reconnect'); + } + // Execute any waiting writes self.replset._commandsStore.execute_writes(); } else if(doc.secondary) { + // Emit secondary added + self.replset.emit('joined', "secondary", doc, _server); + // Add the secondary to the state state.secondaries[doc.me] = _server; // Override any server in list of addresses state.addresses[doc.me] = _server; + + // If we have any buffered commands let's signal reconnect event + if(self.replset._commandsStore.count() > 0) { + self.replset.emit('reconnect'); + } + // Execute any waiting reads self.replset._commandsStore.execute_queries(); } else { @@ -320,11 +373,15 @@ var _apply_auths = function(self, _db, _server, _callback) { var username = _auth.username; var password = _auth.password; var options = { - authMechanism: _auth.authMechanism + authMechanism: _auth.authMechanism , authSource: _auth.authdb , connection: _connection }; + // If we have changed the service name + if(_auth.gssapiServiceName) + options.gssapiServiceName = _auth.gssapiServiceName; + // Hold any error var _error = null; @@ -389,4 +446,4 @@ var _repl_set_handler = function(event, self, server) { } } -exports.HighAvailabilityProcess = HighAvailabilityProcess; \ No newline at end of file +exports.HighAvailabilityProcess = HighAvailabilityProcess; diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/options.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/options.js index e0abc38..8b3d72b 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/options.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/options.js @@ -25,6 +25,7 @@ var Options = function(options) { this.sslCert = options.sslCert; this.sslKey = options.sslKey; this.sslPass = options.sslPass; + this.emitOpen = options.emitOpen || true; } Options.prototype.init = function() { @@ -48,7 +49,7 @@ Options.prototype.init = function() { if(readPreference != ReadPreference.PRIMARY && readPreference != ReadPreference.PRIMARY_PREFERRED && readPreference != ReadPreference.SECONDARY && readPreference != ReadPreference.SECONDARY_PREFERRED && readPreference != ReadPreference.NEAREST && typeof readPreference != 'object' && readPreference['_type'] != 'ReadPreference') { - throw new Error("Illegal readPreference mode specified, " + readPreference); + throw new Error("Illegal readPreference mode specified, " + JSON.stringify(readPreference)); } this.readPreference = readPreference; @@ -73,12 +74,12 @@ Options.prototype.init = function() { ? this.logger : {error:function(message, object) {}, log:function(message, object) {}, debug:function(message, object) {}}; // Connection timeout - this.connectTimeoutMS = this.socketOptions.connectTimeoutMS + this.connectTimeoutMS = typeof this.socketOptions.connectTimeoutMS == 'number' ? this.socketOptions.connectTimeoutMS : 1000; // Socket connection timeout - this.socketTimeoutMS = this.socketOptions.socketTimeoutMS + this.socketTimeoutMS = typeof this.socketOptions.socketTimeoutMS == 'number' ? this.socketOptions.socketTimeoutMS : 30000; } diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js index ebb6657..b7d5a35 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js @@ -12,19 +12,19 @@ var ReadPreference = require('../read_preference').ReadPreference , HighAvailabilityProcess = require('./ha').HighAvailabilityProcess , Base = require('../base').Base; -const STATE_STARTING_PHASE_1 = 0; -const STATE_PRIMARY = 1; -const STATE_SECONDARY = 2; -const STATE_RECOVERING = 3; -const STATE_FATAL_ERROR = 4; -const STATE_STARTING_PHASE_2 = 5; -const STATE_UNKNOWN = 6; -const STATE_ARBITER = 7; -const STATE_DOWN = 8; -const STATE_ROLLBACK = 9; +var STATE_STARTING_PHASE_1 = 0; +var STATE_PRIMARY = 1; +var STATE_SECONDARY = 2; +var STATE_RECOVERING = 3; +var STATE_FATAL_ERROR = 4; +var STATE_STARTING_PHASE_2 = 5; +var STATE_UNKNOWN = 6; +var STATE_ARBITER = 7; +var STATE_DOWN = 8; +var STATE_ROLLBACK = 9; // Set processor, setImmediate if 0.10 otherwise nextTick -var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; +var processor = require('../../utils').processor(); /** * ReplSet constructor provides replicaset functionality @@ -36,12 +36,12 @@ var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; * - **retries** {Number, default:30}, number of times to attempt a replicaset reconnect. * - **rs_name** {String}, the name of the replicaset to connect to. * - **socketOptions** {Object, default:null}, an object containing socket options to use (noDelay:(boolean), keepAlive:(number), connectTimeoutMS:(number), socketTimeoutMS:(number)) - * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **strategy** {String, default:'ping'}, selection strategy for reads choose between (ping, statistical and none, default is ping) * - **secondaryAcceptableLatencyMS** {Number, default:15}, sets the range of servers to pick when using NEAREST (lowest ping ms + the latency fence, ex: range of 1 to (1 + 15) ms) * - **connectWithNoPrimary** {Boolean, default:false}, sets if the driver should connect even if no primary is available * - **connectArbiter** {Boolean, default:false}, sets if the driver should connect to arbiters or not. * - **logger** {Object, default:null}, an object representing a logger that you want to use, needs to support functions debug, log, error **({error:function(message, object) {}, log:function(message, object) {}, debug:function(message, object) {}})**. + * - **poolSize** {Number, default:5}, number of connections in the connection pool for each server instance, set to 5 as default for legacy reasons. * - **ssl** {Boolean, default:false}, use ssl connection (needs to have a mongod server with ssl support) * - **sslValidate** {Boolean, default:false}, validate mongod server certificate against ca (needs to have a mongod server with ssl support, 2.4 or higher) * - **sslCA** {Array, default:null}, Array of valid certificates either as Buffers or Strings (needs to have a mongod server with ssl support, 2.4 or higher) @@ -49,7 +49,8 @@ var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; * - **sslKey** {Buffer/String, default:null}, String or buffer containing the certificate private key we wish to present (needs to have a mongod server with ssl support, 2.4 or higher) * - **sslPass** {Buffer/String, default:null}, String or buffer containing the certificate password (needs to have a mongod server with ssl support, 2.4 or higher) * - * @class Represents a Replicaset Configuration + * @class Represents a + Replicaset Configuration * @param {Array} list of server objects participating in the replicaset. * @param {Object} [options] additional options for the replicaset connection. */ @@ -78,7 +79,6 @@ var ReplSet = exports.ReplSet = function(servers, options) { // Add high availability process this._haProcess = new HighAvailabilityProcess(this, this.options); - // Let's iterate over all the provided server objects and decorate them this.servers = this.options.decorateAndClean(servers, this._callBackStore); // Throw error if no seed servers @@ -95,8 +95,11 @@ var ReplSet = exports.ReplSet = function(servers, options) { this.enableRecordQueryStats(true); } + this.emitOpen = this.options.emitOpen || true; // Set up a clean state - this._state = new ReplSetState(); + this._state = new ReplSetState(this); + // Current round robin selected server + this._currentServerChoice = 0; // Ensure up the server callbacks for(var i = 0; i < this.servers.length; i++) { this.servers[i]._callBackStore = this._callBackStore; @@ -105,6 +108,10 @@ var ReplSet = exports.ReplSet = function(servers, options) { this.servers[i].options.auto_reconnect = false; this.servers[i].inheritReplSetOptionsFrom(this); } + + // Allow setting the socketTimeoutMS on all connections + // to work around issues such as secondaries blocking due to compaction + utils.setSocketTimeoutProperty(this, this.options.socketOptions); } /** @@ -130,6 +137,7 @@ ReplSet.prototype.canWrite = function() { ReplSet.prototype.canRead = function(read) { if((read == ReadPreference.PRIMARY + || (typeof read == 'object' && read.mode == ReadPreference.PRIMARY) || read == null || read == false) && (this._state.master == null || !this._state.master.isConnected())) return false; return Object.keys(this._state.secondaries).length > 0; } @@ -147,6 +155,24 @@ ReplSet.prototype.enableRecordQueryStats = function(enable) { } } +/** + * @ignore + */ +ReplSet.prototype.setSocketOptions = function(options) { + var servers = this.allServerInstances(); + + if(typeof options.socketTimeoutMS == 'number') { + this.options.socketOptions.socketTimeoutMS = options.socketTimeoutMS; + } + + if(typeof options.connectTimeoutMS == 'number') + this.options.socketOptions.connectTimeoutMS = options.connectTimeoutMS; + + for(var i = 0; i < servers.length; i++) { + servers[i].setSocketOptions(options); + } +} + /** * @ignore */ @@ -189,8 +215,10 @@ ReplSet.prototype.connect = function(parent, options, callback) { // Emit fullsetup processor(function() { - parent.emit("open", null, self.options.db, self); - parent.emit("fullsetup", null, self.options.db, self); + if(self.emitOpen) + self._emitAcrossAllDbInstances(self, null, "open", null, null, null); + + self._emitAcrossAllDbInstances(self, null, "fullsetup", null, null, null); }); // If we have a strategy defined start it @@ -229,13 +257,16 @@ ReplSet.prototype.close = function(callback) { } // Clean out the state - this._state = new ReplSetState(); + this._state = new ReplSetState(this); // Emit close event processor(function() { self._emitAcrossAllDbInstances(self, null, "close", null, null, true) }); + // Flush out any remaining call handlers + self._flushAllCallHandlers(utils.toError("Connection Closed By Application")); + // Callback if(typeof callback == 'function') return callback(null, null); @@ -270,8 +301,7 @@ var createServer = function(self, host, options) { var serverOptions = { readPreference: options.readPreference, socketOptions: socketOptions, - // poolSize: options.poolSize, - poolSize: 1, + poolSize: options.poolSize, logger: options.logger, auto_reconnect: false, ssl: options.ssl, @@ -298,11 +328,13 @@ var _handler = function(event, self, server) { return function(err, doc) { // The event happened to a primary // Remove it from play - if(self._state.isPrimary(server)) { + if(self._state.isPrimary(server)) { + // Emit that the primary left the replicaset + self.emit('left', 'primary', server); + // Get the current master var current_master = self._state.master; self._state.master = null; self._serverState = ReplSet.REPLSET_READ_ONLY; - // delete self._state.addresses[server.name]; if(current_master != null) { // Unpack variables @@ -313,8 +345,10 @@ var _handler = function(event, self, server) { self.__executeAllServerSpecificErrorCallbacks(host, port, err); } } else if(self._state.isSecondary(server)) { + // Emit that a secondary left the replicaset + self.emit('left', 'secondary', server); + // Delete from the list delete self._state.secondaries[server.name]; - // delete self._state.addresses[server.name]; } // If there is no more connections left and the setting is not destroyed @@ -367,11 +401,27 @@ var locateNewServers = function(self, state, candidateServers, ismaster) { var _connectHandler = function(self, candidateServers, instanceServer) { return function(err, doc) { // If we have an error add to the list - if(err) self._state.errors[instanceServer.name] = instanceServer; + if(err) { + self._state.errors[instanceServer.name] = instanceServer; + } else { + delete self._state.errors[instanceServer.name]; + } + + if(!err) { + var ismaster = doc.documents[0] + + // Error the server if + if(!ismaster.ismaster + && !ismaster.secondary) { + self._state.errors[instanceServer.name] = instanceServer; + } + } + // No error let's analyse the ismaster command - if(!err) { + if(!err && self._state.errors[instanceServer.name] == null) { var ismaster = doc.documents[0] + // If no replicaset name exists set the current one if(self.options.rs_name == null) { self.options.rs_name = ismaster.setName; @@ -386,6 +436,7 @@ var _connectHandler = function(self, candidateServers, instanceServer) { instanceServer.on("close", _handler("close", self, instanceServer)); instanceServer.on("error", _handler("error", self, instanceServer)); instanceServer.on("timeout", _handler("timeout", self, instanceServer)); + // Set any tags on the instance server instanceServer.name = ismaster.me; instanceServer.tags = ismaster.tags; @@ -393,16 +444,20 @@ var _connectHandler = function(self, candidateServers, instanceServer) { // Add the server to the list self._state.addServer(instanceServer, ismaster); - // Get additional new servers that are not currently in set - var new_servers = locateNewServers(self, self._state, candidateServers, ismaster); - - // If we have new servers join them - if(new_servers.length > 0) { - candidateServers = candidateServers.concat(new_servers); + // Check if we have more servers to add (only check when done with initial set) + if(candidateServers.length == 0) { + // Get additional new servers that are not currently in set + var new_servers = locateNewServers(self, self._state, candidateServers, ismaster); + + // Locate any new servers that have not errored out yet + for(var i = 0; i < new_servers.length; i++) { + if(self._state.errors[new_servers[i].name] == null) { + candidateServers.push(new_servers[i]) + } + } } } - // If the candidate server list is empty and no valid servers if(candidateServers.length == 0 && !self._state.hasValidServers()) { @@ -459,6 +514,19 @@ ReplSet.prototype.checkoutWriter = function() { return new Error("no writer connection available"); } +ReplSet.prototype.processIsMaster = function(_server, _ismaster) { + // Server in recovery mode, remove it from available servers + if(!_ismaster.ismaster && !_ismaster.secondary) { + // Locate the actual server + var server = this._state.addresses[_server.name]; + // Close the server, simulating the closing of the connection + // to get right removal semantics + if(server) server.close(); + // Execute any callback errors + _handler(null, this, server)(new Error("server is in recovery mode")); + } +} + ReplSet.prototype.allRawConnections = function() { var connections = []; @@ -499,7 +567,7 @@ ReplSet.prototype.checkoutReader = function(readPreference, tags) { // If we have a read preference object unpack it if(typeof readPreference == 'object' && readPreference['_type'] == 'ReadPreference') { // Validate if the object is using a valid mode - if(!readPreference.isValid()) throw new Error("Illegal readPreference mode specified, " + readPreference.mode); + if(!readPreference.isValid()) throw new Error("Illegal readPreference mode specified, " + JSON.stringify(readPreference.mode)); // Set the tag tags = readPreference.tags; readPreference = readPreference.mode; @@ -513,7 +581,7 @@ ReplSet.prototype.checkoutReader = function(readPreference, tags) { // Ensure we unpack a reference if(finalReadPreference != null && typeof finalReadPreference == 'object' && finalReadPreference['_type'] == 'ReadPreference') { // Validate if the object is using a valid mode - if(!finalReadPreference.isValid()) throw new Error("Illegal readPreference mode specified, " + finalReadPreference.mode); + if(!finalReadPreference.isValid()) throw new Error("Illegal readPreference mode specified, " + JSON.stringify(finalReadPreference.mode)); // Set the tag tags = finalReadPreference.tags; readPreference = finalReadPreference.mode; @@ -695,14 +763,17 @@ var _pickFromTags = function(self, tags) { */ function _roundRobin (replset, tags) { var keys = Object.keys(replset._state.secondaries); - var key = keys[replset._currentServerChoice++ % keys.length]; + // Update index + replset._currentServerChoice = replset._currentServerChoice + 1; + // Pick a server + var key = keys[replset._currentServerChoice % keys.length]; var conn = null != replset._state.secondaries[key] ? replset._state.secondaries[key].checkoutReader() : null; // If connection is null fallback to first available secondary - if (null == conn) { + if(null == conn) { conn = pickFirstConnectedSecondary(replset, tags); } diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js index 6f9e143..1fbd9c0 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set_state.js @@ -3,7 +3,7 @@ * * @ignore */ -var ReplSetState = function ReplSetState () { +var ReplSetState = function ReplSetState (replset) { this.errorMessages = []; this.secondaries = {}; this.addresses = {}; @@ -13,6 +13,7 @@ var ReplSetState = function ReplSetState () { this.errors = {}; this.setName = null; this.master = null; + this.replset = replset; } ReplSetState.prototype.hasValidServers = function() { @@ -46,12 +47,15 @@ ReplSetState.prototype.addServer = function(server, master) { if(master.ismaster) { this.master = server; this.addresses[server.name] = server; + this.replset.emit('joined', "primary", master, server); } else if(master.secondary) { this.secondaries[server.name] = server; this.addresses[server.name] = server; + this.replset.emit('joined', "secondary", master, server); } else if(master.arbiters) { this.arbiters[server.name] = server; this.addresses[server.name] = server; + this.replset.emit('joined', "arbiter", master, server); } } diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js index d1baaae..7e2a6c9 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/ping_strategy.js @@ -8,11 +8,16 @@ var PingStrategy = exports.PingStrategy = function(replicaset, secondaryAcceptab this.replicaset = replicaset; this.secondaryAcceptableLatencyMS = secondaryAcceptableLatencyMS; this.state = 'disconnected'; - this.pingInterval = 5000; + // Interval of ping attempts + this.pingInterval = replicaset.options.socketOptions.pingInterval || 5000; + // Timeout for ping response, default - no timeout + this.pingTimeout = replicaset.options.socketOptions.pingTimeout || null; // Class instance this.Db = require("../../../db").Db; // Active db connections this.dbs = {}; + // Current server index + this.index = 0; // Logger api this.Logger = null; } @@ -100,6 +105,11 @@ PingStrategy.prototype.checkoutConnection = function(tags, secondaryCandidates) var finalCandidates = candidateServers; } + // Filter out any non-connected servers + finalCandidates = finalCandidates.filter(function(s) { + return s.isConnected(); + }) + // Sort by ping time finalCandidates.sort(function(a, b) { return a.runtimeStats['pingMs'] > b.runtimeStats['pingMs']; @@ -142,11 +152,16 @@ PingStrategy.prototype.checkoutConnection = function(tags, secondaryCandidates) if(finalCandidates.length == 0) return new Error("No replica set members available for query"); - // Pick a random acceptable server - var connection = finalCandidates[Math.round(Math.random(1000000) * (finalCandidates.length - 1))].checkoutReader(); + // Ensure no we don't overflow + this.index = this.index % finalCandidates.length + // Pick a random acceptable server + var connection = finalCandidates[this.index].checkoutReader(); + // Point to next candidate (round robin style) + this.index = this.index + 1; + if(self.logger && self.logger.debug) { if(connection) - self.logger.debug("picked server %s:%s", connection.socketOptions.host, connection.socketOptions.port); + self.logger.debug(format("picked server %s:%s", connection.socketOptions.host, connection.socketOptions.port)); } return connection; @@ -192,8 +207,23 @@ PingStrategy.prototype._pingServer = function(callback) { // Execute ping command in own scope var _ping = function(__db, __serverInstance) { + + // Server unavailable. Checks only if pingTimeout defined & greater than 0 + var _failTimer = self.pingTimeout ? setTimeout(function () { + if(null != __serverInstance.runtimeStats && __serverInstance.isConnected()) { + __serverInstance.close(); + } + }, self.pingTimeout) : null; + // Execute ping on this connection __db.executeDbCommand({ping:1}, {failFast:true}, function(err) { + + // Server available + clearTimeout(_failTimer); + + // Emit the ping + self.replicaset.emit("ping", err, serverInstance); + if(err) { delete self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port]; __db.close(); @@ -204,7 +234,24 @@ PingStrategy.prototype._pingServer = function(callback) { __serverInstance.runtimeStats['pingMs'] = Date.now() - startTime; } - done(); + __db.executeDbCommand({ismaster:1}, {failFast:true}, function(err, result) { + // Emit the ping + self.replicaset.emit("ping_ismaster", err, result, serverInstance); + + if(err) { + delete self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port]; + __db.close(); + return done(); + } + + // Process the ismaster for the server + if(result && result.documents && self.replicaset.processIsMaster) { + self.replicaset.processIsMaster(__serverInstance, result.documents[0]); + } + + // Done with the pinging + done(); + }); }); }; // Ping @@ -220,12 +267,12 @@ PingStrategy.prototype._pingServer = function(callback) { slaveOk: true, poolSize: 1, socketOptions: { connectTimeoutMS: connectTimeoutMS }, - ssl: self.replicaset.ssl, - sslValidate: self.replicaset.sslValidate, - sslCA: self.replicaset.sslCA, - sslCert: self.replicaset.sslCert, - sslKey: self.replicaset.sslKey, - sslPass: self.replicaset.sslPass + ssl: self.replicaset.options.ssl, + sslValidate: self.replicaset.options.sslValidate, + sslCA: self.replicaset.options.sslCA, + sslCert: self.replicaset.options.sslCert, + sslKey: self.replicaset.options.sslKey, + sslPass: self.replicaset.options.sslPass }); // Create Db instance @@ -240,7 +287,10 @@ PingStrategy.prototype._pingServer = function(callback) { return; } - __db.open(function(err, db) { + __db.open(function(err, db) { + // Emit ping connect + self.replicaset.emit("ping_connect", err, __serverInstance); + if(self.state == 'disconnected' && __db != null) { return __db.close(); } @@ -259,6 +309,8 @@ PingStrategy.prototype._pingServer = function(callback) { // Execute ping on this connection __db.executeDbCommand({ping:1}, {failFast:true}, function(err) { + self.replicaset.emit("ping", err, __serverInstance); + if(err) { delete self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port]; __db.close(); @@ -269,11 +321,28 @@ PingStrategy.prototype._pingServer = function(callback) { __serverInstance.runtimeStats['pingMs'] = Date.now() - startTime; } - done(); + __db.executeDbCommand({ismaster:1}, {failFast:true}, function(err, result) { + self.replicaset.emit("ping_ismaster", err, result, __serverInstance); + + if(err) { + delete self.dbs[__db.serverConfig.host + ":" + __db.serverConfig.port]; + __db.close(); + return done(); + } + + // Process the ismaster for the server + if(result && result.documents && self.replicaset.processIsMaster) { + self.replicaset.processIsMaster(__serverInstance, result.documents[0]); + } + + // Done with the pinging + done(); + }); }); }); }; + // Ping the server _ping(_db, serverInstance); } diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/statistics_strategy.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/statistics_strategy.js index f9b8c46..32d23c3 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/statistics_strategy.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/repl_set/strategies/statistics_strategy.js @@ -73,8 +73,21 @@ StatisticsStrategy.prototype.checkoutConnection = function(tags, secondaryCandid var finalCandidates = candidateServers; } + finalCandidates.sort(function(a, b) { + return a.runtimeStats.queryStats.sScore > b.runtimeStats.queryStats.sScore; + }); + // If no candidates available return an error if(finalCandidates.length == 0) return new Error("No replica set members available for query"); - // Pick a random server - return finalCandidates[Math.round(Math.random(1000000) * (finalCandidates.length - 1))].checkoutReader(); + + var bestCandidates = [finalCandidates[0]]; + for (var i = 1; i < finalCandidates.length; ++i) { + if (finalCandidates[i].runtimeStats.queryStats.sScore > finalCandidates[i - 1].runtimeStats.queryStats.sScore) { + break; + } else { + bestCandidates.push(finalCandidates[i]); + } + } + + return bestCandidates[Math.floor(Math.random() * bestCandidates.length)].checkoutReader(); } diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js index 16be9d8..dfff183 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js @@ -4,19 +4,20 @@ var Connection = require('./connection').Connection, MongoReply = require('../responses/mongo_reply').MongoReply, ConnectionPool = require('./connection_pool').ConnectionPool, EventEmitter = require('events').EventEmitter, + ServerCapabilities = require('./server_capabilities').ServerCapabilities, Base = require('./base').Base, + format = require('util').format, utils = require('../utils'), timers = require('timers'), inherits = require('util').inherits; // Set processor, setImmediate if 0.10 otherwise nextTick -var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; +var processor = require('../utils').processor(); /** * Class representing a single MongoDB Server connection * * Options - * - **readPreference** {String, default:null}, set's the read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST) * - **ssl** {Boolean, default:false}, use ssl connection (needs to have a mongod server with ssl support) * - **sslValidate** {Boolean, default:false}, validate mongod server certificate against ca (needs to have a mongod server with ssl support, 2.4 or higher) * - **sslCA** {Array, default:null}, Array of valid certificates either as Buffers or Strings (needs to have a mongod server with ssl support, 2.4 or higher) @@ -53,12 +54,14 @@ function Server(host, port, options) { this.options = options == null ? {} : options; this.internalConnection; this.internalMaster = false; - this.connected = false; + this.connected = false; this.poolSize = this.options.poolSize == null ? 5 : this.options.poolSize; this.disableDriverBSONSizeCheck = this.options.disableDriverBSONSizeCheck != null ? this.options.disableDriverBSONSizeCheck : false; this._used = false; this.replicasetInstance = null; + // Emit open setup + this.emitOpen = this.options.emitOpen || true; // Set ssl as connection method this.ssl = this.options.ssl == null ? false : this.options.ssl; // Set ssl validation @@ -71,31 +74,16 @@ function Server(host, port, options) { this.sslKey = this.options.sslKey; // Password to unlock private key this.sslPass = this.options.sslPass; + // Server capabilities + this.serverCapabilities = null; + // Set server name + this.name = format("%s:%s", host, port); - // // Create connection Pool instance with the current BSON serializer - // this.connectionPool = new ConnectionPool(this.host, this.port, this.poolSize, null, this.socketOptions); // Ensure we are not trying to validate with no list of certificates if(this.sslValidate && (!Array.isArray(this.sslCA) || this.sslCA.length == 0)) { throw new Error("The driver expects an Array of CA certificates in the sslCA parameter when enabling sslValidate"); } - // Get the readPreference - var readPreference = this.options['readPreference']; - // If readPreference is an object get the mode string - var validateReadPreference = readPreference != null && typeof readPreference == 'object' ? readPreference.mode : readPreference; - // Read preference setting - if(validateReadPreference != null) { - if(validateReadPreference != ReadPreference.PRIMARY && validateReadPreference != ReadPreference.SECONDARY && validateReadPreference != ReadPreference.NEAREST - && validateReadPreference != ReadPreference.SECONDARY_PREFERRED && validateReadPreference != ReadPreference.PRIMARY_PREFERRED) { - throw new Error("Illegal readPreference mode specified, " + validateReadPreference); - } - - // Set read Preference - this._readPreference = readPreference; - } else { - this._readPreference = null; - } - // Contains the isMaster information returned from the server this.isMasterDoc; @@ -133,6 +121,10 @@ function Server(host, port, options) { this._state = {'runtimeStats': {'queryStats':new RunningStats()}}; // Do we record server stats or not this.recordQueryStats = false; + + // Allow setting the socketTimeoutMS on all connections + // to work around issues such as secondaries blocking due to compaction + utils.setSocketTimeoutProperty(this, this.socketOptions); }; /** @@ -191,6 +183,9 @@ Server.prototype.close = function(callback) { processor(function() { self._emitAcrossAllDbInstances(self, null, "close", null, null, true) }) + + // Flush out any remaining call handlers + self._flushAllCallHandlers(utils.toError("Connection Closed By Application")); } // Peform callback if present @@ -205,7 +200,7 @@ Server.prototype.isDestroyed = function() { * @ignore */ Server.prototype.isConnected = function() { - return this.connectionPool.isConnected(); + return this.connectionPool != null && this.connectionPool.isConnected(); } /** @@ -233,6 +228,16 @@ Server.prototype.isSetMember = function() { return this.replicasetInstance != null || this.mongosInstance != null; } +/** + * @ignore + */ +Server.prototype.setSocketOptions = function(options) { + var connections = this.allRawConnections(); + for(var i = 0; i < connections.length; i++) { + connections[i].setSocketOptions(options); + } +} + /** * Assigns a replica set to this `server`. * @@ -329,7 +334,7 @@ Server.prototype.connect = function(dbInstance, options, callback) { this.connectionPool.stop(true); } - this.connectionPool = new ConnectionPool(this.host, this.port, this.poolSize, dbInstance.bson, this.socketOptions); + this.connectionPool = new ConnectionPool(this.host, this.port, this.poolSize, dbInstance.bson, this.socketOptions); var connectionPool = this.connectionPool; // If ssl is not enabled don't wait between the pool connections if(this.ssl == null || !this.ssl) connectionPool._timeToWait = null; @@ -346,6 +351,7 @@ Server.prototype.connect = function(dbInstance, options, callback) { // ensure no callbacks get called twice var internalCallback = callback; callback = null; + // Assign the server _server = _server != null ? _server : server; @@ -357,15 +363,23 @@ Server.prototype.connect = function(dbInstance, options, callback) { _server.master = reply.documents[0].ismaster == 1 ? true : false; _server.connectionPool.setMaxBsonSize(reply.documents[0].maxBsonObjectSize); _server.connectionPool.setMaxMessageSizeBytes(reply.documents[0].maxMessageSizeBytes); + _server.connectionPool.setMaxWriteBatchSize(reply.documents[0].maxWriteBatchSize); // Set server state to connEcted _server._serverState = 'connected'; // Set server as connected _server.connected = true; // Save document returned so we can query it _server.isMasterDoc = reply.documents[0]; + + if(self.emitOpen) { + _server._emitAcrossAllDbInstances(_server, eventReceiver, "open", null, returnIsMasterResults ? reply : null, null); + self.emitOpen = false; + } else { + _server._emitAcrossAllDbInstances(_server, eventReceiver, "reconnect", null, returnIsMasterResults ? reply : null, null); + } - // Emit open event - _server._emitAcrossAllDbInstances(_server, eventReceiver, "open", null, returnIsMasterResults ? reply : dbInstance, null); + // Set server capabilities + server.serverCapabilities = new ServerCapabilities(_server.isMasterDoc); // If we have it set to returnIsMasterResults if(returnIsMasterResults) { @@ -412,6 +426,8 @@ Server.prototype.connect = function(dbInstance, options, callback) { // Callback instance var callbackInfo = server._findHandler(mongoReply.responseTo.toString()); + // Abort if not a valid callbackInfo, don't try to call it + if(callbackInfo == null || callbackInfo.info == null) return; // The command executed another request, log the handler again under that request id if(mongoReply.requestId > 0 && mongoReply.cursorId.toString() != "0" @@ -419,142 +435,58 @@ Server.prototype.connect = function(dbInstance, options, callback) { server._reRegisterHandler(mongoReply.requestId, callbackInfo); } - // Only execute callback if we have a caller - // chained is for findAndModify as it does not respect write concerns - if(callbackInfo && callbackInfo.callback && callbackInfo.info && Array.isArray(callbackInfo.info.chained)) { - // Check if callback has already been fired (missing chain command) - var chained = callbackInfo.info.chained; - var numberOfFoundCallbacks = 0; - for(var i = 0; i < chained.length; i++) { - if(server._hasHandler(chained[i])) numberOfFoundCallbacks++; - } - - // If we have already fired then clean up rest of chain and move on - if(numberOfFoundCallbacks != chained.length) { - for(var i = 0; i < chained.length; i++) { - server._removeHandler(chained[i]); + // Parse the body + mongoReply.parseBody(message, connectionPool.bson, callbackInfo.info.raw, function(err) { + if(err != null) { + // If pool connection is already closed + if(server._serverState === 'disconnected') return; + // Set server state to disconnected + server._serverState = 'disconnected'; + // Remove all listeners and close the connection pool + server.removeAllListeners(); + connectionPool.stop(true); + + // If we have a callback return the error + if(typeof callback === 'function') { + // ensure no callbacks get called twice + var internalCallback = callback; + callback = null; + // Perform callback + internalCallback(err, null, server); + } else if(server.isSetMember()) { + if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", utils.toError(err), server); + } else { + if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", utils.toError(err), server); } - // Just return from function + // If we are a single server connection fire errors correctly + if(!server.isSetMember()) { + // Fire all callback errors + server.__executeAllCallbacksWithError(err); + // Emit error + server._emitAcrossAllDbInstances(server, eventReceiver, "parseError", server, null, true); + } + // Short cut return; } - // Parse the body - mongoReply.parseBody(message, connectionPool.bson, callbackInfo.info.raw, function(err) { - if(err != null) { - // If pool connection is already closed - if(server._serverState === 'disconnected') return; - // Set server state to disconnected - server._serverState = 'disconnected'; - // Remove all listeners and close the connection pool - server.removeAllListeners(); - connectionPool.stop(true); - - // If we have a callback return the error - if(typeof callback === 'function') { - // ensure no callbacks get called twice - var internalCallback = callback; - callback = null; - // Perform callback - internalCallback(new Error("connection closed due to parseError"), null, server); - } else if(server.isSetMember()) { - if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", new Error("connection closed due to parseError"), server); - } else { - if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", new Error("connection closed due to parseError"), server); - } - - // If we are a single server connection fire errors correctly - if(!server.isSetMember()) { - // Fire all callback errors - server.__executeAllCallbacksWithError(new Error("connection closed due to parseError")); - // Emit error - server._emitAcrossAllDbInstances(server, eventReceiver, "parseError", server, null, true); - } - // Short cut - return; - } - - // Fetch the callback - var callbackInfo = server._findHandler(mongoReply.responseTo.toString()); - // If we have an error let's execute the callback and clean up all other - // chained commands - var firstResult = mongoReply && mongoReply.documents; - - // Check for an error, if we have one let's trigger the callback and clean up - // The chained callbacks - if(firstResult[0].err != null || firstResult[0].errmsg != null) { - // Trigger the callback for the error - server._callHandler(mongoReply.responseTo, mongoReply, null); - } else { - var chainedIds = callbackInfo.info.chained; - - if(chainedIds.length > 0 && chainedIds[chainedIds.length - 1] == mongoReply.responseTo) { - // Cleanup all other chained calls - chainedIds.pop(); - // Remove listeners - for(var i = 0; i < chainedIds.length; i++) server._removeHandler(chainedIds[i]); - // Call the handler - server._callHandler(mongoReply.responseTo, callbackInfo.info.results.shift(), null); - } else{ - // Add the results to all the results - for(var i = 0; i < chainedIds.length; i++) { - var handler = server._findHandler(chainedIds[i]); - // Check if we have an object, if it's the case take the current object commands and - // and add this one - if(handler.info != null) { - handler.info.results = Array.isArray(callbackInfo.info.results) ? callbackInfo.info.results : []; - handler.info.results.push(mongoReply); - } - } - } - } - }); - } else if(callbackInfo && callbackInfo.callback && callbackInfo.info) { - // Parse the body - mongoReply.parseBody(message, connectionPool.bson, callbackInfo.info.raw, function(err) { - if(err != null) { - // If pool connection is already closed - if(server._serverState === 'disconnected') return; - // Set server state to disconnected - server._serverState = 'disconnected'; - // Remove all listeners and close the connection pool - server.removeAllListeners(); - connectionPool.stop(true); - - // If we have a callback return the error - if(typeof callback === 'function') { - // ensure no callbacks get called twice - var internalCallback = callback; - callback = null; - // Perform callback - internalCallback(new Error("connection closed due to parseError"), null, server); - } else if(server.isSetMember()) { - if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", new Error("connection closed due to parseError"), server); - } else { - if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", new Error("connection closed due to parseError"), server); - } - - // If we are a single server connection fire errors correctly - if(!server.isSetMember()) { - // Fire all callback errors - server.__executeAllCallbacksWithError(new Error("connection closed due to parseError")); - // Emit error - server._emitAcrossAllDbInstances(server, eventReceiver, "parseError", server, null, true); - } - // Short cut - return; - } + // Let's record the stats info if it's enabled + if(server.recordQueryStats == true && server._state['runtimeStats'] != null + && server._state.runtimeStats['queryStats'] instanceof RunningStats) { + // Add data point to the running statistics object + server._state.runtimeStats.queryStats.push(new Date().getTime() - callbackInfo.info.start); + } - // Let's record the stats info if it's enabled - if(server.recordQueryStats == true && server._state['runtimeStats'] != null - && server._state.runtimeStats['queryStats'] instanceof RunningStats) { - // Add data point to the running statistics object - server._state.runtimeStats.queryStats.push(new Date().getTime() - callbackInfo.info.start); - } + // Dispatch the call + server._callHandler(mongoReply.responseTo, mongoReply, null); - server._callHandler(mongoReply.responseTo, mongoReply, null); - }); - } + // If we have an error about the server not being master or primary + if((mongoReply.responseFlag & (1 << 1)) != 0 + && mongoReply.documents[0].code + && mongoReply.documents[0].code == 13436) { + server.close(); + } + }); } } catch (err) { // Throw error in next tick @@ -591,6 +523,18 @@ Server.prototype.connect = function(dbInstance, options, callback) { // Emit error server._emitAcrossAllDbInstances(server, eventReceiver, "timeout", err, server, true); } + + // If we have autoConnect enabled let's fire up an attempt to reconnect + if(server.isAutoReconnect() + && !server.isSetMember() + && (server._serverState != 'destroyed') + && !server._reconnectInProgreess) { + // Set the number of retries + server._reconnect_retries = server.db.numberOfRetries; + // Attempt reconnect + server._reconnectInProgreess = true; + setTimeout(__attemptReconnect(server), server.db.retryMiliSeconds); + } }); // Handle errors @@ -598,12 +542,14 @@ Server.prototype.connect = function(dbInstance, options, callback) { // If pool connection is already closed if(server._serverState === 'disconnected' || server._serverState === 'destroyed') return; + // Set server state to disconnected server._serverState = 'disconnected'; // Error message var error_message = new Error(message && message.err ? message.err : message); // Error message coming from ssl if(error_options && error_options.ssl) error_message.ssl = true; + // If we have a callback return the error if(typeof callback === 'function') { // ensure no callbacks get called twice @@ -624,6 +570,19 @@ Server.prototype.connect = function(dbInstance, options, callback) { // Emit error server._emitAcrossAllDbInstances(server, eventReceiver, "error", error_message, server, true); } + + // If we have autoConnect enabled let's fire up an attempt to reconnect + if(server.isAutoReconnect() + && !server.isSetMember() + && (server._serverState != 'destroyed') + && !server._reconnectInProgreess) { + + // Set the number of retries + server._reconnect_retries = server.db.numberOfRetries; + // Attempt reconnect + server._reconnectInProgreess = true; + setTimeout(__attemptReconnect(server), server.db.retryMiliSeconds); + } }); // Handle close events @@ -656,16 +615,16 @@ Server.prototype.connect = function(dbInstance, options, callback) { // If we have autoConnect enabled let's fire up an attempt to reconnect if(server.isAutoReconnect() - && (server._serverState != 'destroyed')) { + && !server.isSetMember() + && (server._serverState != 'destroyed') + && !server._reconnectInProgreess) { + // Set the number of retries - server._reconnect_retries = server.db.numberOfRetries; - + server._reconnect_retries = server.db.numberOfRetries; // Attempt reconnect - if(!server._reconnectInProgreess) { - server._reconnectInProgreess = true; - setTimeout(__attemptReconnect(server), server.db.retryMiliSeconds); - } - } + server._reconnectInProgreess = true; + setTimeout(__attemptReconnect(server), server.db.retryMiliSeconds); + } }); /** @@ -695,8 +654,12 @@ Server.prototype.connect = function(dbInstance, options, callback) { self._apply_auths(server.db, function(err, result) { server._serverState = 'connected'; server._reconnectInProgreess = false; + + // Execute any buffered reads and writes server._commandsStore.execute_queries(); server._commandsStore.execute_writes(); + // Emit reconnect event + server.emit('reconnect'); }); } }); @@ -705,7 +668,7 @@ Server.prototype.connect = function(dbInstance, options, callback) { // If we have a parser error we are in an unknown state, close everything and emit // error - connectionPool.on("parseError", function(message) { + connectionPool.on("parseError", function(err) { // If pool connection is already closed if(server._serverState === 'disconnected' || server._serverState === 'destroyed') return; @@ -717,20 +680,21 @@ Server.prototype.connect = function(dbInstance, options, callback) { var internalCallback = callback; callback = null; // Perform callback - internalCallback(new Error("connection closed due to parseError"), null, server); + internalCallback(utils.toError(err), null, server); } else if(server.isSetMember()) { - if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", new Error("connection closed due to parseError"), server); + if(server.listeners("parseError") && server.listeners("parseError").length > 0) server.emit("parseError", utils.toError(err), server); } else { - if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", new Error("connection closed due to parseError"), server); + if(eventReceiver.listeners("parseError") && eventReceiver.listeners("parseError").length > 0) eventReceiver.emit("parseError", utils.toError(err), server); } // If we are a single server connection fire errors correctly if(!server.isSetMember()) { // Fire all callback errors - server.__executeAllCallbacksWithError(new Error("connection closed due to parseError")); + server.__executeAllCallbacksWithError(utils.toError(err)); // Emit error server._emitAcrossAllDbInstances(server, eventReceiver, "parseError", server, null, true); - } + // Emit close event + if(eventReceiver.listeners("close") && eventReceiver.listeners("close").length > 0) eventReceiver.emit("close", new Error("connection closed"), server); } }); // Boot up connection poole, pass in a locator of callbacks @@ -741,7 +705,7 @@ Server.prototype.connect = function(dbInstance, options, callback) { * @ignore */ Server.prototype.allRawConnections = function() { - return this.connectionPool.getAllConnections(); + return this.connectionPool != null ? this.connectionPool.getAllConnections() : []; } /** @@ -750,12 +714,14 @@ Server.prototype.allRawConnections = function() { */ var canCheckoutWriter = function(self, read) { // We cannot write to an arbiter or secondary server - if(self.isMasterDoc['arbiterOnly'] == true) { + if(self.isMasterDoc && self.isMasterDoc['arbiterOnly'] == true) { return new Error("Cannot write to an arbiter"); - } if(self.isMasterDoc['secondary'] == true) { + } if(self.isMasterDoc && self.isMasterDoc['secondary'] == true) { return new Error("Cannot write to a secondary"); - } else if(read == true && self._readPreference == ReadPreference.SECONDARY && self.isMasterDoc['ismaster'] == true) { + } else if(read == true && self._readPreference == ReadPreference.SECONDARY && self.isMasterDoc && self.isMasterDoc['ismaster'] == true) { return new Error("Cannot read from primary when secondary only specified"); + } else if(!self.isMasterDoc) { + return new Error("Cannot determine state of server"); } // Return no error @@ -766,12 +732,18 @@ var canCheckoutWriter = function(self, read) { * @ignore */ Server.prototype.checkoutWriter = function(read) { + if(this._serverState == 'disconnected' || this._serverState == 'destroyed') + return null; if(read == true) return this.connectionPool.checkoutConnection(); // Check if are allowed to do a checkout (if we try to use an arbiter f.ex) var result = canCheckoutWriter(this, read); // If the result is null check out a writer if(result == null && this.connectionPool != null) { - return this.connectionPool.checkoutConnection(); + var connection = this.connectionPool.checkoutConnection(); + // Add server capabilities to the connection + if(connection) + connection.serverCapabilities = this.serverCapabilities; + return connection; } else if(result == null) { return null; } else { @@ -785,15 +757,17 @@ Server.prototype.checkoutWriter = function(read) { */ var canCheckoutReader = function(self) { // We cannot write to an arbiter or secondary server - if(self.isMasterDoc && self.isMasterDoc['arbiterOnly'] == true) { + if(self.isMasterDoc && self.isMasterDoc['arbiterOnly'] == true && self.isSetMember()) { return new Error("Cannot write to an arbiter"); } else if(self._readPreference != null) { // If the read preference is Primary and the instance is not a master return an error - if((self._readPreference == ReadPreference.PRIMARY) && self.isMasterDoc['ismaster'] != true) { + if((self._readPreference == ReadPreference.PRIMARY) && self.isMasterDoc && self.isMasterDoc['ismaster'] != true) { return new Error("Read preference is Server.PRIMARY and server is not master"); - } else if(self._readPreference == ReadPreference.SECONDARY && self.isMasterDoc['ismaster'] == true) { + } else if(self._readPreference == ReadPreference.SECONDARY && self.isMasterDoc && self.isMasterDoc['ismaster'] == true) { return new Error("Cannot read from primary when secondary only specified"); } + } else if(!self.isMasterDoc) { + return new Error("Cannot determine state of server"); } // Return no error @@ -804,11 +778,17 @@ var canCheckoutReader = function(self) { * @ignore */ Server.prototype.checkoutReader = function(read) { + if(this._serverState == 'disconnected' || this._serverState == 'destroyed') + return null; // Check if are allowed to do a checkout (if we try to use an arbiter f.ex) var result = canCheckoutReader(this); // If the result is null check out a writer if(result == null && this.connectionPool != null) { - return this.connectionPool.checkoutConnection(); + var connection = this.connectionPool.checkoutConnection(); + // Add server capabilities to the connection + if(connection) + connection.serverCapabilities = this.serverCapabilities; + return connection; } else if(result == null) { return null; } else { @@ -868,6 +848,7 @@ var RunningStats = function() { RunningStats.prototype.push = function(x) { // Update the number of samples this.m_n = this.m_n + 1; + // See Knuth TAOCP vol 2, 3rd edition, page 232 if(this.m_n == 1) { this.m_oldM = this.m_newM = x; @@ -875,7 +856,6 @@ RunningStats.prototype.push = function(x) { } else { this.m_newM = this.m_oldM + (x - this.m_oldM) / this.m_n; this.m_newS = this.m_oldS + (x - this.m_oldM) * (x - this.m_newM); - // set up for next iteration this.m_oldM = this.m_newM; this.m_oldS = this.m_newS; diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/url_parser.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/url_parser.js index 9adf526..4db9579 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/url_parser.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/url_parser.js @@ -81,12 +81,19 @@ exports.parse = function(url, options) { hostPart = connection_part; // Parse all server results servers = hostPart.split(',').map(function(h) { - var hostPort = h.split(':', 2); - var _host = hostPort[0] || 'localhost'; - var _port = hostPort[1] != null ? parseInt(hostPort[1], 10) : 27017; - // Check for localhost?safe=true style case - if(_host.indexOf("?") != -1) _host = _host.split(/\?/)[0]; - + var _host, _port, ipv6match; + //check if it matches [IPv6]:port, where the port number is optional + if ((ipv6match = /\[([^\]]+)\](?:\:(.+))?/.exec(h))) { + _host = ipv6match[1]; + _port = parseInt(ipv6match[2], 10) || 27017; + } else { + //otherwise assume it's IPv4, or plain hostname + var hostPort = h.split(':', 2); + _host = hostPort[0] || 'localhost'; + _port = hostPort[1] != null ? parseInt(hostPort[1], 10) : 27017; + // Check for localhost?safe=true style case + if(_host.indexOf("?") != -1) _host = _host.split(/\?/)[0]; + } // Return the mapped object return {host: _host, port: _port}; }); @@ -105,6 +112,7 @@ exports.parse = function(url, options) { case 'slaveOk': case 'slave_ok': serverOptions.slave_ok = (value == 'true'); + dbOptions.slaveOk = (value == 'true'); break; case 'maxPoolSize': case 'poolSize': @@ -171,10 +179,14 @@ exports.parse = function(url, options) { break; case 'w': dbOptions.w = parseInt(value, 10); + if(isNaN(dbOptions.w)) dbOptions.w = value; break; case 'authSource': dbOptions.authSource = value; break; + case 'gssapiServiceName': + dbOptions.gssapiServiceName = value; + break; case 'authMechanism': if(value == 'GSSAPI') { // If no password provided decode only the principal @@ -185,19 +197,31 @@ exports.parse = function(url, options) { } else { object.auth.user = decodeURIComponent(object.auth.user); } + } else if(value == 'MONGODB-X509') { + object.auth = {user: decodeURIComponent(authPart)}; } + // Only support GSSAPI or MONGODB-CR for now - if(value != 'GSSAPI' && value != 'MONGODB-CR') throw new Error("only GSSAPI or MONGODB-CR is supported by authMechanism"); + if(value != 'GSSAPI' + && value != 'MONGODB-X509' + && value != 'SCRAM-SHA-1' + && value != 'MONGODB-CR' + && value != 'PLAIN') + throw new Error("only GSSAPI, PLAIN, MONGODB-X509, SCRAM-SHA-1 or MONGODB-CR is supported by authMechanism"); + + // Authentication mechanism dbOptions.authMechanism = value; break; case 'wtimeoutMS': - dbOptions.wtimeoutMS = parseInt(value, 10); + dbOptions.wtimeout = parseInt(value, 10); break; case 'readPreference': if(!ReadPreference.isValid(value)) throw new Error("readPreference must be either primary/primaryPreferred/secondary/secondaryPreferred/nearest"); dbOptions.read_preference = value; break; case 'readPreferenceTags': + // Decode the value + value = decodeURIComponent(value); // Contains the tag object var tagObject = {}; if(value == null || value == '') { diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js index f91417b..050cc9c 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js @@ -8,7 +8,7 @@ var QueryCommand = require('./commands/query_command').QueryCommand, utils = require('./utils'); // Set processor, setImmediate if 0.10 otherwise nextTick -var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; +var processor = require('./utils').processor(); /** * Constructor for a cursor object that handles all the operations on query result @@ -25,6 +25,7 @@ var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; * - **timeout** {Boolean}, timeout allow the query to timeout. * - **tailable** {Boolean}, tailable allow the cursor to be tailable. * - **awaitdata** {Boolean}, awaitdata allow the cursor to wait for data, only applicable for tailable cursor. + * - **oplogReplay** {Boolean}, sets an internal flag, only applicable for tailable cursor. * - **batchSize** {Number}, batchSize the number of the subset of results to request the database to return for every request. This should initially be greater than 1 otherwise the database will automatically close the cursor. The batch size can be set to 1 with cursorInstance.batchSize after performing the initial query to the database. * - **raw** {Boolean}, raw return all query documents as raw buffers (default false). * - **read** {Boolean}, read specify override of read from source (primary/secondary). @@ -32,6 +33,7 @@ var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; * - **maxScan** {Number}, maxScan limit the number of items to scan. * - **min** {Number}, min set index bounds. * - **max** {Number}, max set index bounds. + * - **maxTimeMS** {Number}, number of miliseconds to wait before aborting the query. * - **showDiskLoc** {Boolean}, showDiskLoc show disk location of results. * - **comment** {String}, comment you can put a $comment field on a query to make looking in the profiler logs simpler. * - **numberOfRetries** {Number}, numberOfRetries if using awaidata specifies the number of times to retry on timeout. @@ -63,11 +65,12 @@ function Cursor(db, collection, selector, fields, options) { this.timeout = options.timeout == null ? true : options.timeout; this.tailable = options.tailable; this.awaitdata = options.awaitdata; + this.oplogReplay = options.oplogReplay; this.numberOfRetries = options.numberOfRetries == null ? 5 : options.numberOfRetries; this.currentNumberOfRetries = this.numberOfRetries; this.batchSizeValue = options.batchSize == null ? 0 : options.batchSize; this.raw = options.raw == null ? false : options.raw; - this.read = options.read == null ? ReadPreference.PRIMARY : options.read; + this.readPreference = options.readPreference == null ? ReadPreference.PRIMARY : options.readPreference; this.returnKey = options.returnKey; this.maxScan = options.maxScan; this.min = options.min; @@ -78,6 +81,8 @@ function Cursor(db, collection, selector, fields, options) { this.exhaust = options.exhaust || false; this.partial = options.partial || false; this.slaveOk = options.slaveOk || false; + this.maxTimeMSValue = options.maxTimeMS; + this.connection = options.connection; this.totalNumberOfRecords = 0; this.items = []; @@ -98,7 +103,16 @@ function Cursor(db, collection, selector, fields, options) { } else { this.collectionName = (this.db.databaseName ? this.db.databaseName + "." : '') + this.collection.collectionName; } -}; +} + +/** + * Clones a given cursor but uses new options + * @param {Cursor} cursor the cursor to clone. + * @return {Object} [options] additional options for the collection when cloning. + */ +Cursor.cloneWithOptions = function(cursor, options) { + return new Cursor(cursor.db, cursor.collection, cursor.selector, cursor.fields, options); +} /** * Resets this cursor to its initial state. All settings like the query string, @@ -124,7 +138,7 @@ Cursor.prototype.rewind = function() { } return self; -}; +} /** @@ -163,7 +177,7 @@ Cursor.prototype.toArray = function(callback) { self.state = Cursor.CLOSED; if(err) return callback(utils.toError(err), null); // Let's release the internal list - var items = self.items; + var items = self.items; self.items = null; // Return all the items callback(null, items); @@ -201,7 +215,7 @@ var getAllByGetMore = function(self, callback) { if(self.cursorId.toString() == "0") return callback(null, null); getAllByGetMore(self, callback); }) -} +}; /** * Iterates over all the documents for this cursor. As with **{cursor.toArray}**, @@ -248,7 +262,7 @@ Cursor.prototype.each = function(callback) { } else { callback(new Error("Cursor is closed"), null); } -} +}; // Special for exhaust command as we don't initiate the actual result sets // the server just sends them as they arrive meaning we need to get the IO event @@ -270,7 +284,7 @@ var eachExhaust = function(self, callback) { callback(err, null); } }); - }); + }); } // Trampoline emptying the number of retrieved items @@ -303,9 +317,14 @@ Cursor.prototype.count = function(applySkipLimit, callback) { var options = {}; if(applySkipLimit) { if(typeof this.skipValue == 'number') options.skip = this.skipValue; - if(typeof this.limitValue == 'number') options.limit = this.limitValue; + if(typeof this.limitValue == 'number') options.limit = this.limitValue; } + // If maxTimeMS set + if(typeof this.maxTimeMSValue == 'number') options.maxTimeMS = this.maxTimeMSValue; + // Do we have a hint add it to the options + if(this.hint) options.hint = this.hint; + // Call count command this.collection.count(this.selector, options, callback); }; @@ -381,6 +400,27 @@ Cursor.prototype.limit = function(limit, callback) { return this; }; +/** + * Specifies a time limit for a query operation. After the specified + * time is exceeded, the operation will be aborted and an error will be + * returned to the client. If maxTimeMS is null, no limit is applied. + * + * @param {Number} maxTimeMS the maxTimeMS for the query. + * @param {Function} [callback] this optional callback will be called after executing this method. The first parameter will contain an error object when the limit given is not a valid number or when the cursor is already closed while the second parameter will contain a reference to this object upon successful execution. + * @return {Cursor} an instance of this object. + * @api public + */ +Cursor.prototype.maxTimeMS = function(maxTimeMS, callback) { + if(typeof maxTimeMS != 'number') { + throw new Error("maxTimeMS must be a number"); + } + + // Save the maxTimeMS option + this.maxTimeMSValue = maxTimeMS; + // Return the cursor for chaining + return this; +}; + /** * Sets the read preference for the cursor * @@ -398,12 +438,12 @@ Cursor.prototype.setReadPreference = function(readPreference, tags, callback) { if(callback == null) throw new Error("Cannot change read preference on executed query or closed cursor"); callback(new Error("Cannot change read preference on executed query or closed cursor")); } else if(_mode != null && _mode != 'primary' - && _mode != 'secondaryOnly' && _mode != 'secondary' + && _mode != 'secondaryOnly' && _mode != 'secondary' && _mode != 'nearest' && _mode != 'primaryPreferred' && _mode != 'secondaryPreferred') { if(callback == null) throw new Error("only readPreference of primary, secondary, secondaryPreferred, primaryPreferred or nearest supported"); callback(new Error("only readPreference of primary, secondary, secondaryPreferred, primaryPreferred or nearest supported")); } else { - this.read = readPreference; + this.readPreference = readPreference; if(callback != null) callback(null, this); } @@ -504,14 +544,20 @@ var generateQueryCommand = function(self) { queryOptions |= QueryCommand.OPTS_NO_CURSOR_TIMEOUT; } - if(self.tailable != null) { + if(self.tailable) { queryOptions |= QueryCommand.OPTS_TAILABLE_CURSOR; self.skipValue = self.limitValue = 0; // if awaitdata is set - if(self.awaitdata != null) { + if(self.awaitdata) { queryOptions |= QueryCommand.OPTS_AWAIT_DATA; } + + // This sets an internal undocumented flag. Clients should not depend on its + // behavior! + if(self.oplogReplay) { + queryOptions |= QueryCommand.OPTS_OPLOG_REPLAY; + } } if(self.exhaust) { @@ -519,13 +565,13 @@ var generateQueryCommand = function(self) { } // Unpack the read preference to set slave ok correctly - var read = self.read instanceof ReadPreference ? self.read.mode : self.read; + var readPreference = self.readPreference instanceof ReadPreference ? self.readPreference.mode : self.readPreference; // if(self.read == 'secondary') - if(read == ReadPreference.PRIMARY_PREFERRED - || read == ReadPreference.SECONDARY - || read == ReadPreference.SECONDARY_PREFERRED - || read == ReadPreference.NEAREST) { + if(readPreference == ReadPreference.PRIMARY_PREFERRED + || readPreference == ReadPreference.SECONDARY + || readPreference == ReadPreference.SECONDARY_PREFERRED + || readPreference == ReadPreference.NEAREST) { queryOptions |= QueryCommand.OPTS_SLAVE; } @@ -544,21 +590,35 @@ var generateQueryCommand = function(self) { // Check if we need a special selector if(self.sortValue != null || self.explainValue != null || self.hint != null || self.snapshot != null || self.returnKey != null || self.maxScan != null || self.min != null || self.max != null - || self.showDiskLoc != null || self.comment != null) { + || self.showDiskLoc != null || self.comment != null || typeof self.maxTimeMSValue == 'number') { + + // order by + var orderBy = utils.formattedOrderClause(self.sortValue); // Build special selector var specialSelector = {'$query':self.selector}; - if(self.sortValue != null) specialSelector['orderby'] = utils.formattedOrderClause(self.sortValue); + if(orderBy) specialSelector['orderby'] = orderBy; if(self.hint != null && self.hint.constructor == Object) specialSelector['$hint'] = self.hint; - if(self.snapshot != null) specialSelector['$snapshot'] = true; + if(self.snapshot != null) specialSelector['$snapshot'] = self.snapshot; if(self.returnKey != null) specialSelector['$returnKey'] = self.returnKey; if(self.maxScan != null) specialSelector['$maxScan'] = self.maxScan; if(self.min != null) specialSelector['$min'] = self.min; if(self.max != null) specialSelector['$max'] = self.max; if(self.showDiskLoc != null) specialSelector['$showDiskLoc'] = self.showDiskLoc; if(self.comment != null) specialSelector['$comment'] = self.comment; + + // If we are querying the $cmd collection we need to add maxTimeMS as a field + // otherwise for a normal query it's a "special selector" $maxTimeMS + if(typeof self.maxTimeMSValue == 'number' + && self.collectionName.indexOf('.$cmd') != -1) { + specialSelector['maxTimeMS'] = self.maxTimeMSValue; + } else if(typeof self.maxTimeMSValue == 'number' + && self.collectionName.indexOf('.$cmd') == -1) { + specialSelector['$maxTimeMS'] = self.maxTimeMSValue; + } + // If we have explain set only return a single document with automatic cursor close - if(self.explainValue != null) { + if(self.explainValue) { numberToReturn = (-1)*Math.abs(numberToReturn); specialSelector['$explain'] = true; } @@ -617,17 +677,34 @@ Cursor.prototype.nextObject = function(options, callback) { return callback(err, null); } + // No need to check the keys + var queryOptions = {exhaust: self.exhaust + , raw:self.raw + , readPreference:self.readPreference + , connection:self.connection + , checkKeys: false}; + // Execute command var commandHandler = function(err, result) { - self.state = Cursor.OPEN; + // If on reconnect, the command got given a different connection, switch + // the whole cursor to it. + self.connection = queryOptions.connection; + self.state = Cursor.OPEN; // Adjust the state of the cursor if(err != null && result == null) return callback(utils.toError(err), null); - if(!err && result.documents[0] && result.documents[0]['$err']) { + if(err == null && (result == null || result.documents == null || !Array.isArray(result.documents))) { + return self.close(function() {callback(new Error("command failed to return results"), null);}); + } + + if(err == null && result && result.documents[0] && result.documents[0]['$err']) { return self.close(function() {callback(utils.toError(result.documents[0]['$err']), null);}); } + if(err == null && result && result.documents[0] && result.documents[0]['errmsg']) { + return self.close(function() {callback(utils.toError(result.documents[0]), null);}); + } + self.queryRun = true; - self.state = Cursor.OPEN; // Adjust the state of the cursor self.cursorId = result.cursorId; self.totalNumberOfRecords = result.numberReturned; @@ -654,15 +731,22 @@ Cursor.prototype.nextObject = function(options, callback) { // If we have no connection set on this cursor check one out if(self.connection == null) { try { - // self.connection = this.read == null ? self.db.serverConfig.checkoutWriter() : self.db.serverConfig.checkoutReader(this.read); - self.connection = self.db.serverConfig.checkoutReader(this.read); + self.connection = self.db.serverConfig.checkoutReader(this.readPreference); + + // Check if we have an error from the checkout Reader function + if(self.connection instanceof Error) { + return callback(utils.toError(self.connection), null); + } + + // Add to the query options + queryOptions.connection = self.connection; } catch(err) { return callback(utils.toError(err), null); } } // Execute the command - self.db._executeQueryCommand(cmd, {exhaust: self.exhaust, raw:self.raw, read:self.read, connection:self.connection}, commandHandler); + self.db._executeQueryCommand(cmd, queryOptions, commandHandler); // Set the command handler to null commandHandler = null; } else if(self.items.length) { @@ -713,7 +797,11 @@ var getMore = function(self, options, callback) { ); // Set up options - var command_options = {read: self.read, raw: self.raw, connection:self.connection }; + var command_options = { + readPreference: self.readPreference + , raw: self.raw + , connection:self.connection + }; // Execute the command self.db._executeQueryCommand(getMoreCommand, command_options, function(err, result) { @@ -723,9 +811,28 @@ var getMore = function(self, options, callback) { self.state = Cursor.OPEN; if(err != null) { + self.state = Cursor.CLOSED; return callback(utils.toError(err), null); } + // Ensure we get a valid result + if(!result || !result.documents) { + self.state = Cursor.CLOSED; + return callback(utils.toError("command failed to return results"), null) + } + + // If we have a timed out query + if((result.responseFlag & (1 << 0)) != 0) { + self.state = Cursor.CLOSED; + return callback(utils.toError("cursor killed or timed out"), null); + } + + // If the QueryFailure flag is set + if((result.responseFlag & (1 << 1)) != 0) { + self.state = Cursor.CLOSED; + return callback(utils.toError("QueryFailure flag set on getmore command"), null); + } + try { var isDead = 1 === result.responseFlag && result.cursorId.isZero(); @@ -754,7 +861,7 @@ var getMore = function(self, options, callback) { cbValue = true; } else { cbValue = self.items.shift(); - } + } } else if(self.tailable && !isDead && self.awaitdata) { // Excute the tailable cursor once more, will timeout after ~4 sec if awaitdata used self.currentNumberOfRetries = self.currentNumberOfRetries - 1; @@ -815,7 +922,7 @@ Cursor.prototype.explain = function(callback) { , batchSize: this.batchSizeValue , slaveOk: this.slaveOk , raw: this.raw - , read: this.read + , readPreference: this.readPreference , returnKey: this.returnKey , maxScan: this.maxScan , min: this.min @@ -823,10 +930,11 @@ Cursor.prototype.explain = function(callback) { , showDiskLoc: this.showDiskLoc , comment: this.comment , awaitdata: this.awaitdata + , oplogReplay: this.oplogReplay , numberOfRetries: this.numberOfRetries , dbName: this.dbName }); - + // Fetch the explaination document cursor.nextObject(function(err, item) { if(err != null) return callback(utils.toError(err), null); @@ -839,7 +947,7 @@ Cursor.prototype.explain = function(callback) { }; /** - * Returns a Node ReadStream interface for this cursor. + * Returns a Node Transform Stream interface for this cursor. * * Options * - **transform** {Function} function of type function(object) { return transformed }, allows for transformation of data before emitting. @@ -866,7 +974,7 @@ Cursor.prototype.close = function(callback) { try { var command = new KillCursorCommand(this.db, [this.cursorId]); // Added an empty callback to ensure we don't throw any null exceptions - this.db._executeQueryCommand(command, {read:self.read, raw:self.raw, connection:self.connection}, function() {}); + this.db._executeQueryCommand(command, {readPreference:self.readPreference, raw:self.raw, connection:self.connection}); } catch(err) {} } diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursorstream.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursorstream.js index 2752091..123c266 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursorstream.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursorstream.js @@ -1,7 +1,7 @@ var timers = require('timers'); // Set processor, setImmediate if 0.10 otherwise nextTick -var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; +var processor = require('./utils').processor(); /** * Module dependecies. @@ -96,7 +96,10 @@ CursorStream.prototype._next = function () { * @api private */ CursorStream.prototype._onNextObject = function (err, doc) { - if(err) return this.destroy(err); + if(err) { + this.destroy(err); + return this.emit('end'); + } // when doc is null we hit the end of the cursor if(!doc && (this._cursor.state == 1 || this._cursor.state == 2)) { @@ -150,7 +153,7 @@ CursorStream.prototype.destroy = function (err) { this._cursor.close(); - if(err) { + if(err && this.listeners('error').length > 0) { this.emit('error', err); } diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js index 4cf6280..0754d81 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js @@ -13,13 +13,19 @@ var QueryCommand = require('./commands/query_command').QueryCommand , Mongos = require('./connection/mongos').Mongos , Cursor = require('./cursor').Cursor , EventEmitter = require('events').EventEmitter + , InsertCommand = require('./commands/insert_command').InsertCommand , inherits = require('util').inherits , crypto = require('crypto') , timers = require('timers') , utils = require('./utils') + + // Authentication methods , mongodb_cr_authenticate = require('./auth/mongodb_cr.js').authenticate , mongodb_gssapi_authenticate = require('./auth/mongodb_gssapi.js').authenticate - , mongodb_sspi_authenticate = require('./auth/mongodb_sspi.js').authenticate; + , mongodb_sspi_authenticate = require('./auth/mongodb_sspi.js').authenticate + , mongodb_plain_authenticate = require('./auth/mongodb_plain.js').authenticate + , mongodb_x509_authenticate = require('./auth/mongodb_x509.js').authenticate + , mongodb_scram_authenticate = require('./auth/mongodb_scram.js').authenticate; var hasKerberos = false; // Check if we have a the kerberos library @@ -29,30 +35,29 @@ try { } catch(err) {} // Set processor, setImmediate if 0.10 otherwise nextTick -var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; +var processor = require('./utils').processor(); /** * Create a new Db instance. * * Options - * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning - * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning + * - **readPreference** {String}, the preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **native_parser** {Boolean, default:false}, use c++ bson parser. * - **forceServerObjectId** {Boolean, default:false}, force server to create _id fields instead of client. * - **pkFactory** {Object}, object overriding the basic ObjectID primary key generation. * - **serializeFunctions** {Boolean, default:false}, serialize functions. - * - **raw** {Boolean, default:false}, peform operations using raw bson buffers. + * - **raw** {Boolean, default:false}, perform operations using raw bson buffers. * - **recordQueryStats** {Boolean, default:false}, record query statistics during execution. - * - **retryMiliSeconds** {Number, default:5000}, number of miliseconds between retries. + * - **retryMiliSeconds** {Number, default:5000}, number of milliseconds between retries. * - **numberOfRetries** {Number, default:5}, number of retries off connection. * - **logger** {Object, default:null}, an object representing a logger that you want to use, needs to support functions debug, log, error **({error:function(message, object) {}, log:function(message, object) {}, debug:function(message, object) {}})**. * - **slaveOk** {Number, default:null}, force setting of SlaveOk flag on queries (only use when explicitly connecting to a secondary server). - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits + * - **bufferMaxEntries** {Number, default: -1}, sets a cap on how many operations the driver will buffer up before giving up on getting a working connection, default is -1 which is unlimited * * @class Represents a Db * @param {String} databaseName name of the database. @@ -62,7 +67,6 @@ var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; function Db(databaseName, serverConfig, options) { if(!(this instanceof Db)) return new Db(databaseName, serverConfig, options); EventEmitter.call(this); - var self = this; this.databaseName = databaseName; this.serverConfig = serverConfig; @@ -73,16 +77,19 @@ function Db(databaseName, serverConfig, options) { var overrideUsedFlag = this.options['override_used_flag'] == null ? false : this.options['override_used_flag']; // Verify that nobody is using this config - if(!overrideUsedFlag && this.serverConfig != null && typeof this.serverConfig == 'object' && this.serverConfig._isUsed && this.serverConfig._isUsed()) { - throw new Error("A Server or ReplSet instance cannot be shared across multiple Db instances"); + if(!overrideUsedFlag && this.serverConfig != null && typeof this.serverConfig == 'object' && this.serverConfig._isUsed && this.serverConfig._isUsed()) { + throw new Error('A Server or ReplSet instance cannot be shared across multiple Db instances'); } else if(!overrideUsedFlag && typeof this.serverConfig == 'object'){ // Set being used this.serverConfig._used = true; } // Allow slaveOk override - this.slaveOk = this.options["slave_ok"] == null ? false : this.options["slave_ok"]; - this.slaveOk = this.options["slaveOk"] == null ? this.slaveOk : this.options["slaveOk"]; + this.slaveOk = this.options['slave_ok'] == null ? false : this.options['slave_ok']; + this.slaveOk = this.options['slaveOk'] == null ? this.slaveOk : this.options['slaveOk']; + + // Number of operations to buffer before failure + this.bufferMaxEntries = typeof this.options['bufferMaxEntries'] == 'number' ? this.options['bufferMaxEntries'] : -1; // Ensure we have a valid db name validateDatabaseName(databaseName); @@ -92,39 +99,50 @@ function Db(databaseName, serverConfig, options) { this.native_parser = this.options.native_parser; // The bson lib var bsonLib = this.bsonLib = this.options.native_parser ? require('bson').BSONNative : require('bson').BSONPure; + bsonLib = require('bson').BSONPure; // Fetch the serializer object var BSON = bsonLib.BSON; + // Create a new instance this.bson = new BSON([bsonLib.Long, bsonLib.ObjectID, bsonLib.Binary, bsonLib.Code, bsonLib.DBRef, bsonLib.Symbol, bsonLib.Double, bsonLib.Timestamp, bsonLib.MaxKey, bsonLib.MinKey]); + this.bson.promoteLongs = this.options.promoteLongs == null ? true : this.options.promoteLongs; + // Backward compatibility to access types this.bson_deserializer = bsonLib; this.bson_serializer = bsonLib; + + // Add any overrides to the serializer and deserializer + this.bson_deserializer.promoteLongs = this.options.promoteLongs == null ? true : this.options.promoteLongs; } catch (err) { // If we tried to instantiate the native driver - var msg = "Native bson parser not compiled, please compile " - + "or avoid using native_parser=true"; + var msg = 'Native bson parser not compiled, please compile ' + + 'or avoid using native_parser=true'; throw Error(msg); } // Internal state of the server this._state = 'disconnected'; - this.pkFactory = this.options.pk == null ? bsonLib.ObjectID : this.options.pk; + this.pkFactory = this.options.pkFactory == null ? bsonLib.ObjectID : this.options.pkFactory; this.forceServerObjectId = this.options.forceServerObjectId != null ? this.options.forceServerObjectId : false; // Added safe - this.safe = this.options.safe == null ? false : this.options.safe; + this.safe = this.options.safe == null ? false : this.options.safe; // If we have not specified a "safe mode" we just print a warning to the console - if(this.options.safe == null && this.options.w == null && this.options.journal == null && this.options.fsync == null) { + if(this.options.safe == null + && this.options.w == null + && this.options.j == null + && this.options.journal == null + && this.options.fsync == null) { console.log("========================================================================================"); console.log("= Please ensure that you set the default write concern for the database by setting ="); console.log("= one of the options ="); console.log("= ="); console.log("= w: (value of > -1 or the string 'majority'), where < 1 means ="); - console.log("= no write acknowlegement ="); - console.log("= journal: true/false, wait for flush to journal before acknowlegement ="); - console.log("= fsync: true/false, wait for flush to file system before acknowlegement ="); + console.log("= no write acknowledgement ="); + console.log("= journal: true/false, wait for flush to journal before acknowledgement ="); + console.log("= fsync: true/false, wait for flush to file system before acknowledgement ="); console.log("= ="); console.log("= For backward compatibility safe is still supported and ="); console.log("= allows values of [true | false | {j:true} | {w:n, wtimeout:n} | {fsync:true}] ="); @@ -135,7 +153,7 @@ function Db(databaseName, serverConfig, options) { console.log("= ="); console.log("= http://www.mongodb.org/display/DOCS/getLastError+Command ="); console.log("= ="); - console.log("= The default of no acknowlegement will change in the very near future ="); + console.log("= The default of no acknowledgement will change in the very near future ="); console.log("= ="); console.log("= This message will disappear when the default safe is set on the driver Db ="); console.log("========================================================================================"); @@ -184,6 +202,20 @@ function Db(databaseName, serverConfig, options) { // Set default read preference if any this.readPreference = this.options.readPreference; + // Set slaveOk if we have specified a secondary or secondary preferred readPreference + if(this.readPreference == ReadPreference.SECONDARY || + this.readPreference == ReadPreference.SECONDARY_PREFERRED) { + this.slaveOk = true; + } + + // Set read preference on serverConfig if none is set + // but the db one was + if(this.serverConfig.options.readPreference != null) { + this.serverConfig.setReadPreference(this.serverConfig.options.readPreference); + } else if(this.readPreference != null) { + this.serverConfig.setReadPreference(this.readPreference); + } + // Ensure we keep a reference to this db this.serverConfig._dbStore.add(this); }; @@ -194,6 +226,7 @@ function Db(databaseName, serverConfig, options) { function validateDatabaseName(databaseName) { if(typeof databaseName !== 'string') throw new Error("database name must be a string"); if(databaseName.length === 0) throw new Error("database name cannot be the empty string"); + if(databaseName == '$external') return; var invalidChars = [" ", ".", "$", "/", "\\"]; for(var i = 0; i < invalidChars.length; i++) { @@ -209,7 +242,7 @@ inherits(Db, EventEmitter); /** * Initialize the database connection. * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the index information or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the index information or null if an error occurred. * @return {null} * @api public */ @@ -232,7 +265,7 @@ Db.prototype.open = function(callback) { // Set the status of the server self._state = 'connecting'; - + // Set up connections if(self.serverConfig instanceof Server || self.serverConfig instanceof ReplSet || self.serverConfig instanceof Mongos) { // Ensure we have the original options passed in for the server config @@ -245,20 +278,33 @@ Db.prototype.open = function(callback) { // Attempt to connect self.serverConfig.connect(self, connect_options, function(err, result) { if(err != null) { - // Set that db has been closed - self.openCalled = false; - // Return error from connection - return callback(err, null); + // Close db to reset connection + return self.close(function () { + // Return error from connection + return callback(err, null); + }); } // Set the status of the server self._state = 'connected'; // If we have queued up commands execute a command to trigger replays if(self.commands.length > 0) _execute_queued_command(self); // Callback - return callback(null, self); + process.nextTick(function() { + try { + callback(null, self); + } catch(err) { + self.close(); + throw err; + } + }); }); } else { - return callback(Error("Server parameter must be of type Server, ReplSet or Mongos"), null); + try { + callback(Error("Server parameter must be of type Server, ReplSet or Mongos"), null); + } catch(err) { + self.close(); + throw err; + } } }; @@ -278,25 +324,23 @@ Db.prototype.db = function(dbName) { // Add override flag options['override_used_flag'] = true; - // Create a new db instance - var newDbInstance = new Db(dbName, this.serverConfig, options); - // Add the instance to the list of approved db instances - var allServerInstances = this.serverConfig.allServerInstances(); - // Add ourselves to all server callback instances - for(var i = 0; i < allServerInstances.length; i++) { - // var server = allServerInstances[i]; - // server.dbInstances.push(newDbInstance); - this.serverConfig._dbStore.add(newDbInstance); - } - // Return new db object - return newDbInstance; -} + // Check if the db already exists and reuse if it's the case + var db = this.serverConfig._dbStore.fetch(dbName); + + // Create a new instance + if(!db) { + db = new Db(dbName, this.serverConfig, options); + } + + // Return the db object + return db; +}; /** - * Close the current db connection, including all the child db instances. Emits close event if no callback is provided. + * Close the current db connection, including all the child db instances. Emits close event and calls optional callback. * * @param {Boolean} [forceClose] connection can never be reused. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results or null if an error occurred. * @return {null} * @api public */ @@ -315,7 +359,7 @@ Db.prototype.close = function(forceClose, callback) { // You can reuse the db as everything is shut down self.openCalled = false; // If we have a callback call it - if(callback) callback(err, result); + if(callback) callback(err, result); }); }; @@ -335,7 +379,7 @@ Db.prototype.admin = function(callback) { * Returns a cursor to all the collection information. * * @param {String} [collectionName] the collection name we wish to retrieve the information from. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the options or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the options or null if an error occurred. * @return {null} * @api public */ @@ -363,30 +407,28 @@ Db.prototype.collectionsInfo = function(collectionName, callback) { * * @param {String} [collectionName] the collection name we wish to filter by. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the collection names or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the collection names or null if an error occurred. * @return {null} * @api public */ Db.prototype.collectionNames = function(collectionName, options, callback) { - var self = this; var args = Array.prototype.slice.call(arguments, 0); callback = args.pop(); - collectionName = args.length ? args.shift() : null; + name = args.length ? args.shift() : null; options = args.length ? args.shift() || {} : {}; - // Ensure no breaking behavior - if(collectionName != null && typeof collectionName == 'object') { - options = collectionName; - collectionName = null; - } - - // Let's make our own callback to reuse the existing collections info method - self.collectionsInfo(collectionName, function(err, cursor) { - if(err != null) return callback(err, null); - + // Define self + var self = this; + // Only passed in options + if(name != null && typeof name == 'object') options = name, name = null; + + // Fallback to pre 2.8 list collections + var fallbackListCollections = function() { + // Let's make our own callback to reuse the existing collections info method + var cursor = self.collectionsInfo(name); + // Get all documents cursor.toArray(function(err, documents) { if(err != null) return callback(err, null); - // List of result documents that have been filtered var filtered_documents = documents.filter(function(document) { return !(document.name.indexOf(self.databaseName) == -1 || document.name.indexOf('$') != -1); @@ -399,7 +441,30 @@ Db.prototype.collectionNames = function(collectionName, options, callback) { // Return filtered items callback(null, filtered_documents); + }); + } + + // Attempt to execute the collection list + self.command({listCollections:1}, function(err, result) { + if(err) return fallbackListCollections(); + // List of result documents that have been filtered + var filtered_documents = result.collections.filter(function(document) { + if(name && document.name != name) { + return false; + } else if(document.name.indexOf('$') != -1) { + return false; + } + + return true; }); + + // If we are returning only the names + if(options.namesOnly) { + filtered_documents = filtered_documents.map(function(document) { return document.name }); + } + + // Return filtered items + callback(null, filtered_documents); }); }; @@ -408,22 +473,19 @@ Db.prototype.collectionNames = function(collectionName, options, callback) { * can use it without a callback in the following way. var collection = db.collection('mycollection'); * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write +* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **serializeFunctions** {Boolean, default:false}, serialize functions on the document. * - **raw** {Boolean, default:false}, perform all operations using raw bson objects. * - **pkFactory** {Object}, object overriding the basic ObjectID primary key generation. - * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). - * - **strict**, (Boolean, default:false) throws an error if the collection does not exist - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **readPreference** {String}, the preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **strict**, (Boolean, default:false) returns an error if the collection does not exist * * @param {String} collectionName the collection name we wish to access. * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the collection or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the collection or null if an error occurred. * @return {null} * @api public */ @@ -466,7 +528,7 @@ Db.prototype.collection = function(collectionName, options, callback) { /** * Fetch all collections for the current db. * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the collections or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the collections or null if an error occurred. * @return {null} * @api public */ @@ -493,7 +555,7 @@ Db.prototype.collections = function(callback) { * @param {Code} code javascript to execute on server. * @param {Object|Array} [parameters] the parameters for the call. * @param {Object} [options] the options - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from eval or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from eval or null if an error occurred. * @return {null} * @api public */ @@ -519,26 +581,21 @@ Db.prototype.eval = function(code, parameters, options, callback) { } // Create execution selector - var selector = {'$eval':finalCode, 'args':finalParameters}; + var cmd = {'$eval':finalCode, 'args':finalParameters}; // Check if the nolock parameter is passed in if(options['nolock']) { - selector['nolock'] = options['nolock']; + cmd['nolock'] = options['nolock']; } // Set primary read preference options.readPreference = ReadPreference.PRIMARY; - // Execute the eval - this.collection(DbCommand.SYSTEM_COMMAND_COLLECTION).findOne(selector, options, function(err, result) { - if(err) return callback(err); - - if(result && result.ok == 1) { - callback(null, result.retval); - } else if(result) { - callback(new Error("eval failed: " + result.errmsg), null); return; - } else { - callback(err, result); - } + // Execute the command + this.command(cmd, options, function(err, result) { + if(err) return callback(err, null); + if(result && result.ok == 1) return callback(null, result.retval); + if(result) return callback(new Error("eval failed: " + result.errmsg), null); + callback(err, result); }); }; @@ -546,7 +603,7 @@ Db.prototype.eval = function(code, parameters, options, callback) { * Dereference a dbref, against a db * * @param {DBRef} dbRef db reference object we wish to resolve. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from dereference or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from dereference or null if an error occurred. * @return {null} * @api public */ @@ -559,12 +616,12 @@ Db.prototype.dereference = function(dbRef, callback) { collection.findOne({'_id':dbRef.oid}, function(err, result) { callback(err, result); }); -}; +} /** * Logout user from server, fire off on all connections and remove all auth info * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from logout or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from logout or null if an error occurred. * @return {null} * @api public */ @@ -577,10 +634,13 @@ Db.prototype.logout = function(options, callback) { // Number of connections we need to logout from var numberOfConnections = this.serverConfig.allRawConnections().length; + // logout command + var cmd = {'logout':1}; + // Add onAll to login to ensure all connection are logged out + options.onAll = true; - // Let's generate the logout command object - var logoutCommand = DbCommand.logoutCommand(self, {logout:1}, options); - self._executeQueryCommand(logoutCommand, {onAll:true}, function(err, result) { + // Execute the command + this.command(cmd, options, function(err, result) { // Count down numberOfConnections = numberOfConnections - 1; // Work around the case where the number of connections are 0 @@ -590,13 +650,8 @@ Db.prototype.logout = function(options, callback) { // Remove the db from auths self.serverConfig.auth.remove(self.databaseName); - - // Handle any errors - if(err == null && result.documents[0].ok == 1) { - internalCallback(null, true); - } else { - err != null ? internalCallback(err, false) : internalCallback(new Error(result.documents[0].errmsg), false); - } + // Callback with result + internalCallback(null, result.ok == 1 ? true : false); } }); } @@ -605,21 +660,19 @@ Db.prototype.logout = function(options, callback) { * Authenticate a user against the server. * authMechanism * Options - * - **authSource** {String}, The database that the credentials are for, - * different from the name of the current DB, for example admin * - **authMechanism** {String, default:MONGODB-CR}, The authentication mechanism to use, GSSAPI or MONGODB-CR * * @param {String} username username. * @param {String} password password. * @param {Object} [options] the options - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from authentication or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from authentication or null if an error occurred. * @return {null} * @api public */ Db.prototype.authenticate = function(username, password, options, callback) { var self = this; - if(typeof callback === 'undefined') { + if(typeof options == 'function') { callback = options; options = {}; } @@ -627,8 +680,12 @@ Db.prototype.authenticate = function(username, password, options, callback) { // Set default mechanism if(!options.authMechanism) { options.authMechanism = 'MONGODB-CR'; - } else if(options.authMechanism != 'GSSAPI' && options.authMechanism != 'MONGODB-CR') { - return callback(new Error("only GSSAPI or MONGODB-CR is supported by authMechanism")); + } else if(options.authMechanism != 'GSSAPI' + && options.authMechanism != 'MONGODB-CR' + && options.authMechanism != 'MONGODB-X509' + && options.authMechanism != 'SCRAM-SHA-1' + && options.authMechanism != 'PLAIN') { + return callback(new Error("only GSSAPI, PLAIN, MONGODB-X509, SCRAM-SHA-1 or MONGODB-CR is supported by authMechanism")); } // the default db to authenticate against is 'this' @@ -636,9 +693,25 @@ Db.prototype.authenticate = function(username, password, options, callback) { var authdb = options.authdb ? options.authdb : self.databaseName; authdb = options.authSource ? options.authSource : authdb; + // Callback + var _callback = function(err, result) { + if(self.listeners("authenticated").length > 0) { + self.emit("authenticated", err, result); + } + + // Return to caller + callback(err, result); + } + // If classic auth delegate to auth command if(options.authMechanism == 'MONGODB-CR') { - mongodb_cr_authenticate(self, username, password, authdb, options, callback); + mongodb_cr_authenticate(self, username, password, authdb, options, _callback); + } else if(options.authMechanism == 'PLAIN') { + mongodb_plain_authenticate(self, username, password, options, _callback); + } else if(options.authMechanism == 'MONGODB-X509') { + mongodb_x509_authenticate(self, username, password, options, _callback); + } else if(options.authMechanism == 'SCRAM-SHA-1') { + mongodb_scram_authenticate(self, username, password, authdb, options, _callback); } else if(options.authMechanism == 'GSSAPI') { // // Kerberos library is not installed, throw and error @@ -655,10 +728,10 @@ Db.prototype.authenticate = function(username, password, options, callback) { } if(process.platform == 'win32') { - mongodb_sspi_authenticate(self, username, password, authdb, options, callback); + mongodb_sspi_authenticate(self, username, password, authdb, options, _callback); } else { // We have the kerberos library, execute auth process - mongodb_gssapi_authenticate(self, username, password, authdb, options, callback); + mongodb_gssapi_authenticate(self, username, password, authdb, options, _callback); } } }; @@ -667,29 +740,37 @@ Db.prototype.authenticate = function(username, password, options, callback) { * Add a user to the database. * * Options - * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning + * - **customData**, (Object, default:{}) custom data associated with the user (only Mongodb 2.6 or higher) + * - **roles**, (Array, default:[]) roles associated with the created user (only Mongodb 2.6 or higher) * * @param {String} username username. * @param {String} password password. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from addUser or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from addUser or null if an error occurred. * @return {null} * @api public */ Db.prototype.addUser = function(username, password, options, callback) { + // Checkout a write connection to get the server capabilities + var connection = this.serverConfig.checkoutWriter(); + if(connection != null + && connection.serverCapabilities != null + && connection.serverCapabilities.hasAuthCommands) { + return _executeAuthCreateUserCommand(this, username, password, options, callback); + } + + // Unpack the parameters var self = this; var args = Array.prototype.slice.call(arguments, 2); callback = args.pop(); options = args.length ? args.shift() || {} : {}; // Get the error options - var errorOptions = _getWriteConcern(this, options, callback); + var errorOptions = _getWriteConcern(this, options); errorOptions.w = errorOptions.w == null ? 1 : errorOptions.w; // Use node md5 generator var md5 = crypto.createHash('md5'); @@ -712,7 +793,7 @@ Db.prototype.addUser = function(username, password, options, callback) { commandOptions.upsert = true; // We have a user, let's update the password or upsert if not - collection.update({user: username},{$set: {user: username, pwd: userPassword}}, commandOptions, function(err, results) { + collection.update({user: username},{$set: {user: username, pwd: userPassword}}, commandOptions, function(err, results, full) { if(count == 0 && err) { callback(null, [{user:username, pwd:userPassword}]); } else if(err) { @@ -725,25 +806,105 @@ Db.prototype.addUser = function(username, password, options, callback) { }); }; +/** + * @ignore + */ +var _executeAuthCreateUserCommand = function(self, username, password, options, callback) { + // Special case where there is no password ($external users) + if(typeof username == 'string' + && password != null && typeof password == 'object') { + callback = options; + options = password; + password = null; + } + + // Unpack all options + if(typeof options == 'function') { + callback = options; + options = {}; + } + + // Error out if we digestPassword set + if(options.digestPassword != null) { + throw utils.toError("The digestPassword option is not supported via add_user. Please use db.command('createUser', ...) instead for this option."); + } + + // Get additional values + var customData = options.customData != null ? options.customData : {}; + var roles = Array.isArray(options.roles) ? options.roles : []; + var maxTimeMS = typeof options.maxTimeMS == 'number' ? options.maxTimeMS : null; + + // If not roles defined print deprecated message + if(roles.length == 0) { + console.log("Creating a user without roles is deprecated in MongoDB >= 2.6"); + } + + // Get the error options + var writeConcern = _getWriteConcern(self, options); + var commandOptions = {writeCommand:true}; + if(options['dbName']) commandOptions.dbName = options['dbName']; + + // Add maxTimeMS to options if set + if(maxTimeMS != null) commandOptions.maxTimeMS = maxTimeMS; + + // Check the db name and add roles if needed + if((self.databaseName.toLowerCase() == 'admin' || options.dbName == 'admin') && !Array.isArray(options.roles)) { + roles = ['root'] + } else if(!Array.isArray(options.roles)) { + roles = ['dbOwner'] + } + + // Build the command to execute + var command = { + createUser: username + , customData: customData + , roles: roles + , digestPassword:false + , writeConcern: writeConcern + } + + // Use node md5 generator + var md5 = crypto.createHash('md5'); + // Generate keys used for authentication + md5.update(username + ":mongo:" + password); + var userPassword = md5.digest('hex'); + + // No password + if(typeof password == 'string') { + command.pwd = userPassword; + } + + // Execute the command + self.command(command, commandOptions, function(err, result) { + if(err) return callback(err, null); + callback(!result.ok ? utils.toError("Failed to add user " + username) : null + , result.ok ? [{user: username, pwd: ''}] : null); + }) +} + /** * Remove a user from a database * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * * @param {String} username username. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from removeUser or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from removeUser or null if an error occurred. * @return {null} * @api public */ Db.prototype.removeUser = function(username, options, callback) { + // Checkout a write connection to get the server capabilities + var connection = this.serverConfig.checkoutWriter(); + if(connection != null && connection.serverCapabilities != null && connection.serverCapabilities.hasAuthCommands) { + return _executeAuthRemoveUserCommand(this, username, options, callback); + } + + // Unpack the parameters var self = this; var args = Array.prototype.slice.call(arguments, 1); callback = args.pop(); @@ -773,14 +934,45 @@ Db.prototype.removeUser = function(username, options, callback) { }); }; +var _executeAuthRemoveUserCommand = function(self, username, options, callback) { + // Unpack all options + if(typeof options == 'function') { + callback = options; + options = {}; + } + + // Get the error options + var writeConcern = _getWriteConcern(self, options); + var commandOptions = {writeCommand:true}; + if(options['dbName']) commandOptions.dbName = options['dbName']; + + // Get additional values + var maxTimeMS = typeof options.maxTimeMS == 'number' ? options.maxTimeMS : null; + + // Add maxTimeMS to options if set + if(maxTimeMS != null) commandOptions.maxTimeMS = maxTimeMS; + + // Build the command to execute + var command = { + dropUser: username + , writeConcern: writeConcern + } + + // Execute the command + self.command(command, commandOptions, function(err, result) { + if(err) return callback(err, null); + callback(null, result.ok ? true : false); + }) +} + /** * Creates a collection on a server pre-allocating space, need to create f.ex capped collections. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write +* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **serializeFunctions** {Boolean, default:false}, serialize functions on the document. * - **raw** {Boolean, default:false}, perform all operations using raw bson objects. * - **pkFactory** {Object}, object overriding the basic ObjectID primary key generation. @@ -788,23 +980,21 @@ Db.prototype.removeUser = function(username, options, callback) { * - **size** {Number}, the size of the capped collection in bytes. * - **max** {Number}, the maximum number of documents in the capped collection. * - **autoIndexId** {Boolean, default:true}, create an index on the _id field of the document, True by default on MongoDB 2.2 or higher off for version < 2.2. - * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **readPreference** {String}, the preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **strict**, (Boolean, default:false) throws an error if collection already exists - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {String} collectionName the collection name we wish to access. * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from createCollection or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from createCollection or null if an error occurred. * @return {null} * @api public */ Db.prototype.createCollection = function(collectionName, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - options = args.length ? args.shift() : null; var self = this; + if(typeof options == 'function') { + callback = options; + options = {}; + } // Figure out the safe mode settings var safe = self.safe != null && self.safe == false ? {w: 1} : self.safe; @@ -812,19 +1002,19 @@ Db.prototype.createCollection = function(collectionName, options, callback) { safe = options != null && options['safe'] != null ? options['safe'] : safe; // Ensure it's at least set to safe safe = safe == null ? {w: 1} : safe; - // Check if we have the name - this.collectionNames(collectionName, function(err, collections) { + this.collectionNames(function(err, collections) { if(err != null) return callback(err, null); var found = false; collections.forEach(function(collection) { - if(collection.name == self.databaseName + "." + collectionName) found = true; + if(collection.name == self.databaseName + "." + collectionName + || collection.name == collectionName) found = true; }); // If the collection exists either throw an exception (if db in safe mode) or return the existing collection if(found && options && options.strict) { - return callback(new Error("Collection " + collectionName + " already exists. Currently in safe mode."), null); + return callback(new Error("Collection " + collectionName + " already exists. Currently in strict mode."), null); } else if(found){ try { var collection = new Collection(self, collectionName, self.pkFactory, options); @@ -834,68 +1024,146 @@ Db.prototype.createCollection = function(collectionName, options, callback) { return callback(null, collection); } - // Create a new collection and return it - self._executeQueryCommand(DbCommand.createCreateCollectionCommand(self, collectionName, options), {read:false, safe:safe}, function(err, result) { - var document = result.documents[0]; - // If we have no error let's return the collection - if(err == null && document.ok == 1) { - try { - var collection = new Collection(self, collectionName, self.pkFactory, options); - } catch(err) { - return callback(err, null); - } - return callback(null, collection); - } else { - if (null == err) err = utils.toError(document); - callback(err, null); + // logout command + var cmd = {'create':collectionName}; + + for(var name in options) { + if(options[name] != null && typeof options[name] != 'function') cmd[name] = options[name]; + } + // Execute the command + self.command(cmd, options, function(err, result) { + if(err && err.code && err.code != 48 && options && options.strict) return callback(err, null); + try { + callback(null, new Collection(self, collectionName, self.pkFactory, options)); + } catch(err) { + callback(utils.toError(err), null); } }); }); }; +var _getReadConcern = function(self, options) { + if(options.readPreference) return options.readPreference; + if(self.readPreference) return self.readPreference; + return 'primary'; +} + /** * Execute a command hash against MongoDB. This lets you acess any commands not available through the api on the server. * + * Options + * - **readPreference** {String}, the preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **maxTimeMS** {Number}, number of milliseconds to wait before aborting the query. + * - **ignoreCommandFilter** {Boolean}, overrides the default redirection of certain commands to primary. + * - **writeCommand** {Boolean, default: false}, signals this is a write command and to ignore read preferences + * - **checkKeys** {Boolean, default: false}, overrides the default not to check the key names for the command + * * @param {Object} selector the command hash to send to the server, ex: {ping:1}. + * @param {Object} [options] additional options for the command. * @param {Function} callback this will be called after executing this method. The command always return the whole result of the command as the second parameter. * @return {null} * @api public */ Db.prototype.command = function(selector, options, callback) { - var args = Array.prototype.slice.call(arguments, 1); - callback = args.pop(); - options = args.length ? args.shift() || {} : {}; + if(typeof options == 'function') { + callback = options; + options = {}; + } - // Set up the options - var cursor = new Cursor(this - , new Collection(this, DbCommand.SYSTEM_COMMAND_COLLECTION), selector, {}, { - limit: -1, timeout: QueryCommand.OPTS_NO_CURSOR_TIMEOUT, dbName: options['dbName'] - }); + // Make a shallow copy so no modifications happen on the original + options = utils.shallowObjectCopy(options); + + // Ignore command preference (I know what I'm doing) + var ignoreCommandFilter = options.ignoreCommandFilter ? options.ignoreCommandFilter : false; - // Set read preference if we set one - var readPreference = options['readPreference'] ? options['readPreference'] : false; + // Get read preference if we set one + var readPreference = _getReadConcern(this, options); // Ensure only commands who support read Prefrences are exeuted otherwise override and use Primary - if(readPreference != false) { + if(readPreference != false && ignoreCommandFilter == false) { if(selector['group'] || selector['aggregate'] || selector['collStats'] || selector['dbStats'] - || selector['count'] || selector['distinct'] || selector['geoNear'] || selector['geoSearch'] || selector['geoWalk'] - || (selector['mapreduce'] && selector.out == 'inline')) { + || selector['count'] || selector['distinct'] || selector['geoNear'] || selector['geoSearch'] + || selector['geoWalk'] || selector['text'] || selector['cursorInfo'] + || selector['parallelCollectionScan'] + || (selector['mapreduce'] && (selector.out == 'inline' || selector.out.inline))) { // Set the read preference - cursor.setReadPreference(readPreference); + options.readPreference = readPreference; } else { - cursor.setReadPreference(ReadPreference.PRIMARY); + options.readPreference = ReadPreference.PRIMARY; } + } else if(readPreference != false) { + options.readPreference = readPreference; + } + + // Add the maxTimeMS option to the command if specified + if(typeof options.maxTimeMS == 'number') { + selector.maxTimeMS = options.maxTimeMS + } + + // Command options + var command_options = {}; + + // Do we have an override for checkKeys + if(typeof options['checkKeys'] == 'boolean') command_options['checkKeys'] = options['checkKeys']; + command_options['checkKeys'] = typeof options['checkKeys'] == 'boolean' ? options['checkKeys'] : false; + if(typeof options['serializeFunctions'] == 'boolean') command_options['serializeFunctions'] = options['serializeFunctions']; + if(options['dbName']) command_options['dbName'] = options['dbName']; + + // If we have a write command, remove readPreference as an option + if((options.writeCommand + || selector['findAndModify'] + || selector['insert'] || selector['update'] || selector['delete'] + || selector['createUser'] || selector['updateUser'] || selector['removeUser']) + && options.readPreference) { + delete options['readPreference']; } - // Return the next object - cursor.nextObject(callback); + // Add a write concern if we have passed in any + if(options.w || options.wtimeout || options.j || options.fsync || options.safe) { + selector.writeConcern = {}; + if(options.safe) selector.writeConcern.w = 1; + if(options.w) selector.writeConcern.w = options.w; + if(options.wtimeout) selector.writeConcern.wtimeout = options.wtimeout; + if(options.j) selector.writeConcern.j = options.j; + if(options.fsync) selector.writeConcern.fsync = options.fsync; + } + + // If we have an actual writeConcern object override + if(options.writeConcern) { + selector.writeConcern = writeConcern; + } + + // Check if we need to set slaveOk + if(command_options.readPreference != 'primary') + command_options.slaveOk = true; + + // Execution db + var execDb = typeof options.auth == 'string' ? this.db(options.auth) : this; + execDb = typeof options.authdb == 'string' ? this.db(options.authdb) : execDb; + + // Execute a query command + this._executeQueryCommand(DbCommand.createDbSlaveOkCommand(execDb, selector, command_options), options, function(err, results, connection) { + if(options.returnConnection) { + if(err) return callback(err, null, connection); + if(results == null || results.documents == null) return callback(new Error("command failed to return result")); + if(results.documents[0].errmsg) + return callback(utils.toError(results.documents[0]), null, connection); + callback(null, results.documents[0], connection); + } else { + if(err) return callback(err, null); + if(results == null || results.documents == null) return callback(new Error("command failed to return result")); + if(results.documents[0].errmsg) + return callback(utils.toError(results.documents[0]), null); + callback(null, results.documents[0]); + } + }); }; /** * Drop a collection from the database, removing it permanently. New accesses will create a new collection. * * @param {String} collectionName the name of the collection we wish to drop. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from dropCollection or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from dropCollection or null if an error occurred. * @return {null} * @api public */ @@ -903,27 +1171,27 @@ Db.prototype.dropCollection = function(collectionName, callback) { var self = this; callback || (callback = function(){}); - // Drop the collection - this._executeQueryCommand(DbCommand.createDropCollectionCommand(this, collectionName), function(err, result) { - if(err == null && result.documents[0].ok == 1) { - return callback(null, true); - } + // Command to execute + var cmd = {'drop':collectionName} - if(null == err) err = utils.toError(result.documents[0]); - callback(err, null); + // Execute the command + this.command(cmd, {}, function(err, result) { + if(err) return callback(err, null); + if(result.ok) return callback(null, true); + callback(null, false); }); }; /** * Rename a collection. - * + * * Options * - **dropTarget** {Boolean, default:false}, drop the target name collection if it previously exists. * * @param {String} fromCollection the name of the current collection we wish to rename. * @param {String} toCollection the new name of the collection. * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from renameCollection or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from renameCollection or null if an error occurred. * @return {null} * @api public */ @@ -935,77 +1203,11 @@ Db.prototype.renameCollection = function(fromCollection, toCollection, options, options = {} } - callback || (callback = function(){}); - // Execute the command, return the new renamed collection if successful - this._executeQueryCommand(DbCommand.createRenameCollectionCommand(this, fromCollection, toCollection, options), function(err, result) { - if(err == null && result.documents[0].ok == 1) { - return callback(null, new Collection(self, toCollection, self.pkFactory)); - } + // Add return new collection + options.new_collection = true; - if(null == err) err = utils.toError(result.documents[0]); - callback(err, null); - }); -}; - -/** - * Return last error message for the given connection, note options can be combined. - * - * Options - * - **fsync** {Boolean, default:false}, option forces the database to fsync all files before returning. - * - **j** {Boolean, default:false}, awaits the journal commit before returning, > MongoDB 2.0. - * - **w** {Number}, until a write operation has been replicated to N servers. - * - **wtimeout** {Number}, number of miliseconds to wait before timing out. - * - * Connection Options - * - **connection** {Connection}, fire the getLastError down a specific connection. - * - * @param {Object} [options] returns option results. - * @param {Object} [connectionOptions] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from lastError or null if an error occured. - * @return {null} - * @api public - */ -Db.prototype.lastError = function(options, connectionOptions, callback) { - // Unpack calls - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - options = args.length ? args.shift() || {} : {}; - connectionOptions = args.length ? args.shift() || {} : {}; - - this._executeQueryCommand(DbCommand.createGetLastErrorCommand(options, this), connectionOptions, function(err, error) { - callback(err, error && error.documents); - }); -}; - -/** - * Legacy method calls. - * - * @ignore - * @api private - */ -Db.prototype.error = Db.prototype.lastError; -Db.prototype.lastStatus = Db.prototype.lastError; - -/** - * Return all errors up to the last time db reset_error_history was called. - * - * Options - * - **connection** {Connection}, fire the getLastError down a specific connection. - * - * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from previousErrors or null if an error occured. - * @return {null} - * @api public - */ -Db.prototype.previousErrors = function(options, callback) { - // Unpack calls - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - options = args.length ? args.shift() || {} : {}; - - this._executeQueryCommand(DbCommand.createGetPreviousErrorsCommand(this), options, function(err, error) { - callback(err, error.documents); - }); + // Execute using the collection method + this.collection(fromCollection).rename(toCollection, options, callback); }; /** @@ -1015,7 +1217,9 @@ Db.prototype.previousErrors = function(options, callback) { */ Db.prototype.executeDbCommand = function(command_hash, options, callback) { if(callback == null) { callback = options; options = {}; } - this._executeQueryCommand(DbCommand.createDbSlaveOkCommand(this, command_hash, options), options, callback); + this._executeQueryCommand(DbCommand.createDbSlaveOkCommand(this, command_hash, options), options, function(err, result) { + if(callback) callback(err, result); + }); }; /** @@ -1024,29 +1228,17 @@ Db.prototype.executeDbCommand = function(command_hash, options, callback) { * @api private */ Db.prototype.executeDbAdminCommand = function(command_hash, options, callback) { - if(callback == null) { callback = options; options = {}; } - this._executeQueryCommand(DbCommand.createAdminDbCommand(this, command_hash), options, callback); -}; + if(typeof options == 'function') { + callback = options; + options = {} + } -/** - * Resets the error history of the mongo instance. - * - * Options - * - **connection** {Connection}, fire the getLastError down a specific connection. - * - * @param {Object} [options] returns option results. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from resetErrorHistory or null if an error occured. - * @return {null} - * @api public - */ -Db.prototype.resetErrorHistory = function(options, callback) { - // Unpack calls - var args = Array.prototype.slice.call(arguments, 0); - callback = args.pop(); - options = args.length ? args.shift() || {} : {}; + if(options.readPreference) { + options.readPreference = options.readPreference; + } - this._executeQueryCommand(DbCommand.createResetErrorHistoryCommand(this), options, function(err, error) { - callback(err, error.documents); + this._executeQueryCommand(DbCommand.createAdminDbCommand(this, command_hash), options, function(err, result) { + if(callback) callback(err, result); }); }; @@ -1054,28 +1246,23 @@ Db.prototype.resetErrorHistory = function(options, callback) { * Creates an index on the collection. * * Options -* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write +* - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **unique** {Boolean, default:false}, creates an unique index. * - **sparse** {Boolean, default:false}, creates a sparse index. * - **background** {Boolean, default:false}, creates the index in the background, yielding whenever possible. - * - **dropDups** {Boolean, default:false}, a unique index cannot be created on a key that has pre-existing duplicate values. If you would like to create the index anyway, keeping the first document the database indexes and deleting all subsequent documents that have duplicate value * - **min** {Number}, for geospatial indexes set the lower bound for the co-ordinates. * - **max** {Number}, for geospatial indexes set the high bound for the co-ordinates. * - **v** {Number}, specify the format version of the indexes. * - **expireAfterSeconds** {Number}, allows you to expire data on indexes applied to a data (MongoDB 2.2 or higher) * - **name** {String}, override the autogenerated index name (useful if the resulting name is larger than 128 bytes) - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. - * * * @param {String} collectionName name of the collection to create the index on. * @param {Object} fieldOrSpec fieldOrSpec that defines the index. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from createIndex or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from createIndex or null if an error occurred. * @return {null} * @api public */ @@ -1088,157 +1275,191 @@ Db.prototype.createIndex = function(collectionName, fieldOrSpec, options, callba options = options == null ? {} : options; // Get the error options - var errorOptions = _getWriteConcern(this, options, callback); - // Create command - var command = DbCommand.createCreateIndexCommand(this, collectionName, fieldOrSpec, options); - // Default command options - var commandOptions = {}; - - // If we have error conditions set handle them - if(_hasWriteConcern(errorOptions) && typeof callback == 'function') { - // Insert options - commandOptions['read'] = false; - // If we have safe set set async to false - if(errorOptions == null) commandOptions['async'] = true; - - // Set safe option - commandOptions['safe'] = errorOptions; - // If we have an error option - if(typeof errorOptions == 'object') { - var keys = Object.keys(errorOptions); - for(var i = 0; i < keys.length; i++) { - commandOptions[keys[i]] = errorOptions[keys[i]]; - } + var writeConcern = _getWriteConcern(self, options); + // Ensure we have a callback + if(_hasWriteConcern(writeConcern) && typeof callback != 'function') { + throw new Error("Cannot use a writeConcern without a provided callback"); + } + + // Attempt to run using createIndexes command + createIndexUsingCreateIndexes(self, collectionName, fieldOrSpec, options, function(err, result) { + if(err == null) { + return callback(err, result); } - // Execute insert command - this._executeInsertCommand(command, commandOptions, function(err, result) { - if(err != null) return callback(err, null); + // Create command + var command = createCreateIndexCommand(self, collectionName, fieldOrSpec, options); + // Default command options + var commandOptions = {}; + + // If we have error conditions set handle them + if(_hasWriteConcern(writeConcern) && typeof callback == 'function') { + // Set safe option + commandOptions['safe'] = writeConcern; + // If we have an error option + if(typeof writeConcern == 'object') { + var keys = Object.keys(writeConcern); + for(var i = 0; i < keys.length; i++) { + commandOptions[keys[i]] = writeConcern[keys[i]]; + } + } - result = result && result.documents; - if (result[0].err) { - callback(utils.toError(result[0])); - } else { - callback(null, command.documents[0].name); + // Execute insert command + self._executeInsertCommand(command, commandOptions, function(err, result) { + if(err != null) return callback(err, null); + if(result == null || result.documents == null) return callback(new Error("command failed to return result")); + + result = result && result.documents; + if (result[0].err) { + callback(utils.toError(result[0])); + } else { + callback(null, command.documents[0].name); + } + }); + } else { + // Execute insert command + var result = self._executeInsertCommand(command, commandOptions, function() {}); + // If no callback just return + if(!callback) return; + // If error return error + if(result instanceof Error) { + return callback(result); } - }); - } else if(_hasWriteConcern(errorOptions) && callback == null) { - throw new Error("Cannot use a writeConcern without a provided callback"); - } else { - // Execute insert command - var result = this._executeInsertCommand(command, commandOptions); - // If no callback just return - if(!callback) return; - // If error return error - if(result instanceof Error) { - return callback(result); + // Otherwise just return + return callback(null, null); } - // Otherwise just return - return callback(null, null); - } + }); }; +var createCreateIndexCommand = function(db, collectionName, fieldOrSpec, options) { + var indexParameters = utils.parseIndexOptions(fieldOrSpec); + var fieldHash = indexParameters.fieldHash; + var keys = indexParameters.keys; + + // Generate the index name + var indexName = typeof options.name == 'string' + ? options.name + : indexParameters.name; + + var selector = { + 'ns': db.databaseName + "." + collectionName, + 'key': fieldHash, + 'name': indexName + } + + // Ensure we have a correct finalUnique + var finalUnique = options == null || 'object' === typeof options + ? false + : options; + + // Set up options + options = options == null || typeof options == 'boolean' + ? {} + : options; + + // Add all the options + var keysToOmit = Object.keys(selector); + for(var optionName in options) { + if(keysToOmit.indexOf(optionName) == -1) { + selector[optionName] = options[optionName]; + } + } + + if(selector['unique'] == null) + selector['unique'] = finalUnique; + + var name = db.databaseName + "." + DbCommand.SYSTEM_INDEX_COLLECTION; + var cmd = new InsertCommand(db, name, false); + return cmd.add(selector); +} + +var createIndexUsingCreateIndexes = function(self, collectionName, fieldOrSpec, options, callback) { + // Build the index + var indexParameters = utils.parseIndexOptions(fieldOrSpec); + // Generate the index name + var indexName = typeof options.name == 'string' + ? options.name + : indexParameters.name; + + // Set up the index + var indexes = [{ + name: indexName + , key: indexParameters.fieldHash + }]; + + // merge all the options + var keysToOmit = Object.keys(indexes[0]); + for(var optionName in options) { + if(keysToOmit.indexOf(optionName) == -1) { + indexes[0][optionName] = options[optionName]; + } + } + + // Create command + var command = {createIndexes: collectionName, indexes: indexes}; + // Build the command + self.command(command, options, function(err, result) { + if(err) return callback(err, null); + if(result.ok == 0) { + return callback(utils.toError(result), null); + } + + // Return the indexName for backward compatibility + callback(null, indexName); + }); +} + /** * Ensures that an index exists, if it does not it creates it * * Options - * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowledgement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **unique** {Boolean, default:false}, creates an unique index. * - **sparse** {Boolean, default:false}, creates a sparse index. * - **background** {Boolean, default:false}, creates the index in the background, yielding whenever possible. - * - **dropDups** {Boolean, default:false}, a unique index cannot be created on a key that has pre-existing duplicate values. If you would like to create the index anyway, keeping the first document the database indexes and deleting all subsequent documents that have duplicate value * - **min** {Number}, for geospatial indexes set the lower bound for the co-ordinates. * - **max** {Number}, for geospatial indexes set the high bound for the co-ordinates. * - **v** {Number}, specify the format version of the indexes. * - **expireAfterSeconds** {Number}, allows you to expire data on indexes applied to a data (MongoDB 2.2 or higher) * - **name** {String}, override the autogenerated index name (useful if the resulting name is larger than 128 bytes) - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. * * @param {String} collectionName name of the collection to create the index on. * @param {Object} fieldOrSpec fieldOrSpec that defines the index. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from ensureIndex or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from ensureIndex or null if an error occurred. * @return {null} * @api public */ Db.prototype.ensureIndex = function(collectionName, fieldOrSpec, options, callback) { var self = this; - if (typeof callback === 'undefined' && typeof options === 'function') { + if(typeof callback === 'undefined' && typeof options === 'function') { callback = options; options = {}; } - if (options == null) { - options = {}; - } + // Ensure non empty options + options = options || {}; // Get the error options - var errorOptions = _getWriteConcern(this, options, callback); + var writeConcern = _getWriteConcern(this, options); // Make sure we don't try to do a write concern without a callback - if(_hasWriteConcern(errorOptions) && callback == null) + if(_hasWriteConcern(writeConcern) && callback == null) throw new Error("Cannot use a writeConcern without a provided callback"); + // Create command - var command = DbCommand.createCreateIndexCommand(this, collectionName, fieldOrSpec, options); + var command = createCreateIndexCommand(this, collectionName, fieldOrSpec, options); var index_name = command.documents[0].name; - // Default command options - var commandOptions = {}; // Check if the index allready exists - this.indexInformation(collectionName, function(err, collectionInfo) { + this.indexInformation(collectionName, writeConcern, function(err, collectionInfo) { if(err != null) return callback(err, null); - + // If the index does not exist, create it if(!collectionInfo[index_name]) { - // If we have error conditions set handle them - if(_hasWriteConcern(errorOptions) && typeof callback == 'function') { - // Insert options - commandOptions['read'] = false; - // If we have safe set set async to false - if(errorOptions == null) commandOptions['async'] = true; - - // If we have an error option - if(typeof errorOptions == 'object') { - var keys = Object.keys(errorOptions); - for(var i = 0; i < keys.length; i++) { - commandOptions[keys[i]] = errorOptions[keys[i]]; - } - } - - if(typeof callback === 'function' - && commandOptions.w < 1 && !commandOptions.fsync && !commandOptions.journal) { - commandOptions.w = 1; - } - - self._executeInsertCommand(command, commandOptions, function(err, result) { - // Only callback if we have one specified - if(typeof callback === 'function') { - if(err != null) return callback(err, null); - - result = result && result.documents; - if (result[0].err) { - callback(utils.toError(result[0])); - } else { - callback(null, command.documents[0].name); - } - } - }); - } else { - // Execute insert command - var result = self._executeInsertCommand(command, commandOptions); - // If no callback just return - if(!callback) return; - // If error return error - if(result instanceof Error) { - return callback(result); - } - // Otherwise just return - return callback(null, index_name); - } + self.createIndex(collectionName, fieldOrSpec, options, callback); } else { if(typeof callback === 'function') return callback(null, index_name); } @@ -1249,10 +1470,10 @@ Db.prototype.ensureIndex = function(collectionName, fieldOrSpec, options, callba * Returns the information available on allocated cursors. * * Options - * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **readPreference** {String}, the preferred read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from cursorInfo or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from cursorInfo or null if an error occurred. * @return {null} * @api public */ @@ -1261,8 +1482,13 @@ Db.prototype.cursorInfo = function(options, callback) { callback = args.pop(); options = args.length ? args.shift() || {} : {}; - this._executeQueryCommand(DbCommand.createDbSlaveOkCommand(this, {'cursorInfo':1}), options, function(err, result) { - callback(err, result.documents[0]); + // cursorInfo command + var cmd = {'cursorInfo':1}; + + // Execute the command + this.command(cmd, options, function(err, result) { + if(err) return callback(err, null); + callback(null, result); }); }; @@ -1271,12 +1497,24 @@ Db.prototype.cursorInfo = function(options, callback) { * * @param {String} collectionName the name of the collection where the command will drop an index. * @param {String} indexName name of the index to drop. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from dropIndex or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from dropIndex or null if an error occurred. * @return {null} * @api public */ -Db.prototype.dropIndex = function(collectionName, indexName, callback) { - this._executeQueryCommand(DbCommand.createDropIndexCommand(this, collectionName, indexName), callback); +Db.prototype.dropIndex = function(collectionName, indexName, options, callback) { + var args = Array.prototype.slice.call(arguments, 2); + callback = args.pop(); + options = args.length ? args.shift() || {} : {}; + + // Delete index command + var cmd = {'deleteIndexes':collectionName, 'index':indexName}; + + // Execute command + this.command(cmd, options, function(err, result) { + if(callback == null) return; + if(err) return callback(err, null); + callback(null, result); + }); }; /** @@ -1284,18 +1522,23 @@ Db.prototype.dropIndex = function(collectionName, indexName, callback) { * Warning: reIndex is a blocking operation (indexes are rebuilt in the foreground) and will be slow for large collections. * * @param {String} collectionName the name of the collection. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from reIndex or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from reIndex or null if an error occurred. * @api public **/ -Db.prototype.reIndex = function(collectionName, callback) { - this._executeQueryCommand(DbCommand.createReIndexCommand(this, collectionName), function(err, result) { - if(err != null) { - callback(err, false); - } else if(result.documents[0].errmsg == null) { - callback(null, true); - } else { - callback(new Error(result.documents[0].errmsg), false); - } +Db.prototype.reIndex = function(collectionName, options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } + + // Reindex + var cmd = {'reIndex':collectionName}; + + // Execute the command + this.command(cmd, options, function(err, result) { + if(callback == null) return; + if(err) return callback(err, null); + callback(null, result.ok ? true : false); }); }; @@ -1308,78 +1551,98 @@ Db.prototype.reIndex = function(collectionName, callback) { * * @param {String} collectionName the name of the collection. * @param {Object} [options] additional options during update. - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from indexInformation or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from indexInformation or null if an error occurred. * @return {null} * @api public */ -Db.prototype.indexInformation = function(collectionName, options, callback) { +Db.prototype.indexInformation = function(name, options, callback) { if(typeof callback === 'undefined') { if(typeof options === 'undefined') { - callback = collectionName; - collectionName = null; + callback = name; + name = null; } else { callback = options; } options = {}; - } + } + + // Throw is no name provided + if(name == null) throw new Error("A collection name must be provided as first argument"); // If we specified full information var full = options['full'] == null ? false : options['full']; - // Build selector for the indexes - var selector = collectionName != null ? {ns: (this.databaseName + "." + collectionName)} : {}; + var self = this; - // Set read preference if we set one - var readPreference = options['readPreference'] ? options['readPreference'] : ReadPreference.PRIMARY; + // Process all the results from the index command and collection + var processResults = function(indexes) { + // Contains all the information + var info = {}; + // Process all the indexes + for(var i = 0; i < indexes.length; i++) { + var index = indexes[i]; + // Let's unpack the object + info[index.name] = []; + for(var name in index.key) { + info[index.name].push([name, index.key[name]]); + } + } - // Iterate through all the fields of the index - this.collection(DbCommand.SYSTEM_INDEX_COLLECTION, function(err, collection) { + return info; + } + + // Fallback to pre 2.8 getting the index information + var fallbackListIndexes = function() { + // Build selector for the indexes + var selector = name != null ? {ns: (self.databaseName + "." + name)} : {}; + + // Get read preference if we set one + var readPreference = ReadPreference.PRIMARY; + + // Iterate through all the fields of the index + var collection = self.collection(DbCommand.SYSTEM_INDEX_COLLECTION); // Perform the find for the collection collection.find(selector).setReadPreference(readPreference).toArray(function(err, indexes) { if(err != null) return callback(err, null); - // Contains all the information - var info = {}; - // if full defined just return all the indexes directly if(full) return callback(null, indexes); - - // Process all the indexes - for(var i = 0; i < indexes.length; i++) { - var index = indexes[i]; - // Let's unpack the object - info[index.name] = []; - for(var name in index.key) { - info[index.name].push([name, index.key[name]]); - } - } - // Return all the indexes - callback(null, info); + callback(null, processResults(indexes)); }); + } + + // Attempt to execute the listIndexes command + self.command({listIndexes: name}, function(err, result) { + if(err) return fallbackListIndexes(); + // if full defined just return all the indexes directly + if(full) return callback(null, result.indexes); + // Return all the indexes + callback(null, processResults(result.indexes)); }); }; /** * Drop a database. * - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from dropDatabase or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from dropDatabase or null if an error occurred. * @return {null} * @api public */ -Db.prototype.dropDatabase = function(callback) { - var self = this; +Db.prototype.dropDatabase = function(options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } - this._executeQueryCommand(DbCommand.createDropDatabaseCommand(this), function(err, result) { - if(err == null && result.documents[0].ok == 1) { - callback(null, true); - } else { - if(err) { - callback(err, false); - } else { - callback(utils.toError(result.documents[0]), false); - } - } + // Reindex + var cmd = {'dropDatabase':1}; + + // Execute the command + this.command(cmd, options, function(err, result) { + if(callback == null) return; + if(err) return callback(err, null); + callback(null, result.ok ? true : false); }); -}; +} /** * Get all the db statistics. @@ -1389,7 +1652,7 @@ Db.prototype.dropDatabase = function(callback) { * - **readPreference** {String}, the preferred read preference ((Server.PRIMARY, Server.PRIMARY_PREFERRED, Server.SECONDARY, Server.SECONDARY_PREFERRED, Server.NEAREST). * * @param {Objects} [options] options for the stats command - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from stats or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the results from stats or null if an error occurred. * @return {null} * @api public */ @@ -1401,8 +1664,8 @@ Db.prototype.stats = function stats(options, callback) { // Build command object var commandObject = { - dbStats:this.collectionName, - } + dbStats:true + }; // Check if we have the scale value if(options['scale'] != null) commandObject['scale'] = options['scale']; @@ -1411,56 +1674,56 @@ Db.prototype.stats = function stats(options, callback) { this.command(commandObject, options, callback); } +/** + * @ignore + */ +var bindToCurrentDomain = function(callback) { + var domain = process.domain; + if(domain == null || callback == null) { + return callback; + } else { + return domain.bind(callback); + } +} + /** * @ignore */ var __executeQueryCommand = function(self, db_command, options, callback) { // Options unpacking - var read = options['read'] != null ? options['read'] : false; - var raw = options['raw'] != null ? options['raw'] : self.raw; + var readPreference = options.readPreference != null ? options.readPreference : 'primary'; var onAll = options['onAll'] != null ? options['onAll'] : false; var specifiedConnection = options['connection'] != null ? options['connection'] : null; - - // Correct read preference to default primary if set to false, null or primary - if(!(typeof read == 'object') && read._type == 'ReadPreference') { - read = (read == null || read == 'primary' || read == false) ? ReadPreference.PRIMARY : read; - if(!ReadPreference.isValid(read)) return callback(new Error("Illegal readPreference mode specified, " + read)); - } else if(typeof read == 'object' && read._type == 'ReadPreference') { - if(!read.isValid()) return callback(new Error("Illegal readPreference mode specified, " + read.mode)); + var raw = typeof options.raw == 'boolean' ? options.raw : false; + + // Correct readPreference preference to default primary if set to false, null or primary + if(!(typeof readPreference == 'object') && readPreference._type == 'ReadPreference') { + readPreference = (readPreference == null || readPreference == 'primary' || readPreference == false) ? ReadPreference.PRIMARY : readPreference; + if(!ReadPreference.isValid(readPreference)) return callback(new Error("Illegal readPreference mode specified, " + JSON.stringify(readPreference))); + } else if(typeof readPreference == 'object' && readPreference._type == 'ReadPreference') { + if(!readPreference.isValid()) return callback(new Error("Illegal readPreference mode specified, " + JSON.stringify(readPreference))); } // If we have a read preference set and we are a mongos pass the read preference on to the mongos instance, - if(self.serverConfig.isMongos() && read != null && read != false) { - db_command.setMongosReadPreference(read); + if(self.serverConfig.isMongos() && readPreference != null && readPreference != 'primary') { + db_command.setMongosReadPreference(readPreference); } // If we got a callback object if(typeof callback === 'function' && !onAll) { + callback = bindToCurrentDomain(callback); // Override connection if we passed in a specific connection var connection = specifiedConnection != null ? specifiedConnection : null; if(connection instanceof Error) return callback(connection, null); - // Fetch either a reader or writer dependent on the specified read option if no connection + // Fetch either a reader or writer dependent on the specified readPreference option if no connection // was passed in if(connection == null) { - // connection = read == null || read == 'primary' || read == false ? self.serverConfig.checkoutWriter(true) : self.serverConfig.checkoutReader(read); - connection = self.serverConfig.checkoutReader(read); + connection = self.serverConfig.checkoutReader(readPreference); } - // Ensure we have a valid connection - /*if(connection == null && self.serverConfig.isAutoReconnect()) { - return self.serverConfig._commandsStore.read_from_writer( - { type: 'query' - , db_command: db_command - , options: options - , callback: callback - , db: self - , executeQueryCommand: __executeQueryCommand - , executeInsertCommand: __executeInsertCommand - } - ); - } else */if(connection == null) { + if(connection == null) { return callback(new Error("no open connections")); } else if(connection instanceof Error || connection['message'] != null) { return callback(connection); @@ -1468,41 +1731,9 @@ var __executeQueryCommand = function(self, db_command, options, callback) { // Exhaust Option var exhaust = options.exhaust || false; - + // Register the handler in the data structure self.serverConfig._registerHandler(db_command, raw, connection, exhaust, callback); - - // Ensure the connection is valid - if(!connection.isConnected()) { - if(read == ReadPreference.PRIMARY - || read == ReadPreference.PRIMARY_PREFERRED - || (read != null && typeof read == 'object' && read.mode) - || read == null) { - - // Save the command - self.serverConfig._commandsStore.read_from_writer( - { type: 'query' - , db_command: db_command - , options: options - , callback: callback - , db: self - , executeQueryCommand: __executeQueryCommand - , executeInsertCommand: __executeInsertCommand - } - ); - } else { - self.serverConfig._commandsStore.read( - { type: 'query' - , db_command: db_command - , options: options - , callback: callback - , db: self - , executeQueryCommand: __executeQueryCommand - , executeInsertCommand: __executeInsertCommand - } - ); - } - } // Write the message out and handle any errors if there are any connection.write(db_command, function(err) { @@ -1515,6 +1746,7 @@ var __executeQueryCommand = function(self, db_command, options, callback) { } }); } else if(typeof callback === 'function' && onAll) { + callback = bindToCurrentDomain(callback); var connections = self.serverConfig.allRawConnections(); var numberOfEntries = connections.length; // Go through all the connections @@ -1553,8 +1785,7 @@ var __executeQueryCommand = function(self, db_command, options, callback) { } } else { // Fetch either a reader or writer dependent on the specified read option - // var connection = read == null || read == 'primary' || read == false ? self.serverConfig.checkoutWriter(true) : self.serverConfig.checkoutReader(read); - var connection = self.serverConfig.checkoutReader(read); + var connection = self.serverConfig.checkoutReader(readPreference); // Override connection if needed connection = specifiedConnection != null ? specifiedConnection : connection; // Ensure we have a valid connection @@ -1567,7 +1798,7 @@ var __executeQueryCommand = function(self, db_command, options, callback) { } }); } -} +}; /** * Execute db query command (not safe) @@ -1578,10 +1809,11 @@ Db.prototype._executeQueryCommand = function(db_command, options, callback) { var self = this; // Unpack the parameters - if (typeof callback === 'undefined') { + if(typeof options === 'function') { callback = options; options = {}; } + callback = bindToCurrentDomain(callback); // fast fail option used for HA, no retry var failFast = options['failFast'] != null @@ -1598,18 +1830,30 @@ Db.prototype._executeQueryCommand = function(db_command, options, callback) { } } - if(this.serverConfig.isDestroyed()) return callback(new Error("Connection was destroyed by application")); + if(this.serverConfig.isDestroyed()) + return callback(new Error("Connection was destroyed by application")); + + // Specific connection + var connection = options.connection; + // Check if the connection is actually live + if(connection + && (!connection.isConnected || !connection.isConnected())) connection = null; // Get the configuration var config = this.serverConfig; - var read = options.read; - - if(!config.canRead(read) && !config.canWrite() && config.isAutoReconnect()) { - if(read == ReadPreference.PRIMARY - || read == ReadPreference.PRIMARY_PREFERRED - || (read != null && typeof read == 'object' && read.mode) - || read == null) { - + var readPreference = options.readPreference; + // Allow for the usage of the readPreference model + if(readPreference == null) { + readPreference = options.readPreference; + } + + if(!connection && !config.canRead(readPreference) && !config.canWrite() && config.isAutoReconnect()) { + + if(readPreference == ReadPreference.PRIMARY + || readPreference == ReadPreference.PRIMARY_PREFERRED + || (readPreference != null && typeof readPreference == 'object' && readPreference.mode) + || readPreference == null) { + // Save the command self.serverConfig._commandsStore.read_from_writer( { type: 'query' @@ -1626,20 +1870,28 @@ Db.prototype._executeQueryCommand = function(db_command, options, callback) { { type: 'query' , db_command: db_command , options: options - , callback: callback + , callback: callback , db: self , executeQueryCommand: __executeQueryCommand , executeInsertCommand: __executeInsertCommand } ); } - } else if(!config.canRead(read) && !config.canWrite() && !config.isAutoReconnect()) { + + // If we have blown through the number of items let's + if(!self.serverConfig._commandsStore.validateBufferLimit(self.bufferMaxEntries)) { + self.close(); + } + } else if(!connection && !config.canRead(readPreference) && !config.canWrite() && !config.isAutoReconnect()) { return callback(new Error("no open connections"), null); } else { - // Execute the command - __executeQueryCommand(self, db_command, options, function (err, result, conn) { - if(callback) callback(err, result, conn); - }); + if(typeof callback == 'function') { + __executeQueryCommand(self, db_command, options, function (err, result, conn) { + callback(err, result, conn); + }); + } else { + __executeQueryCommand(self, db_command, options); + } } }; @@ -1651,37 +1903,31 @@ var __executeInsertCommand = function(self, db_command, options, callback) { var connection = self.serverConfig.checkoutWriter(); // Get safe mode var safe = options['safe'] != null ? options['safe'] : false; - var raw = options['raw'] != null ? options['raw'] : self.raw; var specifiedConnection = options['connection'] != null ? options['connection'] : null; // Override connection if needed connection = specifiedConnection != null ? specifiedConnection : connection; + // Validate if we can use this server 2.6 wire protocol + if(connection && !connection.isCompatible()) { + return callback(utils.toError("driver is incompatible with this server version"), null); + } + // Ensure we have a valid connection if(typeof callback === 'function') { + callback = bindToCurrentDomain(callback); // Ensure we have a valid connection - /*if(connection == null && self.serverConfig.isAutoReconnect()) { - return self.serverConfig._commandsStore.write( - { type:'insert' - , 'db_command':db_command - , 'options':options - , 'callback':callback - , db: self - , executeQueryCommand: __executeQueryCommand - , executeInsertCommand: __executeInsertCommand - } - ); - } else*/ if(connection == null) { + if(connection == null) { return callback(new Error("no open connections")); } else if(connection instanceof Error) { return callback(connection); } - var errorOptions = _getWriteConcern(self, options, callback); - if(errorOptions.w > 0 || errorOptions.w == 'majority' || errorOptions.j || errorOptions.journal || errorOptions.fsync) { + var errorOptions = _getWriteConcern(self, options); + if(errorOptions.w > 0 || errorOptions.w == 'majority' || errorOptions.j || errorOptions.journal || errorOptions.fsync) { // db command is now an array of commands (original command + lastError) - db_command = [db_command, DbCommand.createGetLastErrorCommand(safe, self)]; + db_command = [db_command, DbCommand.createGetLastErrorCommand(errorOptions, self)]; // Register the handler in the data structure - self.serverConfig._registerHandler(db_command[1], raw, connection, callback); + self.serverConfig._registerHandler(db_command[1], false, connection, callback); } } @@ -1691,20 +1937,6 @@ var __executeInsertCommand = function(self, db_command, options, callback) { if(connection instanceof Error) return null; if(connection == null && typeof callback == 'function') return callback(new Error("no primary server found"), null); - // Ensure we truly are connected - if(!connection.isConnected()) { - return self.serverConfig._commandsStore.write( - { type:'insert' - , 'db_command':db_command - , 'options':options - , 'callback':callback - , db: self - , executeQueryCommand: __executeQueryCommand - , executeInsertCommand: __executeInsertCommand - } - ); - } - // Write the message out connection.write(db_command, function(err) { // Return the callback if it's not a safe operation and the callback is defined @@ -1721,7 +1953,7 @@ var __executeInsertCommand = function(self, db_command, options, callback) { self.emit("error", err); } }); -} +}; /** * Execute an insert Command @@ -1736,7 +1968,7 @@ Db.prototype._executeInsertCommand = function(db_command, options, callback) { callback = options; options = {}; } - + callback = bindToCurrentDomain(callback); // Ensure options are not null options = options == null ? {} : options; @@ -1751,10 +1983,16 @@ Db.prototype._executeInsertCommand = function(db_command, options, callback) { if(this.serverConfig.isDestroyed()) return callback(new Error("Connection was destroyed by application")); + // Specific connection + var connection = options.connection; + // Check if the connection is actually live + if(connection + && (!connection.isConnected || !connection.isConnected())) connection = null; + // Get config var config = self.serverConfig; // Check if we are connected - if(!config.canWrite() && config.isAutoReconnect()) { + if(!connection && !config.canWrite() && config.isAutoReconnect()) { self.serverConfig._commandsStore.write( { type:'insert' , 'db_command':db_command @@ -1765,13 +2003,17 @@ Db.prototype._executeInsertCommand = function(db_command, options, callback) { , executeInsertCommand: __executeInsertCommand } ); - } else if(!config.canWrite() && !config.isAutoReconnect()) { + + // If we have blown through the number of items let's + if(!self.serverConfig._commandsStore.validateBufferLimit(self.bufferMaxEntries)) { + self.close(); + } + } else if(!connection && !config.canWrite() && !config.isAutoReconnect()) { return callback(new Error("no open connections"), null); } else { - // Execute write command __executeInsertCommand(self, db_command, options, callback); } -} +}; /** * Update command is the same @@ -1817,7 +2059,7 @@ Db.DEFAULT_URL = 'mongodb://localhost:27017/default'; * * @param {String} url connection url for MongoDB. * @param {Object} [options] optional options for insert command - * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the db instance or null if an error occured. + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occurred, or null otherwise. While the second parameter will contain the db instance or null if an error occurred. * @return {null} * @api public */ @@ -1829,16 +2071,16 @@ Db.connect = function(url, options, callback) { } // Ensure same behavior as previous version w:0 - if(url.indexOf("safe") == -1 - && url.indexOf("w") == -1 + if(url.indexOf("safe") == -1 + && url.indexOf("w") == -1 && url.indexOf("journal") == -1 && url.indexOf("j") == -1 - && url.indexOf("fsync") == -1) options.w = 0; + && url.indexOf("fsync") == -1) options.w = 1; // Avoid circular require problem var MongoClient = require('./mongo_client.js').MongoClient; // Attempt to connect MongoClient.connect.call(MongoClient, url, options, callback); -} +}; /** * State of the db connection @@ -1860,25 +2102,25 @@ var _hasWriteConcern = function(errorOptions) { || errorOptions.j == true || errorOptions.journal == true || errorOptions.fsync == true -} +}; /** * @ignore */ var _setWriteConcernHash = function(options) { var finalOptions = {}; - if(options.w != null) finalOptions.w = options.w; + if(options.w != null) finalOptions.w = options.w; if(options.journal == true) finalOptions.j = options.journal; if(options.j == true) finalOptions.j = options.j; if(options.fsync == true) finalOptions.fsync = options.fsync; - if(options.wtimeout != null) finalOptions.wtimeout = options.wtimeout; + if(options.wtimeout != null) finalOptions.wtimeout = options.wtimeout; return finalOptions; -} +}; /** * @ignore */ -var _getWriteConcern = function(self, options, callback) { +var _getWriteConcern = function(self, options) { // Final options var finalOptions = {w:1}; // Local options verification @@ -1897,8 +2139,8 @@ var _getWriteConcern = function(self, options, callback) { } // Ensure we don't have an invalid combination of write concerns - if(finalOptions.w < 1 - && (finalOptions.journal == true || finalOptions.j == true || finalOptions.fsync == true)) throw new Error("No acknowlegement using w < 1 cannot be combined with journal:true or fsync:true"); + if(finalOptions.w < 1 + && (finalOptions.journal == true || finalOptions.j == true || finalOptions.fsync == true)) throw new Error("No acknowledgement using w < 1 cannot be combined with journal:true or fsync:true"); // Return the options return finalOptions; @@ -1925,4 +2167,4 @@ Db.prototype.removeAllEventListeners = function() { this.removeAllListeners("parseError"); this.removeAllListeners("poolReady"); this.removeAllListeners("message"); -} +}; diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/chunk.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/chunk.js index 572d144..8cddafe 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/chunk.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/chunk.js @@ -16,13 +16,13 @@ var Binary = require('bson').Binary, * * @see Chunk#buildMongoObject */ -var Chunk = exports.Chunk = function(file, mongoObject) { +var Chunk = exports.Chunk = function(file, mongoObject, writeConcern) { if(!(this instanceof Chunk)) return new Chunk(file, mongoObject); this.file = file; var self = this; var mongoObjectFinal = mongoObject == null ? {} : mongoObject; - + this.writeConcern = writeConcern || {w:1}; this.objectId = mongoObjectFinal._id == null ? new ObjectID() : mongoObjectFinal._id; this.chunkNumber = mongoObjectFinal.n == null ? 0 : mongoObjectFinal.n; this.data = new Binary(); @@ -36,12 +36,13 @@ var Chunk = exports.Chunk = function(file, mongoObject) { var buffer = new Buffer(mongoObjectFinal.data.length); buffer.write(mongoObjectFinal.data.join(''), 'binary', 0); this.data = new Binary(buffer); - } else if(mongoObjectFinal.data instanceof Binary || Object.prototype.toString.call(mongoObjectFinal.data) == "[object Binary]") { + } else if(mongoObjectFinal.data instanceof Binary || mongoObjectFinal.data._bsontype === 'Binary' || Object.prototype.toString.call(mongoObjectFinal.data) == "[object Binary]") { this.data = mongoObjectFinal.data; } else if(Buffer.isBuffer(mongoObjectFinal.data)) { } else { throw Error("Illegal chunk format"); } + // Update position this.internalPosition = 0; }; @@ -136,18 +137,33 @@ Chunk.prototype.rewind = function() { * this method. The first parameter will contain null and the second one * will contain a reference to this object. */ -Chunk.prototype.save = function(callback) { +Chunk.prototype.save = function(options, callback) { var self = this; + if(typeof options == 'function') { + callback = options; + options = {}; + } self.file.chunkCollection(function(err, collection) { if(err) return callback(err); - collection.remove({'_id':self.objectId}, {safe:true}, function(err, result) { + // Merge the options + var writeOptions = {}; + for(var name in options) writeOptions[name] = options[name]; + for(var name in self.writeConcern) writeOptions[name] = self.writeConcern[name]; + + // collection.remove({'_id':self.objectId}, self.writeConcern, function(err, result) { + collection.remove({'_id':self.objectId}, writeOptions, function(err, result) { if(err) return callback(err); if(self.data.length() > 0) { self.buildMongoObject(function(mongoObject) { - collection.insert(mongoObject, {safe:true}, function(err, collection) { + var options = {forceServerObjectId:true}; + for(var name in self.writeConcern) { + options[name] = self.writeConcern[name]; + } + + collection.insert(mongoObject, writeOptions, function(err, collection) { callback(err, self); }); }); @@ -177,10 +193,13 @@ Chunk.prototype.save = function(callback) { * @see MongoDB GridFS Chunk Object Structure */ Chunk.prototype.buildMongoObject = function(callback) { - var mongoObject = {'_id': this.objectId, + var mongoObject = { 'files_id': this.file.fileId, 'n': this.chunkNumber, 'data': this.data}; + // If we are saving using a specific ObjectId + if(this.objectId != null) mongoObject._id = this.objectId; + callback(mongoObject); }; @@ -210,4 +229,4 @@ Object.defineProperty(Chunk.prototype, "position", { enumerable: true * The default chunk size * @constant */ -Chunk.DEFAULT_CHUNK_SIZE = 1024 * 256; +Chunk.DEFAULT_CHUNK_SIZE = 1024 * 255; diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js index 0699e32..bf306e6 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/gridstore.js @@ -18,8 +18,7 @@ var Chunk = require('./chunk').Chunk, Stream = require('stream'); // Set processor, setImmediate if 0.10 otherwise nextTick -var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; -processor = process.nextTick +var processor = require('../utils').processor(); var REFERENCE_BY_FILENAME = 0, REFERENCE_BY_ID = 1; @@ -30,13 +29,18 @@ var REFERENCE_BY_FILENAME = 0, * Modes * - **"r"** - read only. This is the default mode. * - **"w"** - write in truncate mode. Existing data will be overwriten. - * - **w+"** - write in edit mode. + * - **w+"** - write in edit mode (append is not guaranteed for concurrent operations) * * Options * - **root** {String}, root collection to use. Defaults to **{GridStore.DEFAULT_ROOT_COLLECTION}**. * - **content_type** {String}, mime type of the file. Defaults to **{GridStore.DEFAULT_CONTENT_TYPE}**. * - **chunk_size** {Number}, size for the chunk. Defaults to **{Chunk.DEFAULT_CHUNK_SIZE}**. * - **metadata** {Object}, arbitrary data the user wants to store. + * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write + * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * * @class Represents the GridStore. * @param {Db} db A database instance to interact with. @@ -55,9 +59,6 @@ var GridStore = function GridStore(db, id, filename, mode, options) { // Call stream constructor if(typeof Stream == 'function') { Stream.call(this); - } else { - // 0.4.X backward compatibility fix - Stream.Stream.call(this); } // Handle options @@ -90,9 +91,14 @@ var GridStore = function GridStore(db, id, filename, mode, options) { // Set up the rest this.mode = mode == null ? "r" : mode; - this.options = options == null ? {} : options; + this.options = options || {}; + + // Set the root if overridden this.root = this.options['root'] == null ? exports.GridStore.DEFAULT_ROOT_COLLECTION : this.options['root']; this.position = 0; + this.readPreference = this.options.readPreference || 'primary'; + this.writeConcern = _getWriteConcern(db, this.options); + // Set default chunk size this.internalChunkSize = this.options['chunkSize'] == null ? Chunk.DEFAULT_CHUNK_SIZE : this.options['chunkSize']; } @@ -129,30 +135,28 @@ GridStore.prototype.open = function(callback) { var self = this; - if((self.mode == "w" || self.mode == "w+") && self.db.serverConfig.primary != null) { - // Get files collection - self.collection(function(err, collection) { - if(err) return callback(err); - - // Put index on filename - collection.ensureIndex([['filename', 1]], function(err, index) { - if(err) return callback(err); - - // Get chunk collection - self.chunkCollection(function(err, chunkCollection) { - if(err) return callback(err); + // Get the write concern + var writeConcern = _getWriteConcern(this.db, this.options); - // Ensure index on chunk collection - chunkCollection.ensureIndex([['files_id', 1], ['n', 1]], function(err, index) { - if(err) return callback(err); - _open(self, callback); - }); - }); + // If we are writing we need to ensure we have the right indexes for md5's + if((self.mode == "w" || self.mode == "w+")) { + // Get files collection + var collection = self.collection(); + // Put index on filename + collection.ensureIndex([['filename', 1]], writeConcern, function(err, index) { + // if(err) return callback(err); + + // Get chunk collection + var chunkCollection = self.chunkCollection(); + // Ensure index on chunk collection + chunkCollection.ensureIndex([['files_id', 1], ['n', 1]], writeConcern, function(err, index) { + // if(err) return callback(err); + _open(self, writeConcern, callback); }); }); } else { // Open the gridstore - _open(self, callback); + _open(self, writeConcern, callback); } }; @@ -161,116 +165,113 @@ GridStore.prototype.open = function(callback) { * @ignore * @api private */ -var _open = function(self, callback) { - self.collection(function(err, collection) { - if(err!==null) { - callback(new Error("at collection: "+err), null); - return; - } - - // Create the query - var query = self.referenceBy == REFERENCE_BY_ID ? {_id:self.fileId} : {filename:self.filename}; - query = null == self.fileId && this.filename == null ? null : query; - - // Fetch the chunks - if(query != null) { - collection.find(query, function(err, cursor) { +var _open = function(self, options, callback) { + var collection = self.collection(); + // Create the query + var query = self.referenceBy == REFERENCE_BY_ID ? {_id:self.fileId} : {filename:self.filename}; + query = null == self.fileId && self.filename == null ? null : query; + options.readPreference = self.readPreference; + + // Fetch the chunks + if(query != null) { + collection.find(query, options, function(err, cursor) { + if(err) return error(err); + + // Fetch the file + cursor.nextObject(function(err, doc) { if(err) return error(err); - // Fetch the file - cursor.nextObject(function(err, doc) { - if(err) return error(err); - - // Check if the collection for the files exists otherwise prepare the new one - if(doc != null) { - self.fileId = doc._id; - self.filename = doc.filename; - self.contentType = doc.contentType; - self.internalChunkSize = doc.chunkSize; - self.uploadDate = doc.uploadDate; - self.aliases = doc.aliases; - self.length = doc.length; - self.metadata = doc.metadata; - self.internalMd5 = doc.md5; - } else if (self.mode != 'r') { - self.fileId = self.fileId == null ? new ObjectID() : self.fileId; - self.contentType = exports.GridStore.DEFAULT_CONTENT_TYPE; - self.internalChunkSize = self.internalChunkSize == null ? Chunk.DEFAULT_CHUNK_SIZE : self.internalChunkSize; - self.length = 0; - } else { - self.length = 0; - var txtId = self.fileId instanceof ObjectID ? self.fileId.toHexString() : self.fileId; - return error(new Error((self.referenceBy == REFERENCE_BY_ID ? txtId : self.filename) + " does not exist", self)); - } - - // Process the mode of the object - if(self.mode == "r") { - nthChunk(self, 0, function(err, chunk) { - if(err) return error(err); - self.currentChunk = chunk; - self.position = 0; - callback(null, self); - }); - } else if(self.mode == "w") { - // Delete any existing chunks - deleteChunks(self, function(err, result) { - if(err) return error(err); - self.currentChunk = new Chunk(self, {'n':0}); - self.contentType = self.options['content_type'] == null ? self.contentType : self.options['content_type']; - self.internalChunkSize = self.options['chunk_size'] == null ? self.internalChunkSize : self.options['chunk_size']; - self.metadata = self.options['metadata'] == null ? self.metadata : self.options['metadata']; - self.position = 0; - callback(null, self); - }); - } else if(self.mode == "w+") { - nthChunk(self, lastChunkNumber(self), function(err, chunk) { - if(err) return error(err); - // Set the current chunk - self.currentChunk = chunk == null ? new Chunk(self, {'n':0}) : chunk; - self.currentChunk.position = self.currentChunk.data.length(); - self.metadata = self.options['metadata'] == null ? self.metadata : self.options['metadata']; - self.position = self.length; - callback(null, self); - }); - } - }); - }); - } else { - // Write only mode - self.fileId = null == self.fileId ? new ObjectID() : self.fileId; - self.contentType = exports.GridStore.DEFAULT_CONTENT_TYPE; - self.internalChunkSize = self.internalChunkSize == null ? Chunk.DEFAULT_CHUNK_SIZE : self.internalChunkSize; - self.length = 0; - - self.chunkCollection(function(err, collection2) { - if(err) return error(err); + // Check if the collection for the files exists otherwise prepare the new one + if(doc != null) { + self.fileId = doc._id; + // Prefer a new filename over the existing one if this is a write + self.filename = ((self.mode == 'r') || (self.filename == undefined)) ? doc.filename : self.filename; + self.contentType = doc.contentType; + self.internalChunkSize = doc.chunkSize; + self.uploadDate = doc.uploadDate; + self.aliases = doc.aliases; + self.length = doc.length; + self.metadata = doc.metadata; + self.internalMd5 = doc.md5; + } else if (self.mode != 'r') { + self.fileId = self.fileId == null ? new ObjectID() : self.fileId; + self.contentType = exports.GridStore.DEFAULT_CONTENT_TYPE; + self.internalChunkSize = self.internalChunkSize == null ? Chunk.DEFAULT_CHUNK_SIZE : self.internalChunkSize; + self.length = 0; + } else { + self.length = 0; + var txtId = self.fileId instanceof ObjectID ? self.fileId.toHexString() : self.fileId; + return error(new Error((self.referenceBy == REFERENCE_BY_ID ? txtId : self.filename) + " does not exist", self)); + } - // No file exists set up write mode - if(self.mode == "w") { + // Process the mode of the object + if(self.mode == "r") { + nthChunk(self, 0, options, function(err, chunk) { + if(err) return error(err); + self.currentChunk = chunk; + self.position = 0; + callback(null, self); + }); + } else if(self.mode == "w") { // Delete any existing chunks - deleteChunks(self, function(err, result) { + deleteChunks(self, options, function(err, result) { if(err) return error(err); - self.currentChunk = new Chunk(self, {'n':0}); + self.currentChunk = new Chunk(self, {'n':0}, self.writeConcern); self.contentType = self.options['content_type'] == null ? self.contentType : self.options['content_type']; self.internalChunkSize = self.options['chunk_size'] == null ? self.internalChunkSize : self.options['chunk_size']; self.metadata = self.options['metadata'] == null ? self.metadata : self.options['metadata']; + self.aliases = self.options['aliases'] == null ? self.aliases : self.options['aliases']; self.position = 0; callback(null, self); }); } else if(self.mode == "w+") { - nthChunk(self, lastChunkNumber(self), function(err, chunk) { + nthChunk(self, lastChunkNumber(self), options, function(err, chunk) { if(err) return error(err); // Set the current chunk - self.currentChunk = chunk == null ? new Chunk(self, {'n':0}) : chunk; + self.currentChunk = chunk == null ? new Chunk(self, {'n':0}, self.writeConcern) : chunk; self.currentChunk.position = self.currentChunk.data.length(); self.metadata = self.options['metadata'] == null ? self.metadata : self.options['metadata']; + self.aliases = self.options['aliases'] == null ? self.aliases : self.options['aliases']; self.position = self.length; callback(null, self); }); } }); + }); + } else { + // Write only mode + self.fileId = null == self.fileId ? new ObjectID() : self.fileId; + self.contentType = exports.GridStore.DEFAULT_CONTENT_TYPE; + self.internalChunkSize = self.internalChunkSize == null ? Chunk.DEFAULT_CHUNK_SIZE : self.internalChunkSize; + self.length = 0; + + var collection2 = self.chunkCollection(); + // No file exists set up write mode + if(self.mode == "w") { + // Delete any existing chunks + deleteChunks(self, options, function(err, result) { + if(err) return error(err); + self.currentChunk = new Chunk(self, {'n':0}, self.writeConcern); + self.contentType = self.options['content_type'] == null ? self.contentType : self.options['content_type']; + self.internalChunkSize = self.options['chunk_size'] == null ? self.internalChunkSize : self.options['chunk_size']; + self.metadata = self.options['metadata'] == null ? self.metadata : self.options['metadata']; + self.aliases = self.options['aliases'] == null ? self.aliases : self.options['aliases']; + self.position = 0; + callback(null, self); + }); + } else if(self.mode == "w+") { + nthChunk(self, lastChunkNumber(self), options, function(err, chunk) { + if(err) return error(err); + // Set the current chunk + self.currentChunk = chunk == null ? new Chunk(self, {'n':0}, self.writeConcern) : chunk; + self.currentChunk.position = self.currentChunk.data.length(); + self.metadata = self.options['metadata'] == null ? self.metadata : self.options['metadata']; + self.aliases = self.options['aliases'] == null ? self.aliases : self.options['aliases']; + self.position = self.length; + callback(null, self); + }); } - }); + } // only pass error to callback once function error (err) { @@ -290,7 +291,7 @@ var _open = function(self, callback) { GridStore.prototype.writeFile = function (file, callback) { var self = this; if (typeof file === 'string') { - fs.open(file, 'r', 0666, function (err, fd) { + fs.open(file, 'r', function (err, fd) { if(err) return callback(err); self.writeFile(fd, callback); }); @@ -315,11 +316,11 @@ GridStore.prototype.writeFile = function (file, callback) { offset = offset + bytesRead; // Create a new chunk for the data - var chunk = new Chunk(self, {n:index++}); + var chunk = new Chunk(self, {n:index++}, self.writeConcern); chunk.write(data, function(err, chunk) { if(err) return callback(err, self); - chunk.save(function(err, result) { + chunk.save({}, function(err, result) { if(err) return callback(err, self); self.position = self.position + data.length; @@ -363,7 +364,7 @@ GridStore.prototype.writeFile = function (file, callback) { */ var writeBuffer = function(self, buffer, close, callback) { if(typeof close === "function") { callback = close; close = null; } - var finalClose = (close == null) ? false : close; + var finalClose = typeof close == 'boolean' ? close : false; if(self.mode[0] != "w") { callback(new Error((self.referenceBy == REFERENCE_BY_ID ? self.toHexString() : self.filename) + " not opened for writing"), null); @@ -380,7 +381,7 @@ var writeBuffer = function(self, buffer, close, callback) { // If we have more data left than the chunk size let's keep writing new chunks while(leftOverData.length >= self.chunkSize) { // Create a new chunk and write to it - var newChunk = new Chunk(self, {'n': (previousChunkNumber + 1)}); + var newChunk = new Chunk(self, {'n': (previousChunkNumber + 1)}, self.writeConcern); var firstChunkData = leftOverData.slice(0, self.chunkSize); leftOverData = leftOverData.slice(self.chunkSize); // Update chunk number @@ -392,7 +393,7 @@ var writeBuffer = function(self, buffer, close, callback) { } // Set current chunk with remaining data - self.currentChunk = new Chunk(self, {'n': (previousChunkNumber + 1)}); + self.currentChunk = new Chunk(self, {'n': (previousChunkNumber + 1)}, self.writeConcern); // If we have left over data write it if(leftOverData.length > 0) self.currentChunk.write(leftOverData); @@ -400,25 +401,39 @@ var writeBuffer = function(self, buffer, close, callback) { self.position = self.position + buffer.length; // Total number of chunks to write var numberOfChunksToWrite = chunksToWrite.length; - // Write out all the chunks and then return + for(var i = 0; i < chunksToWrite.length; i++) { - var chunk = chunksToWrite[i]; - chunk.save(function(err, result) { + chunksToWrite[i].save({}, function(err, result) { if(err) return callback(err); numberOfChunksToWrite = numberOfChunksToWrite - 1; if(numberOfChunksToWrite <= 0) { + // We care closing the file before returning + if(finalClose) { + return self.close(function(err, result) { + callback(err, self); + }); + } + + // Return normally return callback(null, self); } - }) + }); } } else { // Update the position for the gridstore self.position = self.position + buffer.length; // We have less data than the chunk size just write it and callback self.currentChunk.write(buffer); - callback(null, self); + // We care closing the file before returning + if(finalClose) { + return self.close(function(err, result) { + callback(err, self); + }); + } + // Return normally + return callback(null, self); } } }; @@ -447,19 +462,7 @@ var writeBuffer = function(self, buffer, close, callback) { * @api private */ var buildMongoObject = function(self, callback) { - // // Keeps the final chunk number - // var chunkNumber = 0; - // var previousChunkSize = 0; - // // Get the correct chunk Number, if we have an empty chunk return the previous chunk number - // if(null != self.currentChunk && self.currentChunk.chunkNumber > 0 && self.currentChunk.position == 0) { - // chunkNumber = self.currentChunk.chunkNumber - 1; - // } else { - // chunkNumber = self.currentChunk.chunkNumber; - // previousChunkSize = self.currentChunk.position; - // } - - // // Calcuate the length - // var length = self.currentChunk != null ? (chunkNumber * self.chunkSize + previousChunkSize) : 0; + // Calcuate the length var mongoObject = { '_id': self.fileId, 'filename': self.filename, @@ -473,8 +476,10 @@ var buildMongoObject = function(self, callback) { var md5Command = {filemd5:self.fileId, root:self.root}; self.db.command(md5Command, function(err, results) { + if(err) return callback(err); + mongoObject.md5 = results.md5; - callback(mongoObject); + callback(null, mongoObject); }); }; @@ -491,8 +496,11 @@ GridStore.prototype.close = function(callback) { var self = this; if(self.mode[0] == "w") { + // Set up options + var options = self.writeConcern; + if(self.currentChunk != null && self.currentChunk.position > 0) { - self.currentChunk.save(function(err, chunk) { + self.currentChunk.save({}, function(err, chunk) { if(err && typeof callback == 'function') return callback(err); self.collection(function(err, files) { @@ -500,11 +508,15 @@ GridStore.prototype.close = function(callback) { // Build the mongo object if(self.uploadDate != null) { - files.remove({'_id':self.fileId}, {safe:true}, function(err, collection) { + files.remove({'_id':self.fileId}, self.writeConcern, function(err, collection) { if(err && typeof callback == 'function') return callback(err); - buildMongoObject(self, function(mongoObject) { - files.save(mongoObject, {safe:true}, function(err) { + buildMongoObject(self, function(err, mongoObject) { + if(err) { + if(typeof callback == 'function') return callback(err); else throw err; + } + + files.save(mongoObject, options, function(err) { if(typeof callback == 'function') callback(err, mongoObject); }); @@ -512,8 +524,12 @@ GridStore.prototype.close = function(callback) { }); } else { self.uploadDate = new Date(); - buildMongoObject(self, function(mongoObject) { - files.save(mongoObject, {safe:true}, function(err) { + buildMongoObject(self, function(err, mongoObject) { + if(err) { + if(typeof callback == 'function') return callback(err); else throw err; + } + + files.save(mongoObject, options, function(err) { if(typeof callback == 'function') callback(err, mongoObject); }); @@ -526,8 +542,12 @@ GridStore.prototype.close = function(callback) { if(err && typeof callback == 'function') return callback(err); self.uploadDate = new Date(); - buildMongoObject(self, function(mongoObject) { - files.save(mongoObject, {safe:true}, function(err) { + buildMongoObject(self, function(err, mongoObject) { + if(err) { + if(typeof callback == 'function') return callback(err); else throw err; + } + + files.save(mongoObject, options, function(err) { if(typeof callback == 'function') callback(err, mongoObject); }); @@ -555,19 +575,23 @@ GridStore.prototype.close = function(callback) { * @ignore * @api private */ -var nthChunk = function(self, chunkNumber, callback) { - self.chunkCollection(function(err, collection) { +var nthChunk = function(self, chunkNumber, options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } + + options = options || self.writeConcern; + options.readPreference = self.readPreference; + // Get the nth chunk + self.chunkCollection().find({'files_id':self.fileId, 'n':chunkNumber}, options, function(err, cursor) { if(err) return callback(err); - collection.find({'files_id':self.fileId, 'n':chunkNumber}, function(err, cursor) { + cursor.nextObject(function(err, chunk) { if(err) return callback(err); - cursor.nextObject(function(err, chunk) { - if(err) return callback(err); - - var finalChunk = chunk == null ? {} : chunk; - callback(null, new Chunk(self, finalChunk)); - }); + var finalChunk = chunk == null ? {} : chunk; + callback(null, new Chunk(self, finalChunk, self.writeConcern)); }); }); }; @@ -588,7 +612,7 @@ GridStore.prototype._nthChunk = function(chunkNumber, callback) { * @api private */ var lastChunkNumber = function(self) { - return Math.floor(self.length/self.chunkSize); + return Math.floor((self.length ? self.length - 1 : 0)/self.chunkSize); }; /** @@ -599,7 +623,9 @@ var lastChunkNumber = function(self) { * @api public */ GridStore.prototype.chunkCollection = function(callback) { - this.db.collection((this.root + ".chunks"), callback); + if(typeof callback == 'function') + return this.db.collection((this.root + ".chunks"), callback); + return this.db.collection((this.root + ".chunks")); }; /** @@ -611,14 +637,18 @@ GridStore.prototype.chunkCollection = function(callback) { * @ignore * @api private */ -var deleteChunks = function(self, callback) { +var deleteChunks = function(self, options, callback) { + if(typeof options == 'function') { + callback = options; + options = {}; + } + + options = options || self.writeConcern; + if(self.fileId != null) { - self.chunkCollection(function(err, collection) { + self.chunkCollection().remove({'files_id':self.fileId}, options, function(err, result) { if(err) return callback(err, false); - collection.remove({'files_id':self.fileId}, {safe:true}, function(err, result) { - if(err) return callback(err, false); - callback(null, true); - }); + callback(null, true); }); } else { callback(null, true); @@ -646,7 +676,7 @@ GridStore.prototype.unlink = function(callback) { return callback(err); } - collection.remove({'_id':self.fileId}, {safe:true}, function(err) { + collection.remove({'_id':self.fileId}, self.writeConcern, function(err) { callback(err, self); }); }); @@ -661,7 +691,9 @@ GridStore.prototype.unlink = function(callback) { * @api public */ GridStore.prototype.collection = function(callback) { - this.db.collection(this.root + ".files", callback); + if(typeof callback == 'function') + this.db.collection(this.root + ".files", callback); + return this.db.collection(this.root + ".files"); }; /** @@ -705,7 +737,7 @@ GridStore.prototype.rewind = function(callback) { if(this.mode[0] == "w") { deleteChunks(self, function(err, gridStore) { if(err) return callback(err); - self.currentChunk = new Chunk(self, {'n': 0}); + self.currentChunk = new Chunk(self, {'n': 0}, self.writeConcern); self.position = 0; callback(null, self); }); @@ -849,7 +881,7 @@ GridStore.prototype.seek = function(position, seekLocation, callback) { }; if(self.mode[0] == 'w') { - self.currentChunk.save(function(err) { + self.currentChunk.save({}, function(err) { if(err) return callback(err); seekChunk(); }); @@ -966,6 +998,9 @@ GridStore.IO_SEEK_END = 2; /** * Checks if a file exists in the database. * + * Options + * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). + * * @param {Db} db the database to query. * @param {String} name the name of the file to look for. * @param {String} [rootCollection] the root collection that holds the files and chunks collection. Defaults to **{GridStore.DEFAULT_ROOT_COLLECTION}**. @@ -973,11 +1008,14 @@ GridStore.IO_SEEK_END = 2; * @return {null} * @api public */ -GridStore.exist = function(db, fileIdObject, rootCollection, callback) { +GridStore.exist = function(db, fileIdObject, rootCollection, options, callback) { var args = Array.prototype.slice.call(arguments, 2); callback = args.pop(); rootCollection = args.length ? args.shift() : null; + options = args.length ? args.shift() : {}; + // Establish read preference + var readPreference = options.readPreference || 'primary'; // Fetch collection var rootCollectionFinal = rootCollection != null ? rootCollection : GridStore.DEFAULT_ROOT_COLLECTION; db.collection(rootCollectionFinal + ".files", function(err, collection) { @@ -988,7 +1026,7 @@ GridStore.exist = function(db, fileIdObject, rootCollection, callback) { ? {'filename':fileIdObject} : {'_id':fileIdObject}; // Attempt to locate file - collection.find(query, function(err, cursor) { + collection.find(query, {readPreference:readPreference}, function(err, cursor) { if(err) return callback(err); cursor.nextObject(function(err, item) { @@ -1020,6 +1058,8 @@ GridStore.list = function(db, rootCollection, options, callback) { rootCollection = null; } + // Establish read preference + var readPreference = options.readPreference || 'primary'; // Check if we are returning by id not filename var byId = options['id'] != null ? options['id'] : false; // Fetch item @@ -1028,7 +1068,7 @@ GridStore.list = function(db, rootCollection, options, callback) { db.collection((rootCollectionFinal + ".files"), function(err, collection) { if(err) return callback(err); - collection.find(function(err, cursor) { + collection.find({}, {readPreference:readPreference}, function(err, cursor) { if(err) return callback(err); cursor.each(function(err, item) { @@ -1124,13 +1164,17 @@ GridStore.unlink = function(db, names, options, callback) { var self = this; var args = Array.prototype.slice.call(arguments, 2); callback = args.pop(); - options = args.length ? args.shift() : null; + options = args.length ? args.shift() : {}; + // Get the write concern + var writeConcern = _getWriteConcern(db, options); + + // List of names if(names.constructor == Array) { var tc = 0; for(var i = 0; i < names.length; i++) { ++tc; - self.unlink(db, names[i], function(result) { + GridStore.unlink(db, names[i], options, function(result) { if(--tc == 0) { callback(null, self); } @@ -1143,7 +1187,7 @@ GridStore.unlink = function(db, names, options, callback) { if(err) return callback(err); gridStore.collection(function(err, collection) { if(err) return callback(err); - collection.remove({'_id':gridStore.fileId}, {safe:true}, function(err, collection) { + collection.remove({'_id':gridStore.fileId}, writeConcern, function(err, result) { callback(err, self); }); }); @@ -1264,7 +1308,6 @@ var _writeNormal = function(self, data, close, callback) { if(Buffer.isBuffer(data)) { return writeBuffer(self, data, close, callback); } else { - // Wrap the string in a buffer and write return writeBuffer(self, new Buffer(data, 'binary'), close, callback); } } @@ -1291,7 +1334,7 @@ GridStore.prototype.write = function write(data, close, callback) { } // queue data until we open. - if (!this._opened) { + if(!this._opened) { // Set up a queue to save data until gridstore object is ready this._q = []; _openStream(self); @@ -1350,7 +1393,8 @@ GridStore.prototype.pipe = function(destination, options) { self.emit('open'); // Read from the stream _read(self); - }) + }); + return destination; } /** @@ -1475,6 +1519,62 @@ var _errorRead = function _errorRead (self, err) { self.emit('error', err); } +/** + * @ignore + */ +var _hasWriteConcern = function(errorOptions) { + return errorOptions == true + || errorOptions.w > 0 + || errorOptions.w == 'majority' + || errorOptions.j == true + || errorOptions.journal == true + || errorOptions.fsync == true +} + +/** + * @ignore + */ +var _setWriteConcernHash = function(options) { + var finalOptions = {}; + if(options.w != null) finalOptions.w = options.w; + if(options.journal == true) finalOptions.j = options.journal; + if(options.j == true) finalOptions.j = options.j; + if(options.fsync == true) finalOptions.fsync = options.fsync; + if(options.wtimeout != null) finalOptions.wtimeout = options.wtimeout; + return finalOptions; +} + +/** + * @ignore + */ +var _getWriteConcern = function(self, options) { + // Final options + var finalOptions = {w:1}; + options = options || {}; + + // Local options verification + if(options.w != null || typeof options.j == 'boolean' || typeof options.journal == 'boolean' || typeof options.fsync == 'boolean') { + finalOptions = _setWriteConcernHash(options); + } else if(options.safe != null && typeof options.safe == 'object') { + finalOptions = _setWriteConcernHash(options.safe); + } else if(typeof options.safe == "boolean") { + finalOptions = {w: (options.safe ? 1 : 0)}; + } else if(self.options.w != null || typeof self.options.j == 'boolean' || typeof self.options.journal == 'boolean' || typeof self.options.fsync == 'boolean') { + finalOptions = _setWriteConcernHash(self.options); + } else if(self.safe.w != null || typeof self.safe.j == 'boolean' || typeof self.safe.journal == 'boolean' || typeof self.safe.fsync == 'boolean') { + finalOptions = _setWriteConcernHash(self.safe); + } else if(typeof self.safe == "boolean") { + finalOptions = {w: (self.safe ? 1 : 0)}; + } + + // Ensure we don't have an invalid combination of write concerns + if(finalOptions.w < 1 + && (finalOptions.journal == true || finalOptions.j == true || finalOptions.fsync == true)) throw new Error("No acknowledgement using w < 1 cannot be combined with journal:true or fsync:true"); + + // Return the options + return finalOptions; +} + /** * @ignore * @api private diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/readstream.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/readstream.js index 8ff9973..4a4f7ee 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/readstream.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/gridfs/readstream.js @@ -3,8 +3,7 @@ var Stream = require('stream').Stream, util = require('util'); // Set processor, setImmediate if 0.10 otherwise nextTick -var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; -processor = process.nextTick +var processor = require('../utils').processor(); /** * ReadStream @@ -37,7 +36,8 @@ function ReadStream(autoclose, gstore) { this.readable = true; this.pendingChunk = null; this.executing = false; - + this.destroyed = false; + // Calculate the number of chunks this.numberOfChunks = Math.ceil(gstore.length/gstore.chunkSize); @@ -100,51 +100,62 @@ ReadStream.prototype._execute = function() { data = gstore.currentChunk.readSlice(gstore.currentChunk.length()); } + var processNext = function() { + if(last === true) { + self.readable = false; + self.emit("end"); + + if(self.autoclose === true) { + if(gstore.mode[0] == "w") { + gstore.close(function(err, doc) { + if (err) { + self.emit("error", err); + return; + } + self.readable = false; + self.destroyed = true; + self.emit("close", doc); + }); + } else { + self.readable = false; + self.destroyed = true; + self.emit("close"); + } + } + } else { + gstore._nthChunk(gstore.currentChunk.chunkNumber + 1, function(err, chunk) { + if(err) { + self.readable = false; + if(self.listeners("error").length > 0) + self.emit("error", err); + self.executing = false; + return; + } + + self.pendingChunk = chunk; + if(self.paused === true) { + self.executing = false; + return; + } + + gstore.currentChunk = self.pendingChunk; + self._execute(); + }); + } + } + // Return the data if(data != null && gstore.currentChunk.chunkNumber == self.currentChunkNumber) { self.currentChunkNumber = self.currentChunkNumber + 1; self.completedLength += data.length; self.pendingChunk = null; - self.emit("data", data); - } - - if(last === true) { - self.readable = false; - self.emit("end"); - - if(self.autoclose === true) { - if(gstore.mode[0] == "w") { - gstore.close(function(err, doc) { - if (err) { - self.emit("error", err); - return; - } - self.readable = false; - self.emit("close", doc); - }); - } else { - self.readable = false; - self.emit("close"); - } - } + // Send the data + process.nextTick(function() { + self.emit("data", data); + processNext(); + }) } else { - gstore._nthChunk(gstore.currentChunk.chunkNumber + 1, function(err, chunk) { - if(err) { - self.readable = false; - self.emit("error", err); - self.executing = false; - return; - } - - self.pendingChunk = chunk; - if(self.paused === true) { - self.executing = false; - return; - } - - gstore.currentChunk = self.pendingChunk; - self._execute(); - }); + processNext(); } }; @@ -167,6 +178,8 @@ ReadStream.prototype.pause = function() { * @api public */ ReadStream.prototype.destroy = function() { + if(this.destroyed) return; + this.destroyed = true; this.readable = false; // Emit close event this.emit("close"); diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/index.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/index.js index b2fdadf..05a4cde 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/index.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/index.js @@ -5,6 +5,9 @@ try { // do nothing } +// export the driver version +exports.version = require('../../package').version; + [ 'commands/base_command' , 'admin' , 'collection' @@ -42,19 +45,12 @@ exports.Timestamp = require('bson').Timestamp; // Add BSON Parser exports.BSON = require('bson').BSONPure.BSON; -// Get the Db object -var Db = require('./db').Db; // Set up the connect function -var connect = Db.connect; -var obj = connect; -// Map all values to the exports value -for(var name in exports) { - obj[name] = exports[name]; -} +var connect = exports.Db.connect; // Add the pure and native backward compatible functions exports.pure = exports.native = function() { - return obj; + return connect; } // Map all values to the exports value @@ -63,4 +59,4 @@ for(var name in exports) { } // Set our exports to be the connect function -module.exports = connect; \ No newline at end of file +module.exports = connect; diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/mongo_client.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/mongo_client.js index 32362e5..04a0fc2 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/mongo_client.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/mongo_client.js @@ -3,6 +3,8 @@ var Db = require('./db').Db , Mongos = require('./connection/mongos').Mongos , ReplSet = require('./connection/repl_set/repl_set').ReplSet , ReadPreference = require('./connection/read_preference').ReadPreference + , inherits = require('util').inherits + , EventEmitter = require('events').EventEmitter , parse = require('./connection/url_parser').parse; /** @@ -11,8 +13,8 @@ var Db = require('./db').Db * Options * - **w**, {Number/String, > -1 || 'majority' || tag name} the write concern for the operation where < 1 is no acknowlegement of write and w >= 1, w = 'majority' or tag acknowledges the write * - **wtimeout**, {Number, 0} set the timeout for waiting for write concern to finish (combines with w option) - * - **fsync**, (Boolean, default:false) write waits for fsync before returning - * - **journal**, (Boolean, default:false) write waits for journal sync before returning + * - **fsync**, (Boolean, default:false) write waits for fsync before returning, from MongoDB 2.6 on, fsync cannot be combined with journal + * - **j**, (Boolean, default:false) write waits for journal sync before returning * - **readPreference** {String}, the prefered read preference (ReadPreference.PRIMARY, ReadPreference.PRIMARY_PREFERRED, ReadPreference.SECONDARY, ReadPreference.SECONDARY_PREFERRED, ReadPreference.NEAREST). * - **native_parser** {Boolean, default:false}, use c++ bson parser. * - **forceServerObjectId** {Boolean, default:false}, force server to create _id fields instead of client. @@ -22,23 +24,64 @@ var Db = require('./db').Db * - **recordQueryStats** {Boolean, default:false}, record query statistics during execution. * - **retryMiliSeconds** {Number, default:5000}, number of miliseconds between retries. * - **numberOfRetries** {Number, default:5}, number of retries off connection. - * - * Deprecated Options - * - **safe** {true | {w:n, wtimeout:n} | {fsync:true}, default:false}, executes with a getLastError command returning the results of the command on MongoDB. + * - **bufferMaxEntries** {Boolean, default: -1}, sets a cap on how many operations the driver will buffer up before giving up on getting a working connection, default is -1 which is unlimited * * @class Represents a MongoClient * @param {Object} serverConfig server config object. * @param {Object} [options] additional options for the collection. */ function MongoClient(serverConfig, options) { - options = options == null ? {} : options; - // If no write concern is set set the default to w:1 - if(options != null && !options.journal && !options.w && !options.fsync) { - options.w = 1; + if(serverConfig != null) { + options = options ? options : {}; + // If no write concern is set set the default to w:1 + if('w' in options === false) { + options.w = 1; + } + + // The internal db instance we are wrapping + this._db = new Db('test', serverConfig, options); } +} + +/** + * @ignore + */ +inherits(MongoClient, EventEmitter); - // The internal db instance we are wrapping - this._db = new Db('test', serverConfig, options); +/** + * Connect to MongoDB using a url as documented at + * + * docs.mongodb.org/manual/reference/connection-string/ + * + * Options + * - **uri_decode_auth** {Boolean, default:false} uri decode the user name and password for authentication + * - **db** {Object, default: null} a hash off options to set on the db object, see **Db constructor** + * - **server** {Object, default: null} a hash off options to set on the server objects, see **Server** constructor** + * - **replSet** {Object, default: null} a hash off options to set on the replSet object, see **ReplSet** constructor** + * - **mongos** {Object, default: null} a hash off options to set on the mongos object, see **Mongos** constructor** + * + * @param {String} url connection url for MongoDB. + * @param {Object} [options] optional options for insert command + * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the initialized db object or null if an error occured. + * @return {null} + * @api public + */ +MongoClient.prototype.connect = function(url, options, callback) { + var self = this; + + if(typeof options == 'function') { + callback = options; + options = {}; + } + + MongoClient.connect(url, options, function(err, db) { + if(err) return callback(err, db); + // Store internal db instance reference + self._db = db; + // Emit open and perform callback + self.emit("open", err, db); + callback(err, db); + }); } /** @@ -51,15 +94,18 @@ function MongoClient(serverConfig, options) { MongoClient.prototype.open = function(callback) { // Self reference var self = this; - + // Open the db this._db.open(function(err, db) { if(err) return callback(err, null); + // Emit open event + self.emit("open", err, db); + // Callback callback(null, self); }) } /** - * Close the current db connection, including all the child db instances. Emits close event if no callback is provided. + * Close the current db connection, including all the child db instances. Emits close event and calls optional callback. * * @param {Function} callback this will be called after executing this method. The first parameter will contain the Error object if an error occured, or null otherwise. While the second parameter will contain the results from the close method or null if an error occured. * @return {null} @@ -98,32 +144,12 @@ MongoClient.prototype.db = function(dbName) { * @return {null} * @api public */ -// MongoClient.connect = function(url, options, callback) { -// if(typeof options == 'function') { -// callback = options; -// options = {}; -// } - -// Db.connect(url, options, function(err, db) { -// if(err) return callback(err, null); - -// if(db.options !== null && !db.options.safe && !db.options.journal -// && !db.options.w && !db.options.fsync && typeof db.options.w != 'number' -// && (db.options.safe == false && url.indexOf("safe=") == -1)) { -// db.options.w = 1; -// } - -// // Return the db -// callback(null, db); -// }); -// } - MongoClient.connect = function(url, options, callback) { var args = Array.prototype.slice.call(arguments, 1); callback = typeof args[args.length - 1] == 'function' ? args.pop() : null; options = args.length ? args.shift() : null; options = options || {}; - + // Set default empty server options var serverOptions = options.server || {}; var mongosOptions = options.mongos || {}; @@ -131,10 +157,12 @@ MongoClient.connect = function(url, options, callback) { var dbOptions = options.db || {}; // If callback is null throw an exception - if(callback == null) throw new Error("no callback function provided"); + if(callback == null) + throw new Error("no callback function provided"); // Parse the string var object = parse(url, options); + // Merge in any options for db in options object if(dbOptions) { for(var name in dbOptions) object.db_options[name] = dbOptions[name]; @@ -176,12 +204,49 @@ MongoClient.connect = function(url, options, callback) { object.server_options.auto_reconnect = true; } + // Establish the correct socketTimeout + var connectTimeoutMS = 30000; + var socketTimeoutMS = 0; + + // We have a server connection timeout setting + if(object.server_options && object.server_options.socketOptions && object.server_options.socketOptions.connectTimeoutMS) { + connectTimeoutMS = object.server_options.socketOptions.connectTimeoutMS; + } + + // We have a rs options set for connection timeout, override any server ones + if(object.rs_options && object.rs_options.socketOptions && object.rs_options.socketOptions.connectTimeoutMS) { + connectTimeoutMS = object.rs_options.socketOptions.connectTimeoutMS; + } + + // If we have no socket settings set the default values + if(object.rs_options.socketOptions.connectTimeoutMS == null) { + object.rs_options.socketOptions.connectTimeoutMS = connectTimeoutMS; + } + + if(object.rs_options.socketOptions.socketTimeoutMS == null) { + object.rs_options.socketOptions.socketTimeoutMS = socketTimeoutMS; + } + + if(object.server_options.socketOptions.connectTimeoutMS == null) { + object.server_options.socketOptions.connectTimeoutMS = connectTimeoutMS; + } + + if(object.server_options.socketOptions.socketTimeoutMS == null) { + object.server_options.socketOptions.socketTimeoutMS = socketTimeoutMS; + } + // If we have more than a server, it could be replicaset or mongos list // need to verify that it's one or the other and fail if it's a mix // Connect to all servers and run ismaster for(var i = 0; i < object.servers.length; i++) { // Set up socket options - var _server_options = {poolSize:1, socketOptions:{connectTimeoutMS:1000}, auto_reconnect:false}; + var _server_options = { + poolSize:1 + , socketOptions: { + connectTimeoutMS: connectTimeoutMS + , socketTimeoutMS: socketTimeoutMS + } + , auto_reconnect:false}; // Ensure we have ssl setup for the servers if(object.rs_options.ssl) { @@ -207,7 +272,7 @@ MongoClient.connect = function(url, options, callback) { var connectFunction = function(__server) { // Attempt connect - new Db(object.dbName, __server, {safe:false, native_parser:false}).open(function(err, db) { + new Db(object.dbName, __server, {w:1, native_parser:false}).open(function(err, db) { // Update number of servers totalNumberOfServers = totalNumberOfServers - 1; // If no error do the correct checks @@ -224,8 +289,16 @@ MongoClient.connect = function(url, options, callback) { if(totalNumberOfServers == 0) { // If we have a mix of mongod and mongos, throw an error - if(totalNumberOfMongosServers > 0 && totalNumberOfMongodServers > 0) - return callback(new Error("cannot combine a list of replicaset seeds and mongos seeds")); + if(totalNumberOfMongosServers > 0 && totalNumberOfMongodServers > 0) { + return process.nextTick(function() { + try { + callback(new Error("cannot combine a list of replicaset seeds and mongos seeds")); + } catch (err) { + if(db) db.close(); + throw err + } + }) + } if(totalNumberOfMongodServers == 0 && object.servers.length == 1) { var obj = object.servers[0]; @@ -250,7 +323,18 @@ MongoClient.connect = function(url, options, callback) { } } - if(serverConfig == null) return callback(new Error("Could not locate any valid servers in initial seed list")); + if(serverConfig == null) { + return process.nextTick(function() { + try { + callback(new Error("Could not locate any valid servers in initial seed list")); + } catch (err) { + if(db) db.close(); + throw err + } + }); + } + // Ensure no firing off open event before we are ready + serverConfig.emitOpen = false; // Set up all options etc and connect to the database _finishConnecting(serverConfig, object, options, callback) } @@ -298,12 +382,41 @@ var _finishConnecting = function(serverConfig, object, options, callback) { // Add the safe object object.db_options.safe = safe; + // Get the socketTimeoutMS + var socketTimeoutMS = object.server_options.socketOptions.socketTimeoutMS || 0; + var connectTimeoutMS = object.server_options.socketOptions.connectTimeoutMS || 30000; + + // If we have a replset, override with replicaset socket timeout option if available + if(serverConfig instanceof ReplSet) { + socketTimeoutMS = object.rs_options.socketOptions.socketTimeoutMS || socketTimeoutMS; + } + + // + // Set socketTimeout to same as connectionTimeout to ensure we don't block on connect and auth + // This is a workaround for pre 2.6 servers where auth can hang when indexes are build on secondaries + serverConfig.setSocketOptions({socketTimeoutMS: connectTimeoutMS, connectTimeoutMS: connectTimeoutMS}); + // Set up the db options var db = new Db(object.dbName, serverConfig, object.db_options); // Open the db db.open(function(err, db){ - if(err) return callback(err, null); + if(err) { + return process.nextTick(function() { + try { + callback(err, null); + } catch (err) { + if(db) db.close(); + throw err + } + }); + } + + // + // Set socketTimeout to same as connectionTimeout to ensure we don't block on connect and auth + // This is a workaround for pre 2.6 servers where auth can hang when indexes are build on secondaries + serverConfig.setSocketOptions({socketTimeoutMS: connectTimeoutMS, connectTimeoutMS: connectTimeoutMS}); + // Set the provided write concern or fall back to w:1 as default if(db.options !== null && !db.options.safe && !db.options.journal && !db.options.w && !db.options.fsync && typeof db.options.w != 'number' && (db.options.safe == false && object.db_options.url.indexOf("safe=") == -1)) { @@ -320,21 +433,50 @@ var _finishConnecting = function(serverConfig, object, options, callback) { // Build options object var options = {}; if(object.db_options.authMechanism) options.authMechanism = object.db_options.authMechanism; + if(object.db_options.gssapiServiceName) options.gssapiServiceName = object.db_options.gssapiServiceName; // Authenticate authentication_db.authenticate(object.auth.user, object.auth.password, options, function(err, success){ + // Reset the socket timeout + serverConfig.setSocketOptions({socketTimeoutMS: socketTimeoutMS, connectTimeoutMS: connectTimeoutMS}); + + // Handle the results if(success){ - callback(null, db); + process.nextTick(function() { + try { + callback(null, db); + } catch (err) { + if(db) db.close(); + throw err + } + }); } else { if(db) db.close(); - callback(err ? err : new Error('Could not authenticate user ' + auth[0]), null); + process.nextTick(function() { + try { + callback(err ? err : new Error('Could not authenticate user ' + object.auth[0]), null); + } catch (err) { + if(db) db.close(); + throw err + } + }); } }); - } else { - callback(err, db); + } else { + // Reset the socket timeout + serverConfig.setSocketOptions({socketTimeoutMS: socketTimeoutMS, connectTimeoutMS: connectTimeoutMS}); + + // Return connection + process.nextTick(function() { + try { + callback(err, db); + } catch (err) { + if(db) db.close(); + throw err + } + }) } }); } - exports.MongoClient = MongoClient; \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js index b27b812..21e8cec 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js @@ -2,7 +2,7 @@ var Long = require('bson').Long , timers = require('timers'); // Set processor, setImmediate if 0.10 otherwise nextTick -var processor = timers.setImmediate ? timers.setImmediate : process.nextTick; +var processor = require('../utils').processor(); /** Reply message from mongo db @@ -42,93 +42,32 @@ MongoReply.prototype.parseHeader = function(binary_reply, bson) { MongoReply.prototype.parseBody = function(binary_reply, bson, raw, callback) { raw = raw == null ? false : raw; - // Just set a doc limit for deserializing - var docLimitSize = 1024*20; - // If our message length is very long, let's switch to process.nextTick for messages - if(this.messageLength > docLimitSize) { - var batchSize = this.numberReturned; - this.documents = new Array(this.numberReturned); - - // Just walk down until we get a positive number >= 1 - for(var i = 50; i > 0; i--) { - if((this.numberReturned/i) >= 1) { - batchSize = i; - break; + try { + // Let's unpack all the bson documents, deserialize them and store them + for(var object_index = 0; object_index < this.numberReturned; object_index++) { + var _options = {promoteLongs: bson.promoteLongs}; + + // Read the size of the bson object + var bsonObjectSize = binary_reply[this.index] | binary_reply[this.index + 1] << 8 | binary_reply[this.index + 2] << 16 | binary_reply[this.index + 3] << 24; + + // If we are storing the raw responses to pipe straight through + if(raw) { + // Deserialize the object and add to the documents array + this.documents.push(binary_reply.slice(this.index, this.index + bsonObjectSize)); + } else { + // Deserialize the object and add to the documents array + this.documents.push(bson.deserialize(binary_reply.slice(this.index, this.index + bsonObjectSize), _options)); } + + // Adjust binary index to point to next block of binary bson data + this.index = this.index + bsonObjectSize; } - - // Actual main creator of the processFunction setting internal state to control the flow - var parseFunction = function(_self, _binary_reply, _batchSize, _numberReturned) { - var object_index = 0; - // Internal loop process that will use nextTick to ensure we yield some time - var processFunction = function() { - // Adjust batchSize if we have less results left than batchsize - if((_numberReturned - object_index) < _batchSize) { - _batchSize = _numberReturned - object_index; - } - - // If raw just process the entries - if(raw) { - // Iterate over the batch - for(var i = 0; i < _batchSize; i++) { - // Are we done ? - if(object_index <= _numberReturned) { - // Read the size of the bson object - var bsonObjectSize = _binary_reply[_self.index] | _binary_reply[_self.index + 1] << 8 | _binary_reply[_self.index + 2] << 16 | _binary_reply[_self.index + 3] << 24; - // If we are storing the raw responses to pipe straight through - _self.documents[object_index] = binary_reply.slice(_self.index, _self.index + bsonObjectSize); - // Adjust binary index to point to next block of binary bson data - _self.index = _self.index + bsonObjectSize; - // Update number of docs parsed - object_index = object_index + 1; - } - } - } else { - try { - // Parse documents - _self.index = bson.deserializeStream(binary_reply, _self.index, _batchSize, _self.documents, object_index); - // Adjust index - object_index = object_index + _batchSize; - } catch (err) { - return callback(err); - } - } - - // If we have more documents process NextTick - if(object_index < _numberReturned) { - processor(processFunction); - } else { - callback(null); - } - } - - // Return the process function - return processFunction; - }(this, binary_reply, batchSize, this.numberReturned)(); - } else { - try { - // Let's unpack all the bson documents, deserialize them and store them - for(var object_index = 0; object_index < this.numberReturned; object_index++) { - // Read the size of the bson object - var bsonObjectSize = binary_reply[this.index] | binary_reply[this.index + 1] << 8 | binary_reply[this.index + 2] << 16 | binary_reply[this.index + 3] << 24; - // If we are storing the raw responses to pipe straight through - if(raw) { - // Deserialize the object and add to the documents array - this.documents.push(binary_reply.slice(this.index, this.index + bsonObjectSize)); - } else { - // Deserialize the object and add to the documents array - this.documents.push(bson.deserialize(binary_reply.slice(this.index, this.index + bsonObjectSize))); - } - // Adjust binary index to point to next block of binary bson data - this.index = this.index + bsonObjectSize; - } - } catch(err) { - return callback(err); - } - + // No error return callback(null); + } catch(err) { + return callback(err); } } diff --git a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/utils.js b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/utils.js index 087789d..f7da514 100644 --- a/node_modules/mongoose/node_modules/mongodb/lib/mongodb/utils.js +++ b/node_modules/mongoose/node_modules/mongodb/lib/mongodb/utils.js @@ -1,3 +1,5 @@ +var timers = require('timers'); + /** * Sort functions, Normalize and prepare sort parameters */ @@ -22,8 +24,12 @@ var formatSortValue = exports.formatSortValue = function(sortDirection) { var formattedOrderClause = exports.formattedOrderClause = function(sortValue) { var orderBy = {}; - + if(sortValue == null) return null; if (Array.isArray(sortValue)) { + if(sortValue.length === 0) { + return null; + } + for(var i = 0; i < sortValue.length; i++) { if(sortValue[i].constructor == String) { orderBy[sortValue[i]] = 1; @@ -31,9 +37,9 @@ var formattedOrderClause = exports.formattedOrderClause = function(sortValue) { orderBy[sortValue[i][0]] = formatSortValue(sortValue[i][1]); } } - } else if(Object.prototype.toString.call(sortValue) === '[object Object]') { + } else if(sortValue != null && typeof sortValue == 'object') { orderBy = sortValue; - } else if (sortValue.constructor == String) { + } else if (typeof sortValue == 'string') { orderBy[sortValue] = 1; } else { throw new Error("Illegal sort clause, must be of the form " + @@ -79,7 +85,7 @@ exports.decodeUInt8 = function(array, index) { var toString = Object.prototype.toString; -exports.isObject = function (arg) { +var isObject = exports.isObject = function (arg) { return '[object Object]' == toString.call(arg) } @@ -101,10 +107,10 @@ exports.isRegExp = function (arg) { * @ignore * @api private */ -exports.toError = function(error) { +var toError = function(error) { if (error instanceof Error) return error; - var msg = error.err || error.errmsg || error; + var msg = error.err || error.errmsg || error.errMessage || error; var e = new Error(msg); e.name = 'MongoError'; @@ -119,6 +125,7 @@ exports.toError = function(error) { return e; } +exports.toError = toError; /** * Convert a single level object to an array @@ -135,3 +142,145 @@ exports.objectToArray = function(object) { return list; } +/** + * Handle single command document return + * @ignore + * @api private + */ +exports.handleSingleCommandResultReturn = function(override_value_true, override_value_false, callback) { + return function(err, result, connection) { + if(callback == null) return; + if(err && typeof callback == 'function') return callback(err, null); + if(!result || !result.documents || result.documents.length == 0) + if(typeof callback == 'function') return callback(toError("command failed to return results"), null) + if(result && result.documents[0].ok == 1) { + if(override_value_true) return callback(null, override_value_true) + if(typeof callback == 'function') return callback(null, result.documents[0]); + } + + // Return the error from the document + if(typeof callback == 'function') return callback(toError(result.documents[0]), override_value_false); + } +} + +/** + * Return correct processor + * @ignore + * @api private + */ +exports.processor = function() { + // Set processor, setImmediate if 0.10 otherwise nextTick + process.maxTickDepth = Infinity; + // Only use nextTick + return process.nextTick; +} + +/** + * Allow setting the socketTimeoutMS on all connections + * to work around issues such as secondaries blocking due to compaction + * + * @ignore + * @api private + */ +exports.setSocketTimeoutProperty = function(self, options) { + Object.defineProperty(self, "socketTimeoutMS", { + enumerable: true + , get: function () { return options.socketTimeoutMS; } + , set: function (value) { + // Set the socket timeoutMS value + options.socketTimeoutMS = value; + + // Get all the connections + var connections = self.allRawConnections(); + for(var i = 0; i < connections.length; i++) { + connections[i].socketTimeoutMS = value; + } + } + }); +} + +/** + * Determine if the server supports write commands + * + * @ignore + * @api private + */ +exports.hasWriteCommands = function(connection) { + return connection != null && connection.serverCapabilities != null && connection.serverCapabilities.hasWriteCommands; +} + +/** + * Fetch server capabilities + * + * @ignore + * @api private + */ +exports.serverCapabilities = function(connection) { + return connection != null && connection.serverCapabilities != null && connection.serverCapabilities.hasWriteCommands; +} + +/** + * Create index name based on field spec + * + * @ignore + * @api private + */ +exports.parseIndexOptions = function(fieldOrSpec) { + var fieldHash = {}; + var indexes = []; + var keys; + + // Get all the fields accordingly + if('string' == typeof fieldOrSpec) { + // 'type' + indexes.push(fieldOrSpec + '_' + 1); + fieldHash[fieldOrSpec] = 1; + } else if(Array.isArray(fieldOrSpec)) { + fieldOrSpec.forEach(function(f) { + if('string' == typeof f) { + // [{location:'2d'}, 'type'] + indexes.push(f + '_' + 1); + fieldHash[f] = 1; + } else if(Array.isArray(f)) { + // [['location', '2d'],['type', 1]] + indexes.push(f[0] + '_' + (f[1] || 1)); + fieldHash[f[0]] = f[1] || 1; + } else if(isObject(f)) { + // [{location:'2d'}, {type:1}] + keys = Object.keys(f); + keys.forEach(function(k) { + indexes.push(k + '_' + f[k]); + fieldHash[k] = f[k]; + }); + } else { + // undefined (ignore) + } + }); + } else if(isObject(fieldOrSpec)) { + // {location:'2d', type:1} + keys = Object.keys(fieldOrSpec); + keys.forEach(function(key) { + indexes.push(key + '_' + fieldOrSpec[key]); + fieldHash[key] = fieldOrSpec[key]; + }); + } + + return { + name: indexes.join("_"), keys: keys, fieldHash: fieldHash + } +} + +exports.decorateCommand = function(command, options, exclude) { + for(var name in options) { + if(exclude[name] == null) command[name] = options[name]; + } + + return command; +} + +exports.shallowObjectCopy = function(object) { + var c = {}; + for(var n in object) c[n] = object[n]; + return c; +} + diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/.travis.yml b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/.travis.yml index 94740d0..471ed72 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/.travis.yml +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/.travis.yml @@ -1,5 +1,4 @@ language: node_js node_js: - - 0.6 - - 0.8 - - 0.9 # development version of 0.8, may be unstable \ No newline at end of file + - 0.10 # development version of 0.8, may be unstable + - 0.11 \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/README.md b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/README.md index 73892e2..1a6fc2b 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/README.md +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/README.md @@ -1 +1,45 @@ -A JS/C++ Bson parser for node, used in the MongoDB Native driver \ No newline at end of file +Javascript + C++ BSON parser +============================ + +This BSON parser is primarily meant for usage with the `mongodb` node.js driver. However thanks to such wonderful tools at `onejs` we are able to package up a BSON parser that will work in the browser aswell. The current build is located in the `browser_build/bson.js` file. + +A simple example on how to use it + + + + + + + + + It's got two simple methods to use in your application. + + * BSON.serialize(object, checkKeys, asBuffer, serializeFunctions) + * @param {Object} object the Javascript object to serialize. + * @param {Boolean} checkKeys the serializer will check if keys are valid. + * @param {Boolean} asBuffer return the serialized object as a Buffer object **(ignore)**. + * @param {Boolean} serializeFunctions serialize the javascript functions **(default:false)** + * @return {TypedArray/Array} returns a TypedArray or Array depending on what your browser supports + + * BSON.deserialize(buffer, options, isArray) + * Options + * **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized. + * **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse. + * **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function. + * @param {TypedArray/Array} a TypedArray/Array containing the BSON data + * @param {Object} [options] additional options used for the deserialization. + * @param {Boolean} [isArray] ignore used for recursive parsing. + * @return {Object} returns the deserialized Javascript Object. diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/benchmarks/benchmarks.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/benchmarks/benchmarks.js deleted file mode 100644 index 45a1111..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/benchmarks/benchmarks.js +++ /dev/null @@ -1,130 +0,0 @@ -// var BSON = require('../../lib/mongodb').BSONNative.BSON, -// ObjectID = require('../../lib/mongodb').BSONNative.ObjectID, -// Code = require('../../lib/mongodb').BSONNative.Code, -// Long = require('../../lib/mongodb').BSONNative.Long, -// Binary = require('../../lib/mongodb').BSONNative.Binary, -// debug = require('util').debug, -// inspect = require('util').inspect, -// -// Long = require('../../lib/mongodb').Long, -// ObjectID = require('../../lib/mongodb').ObjectID, -// Binary = require('../../lib/mongodb').Binary, -// Code = require('../../lib/mongodb').Code, -// DBRef = require('../../lib/mongodb').DBRef, -// Symbol = require('../../lib/mongodb').Symbol, -// Double = require('../../lib/mongodb').Double, -// MaxKey = require('../../lib/mongodb').MaxKey, -// MinKey = require('../../lib/mongodb').MinKey, -// Timestamp = require('../../lib/mongodb').Timestamp; - - -// var BSON = require('../../lib/mongodb').BSONPure.BSON, -// ObjectID = require('../../lib/mongodb').BSONPure.ObjectID, -// Code = require('../../lib/mongodb').BSONPure.Code, -// Long = require('../../lib/mongodb').BSONPure.Long, -// Binary = require('../../lib/mongodb').BSONPure.Binary; - -var BSON = require('../lib/bson').BSONNative.BSON, - Long = require('../lib/bson').Long, - ObjectID = require('../lib/bson').ObjectID, - Binary = require('../lib/bson').Binary, - Code = require('../lib/bson').Code, - DBRef = require('../lib/bson').DBRef, - Symbol = require('../lib/bson').Symbol, - Double = require('../lib/bson').Double, - MaxKey = require('../lib/bson').MaxKey, - MinKey = require('../lib/bson').MinKey, - Timestamp = require('../lib/bson').Timestamp; - - // console.dir(require('../lib/bson')) - -var COUNT = 1000; -var COUNT = 100; - -var object = { - string: "Strings are great", - decimal: 3.14159265, - bool: true, - integer: 5, - date: new Date(), - double: new Double(1.4), - id: new ObjectID(), - min: new MinKey(), - max: new MaxKey(), - symbol: new Symbol('hello'), - long: Long.fromNumber(100), - bin: new Binary(new Buffer(100)), - - subObject: { - moreText: "Bacon ipsum dolor sit amet cow pork belly rump ribeye pastrami andouille. Tail hamburger pork belly, drumstick flank salami t-bone sirloin pork chop ribeye ham chuck pork loin shankle. Ham fatback pork swine, sirloin shankle short loin andouille shank sausage meatloaf drumstick. Pig chicken cow bresaola, pork loin jerky meatball tenderloin brisket strip steak jowl spare ribs. Biltong sirloin pork belly boudin, bacon pastrami rump chicken. Jowl rump fatback, biltong bacon t-bone turkey. Turkey pork loin boudin, tenderloin jerky beef ribs pastrami spare ribs biltong pork chop beef.", - longKeylongKeylongKeylongKeylongKeylongKey: "Pork belly boudin shoulder ribeye pork chop brisket biltong short ribs. Salami beef pork belly, t-bone sirloin meatloaf tail jowl spare ribs. Sirloin biltong bresaola cow turkey. Biltong fatback meatball, bresaola tail shankle turkey pancetta ham ribeye flank bacon jerky pork chop. Boudin sirloin shoulder, salami swine flank jerky t-bone pork chop pork beef tongue. Bresaola ribeye jerky andouille. Ribeye ground round sausage biltong beef ribs chuck, shank hamburger chicken short ribs spare ribs tenderloin meatloaf pork loin." - }, - - subArray: [1,2,3,4,5,6,7,8,9,10], - anotherString: "another string", - code: new Code("function() {}", {i:1}) -} - -// Number of objects -var numberOfObjects = 10000; -var bson = new BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]); -console.log("---------------------- 1") -var s = new Date() -// Object serialized -for(var i = 0; i < numberOfObjects; i++) { - objectBSON = bson.serialize(object, null, true) -} -console.log("====================== " + (new Date().getTime() - s.getTime()) + " :: " + ((new Date().getTime() - s.getTime()))/numberOfObjects) - -console.log("---------------------- 2") -var s = new Date() -// Object serialized -for(var i = 0; i < numberOfObjects; i++) { - bson.deserialize(objectBSON); -} -console.log("====================== " + (new Date().getTime() - s.getTime()) + " :: " + ((new Date().getTime() - s.getTime()))/numberOfObjects) - -// // Buffer With copies of the objectBSON -// var data = new Buffer(objectBSON.length * numberOfObjects); -// var index = 0; -// -// // Copy the buffer 1000 times to create a strea m of objects -// for(var i = 0; i < numberOfObjects; i++) { -// // Copy data -// objectBSON.copy(data, index); -// // Adjust index -// index = index + objectBSON.length; -// } -// -// // console.log("-----------------------------------------------------------------------------------") -// // console.dir(objectBSON) -// -// var x, start, end, j -// var objectBSON, objectJSON -// -// // Allocate the return array (avoid concatinating everything) -// var results = new Array(numberOfObjects); -// -// console.log(COUNT + "x (objectBSON = BSON.serialize(object))") -// start = new Date -// -// // var objects = BSON.deserializeStream(data, 0, numberOfObjects); -// // console.log("----------------------------------------------------------------------------------- 0") -// // var objects = BSON.deserialize(data); -// // console.log("----------------------------------------------------------------------------------- 1") -// // console.dir(objects) -// -// for (j=COUNT; --j>=0; ) { -// var nextIndex = BSON.deserializeStream(data, 0, numberOfObjects, results, 0); -// } -// -// end = new Date -// var opsprsecond = COUNT / ((end - start)/1000); -// console.log("bson size (bytes): ", objectBSON.length); -// console.log("time = ", end - start, "ms -", COUNT / ((end - start)/1000), " ops/sec"); -// console.log("MB/s = " + ((opsprsecond*objectBSON.length)/1024)); -// -// // console.dir(nextIndex) -// // console.dir(results) - - diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/binding.gyp b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/binding.gyp index 42445d3..c4455e7 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/binding.gyp +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/binding.gyp @@ -5,6 +5,7 @@ 'sources': [ 'ext/bson.cc' ], 'cflags!': [ '-fno-exceptions' ], 'cflags_cc!': [ '-fno-exceptions' ], + 'include_dirs': [ '0){ id = pkg.modules[i].id; + if(id==moduleId || id == moduleIndexId){ module = pkg.modules[i]; break; @@ -955,146 +958,146 @@ var JS_INT_MIN_LONG = Long.fromNumber(-0x20000000000000); // Any integer down t /** * Number BSON Type - * + * * @classconstant BSON_DATA_NUMBER **/ BSON.BSON_DATA_NUMBER = 1; /** * String BSON Type - * + * * @classconstant BSON_DATA_STRING **/ BSON.BSON_DATA_STRING = 2; /** * Object BSON Type - * + * * @classconstant BSON_DATA_OBJECT **/ BSON.BSON_DATA_OBJECT = 3; /** * Array BSON Type - * + * * @classconstant BSON_DATA_ARRAY **/ BSON.BSON_DATA_ARRAY = 4; /** * Binary BSON Type - * + * * @classconstant BSON_DATA_BINARY **/ BSON.BSON_DATA_BINARY = 5; /** * ObjectID BSON Type - * + * * @classconstant BSON_DATA_OID **/ BSON.BSON_DATA_OID = 7; /** * Boolean BSON Type - * + * * @classconstant BSON_DATA_BOOLEAN **/ BSON.BSON_DATA_BOOLEAN = 8; /** * Date BSON Type - * + * * @classconstant BSON_DATA_DATE **/ BSON.BSON_DATA_DATE = 9; /** * null BSON Type - * + * * @classconstant BSON_DATA_NULL **/ BSON.BSON_DATA_NULL = 10; /** * RegExp BSON Type - * + * * @classconstant BSON_DATA_REGEXP **/ BSON.BSON_DATA_REGEXP = 11; /** * Code BSON Type - * + * * @classconstant BSON_DATA_CODE **/ BSON.BSON_DATA_CODE = 13; /** * Symbol BSON Type - * + * * @classconstant BSON_DATA_SYMBOL **/ BSON.BSON_DATA_SYMBOL = 14; /** * Code with Scope BSON Type - * + * * @classconstant BSON_DATA_CODE_W_SCOPE **/ BSON.BSON_DATA_CODE_W_SCOPE = 15; /** * 32 bit Integer BSON Type - * + * * @classconstant BSON_DATA_INT **/ BSON.BSON_DATA_INT = 16; /** * Timestamp BSON Type - * + * * @classconstant BSON_DATA_TIMESTAMP **/ BSON.BSON_DATA_TIMESTAMP = 17; /** * Long BSON Type - * + * * @classconstant BSON_DATA_LONG **/ BSON.BSON_DATA_LONG = 18; /** * MinKey BSON Type - * + * * @classconstant BSON_DATA_MIN_KEY **/ BSON.BSON_DATA_MIN_KEY = 0xff; /** * MaxKey BSON Type - * + * * @classconstant BSON_DATA_MAX_KEY **/ BSON.BSON_DATA_MAX_KEY = 0x7f; /** * Binary Default Type - * + * * @classconstant BSON_BINARY_SUBTYPE_DEFAULT **/ BSON.BSON_BINARY_SUBTYPE_DEFAULT = 0; /** * Binary Function Type - * + * * @classconstant BSON_BINARY_SUBTYPE_FUNCTION **/ BSON.BSON_BINARY_SUBTYPE_FUNCTION = 1; /** * Binary Byte Array Type - * + * * @classconstant BSON_BINARY_SUBTYPE_BYTE_ARRAY **/ BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; /** * Binary UUID Type - * + * * @classconstant BSON_BINARY_SUBTYPE_UUID **/ BSON.BSON_BINARY_SUBTYPE_UUID = 3; /** * Binary MD5 Type - * + * * @classconstant BSON_BINARY_SUBTYPE_MD5 **/ BSON.BSON_BINARY_SUBTYPE_MD5 = 4; /** * Binary User Defined Type - * + * * @classconstant BSON_BINARY_SUBTYPE_USER_DEFINED **/ BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; @@ -1109,7 +1112,7 @@ BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; */ BSON.calculateObjectSize = function calculateObjectSize(object, serializeFunctions) { var totalLength = (4 + 1); - + if(Array.isArray(object)) { for(var i = 0; i < object.length; i++) { totalLength += calculateElement(i.toString(), object[i], serializeFunctions) @@ -1119,12 +1122,12 @@ BSON.calculateObjectSize = function calculateObjectSize(object, serializeFunctio if(object.toBSON) { object = object.toBSON(); } - + // Calculate size for(var key in object) { totalLength += calculateElement(key, object[key], serializeFunctions) } - } + } return totalLength; } @@ -1135,9 +1138,9 @@ BSON.calculateObjectSize = function calculateObjectSize(object, serializeFunctio */ function calculateElement(name, value, serializeFunctions) { var isBuffer = typeof Buffer !== 'undefined'; - + switch(typeof value) { - case 'string': + case 'string': return 1 + (!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1 + 4 + (!isBuffer ? numberOfBytes(value) : Buffer.byteLength(value, 'utf8')) + 1; case 'number': if(Math.floor(value) === value && value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { @@ -1153,7 +1156,7 @@ function calculateElement(name, value, serializeFunctions) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (1); case 'boolean': return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (1 + 1); - case 'object': + case 'object': if(value == null || value instanceof MinKey || value instanceof MaxKey || value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (1); } else if(value instanceof ObjectID || value['_bsontype'] == 'ObjectID') { @@ -1162,22 +1165,22 @@ function calculateElement(name, value, serializeFunctions) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (8 + 1); } else if(typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (1 + 4 + 1) + value.length; - } else if(value instanceof Long || value instanceof Double || value instanceof Timestamp + } else if(value instanceof Long || value instanceof Double || value instanceof Timestamp || value['_bsontype'] == 'Long' || value['_bsontype'] == 'Double' || value['_bsontype'] == 'Timestamp') { - return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (8 + 1); + return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (8 + 1); } else if(value instanceof Code || value['_bsontype'] == 'Code') { // Calculate size depending on the availability of a scope if(value.scope != null && Object.keys(value.scope).length > 0) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + 4 + 4 + (!isBuffer ? numberOfBytes(value.code.toString()) : Buffer.byteLength(value.code.toString(), 'utf8')) + 1 + BSON.calculateObjectSize(value.scope, serializeFunctions); } else { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + 4 + (!isBuffer ? numberOfBytes(value.code.toString()) : Buffer.byteLength(value.code.toString(), 'utf8')) + 1; - } + } } else if(value instanceof Binary || value['_bsontype'] == 'Binary') { // Check what kind of subtype we have if(value.sub_type == Binary.SUBTYPE_BYTE_ARRAY) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (value.position + 1 + 4 + 1 + 4); } else { - return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (value.position + 1 + 4 + 1); + return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (value.position + 1 + 4 + 1); } } else if(value instanceof Symbol || value['_bsontype'] == 'Symbol') { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + ((!isBuffer ? numberOfBytes(value.value) : Buffer.byteLength(value.value, 'utf8')) + 4 + 1 + 1); @@ -1192,13 +1195,13 @@ function calculateElement(name, value, serializeFunctions) { if(null != value.db) { ordered_values['$db'] = value.db; } - + return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + BSON.calculateObjectSize(ordered_values, serializeFunctions); } else if(value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]') { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + (!isBuffer ? numberOfBytes(value.source) : Buffer.byteLength(value.source, 'utf8')) + 1 - + (value.global ? 1 : 0) + (value.ignoreCase ? 1 : 0) + (value.multiline ? 1 : 0) + 1 - } else { - return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + BSON.calculateObjectSize(value, serializeFunctions) + 1; + + (value.global ? 1 : 0) + (value.ignoreCase ? 1 : 0) + (value.multiline ? 1 : 0) + 1 + } else { + return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + BSON.calculateObjectSize(value, serializeFunctions) + 1; } case 'function': // WTF for 0.4.X where typeof /someregexp/ === 'function' @@ -1210,10 +1213,10 @@ function calculateElement(name, value, serializeFunctions) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + 4 + 4 + (!isBuffer ? numberOfBytes(value.toString()) : Buffer.byteLength(value.toString(), 'utf8')) + 1 + BSON.calculateObjectSize(value.scope, serializeFunctions); } else if(serializeFunctions) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + 4 + (!isBuffer ? numberOfBytes(value.toString()) : Buffer.byteLength(value.toString(), 'utf8')) + 1; - } + } } } - + return 0; } @@ -1234,10 +1237,10 @@ BSON.serializeWithBufferAndIndex = function serializeWithBufferAndIndex(object, // Write end information (length of the object) var size = buffer.length; // Write the size of the object - buffer[index++] = size & 0xff; + buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; return serializeObject(object, checkKeys, buffer, index, serializeFunctions) - 1; } @@ -1256,19 +1259,20 @@ var serializeObject = function(object, checkKeys, buffer, index, serializeFuncti if(object.toBSON) { object = object.toBSON(); } - + // Serialize the object - for(var key in object) { + for(var key in object) { // Check the key and throw error if it's illegal - if(checkKeys == true && (key != '$db' && key != '$ref' && key != '$id')) { - BSON.checkKey(key); + if (key != '$db' && key != '$ref' && key != '$id') { + // dollars and dots ok + BSON.checkKey(key, !checkKeys); } // Pack the element index = packElement(key, object[key], checkKeys, buffer, index, serializeFunctions); - } - } - + } + } + // Write zero buffer[index++] = 0; return index; @@ -1277,12 +1281,12 @@ var serializeObject = function(object, checkKeys, buffer, index, serializeFuncti var stringToBytes = function(str) { var ch, st, re = []; for (var i = 0; i < str.length; i++ ) { - ch = str.charCodeAt(i); // get char + ch = str.charCodeAt(i); // get char st = []; // set up "stack" do { st.push( ch & 0xFF ); // push byte to stack ch = ch >> 8; // shift value down by 1 byte - } + } while ( ch ); // add stack contents to result // done because chars have "wrong" endianness @@ -1295,19 +1299,19 @@ var stringToBytes = function(str) { var numberOfBytes = function(str) { var ch, st, re = 0; for (var i = 0; i < str.length; i++ ) { - ch = str.charCodeAt(i); // get char + ch = str.charCodeAt(i); // get char st = []; // set up "stack" do { st.push( ch & 0xFF ); // push byte to stack ch = ch >> 8; // shift value down by 1 byte - } + } while ( ch ); // add stack contents to result // done because chars have "wrong" endianness re = re + st.length; } // return an array of bytes - return re; + return re; } /** @@ -1334,7 +1338,7 @@ var supportsBuffer = typeof Buffer != 'undefined'; */ var packElement = function(name, value, checkKeys, buffer, index, serializeFunctions) { var startIndex = index; - + switch(typeof value) { case 'string': // Encode String type @@ -1343,15 +1347,15 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; - + buffer[index - 1] = 0; + // Calculate size var size = supportsBuffer ? Buffer.byteLength(value) + 1 : numberOfBytes(value) + 1; // Write the size of the string to buffer - buffer[index + 3] = (size >> 24) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; buffer[index + 2] = (size >> 16) & 0xff; buffer[index + 1] = (size >> 8) & 0xff; - buffer[index] = size & 0xff; + buffer[index] = size & 0xff; // Ajust the index index = index + 4; // Write the string @@ -1362,24 +1366,24 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = 0; // Return index return index; - case 'number': + case 'number': // We have an integer value if(Math.floor(value) === value && value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { // If the value fits in 32 bits encode as int, if it fits in a double // encode it as a double, otherwise long if(value >= BSON.BSON_INT32_MIN && value <= BSON.BSON_INT32_MAX) { // Set int type 32 bits or less - buffer[index++] = BSON.BSON_DATA_INT; + buffer[index++] = BSON.BSON_DATA_INT; // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; // Write the int value - buffer[index++] = value & 0xff; + buffer[index++] = value & 0xff; buffer[index++] = (value >> 8) & 0xff; buffer[index++] = (value >> 16) & 0xff; - buffer[index++] = (value >> 24) & 0xff; + buffer[index++] = (value >> 24) & 0xff; } else if(value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { // Encode as double buffer[index++] = BSON.BSON_DATA_NUMBER; @@ -1387,32 +1391,32 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; // Write float writeIEEE754(buffer, value, index, 'little', 52, 8); // Ajust index - index = index + 8; + index = index + 8; } else { // Set long type - buffer[index++] = BSON.BSON_DATA_LONG; + buffer[index++] = BSON.BSON_DATA_LONG; // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; var longVal = Long.fromNumber(value); var lowBits = longVal.getLowBits(); var highBits = longVal.getHighBits(); // Encode low bits - buffer[index++] = lowBits & 0xff; + buffer[index++] = lowBits & 0xff; buffer[index++] = (lowBits >> 8) & 0xff; buffer[index++] = (lowBits >> 16) & 0xff; - buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; // Encode high bits - buffer[index++] = highBits & 0xff; + buffer[index++] = highBits & 0xff; buffer[index++] = (highBits >> 8) & 0xff; buffer[index++] = (highBits >> 16) & 0xff; - buffer[index++] = (highBits >> 24) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; } } else { // Encode as double @@ -1421,13 +1425,13 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; // Write float writeIEEE754(buffer, value, index, 'little', 52, 8); // Ajust index - index = index + 8; + index = index + 8; } - + return index; case 'undefined': // Set long type @@ -1437,7 +1441,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Encode the name index = index + numberOfWrittenBytes + 1; buffer[index - 1] = 0; - return index; + return index; case 'boolean': // Write the type buffer[index++] = BSON.BSON_DATA_BOOLEAN; @@ -1449,8 +1453,8 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Encode the boolean value buffer[index++] = value ? 1 : 0; return index; - case 'object': - if(value === null || value instanceof MinKey || value instanceof MaxKey + case 'object': + if(value === null || value instanceof MinKey || value instanceof MaxKey || value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { // Write the type of either min or max key if(value === null) { @@ -1460,7 +1464,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct } else { buffer[index++] = BSON.BSON_DATA_MAX_KEY; } - + // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name @@ -1489,22 +1493,22 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Encode the name index = index + numberOfWrittenBytes + 1; buffer[index - 1] = 0; - + // Write the date var dateInMilis = Long.fromNumber(value.getTime()); var lowBits = dateInMilis.getLowBits(); var highBits = dateInMilis.getHighBits(); // Encode low bits - buffer[index++] = lowBits & 0xff; + buffer[index++] = lowBits & 0xff; buffer[index++] = (lowBits >> 8) & 0xff; buffer[index++] = (lowBits >> 16) & 0xff; - buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; // Encode high bits - buffer[index++] = highBits & 0xff; + buffer[index++] = highBits & 0xff; buffer[index++] = (highBits >> 8) & 0xff; buffer[index++] = (highBits >> 16) & 0xff; - buffer[index++] = (highBits >> 24) & 0xff; - return index; + buffer[index++] = (highBits >> 24) & 0xff; + return index; } else if(typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { // Write the type buffer[index++] = BSON.BSON_DATA_BINARY; @@ -1519,7 +1523,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the default subtype buffer[index++] = BSON.BSON_BINARY_SUBTYPE_DEFAULT; // Copy the content form the binary field to the buffer @@ -1539,15 +1543,15 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct var lowBits = value.getLowBits(); var highBits = value.getHighBits(); // Encode low bits - buffer[index++] = lowBits & 0xff; + buffer[index++] = lowBits & 0xff; buffer[index++] = (lowBits >> 8) & 0xff; buffer[index++] = (lowBits >> 16) & 0xff; - buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; // Encode high bits - buffer[index++] = highBits & 0xff; + buffer[index++] = highBits & 0xff; buffer[index++] = (highBits >> 8) & 0xff; buffer[index++] = (highBits >> 16) & 0xff; - buffer[index++] = (highBits >> 24) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; return index; } else if(value instanceof Double || value['_bsontype'] == 'Double') { // Encode as double @@ -1556,14 +1560,14 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; // Write float writeIEEE754(buffer, value, index, 'little', 52, 8); // Ajust index index = index + 8; return index; - } else if(value instanceof Code || value['_bsontype'] == 'Code') { - if(value.scope != null && Object.keys(value.scope).length > 0) { + } else if(value instanceof Code || value['_bsontype'] == 'Code') { + if(value.scope != null && Object.keys(value.scope).length > 0) { // Write the type buffer[index++] = BSON.BSON_DATA_CODE_W_SCOPE; // Number of written bytes @@ -1585,13 +1589,13 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = totalSize & 0xff; buffer[index++] = (totalSize >> 8) & 0xff; buffer[index++] = (totalSize >> 16) & 0xff; - buffer[index++] = (totalSize >> 24) & 0xff; + buffer[index++] = (totalSize >> 24) & 0xff; // Write the size of the string to buffer buffer[index++] = codeSize & 0xff; buffer[index++] = (codeSize >> 8) & 0xff; buffer[index++] = (codeSize >> 16) & 0xff; - buffer[index++] = (codeSize >> 24) & 0xff; + buffer[index++] = (codeSize >> 24) & 0xff; // Write the string supportsBuffer ? buffer.write(functionString, index, 'utf8') : writeToTypedArray(buffer, functionString, index); @@ -1599,23 +1603,23 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct index = index + codeSize - 1; // Write zero buffer[index++] = 0; - // Serialize the scope object + // Serialize the scope object var scopeObjectBuffer = supportsBuffer ? new Buffer(scopeSize) : new Uint8Array(new ArrayBuffer(scopeSize)); // Execute the serialization into a seperate buffer serializeObject(value.scope, checkKeys, scopeObjectBuffer, 0, serializeFunctions); - + // Adjusted scope Size (removing the header) var scopeDocSize = scopeSize; // Write scope object size buffer[index++] = scopeDocSize & 0xff; buffer[index++] = (scopeDocSize >> 8) & 0xff; buffer[index++] = (scopeDocSize >> 16) & 0xff; - buffer[index++] = (scopeDocSize >> 24) & 0xff; - + buffer[index++] = (scopeDocSize >> 24) & 0xff; + // Write the scopeObject into the buffer supportsBuffer ? scopeObjectBuffer.copy(buffer, index, 0, scopeSize) : buffer.set(scopeObjectBuffer, index); // Adjust index, removing the empty size of the doc (5 bytes 0000000005) - index = index + scopeDocSize - 5; + index = index + scopeDocSize - 5; // Write trailing zero buffer[index++] = 0; return index @@ -1634,15 +1638,15 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the string - buffer.write(functionString, index, 'utf8'); + supportsBuffer ? buffer.write(functionString, index, 'utf8') : writeToTypedArray(buffer, functionString, index); // Update index index = index + size - 1; // Write zero - buffer[index++] = 0; + buffer[index++] = 0; return index; - } + } } else if(value instanceof Binary || value['_bsontype'] == 'Binary') { // Write the type buffer[index++] = BSON.BSON_DATA_BINARY; @@ -1652,14 +1656,14 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct index = index + numberOfWrittenBytes + 1; buffer[index - 1] = 0; // Extract the buffer - var data = value.value(true); + var data = value.value(true); // Calculate size var size = value.position; // Write the size of the string to buffer buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the subtype to the buffer buffer[index++] = value.sub_type; @@ -1668,7 +1672,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; } // Write the data to the object @@ -1690,14 +1694,14 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the string buffer.write(value.value, index, 'utf8'); // Update index index = index + size - 1; // Write zero buffer[index++] = 0x00; - return index; + return index; } else if(value instanceof DBRef || value['_bsontype'] == 'DBRef') { // Write the type buffer[index++] = BSON.BSON_DATA_OBJECT; @@ -1711,7 +1715,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct '$ref': value.namespace , '$id' : value.oid }; - + // Add db reference if it exists if(null != value.db) { ordered_values['$db'] = value.db; @@ -1725,7 +1729,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write zero for object buffer[endIndex++] = 0x00; // Return the end index @@ -1744,7 +1748,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Adjust the index index = index + (supportsBuffer ? Buffer.byteLength(value.source) : numberOfBytes(value.source)); // Write zero - buffer[index++] = 0x00; + buffer[index++] = 0x00; // Write the parameters if(value.global) buffer[index++] = 0x73; // s if(value.ignoreCase) buffer[index++] = 0x69; // i @@ -1754,7 +1758,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct return index; } else { // Write the type - buffer[index++] = Array.isArray(value) ? BSON.BSON_DATA_ARRAY : BSON.BSON_DATA_OBJECT; + buffer[index++] = Array.isArray(value) ? BSON.BSON_DATA_ARRAY : BSON.BSON_DATA_OBJECT; // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Adjust the index @@ -1767,12 +1771,12 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; return endIndex; } case 'function': // WTF for 0.4.X where typeof /someregexp/ === 'function' - if(value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]' || String.call(value) == '[object RegExp]') { + if(value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]' || String.call(value) == '[object RegExp]') { // Write the type buffer[index++] = BSON.BSON_DATA_REGEXP; // Number of written bytes @@ -1786,7 +1790,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Adjust the index index = index + (supportsBuffer ? Buffer.byteLength(value.source) : numberOfBytes(value.source)); // Write zero - buffer[index++] = 0x00; + buffer[index++] = 0x00; // Write the parameters if(value.global) buffer[index++] = 0x73; // s if(value.ignoreCase) buffer[index++] = 0x69; // i @@ -1817,21 +1821,21 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = totalSize & 0xff; buffer[index++] = (totalSize >> 8) & 0xff; buffer[index++] = (totalSize >> 16) & 0xff; - buffer[index++] = (totalSize >> 24) & 0xff; + buffer[index++] = (totalSize >> 24) & 0xff; // Write the size of the string to buffer buffer[index++] = codeSize & 0xff; buffer[index++] = (codeSize >> 8) & 0xff; buffer[index++] = (codeSize >> 16) & 0xff; - buffer[index++] = (codeSize >> 24) & 0xff; + buffer[index++] = (codeSize >> 24) & 0xff; // Write the string - buffer.write(functionString, index, 'utf8'); + supportsBuffer ? buffer.write(functionString, index, 'utf8') : writeToTypedArray(buffer, functionString, index); // Update index index = index + codeSize - 1; // Write zero buffer[index++] = 0; - // Serialize the scope object + // Serialize the scope object var scopeObjectBuffer = new Buffer(scopeSize); // Execute the serialization into a seperate buffer serializeObject(value.scope, checkKeys, scopeObjectBuffer, 0, serializeFunctions); @@ -1842,13 +1846,13 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = scopeDocSize & 0xff; buffer[index++] = (scopeDocSize >> 8) & 0xff; buffer[index++] = (scopeDocSize >> 16) & 0xff; - buffer[index++] = (scopeDocSize >> 24) & 0xff; + buffer[index++] = (scopeDocSize >> 24) & 0xff; // Write the scopeObject into the buffer scopeObjectBuffer.copy(buffer, index, 0, scopeSize); // Adjust index, removing the empty size of the doc (5 bytes 0000000005) - index = index + scopeDocSize - 5; + index = index + scopeDocSize - 5; // Write trailing zero buffer[index++] = 0; return index @@ -1867,20 +1871,20 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the string - buffer.write(functionString, index, 'utf8'); + supportsBuffer ? buffer.write(functionString, index, 'utf8') : writeToTypedArray(buffer, functionString, index); // Update index index = index + size - 1; // Write zero - buffer[index++] = 0; + buffer[index++] = 0; return index; - } + } } } - + // If no value to serialize - return index; + return index; } /** @@ -1894,6 +1898,11 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct * @api public */ BSON.serialize = function(object, checkKeys, asBuffer, serializeFunctions) { + // Throw error if we are trying serialize an illegal type + if(object == null || typeof object != 'object' || Array.isArray(object)) + throw new Error("Only javascript objects supported"); + + // Emoty target buffer var buffer = null; // Calculate the size of the object var size = BSON.calculateObjectSize(object, serializeFunctions); @@ -1906,7 +1915,7 @@ BSON.serialize = function(object, checkKeys, asBuffer, serializeFunctions) { } else { buffer = new Array(size); } - + // If asBuffer is false use typed arrays BSON.serializeWithBufferAndIndex(object, checkKeys, buffer, 0, serializeFunctions); return buffer; @@ -1945,7 +1954,7 @@ var crc32 = function(string, start, end) { x = table[y]; crc = (crc >>> 8) ^ x; } - + return crc ^ (-1); } @@ -1956,6 +1965,7 @@ var crc32 = function(string, start, end) { * - **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized. * - **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse. * - **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function. + * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits * * @param {Buffer} data the buffer containing the serialized set of BSON documents. * @param {Number} startIndex the start index in the data Buffer where the deserialization is to start. @@ -1966,7 +1976,7 @@ var crc32 = function(string, start, end) { * @return {Number} returns the next index in the buffer after deserialization **x** numbers of documents. * @api public */ -BSON.deserializeStream = function(data, startIndex, numberOfDocuments, documents, docStartIndex, options) { +BSON.deserializeStream = function(data, startIndex, numberOfDocuments, documents, docStartIndex, options) { // if(numberOfDocuments !== documents.length) throw new Error("Number of expected results back is less than the number of documents"); options = options != null ? options : {}; var index = startIndex; @@ -1975,13 +1985,13 @@ BSON.deserializeStream = function(data, startIndex, numberOfDocuments, documents // Find size of the document var size = data[index] | data[index + 1] << 8 | data[index + 2] << 16 | data[index + 3] << 24; // Update options with index - options['index'] = index; + options['index'] = index; // Parse the document at this point documents[docStartIndex + i] = BSON.deserialize(data, options); // Adjust index by the document size index = index + size; } - + // Return object containing end index of parsing and list of documents return index; } @@ -1994,15 +2004,15 @@ BSON.deserializeStream = function(data, startIndex, numberOfDocuments, documents */ var isolateEvalWithHash = function(functionCache, hash, functionString, object) { // Contains the value we are going to set - var value = null; + var value = null; // Check for cache hit, eval if missing and return cached function - if(functionCache[hash] == null) { - eval("value = " + functionString); + if(functionCache[hash] == null) { + eval("value = " + functionString); functionCache[hash] = value; } // Set the object - return functionCache[hash].bind(object); + return functionCache[hash].bind(object); } /** @@ -2013,10 +2023,10 @@ var isolateEvalWithHash = function(functionCache, hash, functionString, object) */ var isolateEval = function(functionString) { // Contains the value we are going to set - var value = null; + var value = null; // Eval the function - eval("value = " + functionString); - return value; + eval("value = " + functionString); + return value; } /** @@ -2034,8 +2044,8 @@ var convertArraytoUtf8BinaryString = function(byteArray, startIndex, endIndex) { for(var i = startIndex; i < endIndex; i++) { result = result + String.fromCharCode(byteArray[i]); } - - return result; + + return result; }; /** @@ -2045,6 +2055,7 @@ var convertArraytoUtf8BinaryString = function(byteArray, startIndex, endIndex) { * - **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized. * - **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse. * - **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function. + * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits * * @param {Buffer} buffer the buffer containing the serialized set of BSON documents. * @param {Object} [options] additional options used for the deserialization. @@ -2052,16 +2063,17 @@ var convertArraytoUtf8BinaryString = function(byteArray, startIndex, endIndex) { * @return {Object} returns the deserialized Javascript Object. * @api public */ -BSON.deserialize = function(buffer, options, isArray) { +BSON.deserialize = function(buffer, options, isArray) { // Options options = options == null ? {} : options; var evalFunctions = options['evalFunctions'] == null ? false : options['evalFunctions']; var cacheFunctions = options['cacheFunctions'] == null ? false : options['cacheFunctions']; - var cacheFunctionsCrc32 = options['cacheFunctionsCrc32'] == null ? false : options['cacheFunctionsCrc32']; - + var cacheFunctionsCrc32 = options['cacheFunctionsCrc32'] == null ? false : options['cacheFunctionsCrc32']; + var promoteLongs = options['promoteLongs'] || true; + // Validate that we have at least 4 bytes of buffer if(buffer.length < 5) throw new Error("corrupt bson message < 5 bytes long"); - + // Set up index var index = typeof options['index'] == 'number' ? options['index'] : 0; // Reads in a C style string @@ -2083,7 +2095,7 @@ BSON.deserialize = function(buffer, options, isArray) { // Read the document size var size = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; - + // Ensure buffer is valid size if(size < 5 || size > buffer.length) throw new Error("corrupt bson message"); @@ -2103,7 +2115,7 @@ BSON.deserialize = function(buffer, options, isArray) { object[name] = new ObjectID(string); // Update index index = index + 12; - break; + break; case BSON.BSON_DATA_STRING: // Read the content of the field var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; @@ -2149,7 +2161,7 @@ BSON.deserialize = function(buffer, options, isArray) { binarySize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; } // Slice the data - object[name] = new Binary(buffer.slice(index, index + binarySize), subType); + object[name] = new Binary(buffer.slice(index, index + binarySize), subType); } else { var _buffer = typeof Uint8Array != 'undefined' ? new Uint8Array(new ArrayBuffer(binarySize)) : new Array(binarySize); // If we have subtype 2 skip the 4 bytes for the size @@ -2190,7 +2202,7 @@ BSON.deserialize = function(buffer, options, isArray) { var regExpOptions = readCStyleString(); // For each option add the corresponding one for javascript var optionsArray = new Array(regExpOptions.length); - + // Parse options for(var i = 0; i < regExpOptions.length; i++) { switch(regExpOptions[i]) { @@ -2202,20 +2214,24 @@ BSON.deserialize = function(buffer, options, isArray) { break; case 'i': optionsArray[i] = 'i'; - break; + break; } } - + object[name] = new RegExp(source, optionsArray.join('')); - break; + break; case BSON.BSON_DATA_LONG: // Unpack the low and high bits var lowBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; var highBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; // Create long object - var long = new Long(lowBits, highBits); - // Set the object - object[name] = long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) ? long.toNumber() : long; + var long = new Long(lowBits, highBits); + // Promote the long if possible + if(promoteLongs) { + object[name] = long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) ? long.toNumber() : long; + } else { + object[name] = long; + } break; case BSON.BSON_DATA_SYMBOL: // Read the content of the field @@ -2249,8 +2265,8 @@ BSON.deserialize = function(buffer, options, isArray) { // If we are evaluating the functions if(evalFunctions) { // Contains the value we are going to set - var value = null; - // If we have cache enabled let's look for the md5 of the function in the cache + var value = null; + // If we have cache enabled let's look for the md5 of the function in the cache if(cacheFunctions) { var hash = cacheFunctionsCrc32 ? crc32(functionString) : functionString; // Got to do this to avoid V8 deoptimizing the call due to finding eval @@ -2282,12 +2298,12 @@ BSON.deserialize = function(buffer, options, isArray) { var scopeObject = BSON.deserialize(buffer, options, false); // Adjust the index index = index + objectSize; - + // If we are evaluating the functions if(evalFunctions) { // Contains the value we are going to set - var value = null; - // If we have cache enabled let's look for the md5 of the function in the cache + var value = null; + // If we have cache enabled let's look for the md5 of the function in the cache if(cacheFunctions) { var hash = cacheFunctionsCrc32 ? crc32(functionString) : functionString; // Got to do this to avoid V8 deoptimizing the call due to finding eval @@ -2296,38 +2312,45 @@ BSON.deserialize = function(buffer, options, isArray) { // Set directly object[name] = isolateEval(functionString); } - + // Set the scope on the object object[name].scope = scopeObject; } else { object[name] = new Code(functionString, scopeObject); } - + // Add string to object break; } } - + // Check if we have a db ref object if(object['$id'] != null) object = new DBRef(object['$ref'], object['$id'], object['$db']); // Return the final objects return object; } - + /** * Check if key name is valid. * * @ignore * @api private */ -BSON.checkKey = function checkKey (key) { +BSON.checkKey = function checkKey (key, dollarsAndDotsOk) { if (!key.length) return; // Check if we have a legal key for the object - if('$' == key[0]) { - throw Error("key " + key + " must not start with '$'"); - } else if (!!~key.indexOf('.')) { - throw Error("key " + key + " must not contain '.'"); + if (!!~key.indexOf("\x00")) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw Error("key " + key + " must not contain null bytes"); + } + if (!dollarsAndDotsOk) { + if('$' == key[0]) { + throw Error("key " + key + " must not start with '$'"); + } else if (!!~key.indexOf('.')) { + throw Error("key " + key + " must not contain '.'"); + } } }; @@ -2392,7 +2415,7 @@ BSON.prototype.serialize = function(object, checkKeys, asBuffer, serializeFuncti * @return {Number} returns the number of bytes the BSON object will take up. * @api public */ -BSON.prototype.calculateObjectSize = function(object, serializeFunctions) { +BSON.prototype.calculateObjectSize = function(object, serializeFunctions) { return BSON.calculateObjectSize(object, serializeFunctions); } @@ -2426,6 +2449,7 @@ exports.Timestamp = Timestamp; exports.Double = Double; exports.MinKey = MinKey; exports.MaxKey = MaxKey; + }, @@ -3679,16 +3703,22 @@ var ObjectID = function ObjectID(id, _hex) { this.id = id; } else if(checkForHexRegExp.test(id)) { return ObjectID.createFromHexString(id); - } else if(!checkForHexRegExp.test(id)) { + } else { throw new Error("Value passed in is not a valid 24 character hex string"); } if(ObjectID.cacheHexString) this.__id = this.toHexString(); }; -// Allow usage of ObjectId aswell as ObjectID +// Allow usage of ObjectId as well as ObjectID var ObjectId = ObjectID; +// Precomputed hex table enables speedy hex string conversion +var hexTable = []; +for (var i = 0; i < 256; i++) { + hexTable[i] = (i <= 15 ? '0' : '') + i.toString(16); +} + /** * Return the ObjectID id as a 24 byte hex string representation * @@ -3698,16 +3728,10 @@ var ObjectId = ObjectID; ObjectID.prototype.toHexString = function() { if(ObjectID.cacheHexString && this.__id) return this.__id; - var hexString = '' - , number - , value; + var hexString = ''; - for (var index = 0, len = this.id.length; index < len; index++) { - value = BinaryParser.toByte(this.id[index]); - number = value <= 15 - ? '0' + value.toString(16) - : value.toString(16); - hexString = hexString + number; + for (var i = 0; i < this.id.length; i++) { + hexString += hexTable[this.id.charCodeAt(i)]; } if(ObjectID.cacheHexString) this.__id = hexString; @@ -3803,9 +3827,9 @@ ObjectID.prototype.equals = function equals (otherID) { } /** -* Returns the generation time in seconds that this ID was generated. +* Returns the generation date (accurate up to the second) that this ID was generated. * -* @return {Number} return number of seconds in the timestamp part of the 12 byte id. +* @return {Date} the generation date * @api public */ ObjectID.prototype.getTimestamp = function() { @@ -3818,7 +3842,7 @@ ObjectID.prototype.getTimestamp = function() { * @ignore * @api private */ -ObjectID.index = 0; +ObjectID.index = parseInt(Math.random() * 0xFFFFFF, 10); ObjectID.createPk = function createPk () { return new ObjectID(); @@ -3889,6 +3913,7 @@ Object.defineProperty(ObjectID.prototype, "generationTime", { */ exports.ObjectID = ObjectID; exports.ObjectId = ObjectID; + }, @@ -4812,3 +4837,7 @@ if(typeof module != 'undefined' && module.exports ){ bson(); } } + +if(typeof window != 'undefined' && typeof require == 'undefined'){ + window.require = bson.require; +} diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Makefile b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Makefile index 85f6192..84251eb 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Makefile +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Makefile @@ -49,7 +49,7 @@ all_deps := # export LINK=g++ # # This will allow make to invoke N linker processes as specified in -jN. -LINK ?= ./gyp-mac-tool flock $(builddir)/linker.lock $(CXX) +LINK ?= flock $(builddir)/linker.lock $(CXX.target) CC.target ?= $(CC) CFLAGS.target ?= $(CFLAGS) @@ -134,34 +134,6 @@ cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $ quiet_cmd_cxx = CXX($(TOOLSET)) $@ cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_objc = CXX($(TOOLSET)) $@ -cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< - -quiet_cmd_objcxx = CXX($(TOOLSET)) $@ -cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# Commands for precompiled header files. -quiet_cmd_pch_c = CXX($(TOOLSET)) $@ -cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ -cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_m = CXX($(TOOLSET)) $@ -cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< -quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ -cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# gyp-mac-tool is written next to the root Makefile by gyp. -# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd -# already. -quiet_cmd_mac_tool = MACTOOL $(4) $< -cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" - -quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ -cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) - -quiet_cmd_infoplist = INFOPLIST $@ -cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" - quiet_cmd_touch = TOUCH $@ cmd_touch = touch $@ @@ -169,21 +141,39 @@ quiet_cmd_copy = COPY $@ # send stderr to /dev/null to ignore messages when linking directories. cmd_copy = rm -rf "$@" && cp -af "$<" "$@" -quiet_cmd_alink = LIBTOOL-STATIC $@ -cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^) +quiet_cmd_alink = AR($(TOOLSET)) $@ +cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) +quiet_cmd_alink_thin = AR($(TOOLSET)) $@ +cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) + +# Due to circular dependencies between libraries :(, we wrap the +# special "figure out circular dependencies" flags around the entire +# input list during linking. quiet_cmd_link = LINK($(TOOLSET)) $@ -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) +cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS) -# TODO(thakis): Find out and document the difference between shared_library and -# loadable_module on mac. +# We support two kinds of shared objects (.so): +# 1) shared_library, which is just bundling together many dependent libraries +# into a link line. +# 2) loadable_module, which is generating a module intended for dlopen(). +# +# They differ only slightly: +# In the former case, we want to package all dependent code into the .so. +# In the latter case, we want to package just the API exposed by the +# outermost module. +# This means shared_library uses --whole-archive, while loadable_module doesn't. +# (Note that --whole-archive is incompatible with the --start-group used in +# normal linking.) + +# Other shared-object link notes: +# - Set SONAME to the library filename so our binaries don't reference +# the local, absolute paths used on the link command-line. quiet_cmd_solink = SOLINK($(TOOLSET)) $@ -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) +cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) -# TODO(thakis): The solink_module rule is likely wrong. Xcode seems to pass -# -bundle -single_module here (for osmesa.so). quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ -cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) +cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS) # Define an escape_quotes function to escape single quotes. @@ -222,15 +212,14 @@ command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ # $| -- order-only dependencies prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) -# Helper that executes all postbuilds, and deletes the output file when done -# if any of the postbuilds failed. +# Helper that executes all postbuilds until one fails. define do_postbuilds @E=0;\ for p in $(POSTBUILDS); do\ eval $$p;\ - F=$$?;\ - if [ $$F -ne 0 ]; then\ - E=$$F;\ + E=$$?;\ + if [ $$E -ne 0 ]; then\ + break;\ fi;\ done;\ if [ $$E -ne 0 ]; then\ @@ -249,7 +238,7 @@ define do_cmd $(if $(or $(command_changed),$(prereq_changed)), @$(call exact_echo, $($(quiet)cmd_$(1))) @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" - $(if $(findstring flock,$(word 2,$(cmd_$1))), + $(if $(findstring flock,$(word 1,$(cmd_$1))), @$(cmd_$(1)) @echo " $(quiet_cmd_$(1)): Finished", @$(cmd_$(1)) @@ -287,10 +276,6 @@ $(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD @$(call do_cmd,cxx,1) $(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) $(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD @$(call do_cmd,cc,1) $(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD @@ -305,10 +290,6 @@ $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD @$(call do_cmd,cxx,1) $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD @$(call do_cmd,cc,1) $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD @@ -322,10 +303,6 @@ $(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD @$(call do_cmd,cxx,1) $(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) $(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD @$(call do_cmd,cc,1) $(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD @@ -339,8 +316,8 @@ ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ endif quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = /usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." -I/Users/rossgallagher/Development/Restify-oauth/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/config.gypi -I/usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/Users/rossgallagher/.node-gyp/0.10.10/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/rossgallagher/.node-gyp/0.10.10" "-Dmodule_root_dir=/Users/rossgallagher/Development/Restify-oauth/node_modules/mongoose/node_modules/mongodb/node_modules/bson" binding.gyp -Makefile: $(srcdir)/../../../../../../../../.node-gyp/0.10.10/common.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(srcdir)/../../../../../../../../../../usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi +cmd_regen_makefile = /home/geoff/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." -I/home/geoff/www/node-restify-oauth2-mongodb/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/config.gypi -I/home/geoff/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/home/geoff/.node-gyp/0.10.18/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/home/geoff/.node-gyp/0.10.18" "-Dmodule_root_dir=/home/geoff/www/node-restify-oauth2-mongodb/node_modules/mongoose/node_modules/mongodb/node_modules/bson" binding.gyp +Makefile: $(srcdir)/../../../../../../../../.node-gyp/0.10.18/common.gypi $(srcdir)/../../../../../../../../local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(call do_cmd,regen_makefile) # "all" is a concatenation of the "all" targets from all the included diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/.deps/Release/bson.node.d b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/.deps/Release/bson.node.d index 396b6bf..866c155 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/.deps/Release/bson.node.d +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/.deps/Release/bson.node.d @@ -1 +1 @@ -cmd_Release/bson.node := ./gyp-mac-tool flock ./Release/linker.lock c++ -shared -Wl,-search_paths_first -mmacosx-version-min=10.5 -arch x86_64 -L./Release -install_name @rpath/bson.node -o Release/bson.node Release/obj.target/bson/ext/bson.o -undefined dynamic_lookup +cmd_Release/bson.node := rm -rf "Release/bson.node" && cp -af "Release/obj.target/bson.node" "Release/bson.node" diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/.deps/Release/obj.target/bson/ext/bson.o.d b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/.deps/Release/obj.target/bson/ext/bson.o.d index 31cef7a..71c0b48 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/.deps/Release/obj.target/bson/ext/bson.o.d +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/.deps/Release/obj.target/bson/ext/bson.o.d @@ -1,24 +1,30 @@ -cmd_Release/obj.target/bson/ext/bson.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/rossgallagher/.node-gyp/0.10.10/src -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-rtti -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/bson/ext/bson.o.d.raw -c -o Release/obj.target/bson/ext/bson.o ../ext/bson.cc +cmd_Release/obj.target/bson/ext/bson.o := g++ '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/geoff/.node-gyp/0.10.18/src -I/home/geoff/.node-gyp/0.10.18/deps/uv/include -I/home/geoff/.node-gyp/0.10.18/deps/v8/include -I../node_modules/nan -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-rtti -MMD -MF ./Release/.deps/Release/obj.target/bson/ext/bson.o.d.raw -c -o Release/obj.target/bson/ext/bson.o ../ext/bson.cc Release/obj.target/bson/ext/bson.o: ../ext/bson.cc \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node_version.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node_buffer.h ../ext/bson.h + /home/geoff/.node-gyp/0.10.18/deps/v8/include/v8.h \ + /home/geoff/.node-gyp/0.10.18/deps/v8/include/v8stdint.h \ + /home/geoff/.node-gyp/0.10.18/src/node.h \ + /home/geoff/.node-gyp/0.10.18/deps/uv/include/uv.h \ + /home/geoff/.node-gyp/0.10.18/deps/uv/include/uv-private/uv-unix.h \ + /home/geoff/.node-gyp/0.10.18/deps/uv/include/uv-private/ngx-queue.h \ + /home/geoff/.node-gyp/0.10.18/deps/uv/include/uv-private/uv-linux.h \ + /home/geoff/.node-gyp/0.10.18/src/node_object_wrap.h \ + /home/geoff/.node-gyp/0.10.18/src/node.h \ + /home/geoff/.node-gyp/0.10.18/src/node_version.h \ + /home/geoff/.node-gyp/0.10.18/src/node_buffer.h ../ext/bson.h \ + /home/geoff/.node-gyp/0.10.18/src/node_object_wrap.h \ + ../node_modules/nan/nan.h ../ext/bson.cc: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node_version.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node_buffer.h: +/home/geoff/.node-gyp/0.10.18/deps/v8/include/v8.h: +/home/geoff/.node-gyp/0.10.18/deps/v8/include/v8stdint.h: +/home/geoff/.node-gyp/0.10.18/src/node.h: +/home/geoff/.node-gyp/0.10.18/deps/uv/include/uv.h: +/home/geoff/.node-gyp/0.10.18/deps/uv/include/uv-private/uv-unix.h: +/home/geoff/.node-gyp/0.10.18/deps/uv/include/uv-private/ngx-queue.h: +/home/geoff/.node-gyp/0.10.18/deps/uv/include/uv-private/uv-linux.h: +/home/geoff/.node-gyp/0.10.18/src/node_object_wrap.h: +/home/geoff/.node-gyp/0.10.18/src/node.h: +/home/geoff/.node-gyp/0.10.18/src/node_version.h: +/home/geoff/.node-gyp/0.10.18/src/node_buffer.h: ../ext/bson.h: +/home/geoff/.node-gyp/0.10.18/src/node_object_wrap.h: +../node_modules/nan/nan.h: diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/bson.node b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/bson.node index dc018cc..ad3a0ce 100755 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/bson.node and b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/bson.node differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/obj.target/bson/ext/bson.o b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/obj.target/bson/ext/bson.o index 06e6473..4e85bbe 100644 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/obj.target/bson/ext/bson.o and b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/Release/obj.target/bson/ext/bson.o differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/bson.target.mk b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/bson.target.mk index dd7079a..c437a4b 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/bson.target.mk +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/bson.target.mk @@ -3,7 +3,6 @@ TOOLSET := target TARGET := bson DEFS_Debug := \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ '-D_LARGEFILE_SOURCE' \ '-D_FILE_OFFSET_BITS=64' \ '-DBUILDING_NODE_EXTENSION' \ @@ -12,73 +11,57 @@ DEFS_Debug := \ # Flags passed to all source files. CFLAGS_Debug := \ - -O0 \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ + -fPIC \ -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter + -Wextra \ + -Wno-unused-parameter \ + -pthread \ + -m64 \ + -g \ + -O0 # Flags passed to only C files. -CFLAGS_C_Debug := \ - -fno-strict-aliasing +CFLAGS_C_Debug := # Flags passed to only C++ files. CFLAGS_CC_Debug := \ - -fno-rtti \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Debug := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Debug := + -fno-rtti INCS_Debug := \ - -I/Users/rossgallagher/.node-gyp/0.10.10/src \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include + -I/home/geoff/.node-gyp/0.10.18/src \ + -I/home/geoff/.node-gyp/0.10.18/deps/uv/include \ + -I/home/geoff/.node-gyp/0.10.18/deps/v8/include \ + -I$(srcdir)/node_modules/nan DEFS_Release := \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ '-D_LARGEFILE_SOURCE' \ '-D_FILE_OFFSET_BITS=64' \ '-DBUILDING_NODE_EXTENSION' # Flags passed to all source files. CFLAGS_Release := \ - -Os \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ + -fPIC \ -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter + -Wextra \ + -Wno-unused-parameter \ + -pthread \ + -m64 \ + -O2 \ + -fno-strict-aliasing \ + -fno-tree-vrp # Flags passed to only C files. -CFLAGS_C_Release := \ - -fno-strict-aliasing +CFLAGS_C_Release := # Flags passed to only C++ files. CFLAGS_CC_Release := \ - -fno-rtti \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Release := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Release := + -fno-rtti INCS_Release := \ - -I/Users/rossgallagher/.node-gyp/0.10.10/src \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include + -I/home/geoff/.node-gyp/0.10.18/src \ + -I/home/geoff/.node-gyp/0.10.18/deps/uv/include \ + -I/home/geoff/.node-gyp/0.10.18/deps/v8/include \ + -I$(srcdir)/node_modules/nan OBJS := \ $(obj).target/$(TARGET)/ext/bson.o @@ -91,8 +74,6 @@ all_deps += $(OBJS) $(OBJS): TOOLSET := $(TOOLSET) $(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) # Suffix rules, putting all outputs into $(obj). @@ -110,43 +91,37 @@ $(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD # End of this set of suffix rules ### Rules for final target. LDFLAGS_Debug := \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) \ - -install_name @rpath/bson.node - -LIBTOOLFLAGS_Debug := \ - -Wl,-search_paths_first + -pthread \ + -rdynamic \ + -m64 LDFLAGS_Release := \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) \ - -install_name @rpath/bson.node - -LIBTOOLFLAGS_Release := \ - -Wl,-search_paths_first + -pthread \ + -rdynamic \ + -m64 -LIBS := \ - -undefined dynamic_lookup +LIBS := -$(builddir)/bson.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/bson.node: LIBS := $(LIBS) -$(builddir)/bson.node: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/bson.node: TOOLSET := $(TOOLSET) -$(builddir)/bson.node: $(OBJS) FORCE_DO_CMD +$(obj).target/bson.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(obj).target/bson.node: LIBS := $(LIBS) +$(obj).target/bson.node: TOOLSET := $(TOOLSET) +$(obj).target/bson.node: $(OBJS) FORCE_DO_CMD $(call do_cmd,solink_module) -all_deps += $(builddir)/bson.node +all_deps += $(obj).target/bson.node # Add target alias .PHONY: bson bson: $(builddir)/bson.node +# Copy this to the executable output path. +$(builddir)/bson.node: TOOLSET := $(TOOLSET) +$(builddir)/bson.node: $(obj).target/bson.node FORCE_DO_CMD + $(call do_cmd,copy) + +all_deps += $(builddir)/bson.node # Short alias for building this executable. .PHONY: bson.node -bson.node: $(builddir)/bson.node +bson.node: $(obj).target/bson.node $(builddir)/bson.node # Add executable to "all" target. .PHONY: all diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/config.gypi b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/config.gypi index 6cc584c..19e2e41 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/config.gypi +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/config.gypi @@ -9,10 +9,10 @@ }, "variables": { "clang": 0, - "gcc_version": 42, + "gcc_version": 47, "host_arch": "x64", "node_install_npm": "true", - "node_prefix": "", + "node_prefix": "/home/geoff/local", "node_shared_cares": "false", "node_shared_http_parser": "false", "node_shared_libuv": "false", @@ -21,93 +21,94 @@ "node_shared_zlib": "false", "node_tag": "", "node_unsafe_optimizations": 0, - "node_use_dtrace": "true", + "node_use_dtrace": "false", "node_use_etw": "false", "node_use_openssl": "true", "node_use_perfctr": "false", + "node_use_systemtap": "false", "python": "/usr/bin/python", "target_arch": "x64", "v8_enable_gdbjit": 0, "v8_no_strict_aliasing": 1, - "v8_use_snapshot": "false", - "nodedir": "/Users/rossgallagher/.node-gyp/0.10.10", + "v8_use_snapshot": "true", + "nodedir": "/home/geoff/.node-gyp/0.10.18", "copy_dev_lib": "true", "standalone_static_library": 1, - "save_dev": "", - "browser": "", - "viewer": "man", - "rollback": "true", - "usage": "", - "globalignorefile": "/usr/local/etc/npmignore", - "init_author_url": "", - "shell": "/bin/bash", - "parseable": "", - "shrinkwrap": "true", - "userignorefile": "/Users/rossgallagher/.npmignore", - "cache_max": "null", - "init_author_email": "", + "cache_lock_stale": "60000", + "pre": "", "sign_git_tag": "", - "ignore": "", - "long": "", - "registry": "https://registry.npmjs.org/", - "fetch_retries": "2", - "npat": "", - "message": "%s", - "versions": "", - "globalconfig": "/usr/local/etc/npmrc", "always_auth": "", - "cache_lock_retries": "10", - "fetch_retry_mintimeout": "10000", - "proprietary_attribs": "true", - "coverage": "", - "json": "", - "pre": "", - "description": "true", - "engine_strict": "", - "https_proxy": "", - "init_module": "/Users/rossgallagher/.npm-init.js", - "userconfig": "/Users/rossgallagher/.npmrc", - "npaturl": "http://npat.npmjs.org/", - "node_version": "v0.10.10", - "user": "", - "editor": "vi", - "save": "", - "tag": "latest", - "global": "", - "optional": "true", - "username": "", + "user_agent": "node/v0.10.18 linux x64", "bin_links": "true", + "description": "true", + "fetch_retries": "2", + "init_version": "0.0.0", + "user": "1000", "force": "", - "searchopts": "", + "ignore": "", + "cache_min": "10", + "editor": "vi", + "rollback": "true", + "cache_max": "null", + "userconfig": "/home/geoff/.npmrc", + "coverage": "", + "engine_strict": "", + "init_author_name": "", + "init_author_url": "", + "tmp": "/home/geoff/tmp", + "userignorefile": "/home/geoff/.npmignore", + "yes": "", "depth": "null", + "save_dev": "", + "usage": "", + "https_proxy": "", + "onload_script": "", "rebuild_bundle": "true", + "save_bundle": "", + "shell": "/bin/bash", + "prefix": "/home/geoff/local", + "registry": "https://registry.npmjs.org/", + "browser": "", + "cache_lock_wait": "10000", + "save_optional": "", + "searchopts": "", + "versions": "", + "cache": "/home/geoff/.npm", + "npaturl": "http://npat.npmjs.org/", "searchsort": "name", - "unicode": "true", - "yes": "", + "version": "", + "viewer": "man", + "color": "true", + "fetch_retry_mintimeout": "10000", + "umask": "18", "fetch_retry_maxtimeout": "60000", + "message": "%s", + "global": "", + "link": "", + "save": "", + "unicode": "true", + "long": "", + "production": "", + "unsafe_perm": "true", + "node_version": "v0.10.18", + "tag": "latest", + "shrinkwrap": "true", + "fetch_retry_factor": "10", + "npat": "", + "proprietary_attribs": "true", "strict_ssl": "true", + "username": "", "dev": "", - "fetch_retry_factor": "10", - "group": "20", - "cache_lock_stale": "60000", - "version": "", - "cache_min": "10", - "cache": "/Users/rossgallagher/.npm", + "globalconfig": "/home/geoff/local/etc/npmrc", + "init_module": "/home/geoff/.npm-init.js", + "parseable": "", + "globalignorefile": "/home/geoff/local/etc/npmignore", + "cache_lock_retries": "10", + "group": "1000", + "init_author_email": "", "searchexclude": "", - "color": "true", - "save_optional": "", - "user_agent": "node/v0.10.10 darwin x64", - "cache_lock_wait": "10000", - "production": "", - "save_bundle": "", - "init_version": "0.0.0", - "umask": "18", "git": "git", - "init_author_name": "", - "onload_script": "", - "tmp": "/var/folders/y_/7y5c4dls6d93p_qj1nhyp_100000gn/T/", - "unsafe_perm": "true", - "link": "", - "prefix": "/usr/local" + "optional": "true", + "json": "" } } diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/gyp-mac-tool b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/gyp-mac-tool deleted file mode 100755 index bf059c3..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/build/gyp-mac-tool +++ /dev/null @@ -1,211 +0,0 @@ -#!/usr/bin/env python -# Generated by gyp. Do not edit. -# Copyright (c) 2012 Google Inc. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Utility functions to perform Xcode-style build steps. - -These functions are executed via gyp-mac-tool when using the Makefile generator. -""" - -import fcntl -import os -import plistlib -import re -import shutil -import string -import subprocess -import sys - - -def main(args): - executor = MacTool() - exit_code = executor.Dispatch(args) - if exit_code is not None: - sys.exit(exit_code) - - -class MacTool(object): - """This class performs all the Mac tooling steps. The methods can either be - executed directly, or dispatched from an argument list.""" - - def Dispatch(self, args): - """Dispatches a string command to a method.""" - if len(args) < 1: - raise Exception("Not enough arguments") - - method = "Exec%s" % self._CommandifyName(args[0]) - return getattr(self, method)(*args[1:]) - - def _CommandifyName(self, name_string): - """Transforms a tool name like copy-info-plist to CopyInfoPlist""" - return name_string.title().replace('-', '') - - def ExecCopyBundleResource(self, source, dest): - """Copies a resource file to the bundle/Resources directory, performing any - necessary compilation on each resource.""" - extension = os.path.splitext(source)[1].lower() - if os.path.isdir(source): - # Copy tree. - if os.path.exists(dest): - shutil.rmtree(dest) - shutil.copytree(source, dest) - elif extension == '.xib': - return self._CopyXIBFile(source, dest) - elif extension == '.strings': - self._CopyStringsFile(source, dest) - else: - shutil.copyfile(source, dest) - - def _CopyXIBFile(self, source, dest): - """Compiles a XIB file with ibtool into a binary plist in the bundle.""" - tools_dir = os.environ.get('DEVELOPER_BIN_DIR', '/usr/bin') - args = [os.path.join(tools_dir, 'ibtool'), '--errors', '--warnings', - '--notices', '--output-format', 'human-readable-text', '--compile', - dest, source] - ibtool_section_re = re.compile(r'/\*.*\*/') - ibtool_re = re.compile(r'.*note:.*is clipping its content') - ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE) - current_section_header = None - for line in ibtoolout.stdout: - if ibtool_section_re.match(line): - current_section_header = line - elif not ibtool_re.match(line): - if current_section_header: - sys.stdout.write(current_section_header) - current_section_header = None - sys.stdout.write(line) - return ibtoolout.returncode - - def _CopyStringsFile(self, source, dest): - """Copies a .strings file using iconv to reconvert the input into UTF-16.""" - input_code = self._DetectInputEncoding(source) or "UTF-8" - fp = open(dest, 'w') - args = ['/usr/bin/iconv', '--from-code', input_code, '--to-code', - 'UTF-16', source] - subprocess.call(args, stdout=fp) - fp.close() - - def _DetectInputEncoding(self, file_name): - """Reads the first few bytes from file_name and tries to guess the text - encoding. Returns None as a guess if it can't detect it.""" - fp = open(file_name, 'rb') - try: - header = fp.read(3) - except e: - fp.close() - return None - fp.close() - if header.startswith("\xFE\xFF"): - return "UTF-16BE" - elif header.startswith("\xFF\xFE"): - return "UTF-16LE" - elif header.startswith("\xEF\xBB\xBF"): - return "UTF-8" - else: - return None - - def ExecCopyInfoPlist(self, source, dest): - """Copies the |source| Info.plist to the destination directory |dest|.""" - # Read the source Info.plist into memory. - fd = open(source, 'r') - lines = fd.read() - fd.close() - - # Go through all the environment variables and replace them as variables in - # the file. - for key in os.environ: - if key.startswith('_'): - continue - evar = '${%s}' % key - lines = string.replace(lines, evar, os.environ[key]) - - # Write out the file with variables replaced. - fd = open(dest, 'w') - fd.write(lines) - fd.close() - - # Now write out PkgInfo file now that the Info.plist file has been - # "compiled". - self._WritePkgInfo(dest) - - def _WritePkgInfo(self, info_plist): - """This writes the PkgInfo file from the data stored in Info.plist.""" - plist = plistlib.readPlist(info_plist) - if not plist: - return - - # Only create PkgInfo for executable types. - package_type = plist['CFBundlePackageType'] - if package_type != 'APPL': - return - - # The format of PkgInfo is eight characters, representing the bundle type - # and bundle signature, each four characters. If that is missing, four - # '?' characters are used instead. - signature_code = plist.get('CFBundleSignature', '????') - if len(signature_code) != 4: # Wrong length resets everything, too. - signature_code = '?' * 4 - - dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo') - fp = open(dest, 'w') - fp.write('%s%s' % (package_type, signature_code)) - fp.close() - - def ExecFlock(self, lockfile, *cmd_list): - """Emulates the most basic behavior of Linux's flock(1).""" - # Rely on exception handling to report errors. - fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666) - fcntl.flock(fd, fcntl.LOCK_EX) - return subprocess.call(cmd_list) - - def ExecFilterLibtool(self, *cmd_list): - """Calls libtool and filters out 'libtool: file: foo.o has no symbols'.""" - libtool_re = re.compile(r'^libtool: file: .* has no symbols$') - libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE) - _, err = libtoolout.communicate() - for line in err.splitlines(): - if not libtool_re.match(line): - print >>sys.stderr, line - return libtoolout.returncode - - def ExecPackageFramework(self, framework, version): - """Takes a path to Something.framework and the Current version of that and - sets up all the symlinks.""" - # Find the name of the binary based on the part before the ".framework". - binary = os.path.basename(framework).split('.')[0] - - CURRENT = 'Current' - RESOURCES = 'Resources' - VERSIONS = 'Versions' - - if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): - # Binary-less frameworks don't seem to contain symlinks (see e.g. - # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). - return - - # Move into the framework directory to set the symlinks correctly. - pwd = os.getcwd() - os.chdir(framework) - - # Set up the Current version. - self._Relink(version, os.path.join(VERSIONS, CURRENT)) - - # Set up the root symlinks. - self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) - self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) - - # Back to where we were before! - os.chdir(pwd) - - def _Relink(self, dest, link): - """Creates a symlink to |dest| named |link|. If |link| already exists, - it is overwritten.""" - if os.path.lexists(link): - os.remove(link) - os.symlink(dest, link) - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/bson.cc b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/bson.cc index b910d79..90e2ef9 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/bson.cc +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/bson.cc @@ -27,8 +27,9 @@ #include #include #include +#include -#ifdef __sun +#if defined(__sun) || defined(_AIX) #include #endif @@ -37,6 +38,16 @@ using namespace v8; using namespace node; +void die(const char *message) { + if(errno) { + perror(message); + } else { + printf("ERROR: %s\n", message); + } + + exit(1); +} + //=========================================================================== void DataStream::WriteObjectId(const Handle& object, const Handle& key) @@ -54,9 +65,9 @@ void ThrowAllocatedStringException(size_t allocationSize, const char* format, .. va_list args; va_start(args, format); char* string = (char*) malloc(allocationSize); + if(string == NULL) die("Failed to allocate ThrowAllocatedStringException"); vsprintf(string, format, args); va_end(args); - throw string; } @@ -65,8 +76,17 @@ void DataStream::CheckKey(const Local& keyName) size_t keyLength = keyName->Utf8Length(); if(keyLength == 0) return; - char* keyStringBuffer = (char*) alloca(keyLength+1); + // Allocate space for the key, do not need to zero terminate as WriteUtf8 does it + char* keyStringBuffer = (char*) alloca(keyLength + 1); + // Write the key to the allocated buffer keyName->WriteUtf8(keyStringBuffer); + // Check for the zero terminator + char* terminator = strchr(keyStringBuffer, 0x00); + + // If the location is not at the end of the string we've got an illegal 0x00 byte somewhere + if(terminator != &keyStringBuffer[keyLength]) { + ThrowAllocatedStringException(64+keyLength, "key %s must not contain null bytes", keyStringBuffer); + } if(keyStringBuffer[0] == '$') { @@ -85,11 +105,7 @@ template void BSONSerializer::SerializeDocument(const Handle object = bson->GetSerializeObject(value); // Get the object property names - #if NODE_MAJOR_VERSION == 0 && NODE_MINOR_VERSION < 6 - Local propertyNames = object->GetPropertyNames(); - #else - Local propertyNames = object->GetOwnPropertyNames(); - #endif + Local propertyNames = object->GetPropertyNames(); // Length of the property int propertyLength = propertyNames->Length(); @@ -133,8 +149,26 @@ template void BSONSerializer::SerializeArray(const Handle& // This is templated so that we can use this function to both count the number of bytes, and to serialize those bytes. // The template approach eliminates almost all of the inspection of values unless they're required (eg. string lengths) // and ensures that there is always consistency between bytes counted and bytes written by design. -template void BSONSerializer::SerializeValue(void* typeLocation, const Handle& value) +template void BSONSerializer::SerializeValue(void* typeLocation, const Handle constValue) { + // Turn into local value + Local value = NanNew(constValue); + + // Check for toBSON function + if(value->IsObject()) { + Local object = value->ToObject(); + + // NanNew("toBSON") + // NanNew(BSON::_toBSONString) + + if(object->Has(NanNew("toBSON"))) { + const Local& toBSON = object->Get(NanNew("toBSON")); + if(!toBSON->IsFunction()) ThrowAllocatedStringException(64, "toBSON is not a function"); + value = Local::Cast(toBSON)->Call(object, 0, NULL); + } + } + + // Process all the values if(value->IsNumber()) { double doubleValue = value->NumberValue(); @@ -191,56 +225,56 @@ template void BSONSerializer::SerializeValue(void* typeLocation, else if(value->IsObject()) { const Local& object = value->ToObject(); - if(object->Has(bson->_bsontypeString)) + if(object->Has(NanNew(bson->_bsontypeString))) { - const Local& constructorString = object->GetConstructorName(); - if(bson->longString->StrictEquals(constructorString)) + const Local& constructorString = object->Get(NanNew(bson->_bsontypeString))->ToString(); + if(NanNew(bson->longString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_LONG); - this->WriteInt32(object, bson->_longLowString); - this->WriteInt32(object, bson->_longHighString); + this->WriteInt32(object, NanNew(bson->_longLowString)); + this->WriteInt32(object, NanNew(bson->_longHighString)); } - else if(bson->timestampString->StrictEquals(constructorString)) + else if(NanNew(bson->timestampString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_TIMESTAMP); - this->WriteInt32(object, bson->_longLowString); - this->WriteInt32(object, bson->_longHighString); + this->WriteInt32(object, NanNew(bson->_longLowString)); + this->WriteInt32(object, NanNew(bson->_longHighString)); } - else if(bson->objectIDString->StrictEquals(constructorString)) + else if(NanNew(bson->objectIDString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_OID); - this->WriteObjectId(object, bson->_objectIDidString); + this->WriteObjectId(object, NanNew(bson->_objectIDidString)); } - else if(bson->binaryString->StrictEquals(constructorString)) + else if(NanNew(bson->binaryString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_BINARY); - uint32_t length = object->Get(bson->_binaryPositionString)->Uint32Value(); - Local bufferObj = object->Get(bson->_binaryBufferString)->ToObject(); + uint32_t length = object->Get(NanNew(bson->_binaryPositionString))->Uint32Value(); + Local bufferObj = object->Get(NanNew(bson->_binaryBufferString))->ToObject(); this->WriteInt32(length); - this->WriteByte(object, bson->_binarySubTypeString); // write subtype + this->WriteByte(object, NanNew(bson->_binarySubTypeString)); // write subtype // If type 0x02 write the array length aswell - if(object->Get(bson->_binarySubTypeString)->Int32Value() == 0x02) { + if(object->Get(NanNew(bson->_binarySubTypeString))->Int32Value() == 0x02) { this->WriteInt32(length); } // Write the actual data this->WriteData(Buffer::Data(bufferObj), length); } - else if(bson->doubleString->StrictEquals(constructorString)) + else if(NanNew(bson->doubleString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_NUMBER); - this->WriteDouble(object, bson->_doubleValueString); + this->WriteDouble(object, NanNew(bson->_doubleValueString)); } - else if(bson->symbolString->StrictEquals(constructorString)) + else if(NanNew(bson->symbolString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_SYMBOL); - this->WriteLengthPrefixedString(object->Get(bson->_symbolValueString)->ToString()); + this->WriteLengthPrefixedString(object->Get(NanNew(bson->_symbolValueString))->ToString()); } - else if(bson->codeString->StrictEquals(constructorString)) + else if(NanNew(bson->codeString)->StrictEquals(constructorString)) { - const Local& function = object->Get(bson->_codeCodeString)->ToString(); - const Local& scope = object->Get(bson->_codeScopeString)->ToObject(); + const Local& function = object->Get(NanNew(bson->_codeCodeString))->ToString(); + const Local& scope = object->Get(NanNew(bson->_codeScopeString))->ToObject(); // For Node < 0.6.X use the GetPropertyNames #if NODE_MAJOR_VERSION == 0 && NODE_MINOR_VERSION < 6 @@ -263,7 +297,7 @@ template void BSONSerializer::SerializeValue(void* typeLocation, this->WriteLengthPrefixedString(function->ToString()); } } - else if(bson->dbrefString->StrictEquals(constructorString)) + else if(NanNew(bson->dbrefString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_OBJECT); @@ -271,13 +305,13 @@ template void BSONSerializer::SerializeValue(void* typeLocation, void* refType = this->BeginWriteType(); this->WriteData("$ref", 5); - SerializeValue(refType, object->Get(bson->_dbRefNamespaceString)); + SerializeValue(refType, object->Get(NanNew(bson->_dbRefNamespaceString))); void* idType = this->BeginWriteType(); this->WriteData("$id", 4); - SerializeValue(idType, object->Get(bson->_dbRefOidString)); + SerializeValue(idType, object->Get(NanNew(bson->_dbRefOidString))); - const Local& refDbValue = object->Get(bson->_dbRefDbString); + const Local& refDbValue = object->Get(NanNew(bson->_dbRefDbString)); if(!refDbValue->IsUndefined()) { void* dbType = this->BeginWriteType(); @@ -288,11 +322,11 @@ template void BSONSerializer::SerializeValue(void* typeLocation, this->WriteByte(0); this->CommitSize(dbRefSize); } - else if(bson->minKeyString->StrictEquals(constructorString)) + else if(NanNew(bson->minKeyString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_MIN_KEY); } - else if(bson->maxKeyString->StrictEquals(constructorString)) + else if(NanNew(bson->maxKeyString)->StrictEquals(constructorString)) { this->CommitType(typeLocation, BSON_TYPE_MAX_KEY); } @@ -302,7 +336,7 @@ template void BSONSerializer::SerializeValue(void* typeLocation, this->CommitType(typeLocation, BSON_TYPE_BINARY); #if NODE_MAJOR_VERSION == 0 && NODE_MINOR_VERSION < 3 - Buffer *buffer = ObjectWrap::Unwrap(value->ToObject()); + Local buffer = ObjectWrap::Unwrap(value->ToObject()); uint32_t length = object->length(); #else uint32_t length = Buffer::Length(value->ToObject()); @@ -345,11 +379,14 @@ BSONDeserializer::BSONDeserializer(BSONDeserializer& parentSerializer, size_t le if(*pEnd != '\0') ThrowAllocatedStringException(64, "Missing end of document marker '\\0'"); } -Local BSONDeserializer::ReadCString() +Handle BSONDeserializer::ReadCString() { char* start = p; - while(*p++) { } - return String::New(start, (int32_t) (p-start-1) ); + while(*p++ && (p < pEnd)) { } + if(p > pEnd) { + return NanNull(); + } + return NanNew(start, (int32_t) (p-start-1) ); } int32_t BSONDeserializer::ReadRegexOptions() @@ -384,7 +421,7 @@ Local BSONDeserializer::ReadString() uint32_t length = ReadUInt32(); char* start = p; p += length; - return String::New(start, length-1); + return NanNew(start, length-1); } Local BSONDeserializer::ReadObjectId() @@ -394,37 +431,39 @@ Local BSONDeserializer::ReadObjectId() { objectId[i] = *reinterpret_cast(p++); } - return String::New(objectId, 12); + return NanNew(objectId, 12); } -Handle BSONDeserializer::DeserializeDocument() +Handle BSONDeserializer::DeserializeDocument(bool promoteLongs) { uint32_t length = ReadUInt32(); if(length < 5) ThrowAllocatedStringException(64, "Bad BSON: Document is less than 5 bytes"); BSONDeserializer documentDeserializer(*this, length-4); - return documentDeserializer.DeserializeDocumentInternal(); + return documentDeserializer.DeserializeDocumentInternal(promoteLongs); } -Handle BSONDeserializer::DeserializeDocumentInternal() +Handle BSONDeserializer::DeserializeDocumentInternal(bool promoteLongs) { - Local returnObject = Object::New(); + Local returnObject = NanNew(); while(HasMoreData()) { BsonType type = (BsonType) ReadByte(); - const Local& name = ReadCString(); - const Handle& value = DeserializeValue(type); + const Handle& name = ReadCString(); + if(name->IsNull()) ThrowAllocatedStringException(64, "Bad BSON Document: illegal CString"); + // name->Is + const Handle& value = DeserializeValue(type, promoteLongs); returnObject->ForceSet(name, value); } if(p != pEnd) ThrowAllocatedStringException(64, "Bad BSON Document: Serialize consumed unexpected number of bytes"); // From JavaScript: // if(object['$id'] != null) object = new DBRef(object['$ref'], object['$id'], object['$db']); - if(returnObject->Has(bson->_dbRefIdRefString)) + if(returnObject->Has(NanNew(bson->_dbRefIdRefString))) { - Local argv[] = { returnObject->Get(bson->_dbRefRefString), returnObject->Get(bson->_dbRefIdRefString), returnObject->Get(bson->_dbRefDbRefString) }; - return bson->dbrefConstructor->NewInstance(3, argv); + Local argv[] = { returnObject->Get(NanNew(bson->_dbRefRefString)), returnObject->Get(NanNew(bson->_dbRefIdRefString)), returnObject->Get(NanNew(bson->_dbRefDbRefString)) }; + return NanNew(bson->dbrefConstructor)->NewInstance(3, argv); } else { @@ -432,24 +471,24 @@ Handle BSONDeserializer::DeserializeDocumentInternal() } } -Handle BSONDeserializer::DeserializeArray() +Handle BSONDeserializer::DeserializeArray(bool promoteLongs) { uint32_t length = ReadUInt32(); if(length < 5) ThrowAllocatedStringException(64, "Bad BSON: Array Document is less than 5 bytes"); BSONDeserializer documentDeserializer(*this, length-4); - return documentDeserializer.DeserializeArrayInternal(); + return documentDeserializer.DeserializeArrayInternal(promoteLongs); } -Handle BSONDeserializer::DeserializeArrayInternal() +Handle BSONDeserializer::DeserializeArrayInternal(bool promoteLongs) { - Local returnArray = Array::New(); + Local returnArray = NanNew(); while(HasMoreData()) { BsonType type = (BsonType) ReadByte(); uint32_t index = ReadIntegerString(); - const Handle& value = DeserializeValue(type); + const Handle& value = DeserializeValue(type, promoteLongs); returnArray->Set(index, value); } if(p != pEnd) ThrowAllocatedStringException(64, "Bad BSON Array: Serialize consumed unexpected number of bytes"); @@ -457,7 +496,7 @@ Handle BSONDeserializer::DeserializeArrayInternal() return returnArray; } -Handle BSONDeserializer::DeserializeValue(BsonType type) +Handle BSONDeserializer::DeserializeValue(BsonType type, bool promoteLongs) { switch(type) { @@ -465,56 +504,57 @@ Handle BSONDeserializer::DeserializeValue(BsonType type) return ReadString(); case BSON_TYPE_INT: - return Integer::New(ReadInt32()); + return NanNew(ReadInt32()); case BSON_TYPE_NUMBER: - return Number::New(ReadDouble()); + return NanNew(ReadDouble()); case BSON_TYPE_NULL: - return Null(); + return NanNull(); case BSON_TYPE_UNDEFINED: - return Undefined(); + return NanNull(); case BSON_TYPE_TIMESTAMP: { int32_t lowBits = ReadInt32(); int32_t highBits = ReadInt32(); - Local argv[] = { Int32::New(lowBits), Int32::New(highBits) }; - return bson->timestampConstructor->NewInstance(2, argv); + Local argv[] = { NanNew(lowBits), NanNew(highBits) }; + return NanNew(bson->timestampConstructor)->NewInstance(2, argv); } case BSON_TYPE_BOOLEAN: - return (ReadByte() != 0) ? True() : False(); + return (ReadByte() != 0) ? NanTrue() : NanFalse(); case BSON_TYPE_REGEXP: { - const Local& regex = ReadCString(); + const Handle& regex = ReadCString(); + if(regex->IsNull()) ThrowAllocatedStringException(64, "Bad BSON Document: illegal CString"); int32_t options = ReadRegexOptions(); - return RegExp::New(regex, (RegExp::Flags) options); + return NanNew(regex->ToString(), (RegExp::Flags) options); } case BSON_TYPE_CODE: { const Local& code = ReadString(); - const Local& scope = Object::New(); + const Local& scope = NanNew(); Local argv[] = { code, scope }; - return bson->codeConstructor->NewInstance(2, argv); + return NanNew(bson->codeConstructor)->NewInstance(2, argv); } case BSON_TYPE_CODE_W_SCOPE: { ReadUInt32(); const Local& code = ReadString(); - const Handle& scope = DeserializeDocument(); + const Handle& scope = DeserializeDocument(promoteLongs); Local argv[] = { code, scope->ToObject() }; - return bson->codeConstructor->NewInstance(2, argv); + return NanNew(bson->codeConstructor)->NewInstance(2, argv); } case BSON_TYPE_OID: { Local argv[] = { ReadObjectId() }; - return bson->objectIDConstructor->NewInstance(1, argv); + return NanNew(bson->objectIDConstructor)->NewInstance(1, argv); } case BSON_TYPE_BINARY: @@ -525,11 +565,11 @@ Handle BSONDeserializer::DeserializeValue(BsonType type) length = ReadInt32(); } - Buffer* buffer = Buffer::New(p, length); + Local buffer = NanNewBufferHandle(p, length); p += length; - Handle argv[] = { buffer->handle_, Uint32::New(subType) }; - return bson->binaryConstructor->NewInstance(2, argv); + Handle argv[] = { buffer, NanNew(subType) }; + return NanNew(bson->binaryConstructor)->NewInstance(2, argv); } case BSON_TYPE_LONG: @@ -538,53 +578,50 @@ Handle BSONDeserializer::DeserializeValue(BsonType type) int32_t lowBits = (int32_t) ReadInt32(); int32_t highBits = (int32_t) ReadInt32(); - // If value is < 2^53 and >-2^53 - if((highBits < 0x200000 || (highBits == 0x200000 && lowBits == 0)) && highBits >= -0x200000) { - // Adjust the pointer and read as 64 bit value - p -= 8; - // Read the 64 bit value - int64_t finalValue = (int64_t) ReadInt64(); - return Number::New(finalValue); - } - - Local argv[] = { Int32::New(lowBits), Int32::New(highBits) }; - return bson->longConstructor->NewInstance(2, argv); + // Promote long is enabled + if(promoteLongs) { + // If value is < 2^53 and >-2^53 + if((highBits < 0x200000 || (highBits == 0x200000 && lowBits == 0)) && highBits >= -0x200000) { + // Adjust the pointer and read as 64 bit value + p -= 8; + // Read the 64 bit value + int64_t finalValue = (int64_t) ReadInt64(); + return NanNew(finalValue); + } + } + + // Decode the Long value + Local argv[] = { NanNew(lowBits), NanNew(highBits) }; + return NanNew(bson->longConstructor)->NewInstance(2, argv); } case BSON_TYPE_DATE: - return Date::New((double) ReadInt64()); + return NanNew((double) ReadInt64()); case BSON_TYPE_ARRAY: - return DeserializeArray(); + return DeserializeArray(promoteLongs); case BSON_TYPE_OBJECT: - return DeserializeDocument(); + return DeserializeDocument(promoteLongs); case BSON_TYPE_SYMBOL: { const Local& string = ReadString(); Local argv[] = { string }; - return bson->symbolConstructor->NewInstance(1, argv); + return NanNew(bson->symbolConstructor)->NewInstance(1, argv); } case BSON_TYPE_MIN_KEY: - return bson->minKeyConstructor->NewInstance(); + return NanNew(bson->minKeyConstructor)->NewInstance(); case BSON_TYPE_MAX_KEY: - return bson->maxKeyConstructor->NewInstance(); + return NanNew(bson->maxKeyConstructor)->NewInstance(); default: ThrowAllocatedStringException(64, "Unhandled BSON Type: %d", type); } - return v8::Null(); -} - - -static Handle VException(const char *msg) -{ - HandleScope scope; - return ThrowException(Exception::Error(String::New(msg))); + return NanNull(); } Persistent BSON::constructor_template; @@ -592,61 +629,62 @@ Persistent BSON::constructor_template; BSON::BSON() : ObjectWrap() { // Setup pre-allocated comparision objects - _bsontypeString = Persistent::New(String::New("_bsontype")); - _longLowString = Persistent::New(String::New("low_")); - _longHighString = Persistent::New(String::New("high_")); - _objectIDidString = Persistent::New(String::New("id")); - _binaryPositionString = Persistent::New(String::New("position")); - _binarySubTypeString = Persistent::New(String::New("sub_type")); - _binaryBufferString = Persistent::New(String::New("buffer")); - _doubleValueString = Persistent::New(String::New("value")); - _symbolValueString = Persistent::New(String::New("value")); - _dbRefRefString = Persistent::New(String::New("$ref")); - _dbRefIdRefString = Persistent::New(String::New("$id")); - _dbRefDbRefString = Persistent::New(String::New("$db")); - _dbRefNamespaceString = Persistent::New(String::New("namespace")); - _dbRefDbString = Persistent::New(String::New("db")); - _dbRefOidString = Persistent::New(String::New("oid")); - _codeCodeString = Persistent::New(String::New("code")); - _codeScopeString = Persistent::New(String::New("scope")); - _toBSONString = Persistent::New(String::New("toBSON")); - - longString = Persistent::New(String::New("Long")); - objectIDString = Persistent::New(String::New("ObjectID")); - binaryString = Persistent::New(String::New("Binary")); - codeString = Persistent::New(String::New("Code")); - dbrefString = Persistent::New(String::New("DBRef")); - symbolString = Persistent::New(String::New("Symbol")); - doubleString = Persistent::New(String::New("Double")); - timestampString = Persistent::New(String::New("Timestamp")); - minKeyString = Persistent::New(String::New("MinKey")); - maxKeyString = Persistent::New(String::New("MaxKey")); + NanAssignPersistent(_bsontypeString, NanNew("_bsontype")); + NanAssignPersistent(_longLowString, NanNew("low_")); + NanAssignPersistent(_longHighString, NanNew("high_")); + NanAssignPersistent(_objectIDidString, NanNew("id")); + NanAssignPersistent(_binaryPositionString, NanNew("position")); + NanAssignPersistent(_binarySubTypeString, NanNew("sub_type")); + NanAssignPersistent(_binaryBufferString, NanNew("buffer")); + NanAssignPersistent(_doubleValueString, NanNew("value")); + NanAssignPersistent(_symbolValueString, NanNew("value")); + NanAssignPersistent(_dbRefRefString, NanNew("$ref")); + NanAssignPersistent(_dbRefIdRefString, NanNew("$id")); + NanAssignPersistent(_dbRefDbRefString, NanNew("$db")); + NanAssignPersistent(_dbRefNamespaceString, NanNew("namespace")); + NanAssignPersistent(_dbRefDbString, NanNew("db")); + NanAssignPersistent(_dbRefOidString, NanNew("oid")); + NanAssignPersistent(_codeCodeString, NanNew("code")); + NanAssignPersistent(_codeScopeString, NanNew("scope")); + NanAssignPersistent(_toBSONString, NanNew("toBSON")); + + NanAssignPersistent(longString, NanNew("Long")); + NanAssignPersistent(objectIDString, NanNew("ObjectID")); + NanAssignPersistent(binaryString, NanNew("Binary")); + NanAssignPersistent(codeString, NanNew("Code")); + NanAssignPersistent(dbrefString, NanNew("DBRef")); + NanAssignPersistent(symbolString, NanNew("Symbol")); + NanAssignPersistent(doubleString, NanNew("Double")); + NanAssignPersistent(timestampString, NanNew("Timestamp")); + NanAssignPersistent(minKeyString, NanNew("MinKey")); + NanAssignPersistent(maxKeyString, NanNew("MaxKey")); } void BSON::Initialize(v8::Handle target) { // Grab the scope of the call from Node - HandleScope scope; + NanScope(); // Define a new function template - Local t = FunctionTemplate::New(New); - constructor_template = Persistent::New(t); - constructor_template->InstanceTemplate()->SetInternalFieldCount(1); - constructor_template->SetClassName(String::NewSymbol("BSON")); + Local t = NanNew(New); + t->InstanceTemplate()->SetInternalFieldCount(1); + t->SetClassName(NanNew("BSON")); // Instance methods - NODE_SET_PROTOTYPE_METHOD(constructor_template, "calculateObjectSize", CalculateObjectSize); - NODE_SET_PROTOTYPE_METHOD(constructor_template, "serialize", BSONSerialize); - NODE_SET_PROTOTYPE_METHOD(constructor_template, "serializeWithBufferAndIndex", SerializeWithBufferAndIndex); - NODE_SET_PROTOTYPE_METHOD(constructor_template, "deserialize", BSONDeserialize); - NODE_SET_PROTOTYPE_METHOD(constructor_template, "deserializeStream", BSONDeserializeStream); + NODE_SET_PROTOTYPE_METHOD(t, "calculateObjectSize", CalculateObjectSize); + NODE_SET_PROTOTYPE_METHOD(t, "serialize", BSONSerialize); + NODE_SET_PROTOTYPE_METHOD(t, "serializeWithBufferAndIndex", SerializeWithBufferAndIndex); + NODE_SET_PROTOTYPE_METHOD(t, "deserialize", BSONDeserialize); + NODE_SET_PROTOTYPE_METHOD(t, "deserializeStream", BSONDeserializeStream); + + NanAssignPersistent(constructor_template, t); - target->ForceSet(String::NewSymbol("BSON"), constructor_template->GetFunction()); + target->ForceSet(NanNew("BSON"), t->GetFunction()); } // Create a new instance of BSON and passing it the existing context -Handle BSON::New(const Arguments &args) +NAN_METHOD(BSON::New) { - HandleScope scope; + NanScope(); // Check that we have an array if(args.Length() == 1 && args[0]->IsArray()) @@ -661,42 +699,42 @@ Handle BSON::New(const Arguments &args) uint32_t foundClassesMask = 0; - // Iterate over all entries to save the instantiate funtions + // Iterate over all entries to save the instantiate functions for(uint32_t i = 0; i < array->Length(); i++) { // Let's get a reference to the function Local func = Local::Cast(array->Get(i)); Local functionName = func->GetName()->ToString(); // Save the functions making them persistant handles (they don't get collected) - if(functionName->StrictEquals(bson->longString)) { - bson->longConstructor = Persistent::New(func); + if(functionName->StrictEquals(NanNew(bson->longString))) { + NanAssignPersistent(bson->longConstructor, func); foundClassesMask |= 1; - } else if(functionName->StrictEquals(bson->objectIDString)) { - bson->objectIDConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanNew(bson->objectIDString))) { + NanAssignPersistent(bson->objectIDConstructor, func); foundClassesMask |= 2; - } else if(functionName->StrictEquals(bson->binaryString)) { - bson->binaryConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanNew(bson->binaryString))) { + NanAssignPersistent(bson->binaryConstructor, func); foundClassesMask |= 4; - } else if(functionName->StrictEquals(bson->codeString)) { - bson->codeConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanNew(bson->codeString))) { + NanAssignPersistent(bson->codeConstructor, func); foundClassesMask |= 8; - } else if(functionName->StrictEquals(bson->dbrefString)) { - bson->dbrefConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanNew(bson->dbrefString))) { + NanAssignPersistent(bson->dbrefConstructor, func); foundClassesMask |= 0x10; - } else if(functionName->StrictEquals(bson->symbolString)) { - bson->symbolConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanNew(bson->symbolString))) { + NanAssignPersistent(bson->symbolConstructor, func); foundClassesMask |= 0x20; - } else if(functionName->StrictEquals(bson->doubleString)) { - bson->doubleConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanNew(bson->doubleString))) { + NanAssignPersistent(bson->doubleConstructor, func); foundClassesMask |= 0x40; - } else if(functionName->StrictEquals(bson->timestampString)) { - bson->timestampConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanNew(bson->timestampString))) { + NanAssignPersistent(bson->timestampConstructor, func); foundClassesMask |= 0x80; - } else if(functionName->StrictEquals(bson->minKeyString)) { - bson->minKeyConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanNew(bson->minKeyString))) { + NanAssignPersistent(bson->minKeyConstructor, func); foundClassesMask |= 0x100; - } else if(functionName->StrictEquals(bson->maxKeyString)) { - bson->maxKeyConstructor = Persistent::New(func); + } else if(functionName->StrictEquals(NanNew(bson->maxKeyString))) { + NanAssignPersistent(bson->maxKeyConstructor, func); foundClassesMask |= 0x200; } } @@ -704,20 +742,20 @@ Handle BSON::New(const Arguments &args) // Check if we have the right number of constructors otherwise throw an error if(foundClassesMask != 0x3ff) { delete bson; - return VException("Missing function constructor for either [Long/ObjectID/Binary/Code/DbRef/Symbol/Double/Timestamp/MinKey/MaxKey]"); + return NanThrowError("Missing function constructor for either [Long/ObjectID/Binary/Code/DbRef/Symbol/Double/Timestamp/MinKey/MaxKey]"); } else { bson->Wrap(args.This()); - return args.This(); + NanReturnValue(args.This()); } } else { - return VException("No types passed in"); + return NanThrowError("No types passed in"); } } else { - return VException("Argument passed in must be an array of types"); + return NanThrowTypeError("Argument passed in must be an array of types"); } } @@ -726,15 +764,25 @@ Handle BSON::New(const Arguments &args) //------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------ -Handle BSON::BSONDeserialize(const Arguments &args) +NAN_METHOD(BSON::BSONDeserialize) { - HandleScope scope; + NanScope(); + + // Fail if the first argument is not a string or a buffer + if(args.Length() > 1 && !args[0]->IsString() && !Buffer::HasInstance(args[0])) + return NanThrowError("First Argument must be a Buffer or String."); + + // Promote longs + bool promoteLongs = true; - // Ensure that we have an parameter - if(Buffer::HasInstance(args[0]) && args.Length() > 1) return VException("One argument required - buffer1."); - if(args[0]->IsString() && args.Length() > 1) return VException("One argument required - string1."); - // Throw an exception if the argument is not of type Buffer - if(!Buffer::HasInstance(args[0]) && !args[0]->IsString()) return VException("Argument must be a Buffer or String."); + // If we have an options object + if(args.Length() == 2 && args[1]->IsObject()) { + Local options = args[1]->ToObject(); + + if(options->Has(NanNew("promoteLongs"))) { + promoteLongs = options->Get(NanNew("promoteLongs"))->ToBoolean()->Value(); + } + } // Define pointer to data Local obj = args[0]->ToObject(); @@ -746,7 +794,7 @@ Handle BSON::BSONDeserialize(const Arguments &args) if(Buffer::HasInstance(obj)) { #if NODE_MAJOR_VERSION == 0 && NODE_MINOR_VERSION < 3 - Buffer *buffer = ObjectWrap::Unwrap(obj); + Local buffer = ObjectWrap::Unwrap(obj); char* data = buffer->data(); size_t length = buffer->length(); #else @@ -755,18 +803,19 @@ Handle BSON::BSONDeserialize(const Arguments &args) #endif // Validate that we have at least 5 bytes - if(length < 5) return VException("corrupt bson message < 5 bytes long"); + if(length < 5) return NanThrowError("corrupt bson message < 5 bytes long"); try { BSONDeserializer deserializer(bson, data, length); - return deserializer.DeserializeDocument(); + // deserializer.promoteLongs = promoteLongs; + NanReturnValue(deserializer.DeserializeDocument(promoteLongs)); } catch(char* exception) { - Handle error = VException(exception); + Local error = NanNew(exception); free(exception); - return error; + return NanThrowError(error); } } @@ -776,26 +825,28 @@ Handle BSON::BSONDeserialize(const Arguments &args) ssize_t len = DecodeBytes(args[0], BINARY); // Validate that we have at least 5 bytes - if(len < 5) return VException("corrupt bson message < 5 bytes long"); + if(len < 5) return NanThrowError("corrupt bson message < 5 bytes long"); // Let's define the buffer size char* data = (char *)malloc(len); + if(data == NULL) die("Failed to allocate char buffer for BSON serialization"); DecodeWrite(data, len, args[0], BINARY); try { BSONDeserializer deserializer(bson, data, len); - Handle result = deserializer.DeserializeDocument(); + // deserializer.promoteLongs = promoteLongs; + Handle result = deserializer.DeserializeDocument(promoteLongs); free(data); - return result; + NanReturnValue(result); } catch(char* exception) { - Handle error = VException(exception); + Local error = NanNew(exception); free(exception); free(data); - return error; + return NanThrowError(error); } } } @@ -803,9 +854,9 @@ Handle BSON::BSONDeserialize(const Arguments &args) Local BSON::GetSerializeObject(const Handle& argValue) { Local object = argValue->ToObject(); - if(object->Has(_toBSONString)) + if(object->Has(NanNew(_toBSONString))) { - const Local& toBSON = object->Get(_toBSONString); + const Local& toBSON = object->Get(NanNew(_toBSONString)); if(!toBSON->IsFunction()) ThrowAllocatedStringException(64, "toBSON is not a function"); Local result = Local::Cast(toBSON)->Call(object, 0, NULL); @@ -818,15 +869,18 @@ Local BSON::GetSerializeObject(const Handle& argValue) } } -Handle BSON::BSONSerialize(const Arguments &args) +NAN_METHOD(BSON::BSONSerialize) { - HandleScope scope; + NanScope(); + + if(args.Length() == 1 && !args[0]->IsObject()) return NanThrowError("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); + if(args.Length() == 2 && !args[0]->IsObject() && !args[1]->IsBoolean()) return NanThrowError("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); + if(args.Length() == 3 && !args[0]->IsObject() && !args[1]->IsBoolean() && !args[2]->IsBoolean()) return NanThrowError("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); + if(args.Length() == 4 && !args[0]->IsObject() && !args[1]->IsBoolean() && !args[2]->IsBoolean() && !args[3]->IsBoolean()) return NanThrowError("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean] or [object, boolean, boolean, boolean]"); + if(args.Length() > 4) return NanThrowError("One, two, tree or four arguments required - [object] or [object, boolean] or [object, boolean, boolean] or [object, boolean, boolean, boolean]"); - if(args.Length() == 1 && !args[0]->IsObject()) return VException("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); - if(args.Length() == 2 && !args[0]->IsObject() && !args[1]->IsBoolean()) return VException("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); - if(args.Length() == 3 && !args[0]->IsObject() && !args[1]->IsBoolean() && !args[2]->IsBoolean()) return VException("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean]"); - if(args.Length() == 4 && !args[0]->IsObject() && !args[1]->IsBoolean() && !args[2]->IsBoolean() && !args[3]->IsBoolean()) return VException("One, two or tree arguments required - [object] or [object, boolean] or [object, boolean, boolean] or [object, boolean, boolean, boolean]"); - if(args.Length() > 4) return VException("One, two, tree or four arguments required - [object] or [object, boolean] or [object, boolean, boolean] or [object, boolean, boolean, boolean]"); + // Check if we have an array as the object + if(args[0]->IsArray()) return NanThrowError("Only javascript objects supported"); // Unpack the BSON parser instance BSON *bson = ObjectWrap::Unwrap(args.This()); @@ -847,6 +901,7 @@ Handle BSON::BSONSerialize(const Arguments &args) // Allocate the memory needed for the serialization serialized_object = (char *)malloc(object_size); + if(serialized_object == NULL) die("Failed to allocate memory for object"); // Check if we have a boolean value bool checkKeys = args.Length() >= 3 && args[1]->IsBoolean() && args[1]->BooleanValue(); @@ -856,33 +911,33 @@ Handle BSON::BSONSerialize(const Arguments &args) catch(char *err_msg) { free(serialized_object); - Handle error = VException(err_msg); + Local error = NanNew(err_msg); free(err_msg); - return error; + return NanThrowError(error); } // If we have 3 arguments if(args.Length() == 3 || args.Length() == 4) { - Buffer *buffer = Buffer::New(serialized_object, object_size); + Local buffer = NanNewBufferHandle(serialized_object, object_size); free(serialized_object); - return scope.Close(buffer->handle_); + NanReturnValue(buffer); } else { Local bin_value = Encode(serialized_object, object_size, BINARY)->ToString(); free(serialized_object); - return bin_value; + NanReturnValue(bin_value); } } -Handle BSON::CalculateObjectSize(const Arguments &args) +NAN_METHOD(BSON::CalculateObjectSize) { - HandleScope scope; + NanScope(); // Ensure we have a valid object - if(args.Length() == 1 && !args[0]->IsObject()) return VException("One argument required - [object]"); - if(args.Length() == 2 && !args[0]->IsObject() && !args[1]->IsBoolean()) return VException("Two arguments required - [object, boolean]"); - if(args.Length() > 3) return VException("One or two arguments required - [object] or [object, boolean]"); + if(args.Length() == 1 && !args[0]->IsObject()) return NanThrowError("One argument required - [object]"); + if(args.Length() == 2 && !args[0]->IsObject() && !args[1]->IsBoolean()) return NanThrowError("Two arguments required - [object, boolean]"); + if(args.Length() > 3) return NanThrowError("One or two arguments required - [object] or [object, boolean]"); // Unpack the BSON parser instance BSON *bson = ObjectWrap::Unwrap(args.This()); @@ -891,18 +946,18 @@ Handle BSON::CalculateObjectSize(const Arguments &args) countSerializer.SerializeDocument(args[0]); // Return the object size - return scope.Close(Uint32::New((uint32_t) countSerializer.GetSerializeSize())); + NanReturnValue(NanNew((uint32_t) countSerializer.GetSerializeSize())); } -Handle BSON::SerializeWithBufferAndIndex(const Arguments &args) +NAN_METHOD(BSON::SerializeWithBufferAndIndex) { - HandleScope scope; + NanScope(); //BSON.serializeWithBufferAndIndex = function serializeWithBufferAndIndex(object, ->, buffer, index) { // Ensure we have the correct values - if(args.Length() > 5) return VException("Four or five parameters required [object, boolean, Buffer, int] or [object, boolean, Buffer, int, boolean]"); - if(args.Length() == 4 && !args[0]->IsObject() && !args[1]->IsBoolean() && !Buffer::HasInstance(args[2]) && !args[3]->IsUint32()) return VException("Four parameters required [object, boolean, Buffer, int]"); - if(args.Length() == 5 && !args[0]->IsObject() && !args[1]->IsBoolean() && !Buffer::HasInstance(args[2]) && !args[3]->IsUint32() && !args[4]->IsBoolean()) return VException("Four parameters required [object, boolean, Buffer, int, boolean]"); + if(args.Length() > 5) return NanThrowError("Four or five parameters required [object, boolean, Buffer, int] or [object, boolean, Buffer, int, boolean]"); + if(args.Length() == 4 && !args[0]->IsObject() && !args[1]->IsBoolean() && !Buffer::HasInstance(args[2]) && !args[3]->IsUint32()) return NanThrowError("Four parameters required [object, boolean, Buffer, int]"); + if(args.Length() == 5 && !args[0]->IsObject() && !args[1]->IsBoolean() && !Buffer::HasInstance(args[2]) && !args[3]->IsUint32() && !args[4]->IsBoolean()) return NanThrowError("Four parameters required [object, boolean, Buffer, int, boolean]"); uint32_t index; size_t object_size; @@ -923,50 +978,61 @@ Handle BSON::SerializeWithBufferAndIndex(const Arguments &args) dataSerializer.SerializeDocument(bson->GetSerializeObject(args[0])); object_size = dataSerializer.GetSerializeSize(); - if(object_size + index > length) return VException("Serious error - overflowed buffer!!"); + if(object_size + index > length) return NanThrowError("Serious error - overflowed buffer!!"); } catch(char *exception) { - Handle error = VException(exception); + Local error = NanNew(exception); free(exception); - return error; + return NanThrowError(error); } - return scope.Close(Uint32::New((uint32_t) (index + object_size - 1))); + NanReturnValue(NanNew((uint32_t) (index + object_size - 1))); } -Handle BSON::BSONDeserializeStream(const Arguments &args) +NAN_METHOD(BSON::BSONDeserializeStream) { - HandleScope scope; + NanScope(); // At least 3 arguments required - if(args.Length() < 5) return VException("Arguments required (Buffer(data), Number(index in data), Number(number of documents to deserialize), Array(results), Number(index in the array), Object(optional))"); + if(args.Length() < 5) return NanThrowError("Arguments required (Buffer(data), Number(index in data), Number(number of documents to deserialize), Array(results), Number(index in the array), Object(optional))"); // If the number of argumets equals 3 if(args.Length() >= 5) { - if(!Buffer::HasInstance(args[0])) return VException("First argument must be Buffer instance"); - if(!args[1]->IsUint32()) return VException("Second argument must be a positive index number"); - if(!args[2]->IsUint32()) return VException("Third argument must be a positive number of documents to deserialize"); - if(!args[3]->IsArray()) return VException("Fourth argument must be an array the size of documents to deserialize"); - if(!args[4]->IsUint32()) return VException("Sixth argument must be a positive index number"); + if(!Buffer::HasInstance(args[0])) return NanThrowError("First argument must be Buffer instance"); + if(!args[1]->IsUint32()) return NanThrowError("Second argument must be a positive index number"); + if(!args[2]->IsUint32()) return NanThrowError("Third argument must be a positive number of documents to deserialize"); + if(!args[3]->IsArray()) return NanThrowError("Fourth argument must be an array the size of documents to deserialize"); + if(!args[4]->IsUint32()) return NanThrowError("Sixth argument must be a positive index number"); } // If we have 4 arguments - if(args.Length() == 6 && !args[5]->IsObject()) return VException("Fifth argument must be an object with options"); + if(args.Length() == 6 && !args[5]->IsObject()) return NanThrowError("Fifth argument must be an object with options"); // Define pointer to data Local obj = args[0]->ToObject(); uint32_t numberOfDocuments = args[2]->Uint32Value(); uint32_t index = args[1]->Uint32Value(); uint32_t resultIndex = args[4]->Uint32Value(); + bool promoteLongs = true; + + // Check for the value promoteLongs in the options object + if(args.Length() == 6) { + Local options = args[5]->ToObject(); + + // Check if we have the promoteLong variable + if(options->Has(NanNew("promoteLongs"))) { + promoteLongs = options->Get(NanNew("promoteLongs"))->ToBoolean()->Value(); + } + } // Unpack the BSON parser instance BSON *bson = ObjectWrap::Unwrap(args.This()); // Unpack the buffer variable #if NODE_MAJOR_VERSION == 0 && NODE_MINOR_VERSION < 3 - Buffer *buffer = ObjectWrap::Unwrap(obj); + Local buffer = ObjectWrap::Unwrap(obj); char* data = buffer->data(); size_t length = buffer->length(); #else @@ -982,24 +1048,24 @@ Handle BSON::BSONDeserializeStream(const Arguments &args) { try { - documents->Set(i + resultIndex, deserializer.DeserializeDocument()); + documents->Set(i + resultIndex, deserializer.DeserializeDocument(promoteLongs)); } catch (char* exception) { - Handle error = VException(exception); + Local error = NanNew(exception); free(exception); - return error; + return NanThrowError(error); } } // Return new index of parsing - return scope.Close(Uint32::New((uint32_t) (index + deserializer.GetSerializeSize()))); + NanReturnValue(NanNew((uint32_t) (index + deserializer.GetSerializeSize()))); } // Exporting function extern "C" void init(Handle target) { - HandleScope scope; + NanScope(); BSON::Initialize(target); } diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/bson.h b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/bson.h index 72ae8cc..a7feff7 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/bson.h +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/bson.h @@ -5,11 +5,16 @@ //=========================================================================== +#ifdef __arm__ +#define USE_MISALIGNED_MEMORY_ACCESS 0 +#else #define USE_MISALIGNED_MEMORY_ACCESS 1 +#endif #include #include #include +#include "nan.h" using namespace v8; using namespace node; @@ -44,26 +49,26 @@ enum BsonType template class BSONSerializer; class BSON : public ObjectWrap { -public: +public: BSON(); ~BSON() {} static void Initialize(Handle target); - static Handle BSONDeserializeStream(const Arguments &args); + static NAN_METHOD(BSONDeserializeStream); // JS based objects - static Handle BSONSerialize(const Arguments &args); - static Handle BSONDeserialize(const Arguments &args); + static NAN_METHOD(BSONSerialize); + static NAN_METHOD(BSONDeserialize); - // Calculate size of function - static Handle CalculateObjectSize(const Arguments &args); - static Handle SerializeWithBufferAndIndex(const Arguments &args); + // Calculate size of function + static NAN_METHOD(CalculateObjectSize); + static NAN_METHOD(SerializeWithBufferAndIndex); // Constructor used for creating new BSON objects from C++ static Persistent constructor_template; private: - static Handle New(const Arguments &args); + static NAN_METHOD(New); static Handle deserialize(BSON *bson, char *data, uint32_t dataLength, uint32_t startIndex, bool is_array_item); // BSON type instantiate functions @@ -214,7 +219,7 @@ template class BSONSerializer : public T void SerializeDocument(const Handle& value); void SerializeArray(const Handle& value); - void SerializeValue(void* typeLocation, const Handle& value); + void SerializeValue(void* typeLocation, const Handle value); private: bool checkKeys; @@ -230,10 +235,10 @@ class BSONDeserializer BSONDeserializer(BSON* aBson, char* data, size_t length); BSONDeserializer(BSONDeserializer& parentSerializer, size_t length); - Handle DeserializeDocument(); + Handle DeserializeDocument(bool promoteLongs); bool HasMoreData() const { return p < pEnd; } - Local ReadCString(); + Handle ReadCString(); uint32_t ReadIntegerString(); int32_t ReadRegexOptions(); Local ReadString(); @@ -255,10 +260,10 @@ class BSONDeserializer size_t GetSerializeSize() const { return p - pStart; } private: - Handle DeserializeArray(); - Handle DeserializeValue(BsonType type); - Handle DeserializeDocumentInternal(); - Handle DeserializeArrayInternal(); + Handle DeserializeArray(bool promoteLongs); + Handle DeserializeValue(BsonType type, bool promoteLongs); + Handle DeserializeDocumentInternal(bool promoteLongs); + Handle DeserializeArrayInternal(bool promoteLongs); BSON* bson; char* const pStart; diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js index 85e243c..af4d9a5 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/index.js @@ -1,12 +1,22 @@ var bson = null; -// Load the precompiled win32 binary -if(process.platform == "win32" && process.arch == "x64") { - bson = require('./win32/x64/bson'); -} else if(process.platform == "win32" && process.arch == "ia32") { - bson = require('./win32/ia32/bson'); -} else { - bson = require('../build/Release/bson'); +try { + // Load the precompiled win32 binary + if(process.platform == "win32" && process.arch == "x64") { + bson = require('./win32/x64/bson'); + } else if(process.platform == "win32" && process.arch == "ia32") { + bson = require('./win32/ia32/bson'); + } else { + bson = require('../build/Release/bson'); + } +} catch(err) { + // Attempt to load the release bson version + try { + bson = require('../build/Release/bson'); + } catch (err) { + console.error("js-bson: Failed to load c++ bson extension, using pure JS version"); + bson = require('../lib/bson/bson'); + } } exports.BSON = bson.BSON; diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/win32/ia32/bson.node b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/win32/ia32/bson.node index b27819b..7f54835 100644 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/win32/ia32/bson.node and b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/win32/ia32/bson.node differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/win32/x64/bson.node b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/win32/x64/bson.node index a544c8e..f01f8be 100644 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/win32/x64/bson.node and b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/ext/win32/x64/bson.node differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/binary.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/binary.js index 82d4d04..4302414 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/binary.js +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/binary.js @@ -236,6 +236,10 @@ Binary.prototype.read = function read(position, length) { */ Binary.prototype.value = function value(asRaw) { asRaw = asRaw == null ? false : asRaw; + + // Optimize to serialize for the situation where the data == size of buffer + if(asRaw && typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer) && this.buffer.length == this.position) + return this.buffer; // If it's a node.js buffer object if(typeof Buffer != 'undefined' && Buffer.isBuffer(this.buffer)) { diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/bson.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/bson.js index 57fdd79..e0590e8 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/bson.js +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/bson.js @@ -46,146 +46,152 @@ var JS_INT_MIN_LONG = Long.fromNumber(-0x20000000000000); // Any integer down t /** * Number BSON Type - * + * * @classconstant BSON_DATA_NUMBER **/ BSON.BSON_DATA_NUMBER = 1; /** * String BSON Type - * + * * @classconstant BSON_DATA_STRING **/ BSON.BSON_DATA_STRING = 2; /** * Object BSON Type - * + * * @classconstant BSON_DATA_OBJECT **/ BSON.BSON_DATA_OBJECT = 3; /** * Array BSON Type - * + * * @classconstant BSON_DATA_ARRAY **/ BSON.BSON_DATA_ARRAY = 4; /** * Binary BSON Type - * + * * @classconstant BSON_DATA_BINARY **/ BSON.BSON_DATA_BINARY = 5; +/** + * Binary BSON Type + * + * @classconstant BSON_DATA_UNDEFINED + **/ +BSON.BSON_DATA_UNDEFINED = 6; /** * ObjectID BSON Type - * + * * @classconstant BSON_DATA_OID **/ BSON.BSON_DATA_OID = 7; /** * Boolean BSON Type - * + * * @classconstant BSON_DATA_BOOLEAN **/ BSON.BSON_DATA_BOOLEAN = 8; /** * Date BSON Type - * + * * @classconstant BSON_DATA_DATE **/ BSON.BSON_DATA_DATE = 9; /** * null BSON Type - * + * * @classconstant BSON_DATA_NULL **/ BSON.BSON_DATA_NULL = 10; /** * RegExp BSON Type - * + * * @classconstant BSON_DATA_REGEXP **/ BSON.BSON_DATA_REGEXP = 11; /** * Code BSON Type - * + * * @classconstant BSON_DATA_CODE **/ BSON.BSON_DATA_CODE = 13; /** * Symbol BSON Type - * + * * @classconstant BSON_DATA_SYMBOL **/ BSON.BSON_DATA_SYMBOL = 14; /** * Code with Scope BSON Type - * + * * @classconstant BSON_DATA_CODE_W_SCOPE **/ BSON.BSON_DATA_CODE_W_SCOPE = 15; /** * 32 bit Integer BSON Type - * + * * @classconstant BSON_DATA_INT **/ BSON.BSON_DATA_INT = 16; /** * Timestamp BSON Type - * + * * @classconstant BSON_DATA_TIMESTAMP **/ BSON.BSON_DATA_TIMESTAMP = 17; /** * Long BSON Type - * + * * @classconstant BSON_DATA_LONG **/ BSON.BSON_DATA_LONG = 18; /** * MinKey BSON Type - * + * * @classconstant BSON_DATA_MIN_KEY **/ BSON.BSON_DATA_MIN_KEY = 0xff; /** * MaxKey BSON Type - * + * * @classconstant BSON_DATA_MAX_KEY **/ BSON.BSON_DATA_MAX_KEY = 0x7f; /** * Binary Default Type - * + * * @classconstant BSON_BINARY_SUBTYPE_DEFAULT **/ BSON.BSON_BINARY_SUBTYPE_DEFAULT = 0; /** * Binary Function Type - * + * * @classconstant BSON_BINARY_SUBTYPE_FUNCTION **/ BSON.BSON_BINARY_SUBTYPE_FUNCTION = 1; /** * Binary Byte Array Type - * + * * @classconstant BSON_BINARY_SUBTYPE_BYTE_ARRAY **/ BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; /** * Binary UUID Type - * + * * @classconstant BSON_BINARY_SUBTYPE_UUID **/ BSON.BSON_BINARY_SUBTYPE_UUID = 3; /** * Binary MD5 Type - * + * * @classconstant BSON_BINARY_SUBTYPE_MD5 **/ BSON.BSON_BINARY_SUBTYPE_MD5 = 4; /** * Binary User Defined Type - * + * * @classconstant BSON_BINARY_SUBTYPE_USER_DEFINED **/ BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; @@ -200,7 +206,7 @@ BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; */ BSON.calculateObjectSize = function calculateObjectSize(object, serializeFunctions) { var totalLength = (4 + 1); - + if(Array.isArray(object)) { for(var i = 0; i < object.length; i++) { totalLength += calculateElement(i.toString(), object[i], serializeFunctions) @@ -210,12 +216,12 @@ BSON.calculateObjectSize = function calculateObjectSize(object, serializeFunctio if(object.toBSON) { object = object.toBSON(); } - + // Calculate size for(var key in object) { totalLength += calculateElement(key, object[key], serializeFunctions) } - } + } return totalLength; } @@ -227,8 +233,13 @@ BSON.calculateObjectSize = function calculateObjectSize(object, serializeFunctio function calculateElement(name, value, serializeFunctions) { var isBuffer = typeof Buffer !== 'undefined'; + // If we have toBSON defined, override the current object + if(value && value.toBSON){ + value = value.toBSON(); + } + switch(typeof value) { - case 'string': + case 'string': return 1 + (!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1 + 4 + (!isBuffer ? numberOfBytes(value) : Buffer.byteLength(value, 'utf8')) + 1; case 'number': if(Math.floor(value) === value && value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { @@ -244,7 +255,7 @@ function calculateElement(name, value, serializeFunctions) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (1); case 'boolean': return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (1 + 1); - case 'object': + case 'object': if(value == null || value instanceof MinKey || value instanceof MaxKey || value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (1); } else if(value instanceof ObjectID || value['_bsontype'] == 'ObjectID') { @@ -253,22 +264,22 @@ function calculateElement(name, value, serializeFunctions) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (8 + 1); } else if(typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (1 + 4 + 1) + value.length; - } else if(value instanceof Long || value instanceof Double || value instanceof Timestamp + } else if(value instanceof Long || value instanceof Double || value instanceof Timestamp || value['_bsontype'] == 'Long' || value['_bsontype'] == 'Double' || value['_bsontype'] == 'Timestamp') { - return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (8 + 1); + return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (8 + 1); } else if(value instanceof Code || value['_bsontype'] == 'Code') { // Calculate size depending on the availability of a scope if(value.scope != null && Object.keys(value.scope).length > 0) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + 4 + 4 + (!isBuffer ? numberOfBytes(value.code.toString()) : Buffer.byteLength(value.code.toString(), 'utf8')) + 1 + BSON.calculateObjectSize(value.scope, serializeFunctions); } else { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + 4 + (!isBuffer ? numberOfBytes(value.code.toString()) : Buffer.byteLength(value.code.toString(), 'utf8')) + 1; - } + } } else if(value instanceof Binary || value['_bsontype'] == 'Binary') { // Check what kind of subtype we have if(value.sub_type == Binary.SUBTYPE_BYTE_ARRAY) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (value.position + 1 + 4 + 1 + 4); } else { - return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (value.position + 1 + 4 + 1); + return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + (value.position + 1 + 4 + 1); } } else if(value instanceof Symbol || value['_bsontype'] == 'Symbol') { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + ((!isBuffer ? numberOfBytes(value.value) : Buffer.byteLength(value.value, 'utf8')) + 4 + 1 + 1); @@ -283,13 +294,13 @@ function calculateElement(name, value, serializeFunctions) { if(null != value.db) { ordered_values['$db'] = value.db; } - + return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + BSON.calculateObjectSize(ordered_values, serializeFunctions); } else if(value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]') { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + (!isBuffer ? numberOfBytes(value.source) : Buffer.byteLength(value.source, 'utf8')) + 1 - + (value.global ? 1 : 0) + (value.ignoreCase ? 1 : 0) + (value.multiline ? 1 : 0) + 1 - } else { - return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + BSON.calculateObjectSize(value, serializeFunctions) + 1; + + (value.global ? 1 : 0) + (value.ignoreCase ? 1 : 0) + (value.multiline ? 1 : 0) + 1 + } else { + return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + BSON.calculateObjectSize(value, serializeFunctions) + 1; } case 'function': // WTF for 0.4.X where typeof /someregexp/ === 'function' @@ -301,10 +312,10 @@ function calculateElement(name, value, serializeFunctions) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + 4 + 4 + (!isBuffer ? numberOfBytes(value.toString()) : Buffer.byteLength(value.toString(), 'utf8')) + 1 + BSON.calculateObjectSize(value.scope, serializeFunctions); } else if(serializeFunctions) { return (name != null ? ((!isBuffer ? numberOfBytes(name) : Buffer.byteLength(name, 'utf8')) + 1) : 0) + 1 + 4 + (!isBuffer ? numberOfBytes(value.toString()) : Buffer.byteLength(value.toString(), 'utf8')) + 1; - } + } } } - + return 0; } @@ -325,10 +336,10 @@ BSON.serializeWithBufferAndIndex = function serializeWithBufferAndIndex(object, // Write end information (length of the object) var size = buffer.length; // Write the size of the object - buffer[index++] = size & 0xff; + buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; return serializeObject(object, checkKeys, buffer, index, serializeFunctions) - 1; } @@ -337,6 +348,12 @@ BSON.serializeWithBufferAndIndex = function serializeWithBufferAndIndex(object, * @api private */ var serializeObject = function(object, checkKeys, buffer, index, serializeFunctions) { + if(object.toBSON) { + if(typeof object.toBSON != 'function') throw new Error("toBSON is not a function"); + object = object.toBSON(); + if(object != null && typeof object != 'object') throw new Error("toBSON function did not return an object"); + } + // Process the object if(Array.isArray(object)) { for(var i = 0; i < object.length; i++) { @@ -347,19 +364,20 @@ var serializeObject = function(object, checkKeys, buffer, index, serializeFuncti if(object.toBSON) { object = object.toBSON(); } - + // Serialize the object - for(var key in object) { + for(var key in object) { // Check the key and throw error if it's illegal - if(checkKeys == true && (key != '$db' && key != '$ref' && key != '$id')) { - BSON.checkKey(key); + if (key != '$db' && key != '$ref' && key != '$id') { + // dollars and dots ok + BSON.checkKey(key, !checkKeys); } // Pack the element index = packElement(key, object[key], checkKeys, buffer, index, serializeFunctions); - } - } - + } + } + // Write zero buffer[index++] = 0; return index; @@ -368,12 +386,12 @@ var serializeObject = function(object, checkKeys, buffer, index, serializeFuncti var stringToBytes = function(str) { var ch, st, re = []; for (var i = 0; i < str.length; i++ ) { - ch = str.charCodeAt(i); // get char + ch = str.charCodeAt(i); // get char st = []; // set up "stack" do { st.push( ch & 0xFF ); // push byte to stack ch = ch >> 8; // shift value down by 1 byte - } + } while ( ch ); // add stack contents to result // done because chars have "wrong" endianness @@ -386,19 +404,19 @@ var stringToBytes = function(str) { var numberOfBytes = function(str) { var ch, st, re = 0; for (var i = 0; i < str.length; i++ ) { - ch = str.charCodeAt(i); // get char + ch = str.charCodeAt(i); // get char st = []; // set up "stack" do { st.push( ch & 0xFF ); // push byte to stack ch = ch >> 8; // shift value down by 1 byte - } + } while ( ch ); // add stack contents to result // done because chars have "wrong" endianness re = re + st.length; } // return an array of bytes - return re; + return re; } /** @@ -424,25 +442,33 @@ var supportsBuffer = typeof Buffer != 'undefined'; * @api private */ var packElement = function(name, value, checkKeys, buffer, index, serializeFunctions) { + + // If we have toBSON defined, override the current object + if(value && value.toBSON){ + value = value.toBSON(); + } + var startIndex = index; - + switch(typeof value) { case 'string': + // console.log("+++++++++++ index string:: " + index) // Encode String type buffer[index++] = BSON.BSON_DATA_STRING; // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; - + buffer[index - 1] = 0; + // Calculate size var size = supportsBuffer ? Buffer.byteLength(value) + 1 : numberOfBytes(value) + 1; + // console.log("====== key :: " + name + " size ::" + size) // Write the size of the string to buffer - buffer[index + 3] = (size >> 24) & 0xff; + buffer[index + 3] = (size >> 24) & 0xff; buffer[index + 2] = (size >> 16) & 0xff; buffer[index + 1] = (size >> 8) & 0xff; - buffer[index] = size & 0xff; + buffer[index] = size & 0xff; // Ajust the index index = index + 4; // Write the string @@ -453,24 +479,24 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = 0; // Return index return index; - case 'number': + case 'number': // We have an integer value if(Math.floor(value) === value && value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { // If the value fits in 32 bits encode as int, if it fits in a double // encode it as a double, otherwise long if(value >= BSON.BSON_INT32_MIN && value <= BSON.BSON_INT32_MAX) { // Set int type 32 bits or less - buffer[index++] = BSON.BSON_DATA_INT; + buffer[index++] = BSON.BSON_DATA_INT; // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; // Write the int value - buffer[index++] = value & 0xff; + buffer[index++] = value & 0xff; buffer[index++] = (value >> 8) & 0xff; buffer[index++] = (value >> 16) & 0xff; - buffer[index++] = (value >> 24) & 0xff; + buffer[index++] = (value >> 24) & 0xff; } else if(value >= BSON.JS_INT_MIN && value <= BSON.JS_INT_MAX) { // Encode as double buffer[index++] = BSON.BSON_DATA_NUMBER; @@ -478,32 +504,32 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; // Write float writeIEEE754(buffer, value, index, 'little', 52, 8); // Ajust index - index = index + 8; + index = index + 8; } else { // Set long type - buffer[index++] = BSON.BSON_DATA_LONG; + buffer[index++] = BSON.BSON_DATA_LONG; // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; var longVal = Long.fromNumber(value); var lowBits = longVal.getLowBits(); var highBits = longVal.getHighBits(); // Encode low bits - buffer[index++] = lowBits & 0xff; + buffer[index++] = lowBits & 0xff; buffer[index++] = (lowBits >> 8) & 0xff; buffer[index++] = (lowBits >> 16) & 0xff; - buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; // Encode high bits - buffer[index++] = highBits & 0xff; + buffer[index++] = highBits & 0xff; buffer[index++] = (highBits >> 8) & 0xff; buffer[index++] = (highBits >> 16) & 0xff; - buffer[index++] = (highBits >> 24) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; } } else { // Encode as double @@ -512,13 +538,13 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; // Write float writeIEEE754(buffer, value, index, 'little', 52, 8); // Ajust index - index = index + 8; + index = index + 8; } - + return index; case 'undefined': // Set long type @@ -528,7 +554,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Encode the name index = index + numberOfWrittenBytes + 1; buffer[index - 1] = 0; - return index; + return index; case 'boolean': // Write the type buffer[index++] = BSON.BSON_DATA_BOOLEAN; @@ -540,8 +566,8 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Encode the boolean value buffer[index++] = value ? 1 : 0; return index; - case 'object': - if(value === null || value instanceof MinKey || value instanceof MaxKey + case 'object': + if(value === null || value instanceof MinKey || value instanceof MaxKey || value['_bsontype'] == 'MinKey' || value['_bsontype'] == 'MaxKey') { // Write the type of either min or max key if(value === null) { @@ -551,7 +577,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct } else { buffer[index++] = BSON.BSON_DATA_MAX_KEY; } - + // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name @@ -559,6 +585,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index - 1] = 0; return index; } else if(value instanceof ObjectID || value['_bsontype'] == 'ObjectID') { + // console.log("+++++++++++ index OBJECTID:: " + index) // Write the type buffer[index++] = BSON.BSON_DATA_OID; // Number of written bytes @@ -580,22 +607,22 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Encode the name index = index + numberOfWrittenBytes + 1; buffer[index - 1] = 0; - + // Write the date var dateInMilis = Long.fromNumber(value.getTime()); var lowBits = dateInMilis.getLowBits(); var highBits = dateInMilis.getHighBits(); // Encode low bits - buffer[index++] = lowBits & 0xff; + buffer[index++] = lowBits & 0xff; buffer[index++] = (lowBits >> 8) & 0xff; buffer[index++] = (lowBits >> 16) & 0xff; - buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; // Encode high bits - buffer[index++] = highBits & 0xff; + buffer[index++] = highBits & 0xff; buffer[index++] = (highBits >> 8) & 0xff; buffer[index++] = (highBits >> 16) & 0xff; - buffer[index++] = (highBits >> 24) & 0xff; - return index; + buffer[index++] = (highBits >> 24) & 0xff; + return index; } else if(typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) { // Write the type buffer[index++] = BSON.BSON_DATA_BINARY; @@ -610,7 +637,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the default subtype buffer[index++] = BSON.BSON_BINARY_SUBTYPE_DEFAULT; // Copy the content form the binary field to the buffer @@ -620,7 +647,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct return index; } else if(value instanceof Long || value instanceof Timestamp || value['_bsontype'] == 'Long' || value['_bsontype'] == 'Timestamp') { // Write the type - buffer[index++] = value instanceof Long ? BSON.BSON_DATA_LONG : BSON.BSON_DATA_TIMESTAMP; + buffer[index++] = value instanceof Long || value['_bsontype'] == 'Long' ? BSON.BSON_DATA_LONG : BSON.BSON_DATA_TIMESTAMP; // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name @@ -630,15 +657,15 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct var lowBits = value.getLowBits(); var highBits = value.getHighBits(); // Encode low bits - buffer[index++] = lowBits & 0xff; + buffer[index++] = lowBits & 0xff; buffer[index++] = (lowBits >> 8) & 0xff; buffer[index++] = (lowBits >> 16) & 0xff; - buffer[index++] = (lowBits >> 24) & 0xff; + buffer[index++] = (lowBits >> 24) & 0xff; // Encode high bits - buffer[index++] = highBits & 0xff; + buffer[index++] = highBits & 0xff; buffer[index++] = (highBits >> 8) & 0xff; buffer[index++] = (highBits >> 16) & 0xff; - buffer[index++] = (highBits >> 24) & 0xff; + buffer[index++] = (highBits >> 24) & 0xff; return index; } else if(value instanceof Double || value['_bsontype'] == 'Double') { // Encode as double @@ -647,14 +674,14 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Encode the name index = index + numberOfWrittenBytes + 1; - buffer[index - 1] = 0; + buffer[index - 1] = 0; // Write float writeIEEE754(buffer, value, index, 'little', 52, 8); // Ajust index index = index + 8; return index; - } else if(value instanceof Code || value['_bsontype'] == 'Code') { - if(value.scope != null && Object.keys(value.scope).length > 0) { + } else if(value instanceof Code || value['_bsontype'] == 'Code') { + if(value.scope != null && Object.keys(value.scope).length > 0) { // Write the type buffer[index++] = BSON.BSON_DATA_CODE_W_SCOPE; // Number of written bytes @@ -676,13 +703,13 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = totalSize & 0xff; buffer[index++] = (totalSize >> 8) & 0xff; buffer[index++] = (totalSize >> 16) & 0xff; - buffer[index++] = (totalSize >> 24) & 0xff; + buffer[index++] = (totalSize >> 24) & 0xff; // Write the size of the string to buffer buffer[index++] = codeSize & 0xff; buffer[index++] = (codeSize >> 8) & 0xff; buffer[index++] = (codeSize >> 16) & 0xff; - buffer[index++] = (codeSize >> 24) & 0xff; + buffer[index++] = (codeSize >> 24) & 0xff; // Write the string supportsBuffer ? buffer.write(functionString, index, 'utf8') : writeToTypedArray(buffer, functionString, index); @@ -690,23 +717,23 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct index = index + codeSize - 1; // Write zero buffer[index++] = 0; - // Serialize the scope object + // Serialize the scope object var scopeObjectBuffer = supportsBuffer ? new Buffer(scopeSize) : new Uint8Array(new ArrayBuffer(scopeSize)); // Execute the serialization into a seperate buffer serializeObject(value.scope, checkKeys, scopeObjectBuffer, 0, serializeFunctions); - + // Adjusted scope Size (removing the header) var scopeDocSize = scopeSize; // Write scope object size buffer[index++] = scopeDocSize & 0xff; buffer[index++] = (scopeDocSize >> 8) & 0xff; buffer[index++] = (scopeDocSize >> 16) & 0xff; - buffer[index++] = (scopeDocSize >> 24) & 0xff; - + buffer[index++] = (scopeDocSize >> 24) & 0xff; + // Write the scopeObject into the buffer supportsBuffer ? scopeObjectBuffer.copy(buffer, index, 0, scopeSize) : buffer.set(scopeObjectBuffer, index); // Adjust index, removing the empty size of the doc (5 bytes 0000000005) - index = index + scopeDocSize - 5; + index = index + scopeDocSize - 5; // Write trailing zero buffer[index++] = 0; return index @@ -725,15 +752,15 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the string - buffer.write(functionString, index, 'utf8'); + supportsBuffer ? buffer.write(functionString, index, 'utf8') : writeToTypedArray(buffer, functionString, index); // Update index index = index + size - 1; // Write zero - buffer[index++] = 0; + buffer[index++] = 0; return index; - } + } } else if(value instanceof Binary || value['_bsontype'] == 'Binary') { // Write the type buffer[index++] = BSON.BSON_DATA_BINARY; @@ -743,14 +770,14 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct index = index + numberOfWrittenBytes + 1; buffer[index - 1] = 0; // Extract the buffer - var data = value.value(true); + var data = value.value(true); // Calculate size var size = value.position; // Write the size of the string to buffer buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the subtype to the buffer buffer[index++] = value.sub_type; @@ -759,7 +786,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; } // Write the data to the object @@ -781,14 +808,14 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the string buffer.write(value.value, index, 'utf8'); // Update index index = index + size - 1; // Write zero buffer[index++] = 0x00; - return index; + return index; } else if(value instanceof DBRef || value['_bsontype'] == 'DBRef') { // Write the type buffer[index++] = BSON.BSON_DATA_OBJECT; @@ -802,7 +829,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct '$ref': value.namespace , '$id' : value.oid }; - + // Add db reference if it exists if(null != value.db) { ordered_values['$db'] = value.db; @@ -816,7 +843,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write zero for object buffer[endIndex++] = 0x00; // Return the end index @@ -835,7 +862,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Adjust the index index = index + (supportsBuffer ? Buffer.byteLength(value.source) : numberOfBytes(value.source)); // Write zero - buffer[index++] = 0x00; + buffer[index++] = 0x00; // Write the parameters if(value.global) buffer[index++] = 0x73; // s if(value.ignoreCase) buffer[index++] = 0x69; // i @@ -845,7 +872,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct return index; } else { // Write the type - buffer[index++] = Array.isArray(value) ? BSON.BSON_DATA_ARRAY : BSON.BSON_DATA_OBJECT; + buffer[index++] = Array.isArray(value) ? BSON.BSON_DATA_ARRAY : BSON.BSON_DATA_OBJECT; // Number of written bytes var numberOfWrittenBytes = supportsBuffer ? buffer.write(name, index, 'utf8') : writeToTypedArray(buffer, name, index); // Adjust the index @@ -858,12 +885,12 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; return endIndex; } case 'function': // WTF for 0.4.X where typeof /someregexp/ === 'function' - if(value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]' || String.call(value) == '[object RegExp]') { + if(value instanceof RegExp || Object.prototype.toString.call(value) === '[object RegExp]' || String.call(value) == '[object RegExp]') { // Write the type buffer[index++] = BSON.BSON_DATA_REGEXP; // Number of written bytes @@ -877,7 +904,7 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct // Adjust the index index = index + (supportsBuffer ? Buffer.byteLength(value.source) : numberOfBytes(value.source)); // Write zero - buffer[index++] = 0x00; + buffer[index++] = 0x00; // Write the parameters if(value.global) buffer[index++] = 0x73; // s if(value.ignoreCase) buffer[index++] = 0x69; // i @@ -908,21 +935,21 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = totalSize & 0xff; buffer[index++] = (totalSize >> 8) & 0xff; buffer[index++] = (totalSize >> 16) & 0xff; - buffer[index++] = (totalSize >> 24) & 0xff; + buffer[index++] = (totalSize >> 24) & 0xff; // Write the size of the string to buffer buffer[index++] = codeSize & 0xff; buffer[index++] = (codeSize >> 8) & 0xff; buffer[index++] = (codeSize >> 16) & 0xff; - buffer[index++] = (codeSize >> 24) & 0xff; + buffer[index++] = (codeSize >> 24) & 0xff; // Write the string - buffer.write(functionString, index, 'utf8'); + supportsBuffer ? buffer.write(functionString, index, 'utf8') : writeToTypedArray(buffer, functionString, index); // Update index index = index + codeSize - 1; // Write zero buffer[index++] = 0; - // Serialize the scope object + // Serialize the scope object var scopeObjectBuffer = new Buffer(scopeSize); // Execute the serialization into a seperate buffer serializeObject(value.scope, checkKeys, scopeObjectBuffer, 0, serializeFunctions); @@ -933,13 +960,13 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = scopeDocSize & 0xff; buffer[index++] = (scopeDocSize >> 8) & 0xff; buffer[index++] = (scopeDocSize >> 16) & 0xff; - buffer[index++] = (scopeDocSize >> 24) & 0xff; + buffer[index++] = (scopeDocSize >> 24) & 0xff; // Write the scopeObject into the buffer scopeObjectBuffer.copy(buffer, index, 0, scopeSize); // Adjust index, removing the empty size of the doc (5 bytes 0000000005) - index = index + scopeDocSize - 5; + index = index + scopeDocSize - 5; // Write trailing zero buffer[index++] = 0; return index @@ -958,20 +985,20 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct buffer[index++] = size & 0xff; buffer[index++] = (size >> 8) & 0xff; buffer[index++] = (size >> 16) & 0xff; - buffer[index++] = (size >> 24) & 0xff; + buffer[index++] = (size >> 24) & 0xff; // Write the string - buffer.write(functionString, index, 'utf8'); + supportsBuffer ? buffer.write(functionString, index, 'utf8') : writeToTypedArray(buffer, functionString, index); // Update index index = index + size - 1; // Write zero - buffer[index++] = 0; + buffer[index++] = 0; return index; - } + } } } - + // If no value to serialize - return index; + return index; } /** @@ -985,6 +1012,11 @@ var packElement = function(name, value, checkKeys, buffer, index, serializeFunct * @api public */ BSON.serialize = function(object, checkKeys, asBuffer, serializeFunctions) { + // Throw error if we are trying serialize an illegal type + if(object == null || typeof object != 'object' || Array.isArray(object)) + throw new Error("Only javascript objects supported"); + + // Emoty target buffer var buffer = null; // Calculate the size of the object var size = BSON.calculateObjectSize(object, serializeFunctions); @@ -997,9 +1029,12 @@ BSON.serialize = function(object, checkKeys, asBuffer, serializeFunctions) { } else { buffer = new Array(size); } - + // If asBuffer is false use typed arrays BSON.serializeWithBufferAndIndex(object, checkKeys, buffer, 0, serializeFunctions); + // console.log("++++++++++++++++++++++++++++++++++++ OLDJS :: " + buffer.length) + // console.log(buffer.toString('hex')) + // console.log(buffer.toString('ascii')) return buffer; } @@ -1036,7 +1071,7 @@ var crc32 = function(string, start, end) { x = table[y]; crc = (crc >>> 8) ^ x; } - + return crc ^ (-1); } @@ -1047,6 +1082,7 @@ var crc32 = function(string, start, end) { * - **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized. * - **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse. * - **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function. + * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits * * @param {Buffer} data the buffer containing the serialized set of BSON documents. * @param {Number} startIndex the start index in the data Buffer where the deserialization is to start. @@ -1057,7 +1093,7 @@ var crc32 = function(string, start, end) { * @return {Number} returns the next index in the buffer after deserialization **x** numbers of documents. * @api public */ -BSON.deserializeStream = function(data, startIndex, numberOfDocuments, documents, docStartIndex, options) { +BSON.deserializeStream = function(data, startIndex, numberOfDocuments, documents, docStartIndex, options) { // if(numberOfDocuments !== documents.length) throw new Error("Number of expected results back is less than the number of documents"); options = options != null ? options : {}; var index = startIndex; @@ -1066,13 +1102,13 @@ BSON.deserializeStream = function(data, startIndex, numberOfDocuments, documents // Find size of the document var size = data[index] | data[index + 1] << 8 | data[index + 2] << 16 | data[index + 3] << 24; // Update options with index - options['index'] = index; + options['index'] = index; // Parse the document at this point documents[docStartIndex + i] = BSON.deserialize(data, options); // Adjust index by the document size index = index + size; } - + // Return object containing end index of parsing and list of documents return index; } @@ -1085,15 +1121,15 @@ BSON.deserializeStream = function(data, startIndex, numberOfDocuments, documents */ var isolateEvalWithHash = function(functionCache, hash, functionString, object) { // Contains the value we are going to set - var value = null; + var value = null; // Check for cache hit, eval if missing and return cached function - if(functionCache[hash] == null) { - eval("value = " + functionString); + if(functionCache[hash] == null) { + eval("value = " + functionString); functionCache[hash] = value; } // Set the object - return functionCache[hash].bind(object); + return functionCache[hash].bind(object); } /** @@ -1104,10 +1140,10 @@ var isolateEvalWithHash = function(functionCache, hash, functionString, object) */ var isolateEval = function(functionString) { // Contains the value we are going to set - var value = null; + var value = null; // Eval the function - eval("value = " + functionString); - return value; + eval("value = " + functionString); + return value; } /** @@ -1125,8 +1161,8 @@ var convertArraytoUtf8BinaryString = function(byteArray, startIndex, endIndex) { for(var i = startIndex; i < endIndex; i++) { result = result + String.fromCharCode(byteArray[i]); } - - return result; + + return result; }; /** @@ -1136,6 +1172,7 @@ var convertArraytoUtf8BinaryString = function(byteArray, startIndex, endIndex) { * - **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized. * - **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse. * - **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function. + * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits * * @param {Buffer} buffer the buffer containing the serialized set of BSON documents. * @param {Object} [options] additional options used for the deserialization. @@ -1143,16 +1180,17 @@ var convertArraytoUtf8BinaryString = function(byteArray, startIndex, endIndex) { * @return {Object} returns the deserialized Javascript Object. * @api public */ -BSON.deserialize = function(buffer, options, isArray) { +BSON.deserialize = function(buffer, options, isArray) { // Options options = options == null ? {} : options; var evalFunctions = options['evalFunctions'] == null ? false : options['evalFunctions']; var cacheFunctions = options['cacheFunctions'] == null ? false : options['cacheFunctions']; - var cacheFunctionsCrc32 = options['cacheFunctionsCrc32'] == null ? false : options['cacheFunctionsCrc32']; - + var cacheFunctionsCrc32 = options['cacheFunctionsCrc32'] == null ? false : options['cacheFunctionsCrc32']; + var promoteLongs = options['promoteLongs'] == null ? true : options['promoteLongs']; + // Validate that we have at least 4 bytes of buffer if(buffer.length < 5) throw new Error("corrupt bson message < 5 bytes long"); - + // Set up index var index = typeof options['index'] == 'number' ? options['index'] : 0; // Reads in a C style string @@ -1160,7 +1198,11 @@ BSON.deserialize = function(buffer, options, isArray) { // Get the start search index var i = index; // Locate the end of the c string - while(buffer[i] !== 0x00) { i++ } + while(buffer[i] !== 0x00 && i < buffer.length) { + i++ + } + // If are at the end of the buffer there is a problem with the document + if(i >= buffer.length) throw new Error("Bad BSON Document: illegal CString") // Grab utf8 encoded string var string = supportsBuffer && Buffer.isBuffer(buffer) ? buffer.toString('utf8', index, i) : convertUint8ArrayToUtf8String(buffer, index, i); // Update index position @@ -1174,7 +1216,7 @@ BSON.deserialize = function(buffer, options, isArray) { // Read the document size var size = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; - + // Ensure buffer is valid size if(size < 5 || size > buffer.length) throw new Error("corrupt bson message"); @@ -1194,7 +1236,7 @@ BSON.deserialize = function(buffer, options, isArray) { object[name] = new ObjectID(string); // Update index index = index + 12; - break; + break; case BSON.BSON_DATA_STRING: // Read the content of the field var stringSize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; @@ -1224,6 +1266,7 @@ BSON.deserialize = function(buffer, options, isArray) { // Parse the boolean value object[name] = buffer[index++] == 1; break; + case BSON.BSON_DATA_UNDEFINED: case BSON.BSON_DATA_NULL: // Parse the boolean value object[name] = null; @@ -1240,7 +1283,7 @@ BSON.deserialize = function(buffer, options, isArray) { binarySize = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; } // Slice the data - object[name] = new Binary(buffer.slice(index, index + binarySize), subType); + object[name] = new Binary(buffer.slice(index, index + binarySize), subType); } else { var _buffer = typeof Uint8Array != 'undefined' ? new Uint8Array(new ArrayBuffer(binarySize)) : new Array(binarySize); // If we have subtype 2 skip the 4 bytes for the size @@ -1281,7 +1324,7 @@ BSON.deserialize = function(buffer, options, isArray) { var regExpOptions = readCStyleString(); // For each option add the corresponding one for javascript var optionsArray = new Array(regExpOptions.length); - + // Parse options for(var i = 0; i < regExpOptions.length; i++) { switch(regExpOptions[i]) { @@ -1293,20 +1336,24 @@ BSON.deserialize = function(buffer, options, isArray) { break; case 'i': optionsArray[i] = 'i'; - break; + break; } } - + object[name] = new RegExp(source, optionsArray.join('')); - break; + break; case BSON.BSON_DATA_LONG: // Unpack the low and high bits var lowBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; var highBits = buffer[index++] | buffer[index++] << 8 | buffer[index++] << 16 | buffer[index++] << 24; // Create long object - var long = new Long(lowBits, highBits); - // Set the object - object[name] = long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) ? long.toNumber() : long; + var long = new Long(lowBits, highBits); + // Promote the long if possible + if(promoteLongs) { + object[name] = long.lessThanOrEqual(JS_INT_MAX_LONG) && long.greaterThanOrEqual(JS_INT_MIN_LONG) ? long.toNumber() : long; + } else { + object[name] = long; + } break; case BSON.BSON_DATA_SYMBOL: // Read the content of the field @@ -1340,8 +1387,8 @@ BSON.deserialize = function(buffer, options, isArray) { // If we are evaluating the functions if(evalFunctions) { // Contains the value we are going to set - var value = null; - // If we have cache enabled let's look for the md5 of the function in the cache + var value = null; + // If we have cache enabled let's look for the md5 of the function in the cache if(cacheFunctions) { var hash = cacheFunctionsCrc32 ? crc32(functionString) : functionString; // Got to do this to avoid V8 deoptimizing the call due to finding eval @@ -1373,12 +1420,12 @@ BSON.deserialize = function(buffer, options, isArray) { var scopeObject = BSON.deserialize(buffer, options, false); // Adjust the index index = index + objectSize; - + // If we are evaluating the functions if(evalFunctions) { // Contains the value we are going to set - var value = null; - // If we have cache enabled let's look for the md5 of the function in the cache + var value = null; + // If we have cache enabled let's look for the md5 of the function in the cache if(cacheFunctions) { var hash = cacheFunctionsCrc32 ? crc32(functionString) : functionString; // Got to do this to avoid V8 deoptimizing the call due to finding eval @@ -1387,38 +1434,45 @@ BSON.deserialize = function(buffer, options, isArray) { // Set directly object[name] = isolateEval(functionString); } - + // Set the scope on the object object[name].scope = scopeObject; } else { object[name] = new Code(functionString, scopeObject); } - + // Add string to object break; } } - + // Check if we have a db ref object if(object['$id'] != null) object = new DBRef(object['$ref'], object['$id'], object['$db']); // Return the final objects return object; } - + /** * Check if key name is valid. * * @ignore * @api private */ -BSON.checkKey = function checkKey (key) { +BSON.checkKey = function checkKey (key, dollarsAndDotsOk) { if (!key.length) return; // Check if we have a legal key for the object - if('$' == key[0]) { - throw Error("key " + key + " must not start with '$'"); - } else if (!!~key.indexOf('.')) { - throw Error("key " + key + " must not contain '.'"); + if (!!~key.indexOf("\x00")) { + // The BSON spec doesn't allow keys with null bytes because keys are + // null-terminated. + throw Error("key " + key + " must not contain null bytes"); + } + if (!dollarsAndDotsOk) { + if('$' == key[0]) { + throw Error("key " + key + " must not start with '$'"); + } else if (!!~key.indexOf('.')) { + throw Error("key " + key + " must not contain '.'"); + } } }; @@ -1483,7 +1537,7 @@ BSON.prototype.serialize = function(object, checkKeys, asBuffer, serializeFuncti * @return {Number} returns the number of bytes the BSON object will take up. * @api public */ -BSON.prototype.calculateObjectSize = function(object, serializeFunctions) { +BSON.prototype.calculateObjectSize = function(object, serializeFunctions) { return BSON.calculateObjectSize(object, serializeFunctions); } @@ -1516,4 +1570,4 @@ exports.Long = Long; exports.Timestamp = Timestamp; exports.Double = Double; exports.MinKey = MinKey; -exports.MaxKey = MaxKey; \ No newline at end of file +exports.MaxKey = MaxKey; diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/code.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/code.js index 69b56a3..c534103 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/code.js +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/code.js @@ -6,9 +6,8 @@ * @param {Object} [scope] an optional scope for the function. * @return {Code} */ -function Code(code, scope) { +var Code = function Code(code, scope) { if(!(this instanceof Code)) return new Code(code, scope); - this._bsontype = 'Code'; this.code = code; this.scope = scope == null ? {} : scope; diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js index 1ff9a83..52e7197 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/lib/bson/objectid.js @@ -22,35 +22,39 @@ var checkForHexRegExp = new RegExp("^[0-9a-fA-F]{24}$"); * @param {String|Number} id Can be a 24 byte hex string, 12 byte binary string or a Number. * @return {Object} instance of ObjectID. */ -var ObjectID = function ObjectID(id, _hex) { - if(!(this instanceof ObjectID)) return new ObjectID(id, _hex); +var ObjectID = function ObjectID(id) { + if(!(this instanceof ObjectID)) return new ObjectID(id); + if((id instanceof ObjectID)) return id; this._bsontype = 'ObjectID'; var __id = null; + var valid = ObjectID.isValid(id); // Throw an error if it's not a valid setup - if(id != null && 'number' != typeof id && (id.length != 12 && id.length != 24)) + if(!valid && id != null){ throw new Error("Argument passed in must be a single String of 12 bytes or a string of 24 hex characters"); - - // Generate id based on the input - if(id == null || typeof id == 'number') { + } else if(valid && typeof id == 'string' && id.length == 24) { + return ObjectID.createFromHexString(id); + } else if(id == null || typeof id == 'number') { // convert to 12 byte binary string this.id = this.generate(id); } else if(id != null && id.length === 12) { // assume 12 byte string this.id = id; - } else if(checkForHexRegExp.test(id)) { - return ObjectID.createFromHexString(id); - } else if(!checkForHexRegExp.test(id)) { - throw new Error("Value passed in is not a valid 24 character hex string"); } if(ObjectID.cacheHexString) this.__id = this.toHexString(); }; -// Allow usage of ObjectId aswell as ObjectID +// Allow usage of ObjectId as well as ObjectID var ObjectId = ObjectID; +// Precomputed hex table enables speedy hex string conversion +var hexTable = []; +for (var i = 0; i < 256; i++) { + hexTable[i] = (i <= 15 ? '0' : '') + i.toString(16); +} + /** * Return the ObjectID id as a 24 byte hex string representation * @@ -60,16 +64,10 @@ var ObjectId = ObjectID; ObjectID.prototype.toHexString = function() { if(ObjectID.cacheHexString && this.__id) return this.__id; - var hexString = '' - , number - , value; + var hexString = ''; - for (var index = 0, len = this.id.length; index < len; index++) { - value = BinaryParser.toByte(this.id[index]); - number = value <= 15 - ? '0' + value.toString(16) - : value.toString(16); - hexString = hexString + number; + for (var i = 0; i < this.id.length; i++) { + hexString += hexTable[this.id.charCodeAt(i)]; } if(ObjectID.cacheHexString) this.__id = hexString; @@ -104,19 +102,15 @@ ObjectID.prototype.getInc = function() { * @api private */ ObjectID.prototype.generate = function(time) { - if ('number' == typeof time) { - var time4Bytes = BinaryParser.encodeInt(time, 32, true, true); - /* for time-based ObjectID the bytes following the time will be zeroed */ - var machine3Bytes = BinaryParser.encodeInt(MACHINE_ID, 24, false); - var pid2Bytes = BinaryParser.fromShort(typeof process === 'undefined' ? Math.floor(Math.random() * 100000) : process.pid); - var index3Bytes = BinaryParser.encodeInt(this.get_inc(), 24, false, true); - } else { - var unixTime = parseInt(Date.now()/1000,10); - var time4Bytes = BinaryParser.encodeInt(unixTime, 32, true, true); - var machine3Bytes = BinaryParser.encodeInt(MACHINE_ID, 24, false); - var pid2Bytes = BinaryParser.fromShort(typeof process === 'undefined' ? Math.floor(Math.random() * 100000) : process.pid); - var index3Bytes = BinaryParser.encodeInt(this.get_inc(), 24, false, true); + if ('number' != typeof time) { + time = parseInt(Date.now()/1000,10); } + + var time4Bytes = BinaryParser.encodeInt(time, 32, true, true); + /* for time-based ObjectID the bytes following the time will be zeroed */ + var machine3Bytes = BinaryParser.encodeInt(MACHINE_ID, 24, false); + var pid2Bytes = BinaryParser.fromShort(typeof process === 'undefined' ? Math.floor(Math.random() * 100000) : process.pid); + var index3Bytes = BinaryParser.encodeInt(this.get_inc(), 24, false, true); return time4Bytes + machine3Bytes + pid2Bytes + index3Bytes; }; @@ -157,6 +151,7 @@ ObjectID.prototype.toJSON = function() { * @api public */ ObjectID.prototype.equals = function equals (otherID) { + if(otherID == null) return false; var id = (otherID instanceof ObjectID || otherID.toHexString) ? otherID.id : ObjectID.createFromHexString(otherID).id; @@ -165,9 +160,9 @@ ObjectID.prototype.equals = function equals (otherID) { } /** -* Returns the generation time in seconds that this ID was generated. +* Returns the generation date (accurate up to the second) that this ID was generated. * -* @return {Number} return number of seconds in the timestamp part of the 12 byte id. +* @return {Date} the generation date * @api public */ ObjectID.prototype.getTimestamp = function() { @@ -180,7 +175,7 @@ ObjectID.prototype.getTimestamp = function() { * @ignore * @api private */ -ObjectID.index = 0; +ObjectID.index = parseInt(Math.random() * 0xFFFFFF, 10); ObjectID.createPk = function createPk () { return new ObjectID(); @@ -230,6 +225,24 @@ ObjectID.createFromHexString = function createFromHexString (hexString) { return new ObjectID(result, hexString); }; +/** +* Checks if a value is a valid bson ObjectId +* +* @return {Boolean} return true if the value is a valid bson ObjectId, return false otherwise. +* @api public +*/ +ObjectID.isValid = function isValid(id) { + if(id == null) return false; + + if(id != null && 'number' != typeof id && (id.length != 12 && id.length != 24)) { + return false; + } else { + // Check specifically for hex correctness + if(typeof id == 'string' && id.length == 24) return checkForHexRegExp.test(id); + return true; + } +}; + /** * @ignore */ @@ -250,4 +263,4 @@ Object.defineProperty(ObjectID.prototype, "generationTime", { * Expose. */ exports.ObjectID = ObjectID; -exports.ObjectId = ObjectID; \ No newline at end of file +exports.ObjectId = ObjectID; diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/package.json b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/package.json index 1a4fde8..da321aa 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/package.json +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/package.json @@ -6,7 +6,7 @@ "bson", "parser" ], - "version": "0.1.8", + "version": "0.2.15", "author": { "name": "Christian Amor Kvalheim", "email": "christkv@gmail.com" @@ -19,10 +19,13 @@ "bugs": { "url": "https://github.com/mongodb/js-bson/issues" }, + "dependencies": { + "nan": "1.3.0" + }, "devDependencies": { - "nodeunit": "0.7.3", + "nodeunit": "0.9.0", "gleak": "0.2.3", - "one": "latest" + "one": "2.X.X" }, "config": { "native": false @@ -38,14 +41,15 @@ "install": "(node-gyp rebuild 2> builderror.log) || (exit 0)", "test": "nodeunit ./test/node && TEST_NATIVE=TRUE nodeunit ./test/node" }, + "browser": "lib/bson/bson.js", "licenses": [ { "type": "Apache License, Version 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], - "readme": "A JS/C++ Bson parser for node, used in the MongoDB Native driver", + "readme": "Javascript + C++ BSON parser\n============================\n\nThis BSON parser is primarily meant for usage with the `mongodb` node.js driver. However thanks to such wonderful tools at `onejs` we are able to package up a BSON parser that will work in the browser aswell. The current build is located in the `browser_build/bson.js` file.\n\nA simple example on how to use it\n\n \n \n \n \n \n \n\n It's got two simple methods to use in your application.\n\n * BSON.serialize(object, checkKeys, asBuffer, serializeFunctions)\n * @param {Object} object the Javascript object to serialize.\n * @param {Boolean} checkKeys the serializer will check if keys are valid.\n * @param {Boolean} asBuffer return the serialized object as a Buffer object **(ignore)**.\n * @param {Boolean} serializeFunctions serialize the javascript functions **(default:false)**\n * @return {TypedArray/Array} returns a TypedArray or Array depending on what your browser supports\n \n * BSON.deserialize(buffer, options, isArray)\n * Options\n * **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized.\n * **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse.\n * **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function.\n * @param {TypedArray/Array} a TypedArray/Array containing the BSON data\n * @param {Object} [options] additional options used for the deserialization.\n * @param {Boolean} [isArray] ignore used for recursive parsing.\n * @return {Object} returns the deserialized Javascript Object.\n", "readmeFilename": "README.md", - "_id": "bson@0.1.8", - "_from": "bson@0.1.8" + "_id": "bson@0.2.15", + "_from": "bson@~0.2" } diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/browser_example.htm b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/browser_example.htm deleted file mode 100644 index 4ee148b..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/browser_example.htm +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/bson_test.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/bson_test.js deleted file mode 100644 index 84d8ffc..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/bson_test.js +++ /dev/null @@ -1,260 +0,0 @@ -this.bson_test = { - 'Full document serialization and deserialization': function (test) { - var motherOfAllDocuments = { - 'string': "客家话", - 'array': [1,2,3], - 'hash': {'a':1, 'b':2}, - 'date': new Date(), - 'oid': new ObjectID(), - 'binary': new Binary('hello world'), - 'int': 42, - 'float': 33.3333, - 'regexp': /regexp/, - 'boolean': true, - 'long': Long.fromNumber(100), - 'where': new Code('this.a > i', {i:1}), - 'dbref': new DBRef('namespace', new ObjectID(), 'integration_tests_'), - 'minkey': new MinKey(), - 'maxkey': new MaxKey() - } - - // Let's serialize it - var data = BSON.serialize(motherOfAllDocuments, true, true, false); - // Deserialize the object - var object = BSON.deserialize(data); - - // Asserts - test.equal(Utf8.decode(motherOfAllDocuments.string), object.string); - test.deepEqual(motherOfAllDocuments.array, object.array); - test.deepEqual(motherOfAllDocuments.date, object.date); - test.deepEqual(motherOfAllDocuments.oid.toHexString(), object.oid.toHexString()); - test.deepEqual(motherOfAllDocuments.binary.length(), object.binary.length()); - test.ok(assertArrayEqual(motherOfAllDocuments.binary.value(true), object.binary.value(true))); - test.deepEqual(motherOfAllDocuments.int, object.int); - test.deepEqual(motherOfAllDocuments.float, object.float); - test.deepEqual(motherOfAllDocuments.regexp, object.regexp); - test.deepEqual(motherOfAllDocuments.boolean, object.boolean); - test.deepEqual(motherOfAllDocuments.long.toNumber(), object.long); - test.deepEqual(motherOfAllDocuments.where, object.where); - test.deepEqual(motherOfAllDocuments.dbref.oid.toHexString(), object.dbref.oid.toHexString()); - test.deepEqual(motherOfAllDocuments.dbref.namespace, object.dbref.namespace); - test.deepEqual(motherOfAllDocuments.dbref.db, object.dbref.db); - test.deepEqual(motherOfAllDocuments.minkey, object.minkey); - test.deepEqual(motherOfAllDocuments.maxkey, object.maxkey); - test.done(); - }, - - 'exercise all the binary object constructor methods': function (test) { - // Construct using array - var string = 'hello world'; - // String to array - var array = stringToArrayBuffer(string); - - // Binary from array buffer - var binary = new Binary(stringToArrayBuffer(string)); - test.ok(string.length, binary.buffer.length); - test.ok(assertArrayEqual(array, binary.buffer)); - - // Construct using number of chars - binary = new Binary(5); - test.ok(5, binary.buffer.length); - - // Construct using an Array - var binary = new Binary(stringToArray(string)); - test.ok(string.length, binary.buffer.length); - test.ok(assertArrayEqual(array, binary.buffer)); - - // Construct using a string - var binary = new Binary(string); - test.ok(string.length, binary.buffer.length); - test.ok(assertArrayEqual(array, binary.buffer)); - test.done(); - }, - - 'exercise the put binary object method for an instance when using Uint8Array': function (test) { - // Construct using array - var string = 'hello world'; - // String to array - var array = stringToArrayBuffer(string + 'a'); - - // Binary from array buffer - var binary = new Binary(stringToArrayBuffer(string)); - test.ok(string.length, binary.buffer.length); - - // Write a byte to the array - binary.put('a') - - // Verify that the data was writtencorrectly - test.equal(string.length + 1, binary.position); - test.ok(assertArrayEqual(array, binary.value(true))); - test.equal('hello worlda', binary.value()); - - // Exercise a binary with lots of space in the buffer - var binary = new Binary(); - test.ok(Binary.BUFFER_SIZE, binary.buffer.length); - - // Write a byte to the array - binary.put('a') - - // Verify that the data was writtencorrectly - test.equal(1, binary.position); - test.ok(assertArrayEqual(['a'.charCodeAt(0)], binary.value(true))); - test.equal('a', binary.value()); - test.done(); - }, - - 'exercise the write binary object method for an instance when using Uint8Array': function (test) { - // Construct using array - var string = 'hello world'; - // Array - var writeArrayBuffer = new Uint8Array(new ArrayBuffer(1)); - writeArrayBuffer[0] = 'a'.charCodeAt(0); - var arrayBuffer = ['a'.charCodeAt(0)]; - - // Binary from array buffer - var binary = new Binary(stringToArrayBuffer(string)); - test.ok(string.length, binary.buffer.length); - - // Write a string starting at end of buffer - binary.write('a'); - test.equal('hello worlda', binary.value()); - // Write a string starting at index 0 - binary.write('a', 0); - test.equal('aello worlda', binary.value()); - // Write a arraybuffer starting at end of buffer - binary.write(writeArrayBuffer); - test.equal('aello worldaa', binary.value()); - // Write a arraybuffer starting at position 5 - binary.write(writeArrayBuffer, 5); - test.equal('aelloaworldaa', binary.value()); - // Write a array starting at end of buffer - binary.write(arrayBuffer); - test.equal('aelloaworldaaa', binary.value()); - // Write a array starting at position 6 - binary.write(arrayBuffer, 6); - test.equal('aelloaaorldaaa', binary.value()); - test.done(); - }, - - 'exercise the read binary object method for an instance when using Uint8Array': function (test) { - // Construct using array - var string = 'hello world'; - var array = stringToArrayBuffer(string); - - // Binary from array buffer - var binary = new Binary(stringToArrayBuffer(string)); - test.ok(string.length, binary.buffer.length); - - // Read the first 2 bytes - var data = binary.read(0, 2); - test.ok(assertArrayEqual(stringToArrayBuffer('he'), data)); - - // Read the entire field - var data = binary.read(0); - test.ok(assertArrayEqual(stringToArrayBuffer(string), data)); - - // Read 3 bytes - var data = binary.read(6, 5); - test.ok(assertArrayEqual(stringToArrayBuffer('world'), data)); - test.done(); - }, - - 'Should correctly handle toBson function for an object': function(test) { - // Test object - var doc = { - hello: new ObjectID(), - a:1 - }; - // Add a toBson method to the object - doc.toBSON = function() { - return {b:1}; - } - - // Serialize the data - var serialized_data = BSON.serialize(doc, false, true); - var deserialized_doc = BSON.deserialize(serialized_data); - test.equal(1, deserialized_doc.b); - test.done(); - } -}; - -var assertArrayEqual = function(array1, array2) { - if(array1.length != array2.length) return false; - for(var i = 0; i < array1.length; i++) { - if(array1[i] != array2[i]) return false; - } - - return true; -} - -// String to arraybuffer -var stringToArrayBuffer = function(string) { - var dataBuffer = new Uint8Array(new ArrayBuffer(string.length)); - // Return the strings - for(var i = 0; i < string.length; i++) { - dataBuffer[i] = string.charCodeAt(i); - } - // Return the data buffer - return dataBuffer; -} - -// String to arraybuffer -var stringToArray = function(string) { - var dataBuffer = new Array(string.length); - // Return the strings - for(var i = 0; i < string.length; i++) { - dataBuffer[i] = string.charCodeAt(i); - } - // Return the data buffer - return dataBuffer; -} - -var Utf8 = { - // public method for url encoding - encode : function (string) { - string = string.replace(/\r\n/g,"\n"); - var utftext = ""; - - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if((c > 127) && (c < 2048)) { - utftext += String.fromCharCode((c >> 6) | 192); - utftext += String.fromCharCode((c & 63) | 128); - } else { - utftext += String.fromCharCode((c >> 12) | 224); - utftext += String.fromCharCode(((c >> 6) & 63) | 128); - utftext += String.fromCharCode((c & 63) | 128); - } - - } - - return utftext; - }, - - // public method for url decoding - decode : function (utftext) { - var string = ""; - var i = 0; - var c = c1 = c2 = 0; - - while ( i < utftext.length ) { - c = utftext.charCodeAt(i); - if(c < 128) { - string += String.fromCharCode(c); - i++; - } else if((c > 191) && (c < 224)) { - c2 = utftext.charCodeAt(i+1); - string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); - i += 2; - } else { - c2 = utftext.charCodeAt(i+1); - c3 = utftext.charCodeAt(i+2); - string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - i += 3; - } - } - return string; - } -} diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/nodeunit.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/nodeunit.js deleted file mode 100644 index af7fd0b..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/nodeunit.js +++ /dev/null @@ -1,2034 +0,0 @@ -/*! - * Nodeunit - * https://github.com/caolan/nodeunit - * Copyright (c) 2010 Caolan McMahon - * MIT Licensed - * - * json2.js - * http://www.JSON.org/json2.js - * Public Domain. - * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - */ -nodeunit = (function(){ -/* - http://www.JSON.org/json2.js - 2010-11-17 - - Public Domain. - - NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. - - See http://www.JSON.org/js.html - - - This code should be minified before deployment. - See http://javascript.crockford.com/jsmin.html - - USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO - NOT CONTROL. - - - This file creates a global JSON object containing two methods: stringify - and parse. - - JSON.stringify(value, replacer, space) - value any JavaScript value, usually an object or array. - - replacer an optional parameter that determines how object - values are stringified for objects. It can be a - function or an array of strings. - - space an optional parameter that specifies the indentation - of nested structures. If it is omitted, the text will - be packed without extra whitespace. If it is a number, - it will specify the number of spaces to indent at each - level. If it is a string (such as '\t' or ' '), - it contains the characters used to indent at each level. - - This method produces a JSON text from a JavaScript value. - - When an object value is found, if the object contains a toJSON - method, its toJSON method will be called and the result will be - stringified. A toJSON method does not serialize: it returns the - value represented by the name/value pair that should be serialized, - or undefined if nothing should be serialized. The toJSON method - will be passed the key associated with the value, and this will be - bound to the value - - For example, this would serialize Dates as ISO strings. - - Date.prototype.toJSON = function (key) { - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - return this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z'; - }; - - You can provide an optional replacer method. It will be passed the - key and value of each member, with this bound to the containing - object. The value that is returned from your method will be - serialized. If your method returns undefined, then the member will - be excluded from the serialization. - - If the replacer parameter is an array of strings, then it will be - used to select the members to be serialized. It filters the results - such that only members with keys listed in the replacer array are - stringified. - - Values that do not have JSON representations, such as undefined or - functions, will not be serialized. Such values in objects will be - dropped; in arrays they will be replaced with null. You can use - a replacer function to replace those with JSON values. - JSON.stringify(undefined) returns undefined. - - The optional space parameter produces a stringification of the - value that is filled with line breaks and indentation to make it - easier to read. - - If the space parameter is a non-empty string, then that string will - be used for indentation. If the space parameter is a number, then - the indentation will be that many spaces. - - Example: - - text = JSON.stringify(['e', {pluribus: 'unum'}]); - // text is '["e",{"pluribus":"unum"}]' - - - text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); - // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' - - text = JSON.stringify([new Date()], function (key, value) { - return this[key] instanceof Date ? - 'Date(' + this[key] + ')' : value; - }); - // text is '["Date(---current time---)"]' - - - JSON.parse(text, reviver) - This method parses a JSON text to produce an object or array. - It can throw a SyntaxError exception. - - The optional reviver parameter is a function that can filter and - transform the results. It receives each of the keys and values, - and its return value is used instead of the original value. - If it returns what it received, then the structure is not modified. - If it returns undefined then the member is deleted. - - Example: - - // Parse the text. Values that look like ISO date strings will - // be converted to Date objects. - - myData = JSON.parse(text, function (key, value) { - var a; - if (typeof value === 'string') { - a = -/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); - if (a) { - return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], - +a[5], +a[6])); - } - } - return value; - }); - - myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { - var d; - if (typeof value === 'string' && - value.slice(0, 5) === 'Date(' && - value.slice(-1) === ')') { - d = new Date(value.slice(5, -1)); - if (d) { - return d; - } - } - return value; - }); - - - This is a reference implementation. You are free to copy, modify, or - redistribute. -*/ - -/*jslint evil: true, strict: false, regexp: false */ - -/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply, - call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, - getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, - lastIndex, length, parse, prototype, push, replace, slice, stringify, - test, toJSON, toString, valueOf -*/ - - -// Create a JSON object only if one does not already exist. We create the -// methods in a closure to avoid creating global variables. - -var JSON = {}; - -(function () { - "use strict"; - - function f(n) { - // Format integers to have at least two digits. - return n < 10 ? '0' + n : n; - } - - if (typeof Date.prototype.toJSON !== 'function') { - - Date.prototype.toJSON = function (key) { - - return isFinite(this.valueOf()) ? - this.getUTCFullYear() + '-' + - f(this.getUTCMonth() + 1) + '-' + - f(this.getUTCDate()) + 'T' + - f(this.getUTCHours()) + ':' + - f(this.getUTCMinutes()) + ':' + - f(this.getUTCSeconds()) + 'Z' : null; - }; - - String.prototype.toJSON = - Number.prototype.toJSON = - Boolean.prototype.toJSON = function (key) { - return this.valueOf(); - }; - } - - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - - - function quote(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? - '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : - '"' + string + '"'; - } - - - function str(key, holder) { - -// Produce a string from holder[key]. - - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - -// If the value has a toJSON method, call it to obtain a replacement value. - - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - -// If we were called with a replacer function, then call the replacer to -// obtain a replacement value. - - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - -// What happens next depends on the value's type. - - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - -// JSON numbers must be finite. Encode non-finite numbers as null. - - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - -// If the value is a boolean or null, convert it to a string. Note: -// typeof null does not produce 'null'. The case is included here in -// the remote chance that this gets fixed someday. - - return String(value); - -// If the type is 'object', we might be dealing with an object or an array or -// null. - - case 'object': - -// Due to a specification blunder in ECMAScript, typeof null is 'object', -// so watch out for that case. - - if (!value) { - return 'null'; - } - -// Make an array to hold the partial results of stringifying this object value. - - gap += indent; - partial = []; - -// Is the value an array? - - if (Object.prototype.toString.apply(value) === '[object Array]') { - -// The value is an array. Stringify every element. Use null as a placeholder -// for non-JSON values. - - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - -// Join all of the elements together, separated with commas, and wrap them in -// brackets. - - v = partial.length === 0 ? '[]' : - gap ? '[\n' + gap + - partial.join(',\n' + gap) + '\n' + - mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - -// If the replacer is an array, use it to select the members to be stringified. - - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - k = rep[i]; - if (typeof k === 'string') { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } else { - -// Otherwise, iterate through all of the keys in the object. - - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - -// Join all of the member texts together, separated with commas, -// and wrap them in braces. - - v = partial.length === 0 ? '{}' : - gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + - mind + '}' : '{' + partial.join(',') + '}'; - gap = mind; - return v; - } - } - -// If the JSON object does not yet have a stringify method, give it one. - - if (typeof JSON.stringify !== 'function') { - JSON.stringify = function (value, replacer, space) { - -// The stringify method takes a value and an optional replacer, and an optional -// space parameter, and returns a JSON text. The replacer can be a function -// that can replace values, or an array of strings that will select the keys. -// A default replacer method can be provided. Use of the space parameter can -// produce text that is more easily readable. - - var i; - gap = ''; - indent = ''; - -// If the space parameter is a number, make an indent string containing that -// many spaces. - - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - -// If the space parameter is a string, it will be used as the indent string. - - } else if (typeof space === 'string') { - indent = space; - } - -// If there is a replacer, it must be a function or an array. -// Otherwise, throw an error. - - rep = replacer; - if (replacer && typeof replacer !== 'function' && - (typeof replacer !== 'object' || - typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - -// Make a fake root object containing our value under the key of ''. -// Return the result of stringifying the value. - - return str('', {'': value}); - }; - } - - -// If the JSON object does not yet have a parse method, give it one. - - if (typeof JSON.parse !== 'function') { - JSON.parse = function (text, reviver) { - -// The parse method takes a text and an optional reviver function, and returns -// a JavaScript value if the text is a valid JSON text. - - var j; - - function walk(holder, key) { - -// The walk method is used to recursively walk the resulting structure so -// that modifications can be made. - - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - } - - -// Parsing happens in four stages. In the first stage, we replace certain -// Unicode characters with escape sequences. JavaScript handles many characters -// incorrectly, either silently deleting them, or treating them as line endings. - - text = String(text); - cx.lastIndex = 0; - if (cx.test(text)) { - text = text.replace(cx, function (a) { - return '\\u' + - ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }); - } - -// In the second stage, we run the text against regular expressions that look -// for non-JSON patterns. We are especially concerned with '()' and 'new' -// because they can cause invocation, and '=' because it can cause mutation. -// But just to be safe, we want to reject all unexpected forms. - -// We split the second stage into 4 regexp operations in order to work around -// crippling inefficiencies in IE's and Safari's regexp engines. First we -// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we -// replace all simple value tokens with ']' characters. Third, we delete all -// open brackets that follow a colon or comma or that begin the text. Finally, -// we look to see that the remaining characters are only whitespace or ']' or -// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. - - if (/^[\],:{}\s]*$/ -.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@') -.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']') -.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { - -// In the third stage we use the eval function to compile the text into a -// JavaScript structure. The '{' operator is subject to a syntactic ambiguity -// in JavaScript: it can begin a block or an object literal. We wrap the text -// in parens to eliminate the ambiguity. - - j = eval('(' + text + ')'); - -// In the optional fourth stage, we recursively walk the new structure, passing -// each name/value pair to a reviver function for possible transformation. - - return typeof reviver === 'function' ? - walk({'': j}, '') : j; - } - -// If the text is not JSON parseable, then a SyntaxError is thrown. - - throw new SyntaxError('JSON.parse'); - }; - } -}()); -var assert = this.assert = {}; -var types = {}; -var core = {}; -var nodeunit = {}; -var reporter = {}; -/*global setTimeout: false, console: false */ -(function () { - - var async = {}; - - // global on the server, window in the browser - var root = this, - previous_async = root.async; - - if (typeof module !== 'undefined' && module.exports) { - module.exports = async; - } - else { - root.async = async; - } - - async.noConflict = function () { - root.async = previous_async; - return async; - }; - - //// cross-browser compatiblity functions //// - - var _forEach = function (arr, iterator) { - if (arr.forEach) { - return arr.forEach(iterator); - } - for (var i = 0; i < arr.length; i += 1) { - iterator(arr[i], i, arr); - } - }; - - var _map = function (arr, iterator) { - if (arr.map) { - return arr.map(iterator); - } - var results = []; - _forEach(arr, function (x, i, a) { - results.push(iterator(x, i, a)); - }); - return results; - }; - - var _reduce = function (arr, iterator, memo) { - if (arr.reduce) { - return arr.reduce(iterator, memo); - } - _forEach(arr, function (x, i, a) { - memo = iterator(memo, x, i, a); - }); - return memo; - }; - - var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; - }; - - var _indexOf = function (arr, item) { - if (arr.indexOf) { - return arr.indexOf(item); - } - for (var i = 0; i < arr.length; i += 1) { - if (arr[i] === item) { - return i; - } - } - return -1; - }; - - //// exported async module functions //// - - //// nextTick implementation with browser-compatible fallback //// - if (typeof process === 'undefined' || !(process.nextTick)) { - async.nextTick = function (fn) { - setTimeout(fn, 0); - }; - } - else { - async.nextTick = process.nextTick; - } - - async.forEach = function (arr, iterator, callback) { - if (!arr.length) { - return callback(); - } - var completed = 0; - _forEach(arr, function (x) { - iterator(x, function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(); - } - } - }); - }); - }; - - async.forEachSeries = function (arr, iterator, callback) { - if (!arr.length) { - return callback(); - } - var completed = 0; - var iterate = function () { - iterator(arr[completed], function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - completed += 1; - if (completed === arr.length) { - callback(); - } - else { - iterate(); - } - } - }); - }; - iterate(); - }; - - - var doParallel = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEach].concat(args)); - }; - }; - var doSeries = function (fn) { - return function () { - var args = Array.prototype.slice.call(arguments); - return fn.apply(null, [async.forEachSeries].concat(args)); - }; - }; - - - var _asyncMap = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (err, v) { - results[x.index] = v; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - }; - async.map = doParallel(_asyncMap); - async.mapSeries = doSeries(_asyncMap); - - - // reduce only has a series version, as doing reduce in parallel won't - // work in many situations. - async.reduce = function (arr, memo, iterator, callback) { - async.forEachSeries(arr, function (x, callback) { - iterator(memo, x, function (err, v) { - memo = v; - callback(err); - }); - }, function (err) { - callback(err, memo); - }); - }; - // inject alias - async.inject = async.reduce; - // foldl alias - async.foldl = async.reduce; - - async.reduceRight = function (arr, memo, iterator, callback) { - var reversed = _map(arr, function (x) { - return x; - }).reverse(); - async.reduce(reversed, memo, iterator, callback); - }; - // foldr alias - async.foldr = async.reduceRight; - - var _filter = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.filter = doParallel(_filter); - async.filterSeries = doSeries(_filter); - // select alias - async.select = async.filter; - async.selectSeries = async.filterSeries; - - var _reject = function (eachfn, arr, iterator, callback) { - var results = []; - arr = _map(arr, function (x, i) { - return {index: i, value: x}; - }); - eachfn(arr, function (x, callback) { - iterator(x.value, function (v) { - if (!v) { - results.push(x); - } - callback(); - }); - }, function (err) { - callback(_map(results.sort(function (a, b) { - return a.index - b.index; - }), function (x) { - return x.value; - })); - }); - }; - async.reject = doParallel(_reject); - async.rejectSeries = doSeries(_reject); - - var _detect = function (eachfn, arr, iterator, main_callback) { - eachfn(arr, function (x, callback) { - iterator(x, function (result) { - if (result) { - main_callback(x); - } - else { - callback(); - } - }); - }, function (err) { - main_callback(); - }); - }; - async.detect = doParallel(_detect); - async.detectSeries = doSeries(_detect); - - async.some = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (v) { - main_callback(true); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(false); - }); - }; - // any alias - async.any = async.some; - - async.every = function (arr, iterator, main_callback) { - async.forEach(arr, function (x, callback) { - iterator(x, function (v) { - if (!v) { - main_callback(false); - main_callback = function () {}; - } - callback(); - }); - }, function (err) { - main_callback(true); - }); - }; - // all alias - async.all = async.every; - - async.sortBy = function (arr, iterator, callback) { - async.map(arr, function (x, callback) { - iterator(x, function (err, criteria) { - if (err) { - callback(err); - } - else { - callback(null, {value: x, criteria: criteria}); - } - }); - }, function (err, results) { - if (err) { - return callback(err); - } - else { - var fn = function (left, right) { - var a = left.criteria, b = right.criteria; - return a < b ? -1 : a > b ? 1 : 0; - }; - callback(null, _map(results.sort(fn), function (x) { - return x.value; - })); - } - }); - }; - - async.auto = function (tasks, callback) { - callback = callback || function () {}; - var keys = _keys(tasks); - if (!keys.length) { - return callback(null); - } - - var completed = []; - - var listeners = []; - var addListener = function (fn) { - listeners.unshift(fn); - }; - var removeListener = function (fn) { - for (var i = 0; i < listeners.length; i += 1) { - if (listeners[i] === fn) { - listeners.splice(i, 1); - return; - } - } - }; - var taskComplete = function () { - _forEach(listeners, function (fn) { - fn(); - }); - }; - - addListener(function () { - if (completed.length === keys.length) { - callback(null); - } - }); - - _forEach(keys, function (k) { - var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k]; - var taskCallback = function (err) { - if (err) { - callback(err); - // stop subsequent errors hitting callback multiple times - callback = function () {}; - } - else { - completed.push(k); - taskComplete(); - } - }; - var requires = task.slice(0, Math.abs(task.length - 1)) || []; - var ready = function () { - return _reduce(requires, function (a, x) { - return (a && _indexOf(completed, x) !== -1); - }, true); - }; - if (ready()) { - task[task.length - 1](taskCallback); - } - else { - var listener = function () { - if (ready()) { - removeListener(listener); - task[task.length - 1](taskCallback); - } - }; - addListener(listener); - } - }); - }; - - async.waterfall = function (tasks, callback) { - if (!tasks.length) { - return callback(); - } - callback = callback || function () {}; - var wrapIterator = function (iterator) { - return function (err) { - if (err) { - callback(err); - callback = function () {}; - } - else { - var args = Array.prototype.slice.call(arguments, 1); - var next = iterator.next(); - if (next) { - args.push(wrapIterator(next)); - } - else { - args.push(callback); - } - async.nextTick(function () { - iterator.apply(null, args); - }); - } - }; - }; - wrapIterator(async.iterator(tasks))(); - }; - - async.parallel = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.map(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args || null); - }); - } - }, callback); - } - else { - var results = {}; - async.forEach(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.series = function (tasks, callback) { - callback = callback || function () {}; - if (tasks.constructor === Array) { - async.mapSeries(tasks, function (fn, callback) { - if (fn) { - fn(function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - callback.call(null, err, args || null); - }); - } - }, callback); - } - else { - var results = {}; - async.forEachSeries(_keys(tasks), function (k, callback) { - tasks[k](function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (args.length <= 1) { - args = args[0]; - } - results[k] = args; - callback(err); - }); - }, function (err) { - callback(err, results); - }); - } - }; - - async.iterator = function (tasks) { - var makeCallback = function (index) { - var fn = function () { - if (tasks.length) { - tasks[index].apply(null, arguments); - } - return fn.next(); - }; - fn.next = function () { - return (index < tasks.length - 1) ? makeCallback(index + 1): null; - }; - return fn; - }; - return makeCallback(0); - }; - - async.apply = function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - return function () { - return fn.apply( - null, args.concat(Array.prototype.slice.call(arguments)) - ); - }; - }; - - var _concat = function (eachfn, arr, fn, callback) { - var r = []; - eachfn(arr, function (x, cb) { - fn(x, function (err, y) { - r = r.concat(y || []); - cb(err); - }); - }, function (err) { - callback(err, r); - }); - }; - async.concat = doParallel(_concat); - async.concatSeries = doSeries(_concat); - - async.whilst = function (test, iterator, callback) { - if (test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.whilst(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.until = function (test, iterator, callback) { - if (!test()) { - iterator(function (err) { - if (err) { - return callback(err); - } - async.until(test, iterator, callback); - }); - } - else { - callback(); - } - }; - - async.queue = function (worker, concurrency) { - var workers = 0; - var tasks = []; - var q = { - concurrency: concurrency, - push: function (data, callback) { - tasks.push({data: data, callback: callback}); - async.nextTick(q.process); - }, - process: function () { - if (workers < q.concurrency && tasks.length) { - var task = tasks.splice(0, 1)[0]; - workers += 1; - worker(task.data, function () { - workers -= 1; - if (task.callback) { - task.callback.apply(task, arguments); - } - q.process(); - }); - } - }, - length: function () { - return tasks.length; - } - }; - return q; - }; - - var _console_fn = function (name) { - return function (fn) { - var args = Array.prototype.slice.call(arguments, 1); - fn.apply(null, args.concat([function (err) { - var args = Array.prototype.slice.call(arguments, 1); - if (typeof console !== 'undefined') { - if (err) { - if (console.error) { - console.error(err); - } - } - else if (console[name]) { - _forEach(args, function (x) { - console[name](x); - }); - } - } - }])); - }; - }; - async.log = _console_fn('log'); - async.dir = _console_fn('dir'); - /*async.info = _console_fn('info'); - async.warn = _console_fn('warn'); - async.error = _console_fn('error');*/ - - async.memoize = function (fn, hasher) { - var memo = {}; - hasher = hasher || function (x) { - return x; - }; - return function () { - var args = Array.prototype.slice.call(arguments); - var callback = args.pop(); - var key = hasher.apply(null, args); - if (key in memo) { - callback.apply(null, memo[key]); - } - else { - fn.apply(null, args.concat([function () { - memo[key] = arguments; - callback.apply(null, arguments); - }])); - } - }; - }; - -}()); -(function(exports){ -/** - * This file is based on the node.js assert module, but with some small - * changes for browser-compatibility - * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS! - */ - - -/** - * Added for browser compatibility - */ - -var _keys = function(obj){ - if(Object.keys) return Object.keys(obj); - if (typeof obj != 'object' && typeof obj != 'function') { - throw new TypeError('-'); - } - var keys = []; - for(var k in obj){ - if(obj.hasOwnProperty(k)) keys.push(k); - } - return keys; -}; - - - -// http://wiki.commonjs.org/wiki/Unit_Testing/1.0 -// -// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8! -// -// Originally from narwhal.js (http://narwhaljs.org) -// Copyright (c) 2009 Thomas Robinson <280north.com> -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the 'Software'), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -var pSlice = Array.prototype.slice; - -// 1. The assert module provides functions that throw -// AssertionError's when particular conditions are not met. The -// assert module must conform to the following interface. - -var assert = exports; - -// 2. The AssertionError is defined in assert. -// new assert.AssertionError({message: message, actual: actual, expected: expected}) - -assert.AssertionError = function AssertionError (options) { - this.name = "AssertionError"; - this.message = options.message; - this.actual = options.actual; - this.expected = options.expected; - this.operator = options.operator; - var stackStartFunction = options.stackStartFunction || fail; - - if (Error.captureStackTrace) { - Error.captureStackTrace(this, stackStartFunction); - } -}; -// code from util.inherits in node -assert.AssertionError.super_ = Error; - - -// EDITED FOR BROWSER COMPATIBILITY: replaced Object.create call -// TODO: test what effect this may have -var ctor = function () { this.constructor = assert.AssertionError; }; -ctor.prototype = Error.prototype; -assert.AssertionError.prototype = new ctor(); - - -assert.AssertionError.prototype.toString = function() { - if (this.message) { - return [this.name+":", this.message].join(' '); - } else { - return [ this.name+":" - , JSON.stringify(this.expected ) - , this.operator - , JSON.stringify(this.actual) - ].join(" "); - } -}; - -// assert.AssertionError instanceof Error - -assert.AssertionError.__proto__ = Error.prototype; - -// At present only the three keys mentioned above are used and -// understood by the spec. Implementations or sub modules can pass -// other keys to the AssertionError's constructor - they will be -// ignored. - -// 3. All of the following functions must throw an AssertionError -// when a corresponding condition is not met, with a message that -// may be undefined if not provided. All assertion methods provide -// both the actual and expected values to the assertion error for -// display purposes. - -function fail(actual, expected, message, operator, stackStartFunction) { - throw new assert.AssertionError({ - message: message, - actual: actual, - expected: expected, - operator: operator, - stackStartFunction: stackStartFunction - }); -} - -// EXTENSION! allows for well behaved errors defined elsewhere. -assert.fail = fail; - -// 4. Pure assertion tests whether a value is truthy, as determined -// by !!guard. -// assert.ok(guard, message_opt); -// This statement is equivalent to assert.equal(true, guard, -// message_opt);. To test strictly for the value true, use -// assert.strictEqual(true, guard, message_opt);. - -assert.ok = function ok(value, message) { - if (!!!value) fail(value, true, message, "==", assert.ok); -}; - -// 5. The equality assertion tests shallow, coercive equality with -// ==. -// assert.equal(actual, expected, message_opt); - -assert.equal = function equal(actual, expected, message) { - if (actual != expected) fail(actual, expected, message, "==", assert.equal); -}; - -// 6. The non-equality assertion tests for whether two objects are not equal -// with != assert.notEqual(actual, expected, message_opt); - -assert.notEqual = function notEqual(actual, expected, message) { - if (actual == expected) { - fail(actual, expected, message, "!=", assert.notEqual); - } -}; - -// 7. The equivalence assertion tests a deep equality relation. -// assert.deepEqual(actual, expected, message_opt); - -assert.deepEqual = function deepEqual(actual, expected, message) { - if (!_deepEqual(actual, expected)) { - fail(actual, expected, message, "deepEqual", assert.deepEqual); - } -}; - -function _deepEqual(actual, expected) { - // 7.1. All identical values are equivalent, as determined by ===. - if (actual === expected) { - return true; - // 7.2. If the expected value is a Date object, the actual value is - // equivalent if it is also a Date object that refers to the same time. - } else if (actual instanceof Date && expected instanceof Date) { - return actual.getTime() === expected.getTime(); - - // 7.3. Other pairs that do not both pass typeof value == "object", - // equivalence is determined by ==. - } else if (typeof actual != 'object' && typeof expected != 'object') { - return actual == expected; - - // 7.4. For all other Object pairs, including Array objects, equivalence is - // determined by having the same number of owned properties (as verified - // with Object.prototype.hasOwnProperty.call), the same set of keys - // (although not necessarily the same order), equivalent values for every - // corresponding key, and an identical "prototype" property. Note: this - // accounts for both named and indexed properties on Arrays. - } else { - return objEquiv(actual, expected); - } -} - -function isUndefinedOrNull (value) { - return value === null || value === undefined; -} - -function isArguments (object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; -} - -function objEquiv (a, b) { - if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) - return false; - // an identical "prototype" property. - if (a.prototype !== b.prototype) return false; - //~~~I've managed to break Object.keys through screwy arguments passing. - // Converting to array solves the problem. - if (isArguments(a)) { - if (!isArguments(b)) { - return false; - } - a = pSlice.call(a); - b = pSlice.call(b); - return _deepEqual(a, b); - } - try{ - var ka = _keys(a), - kb = _keys(b), - key, i; - } catch (e) {//happens when one is a string literal and the other isn't - return false; - } - // having the same number of owned properties (keys incorporates hasOwnProperty) - if (ka.length != kb.length) - return false; - //the same set of keys (although not necessarily the same order), - ka.sort(); - kb.sort(); - //~~~cheap key test - for (i = ka.length - 1; i >= 0; i--) { - if (ka[i] != kb[i]) - return false; - } - //equivalent values for every corresponding key, and - //~~~possibly expensive deep test - for (i = ka.length - 1; i >= 0; i--) { - key = ka[i]; - if (!_deepEqual(a[key], b[key] )) - return false; - } - return true; -} - -// 8. The non-equivalence assertion tests for any deep inequality. -// assert.notDeepEqual(actual, expected, message_opt); - -assert.notDeepEqual = function notDeepEqual(actual, expected, message) { - if (_deepEqual(actual, expected)) { - fail(actual, expected, message, "notDeepEqual", assert.notDeepEqual); - } -}; - -// 9. The strict equality assertion tests strict equality, as determined by ===. -// assert.strictEqual(actual, expected, message_opt); - -assert.strictEqual = function strictEqual(actual, expected, message) { - if (actual !== expected) { - fail(actual, expected, message, "===", assert.strictEqual); - } -}; - -// 10. The strict non-equality assertion tests for strict inequality, as determined by !==. -// assert.notStrictEqual(actual, expected, message_opt); - -assert.notStrictEqual = function notStrictEqual(actual, expected, message) { - if (actual === expected) { - fail(actual, expected, message, "!==", assert.notStrictEqual); - } -}; - -function _throws (shouldThrow, block, err, message) { - var exception = null, - threw = false, - typematters = true; - - message = message || ""; - - //handle optional arguments - if (arguments.length == 3) { - if (typeof(err) == "string") { - message = err; - typematters = false; - } - } else if (arguments.length == 2) { - typematters = false; - } - - try { - block(); - } catch (e) { - threw = true; - exception = e; - } - - if (shouldThrow && !threw) { - fail( "Missing expected exception" - + (err && err.name ? " ("+err.name+")." : '.') - + (message ? " " + message : "") - ); - } - if (!shouldThrow && threw && typematters && exception instanceof err) { - fail( "Got unwanted exception" - + (err && err.name ? " ("+err.name+")." : '.') - + (message ? " " + message : "") - ); - } - if ((shouldThrow && threw && typematters && !(exception instanceof err)) || - (!shouldThrow && threw)) { - throw exception; - } -}; - -// 11. Expected to throw an error: -// assert.throws(block, Error_opt, message_opt); - -assert.throws = function(block, /*optional*/error, /*optional*/message) { - _throws.apply(this, [true].concat(pSlice.call(arguments))); -}; - -// EXTENSION! This is annoying to write outside this module. -assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { - _throws.apply(this, [false].concat(pSlice.call(arguments))); -}; - -assert.ifError = function (err) { if (err) {throw err;}}; -})(assert); -(function(exports){ -/*! - * Nodeunit - * Copyright (c) 2010 Caolan McMahon - * MIT Licensed - * - * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS! - * You can use @REMOVE_LINE_FOR_BROWSER to remove code from the browser build. - * Only code on that line will be removed, its mostly to avoid requiring code - * that is node specific - */ - -/** - * Module dependencies - */ - -//var assert = require('./assert'), //@REMOVE_LINE_FOR_BROWSER -// async = require('../deps/async'); //@REMOVE_LINE_FOR_BROWSER - - -/** - * Creates assertion objects representing the result of an assert call. - * Accepts an object or AssertionError as its argument. - * - * @param {object} obj - * @api public - */ - -exports.assertion = function (obj) { - return { - method: obj.method || '', - message: obj.message || (obj.error && obj.error.message) || '', - error: obj.error, - passed: function () { - return !this.error; - }, - failed: function () { - return Boolean(this.error); - } - }; -}; - -/** - * Creates an assertion list object representing a group of assertions. - * Accepts an array of assertion objects. - * - * @param {Array} arr - * @param {Number} duration - * @api public - */ - -exports.assertionList = function (arr, duration) { - var that = arr || []; - that.failures = function () { - var failures = 0; - for (var i = 0; i < this.length; i += 1) { - if (this[i].failed()) { - failures += 1; - } - } - return failures; - }; - that.passes = function () { - return that.length - that.failures(); - }; - that.duration = duration || 0; - return that; -}; - -/** - * Create a wrapper function for assert module methods. Executes a callback - * after the it's complete with an assertion object representing the result. - * - * @param {Function} callback - * @api private - */ - -var assertWrapper = function (callback) { - return function (new_method, assert_method, arity) { - return function () { - var message = arguments[arity - 1]; - var a = exports.assertion({method: new_method, message: message}); - try { - assert[assert_method].apply(null, arguments); - } - catch (e) { - a.error = e; - } - callback(a); - }; - }; -}; - -/** - * Creates the 'test' object that gets passed to every test function. - * Accepts the name of the test function as its first argument, followed by - * the start time in ms, the options object and a callback function. - * - * @param {String} name - * @param {Number} start - * @param {Object} options - * @param {Function} callback - * @api public - */ - -exports.test = function (name, start, options, callback) { - var expecting; - var a_list = []; - - var wrapAssert = assertWrapper(function (a) { - a_list.push(a); - if (options.log) { - async.nextTick(function () { - options.log(a); - }); - } - }); - - var test = { - done: function (err) { - if (expecting !== undefined && expecting !== a_list.length) { - var e = new Error( - 'Expected ' + expecting + ' assertions, ' + - a_list.length + ' ran' - ); - var a1 = exports.assertion({method: 'expect', error: e}); - a_list.push(a1); - if (options.log) { - async.nextTick(function () { - options.log(a1); - }); - } - } - if (err) { - var a2 = exports.assertion({error: err}); - a_list.push(a2); - if (options.log) { - async.nextTick(function () { - options.log(a2); - }); - } - } - var end = new Date().getTime(); - async.nextTick(function () { - var assertion_list = exports.assertionList(a_list, end - start); - options.testDone(name, assertion_list); - callback(null, a_list); - }); - }, - ok: wrapAssert('ok', 'ok', 2), - same: wrapAssert('same', 'deepEqual', 3), - equals: wrapAssert('equals', 'equal', 3), - expect: function (num) { - expecting = num; - }, - _assertion_list: a_list - }; - // add all functions from the assert module - for (var k in assert) { - if (assert.hasOwnProperty(k)) { - test[k] = wrapAssert(k, k, assert[k].length); - } - } - return test; -}; - -/** - * Ensures an options object has all callbacks, adding empty callback functions - * if any are missing. - * - * @param {Object} opt - * @return {Object} - * @api public - */ - -exports.options = function (opt) { - var optionalCallback = function (name) { - opt[name] = opt[name] || function () {}; - }; - - optionalCallback('moduleStart'); - optionalCallback('moduleDone'); - optionalCallback('testStart'); - optionalCallback('testDone'); - //optionalCallback('log'); - - // 'done' callback is not optional. - - return opt; -}; -})(types); -(function(exports){ -/*! - * Nodeunit - * Copyright (c) 2010 Caolan McMahon - * MIT Licensed - * - * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS! - * You can use @REMOVE_LINE_FOR_BROWSER to remove code from the browser build. - * Only code on that line will be removed, its mostly to avoid requiring code - * that is node specific - */ - -/** - * Module dependencies - */ - -//var async = require('../deps/async'), //@REMOVE_LINE_FOR_BROWSER -// types = require('./types'); //@REMOVE_LINE_FOR_BROWSER - - -/** - * Added for browser compatibility - */ - -var _keys = function (obj) { - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var k in obj) { - if (obj.hasOwnProperty(k)) { - keys.push(k); - } - } - return keys; -}; - - -var _copy = function (obj) { - var nobj = {}; - var keys = _keys(obj); - for (var i = 0; i < keys.length; i += 1) { - nobj[keys[i]] = obj[keys[i]]; - } - return nobj; -}; - - -/** - * Runs a test function (fn) from a loaded module. After the test function - * calls test.done(), the callback is executed with an assertionList as its - * second argument. - * - * @param {String} name - * @param {Function} fn - * @param {Object} opt - * @param {Function} callback - * @api public - */ - -exports.runTest = function (name, fn, opt, callback) { - var options = types.options(opt); - - options.testStart(name); - var start = new Date().getTime(); - var test = types.test(name, start, options, callback); - - try { - fn(test); - } - catch (e) { - test.done(e); - } -}; - -/** - * Takes an object containing test functions or other test suites as properties - * and runs each in series. After all tests have completed, the callback is - * called with a list of all assertions as the second argument. - * - * If a name is passed to this function it is prepended to all test and suite - * names that run within it. - * - * @param {String} name - * @param {Object} suite - * @param {Object} opt - * @param {Function} callback - * @api public - */ - -exports.runSuite = function (name, suite, opt, callback) { - var keys = _keys(suite); - - async.concatSeries(keys, function (k, cb) { - var prop = suite[k], _name; - - _name = name ? [].concat(name, k) : [k]; - - _name.toString = function () { - // fallback for old one - return this.join(' - '); - }; - - if (typeof prop === 'function') { - var in_name = false; - for (var i = 0; i < _name.length; i += 1) { - if (_name[i] === opt.testspec) { - in_name = true; - } - } - if (!opt.testspec || in_name) { - if (opt.moduleStart) { - opt.moduleStart(); - } - exports.runTest(_name, suite[k], opt, cb); - } - else { - return cb(); - } - } - else { - exports.runSuite(_name, suite[k], opt, cb); - } - }, callback); -}; - -/** - * Run each exported test function or test suite from a loaded module. - * - * @param {String} name - * @param {Object} mod - * @param {Object} opt - * @param {Function} callback - * @api public - */ - -exports.runModule = function (name, mod, opt, callback) { - var options = _copy(types.options(opt)); - - var _run = false; - var _moduleStart = options.moduleStart; - function run_once() { - if (!_run) { - _run = true; - _moduleStart(name); - } - } - options.moduleStart = run_once; - - var start = new Date().getTime(); - - exports.runSuite(null, mod, options, function (err, a_list) { - var end = new Date().getTime(); - var assertion_list = types.assertionList(a_list, end - start); - options.moduleDone(name, assertion_list); - callback(null, a_list); - }); -}; - -/** - * Treats an object literal as a list of modules keyed by name. Runs each - * module and finished with calling 'done'. You can think of this as a browser - * safe alternative to runFiles in the nodeunit module. - * - * @param {Object} modules - * @param {Object} opt - * @api public - */ - -// TODO: add proper unit tests for this function -exports.runModules = function (modules, opt) { - var all_assertions = []; - var options = types.options(opt); - var start = new Date().getTime(); - - async.concatSeries(_keys(modules), function (k, cb) { - exports.runModule(k, modules[k], options, cb); - }, - function (err, all_assertions) { - var end = new Date().getTime(); - options.done(types.assertionList(all_assertions, end - start)); - }); -}; - - -/** - * Wraps a test function with setUp and tearDown functions. - * Used by testCase. - * - * @param {Function} setUp - * @param {Function} tearDown - * @param {Function} fn - * @api private - */ - -var wrapTest = function (setUp, tearDown, fn) { - return function (test) { - var context = {}; - if (tearDown) { - var done = test.done; - test.done = function (err) { - try { - tearDown.call(context, function (err2) { - if (err && err2) { - test._assertion_list.push( - types.assertion({error: err}) - ); - return done(err2); - } - done(err || err2); - }); - } - catch (e) { - done(e); - } - }; - } - if (setUp) { - setUp.call(context, function (err) { - if (err) { - return test.done(err); - } - fn.call(context, test); - }); - } - else { - fn.call(context, test); - } - }; -}; - - -/** - * Wraps a group of tests with setUp and tearDown functions. - * Used by testCase. - * - * @param {Function} setUp - * @param {Function} tearDown - * @param {Object} group - * @api private - */ - -var wrapGroup = function (setUp, tearDown, group) { - var tests = {}; - var keys = _keys(group); - for (var i = 0; i < keys.length; i += 1) { - var k = keys[i]; - if (typeof group[k] === 'function') { - tests[k] = wrapTest(setUp, tearDown, group[k]); - } - else if (typeof group[k] === 'object') { - tests[k] = wrapGroup(setUp, tearDown, group[k]); - } - } - return tests; -}; - - -/** - * Utility for wrapping a suite of test functions with setUp and tearDown - * functions. - * - * @param {Object} suite - * @return {Object} - * @api public - */ - -exports.testCase = function (suite) { - var setUp = suite.setUp; - var tearDown = suite.tearDown; - delete suite.setUp; - delete suite.tearDown; - return wrapGroup(setUp, tearDown, suite); -}; -})(core); -(function(exports){ -/*! - * Nodeunit - * Copyright (c) 2010 Caolan McMahon - * MIT Licensed - * - * THIS FILE SHOULD BE BROWSER-COMPATIBLE JS! - * You can use @REMOVE_LINE_FOR_BROWSER to remove code from the browser build. - * Only code on that line will be removed, its mostly to avoid requiring code - * that is node specific - */ - - -/** - * NOTE: this test runner is not listed in index.js because it cannot be - * used with the command-line tool, only inside the browser. - */ - - -/** - * Reporter info string - */ - -exports.info = "Browser-based test reporter"; - - -/** - * Run all tests within each module, reporting the results - * - * @param {Array} files - * @api public - */ - -exports.run = function (modules, options) { - var start = new Date().getTime(); - - function setText(el, txt) { - if ('innerText' in el) { - el.innerText = txt; - } - else if ('textContent' in el){ - el.textContent = txt; - } - } - - function getOrCreate(tag, id) { - var el = document.getElementById(id); - if (!el) { - el = document.createElement(tag); - el.id = id; - document.body.appendChild(el); - } - return el; - }; - - var header = getOrCreate('h1', 'nodeunit-header'); - var banner = getOrCreate('h2', 'nodeunit-banner'); - var userAgent = getOrCreate('h2', 'nodeunit-userAgent'); - var tests = getOrCreate('ol', 'nodeunit-tests'); - var result = getOrCreate('p', 'nodeunit-testresult'); - - setText(userAgent, navigator.userAgent); - - nodeunit.runModules(modules, { - moduleStart: function (name) { - /*var mheading = document.createElement('h2'); - mheading.innerText = name; - results.appendChild(mheading); - module = document.createElement('ol'); - results.appendChild(module);*/ - }, - testDone: function (name, assertions) { - var test = document.createElement('li'); - var strong = document.createElement('strong'); - strong.innerHTML = name + ' (' + - '' + assertions.failures() + ', ' + - '' + assertions.passes() + ', ' + - assertions.length + - ')'; - test.className = assertions.failures() ? 'fail': 'pass'; - test.appendChild(strong); - - var aList = document.createElement('ol'); - aList.style.display = 'none'; - test.onclick = function () { - var d = aList.style.display; - aList.style.display = (d == 'none') ? 'block': 'none'; - }; - for (var i=0; i' + (a.error.stack || a.error) + ''; - li.className = 'fail'; - } - else { - li.innerHTML = a.message || a.method || 'no message'; - li.className = 'pass'; - } - aList.appendChild(li); - } - test.appendChild(aList); - tests.appendChild(test); - }, - done: function (assertions) { - var end = new Date().getTime(); - var duration = end - start; - - var failures = assertions.failures(); - banner.className = failures ? 'fail': 'pass'; - - result.innerHTML = 'Tests completed in ' + duration + - ' milliseconds.
    ' + - assertions.passes() + ' assertions of ' + - '' + assertions.length + ' passed, ' + - assertions.failures() + ' failed.'; - } - }); -}; -})(reporter); -nodeunit = core; -nodeunit.assert = assert; -nodeunit.reporter = reporter; -nodeunit.run = reporter.run; -return nodeunit; })(); diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/suite2.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/suite2.js deleted file mode 100644 index c7288e8..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/suite2.js +++ /dev/null @@ -1,13 +0,0 @@ -this.suite2 = { - 'another test': function (test) { - setTimeout(function () { - // lots of assertions - test.ok(true, 'everythings ok'); - test.ok(true, 'everythings ok'); - test.ok(true, 'everythings ok'); - test.ok(true, 'everythings ok'); - test.ok(true, 'everythings ok'); - test.done(); - }, 10); - } -}; diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/suite3.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/suite3.js deleted file mode 100644 index 8929741..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/suite3.js +++ /dev/null @@ -1,7 +0,0 @@ -this.suite3 = { - 'test for ie6,7,8': function (test) { - test.deepEqual(["test"], ["test"]); - test.notDeepEqual(["a"], ["b"]); - test.done(); - } -}; diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/test.html b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/test.html deleted file mode 100644 index 56d4d96..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/browser/test.html +++ /dev/null @@ -1,30 +0,0 @@ - - - Example tests - - - - - - - - - - - - - - - - - - - - - - - diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_array_test.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_array_test.js deleted file mode 100644 index 5304bef..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_array_test.js +++ /dev/null @@ -1,240 +0,0 @@ -var mongodb = require('../../lib/bson').pure(); - -var testCase = require('nodeunit').testCase, - mongoO = require('../../lib/bson').pure(), - debug = require('util').debug, - inspect = require('util').inspect, - Buffer = require('buffer').Buffer, - gleak = require('../../tools/gleak'), - fs = require('fs'), - BSON = mongoO.BSON, - Code = mongoO.Code, - Binary = mongoO.Binary, - Timestamp = mongoO.Timestamp, - Long = mongoO.Long, - MongoReply = mongoO.MongoReply, - ObjectID = mongoO.ObjectID, - Symbol = mongoO.Symbol, - DBRef = mongoO.DBRef, - Double = mongoO.Double, - MinKey = mongoO.MinKey, - MaxKey = mongoO.MaxKey, - BinaryParser = mongoO.BinaryParser, - utils = require('./tools/utils'); - -var BSONSE = mongodb, - BSONDE = mongodb; - -// for tests -BSONDE.BSON_BINARY_SUBTYPE_DEFAULT = 0; -BSONDE.BSON_BINARY_SUBTYPE_FUNCTION = 1; -BSONDE.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; -BSONDE.BSON_BINARY_SUBTYPE_UUID = 3; -BSONDE.BSON_BINARY_SUBTYPE_MD5 = 4; -BSONDE.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; - -BSONSE.BSON_BINARY_SUBTYPE_DEFAULT = 0; -BSONSE.BSON_BINARY_SUBTYPE_FUNCTION = 1; -BSONSE.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; -BSONSE.BSON_BINARY_SUBTYPE_UUID = 3; -BSONSE.BSON_BINARY_SUBTYPE_MD5 = 4; -BSONSE.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; - -var hexStringToBinary = function(string) { - var numberofValues = string.length / 2; - var array = ""; - - for(var i = 0; i < numberofValues; i++) { - array += String.fromCharCode(parseInt(string[i*2] + string[i*2 + 1], 16)); - } - return array; -} - -var assertBuffersEqual = function(test, buffer1, buffer2) { - if(buffer1.length != buffer2.length) test.fail("Buffers do not have the same length", buffer1, buffer2); - - for(var i = 0; i < buffer1.length; i++) { - test.equal(buffer1[i], buffer2[i]); - } -} - -/** - * Module for parsing an ISO 8601 formatted string into a Date object. - */ -var ISODate = function (string) { - var match; - - if (typeof string.getTime === "function") - return string; - else if (match = string.match(/^(\d{4})(-(\d{2})(-(\d{2})(T(\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|((\+|-)(\d{2}):(\d{2}))))?)?)?$/)) { - var date = new Date(); - date.setUTCFullYear(Number(match[1])); - date.setUTCMonth(Number(match[3]) - 1 || 0); - date.setUTCDate(Number(match[5]) || 0); - date.setUTCHours(Number(match[7]) || 0); - date.setUTCMinutes(Number(match[8]) || 0); - date.setUTCSeconds(Number(match[10]) || 0); - date.setUTCMilliseconds(Number("." + match[12]) * 1000 || 0); - - if (match[13] && match[13] !== "Z") { - var h = Number(match[16]) || 0, - m = Number(match[17]) || 0; - - h *= 3600000; - m *= 60000; - - var offset = h + m; - if (match[15] == "+") - offset = -offset; - - date = new Date(date.valueOf() + offset); - } - - return date; - } else - throw new Error("Invalid ISO 8601 date given.", __filename); -}; - -var _Uint8Array = null; - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.setUp = function(callback) { - _Uint8Array = global.Uint8Array; - delete global['Uint8Array']; - callback(); -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.tearDown = function(callback) { - global['Uint8Array'] = _Uint8Array; - callback(); -} - -// /** -// * @ignore -// */ -// exports.shouldCorrectlyDeserializeUsingTypedArray = function(test) { -// var motherOfAllDocuments = { -// 'string': '客家话', -// 'array': [1,2,3], -// 'hash': {'a':1, 'b':2}, -// 'date': new Date(), -// 'oid': new ObjectID(), -// 'binary': new Binary(new Buffer("hello")), -// 'int': 42, -// 'float': 33.3333, -// 'regexp': /regexp/, -// 'boolean': true, -// 'long': Long.fromNumber(100), -// 'where': new Code('this.a > i', {i:1}), -// 'dbref': new DBRef('namespace', new ObjectID(), 'integration_tests_'), -// 'minkey': new MinKey(), -// 'maxkey': new MaxKey() -// } -// -// // Let's serialize it -// var data = BSONSE.BSON.serialize(motherOfAllDocuments, true, true, false); -// // Build a typed array -// var arr = new Uint8Array(new ArrayBuffer(data.length)); -// // Iterate over all the fields and copy -// for(var i = 0; i < data.length; i++) { -// arr[i] = data[i] -// } -// -// // Deserialize the object -// var object = BSONDE.BSON.deserialize(arr); -// // Asserts -// test.equal(motherOfAllDocuments.string, object.string); -// test.deepEqual(motherOfAllDocuments.array, object.array); -// test.deepEqual(motherOfAllDocuments.date, object.date); -// test.deepEqual(motherOfAllDocuments.oid.toHexString(), object.oid.toHexString()); -// test.deepEqual(motherOfAllDocuments.binary.length(), object.binary.length()); -// // Assert the values of the binary -// for(var i = 0; i < motherOfAllDocuments.binary.length(); i++) { -// test.equal(motherOfAllDocuments.binary.value[i], object.binary[i]); -// } -// test.deepEqual(motherOfAllDocuments.int, object.int); -// test.deepEqual(motherOfAllDocuments.float, object.float); -// test.deepEqual(motherOfAllDocuments.regexp, object.regexp); -// test.deepEqual(motherOfAllDocuments.boolean, object.boolean); -// test.deepEqual(motherOfAllDocuments.long.toNumber(), object.long); -// test.deepEqual(motherOfAllDocuments.where, object.where); -// test.deepEqual(motherOfAllDocuments.dbref.oid.toHexString(), object.dbref.oid.toHexString()); -// test.deepEqual(motherOfAllDocuments.dbref.namespace, object.dbref.namespace); -// test.deepEqual(motherOfAllDocuments.dbref.db, object.dbref.db); -// test.deepEqual(motherOfAllDocuments.minkey, object.minkey); -// test.deepEqual(motherOfAllDocuments.maxkey, object.maxkey); -// test.done(); -// } - -/** - * @ignore - */ -exports.shouldCorrectlySerializeUsingTypedArray = function(test) { - var motherOfAllDocuments = { - 'string': 'hello', - 'array': [1,2,3], - 'hash': {'a':1, 'b':2}, - 'date': new Date(), - 'oid': new ObjectID(), - 'binary': new Binary(new Buffer("hello")), - 'int': 42, - 'float': 33.3333, - 'regexp': /regexp/, - 'boolean': true, - 'long': Long.fromNumber(100), - 'where': new Code('this.a > i', {i:1}), - 'dbref': new DBRef('namespace', new ObjectID(), 'integration_tests_'), - 'minkey': new MinKey(), - 'maxkey': new MaxKey() - } - - // Let's serialize it - var data = BSONSE.BSON.serialize(motherOfAllDocuments, true, false, false); - // And deserialize it again - var object = BSONSE.BSON.deserialize(data); - // Asserts - test.equal(motherOfAllDocuments.string, object.string); - test.deepEqual(motherOfAllDocuments.array, object.array); - test.deepEqual(motherOfAllDocuments.date, object.date); - test.deepEqual(motherOfAllDocuments.oid.toHexString(), object.oid.toHexString()); - test.deepEqual(motherOfAllDocuments.binary.length(), object.binary.length()); - // Assert the values of the binary - for(var i = 0; i < motherOfAllDocuments.binary.length(); i++) { - test.equal(motherOfAllDocuments.binary.value[i], object.binary[i]); - } - test.deepEqual(motherOfAllDocuments.int, object.int); - test.deepEqual(motherOfAllDocuments.float, object.float); - test.deepEqual(motherOfAllDocuments.regexp, object.regexp); - test.deepEqual(motherOfAllDocuments.boolean, object.boolean); - test.deepEqual(motherOfAllDocuments.long.toNumber(), object.long); - test.deepEqual(motherOfAllDocuments.where, object.where); - test.deepEqual(motherOfAllDocuments.dbref.oid.toHexString(), object.dbref.oid.toHexString()); - test.deepEqual(motherOfAllDocuments.dbref.namespace, object.dbref.namespace); - test.deepEqual(motherOfAllDocuments.dbref.db, object.dbref.db); - test.deepEqual(motherOfAllDocuments.minkey, object.minkey); - test.deepEqual(motherOfAllDocuments.maxkey, object.maxkey); - test.done(); -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.noGlobalsLeaked = function(test) { - var leaks = gleak.detectNew(); - test.equal(0, leaks.length, "global var leak detected: " + leaks.join(', ')); - test.done(); -} \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_parser_comparision_test.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_parser_comparision_test.js deleted file mode 100644 index 7481540..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_parser_comparision_test.js +++ /dev/null @@ -1,493 +0,0 @@ -var sys = require('util'), - debug = require('util').debug, - inspect = require('util').inspect, - Buffer = require('buffer').Buffer, - BSON = require('../../ext').BSON, - Buffer = require('buffer').Buffer, - BSONJS = require('../../lib/bson/bson').BSON, - BinaryParser = require('../../lib/bson/binary_parser').BinaryParser, - Long = require('../../lib/bson/long').Long, - ObjectID = require('../../lib/bson/bson').ObjectID, - Binary = require('../../lib/bson/bson').Binary, - Code = require('../../lib/bson/bson').Code, - DBRef = require('../../lib/bson/bson').DBRef, - Symbol = require('../../lib/bson/bson').Symbol, - Double = require('../../lib/bson/bson').Double, - MaxKey = require('../../lib/bson/bson').MaxKey, - MinKey = require('../../lib/bson/bson').MinKey, - Timestamp = require('../../lib/bson/bson').Timestamp, - gleak = require('../../tools/gleak'), - assert = require('assert'); - -// Long/ObjectID/Binary/Code/DbRef/Symbol/Double/Timestamp/MinKey/MaxKey -var bsonC = new BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]); -var bsonJS = new BSONJS([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]); - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.setUp = function(callback) { - callback(); -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.tearDown = function(callback) { - callback(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize simple edge value'] = function(test) { - // Simple serialization and deserialization of edge value - var doc = {doc:0x1ffffffffffffe}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - - var doc = {doc:-0x1ffffffffffffe}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly execute toJSON'] = function(test) { - var a = Long.fromNumber(10); - assert.equal(10, a); - - var a = Long.fromNumber(9223372036854775807); - assert.equal(9223372036854775807, a); - - // Simple serialization and deserialization test for a Single String value - var doc = {doc:'Serialize'}; - var simple_string_serialized = bsonC.serialize(doc, true, false); - - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Serialize and Deserialize nested document'] = function(test) { - // Nested doc - var doc = {a:{b:{c:1}}}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - test.done(); -} - -/** - * @ignore - */ -exports['Simple integer serialization/deserialization test, including testing boundary conditions'] = function(test) { - var doc = {doc:-1}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - - var doc = {doc:2147483648}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - - var doc = {doc:-2147483648}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization test for a Long value'] = function(test) { - var doc = {doc:Long.fromNumber(9223372036854775807)}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize({doc:Long.fromNumber(9223372036854775807)}, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - - var doc = {doc:Long.fromNumber(-9223372036854775807)}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize({doc:Long.fromNumber(-9223372036854775807)}, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a Float value'] = function(test) { - var doc = {doc:2222.3333}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - - var doc = {doc:-2222.3333}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a null value'] = function(test) { - var doc = {doc:null}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a boolean value'] = function(test) { - var doc = {doc:true}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a date value'] = function(test) { - var date = new Date(); - var doc = {doc:date}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')), bsonC.deserialize(simple_string_serialized)); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a boolean value'] = function(test) { - var doc = {doc:/abcd/mi}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.equal(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')).doc.toString(), bsonC.deserialize(simple_string_serialized).doc.toString()); - - var doc = {doc:/abcd/}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc, false, true)); - assert.equal(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')).doc.toString(), bsonC.deserialize(simple_string_serialized).doc.toString()); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a objectId value'] = function(test) { - var doc = {doc:new ObjectID()}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - var doc2 = {doc:ObjectID.createFromHexString(doc.doc.toHexString())}; - - assert.deepEqual(simple_string_serialized, bsonJS.serialize(doc2, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')).doc.toString(), bsonC.deserialize(simple_string_serialized).doc.toString()); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a Binary value'] = function(test) { - var binary = new Binary(); - var string = 'binstring' - for(var index = 0; index < string.length; index++) { binary.put(string.charAt(index)); } - - var simple_string_serialized = bsonC.serialize({doc:binary}, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize({doc:binary}, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')).doc.value(), bsonC.deserialize(simple_string_serialized).doc.value()); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a Binary value of type 2'] = function(test) { - var binary = new Binary(new Buffer('binstring'), Binary.SUBTYPE_BYTE_ARRAY); - var simple_string_serialized = bsonC.serialize({doc:binary}, false, true); - assert.deepEqual(simple_string_serialized, bsonJS.serialize({doc:binary}, false, true)); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized, 'binary')).doc.value(), bsonC.deserialize(simple_string_serialized).doc.value()); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a Code value'] = function(test) { - var code = new Code('this.a > i', {'i': 1}); - var simple_string_serialized_2 = bsonJS.serialize({doc:code}, false, true); - var simple_string_serialized = bsonC.serialize({doc:code}, false, true); - - assert.deepEqual(simple_string_serialized, simple_string_serialized_2); - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized_2, 'binary')).doc.scope, bsonC.deserialize(simple_string_serialized).doc.scope); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for an Object'] = function(test) { - var simple_string_serialized = bsonC.serialize({doc:{a:1, b:{c:2}}}, false, true); - var simple_string_serialized_2 = bsonJS.serialize({doc:{a:1, b:{c:2}}}, false, true); - assert.deepEqual(simple_string_serialized, simple_string_serialized_2) - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized_2, 'binary')).doc, bsonC.deserialize(simple_string_serialized).doc); - - // Simple serialization and deserialization for an Array - var simple_string_serialized = bsonC.serialize({doc:[9, 9, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1]}, false, true); - var simple_string_serialized_2 = bsonJS.serialize({doc:[9, 9, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1]}, false, true); - - assert.deepEqual(simple_string_serialized, simple_string_serialized_2) - assert.deepEqual(bsonJS.deserialize(new Buffer(simple_string_serialized_2, 'binary')).doc, bsonC.deserialize(simple_string_serialized).doc); - test.done(); -} - -/** - * @ignore - */ -exports['Simple serialization and deserialization for a DBRef'] = function(test) { - var oid = new ObjectID() - var oid2 = new ObjectID.createFromHexString(oid.toHexString()) - var simple_string_serialized = bsonJS.serialize({doc:new DBRef('namespace', oid2, 'integration_tests_')}, false, true); - var simple_string_serialized_2 = bsonC.serialize({doc:new DBRef('namespace', oid, 'integration_tests_')}, false, true); - - assert.deepEqual(simple_string_serialized, simple_string_serialized_2) - // Ensure we have the same values for the dbref - var object_js = bsonJS.deserialize(new Buffer(simple_string_serialized_2, 'binary')); - var object_c = bsonC.deserialize(simple_string_serialized); - - assert.equal(object_js.doc.namespace, object_c.doc.namespace); - assert.equal(object_js.doc.oid.toHexString(), object_c.doc.oid.toHexString()); - assert.equal(object_js.doc.db, object_c.doc.db); - test.done(); -} - -/** - * @ignore - */ -exports['Should correctly deserialize bytes array'] = function(test) { - // Serialized document - var bytes = [47,0,0,0,2,110,97,109,101,0,6,0,0,0,80,97,116,116,121,0,16,97,103,101,0,34,0,0,0,7,95,105,100,0,76,100,12,23,11,30,39,8,89,0,0,1,0]; - var serialized_data = ''; - // Convert to chars - for(var i = 0; i < bytes.length; i++) { - serialized_data = serialized_data + BinaryParser.fromByte(bytes[i]); - } - var object = bsonC.deserialize(new Buffer(serialized_data, 'binary')); - assert.equal('Patty', object.name) - assert.equal(34, object.age) - assert.equal('4c640c170b1e270859000001', object._id.toHexString()) - test.done(); -} - -/** - * @ignore - */ -exports['Serialize utf8'] = function(test) { - var doc = { "name" : "本荘由利地域に洪水警報", "name1" : "öüóőúéáűíÖÜÓŐÚÉÁŰÍ", "name2" : "abcdedede"}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - var simple_string_serialized2 = bsonJS.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, simple_string_serialized2) - - var object = bsonC.deserialize(simple_string_serialized); - assert.equal(doc.name, object.name) - assert.equal(doc.name1, object.name1) - assert.equal(doc.name2, object.name2) - test.done(); -} - -/** - * @ignore - */ -exports['Serialize object with array'] = function(test) { - var doc = {b:[1, 2, 3]}; - var simple_string_serialized = bsonC.serialize(doc, false, true); - var simple_string_serialized_2 = bsonJS.serialize(doc, false, true); - assert.deepEqual(simple_string_serialized, simple_string_serialized_2) - - var object = bsonC.deserialize(simple_string_serialized); - assert.deepEqual(doc, object) - test.done(); -} - -/** - * @ignore - */ -exports['Test equality of an object ID'] = function(test) { - var object_id = new ObjectID(); - var object_id_2 = new ObjectID(); - assert.ok(object_id.equals(object_id)); - assert.ok(!(object_id.equals(object_id_2))) - test.done(); -} - -/** - * @ignore - */ -exports['Test same serialization for Object ID'] = function(test) { - var object_id = new ObjectID(); - var object_id2 = ObjectID.createFromHexString(object_id.toString()) - var simple_string_serialized = bsonJS.serialize({doc:object_id}, false, true); - var simple_string_serialized_2 = bsonC.serialize({doc:object_id2}, false, true); - - assert.equal(simple_string_serialized_2.length, simple_string_serialized.length); - assert.deepEqual(simple_string_serialized, simple_string_serialized_2) - var object = bsonJS.deserialize(new Buffer(simple_string_serialized_2, 'binary')); - var object2 = bsonC.deserialize(simple_string_serialized); - assert.equal(object.doc.id, object2.doc.id) - test.done(); -} - -/** - * @ignore - */ -exports['Complex object serialization'] = function(test) { - // JS Object - var c1 = { _id: new ObjectID, comments: [], title: 'number 1' }; - var c2 = { _id: new ObjectID, comments: [], title: 'number 2' }; - var doc = { - numbers: [] - , owners: [] - , comments: [c1, c2] - , _id: new ObjectID - }; - - var simple_string_serialized = bsonJS.serialize(doc, false, true); - - // C++ Object - var c1 = { _id: ObjectID.createFromHexString(c1._id.toHexString()), comments: [], title: 'number 1' }; - var c2 = { _id: ObjectID.createFromHexString(c2._id.toHexString()), comments: [], title: 'number 2' }; - var doc = { - numbers: [] - , owners: [] - , comments: [c1, c2] - , _id: ObjectID.createFromHexString(doc._id.toHexString()) - }; - - var simple_string_serialized_2 = bsonC.serialize(doc, false, true); - - for(var i = 0; i < simple_string_serialized_2.length; i++) { - // debug(i + "[" + simple_string_serialized_2[i] + "] = [" + simple_string_serialized[i] + "]") - assert.equal(simple_string_serialized_2[i], simple_string_serialized[i]); - } - - var doc1 = bsonJS.deserialize(new Buffer(simple_string_serialized_2)); - var doc2 = bsonC.deserialize(new Buffer(simple_string_serialized_2)); - assert.equal(doc._id.id, doc1._id.id) - assert.equal(doc._id.id, doc2._id.id) - assert.equal(doc1._id.id, doc2._id.id) - - var doc = { - _id: 'testid', - key1: { code: 'test1', time: {start:1309323402727,end:1309323402727}, x:10, y:5 }, - key2: { code: 'test1', time: {start:1309323402727,end:1309323402727}, x:10, y:5 } - }; - - var simple_string_serialized = bsonJS.serialize(doc, false, true); - var simple_string_serialized_2 = bsonC.serialize(doc, false, true); - test.done(); -} - -/** - * @ignore - */ -exports['Serialize function'] = function(test) { - var doc = { - _id: 'testid', - key1: function() {} - } - - var simple_string_serialized = bsonJS.serialize(doc, false, true, true); - var simple_string_serialized_2 = bsonC.serialize(doc, false, true, true); - - // Deserialize the string - var doc1 = bsonJS.deserialize(new Buffer(simple_string_serialized_2)); - var doc2 = bsonC.deserialize(new Buffer(simple_string_serialized_2)); - assert.equal(doc1.key1.code.toString(), doc2.key1.code.toString()) - test.done(); -} - -/** - * @ignore - */ -exports['Serialize document with special operators'] = function(test) { - var doc = {"user_id":"4e9fc8d55883d90100000003","lc_status":{"$ne":"deleted"},"owner_rating":{"$exists":false}}; - var simple_string_serialized = bsonJS.serialize(doc, false, true, true); - var simple_string_serialized_2 = bsonC.serialize(doc, false, true, true); - - // Should serialize to the same value - assert.equal(simple_string_serialized_2.toString('base64'), simple_string_serialized.toString('base64')) - var doc1 = bsonJS.deserialize(simple_string_serialized_2); - var doc2 = bsonC.deserialize(simple_string_serialized); - assert.deepEqual(doc1, doc2) - test.done(); -} - -/** - * @ignore - */ -exports['Create ObjectID from hex string'] = function(test) { - // Hex Id - var hexId = new ObjectID().toString(); - var docJS = {_id: ObjectID.createFromHexString(hexId), 'funds.remaining': {$gte: 1.222}, 'transactions.id': {$ne: ObjectID.createFromHexString(hexId)}}; - var docC = {_id: ObjectID.createFromHexString(hexId), 'funds.remaining': {$gte: 1.222}, 'transactions.id': {$ne: ObjectID.createFromHexString(hexId)}}; - var docJSBin = bsonJS.serialize(docJS, false, true, true); - var docCBin = bsonC.serialize(docC, false, true, true); - assert.equal(docCBin.toString('base64'), docJSBin.toString('base64')); - test.done(); -} - -/** - * @ignore - */ -exports['Serialize big complex document'] = function(test) { - // Complex document serialization - var doc = {"DateTime": "Tue Nov 40 2011 17:27:55 GMT+0000 (WEST)","isActive": true,"Media": {"URL": "http://videos.sapo.pt/Tc85NsjaKjj8o5aV7Ubb"},"Title": "Lisboa fecha a ganhar 0.19%","SetPosition": 60,"Type": "videos","Thumbnail": [{"URL": "http://rd3.videos.sapo.pt/Tc85NsjaKjj8o5aV7Ubb/pic/320x240","Dimensions": {"Height": 240,"Width": 320}}],"Source": {"URL": "http://videos.sapo.pt","SetID": "1288","SourceID": "http://videos.sapo.pt/tvnet/rss2","SetURL": "http://noticias.sapo.pt/videos/tv-net_1288/","ItemID": "Tc85NsjaKjj8o5aV7Ubb","Name": "SAPO Vídeos"},"Category": "Tec_ciencia","Description": "Lisboa fecha a ganhar 0.19%","GalleryID": new ObjectID("4eea2a634ce8573200000000"),"InternalRefs": {"RegisterDate": "Thu Dec 15 2011 17:12:51 GMT+0000 (WEST)","ChangeDate": "Thu Dec 15 2011 17:12:51 GMT+0000 (WEST)","Hash": 332279244514},"_id": new ObjectID("4eea2a96e52778160000003a")} - var docJSBin = bsonJS.serialize(doc, false, true, true); - var docCBin = bsonC.serialize(doc, false, true, true); - assert.equal(docCBin.toString('base64'), docJSBin.toString('base64')); - test.done(); -} - -/** - * @ignore - */ -exports['Should error out due to 24 characters but not valid hexstring for ObjectID'] = function(test) { - try { - var oid = new ObjectID("tttttttttttttttttttttttt"); - test.ok(false); - } catch(err) {} - - test.done(); -} - - -/** - * @ignore - */ -exports.noGlobalsLeaked = function(test) { - var leaks = gleak.detectNew(); - test.equal(0, leaks.length, "global var leak detected: " + leaks.join(', ')); - test.done(); -} \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_test.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_test.js deleted file mode 100644 index 9eb5756..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_test.js +++ /dev/null @@ -1,1694 +0,0 @@ -var mongodb = process.env['TEST_NATIVE'] != null ? require('../../lib/bson').native() : require('../../lib/bson').pure(); - -var testCase = require('nodeunit').testCase, - mongoO = require('../../lib/bson').pure(), - Buffer = require('buffer').Buffer, - gleak = require('../../tools/gleak'), - fs = require('fs'), - BSON = mongoO.BSON, - Code = mongoO.Code, - Binary = mongoO.Binary, - Timestamp = mongoO.Timestamp, - Long = mongoO.Long, - MongoReply = mongoO.MongoReply, - ObjectID = mongoO.ObjectID, - ObjectId = mongoO.ObjectId, - Symbol = mongoO.Symbol, - DBRef = mongoO.DBRef, - Double = mongoO.Double, - MinKey = mongoO.MinKey, - MaxKey = mongoO.MaxKey, - BinaryParser = mongoO.BinaryParser, - vm = require('vm'); - -var BSONSE = mongodb, - BSONDE = mongodb; - -// for tests -BSONDE.BSON_BINARY_SUBTYPE_DEFAULT = 0; -BSONDE.BSON_BINARY_SUBTYPE_FUNCTION = 1; -BSONDE.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; -BSONDE.BSON_BINARY_SUBTYPE_UUID = 3; -BSONDE.BSON_BINARY_SUBTYPE_MD5 = 4; -BSONDE.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; - -BSONSE.BSON_BINARY_SUBTYPE_DEFAULT = 0; -BSONSE.BSON_BINARY_SUBTYPE_FUNCTION = 1; -BSONSE.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; -BSONSE.BSON_BINARY_SUBTYPE_UUID = 3; -BSONSE.BSON_BINARY_SUBTYPE_MD5 = 4; -BSONSE.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; - -var hexStringToBinary = function(string) { - var numberofValues = string.length / 2; - var array = ""; - - for(var i = 0; i < numberofValues; i++) { - array += String.fromCharCode(parseInt(string[i*2] + string[i*2 + 1], 16)); - } - return array; -} - -var assertBuffersEqual = function(test, buffer1, buffer2) { - if(buffer1.length != buffer2.length) test.fail("Buffers do not have the same length", buffer1, buffer2); - - for(var i = 0; i < buffer1.length; i++) { - test.equal(buffer1[i], buffer2[i]); - } -} - -/** - * Module for parsing an ISO 8601 formatted string into a Date object. - */ -var ISODate = function (string) { - var match; - - if (typeof string.getTime === "function") - return string; - else if (match = string.match(/^(\d{4})(-(\d{2})(-(\d{2})(T(\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|((\+|-)(\d{2}):(\d{2}))))?)?)?$/)) { - var date = new Date(); - date.setUTCFullYear(Number(match[1])); - date.setUTCMonth(Number(match[3]) - 1 || 0); - date.setUTCDate(Number(match[5]) || 0); - date.setUTCHours(Number(match[7]) || 0); - date.setUTCMinutes(Number(match[8]) || 0); - date.setUTCSeconds(Number(match[10]) || 0); - date.setUTCMilliseconds(Number("." + match[12]) * 1000 || 0); - - if (match[13] && match[13] !== "Z") { - var h = Number(match[16]) || 0, - m = Number(match[17]) || 0; - - h *= 3600000; - m *= 60000; - - var offset = h + m; - if (match[15] == "+") - offset = -offset; - - date = new Date(date.valueOf() + offset); - } - - return date; - } else - throw new Error("Invalid ISO 8601 date given.", __filename); -}; - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.setUp = function(callback) { - callback(); -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.tearDown = function(callback) { - callback(); -} - -/** - * @ignore - */ -exports['Should Correctly create ObjectID and do deep equals'] = function(test) { - var test_string = {hello: new ObjectID()}; - test_string.hello.toHexString(); - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_string, false, true); - test.deepEqual(test_string, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly get BSON types from require'] = function(test) { - var _mongodb = require('../../lib/bson'); - test.ok(_mongodb.ObjectID === ObjectID); - test.ok(_mongodb.Binary === Binary); - test.ok(_mongodb.Long === Long); - test.ok(_mongodb.Timestamp === Timestamp); - test.ok(_mongodb.Code === Code); - test.ok(_mongodb.DBRef === DBRef); - test.ok(_mongodb.Symbol === Symbol); - test.ok(_mongodb.MinKey === MinKey); - test.ok(_mongodb.MaxKey === MaxKey); - test.ok(_mongodb.Double === Double); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Deserialize object'] = function(test) { - var bytes = [95,0,0,0,2,110,115,0,42,0,0,0,105,110,116,101,103,114,97,116,105,111,110,95,116,101,115,116,115,95,46,116,101,115,116,95,105,110,100,101,120,95,105,110,102,111,114,109,97,116,105,111,110,0,8,117,110,105,113,117,101,0,0,3,107,101,121,0,12,0,0,0,16,97,0,1,0,0,0,0,2,110,97,109,101,0,4,0,0,0,97,95,49,0,0]; - var serialized_data = ''; - // Convert to chars - for(var i = 0; i < bytes.length; i++) { - serialized_data = serialized_data + BinaryParser.fromByte(bytes[i]); - } - - var object = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(new Buffer(serialized_data, 'binary')); - test.equal("a_1", object.name); - test.equal(false, object.unique); - test.equal(1, object.key.a); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Deserialize object with all types'] = function(test) { - var bytes = [26,1,0,0,7,95,105,100,0,161,190,98,75,118,169,3,0,0,3,0,0,4,97,114,114,97,121,0,26,0,0,0,16,48,0,1,0,0,0,16,49,0,2,0,0,0,16,50,0,3,0,0,0,0,2,115,116,114,105,110,103,0,6,0,0,0,104,101,108,108,111,0,3,104,97,115,104,0,19,0,0,0,16,97,0,1,0,0,0,16,98,0,2,0,0,0,0,9,100,97,116,101,0,161,190,98,75,0,0,0,0,7,111,105,100,0,161,190,98,75,90,217,18,0,0,1,0,0,5,98,105,110,97,114,121,0,7,0,0,0,2,3,0,0,0,49,50,51,16,105,110,116,0,42,0,0,0,1,102,108,111,97,116,0,223,224,11,147,169,170,64,64,11,114,101,103,101,120,112,0,102,111,111,98,97,114,0,105,0,8,98,111,111,108,101,97,110,0,1,15,119,104,101,114,101,0,25,0,0,0,12,0,0,0,116,104,105,115,46,120,32,61,61,32,51,0,5,0,0,0,0,3,100,98,114,101,102,0,37,0,0,0,2,36,114,101,102,0,5,0,0,0,116,101,115,116,0,7,36,105,100,0,161,190,98,75,2,180,1,0,0,2,0,0,0,10,110,117,108,108,0,0]; - var serialized_data = ''; - // Convert to chars - for(var i = 0; i < bytes.length; i++) { - serialized_data = serialized_data + BinaryParser.fromByte(bytes[i]); - } - - var object = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(new Buffer(serialized_data, 'binary'));//, false, true); - // Perform tests - test.equal("hello", object.string); - test.deepEqual([1,2,3], object.array); - test.equal(1, object.hash.a); - test.equal(2, object.hash.b); - test.ok(object.date != null); - test.ok(object.oid != null); - test.ok(object.binary != null); - test.equal(42, object.int); - test.equal(33.3333, object.float); - test.ok(object.regexp != null); - test.equal(true, object.boolean); - test.ok(object.where != null); - test.ok(object.dbref != null); - test.ok(object[null] == null); - test.done(); -} - -/** - * @ignore - */ -exports['Should Serialize and Deserialize String'] = function(test) { - var test_string = {hello: 'world'}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_string, false, true); - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_string)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_string, false, serialized_data2, 0); - - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - test.deepEqual(test_string, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Serialize and Deserialize Empty String'] = function(test) { - var test_string = {hello: ''}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_string, false, true); - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_string)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_string, false, serialized_data2, 0); - - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - test.deepEqual(test_string, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Integer'] = function(test) { - var test_number = {doc: 5}; - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_number, false, true); - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_number)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_number, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - test.deepEqual(test_number, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data)); - test.deepEqual(test_number, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data2)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize null value'] = function(test) { - var test_null = {doc:null}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_null, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_null)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_null, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var object = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.equal(null, object.doc); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Number'] = function(test) { - var test_number = {doc: 5.5}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_number, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_number)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_number, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - test.deepEqual(test_number, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Integer'] = function(test) { - var test_int = {doc: 42}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_int, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_int)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_int, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - test.deepEqual(test_int.doc, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc); - - test_int = {doc: -5600}; - serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_int, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_int)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_int, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - test.deepEqual(test_int.doc, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc); - - test_int = {doc: 2147483647}; - serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_int, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_int)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_int, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - test.deepEqual(test_int.doc, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc); - - test_int = {doc: -2147483648}; - serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_int, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_int)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_int, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - test.deepEqual(test_int.doc, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Object'] = function(test) { - var doc = {doc: {age: 42, name: 'Spongebob', shoe_size: 9.5}}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - test.deepEqual(doc.doc.age, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc.age); - test.deepEqual(doc.doc.name, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc.name); - test.deepEqual(doc.doc.shoe_size, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc.shoe_size); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Array'] = function(test) { - var doc = {doc: [1, 2, 'a', 'b']}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.equal(doc.doc[0], deserialized.doc[0]) - test.equal(doc.doc[1], deserialized.doc[1]) - test.equal(doc.doc[2], deserialized.doc[2]) - test.equal(doc.doc[3], deserialized.doc[3]) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Array with added on functions'] = function(test) { - Array.prototype.toXml = function() {}; - var doc = {doc: [1, 2, 'a', 'b']}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.equal(doc.doc[0], deserialized.doc[0]) - test.equal(doc.doc[1], deserialized.doc[1]) - test.equal(doc.doc[2], deserialized.doc[2]) - test.equal(doc.doc[3], deserialized.doc[3]) - test.done(); -} - -/** - * @ignore - */ -exports['Should correctly deserialize a nested object'] = function(test) { - var doc = {doc: {doc:1}}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - test.deepEqual(doc.doc.doc, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc.doc); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize A Boolean'] = function(test) { - var doc = {doc: true}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - test.equal(doc.doc, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize a Date'] = function(test) { - var date = new Date(); - //(2009, 11, 12, 12, 00, 30) - date.setUTCDate(12); - date.setUTCFullYear(2009); - date.setUTCMonth(11 - 1); - date.setUTCHours(12); - date.setUTCMinutes(0); - date.setUTCSeconds(30); - var doc = {doc: date}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - test.equal(doc.date, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc.date); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize a Date from another VM'] = function(test) { - var script = "date1 = new Date();", - ctx = vm.createContext({ - date1 : null - }); - vm.runInContext(script, ctx, 'myfile.vm'); - - var date = ctx.date1; - //(2009, 11, 12, 12, 00, 30) - date.setUTCDate(12); - date.setUTCFullYear(2009); - date.setUTCMonth(11 - 1); - date.setUTCHours(12); - date.setUTCMinutes(0); - date.setUTCSeconds(30); - var doc = {doc: date}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - test.equal(doc.date, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc.date); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize nested doc'] = function(test) { - var doc = { - string: "Strings are great", - decimal: 3.14159265, - bool: true, - integer: 5, - - subObject: { - moreText: "Bacon ipsum dolor.", - longKeylongKeylongKeylongKeylongKeylongKey: "Pork belly." - }, - - subArray: [1,2,3,4,5,6,7,8,9,10], - anotherString: "another string" - } - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Oid'] = function(test) { - var doc = {doc: new ObjectID()}; - var doc2 = {doc: ObjectID.createFromHexString(doc.doc.toHexString())}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - test.deepEqual(doc, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly encode Empty Hash'] = function(test) { - var doc = {}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - test.deepEqual(doc, new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Ordered Hash'] = function(test) { - var doc = {doc: {b:1, a:2, c:3, d:4}}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var decoded_hash = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data).doc; - var keys = []; - - for(var name in decoded_hash) keys.push(name); - test.deepEqual(['b', 'a', 'c', 'd'], keys); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Regular Expression'] = function(test) { - // Serialize the regular expression - var doc = {doc: /foobar/mi}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var doc2 = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - - test.deepEqual(doc.doc.toString(), doc2.doc.toString()); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize a Binary object'] = function(test) { - var bin = new Binary(); - var string = 'binstring'; - for(var index = 0; index < string.length; index++) { - bin.put(string.charAt(index)); - } - - var doc = {doc: bin}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - - test.deepEqual(doc.doc.value(), deserialized_data.doc.value()); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize a Type 2 Binary object'] = function(test) { - var bin = new Binary(new Buffer('binstring'), Binary.SUBTYPE_BYTE_ARRAY); - var string = 'binstring'; - for(var index = 0; index < string.length; index++) { - bin.put(string.charAt(index)); - } - - var doc = {doc: bin}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - - test.deepEqual(doc.doc.value(), deserialized_data.doc.value()); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize a big Binary object'] = function(test) { - var data = fs.readFileSync("test/node/data/test_gs_weird_bug.png", 'binary'); - var bin = new Binary(); - bin.write(data); - var doc = {doc: bin}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.doc.value(), deserialized_data.doc.value()); - test.done(); -} - -/** - * @ignore - */ -exports["Should Correctly Serialize and Deserialize DBRef"] = function(test) { - var oid = new ObjectID(); - var doc = {dbref: new DBRef('namespace', oid, null)}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var doc2 = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.equal("namespace", doc2.dbref.namespace); - test.deepEqual(doc2.dbref.oid.toHexString(), oid.toHexString()); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize partial DBRef'] = function(test) { - var id = new ObjectID(); - var doc = {'name':'something', 'user':{'$ref':'username', '$id': id}}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var doc2 = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.equal('something', doc2.name); - test.equal('username', doc2.user.namespace); - test.equal(id.toString(), doc2.user.oid.toString()); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize simple Int'] = function(test) { - var doc = {doc:2147483648}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var doc2 = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.doc, doc2.doc) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Long Integer'] = function(test) { - var doc = {doc: Long.fromNumber(9223372036854775807)}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.doc, deserialized_data.doc); - - doc = {doc: Long.fromNumber(-9223372036854775)}; - serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.doc, deserialized_data.doc); - - doc = {doc: Long.fromNumber(-9223372036854775809)}; - serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.doc, deserialized_data.doc); - test.done(); -} - -/** - * @ignore - */ -exports['Should Deserialize Large Integers as Number not Long'] = function(test) { - function roundTrip(val) { - var doc = {doc: val}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.doc, deserialized_data.doc); - }; - - roundTrip(Math.pow(2,52)); - roundTrip(Math.pow(2,53) - 1); - roundTrip(Math.pow(2,53)); - roundTrip(-Math.pow(2,52)); - roundTrip(-Math.pow(2,53) + 1); - roundTrip(-Math.pow(2,53)); - roundTrip(Math.pow(2,65)); // Too big for Long. - roundTrip(-Math.pow(2,65)); - roundTrip(9223372036854775807); - roundTrip(1234567890123456800); // Bigger than 2^53, stays a double. - roundTrip(-1234567890123456800); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Long Integer and Timestamp as different types'] = function(test) { - var long = Long.fromNumber(9223372036854775807); - var timestamp = Timestamp.fromNumber(9223372036854775807); - test.ok(long instanceof Long); - test.ok(!(long instanceof Timestamp)); - test.ok(timestamp instanceof Timestamp); - test.ok(!(timestamp instanceof Long)); - - var test_int = {doc: long, doc2: timestamp}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(test_int, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(test_int)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(test_int, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(test_int.doc, deserialized_data.doc); - test.done(); -} - -/** - * @ignore - */ -exports['Should Always put the id as the first item in a hash'] = function(test) { - var hash = {doc: {not_id:1, '_id':2}}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(hash, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(hash)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(hash, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - var keys = []; - - for(var name in deserialized_data.doc) { - keys.push(name); - } - - test.deepEqual(['not_id', '_id'], keys); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize a User defined Binary object'] = function(test) { - var bin = new Binary(); - bin.sub_type = BSON.BSON_BINARY_SUBTYPE_USER_DEFINED; - var string = 'binstring'; - for(var index = 0; index < string.length; index++) { - bin.put(string.charAt(index)); - } - - var doc = {doc: bin}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - - test.deepEqual(deserialized_data.doc.sub_type, BSON.BSON_BINARY_SUBTYPE_USER_DEFINED); - test.deepEqual(doc.doc.value(), deserialized_data.doc.value()); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correclty Serialize and Deserialize a Code object'] = function(test) { - var doc = {'doc': {'doc2': new Code('this.a > i', {i:1})}}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.doc.doc2.code, deserialized_data.doc.doc2.code); - test.deepEqual(doc.doc.doc2.scope.i, deserialized_data.doc.doc2.scope.i); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly serialize and deserialize and embedded array'] = function(test) { - var doc = {'a':0, - 'b':['tmp1', 'tmp2', 'tmp3', 'tmp4', 'tmp5', 'tmp6', 'tmp7', 'tmp8', 'tmp9', 'tmp10', 'tmp11', 'tmp12', 'tmp13', 'tmp14', 'tmp15', 'tmp16'] - }; - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.a, deserialized_data.a); - test.deepEqual(doc.b, deserialized_data.b); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize UTF8'] = function(test) { - // Serialize utf8 - var doc = { "name" : "本荘由利地域に洪水警報", "name1" : "öüóőúéáűíÖÜÓŐÚÉÁŰÍ", "name2" : "abcdedede"}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc, deserialized_data); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize query object'] = function(test) { - var doc = { count: 'remove_with_no_callback_bug_test', query: {}, fields: null}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc, deserialized_data); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize empty query object'] = function(test) { - var doc = {}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc, deserialized_data); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize array based doc'] = function(test) { - var doc = { b: [ 1, 2, 3 ], _id: new ObjectID() }; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.b, deserialized_data.b) - test.deepEqual(doc, deserialized_data); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Symbol'] = function(test) { - if(Symbol != null) { - var doc = { b: [ new Symbol('test') ]}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc.b, deserialized_data.b) - test.deepEqual(doc, deserialized_data); - test.ok(deserialized_data.b[0] instanceof Symbol); - } - - test.done(); -} - -/** - * @ignore - */ -exports['Should handle Deeply nested document'] = function(test) { - var doc = {a:{b:{c:{d:2}}}}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var deserialized_data = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc, deserialized_data); - test.done(); -} - -/** - * @ignore - */ -exports['Should handle complicated all typed object'] = function(test) { - // First doc - var date = new Date(); - var oid = new ObjectID(); - var string = 'binstring' - var bin = new Binary() - for(var index = 0; index < string.length; index++) { - bin.put(string.charAt(index)) - } - - var doc = { - 'string': 'hello', - 'array': [1,2,3], - 'hash': {'a':1, 'b':2}, - 'date': date, - 'oid': oid, - 'binary': bin, - 'int': 42, - 'float': 33.3333, - 'regexp': /regexp/, - 'boolean': true, - 'long': date.getTime(), - 'where': new Code('this.a > i', {i:1}), - 'dbref': new DBRef('namespace', oid, 'integration_tests_') - } - - // Second doc - var oid = new ObjectID.createFromHexString(oid.toHexString()); - var string = 'binstring' - var bin = new Binary() - for(var index = 0; index < string.length; index++) { - bin.put(string.charAt(index)) - } - - var doc2 = { - 'string': 'hello', - 'array': [1,2,3], - 'hash': {'a':1, 'b':2}, - 'date': date, - 'oid': oid, - 'binary': bin, - 'int': 42, - 'float': 33.3333, - 'regexp': /regexp/, - 'boolean': true, - 'long': date.getTime(), - 'where': new Code('this.a > i', {i:1}), - 'dbref': new DBRef('namespace', oid, 'integration_tests_') - } - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var serialized_data2 = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc2, false, true); - - for(var i = 0; i < serialized_data2.length; i++) { - require('assert').equal(serialized_data2[i], serialized_data[i]) - } - - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize Complex Nested Object'] = function(test) { - var doc = { email: 'email@email.com', - encrypted_password: 'password', - friends: [ '4db96b973d01205364000006', - '4dc77b24c5ba38be14000002' ], - location: [ 72.4930088, 23.0431957 ], - name: 'Amit Kumar', - password_salt: 'salty', - profile_fields: [], - username: 'amit', - _id: new ObjectID() } - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var doc2 = doc; - doc2._id = ObjectID.createFromHexString(doc2._id.toHexString()); - var serialized_data2 = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc2, false, true); - - for(var i = 0; i < serialized_data2.length; i++) { - require('assert').equal(serialized_data2[i], serialized_data[i]) - } - - test.done(); -} - -/** - * @ignore - */ -exports['Should correctly massive doc'] = function(test) { - var oid1 = new ObjectID(); - var oid2 = new ObjectID(); - - // JS doc - var doc = { dbref2: new DBRef('namespace', oid1, 'integration_tests_'), - _id: oid2 }; - - var doc2 = { dbref2: new DBRef('namespace', ObjectID.createFromHexString(oid1.toHexString()), 'integration_tests_'), - _id: new ObjectID.createFromHexString(oid2.toHexString()) }; - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var serialized_data2 = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc2, false, true); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize/Deserialize regexp object'] = function(test) { - var doc = {'b':/foobaré/}; - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var serialized_data2 = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - for(var i = 0; i < serialized_data2.length; i++) { - require('assert').equal(serialized_data2[i], serialized_data[i]) - } - - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize/Deserialize complicated object'] = function(test) { - var doc = {a:{b:{c:[new ObjectID(), new ObjectID()]}}, d:{f:1332.3323}}; - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - - test.deepEqual(doc, doc2) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize/Deserialize nested object'] = function(test) { - var doc = { "_id" : { "date" : new Date(), "gid" : "6f35f74d2bea814e21000000" }, - "value" : { - "b" : { "countries" : { "--" : 386 }, "total" : 1599 }, - "bc" : { "countries" : { "--" : 3 }, "total" : 10 }, - "gp" : { "countries" : { "--" : 2 }, "total" : 13 }, - "mgc" : { "countries" : { "--" : 2 }, "total" : 14 } - } - } - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - - test.deepEqual(doc, doc2) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize/Deserialize nested object with even more nesting'] = function(test) { - var doc = { "_id" : { "date" : {a:1, b:2, c:new Date()}, "gid" : "6f35f74d2bea814e21000000" }, - "value" : { - "b" : { "countries" : { "--" : 386 }, "total" : 1599 }, - "bc" : { "countries" : { "--" : 3 }, "total" : 10 }, - "gp" : { "countries" : { "--" : 2 }, "total" : 13 }, - "mgc" : { "countries" : { "--" : 2 }, "total" : 14 } - } - } - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual(doc, doc2) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize empty name object'] = function(test) { - var doc = {'':'test', - 'bbbb':1}; - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.equal(doc2[''], 'test'); - test.equal(doc2['bbbb'], 1); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly handle Forced Doubles to ensure we allocate enough space for cap collections'] = function(test) { - if(Double != null) { - var doubleValue = new Double(100); - var doc = {value:doubleValue}; - - // Serialize - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - - var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual({value:100}, doc2); - } - - test.done(); -} - -/** - * @ignore - */ -exports['Should deserialize correctly'] = function(test) { - var doc = { - "_id" : new ObjectID("4e886e687ff7ef5e00000162"), - "str" : "foreign", - "type" : 2, - "timestamp" : ISODate("2011-10-02T14:00:08.383Z"), - "links" : [ - "http://www.reddit.com/r/worldnews/comments/kybm0/uk_home_secretary_calls_for_the_scrapping_of_the/" - ] - } - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - - test.deepEqual(doc, doc2) - test.done(); -} - -/** - * @ignore - */ -exports['Should correctly serialize and deserialize MinKey and MaxKey values'] = function(test) { - var doc = { - _id : new ObjectID("4e886e687ff7ef5e00000162"), - minKey : new MinKey(), - maxKey : new MaxKey() - } - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - - test.deepEqual(doc, doc2) - test.ok(doc2.minKey instanceof MinKey); - test.ok(doc2.maxKey instanceof MaxKey); - test.done(); -} - -/** - * @ignore - */ -exports['Should correctly serialize Double value'] = function(test) { - var doc = { - value : new Double(34343.2222) - } - - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); - new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); - assertBuffersEqual(test, serialized_data, serialized_data2, 0); - var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - - test.ok(doc.value.valueOf(), doc2.value); - test.ok(doc.value.value, doc2.value); - test.done(); -} - -/** - * @ignore - */ -exports['ObjectID should correctly create objects'] = function(test) { - try { - var object1 = ObjectID.createFromHexString('000000000000000000000001') - var object2 = ObjectID.createFromHexString('00000000000000000000001') - test.ok(false); - } catch(err) { - test.ok(err != null); - } - - test.done(); -} - -/** - * @ignore - */ -exports['ObjectID should correctly retrieve timestamp'] = function(test) { - var testDate = new Date(); - var object1 = new ObjectID(); - test.equal(Math.floor(testDate.getTime()/1000), Math.floor(object1.getTimestamp().getTime()/1000)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly throw error on bsonparser errors'] = function(test) { - var data = new Buffer(3); - var parser = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]); - - // Catch to small buffer error - try { - parser.deserialize(data); - test.ok(false); - } catch(err) {} - - data = new Buffer(5); - data[0] = 0xff; - data[1] = 0xff; - // Catch illegal size - try { - parser.deserialize(data); - test.ok(false); - } catch(err) {} - - // Finish up - test.done(); -} - -/** - * A simple example showing the usage of BSON.calculateObjectSize function returning the number of BSON bytes a javascript object needs. - * - * @_class bson - * @_function BSON.calculateObjectSize - * @ignore - */ -exports['Should correctly calculate the size of a given javascript object'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){}} - // Calculate the size of the object without serializing the function - var size = BSON.calculateObjectSize(doc, false); - test.equal(12, size); - // Calculate the size of the object serializing the function - size = BSON.calculateObjectSize(doc, true); - // Validate the correctness - test.equal(36, size); - test.done(); -} - -/** - * A simple example showing the usage of BSON.calculateObjectSize function returning the number of BSON bytes a javascript object needs. - * - * @_class bson - * @_function calculateObjectSize - * @ignore - */ -exports['Should correctly calculate the size of a given javascript object using instance method'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){}} - // Create a BSON parser instance - var bson = new BSON(); - // Calculate the size of the object without serializing the function - var size = bson.calculateObjectSize(doc, false); - test.equal(12, size); - // Calculate the size of the object serializing the function - size = bson.calculateObjectSize(doc, true); - // Validate the correctness - test.equal(36, size); - test.done(); -} - -/** - * A simple example showing the usage of BSON.serializeWithBufferAndIndex function. - * - * @_class bson - * @_function BSON.serializeWithBufferAndIndex - * @ignore - */ -exports['Should correctly serializeWithBufferAndIndex a given javascript object'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){}} - // Calculate the size of the document, no function serialization - var size = BSON.calculateObjectSize(doc, false); - // Allocate a buffer - var buffer = new Buffer(size); - // Serialize the object to the buffer, checking keys and not serializing functions - var index = BSON.serializeWithBufferAndIndex(doc, true, buffer, 0, false); - // Validate the correctness - test.equal(12, size); - test.equal(11, index); - - // Serialize with functions - // Calculate the size of the document, no function serialization - var size = BSON.calculateObjectSize(doc, true); - // Allocate a buffer - var buffer = new Buffer(size); - // Serialize the object to the buffer, checking keys and not serializing functions - var index = BSON.serializeWithBufferAndIndex(doc, true, buffer, 0, true); - // Validate the correctness - test.equal(36, size); - test.equal(35, index); - test.done(); -} - -/** - * A simple example showing the usage of BSON.serializeWithBufferAndIndex function. - * - * @_class bson - * @_function serializeWithBufferAndIndex - * @ignore - */ -exports['Should correctly serializeWithBufferAndIndex a given javascript object using a BSON instance'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){}} - // Create a BSON parser instance - var bson = new BSON(); - // Calculate the size of the document, no function serialization - var size = bson.calculateObjectSize(doc, false); - // Allocate a buffer - var buffer = new Buffer(size); - // Serialize the object to the buffer, checking keys and not serializing functions - var index = bson.serializeWithBufferAndIndex(doc, true, buffer, 0, false); - // Validate the correctness - test.equal(12, size); - test.equal(11, index); - - // Serialize with functions - // Calculate the size of the document, no function serialization - var size = bson.calculateObjectSize(doc, true); - // Allocate a buffer - var buffer = new Buffer(size); - // Serialize the object to the buffer, checking keys and not serializing functions - var index = bson.serializeWithBufferAndIndex(doc, true, buffer, 0, true); - // Validate the correctness - test.equal(36, size); - test.equal(35, index); - test.done(); -} - -/** - * A simple example showing the usage of BSON.serialize function returning serialized BSON Buffer object. - * - * @_class bson - * @_function BSON.serialize - * @ignore - */ -exports['Should correctly serialize a given javascript object'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){}} - // Serialize the object to a buffer, checking keys and not serializing functions - var buffer = BSON.serialize(doc, true, true, false); - // Validate the correctness - test.equal(12, buffer.length); - - // Serialize the object to a buffer, checking keys and serializing functions - var buffer = BSON.serialize(doc, true, true, true); - // Validate the correctness - test.equal(36, buffer.length); - test.done(); -} - -/** - * A simple example showing the usage of BSON.serialize function returning serialized BSON Buffer object. - * - * @_class bson - * @_function serialize - * @ignore - */ -exports['Should correctly serialize a given javascript object using a bson instance'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){}} - // Create a BSON parser instance - var bson = new BSON(); - // Serialize the object to a buffer, checking keys and not serializing functions - var buffer = bson.serialize(doc, true, true, false); - // Validate the correctness - test.equal(12, buffer.length); - - // Serialize the object to a buffer, checking keys and serializing functions - var buffer = bson.serialize(doc, true, true, true); - // Validate the correctness - test.equal(36, buffer.length); - test.done(); -} - -/** - * A simple example showing the usage of BSON.deserialize function returning a deserialized Javascript function. - * - * @_class bson - * @_function BSON.deserialize - * @ignore - */ - exports['Should correctly deserialize a buffer using the BSON class level parser'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){ console.log('hello world'); }} - // Serialize the object to a buffer, checking keys and serializing functions - var buffer = BSON.serialize(doc, true, true, true); - // Validate the correctness - test.equal(65, buffer.length); - - // Deserialize the object with no eval for the functions - var deserializedDoc = BSON.deserialize(buffer); - // Validate the correctness - test.equal('object', typeof deserializedDoc.func); - test.equal(1, deserializedDoc.a); - - // Deserialize the object with eval for the functions caching the functions - deserializedDoc = BSON.deserialize(buffer, {evalFunctions:true, cacheFunctions:true}); - // Validate the correctness - test.equal('function', typeof deserializedDoc.func); - test.equal(1, deserializedDoc.a); - test.done(); -} - -/** - * A simple example showing the usage of BSON instance deserialize function returning a deserialized Javascript function. - * - * @_class bson - * @_function deserialize - * @ignore - */ -exports['Should correctly deserialize a buffer using the BSON instance parser'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){ console.log('hello world'); }} - // Create a BSON parser instance - var bson = new BSON(); - // Serialize the object to a buffer, checking keys and serializing functions - var buffer = bson.serialize(doc, true, true, true); - // Validate the correctness - test.equal(65, buffer.length); - - // Deserialize the object with no eval for the functions - var deserializedDoc = bson.deserialize(buffer); - // Validate the correctness - test.equal('object', typeof deserializedDoc.func); - test.equal(1, deserializedDoc.a); - - // Deserialize the object with eval for the functions caching the functions - deserializedDoc = bson.deserialize(buffer, {evalFunctions:true, cacheFunctions:true}); - // Validate the correctness - test.equal('function', typeof deserializedDoc.func); - test.equal(1, deserializedDoc.a); - test.done(); -} - -/** - * A simple example showing the usage of BSON.deserializeStream function returning deserialized Javascript objects. - * - * @_class bson - * @_function BSON.deserializeStream - * @ignore - */ -exports['Should correctly deserializeStream a buffer object'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){ console.log('hello world'); }} - // Serialize the object to a buffer, checking keys and serializing functions - var buffer = BSON.serialize(doc, true, true, true); - // Validate the correctness - test.equal(65, buffer.length); - - // The array holding the number of retuned documents - var documents = new Array(1); - // Deserialize the object with no eval for the functions - var index = BSON.deserializeStream(buffer, 0, 1, documents, 0); - // Validate the correctness - test.equal(65, index); - test.equal(1, documents.length); - test.equal(1, documents[0].a); - test.equal('object', typeof documents[0].func); - - // Deserialize the object with eval for the functions caching the functions - // The array holding the number of retuned documents - var documents = new Array(1); - // Deserialize the object with no eval for the functions - var index = BSON.deserializeStream(buffer, 0, 1, documents, 0, {evalFunctions:true, cacheFunctions:true}); - // Validate the correctness - test.equal(65, index); - test.equal(1, documents.length); - test.equal(1, documents[0].a); - test.equal('function', typeof documents[0].func); - test.done(); -} - -/** - * A simple example showing the usage of BSON instance deserializeStream function returning deserialized Javascript objects. - * - * @_class bson - * @_function deserializeStream - * @ignore - */ -exports['Should correctly deserializeStream a buffer object'] = function(test) { - // Create a simple object - var doc = {a: 1, func:function(){ console.log('hello world'); }} - // Create a BSON parser instance - var bson = new BSON(); - // Serialize the object to a buffer, checking keys and serializing functions - var buffer = bson.serialize(doc, true, true, true); - // Validate the correctness - test.equal(65, buffer.length); - - // The array holding the number of retuned documents - var documents = new Array(1); - // Deserialize the object with no eval for the functions - var index = bson.deserializeStream(buffer, 0, 1, documents, 0); - // Validate the correctness - test.equal(65, index); - test.equal(1, documents.length); - test.equal(1, documents[0].a); - test.equal('object', typeof documents[0].func); - - // Deserialize the object with eval for the functions caching the functions - // The array holding the number of retuned documents - var documents = new Array(1); - // Deserialize the object with no eval for the functions - var index = bson.deserializeStream(buffer, 0, 1, documents, 0, {evalFunctions:true, cacheFunctions:true}); - // Validate the correctness - test.equal(65, index); - test.equal(1, documents.length); - test.equal(1, documents[0].a); - test.equal('function', typeof documents[0].func); - test.done(); -} - -/** - * @ignore - */ -exports['ObjectID should have a correct cached representation of the hexString'] = function (test) { - ObjectID.cacheHexString = true; - var a = new ObjectID; - var __id = a.__id; - test.equal(__id, a.toHexString()); - - // hexString - a = new ObjectID(__id); - test.equal(__id, a.toHexString()); - - // fromHexString - a = ObjectID.createFromHexString(__id); - test.equal(a.__id, a.toHexString()); - test.equal(__id, a.toHexString()); - - // number - var genTime = a.generationTime; - a = new ObjectID(genTime); - __id = a.__id; - test.equal(__id, a.toHexString()); - - // generationTime - delete a.__id; - a.generationTime = genTime; - test.equal(__id, a.toHexString()); - - // createFromTime - a = ObjectId.createFromTime(genTime); - __id = a.__id; - test.equal(__id, a.toHexString()); - ObjectId.cacheHexString = false; - - test.done(); -} - -/** - * @ignore - */ -// 'Should Correctly Function' = function(test) { -// var doc = {b:1, func:function() { -// this.b = 2; -// }}; -// -// var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); -// -// debug("----------------------------------------------------------------------") -// debug(inspect(serialized_data)) -// -// // var serialized_data2 = new Buffer(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).calculateObjectSize(doc, false, true)); -// // new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serializeWithBufferAndIndex(doc, false, serialized_data2, 0); -// // assertBuffersEqual(test, serialized_data, serialized_data2, 0); -// var COUNT = 100000; -// -// // var b = null; -// // eval("b = function(x) { return x+x; }"); -// // var b = new Function("x", "return x+x;"); -// -// console.log(COUNT + "x (objectBSON = BSON.serialize(object))") -// start = new Date -// -// for (i=COUNT; --i>=0; ) { -// var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data, {evalFunctions: true, cacheFunctions:true}); -// } -// -// end = new Date -// console.log("time = ", end - start, "ms -", COUNT * 1000 / (end - start), " ops/sec") -// -// // debug(inspect(new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).functionCache)) -// // -// // var doc2 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data, {evalFunctions: true, cacheFunctions:true}); -// // // test.deepEqual(doc, doc2) -// // // -// // debug(inspect(doc2)) -// // doc2.func() -// // debug(inspect(doc2)) -// // -// // var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc2, false, true); -// // var doc3 = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data, {evalFunctions: true, cacheFunctions:true}); -// // -// // debug("-----------------------------------------------") -// // debug(inspect(doc3)) -// -// // var key = "0" -// // for(var i = 1; i < 10000; i++) { -// // key = key + " " + i -// // } -// -// test.done(); -// -// -// // var car = { -// // model : "Volvo", -// // country : "Sweden", -// // -// // isSwedish : function() { -// // return this.country == "Sweden"; -// // } -// // } -// -// }, - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.noGlobalsLeaked = function(test) { - var leaks = gleak.detectNew(); - test.equal(0, leaks.length, "global var leak detected: " + leaks.join(', ')); - test.done(); -} diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_typed_array_test.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_typed_array_test.js deleted file mode 100644 index cde83f8..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/bson_typed_array_test.js +++ /dev/null @@ -1,392 +0,0 @@ -var mongodb = require('../../lib/bson').pure(); - -var testCase = require('nodeunit').testCase, - mongoO = require('../../lib/bson').pure(), - debug = require('util').debug, - inspect = require('util').inspect, - Buffer = require('buffer').Buffer, - gleak = require('../../tools/gleak'), - fs = require('fs'), - BSON = mongoO.BSON, - Code = mongoO.Code, - Binary = mongoO.Binary, - Timestamp = mongoO.Timestamp, - Long = mongoO.Long, - MongoReply = mongoO.MongoReply, - ObjectID = mongoO.ObjectID, - Symbol = mongoO.Symbol, - DBRef = mongoO.DBRef, - Double = mongoO.Double, - MinKey = mongoO.MinKey, - MaxKey = mongoO.MaxKey, - BinaryParser = mongoO.BinaryParser, - utils = require('./tools/utils'); - -var BSONSE = mongodb, - BSONDE = mongodb; - -// for tests -BSONDE.BSON_BINARY_SUBTYPE_DEFAULT = 0; -BSONDE.BSON_BINARY_SUBTYPE_FUNCTION = 1; -BSONDE.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; -BSONDE.BSON_BINARY_SUBTYPE_UUID = 3; -BSONDE.BSON_BINARY_SUBTYPE_MD5 = 4; -BSONDE.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; - -BSONSE.BSON_BINARY_SUBTYPE_DEFAULT = 0; -BSONSE.BSON_BINARY_SUBTYPE_FUNCTION = 1; -BSONSE.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; -BSONSE.BSON_BINARY_SUBTYPE_UUID = 3; -BSONSE.BSON_BINARY_SUBTYPE_MD5 = 4; -BSONSE.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; - -var hexStringToBinary = function(string) { - var numberofValues = string.length / 2; - var array = ""; - - for(var i = 0; i < numberofValues; i++) { - array += String.fromCharCode(parseInt(string[i*2] + string[i*2 + 1], 16)); - } - return array; -} - -var assertBuffersEqual = function(test, buffer1, buffer2) { - if(buffer1.length != buffer2.length) test.fail("Buffers do not have the same length", buffer1, buffer2); - - for(var i = 0; i < buffer1.length; i++) { - test.equal(buffer1[i], buffer2[i]); - } -} - -/** - * Module for parsing an ISO 8601 formatted string into a Date object. - */ -var ISODate = function (string) { - var match; - - if (typeof string.getTime === "function") - return string; - else if (match = string.match(/^(\d{4})(-(\d{2})(-(\d{2})(T(\d{2}):(\d{2})(:(\d{2})(\.(\d+))?)?(Z|((\+|-)(\d{2}):(\d{2}))))?)?)?$/)) { - var date = new Date(); - date.setUTCFullYear(Number(match[1])); - date.setUTCMonth(Number(match[3]) - 1 || 0); - date.setUTCDate(Number(match[5]) || 0); - date.setUTCHours(Number(match[7]) || 0); - date.setUTCMinutes(Number(match[8]) || 0); - date.setUTCSeconds(Number(match[10]) || 0); - date.setUTCMilliseconds(Number("." + match[12]) * 1000 || 0); - - if (match[13] && match[13] !== "Z") { - var h = Number(match[16]) || 0, - m = Number(match[17]) || 0; - - h *= 3600000; - m *= 60000; - - var offset = h + m; - if (match[15] == "+") - offset = -offset; - - date = new Date(date.valueOf() + offset); - } - - return date; - } else - throw new Error("Invalid ISO 8601 date given.", __filename); -}; - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.setUp = function(callback) { - callback(); -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.tearDown = function(callback) { - callback(); -} - -/** - * @ignore - */ -exports.shouldCorrectlyDeserializeUsingTypedArray = function(test) { - if(typeof ArrayBuffer == 'undefined') { - test.done(); - return; - } - - var motherOfAllDocuments = { - 'string': '客家话', - 'array': [1,2,3], - 'hash': {'a':1, 'b':2}, - 'date': new Date(), - 'oid': new ObjectID(), - 'binary': new Binary(new Buffer("hello")), - 'int': 42, - 'float': 33.3333, - 'regexp': /regexp/, - 'boolean': true, - 'long': Long.fromNumber(100), - 'where': new Code('this.a > i', {i:1}), - 'dbref': new DBRef('namespace', new ObjectID(), 'integration_tests_'), - 'minkey': new MinKey(), - 'maxkey': new MaxKey() - } - - // Let's serialize it - var data = BSONSE.BSON.serialize(motherOfAllDocuments, true, true, false); - // Build a typed array - var arr = new Uint8Array(new ArrayBuffer(data.length)); - // Iterate over all the fields and copy - for(var i = 0; i < data.length; i++) { - arr[i] = data[i] - } - - // Deserialize the object - var object = BSONDE.BSON.deserialize(arr); - // Asserts - test.equal(motherOfAllDocuments.string, object.string); - test.deepEqual(motherOfAllDocuments.array, object.array); - test.deepEqual(motherOfAllDocuments.date, object.date); - test.deepEqual(motherOfAllDocuments.oid.toHexString(), object.oid.toHexString()); - test.deepEqual(motherOfAllDocuments.binary.length(), object.binary.length()); - // Assert the values of the binary - for(var i = 0; i < motherOfAllDocuments.binary.length(); i++) { - test.equal(motherOfAllDocuments.binary.value[i], object.binary[i]); - } - test.deepEqual(motherOfAllDocuments.int, object.int); - test.deepEqual(motherOfAllDocuments.float, object.float); - test.deepEqual(motherOfAllDocuments.regexp, object.regexp); - test.deepEqual(motherOfAllDocuments.boolean, object.boolean); - test.deepEqual(motherOfAllDocuments.long.toNumber(), object.long); - test.deepEqual(motherOfAllDocuments.where, object.where); - test.deepEqual(motherOfAllDocuments.dbref.oid.toHexString(), object.dbref.oid.toHexString()); - test.deepEqual(motherOfAllDocuments.dbref.namespace, object.dbref.namespace); - test.deepEqual(motherOfAllDocuments.dbref.db, object.dbref.db); - test.deepEqual(motherOfAllDocuments.minkey, object.minkey); - test.deepEqual(motherOfAllDocuments.maxkey, object.maxkey); - test.done(); -} - -/** - * @ignore - */ -exports.shouldCorrectlySerializeUsingTypedArray = function(test) { - if(typeof ArrayBuffer == 'undefined') { - test.done(); - return; - } - - var motherOfAllDocuments = { - 'string': 'hello', - 'array': [1,2,3], - 'hash': {'a':1, 'b':2}, - 'date': new Date(), - 'oid': new ObjectID(), - 'binary': new Binary(new Buffer("hello")), - 'int': 42, - 'float': 33.3333, - 'regexp': /regexp/, - 'boolean': true, - 'long': Long.fromNumber(100), - 'where': new Code('this.a > i', {i:1}), - 'dbref': new DBRef('namespace', new ObjectID(), 'integration_tests_'), - 'minkey': new MinKey(), - 'maxkey': new MaxKey() - } - - // Let's serialize it - var data = BSONSE.BSON.serialize(motherOfAllDocuments, true, false, false); - // And deserialize it again - var object = BSONSE.BSON.deserialize(data); - // Asserts - test.equal(motherOfAllDocuments.string, object.string); - test.deepEqual(motherOfAllDocuments.array, object.array); - test.deepEqual(motherOfAllDocuments.date, object.date); - test.deepEqual(motherOfAllDocuments.oid.toHexString(), object.oid.toHexString()); - test.deepEqual(motherOfAllDocuments.binary.length(), object.binary.length()); - // Assert the values of the binary - for(var i = 0; i < motherOfAllDocuments.binary.length(); i++) { - test.equal(motherOfAllDocuments.binary.value[i], object.binary[i]); - } - test.deepEqual(motherOfAllDocuments.int, object.int); - test.deepEqual(motherOfAllDocuments.float, object.float); - test.deepEqual(motherOfAllDocuments.regexp, object.regexp); - test.deepEqual(motherOfAllDocuments.boolean, object.boolean); - test.deepEqual(motherOfAllDocuments.long.toNumber(), object.long); - test.deepEqual(motherOfAllDocuments.where, object.where); - test.deepEqual(motherOfAllDocuments.dbref.oid.toHexString(), object.dbref.oid.toHexString()); - test.deepEqual(motherOfAllDocuments.dbref.namespace, object.dbref.namespace); - test.deepEqual(motherOfAllDocuments.dbref.db, object.dbref.db); - test.deepEqual(motherOfAllDocuments.minkey, object.minkey); - test.deepEqual(motherOfAllDocuments.maxkey, object.maxkey); - test.done(); -} - -/** - * @ignore - */ -exports['exercise all the binary object constructor methods'] = function (test) { - if(typeof ArrayBuffer == 'undefined') { - test.done(); - return; - } - - // Construct using array - var string = 'hello world'; - // String to array - var array = utils.stringToArrayBuffer(string); - - // Binary from array buffer - var binary = new Binary(utils.stringToArrayBuffer(string)); - test.ok(string.length, binary.buffer.length); - test.ok(utils.assertArrayEqual(array, binary.buffer)); - - // Construct using number of chars - binary = new Binary(5); - test.ok(5, binary.buffer.length); - - // Construct using an Array - var binary = new Binary(utils.stringToArray(string)); - test.ok(string.length, binary.buffer.length); - test.ok(utils.assertArrayEqual(array, binary.buffer)); - - // Construct using a string - var binary = new Binary(string); - test.ok(string.length, binary.buffer.length); - test.ok(utils.assertArrayEqual(array, binary.buffer)); - test.done(); -}; - -/** - * @ignore - */ -exports['exercise the put binary object method for an instance when using Uint8Array'] = function (test) { - if(typeof ArrayBuffer == 'undefined') { - test.done(); - return; - } - - // Construct using array - var string = 'hello world'; - // String to array - var array = utils.stringToArrayBuffer(string + 'a'); - - // Binary from array buffer - var binary = new Binary(utils.stringToArrayBuffer(string)); - test.ok(string.length, binary.buffer.length); - - // Write a byte to the array - binary.put('a') - - // Verify that the data was writtencorrectly - test.equal(string.length + 1, binary.position); - test.ok(utils.assertArrayEqual(array, binary.value(true))); - test.equal('hello worlda', binary.value()); - - // Exercise a binary with lots of space in the buffer - var binary = new Binary(); - test.ok(Binary.BUFFER_SIZE, binary.buffer.length); - - // Write a byte to the array - binary.put('a') - - // Verify that the data was writtencorrectly - test.equal(1, binary.position); - test.ok(utils.assertArrayEqual(['a'.charCodeAt(0)], binary.value(true))); - test.equal('a', binary.value()); - test.done(); -}, - -/** - * @ignore - */ -exports['exercise the write binary object method for an instance when using Uint8Array'] = function (test) { - if(typeof ArrayBuffer == 'undefined') { - test.done(); - return; - } - - // Construct using array - var string = 'hello world'; - // Array - var writeArrayBuffer = new Uint8Array(new ArrayBuffer(1)); - writeArrayBuffer[0] = 'a'.charCodeAt(0); - var arrayBuffer = ['a'.charCodeAt(0)]; - - // Binary from array buffer - var binary = new Binary(utils.stringToArrayBuffer(string)); - test.ok(string.length, binary.buffer.length); - - // Write a string starting at end of buffer - binary.write('a'); - test.equal('hello worlda', binary.value()); - // Write a string starting at index 0 - binary.write('a', 0); - test.equal('aello worlda', binary.value()); - // Write a arraybuffer starting at end of buffer - binary.write(writeArrayBuffer); - test.equal('aello worldaa', binary.value()); - // Write a arraybuffer starting at position 5 - binary.write(writeArrayBuffer, 5); - test.equal('aelloaworldaa', binary.value()); - // Write a array starting at end of buffer - binary.write(arrayBuffer); - test.equal('aelloaworldaaa', binary.value()); - // Write a array starting at position 6 - binary.write(arrayBuffer, 6); - test.equal('aelloaaorldaaa', binary.value()); - test.done(); -}, - -/** - * @ignore - */ -exports['exercise the read binary object method for an instance when using Uint8Array'] = function (test) { - if(typeof ArrayBuffer == 'undefined') { - test.done(); - return; - } - - // Construct using array - var string = 'hello world'; - var array = utils.stringToArrayBuffer(string); - - // Binary from array buffer - var binary = new Binary(utils.stringToArrayBuffer(string)); - test.ok(string.length, binary.buffer.length); - - // Read the first 2 bytes - var data = binary.read(0, 2); - test.ok(utils.assertArrayEqual(utils.stringToArrayBuffer('he'), data)); - - // Read the entire field - var data = binary.read(0); - test.ok(utils.assertArrayEqual(utils.stringToArrayBuffer(string), data)); - - // Read 3 bytes - var data = binary.read(6, 5); - test.ok(utils.assertArrayEqual(utils.stringToArrayBuffer('world'), data)); - test.done(); -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.noGlobalsLeaked = function(test) { - var leaks = gleak.detectNew(); - test.equal(0, leaks.length, "global var leak detected: " + leaks.join(', ')); - test.done(); -} \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/data/test_gs_weird_bug.png b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/data/test_gs_weird_bug.png deleted file mode 100644 index 1554dc3..0000000 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/data/test_gs_weird_bug.png and /dev/null differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/test_full_bson.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/test_full_bson.js deleted file mode 100644 index 7a78347..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/test_full_bson.js +++ /dev/null @@ -1,315 +0,0 @@ -var sys = require('util'), - fs = require('fs'), - BSON = require('../../ext').BSON, - Buffer = require('buffer').Buffer, - BSONJS = require('../../lib/bson/bson').BSON, - BinaryParser = require('../../lib/bson/binary_parser').BinaryParser, - Long = require('../../lib/bson/long').Long, - ObjectID = require('../../lib/bson/bson').ObjectID, - Binary = require('../../lib/bson/bson').Binary, - Code = require('../../lib/bson/bson').Code, - DBRef = require('../../lib/bson/bson').DBRef, - Symbol = require('../../lib/bson/bson').Symbol, - Double = require('../../lib/bson/bson').Double, - MaxKey = require('../../lib/bson/bson').MaxKey, - MinKey = require('../../lib/bson/bson').MinKey, - Timestamp = require('../../lib/bson/bson').Timestamp, - gleak = require('../../tools/gleak'), - assert = require('assert'); - -// Parsers -var bsonC = new BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]); -var bsonJS = new BSONJS([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]); - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.setUp = function(callback) { - callback(); -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.tearDown = function(callback) { - callback(); -} - -/** - * @ignore - */ -exports['Should Correctly Deserialize object'] = function(test) { - var bytes = [95,0,0,0,2,110,115,0,42,0,0,0,105,110,116,101,103,114,97,116,105,111,110,95,116,101,115,116,115,95,46,116,101,115,116,95,105,110,100,101,120,95,105,110,102,111,114,109,97,116,105,111,110,0,8,117,110,105,113,117,101,0,0,3,107,101,121,0,12,0,0,0,16,97,0,1,0,0,0,0,2,110,97,109,101,0,4,0,0,0,97,95,49,0,0]; - var serialized_data = ''; - // Convert to chars - for(var i = 0; i < bytes.length; i++) { - serialized_data = serialized_data + BinaryParser.fromByte(bytes[i]); - } - - var object = bsonC.deserialize(serialized_data); - assert.equal("a_1", object.name); - assert.equal(false, object.unique); - assert.equal(1, object.key.a); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Deserialize object with all types'] = function(test) { - var bytes = [26,1,0,0,7,95,105,100,0,161,190,98,75,118,169,3,0,0,3,0,0,4,97,114,114,97,121,0,26,0,0,0,16,48,0,1,0,0,0,16,49,0,2,0,0,0,16,50,0,3,0,0,0,0,2,115,116,114,105,110,103,0,6,0,0,0,104,101,108,108,111,0,3,104,97,115,104,0,19,0,0,0,16,97,0,1,0,0,0,16,98,0,2,0,0,0,0,9,100,97,116,101,0,161,190,98,75,0,0,0,0,7,111,105,100,0,161,190,98,75,90,217,18,0,0,1,0,0,5,98,105,110,97,114,121,0,7,0,0,0,2,3,0,0,0,49,50,51,16,105,110,116,0,42,0,0,0,1,102,108,111,97,116,0,223,224,11,147,169,170,64,64,11,114,101,103,101,120,112,0,102,111,111,98,97,114,0,105,0,8,98,111,111,108,101,97,110,0,1,15,119,104,101,114,101,0,25,0,0,0,12,0,0,0,116,104,105,115,46,120,32,61,61,32,51,0,5,0,0,0,0,3,100,98,114,101,102,0,37,0,0,0,2,36,114,101,102,0,5,0,0,0,116,101,115,116,0,7,36,105,100,0,161,190,98,75,2,180,1,0,0,2,0,0,0,10,110,117,108,108,0,0]; - var serialized_data = ''; - // Convert to chars - for(var i = 0; i < bytes.length; i++) { - serialized_data = serialized_data + BinaryParser.fromByte(bytes[i]); - } - - var object = bsonJS.deserialize(new Buffer(serialized_data, 'binary')); - assert.equal("hello", object.string); - assert.deepEqual([1, 2, 3], object.array); - assert.equal(1, object.hash.a); - assert.equal(2, object.hash.b); - assert.ok(object.date != null); - assert.ok(object.oid != null); - assert.ok(object.binary != null); - assert.equal(42, object.int); - assert.equal(33.3333, object.float); - assert.ok(object.regexp != null); - assert.equal(true, object.boolean); - assert.ok(object.where != null); - assert.ok(object.dbref != null); - assert.ok(object['null'] == null); - test.done(); -} - -/** - * @ignore - */ -exports['Should Serialize and Deserialize String'] = function(test) { - var test_string = {hello: 'world'} - var serialized_data = bsonC.serialize(test_string) - assert.deepEqual(test_string, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Integer'] = function(test) { - var test_number = {doc: 5} - var serialized_data = bsonC.serialize(test_number) - assert.deepEqual(test_number, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize null value'] = function(test) { - var test_null = {doc:null} - var serialized_data = bsonC.serialize(test_null) - var object = bsonC.deserialize(serialized_data); - assert.deepEqual(test_null, object); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize undefined value'] = function(test) { - var test_undefined = {doc:undefined} - var serialized_data = bsonC.serialize(test_undefined) - var object = bsonJS.deserialize(new Buffer(serialized_data, 'binary')); - assert.equal(null, object.doc) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Number'] = function(test) { - var test_number = {doc: 5.5} - var serialized_data = bsonC.serialize(test_number) - assert.deepEqual(test_number, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Integer'] = function(test) { - var test_int = {doc: 42} - var serialized_data = bsonC.serialize(test_int) - assert.deepEqual(test_int, bsonC.deserialize(serialized_data)); - - test_int = {doc: -5600} - serialized_data = bsonC.serialize(test_int) - assert.deepEqual(test_int, bsonC.deserialize(serialized_data)); - - test_int = {doc: 2147483647} - serialized_data = bsonC.serialize(test_int) - assert.deepEqual(test_int, bsonC.deserialize(serialized_data)); - - test_int = {doc: -2147483648} - serialized_data = bsonC.serialize(test_int) - assert.deepEqual(test_int, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Object'] = function(test) { - var doc = {doc: {age: 42, name: 'Spongebob', shoe_size: 9.5}} - var serialized_data = bsonC.serialize(doc) - assert.deepEqual(doc, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Array'] = function(test) { - var doc = {doc: [1, 2, 'a', 'b']} - var serialized_data = bsonC.serialize(doc) - assert.deepEqual(doc, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Array with added on functions'] = function(test) { - var doc = {doc: [1, 2, 'a', 'b']} - var serialized_data = bsonC.serialize(doc) - assert.deepEqual(doc, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize A Boolean'] = function(test) { - var doc = {doc: true} - var serialized_data = bsonC.serialize(doc) - assert.deepEqual(doc, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize a Date'] = function(test) { - var date = new Date() - //(2009, 11, 12, 12, 00, 30) - date.setUTCDate(12) - date.setUTCFullYear(2009) - date.setUTCMonth(11 - 1) - date.setUTCHours(12) - date.setUTCMinutes(0) - date.setUTCSeconds(30) - var doc = {doc: date} - var serialized_data = bsonC.serialize(doc) - assert.deepEqual(doc, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Oid'] = function(test) { - var doc = {doc: new ObjectID()} - var serialized_data = bsonC.serialize(doc) - assert.deepEqual(doc.doc.toHexString(), bsonC.deserialize(serialized_data).doc.toHexString()) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Buffer'] = function(test) { - var doc = {doc: new Buffer("123451234512345")} - var serialized_data = bsonC.serialize(doc) - - assert.equal("123451234512345", bsonC.deserialize(serialized_data).doc.buffer.toString('ascii')); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly encode Empty Hash'] = function(test) { - var test_code = {} - var serialized_data = bsonC.serialize(test_code) - assert.deepEqual(test_code, bsonC.deserialize(serialized_data)); - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Ordered Hash'] = function(test) { - var doc = {doc: {b:1, a:2, c:3, d:4}} - var serialized_data = bsonC.serialize(doc) - var decoded_hash = bsonC.deserialize(serialized_data).doc - var keys = [] - for(var name in decoded_hash) keys.push(name) - assert.deepEqual(['b', 'a', 'c', 'd'], keys) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize Regular Expression'] = function(test) { - var doc = {doc: /foobar/mi} - var serialized_data = bsonC.serialize(doc) - var doc2 = bsonC.deserialize(serialized_data); - assert.equal(doc.doc.toString(), doc2.doc.toString()) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize a Binary object'] = function(test) { - var bin = new Binary() - var string = 'binstring' - for(var index = 0; index < string.length; index++) { - bin.put(string.charAt(index)) - } - var doc = {doc: bin} - var serialized_data = bsonC.serialize(doc) - var deserialized_data = bsonC.deserialize(serialized_data); - assert.equal(doc.doc.value(), deserialized_data.doc.value()) - test.done(); -} - -/** - * @ignore - */ -exports['Should Correctly Serialize and Deserialize a big Binary object'] = function(test) { - var data = fs.readFileSync("test/node/data/test_gs_weird_bug.png", 'binary'); - var bin = new Binary() - bin.write(data) - var doc = {doc: bin} - var serialized_data = bsonC.serialize(doc) - var deserialized_data = bsonC.deserialize(serialized_data); - assert.equal(doc.doc.value(), deserialized_data.doc.value()) - test.done(); -} - -/** - * @ignore - */ -exports.noGlobalsLeaked = function(test) { - var leaks = gleak.detectNew(); - test.equal(0, leaks.length, "global var leak detected: " + leaks.join(', ')); - test.done(); -} diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/to_bson_test.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/to_bson_test.js deleted file mode 100644 index e9282e5..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/to_bson_test.js +++ /dev/null @@ -1,109 +0,0 @@ -var mongodb = process.env['TEST_NATIVE'] != null ? require('../../lib/bson').native() : require('../../lib/bson').pure(); - -var testCase = require('nodeunit').testCase, - mongoO = require('../../lib/bson').pure(), - Buffer = require('buffer').Buffer, - gleak = require('../../tools/gleak'), - fs = require('fs'), - BSON = mongoO.BSON, - Code = mongoO.Code, - Binary = mongoO.Binary, - Timestamp = mongoO.Timestamp, - Long = mongoO.Long, - MongoReply = mongoO.MongoReply, - ObjectID = mongoO.ObjectID, - Symbol = mongoO.Symbol, - DBRef = mongoO.DBRef, - Double = mongoO.Double, - MinKey = mongoO.MinKey, - MaxKey = mongoO.MaxKey, - BinaryParser = mongoO.BinaryParser; - -var BSONSE = mongodb, - BSONDE = mongodb; - -// for tests -BSONDE.BSON_BINARY_SUBTYPE_DEFAULT = 0; -BSONDE.BSON_BINARY_SUBTYPE_FUNCTION = 1; -BSONDE.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; -BSONDE.BSON_BINARY_SUBTYPE_UUID = 3; -BSONDE.BSON_BINARY_SUBTYPE_MD5 = 4; -BSONDE.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; - -BSONSE.BSON_BINARY_SUBTYPE_DEFAULT = 0; -BSONSE.BSON_BINARY_SUBTYPE_FUNCTION = 1; -BSONSE.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2; -BSONSE.BSON_BINARY_SUBTYPE_UUID = 3; -BSONSE.BSON_BINARY_SUBTYPE_MD5 = 4; -BSONSE.BSON_BINARY_SUBTYPE_USER_DEFINED = 128; - -var hexStringToBinary = function(string) { - var numberofValues = string.length / 2; - var array = ""; - - for(var i = 0; i < numberofValues; i++) { - array += String.fromCharCode(parseInt(string[i*2] + string[i*2 + 1], 16)); - } - return array; -} - -var assertBuffersEqual = function(test, buffer1, buffer2) { - if(buffer1.length != buffer2.length) test.fail("Buffers do not have the same length", buffer1, buffer2); - - for(var i = 0; i < buffer1.length; i++) { - test.equal(buffer1[i], buffer2[i]); - } -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.setUp = function(callback) { - callback(); -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.tearDown = function(callback) { - callback(); -} - -/** - * @ignore - */ -exports['Should correctly handle toBson function for an object'] = function(test) { - // Test object - var doc = { - hello: new ObjectID(), - a:1 - }; - // Add a toBson method to the object - doc.toBSON = function() { - return {b:1}; - } - - // Serialize the data - var serialized_data = new BSONSE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).serialize(doc, false, true); - var deserialized_doc = new BSONDE.BSON([Long, ObjectID, Binary, Code, DBRef, Symbol, Double, Timestamp, MaxKey, MinKey]).deserialize(serialized_data); - test.deepEqual({b:1}, deserialized_doc); - test.done(); -} - -/** - * Retrieve the server information for the current - * instance of the db client - * - * @ignore - */ -exports.noGlobalsLeaked = function(test) { - var leaks = gleak.detectNew(); - test.equal(0, leaks.length, "global var leak detected: " + leaks.join(', ')); - test.done(); -} diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/tools/utils.js b/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/tools/utils.js deleted file mode 100644 index 9d7cbe7..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/bson/test/node/tools/utils.js +++ /dev/null @@ -1,80 +0,0 @@ -exports.assertArrayEqual = function(array1, array2) { - if(array1.length != array2.length) return false; - for(var i = 0; i < array1.length; i++) { - if(array1[i] != array2[i]) return false; - } - - return true; -} - -// String to arraybuffer -exports.stringToArrayBuffer = function(string) { - var dataBuffer = new Uint8Array(new ArrayBuffer(string.length)); - // Return the strings - for(var i = 0; i < string.length; i++) { - dataBuffer[i] = string.charCodeAt(i); - } - // Return the data buffer - return dataBuffer; -} - -// String to arraybuffer -exports.stringToArray = function(string) { - var dataBuffer = new Array(string.length); - // Return the strings - for(var i = 0; i < string.length; i++) { - dataBuffer[i] = string.charCodeAt(i); - } - // Return the data buffer - return dataBuffer; -} - -exports.Utf8 = { - // public method for url encoding - encode : function (string) { - string = string.replace(/\r\n/g,"\n"); - var utftext = ""; - - for (var n = 0; n < string.length; n++) { - var c = string.charCodeAt(n); - if (c < 128) { - utftext += String.fromCharCode(c); - } else if((c > 127) && (c < 2048)) { - utftext += String.fromCharCode((c >> 6) | 192); - utftext += String.fromCharCode((c & 63) | 128); - } else { - utftext += String.fromCharCode((c >> 12) | 224); - utftext += String.fromCharCode(((c >> 6) & 63) | 128); - utftext += String.fromCharCode((c & 63) | 128); - } - - } - - return utftext; - }, - - // public method for url decoding - decode : function (utftext) { - var string = ""; - var i = 0; - var c = c1 = c2 = 0; - - while ( i < utftext.length ) { - c = utftext.charCodeAt(i); - if(c < 128) { - string += String.fromCharCode(c); - i++; - } else if((c > 191) && (c < 224)) { - c2 = utftext.charCodeAt(i+1); - string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); - i += 2; - } else { - c2 = utftext.charCodeAt(i+1); - c3 = utftext.charCodeAt(i+2); - string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); - i += 3; - } - } - return string; - } -} diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Makefile b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Makefile index 2eef97c..9614d04 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Makefile +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Makefile @@ -49,7 +49,7 @@ all_deps := # export LINK=g++ # # This will allow make to invoke N linker processes as specified in -jN. -LINK ?= ./gyp-mac-tool flock $(builddir)/linker.lock $(CXX) +LINK ?= flock $(builddir)/linker.lock $(CXX.target) CC.target ?= $(CC) CFLAGS.target ?= $(CFLAGS) @@ -134,34 +134,6 @@ cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $ quiet_cmd_cxx = CXX($(TOOLSET)) $@ cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_objc = CXX($(TOOLSET)) $@ -cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< - -quiet_cmd_objcxx = CXX($(TOOLSET)) $@ -cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# Commands for precompiled header files. -quiet_cmd_pch_c = CXX($(TOOLSET)) $@ -cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ -cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_m = CXX($(TOOLSET)) $@ -cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< -quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ -cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# gyp-mac-tool is written next to the root Makefile by gyp. -# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd -# already. -quiet_cmd_mac_tool = MACTOOL $(4) $< -cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" - -quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ -cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) - -quiet_cmd_infoplist = INFOPLIST $@ -cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" - quiet_cmd_touch = TOUCH $@ cmd_touch = touch $@ @@ -169,21 +141,39 @@ quiet_cmd_copy = COPY $@ # send stderr to /dev/null to ignore messages when linking directories. cmd_copy = rm -rf "$@" && cp -af "$<" "$@" -quiet_cmd_alink = LIBTOOL-STATIC $@ -cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^) +quiet_cmd_alink = AR($(TOOLSET)) $@ +cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) +quiet_cmd_alink_thin = AR($(TOOLSET)) $@ +cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) + +# Due to circular dependencies between libraries :(, we wrap the +# special "figure out circular dependencies" flags around the entire +# input list during linking. quiet_cmd_link = LINK($(TOOLSET)) $@ -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) +cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS) -# TODO(thakis): Find out and document the difference between shared_library and -# loadable_module on mac. +# We support two kinds of shared objects (.so): +# 1) shared_library, which is just bundling together many dependent libraries +# into a link line. +# 2) loadable_module, which is generating a module intended for dlopen(). +# +# They differ only slightly: +# In the former case, we want to package all dependent code into the .so. +# In the latter case, we want to package just the API exposed by the +# outermost module. +# This means shared_library uses --whole-archive, while loadable_module doesn't. +# (Note that --whole-archive is incompatible with the --start-group used in +# normal linking.) + +# Other shared-object link notes: +# - Set SONAME to the library filename so our binaries don't reference +# the local, absolute paths used on the link command-line. quiet_cmd_solink = SOLINK($(TOOLSET)) $@ -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) +cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) -# TODO(thakis): The solink_module rule is likely wrong. Xcode seems to pass -# -bundle -single_module here (for osmesa.so). quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ -cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) +cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS) # Define an escape_quotes function to escape single quotes. @@ -222,15 +212,14 @@ command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ # $| -- order-only dependencies prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) -# Helper that executes all postbuilds, and deletes the output file when done -# if any of the postbuilds failed. +# Helper that executes all postbuilds until one fails. define do_postbuilds @E=0;\ for p in $(POSTBUILDS); do\ eval $$p;\ - F=$$?;\ - if [ $$F -ne 0 ]; then\ - E=$$F;\ + E=$$?;\ + if [ $$E -ne 0 ]; then\ + break;\ fi;\ done;\ if [ $$E -ne 0 ]; then\ @@ -249,7 +238,7 @@ define do_cmd $(if $(or $(command_changed),$(prereq_changed)), @$(call exact_echo, $($(quiet)cmd_$(1))) @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" - $(if $(findstring flock,$(word 2,$(cmd_$1))), + $(if $(findstring flock,$(word 1,$(cmd_$1))), @$(cmd_$(1)) @echo " $(quiet_cmd_$(1)): Finished", @$(cmd_$(1)) @@ -287,10 +276,6 @@ $(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD @$(call do_cmd,cxx,1) $(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) $(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD @$(call do_cmd,cc,1) $(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD @@ -305,10 +290,6 @@ $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD @$(call do_cmd,cxx,1) $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD @$(call do_cmd,cc,1) $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD @@ -322,10 +303,6 @@ $(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD @$(call do_cmd,cxx,1) $(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) $(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD @$(call do_cmd,cc,1) $(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD @@ -339,8 +316,8 @@ ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ endif quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = /usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." -I/Users/rossgallagher/Development/Restify-oauth/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/config.gypi -I/usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/Users/rossgallagher/.node-gyp/0.10.10/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/rossgallagher/.node-gyp/0.10.10" "-Dmodule_root_dir=/Users/rossgallagher/Development/Restify-oauth/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos" binding.gyp -Makefile: $(srcdir)/../../../../../../../../.node-gyp/0.10.10/common.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(srcdir)/../../../../../../../../../../usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi +cmd_regen_makefile = /home/geoff/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." -I/home/geoff/www/node-restify-oauth2-mongodb/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/config.gypi -I/home/geoff/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/home/geoff/.node-gyp/0.10.18/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/home/geoff/.node-gyp/0.10.18" "-Dmodule_root_dir=/home/geoff/www/node-restify-oauth2-mongodb/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos" binding.gyp +Makefile: $(srcdir)/../../../../../../../../.node-gyp/0.10.18/common.gypi $(srcdir)/../../../../../../../../local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(call do_cmd,regen_makefile) # "all" is a concatenation of the "all" targets from all the included diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/kerberos.node.d b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/kerberos.node.d index 13950b5..0bc3206 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/kerberos.node.d +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/kerberos.node.d @@ -1 +1 @@ -cmd_Release/kerberos.node := ./gyp-mac-tool flock ./Release/linker.lock c++ -shared -Wl,-search_paths_first -mmacosx-version-min=10.5 -arch x86_64 -L./Release -install_name @rpath/kerberos.node -o Release/kerberos.node Release/obj.target/kerberos/lib/kerberos.o Release/obj.target/kerberos/lib/worker.o Release/obj.target/kerberos/lib/kerberosgss.o Release/obj.target/kerberos/lib/base64.o Release/obj.target/kerberos/lib/kerberos_context.o -undefined dynamic_lookup -lkrb5 +cmd_Release/kerberos.node := rm -rf "Release/kerberos.node" && cp -af "Release/obj.target/kerberos.node" "Release/kerberos.node" diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/base64.o.d b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/base64.o.d deleted file mode 100644 index a07254e..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/base64.o.d +++ /dev/null @@ -1,4 +0,0 @@ -cmd_Release/obj.target/kerberos/lib/base64.o := cc '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__MACOSX_CORE__' '-DBUILDING_NODE_EXTENSION' -I/Users/rossgallagher/.node-gyp/0.10.10/src -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/kerberos/lib/base64.o.d.raw -c -o Release/obj.target/kerberos/lib/base64.o ../lib/base64.c -Release/obj.target/kerberos/lib/base64.o: ../lib/base64.c ../lib/base64.h -../lib/base64.c: -../lib/base64.h: diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/kerberos.o.d b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/kerberos.o.d deleted file mode 100644 index fb9107a..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/kerberos.o.d +++ /dev/null @@ -1,24 +0,0 @@ -cmd_Release/obj.target/kerberos/lib/kerberos.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__MACOSX_CORE__' '-DBUILDING_NODE_EXTENSION' -I/Users/rossgallagher/.node-gyp/0.10.10/src -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-rtti -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/kerberos/lib/kerberos.o.d.raw -c -o Release/obj.target/kerberos/lib/kerberos.o ../lib/kerberos.cc -Release/obj.target/kerberos/lib/kerberos.o: ../lib/kerberos.cc \ - ../lib/kerberos.h /Users/rossgallagher/.node-gyp/0.10.10/src/node.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h \ - ../lib/kerberosgss.h ../lib/worker.h ../lib/kerberos_context.h -../lib/kerberos.cc: -../lib/kerberos.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h: -../lib/kerberosgss.h: -../lib/worker.h: -../lib/kerberos_context.h: diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/kerberos_context.o.d b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/kerberos_context.o.d deleted file mode 100644 index a4a899d..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/kerberos_context.o.d +++ /dev/null @@ -1,23 +0,0 @@ -cmd_Release/obj.target/kerberos/lib/kerberos_context.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__MACOSX_CORE__' '-DBUILDING_NODE_EXTENSION' -I/Users/rossgallagher/.node-gyp/0.10.10/src -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-rtti -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/kerberos/lib/kerberos_context.o.d.raw -c -o Release/obj.target/kerberos/lib/kerberos_context.o ../lib/kerberos_context.cc -Release/obj.target/kerberos/lib/kerberos_context.o: \ - ../lib/kerberos_context.cc ../lib/kerberos_context.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h \ - ../lib/kerberosgss.h -../lib/kerberos_context.cc: -../lib/kerberos_context.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h: -../lib/kerberosgss.h: diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/kerberosgss.o.d b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/kerberosgss.o.d deleted file mode 100644 index c56169d..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/kerberosgss.o.d +++ /dev/null @@ -1,6 +0,0 @@ -cmd_Release/obj.target/kerberos/lib/kerberosgss.o := cc '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__MACOSX_CORE__' '-DBUILDING_NODE_EXTENSION' -I/Users/rossgallagher/.node-gyp/0.10.10/src -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/kerberos/lib/kerberosgss.o.d.raw -c -o Release/obj.target/kerberos/lib/kerberosgss.o ../lib/kerberosgss.c -Release/obj.target/kerberos/lib/kerberosgss.o: ../lib/kerberosgss.c \ - ../lib/kerberosgss.h ../lib/base64.h -../lib/kerberosgss.c: -../lib/kerberosgss.h: -../lib/base64.h: diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/worker.o.d b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/worker.o.d deleted file mode 100644 index 2450c93..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/.deps/Release/obj.target/kerberos/lib/worker.o.d +++ /dev/null @@ -1,20 +0,0 @@ -cmd_Release/obj.target/kerberos/lib/worker.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__MACOSX_CORE__' '-DBUILDING_NODE_EXTENSION' -I/Users/rossgallagher/.node-gyp/0.10.10/src -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-rtti -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/kerberos/lib/worker.o.d.raw -c -o Release/obj.target/kerberos/lib/worker.o ../lib/worker.cc -Release/obj.target/kerberos/lib/worker.o: ../lib/worker.cc \ - ../lib/worker.h /Users/rossgallagher/.node-gyp/0.10.10/src/node.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h -../lib/worker.cc: -../lib/worker.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h: diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/kerberos.node b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/kerberos.node index 77d3ff0..d9f7b08 100755 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/kerberos.node and b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/kerberos.node differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/base64.o b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/base64.o deleted file mode 100644 index 02ba05d..0000000 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/base64.o and /dev/null differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/kerberos.o b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/kerberos.o deleted file mode 100644 index da6e681..0000000 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/kerberos.o and /dev/null differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/kerberos_context.o b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/kerberos_context.o deleted file mode 100644 index b488241..0000000 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/kerberos_context.o and /dev/null differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/kerberosgss.o b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/kerberosgss.o deleted file mode 100644 index ecfec6b..0000000 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/kerberosgss.o and /dev/null differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/worker.o b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/worker.o deleted file mode 100644 index ec5f944..0000000 Binary files a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/Release/obj.target/kerberos/lib/worker.o and /dev/null differ diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/config.gypi b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/config.gypi index 6cc584c..19e2e41 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/config.gypi +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/config.gypi @@ -9,10 +9,10 @@ }, "variables": { "clang": 0, - "gcc_version": 42, + "gcc_version": 47, "host_arch": "x64", "node_install_npm": "true", - "node_prefix": "", + "node_prefix": "/home/geoff/local", "node_shared_cares": "false", "node_shared_http_parser": "false", "node_shared_libuv": "false", @@ -21,93 +21,94 @@ "node_shared_zlib": "false", "node_tag": "", "node_unsafe_optimizations": 0, - "node_use_dtrace": "true", + "node_use_dtrace": "false", "node_use_etw": "false", "node_use_openssl": "true", "node_use_perfctr": "false", + "node_use_systemtap": "false", "python": "/usr/bin/python", "target_arch": "x64", "v8_enable_gdbjit": 0, "v8_no_strict_aliasing": 1, - "v8_use_snapshot": "false", - "nodedir": "/Users/rossgallagher/.node-gyp/0.10.10", + "v8_use_snapshot": "true", + "nodedir": "/home/geoff/.node-gyp/0.10.18", "copy_dev_lib": "true", "standalone_static_library": 1, - "save_dev": "", - "browser": "", - "viewer": "man", - "rollback": "true", - "usage": "", - "globalignorefile": "/usr/local/etc/npmignore", - "init_author_url": "", - "shell": "/bin/bash", - "parseable": "", - "shrinkwrap": "true", - "userignorefile": "/Users/rossgallagher/.npmignore", - "cache_max": "null", - "init_author_email": "", + "cache_lock_stale": "60000", + "pre": "", "sign_git_tag": "", - "ignore": "", - "long": "", - "registry": "https://registry.npmjs.org/", - "fetch_retries": "2", - "npat": "", - "message": "%s", - "versions": "", - "globalconfig": "/usr/local/etc/npmrc", "always_auth": "", - "cache_lock_retries": "10", - "fetch_retry_mintimeout": "10000", - "proprietary_attribs": "true", - "coverage": "", - "json": "", - "pre": "", - "description": "true", - "engine_strict": "", - "https_proxy": "", - "init_module": "/Users/rossgallagher/.npm-init.js", - "userconfig": "/Users/rossgallagher/.npmrc", - "npaturl": "http://npat.npmjs.org/", - "node_version": "v0.10.10", - "user": "", - "editor": "vi", - "save": "", - "tag": "latest", - "global": "", - "optional": "true", - "username": "", + "user_agent": "node/v0.10.18 linux x64", "bin_links": "true", + "description": "true", + "fetch_retries": "2", + "init_version": "0.0.0", + "user": "1000", "force": "", - "searchopts": "", + "ignore": "", + "cache_min": "10", + "editor": "vi", + "rollback": "true", + "cache_max": "null", + "userconfig": "/home/geoff/.npmrc", + "coverage": "", + "engine_strict": "", + "init_author_name": "", + "init_author_url": "", + "tmp": "/home/geoff/tmp", + "userignorefile": "/home/geoff/.npmignore", + "yes": "", "depth": "null", + "save_dev": "", + "usage": "", + "https_proxy": "", + "onload_script": "", "rebuild_bundle": "true", + "save_bundle": "", + "shell": "/bin/bash", + "prefix": "/home/geoff/local", + "registry": "https://registry.npmjs.org/", + "browser": "", + "cache_lock_wait": "10000", + "save_optional": "", + "searchopts": "", + "versions": "", + "cache": "/home/geoff/.npm", + "npaturl": "http://npat.npmjs.org/", "searchsort": "name", - "unicode": "true", - "yes": "", + "version": "", + "viewer": "man", + "color": "true", + "fetch_retry_mintimeout": "10000", + "umask": "18", "fetch_retry_maxtimeout": "60000", + "message": "%s", + "global": "", + "link": "", + "save": "", + "unicode": "true", + "long": "", + "production": "", + "unsafe_perm": "true", + "node_version": "v0.10.18", + "tag": "latest", + "shrinkwrap": "true", + "fetch_retry_factor": "10", + "npat": "", + "proprietary_attribs": "true", "strict_ssl": "true", + "username": "", "dev": "", - "fetch_retry_factor": "10", - "group": "20", - "cache_lock_stale": "60000", - "version": "", - "cache_min": "10", - "cache": "/Users/rossgallagher/.npm", + "globalconfig": "/home/geoff/local/etc/npmrc", + "init_module": "/home/geoff/.npm-init.js", + "parseable": "", + "globalignorefile": "/home/geoff/local/etc/npmignore", + "cache_lock_retries": "10", + "group": "1000", + "init_author_email": "", "searchexclude": "", - "color": "true", - "save_optional": "", - "user_agent": "node/v0.10.10 darwin x64", - "cache_lock_wait": "10000", - "production": "", - "save_bundle": "", - "init_version": "0.0.0", - "umask": "18", "git": "git", - "init_author_name": "", - "onload_script": "", - "tmp": "/var/folders/y_/7y5c4dls6d93p_qj1nhyp_100000gn/T/", - "unsafe_perm": "true", - "link": "", - "prefix": "/usr/local" + "optional": "true", + "json": "" } } diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/gyp-mac-tool b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/gyp-mac-tool deleted file mode 100755 index bf059c3..0000000 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/gyp-mac-tool +++ /dev/null @@ -1,211 +0,0 @@ -#!/usr/bin/env python -# Generated by gyp. Do not edit. -# Copyright (c) 2012 Google Inc. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Utility functions to perform Xcode-style build steps. - -These functions are executed via gyp-mac-tool when using the Makefile generator. -""" - -import fcntl -import os -import plistlib -import re -import shutil -import string -import subprocess -import sys - - -def main(args): - executor = MacTool() - exit_code = executor.Dispatch(args) - if exit_code is not None: - sys.exit(exit_code) - - -class MacTool(object): - """This class performs all the Mac tooling steps. The methods can either be - executed directly, or dispatched from an argument list.""" - - def Dispatch(self, args): - """Dispatches a string command to a method.""" - if len(args) < 1: - raise Exception("Not enough arguments") - - method = "Exec%s" % self._CommandifyName(args[0]) - return getattr(self, method)(*args[1:]) - - def _CommandifyName(self, name_string): - """Transforms a tool name like copy-info-plist to CopyInfoPlist""" - return name_string.title().replace('-', '') - - def ExecCopyBundleResource(self, source, dest): - """Copies a resource file to the bundle/Resources directory, performing any - necessary compilation on each resource.""" - extension = os.path.splitext(source)[1].lower() - if os.path.isdir(source): - # Copy tree. - if os.path.exists(dest): - shutil.rmtree(dest) - shutil.copytree(source, dest) - elif extension == '.xib': - return self._CopyXIBFile(source, dest) - elif extension == '.strings': - self._CopyStringsFile(source, dest) - else: - shutil.copyfile(source, dest) - - def _CopyXIBFile(self, source, dest): - """Compiles a XIB file with ibtool into a binary plist in the bundle.""" - tools_dir = os.environ.get('DEVELOPER_BIN_DIR', '/usr/bin') - args = [os.path.join(tools_dir, 'ibtool'), '--errors', '--warnings', - '--notices', '--output-format', 'human-readable-text', '--compile', - dest, source] - ibtool_section_re = re.compile(r'/\*.*\*/') - ibtool_re = re.compile(r'.*note:.*is clipping its content') - ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE) - current_section_header = None - for line in ibtoolout.stdout: - if ibtool_section_re.match(line): - current_section_header = line - elif not ibtool_re.match(line): - if current_section_header: - sys.stdout.write(current_section_header) - current_section_header = None - sys.stdout.write(line) - return ibtoolout.returncode - - def _CopyStringsFile(self, source, dest): - """Copies a .strings file using iconv to reconvert the input into UTF-16.""" - input_code = self._DetectInputEncoding(source) or "UTF-8" - fp = open(dest, 'w') - args = ['/usr/bin/iconv', '--from-code', input_code, '--to-code', - 'UTF-16', source] - subprocess.call(args, stdout=fp) - fp.close() - - def _DetectInputEncoding(self, file_name): - """Reads the first few bytes from file_name and tries to guess the text - encoding. Returns None as a guess if it can't detect it.""" - fp = open(file_name, 'rb') - try: - header = fp.read(3) - except e: - fp.close() - return None - fp.close() - if header.startswith("\xFE\xFF"): - return "UTF-16BE" - elif header.startswith("\xFF\xFE"): - return "UTF-16LE" - elif header.startswith("\xEF\xBB\xBF"): - return "UTF-8" - else: - return None - - def ExecCopyInfoPlist(self, source, dest): - """Copies the |source| Info.plist to the destination directory |dest|.""" - # Read the source Info.plist into memory. - fd = open(source, 'r') - lines = fd.read() - fd.close() - - # Go through all the environment variables and replace them as variables in - # the file. - for key in os.environ: - if key.startswith('_'): - continue - evar = '${%s}' % key - lines = string.replace(lines, evar, os.environ[key]) - - # Write out the file with variables replaced. - fd = open(dest, 'w') - fd.write(lines) - fd.close() - - # Now write out PkgInfo file now that the Info.plist file has been - # "compiled". - self._WritePkgInfo(dest) - - def _WritePkgInfo(self, info_plist): - """This writes the PkgInfo file from the data stored in Info.plist.""" - plist = plistlib.readPlist(info_plist) - if not plist: - return - - # Only create PkgInfo for executable types. - package_type = plist['CFBundlePackageType'] - if package_type != 'APPL': - return - - # The format of PkgInfo is eight characters, representing the bundle type - # and bundle signature, each four characters. If that is missing, four - # '?' characters are used instead. - signature_code = plist.get('CFBundleSignature', '????') - if len(signature_code) != 4: # Wrong length resets everything, too. - signature_code = '?' * 4 - - dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo') - fp = open(dest, 'w') - fp.write('%s%s' % (package_type, signature_code)) - fp.close() - - def ExecFlock(self, lockfile, *cmd_list): - """Emulates the most basic behavior of Linux's flock(1).""" - # Rely on exception handling to report errors. - fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666) - fcntl.flock(fd, fcntl.LOCK_EX) - return subprocess.call(cmd_list) - - def ExecFilterLibtool(self, *cmd_list): - """Calls libtool and filters out 'libtool: file: foo.o has no symbols'.""" - libtool_re = re.compile(r'^libtool: file: .* has no symbols$') - libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE) - _, err = libtoolout.communicate() - for line in err.splitlines(): - if not libtool_re.match(line): - print >>sys.stderr, line - return libtoolout.returncode - - def ExecPackageFramework(self, framework, version): - """Takes a path to Something.framework and the Current version of that and - sets up all the symlinks.""" - # Find the name of the binary based on the part before the ".framework". - binary = os.path.basename(framework).split('.')[0] - - CURRENT = 'Current' - RESOURCES = 'Resources' - VERSIONS = 'Versions' - - if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): - # Binary-less frameworks don't seem to contain symlinks (see e.g. - # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). - return - - # Move into the framework directory to set the symlinks correctly. - pwd = os.getcwd() - os.chdir(framework) - - # Set up the Current version. - self._Relink(version, os.path.join(VERSIONS, CURRENT)) - - # Set up the root symlinks. - self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) - self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) - - # Back to where we were before! - os.chdir(pwd) - - def _Relink(self, dest, link): - """Creates a symlink to |dest| named |link|. If |link| already exists, - it is overwritten.""" - if os.path.lexists(link): - os.remove(link) - os.symlink(dest, link) - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/kerberos.target.mk b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/kerberos.target.mk index a381603..3d14127 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/kerberos.target.mk +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/build/kerberos.target.mk @@ -2,167 +2,39 @@ TOOLSET := target TARGET := kerberos -DEFS_Debug := \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-D__MACOSX_CORE__' \ - '-DBUILDING_NODE_EXTENSION' \ - '-DDEBUG' \ - '-D_DEBUG' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -O0 \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Debug := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -fno-rtti \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Debug := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Debug := - -INCS_Debug := \ - -I/Users/rossgallagher/.node-gyp/0.10.10/src \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include - -DEFS_Release := \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-D__MACOSX_CORE__' \ - '-DBUILDING_NODE_EXTENSION' - -# Flags passed to all source files. -CFLAGS_Release := \ - -Os \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Release := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -fno-rtti \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Release := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Release := - -INCS_Release := \ - -I/Users/rossgallagher/.node-gyp/0.10.10/src \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include - -OBJS := \ - $(obj).target/$(TARGET)/lib/kerberos.o \ - $(obj).target/$(TARGET)/lib/worker.o \ - $(obj).target/$(TARGET)/lib/kerberosgss.o \ - $(obj).target/$(TARGET)/lib/base64.o \ - $(obj).target/$(TARGET)/lib/kerberos_context.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.c FORCE_DO_CMD - @$(call do_cmd,cc,1) - -# End of this set of suffix rules ### Rules for final target. LDFLAGS_Debug := \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) \ - -install_name @rpath/kerberos.node - -LIBTOOLFLAGS_Debug := \ - -Wl,-search_paths_first + -pthread \ + -rdynamic \ + -m64 LDFLAGS_Release := \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) \ - -install_name @rpath/kerberos.node + -pthread \ + -rdynamic \ + -m64 -LIBTOOLFLAGS_Release := \ - -Wl,-search_paths_first +LIBS := -LIBS := \ - -undefined dynamic_lookup \ - -lkrb5 - -$(builddir)/kerberos.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/kerberos.node: LIBS := $(LIBS) -$(builddir)/kerberos.node: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/kerberos.node: TOOLSET := $(TOOLSET) -$(builddir)/kerberos.node: $(OBJS) FORCE_DO_CMD +$(obj).target/kerberos.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) +$(obj).target/kerberos.node: LIBS := $(LIBS) +$(obj).target/kerberos.node: TOOLSET := $(TOOLSET) +$(obj).target/kerberos.node: FORCE_DO_CMD $(call do_cmd,solink_module) -all_deps += $(builddir)/kerberos.node +all_deps += $(obj).target/kerberos.node # Add target alias .PHONY: kerberos kerberos: $(builddir)/kerberos.node +# Copy this to the executable output path. +$(builddir)/kerberos.node: TOOLSET := $(TOOLSET) +$(builddir)/kerberos.node: $(obj).target/kerberos.node FORCE_DO_CMD + $(call do_cmd,copy) + +all_deps += $(builddir)/kerberos.node # Short alias for building this executable. .PHONY: kerberos.node -kerberos.node: $(builddir)/kerberos.node +kerberos.node: $(obj).target/kerberos.node $(builddir)/kerberos.node # Add executable to "all" target. .PHONY: all diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/auth_processes/mongodb.js b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/auth_processes/mongodb.js index afc30b7..f1e9231 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/auth_processes/mongodb.js +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/auth_processes/mongodb.js @@ -1,11 +1,11 @@ var format = require('util').format; -var MongoAuthProcess = function(host, port) { +var MongoAuthProcess = function(host, port, service_name) { // Check what system we are on if(process.platform == 'win32') { - this._processor = new Win32MongoProcessor(host, port); + this._processor = new Win32MongoProcessor(host, port, service_name); } else { - this._processor = new UnixMongoProcessor(host, port); + this._processor = new UnixMongoProcessor(host, port, service_name); } } @@ -22,15 +22,17 @@ MongoAuthProcess.prototype.transition = function(payload, callback) { * Win32 SSIP Processor for MongoDB * *******************************************************************/ -var Win32MongoProcessor = function(host, port) { +var Win32MongoProcessor = function(host, port, service_name) { this.host = host; this.port = port // SSIP classes this.ssip = require("../kerberos").SSIP; // Set up first transition this._transition = Win32MongoProcessor.first_transition(this); + // Set up service name + service_name = service_name || "mongodb"; // Set up target - this.target = format("mongodb/%s", host); + this.target = format("%s/%s", service_name, host); // Number of retries this.retries = 10; } @@ -178,16 +180,17 @@ Win32MongoProcessor.third_transition = function(self) { * UNIX MIT Kerberos processor * *******************************************************************/ -var UnixMongoProcessor = function(host, port) { +var UnixMongoProcessor = function(host, port, service_name) { this.host = host; this.port = port // SSIP classes this.Kerberos = require("../kerberos").Kerberos; this.kerberos = new this.Kerberos(); + service_name = service_name || "mongodb"; // Set up first transition this._transition = UnixMongoProcessor.first_transition(this); // Set up target - this.target = format("mongodb@%s", host); + this.target = format("%s@%s", service_name, host); // Number of retries this.retries = 10; } diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/base64.c b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/base64.c index 4232106..aca0a61 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/base64.c +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/base64.c @@ -18,6 +18,18 @@ #include #include +#include +#include + +void die2(const char *message) { + if(errno) { + perror(message); + } else { + printf("ERROR: %s\n", message); + } + + exit(1); +} // base64 tables static char basis_64[] = @@ -43,6 +55,7 @@ static signed char index_64[128] = char *base64_encode(const unsigned char *value, int vlen) { char *result = (char *)malloc((vlen * 4) / 3 + 5); + if(result == NULL) die2("Memory allocation failed"); char *out = result; while (vlen >= 3) { @@ -79,6 +92,7 @@ unsigned char *base64_decode(const char *value, int *rlen) int vlen = strlen(value); unsigned char *result =(unsigned char *)malloc((vlen * 3) / 4 + 1); + if(result == NULL) die2("Memory allocation failed"); unsigned char *out = result; while (1) diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/base64.h b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/base64.h index f0e1f06..9152e6a 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/base64.h +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/base64.h @@ -13,6 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. **/ +#ifndef BASE64_H +#define BASE64_H char *base64_encode(const unsigned char *value, int vlen); unsigned char *base64_decode(const char *value, int *rlen); + +#endif \ No newline at end of file diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos.cc b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos.cc index 08eda82..df4c7ce 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos.cc +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos.cc @@ -1,5 +1,6 @@ #include "kerberos.h" #include +#include #include "worker.h" #include "kerberos_context.h" @@ -7,6 +8,16 @@ # define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0])) #endif +void die(const char *message) { + if(errno) { + perror(message); + } else { + printf("ERROR: %s\n", message); + } + + exit(1); +} + Persistent Kerberos::constructor_template; // Call structs @@ -81,6 +92,7 @@ static void _authGSSClientInit(Worker *worker) { // Allocate state state = (gss_client_state *)malloc(sizeof(gss_client_state)); + if(state == NULL) die("Memory allocation failed"); // Unpack the parameter data struct AuthGSSClientCall *call = (AuthGSSClientCall *)worker->parameters; @@ -96,6 +108,7 @@ static void _authGSSClientInit(Worker *worker) { worker->error = TRUE; worker->error_code = response->return_code; worker->error_message = response->message; + free(state); } else { worker->return_value = state; } @@ -125,11 +138,14 @@ Handle Kerberos::AuthGSSClientInit(const Arguments &args) { Local service = args[0]->ToString(); // Convert uri string to c-string char *service_str = (char *)calloc(service->Utf8Length() + 1, sizeof(char)); + if(service_str == NULL) die("Memory allocation failed"); + // Write v8 string to c-string service->WriteUtf8(service_str); // Allocate a structure AuthGSSClientCall *call = (AuthGSSClientCall *)calloc(1, sizeof(AuthGSSClientCall)); + if(call == NULL) die("Memory allocation failed"); call->flags =args[1]->ToInt32()->Uint32Value(); call->uri = service_str; @@ -215,12 +231,14 @@ Handle Kerberos::AuthGSSClientStep(const Arguments &args) { Local challenge = args[1]->ToString(); // Convert uri string to c-string challenge_str = (char *)calloc(challenge->Utf8Length() + 1, sizeof(char)); + if(challenge_str == NULL) die("Memory allocation failed"); // Write v8 string to c-string challenge->WriteUtf8(challenge_str); } // Allocate a structure AuthGSSClientStepCall *call = (AuthGSSClientStepCall *)calloc(1, sizeof(AuthGSSClientCall)); + if(call == NULL) die("Memory allocation failed"); call->context = kerberos_context; call->challenge = challenge_str; @@ -304,12 +322,14 @@ Handle Kerberos::AuthGSSClientUnwrap(const Arguments &args) { Local challenge = args[1]->ToString(); // Convert uri string to c-string challenge_str = (char *)calloc(challenge->Utf8Length() + 1, sizeof(char)); + if(challenge_str == NULL) die("Memory allocation failed"); // Write v8 string to c-string challenge->WriteUtf8(challenge_str); } // Allocate a structure AuthGSSClientUnwrapCall *call = (AuthGSSClientUnwrapCall *)calloc(1, sizeof(AuthGSSClientUnwrapCall)); + if(call == NULL) die("Memory allocation failed"); call->context = kerberos_context; call->challenge = challenge_str; @@ -394,6 +414,7 @@ Handle Kerberos::AuthGSSClientWrap(const Arguments &args) { Local challenge = args[1]->ToString(); // Convert uri string to c-string challenge_str = (char *)calloc(challenge->Utf8Length() + 1, sizeof(char)); + if(challenge_str == NULL) die("Memory allocation failed"); // Write v8 string to c-string challenge->WriteUtf8(challenge_str); @@ -403,12 +424,14 @@ Handle Kerberos::AuthGSSClientWrap(const Arguments &args) { Local user_name = args[2]->ToString(); // Convert uri string to c-string user_name_str = (char *)calloc(user_name->Utf8Length() + 1, sizeof(char)); + if(user_name_str == NULL) die("Memory allocation failed"); // Write v8 string to c-string user_name->WriteUtf8(user_name_str); } // Allocate a structure AuthGSSClientWrapCall *call = (AuthGSSClientWrapCall *)calloc(1, sizeof(AuthGSSClientWrapCall)); + if(call == NULL) die("Memory allocation failed"); call->context = kerberos_context; call->challenge = challenge_str; call->user_name = user_name_str; @@ -478,6 +501,7 @@ Handle Kerberos::AuthGSSClientClean(const Arguments &args) { // Allocate a structure AuthGSSClientCleanCall *call = (AuthGSSClientCleanCall *)calloc(1, sizeof(AuthGSSClientCleanCall)); + if(call == NULL) die("Memory allocation failed"); call->context = kerberos_context; // Unpack the callback diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos.h b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos.h index f0fbcdc..ebcf7ec 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos.h +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos.h @@ -1,14 +1,16 @@ #ifndef KERBEROS_H #define KERBEROS_H +#include #include #include #include -#include #include #include +#include "util.h" + extern "C" { #include "kerberosgss.h" } diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos_context.h b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos_context.h index 1b62cba..8becef6 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos_context.h +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberos_context.h @@ -1,11 +1,11 @@ #ifndef KERBEROS_CONTEXT_H #define KERBEROS_CONTEXT_H +#include #include #include #include -#include #include #include diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberosgss.c b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberosgss.c index ddf8c4a..8e55b62 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberosgss.c +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/kerberosgss.c @@ -22,6 +22,20 @@ #include #include #include +#include + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + +void die1(const char *message) { + if(errno) { + perror(message); + } else { + printf("ERROR: %s\n", message); + } + + exit(1); +} static void set_gss_error(OM_uint32 err_maj, OM_uint32 err_min); @@ -133,6 +147,7 @@ gss_client_response *authenticate_gss_client_init(const char* service, long int end: if(response == NULL) { response = calloc(1, sizeof(gss_client_response)); + if(response == NULL) die1("Memory allocation failed"); response->return_code = ret; } @@ -140,16 +155,15 @@ gss_client_response *authenticate_gss_client_init(const char* service, long int } gss_client_response *authenticate_gss_client_clean(gss_client_state *state) { - OM_uint32 maj_stat; OM_uint32 min_stat; int ret = AUTH_GSS_COMPLETE; gss_client_response *response = NULL; if(state->context != GSS_C_NO_CONTEXT) - maj_stat = gss_delete_sec_context(&min_stat, &state->context, GSS_C_NO_BUFFER); + gss_delete_sec_context(&min_stat, &state->context, GSS_C_NO_BUFFER); if(state->server_name != GSS_C_NO_NAME) - maj_stat = gss_release_name(&min_stat, &state->server_name); + gss_release_name(&min_stat, &state->server_name); if(state->username != NULL) { free(state->username); @@ -163,6 +177,7 @@ gss_client_response *authenticate_gss_client_clean(gss_client_state *state) { if(response == NULL) { response = calloc(1, sizeof(gss_client_response)); + if(response == NULL) die1("Memory allocation failed"); response->return_code = ret; } @@ -243,6 +258,7 @@ gss_client_response *authenticate_gss_client_step(gss_client_state* state, const goto end; } else { state->username = (char *)malloc(name_token.length + 1); + if(state->username == NULL) die1("Memory allocation failed"); strncpy(state->username, (char*) name_token.value, name_token.length); state->username[name_token.length] = 0; gss_release_buffer(&min_stat, &name_token); @@ -258,6 +274,7 @@ gss_client_response *authenticate_gss_client_step(gss_client_state* state, const if(response == NULL) { response = calloc(1, sizeof(gss_client_response)); + if(response == NULL) die1("Memory allocation failed"); response->return_code = ret; } @@ -305,7 +322,7 @@ gss_client_response *authenticate_gss_client_unwrap(gss_client_state *state, con // Grab the client response if(output_token.length) { state->response = base64_encode((const unsigned char *)output_token.value, output_token.length); - maj_stat = gss_release_buffer(&min_stat, &output_token); + gss_release_buffer(&min_stat, &output_token); } end: if(output_token.value) @@ -315,6 +332,7 @@ gss_client_response *authenticate_gss_client_unwrap(gss_client_state *state, con if(response == NULL) { response = calloc(1, sizeof(gss_client_response)); + if(response == NULL) die1("Memory allocation failed"); response->return_code = ret; } @@ -386,7 +404,7 @@ gss_client_response *authenticate_gss_client_wrap(gss_client_state* state, const // Grab the client response to send back to the server if (output_token.length) { state->response = base64_encode((const unsigned char *)output_token.value, output_token.length);; - maj_stat = gss_release_buffer(&min_stat, &output_token); + gss_release_buffer(&min_stat, &output_token); } end: if (output_token.value) @@ -394,6 +412,7 @@ gss_client_response *authenticate_gss_client_wrap(gss_client_state* state, const if(response == NULL) { response = calloc(1, sizeof(gss_client_response)); + if(response == NULL) die1("Memory allocation failed"); response->return_code = ret; } @@ -452,20 +471,19 @@ int authenticate_gss_server_init(const char *service, gss_server_state *state) int authenticate_gss_server_clean(gss_server_state *state) { - OM_uint32 maj_stat; OM_uint32 min_stat; int ret = AUTH_GSS_COMPLETE; if (state->context != GSS_C_NO_CONTEXT) - maj_stat = gss_delete_sec_context(&min_stat, &state->context, GSS_C_NO_BUFFER); + gss_delete_sec_context(&min_stat, &state->context, GSS_C_NO_BUFFER); if (state->server_name != GSS_C_NO_NAME) - maj_stat = gss_release_name(&min_stat, &state->server_name); + gss_release_name(&min_stat, &state->server_name); if (state->client_name != GSS_C_NO_NAME) - maj_stat = gss_release_name(&min_stat, &state->client_name); + gss_release_name(&min_stat, &state->client_name); if (state->server_creds != GSS_C_NO_CREDENTIAL) - maj_stat = gss_release_cred(&min_stat, &state->server_creds); + gss_release_cred(&min_stat, &state->server_creds); if (state->client_creds != GSS_C_NO_CREDENTIAL) - maj_stat = gss_release_cred(&min_stat, &state->client_creds); + gss_release_cred(&min_stat, &state->client_creds); if (state->username != NULL) { free(state->username); @@ -625,9 +643,12 @@ gss_client_response *gss_error(OM_uint32 err_maj, OM_uint32 err_min) { OM_uint32 msg_ctx = 0; gss_buffer_desc status_string; char *buf_maj = calloc(512, sizeof(char)); + if(buf_maj == NULL) die1("Memory allocation failed"); char *buf_min = calloc(512, sizeof(char)); + if(buf_min == NULL) die1("Memory allocation failed"); char *message = NULL; gss_client_response *response = calloc(1, sizeof(gss_client_response)); + if(response == NULL) die1("Memory allocation failed"); do { maj_stat = gss_display_status (&min_stat, @@ -655,7 +676,8 @@ gss_client_response *gss_error(OM_uint32 err_maj, OM_uint32 err_min) { } while (!GSS_ERROR(maj_stat) && msg_ctx != 0); // Join the strings - message = calloc(1024, sizeof(1)); + message = calloc(1026, 1); + if(message == NULL) die1("Memory allocation failed"); // Join the two messages sprintf(message, "%s, %s", buf_maj, buf_min); // Free data @@ -666,3 +688,6 @@ gss_client_response *gss_error(OM_uint32 err_maj, OM_uint32 err_min) { // Return the message return response; } + +#pragma clang diagnostic pop + diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_buffer.cc b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_buffer.cc index e583336..dd38b59 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_buffer.cc +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_buffer.cc @@ -1,8 +1,8 @@ +#include #include #include #include #include -#include #include #include #include diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_buffer_descriptor.cc b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_buffer_descriptor.cc index 3bda0b7..560ef50 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_buffer_descriptor.cc +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_buffer_descriptor.cc @@ -1,8 +1,8 @@ +#include #include #include #include #include -#include #include #include #include diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_context.cc b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_context.cc index 8c3691a..fceeb9e 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_context.cc +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_context.cc @@ -315,6 +315,46 @@ static void _initializeContext(Worker *worker) { // Set the context worker->return_code = status; worker->return_value = call->context; + } else if(status == SEC_E_INSUFFICIENT_MEMORY) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_INSUFFICIENT_MEMORY There is not enough memory available to complete the requested action."; + } else if(status == SEC_E_INTERNAL_ERROR) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_INTERNAL_ERROR An error occurred that did not map to an SSPI error code."; + } else if(status == SEC_E_INVALID_HANDLE) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_INVALID_HANDLE The handle passed to the function is not valid."; + } else if(status == SEC_E_INVALID_TOKEN) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_INVALID_TOKEN The error is due to a malformed input token, such as a token corrupted in transit, a token of incorrect size, or a token passed into the wrong security package. Passing a token to the wrong package can happen if the client and server did not negotiate the proper security package."; + } else if(status == SEC_E_LOGON_DENIED) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_LOGON_DENIED The logon failed."; + } else if(status == SEC_E_NO_AUTHENTICATING_AUTHORITY) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_NO_AUTHENTICATING_AUTHORITY No authority could be contacted for authentication. The domain name of the authenticating party could be wrong, the domain could be unreachable, or there might have been a trust relationship failure."; + } else if(status == SEC_E_NO_CREDENTIALS) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_NO_CREDENTIALS No credentials are available in the security package."; + } else if(status == SEC_E_TARGET_UNKNOWN) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_TARGET_UNKNOWN The target was not recognized."; + } else if(status == SEC_E_UNSUPPORTED_FUNCTION) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_UNSUPPORTED_FUNCTION A context attribute flag that is not valid (ISC_REQ_DELEGATE or ISC_REQ_PROMPT_FOR_CREDS) was specified in the fContextReq parameter."; + } else if(status == SEC_E_WRONG_PRINCIPAL) { + worker->error = TRUE; + worker->error_code = status; + worker->error_message = "SEC_E_WRONG_PRINCIPAL The principal that received the authentication request is not the same as the one passed into the pszTargetName parameter. This indicates a failure in mutual authentication."; } else { worker->error = TRUE; worker->error_code = status; diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_credentials.cc b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_credentials.cc index 14c1cdc..025238b 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_credentials.cc +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/lib/win32/wrappers/security_credentials.cc @@ -1,8 +1,8 @@ +#include #include #include #include #include -#include #include #include #include diff --git a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/package.json b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/package.json index 46e144b..87003ac 100644 --- a/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/package.json +++ b/node_modules/mongoose/node_modules/mongodb/node_modules/kerberos/package.json @@ -1,12 +1,8 @@ { "name": "kerberos", - "version": "0.0.2", + "version": "0.0.4", "description": "Kerberos library for Node.js", "main": "index.js", - "scripts": { - "install": "(node-gyp rebuild 2> builderror.log) || (exit 0)", - "test": "nodeunit ./test" - }, "repository": { "type": "git", "url": "https://github.com/christkv/kerberos.git" @@ -19,6 +15,10 @@ "devDependencies": { "nodeunit": "latest" }, + "scripts": { + "install": "(node-gyp rebuild 2> builderror.log) || (exit 0)", + "test": "nodeunit ./test" + }, "author": { "name": "Christian Amor Kvalheim" }, @@ -29,6 +29,6 @@ "bugs": { "url": "https://github.com/christkv/kerberos/issues" }, - "_id": "kerberos@0.0.2", - "_from": "kerberos@latest" + "_id": "kerberos@0.0.4", + "_from": "kerberos@0.0.4" } diff --git a/node_modules/mongoose/node_modules/mongodb/package.json b/node_modules/mongoose/node_modules/mongodb/package.json index cb498a9..281f618 100755 --- a/node_modules/mongoose/node_modules/mongodb/package.json +++ b/node_modules/mongoose/node_modules/mongodb/package.json @@ -7,7 +7,7 @@ "driver", "db" ], - "version": "1.3.5", + "version": "1.4.12", "author": { "name": "Christian Amor Kvalheim", "email": "christkv@gmail.com" @@ -168,6 +168,12 @@ }, { "name": "Matt Self" + }, + { + "name": "Gregory Langlais" + }, + { + "name": "Samantha Ritter" } ], "repository": { @@ -178,24 +184,26 @@ "url": "http://github.com/mongodb/node-mongodb-native/issues" }, "dependencies": { - "bson": "0.1.8", - "kerberos": "latest" + "bson": "~0.2", + "kerberos": "0.0.4", + "readable-stream": "latest" }, "devDependencies": { - "dox": "0.2.0", + "dox": "0.4.4", "uglify-js": "1.2.5", "ejs": "0.6.1", "request": "2.12.0", - "nodeunit": "0.7.4", + "nodeunit": "0.7.3", "markdown": "0.3.1", "gleak": "0.2.3", "step": "0.0.5", "async": "0.1.22", - "integra": "latest", + "integra": "0.0.3", "optimist": "latest" }, "optionalDependencies": { - "kerberos": "latest" + "kerberos": "0.0.4", + "readable-stream": "latest" }, "config": { "native": false @@ -217,8 +225,12 @@ "url": "http://www.apache.org/licenses/LICENSE-2.0" } ], - "readme": "Up to date documentation\n========================\n\n[Documentation](http://mongodb.github.com/node-mongodb-native/)\n\nInstall\n=======\n\nTo install the most recent release from npm, run:\n\n npm install mongodb\n\nThat may give you a warning telling you that bugs['web'] should be bugs['url'], it would be safe to ignore it (this has been fixed in the development version)\n\nTo install the latest from the repository, run::\n\n npm install path/to/node-mongodb-native\n\nCommunity\n=========\nCheck out the google group [node-mongodb-native](http://groups.google.com/group/node-mongodb-native) for questions/answers from users of the driver.\n\nLive Examples\n============\n\n\nIntroduction\n============\n\nThis is a node.js driver for MongoDB. It's a port (or close to a port) of the library for ruby at http://github.com/mongodb/mongo-ruby-driver/.\n\nA simple example of inserting a document.\n\n```javascript\n var client = new Db('test', new Server(\"127.0.0.1\", 27017, {}), {w: 1}),\n test = function (err, collection) {\n collection.insert({a:2}, function(err, docs) {\n\n collection.count(function(err, count) {\n test.assertEquals(1, count);\n });\n\n // Locate all the entries using find\n collection.find().toArray(function(err, results) {\n test.assertEquals(1, results.length);\n test.assertTrue(results[0].a === 2);\n\n // Let's close the db\n client.close();\n });\n });\n };\n\n client.open(function(err, p_client) {\n client.collection('test_insert', test);\n });\n```\n\nData types\n==========\n\nTo store and retrieve the non-JSON MongoDb primitives ([ObjectID](http://www.mongodb.org/display/DOCS/Object+IDs), Long, Binary, [Timestamp](http://www.mongodb.org/display/DOCS/Timestamp+data+type), [DBRef](http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef), Code).\n\nIn particular, every document has a unique `_id` which can be almost any type, and by default a 12-byte ObjectID is created. ObjectIDs can be represented as 24-digit hexadecimal strings, but you must convert the string back into an ObjectID before you can use it in the database. For example:\n\n```javascript\n // Get the objectID type\n var ObjectID = require('mongodb').ObjectID;\n\n var idString = '4e4e1638c85e808431000003';\n collection.findOne({_id: new ObjectID(idString)}, console.log) // ok\n collection.findOne({_id: idString}, console.log) // wrong! callback gets undefined\n```\n\nHere are the constructors the non-Javascript BSON primitive types:\n\n```javascript\n // Fetch the library\n var mongo = require('mongodb');\n // Create new instances of BSON types\n new mongo.Long(numberString)\n new mongo.ObjectID(hexString)\n new mongo.Timestamp() // the actual unique number is generated on insert.\n new mongo.DBRef(collectionName, id, dbName)\n new mongo.Binary(buffer) // takes a string or Buffer\n new mongo.Code(code, [context])\n new mongo.Symbol(string)\n new mongo.MinKey()\n new mongo.MaxKey()\n new mongo.Double(number)\t// Force double storage\n```\n\nThe C/C++ bson parser/serializer\n--------------------------------\n\nIf you are running a version of this library has the C/C++ parser compiled, to enable the driver to use the C/C++ bson parser pass it the option native_parser:true like below\n\n```javascript\n // using native_parser:\n var client = new Db('integration_tests_20',\n new Server(\"127.0.0.1\", 27017),\n {native_parser:true});\n```\n\nThe C++ parser uses the js objects both for serialization and deserialization.\n\nGitHub information\n==================\n\nThe source code is available at http://github.com/mongodb/node-mongodb-native.\nYou can either clone the repository or download a tarball of the latest release.\n\nOnce you have the source you can test the driver by running\n\n $ make test\n\nin the main directory. You will need to have a mongo instance running on localhost for the integration tests to pass.\n\nExamples\n========\n\nFor examples look in the examples/ directory. You can execute the examples using node.\n\n $ cd examples\n $ node queries.js\n\nGridStore\n=========\n\nThe GridStore class allows for storage of binary files in mongoDB using the mongoDB defined files and chunks collection definition.\n\nFor more information have a look at [Gridstore](https://github.com/mongodb/node-mongodb-native/blob/master/docs/gridfs.md)\n\nReplicasets\n===========\nFor more information about how to connect to a replicaset have a look at [Replicasets](https://github.com/mongodb/node-mongodb-native/blob/master/docs/replicaset.md)\n\nPrimary Key Factories\n---------------------\n\nDefining your own primary key factory allows you to generate your own series of id's\n(this could f.ex be to use something like ISBN numbers). The generated the id needs to be a 12 byte long \"string\".\n\nSimple example below\n\n```javascript\n // Custom factory (need to provide a 12 byte array);\n CustomPKFactory = function() {}\n CustomPKFactory.prototype = new Object();\n CustomPKFactory.createPk = function() {\n return new ObjectID(\"aaaaaaaaaaaa\");\n }\n\n var p_client = new Db('integration_tests_20', new Server(\"127.0.0.1\", 27017, {}), {'pk':CustomPKFactory});\n p_client.open(function(err, p_client) {\n p_client.dropDatabase(function(err, done) {\n p_client.createCollection('test_custom_key', function(err, collection) {\n collection.insert({'a':1}, function(err, docs) {\n collection.find({'_id':new ObjectID(\"aaaaaaaaaaaa\")}, function(err, cursor) {\n cursor.toArray(function(err, items) {\n test.assertEquals(1, items.length);\n\n // Let's close the db\n p_client.close();\n });\n });\n });\n });\n });\n });\n```\n\nStrict mode\n-----------\n\nEach database has an optional strict mode. If it is set then asking for a collection\nthat does not exist will return an Error object in the callback. Similarly if you\nattempt to create a collection that already exists. Strict is provided for convenience.\n\n```javascript\n var error_client = new Db('integration_tests_', new Server(\"127.0.0.1\", 27017, {auto_reconnect: false}), {strict:true});\n test.assertEquals(true, error_client.strict);\n\n error_client.open(function(err, error_client) {\n error_client.collection('does-not-exist', function(err, collection) {\n test.assertTrue(err instanceof Error);\n test.assertEquals(\"Collection does-not-exist does not exist. Currently in strict mode.\", err.message);\n });\n\n error_client.createCollection('test_strict_access_collection', function(err, collection) {\n error_client.collection('test_strict_access_collection', function(err, collection) {\n test.assertTrue(collection instanceof Collection);\n // Let's close the db\n error_client.close();\n });\n });\n });\n```\n\nDocumentation\n=============\n\nIf this document doesn't answer your questions, see the source of\n[Collection](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js)\nor [Cursor](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/cursor.js),\nor the documentation at MongoDB for query and update formats.\n\nFind\n----\n\nThe find method is actually a factory method to create\nCursor objects. A Cursor lazily uses the connection the first time\nyou call `nextObject`, `each`, or `toArray`.\n\nThe basic operation on a cursor is the `nextObject` method\nthat fetches the next matching document from the database. The convenience\nmethods `each` and `toArray` call `nextObject` until the cursor is exhausted.\n\nSignatures:\n\n```javascript\n var cursor = collection.find(query, [fields], options);\n cursor.sort(fields).limit(n).skip(m).\n\n cursor.nextObject(function(err, doc) {});\n cursor.each(function(err, doc) {});\n cursor.toArray(function(err, docs) {});\n\n cursor.rewind() // reset the cursor to its initial state.\n```\n\nUseful chainable methods of cursor. These can optionally be options of `find` instead of method calls:\n\n* `.limit(n).skip(m)` to control paging.\n* `.sort(fields)` Order by the given fields. There are several equivalent syntaxes:\n * `.sort({field1: -1, field2: 1})` descending by field1, then ascending by field2.\n * `.sort([['field1', 'desc'], ['field2', 'asc']])` same as above\n * `.sort([['field1', 'desc'], 'field2'])` same as above\n * `.sort('field1')` ascending by field1\n\nOther options of `find`:\n\n* `fields` the fields to fetch (to avoid transferring the entire document)\n* `tailable` if true, makes the cursor [tailable](http://www.mongodb.org/display/DOCS/Tailable+Cursors).\n* `batchSize` The number of the subset of results to request the database\nto return for every request. This should initially be greater than 1 otherwise\nthe database will automatically close the cursor. The batch size can be set to 1\nwith `batchSize(n, function(err){})` after performing the initial query to the database.\n* `hint` See [Optimization: hint](http://www.mongodb.org/display/DOCS/Optimization#Optimization-Hint).\n* `explain` turns this into an explain query. You can also call\n`explain()` on any cursor to fetch the explanation.\n* `snapshot` prevents documents that are updated while the query is active\nfrom being returned multiple times. See more\n[details about query snapshots](http://www.mongodb.org/display/DOCS/How+to+do+Snapshotted+Queries+in+the+Mongo+Database).\n* `timeout` if false, asks MongoDb not to time out this cursor after an\ninactivity period.\n\n\nFor information on how to create queries, see the\n[MongoDB section on querying](http://www.mongodb.org/display/DOCS/Querying).\n\n```javascript\n var mongodb = require('mongodb');\n var server = new mongodb.Server(\"127.0.0.1\", 27017, {});\n new mongodb.Db('test', server, {}).open(function (error, client) {\n if (error) throw error;\n var collection = new mongodb.Collection(client, 'test_collection');\n collection.find({}, {limit:10}).toArray(function(err, docs) {\n console.dir(docs);\n });\n });\n```\n\nInsert\n------\n\nSignature:\n\n```javascript\n collection.insert(docs, options, [callback]);\n```\n\nwhere `docs` can be a single document or an array of documents.\n\nUseful options:\n\n* `safe:true` Should always set if you have a callback.\n\nSee also: [MongoDB docs for insert](http://www.mongodb.org/display/DOCS/Inserting).\n\n```javascript\n var mongodb = require('mongodb');\n var server = new mongodb.Server(\"127.0.0.1\", 27017, {});\n new mongodb.Db('test', server, {w: 1}).open(function (error, client) {\n if (error) throw error;\n var collection = new mongodb.Collection(client, 'test_collection');\n collection.insert({hello: 'world'}, {safe:true},\n function(err, objects) {\n if (err) console.warn(err.message);\n if (err && err.message.indexOf('E11000 ') !== -1) {\n // this _id was already inserted in the database\n }\n });\n });\n```\n\nNote that there's no reason to pass a callback to the insert or update commands\nunless you use the `safe:true` option. If you don't specify `safe:true`, then\nyour callback will be called immediately.\n\nUpdate; update and insert (upsert)\n----------------------------------\n\nThe update operation will update the first document that matches your query\n(or all documents that match if you use `multi:true`).\nIf `safe:true`, `upsert` is not set, and no documents match, your callback will return 0 documents updated.\n\nSee the [MongoDB docs](http://www.mongodb.org/display/DOCS/Updating) for\nthe modifier (`$inc`, `$set`, `$push`, etc.) formats.\n\nSignature:\n\n```javascript\n collection.update(criteria, objNew, options, [callback]);\n```\n\nUseful options:\n\n* `safe:true` Should always set if you have a callback.\n* `multi:true` If set, all matching documents are updated, not just the first.\n* `upsert:true` Atomically inserts the document if no documents matched.\n\nExample for `update`:\n\n```javascript\n var mongodb = require('mongodb');\n var server = new mongodb.Server(\"127.0.0.1\", 27017, {});\n new mongodb.Db('test', server, {w: 1}).open(function (error, client) {\n if (error) throw error;\n var collection = new mongodb.Collection(client, 'test_collection');\n collection.update({hi: 'here'}, {$set: {hi: 'there'}}, {safe:true},\n function(err) {\n if (err) console.warn(err.message);\n else console.log('successfully updated');\n });\n });\n```\n\nFind and modify\n---------------\n\n`findAndModify` is like `update`, but it also gives the updated document to\nyour callback. But there are a few key differences between findAndModify and\nupdate:\n\n 1. The signatures differ.\n 2. You can only findAndModify a single item, not multiple items.\n\nSignature:\n\n```javascript\n collection.findAndModify(query, sort, update, options, callback)\n```\n\nThe sort parameter is used to specify which object to operate on, if more than\none document matches. It takes the same format as the cursor sort (see\nConnection.find above).\n\nSee the\n[MongoDB docs for findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command)\nfor more details.\n\nUseful options:\n\n* `remove:true` set to a true to remove the object before returning\n* `new:true` set to true if you want to return the modified object rather than the original. Ignored for remove.\n* `upsert:true` Atomically inserts the document if no documents matched.\n\nExample for `findAndModify`:\n\n```javascript\n var mongodb = require('mongodb');\n var server = new mongodb.Server(\"127.0.0.1\", 27017, {});\n new mongodb.Db('test', server, {w: 1}).open(function (error, client) {\n if (error) throw error;\n var collection = new mongodb.Collection(client, 'test_collection');\n collection.findAndModify({hello: 'world'}, [['_id','asc']], {$set: {hi: 'there'}}, {},\n function(err, object) {\n if (err) console.warn(err.message);\n else console.dir(object); // undefined if no matching object exists.\n });\n });\n```\n\nSave\n----\n\nThe `save` method is a shorthand for upsert if the document contains an\n`_id`, or an insert if there is no `_id`.\n\nSponsors\n========\nJust as Felix Geisendörfer I'm also working on the driver for my own startup and this driver is a big project that also benefits other companies who are using MongoDB.\n\nIf your company could benefit from a even better-engineered node.js mongodb driver I would appreciate any type of sponsorship you may be able to provide. All the sponsors will get a lifetime display in this readme, priority support and help on problems and votes on the roadmap decisions for the driver. If you are interested contact me on [christkv AT g m a i l.com](mailto:christkv@gmail.com) for details.\n\nAnd I'm very thankful for code contributions. If you are interested in working on features please contact me so we can discuss API design and testing.\n\nRelease Notes\n=============\n\nSee HISTORY\n\nCredits\n=======\n\n1. [10gen](http://github.com/mongodb/mongo-ruby-driver/)\n2. [Google Closure Library](http://code.google.com/closure/library/)\n3. [Jonas Raoni Soares Silva](http://jsfromhell.com/classes/binary-parser)\n\nContributors\n============\n\nAaron Heckmann, Christoph Pojer, Pau Ramon Revilla, Nathan White, Emmerman, Seth LaForge, Boris Filipov, Stefan Schärmeli, Tedde Lundgren, renctan, Sergey Ukustov, Ciaran Jessup, kuno, srimonti, Erik Abele, Pratik Daga, Slobodan Utvic, Kristina Chodorow, Yonathan Randolph, Brian Noguchi, Sam Epstein, James Harrison Fisher, Vladimir Dronnikov, Ben Hockey, Henrik Johansson, Simon Weare, Alex Gorbatchev, Shimon Doodkin, Kyle Mueller, Eran Hammer-Lahav, Marcin Ciszak, François de Metz, Vinay Pulim, nstielau, Adam Wiggins, entrinzikyl, Jeremy Selier, Ian Millington, Public Keating, andrewjstone, Christopher Stott, Corey Jewett, brettkiefer, Rob Holland, Senmiao Liu, heroic, gitfy\n\nLicense\n=======\n\n Copyright 2009 - 2012 Christian Amor Kvalheim.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n", + "readme": "## MongoDB Node.JS Driver\n \n| what | where |\n|---------------|------------------------------------------------|\n| documentation | http://mongodb.github.io/node-mongodb-native/ |\n| apidoc | http://mongodb.github.io/node-mongodb-native/ |\n| source | https://github.com/mongodb/node-mongodb-native |\n| mongodb | http://www.mongodb.org/ |\n\n### Blogs of Engineers involved in the driver\n- Christian Kvalheim [@christkv](https://twitter.com/christkv) \n- Valeri Karpov [@code_barbarian](https://twitter.com/code_barbarian) \n\n### Bugs / Feature Requests\n\nThink you’ve found a bug? Want to see a new feature in node-mongodb-native? Please open a\ncase in our issue management tool, JIRA:\n\n- Create an account and login .\n- Navigate to the NODE project .\n- Click **Create Issue** - Please provide as much information as possible about the issue type and how to reproduce it.\n\nBug reports in JIRA for all driver projects (i.e. NODE, PYTHON, CSHARP, JAVA) and the\nCore Server (i.e. SERVER) project are **public**.\n\n### Questions and Bug Reports\n\n * mailing list: https://groups.google.com/forum/#!forum/node-mongodb-native\n * jira: http://jira.mongodb.org/\n\n### Change Log\n\nhttp://jira.mongodb.org/browse/NODE\n\n## Install\n\nTo install the most recent release from npm, run:\n\n npm install mongodb\n\nThat may give you a warning telling you that bugs['web'] should be bugs['url'], it would be safe to ignore it (this has been fixed in the development version)\n\nTo install the latest from the repository, run::\n\n npm install path/to/node-mongodb-native\n\n## Live Examples\n\n\n## Introduction\n\nThis is a node.js driver for MongoDB. It's a port (or close to a port) of the library for ruby at http://github.com/mongodb/mongo-ruby-driver/.\n\nA simple example of inserting a document.\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format;\n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n var collection = db.collection('test_insert');\n collection.insert({a:2}, function(err, docs) {\n \n collection.count(function(err, count) {\n console.log(format(\"count = %s\", count));\n });\n\n // Locate all the entries using find\n collection.find().toArray(function(err, results) {\n console.dir(results);\n // Let's close the db\n db.close();\n });\n });\n })\n```\n\n## Data types\n\nTo store and retrieve the non-JSON MongoDb primitives ([ObjectID](http://www.mongodb.org/display/DOCS/Object+IDs), Long, Binary, [Timestamp](http://www.mongodb.org/display/DOCS/Timestamp+data+type), [DBRef](http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef), Code).\n\nIn particular, every document has a unique `_id` which can be almost any type, and by default a 12-byte ObjectID is created. ObjectIDs can be represented as 24-digit hexadecimal strings, but you must convert the string back into an ObjectID before you can use it in the database. For example:\n\n```javascript\n // Get the objectID type\n var ObjectID = require('mongodb').ObjectID;\n\n var idString = '4e4e1638c85e808431000003';\n collection.findOne({_id: new ObjectID(idString)}, console.log) // ok\n collection.findOne({_id: idString}, console.log) // wrong! callback gets undefined\n```\n\nHere are the constructors the non-Javascript BSON primitive types:\n\n```javascript\n // Fetch the library\n var mongo = require('mongodb');\n // Create new instances of BSON types\n new mongo.Long(numberString)\n new mongo.ObjectID(hexString)\n new mongo.Timestamp() // the actual unique number is generated on insert.\n new mongo.DBRef(collectionName, id, dbName)\n new mongo.Binary(buffer) // takes a string or Buffer\n new mongo.Code(code, [context])\n new mongo.Symbol(string)\n new mongo.MinKey()\n new mongo.MaxKey()\n new mongo.Double(number)\t// Force double storage\n```\n\n### The C/C++ bson parser/serializer\n\nIf you are running a version of this library has the C/C++ parser compiled, to enable the driver to use the C/C++ bson parser pass it the option native_parser:true like below\n\n```javascript\n // using native_parser:\n MongoClient.connect('mongodb://127.0.0.1:27017/test'\n , {db: {native_parser: true}}, function(err, db) {})\n```\n\nThe C++ parser uses the js objects both for serialization and deserialization.\n\n## GitHub information\n\nThe source code is available at http://github.com/mongodb/node-mongodb-native.\nYou can either clone the repository or download a tarball of the latest release.\n\nOnce you have the source you can test the driver by running\n\n $ make test\n\nin the main directory. You will need to have a mongo instance running on localhost for the integration tests to pass.\n\n## Examples\n\nFor examples look in the examples/ directory. You can execute the examples using node.\n\n $ cd examples\n $ node queries.js\n\n## GridStore\n\nThe GridStore class allows for storage of binary files in mongoDB using the mongoDB defined files and chunks collection definition.\n\nFor more information have a look at [Gridstore](https://github.com/mongodb/node-mongodb-native/blob/master/docs/gridfs.md)\n\n## Replicasets\n\nFor more information about how to connect to a replicaset have a look at the extensive documentation [Documentation](http://mongodb.github.com/node-mongodb-native/)\n\n### Primary Key Factories\n\nDefining your own primary key factory allows you to generate your own series of id's\n(this could f.ex be to use something like ISBN numbers). The generated the id needs to be a 12 byte long \"string\".\n\nSimple example below\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n // Custom factory (need to provide a 12 byte array);\n CustomPKFactory = function() {}\n CustomPKFactory.prototype = new Object();\n CustomPKFactory.createPk = function() {\n return new ObjectID(\"aaaaaaaaaaaa\");\n }\n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', {'pkFactory':CustomPKFactory}, function(err, db) {\n if(err) throw err;\n\n db.dropDatabase(function(err, done) {\n \n db.createCollection('test_custom_key', function(err, collection) {\n \n collection.insert({'a':1}, function(err, docs) {\n \n collection.find({'_id':new ObjectID(\"aaaaaaaaaaaa\")}).toArray(function(err, items) {\n console.dir(items);\n // Let's close the db\n db.close();\n });\n });\n });\n });\n });\n```\n\n## Documentation\n\nIf this document doesn't answer your questions, see the source of\n[Collection](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/collection.js)\nor [Cursor](https://github.com/mongodb/node-mongodb-native/blob/master/lib/mongodb/cursor.js),\nor the documentation at MongoDB for query and update formats.\n\n### Find\n\nThe find method is actually a factory method to create\nCursor objects. A Cursor lazily uses the connection the first time\nyou call `nextObject`, `each`, or `toArray`.\n\nThe basic operation on a cursor is the `nextObject` method\nthat fetches the next matching document from the database. The convenience\nmethods `each` and `toArray` call `nextObject` until the cursor is exhausted.\n\nSignatures:\n\n```javascript\n var cursor = collection.find(query, [fields], options);\n cursor.sort(fields).limit(n).skip(m).\n\n cursor.nextObject(function(err, doc) {});\n cursor.each(function(err, doc) {});\n cursor.toArray(function(err, docs) {});\n\n cursor.rewind() // reset the cursor to its initial state.\n```\n\nUseful chainable methods of cursor. These can optionally be options of `find` instead of method calls:\n\n * `.limit(n).skip(m)` to control paging.\n * `.sort(fields)` Order by the given fields. There are several equivalent syntaxes:\n * `.sort({field1: -1, field2: 1})` descending by field1, then ascending by field2.\n * `.sort([['field1', 'desc'], ['field2', 'asc']])` same as above\n * `.sort([['field1', 'desc'], 'field2'])` same as above\n * `.sort('field1')` ascending by field1\n\nOther options of `find`:\n\n* `fields` the fields to fetch (to avoid transferring the entire document)\n* `tailable` if true, makes the cursor [tailable](http://www.mongodb.org/display/DOCS/Tailable+Cursors).\n* `batchSize` The number of the subset of results to request the database\nto return for every request. This should initially be greater than 1 otherwise\nthe database will automatically close the cursor. The batch size can be set to 1\nwith `batchSize(n, function(err){})` after performing the initial query to the database.\n* `hint` See [Optimization: hint](http://www.mongodb.org/display/DOCS/Optimization#Optimization-Hint).\n* `explain` turns this into an explain query. You can also call\n`explain()` on any cursor to fetch the explanation.\n* `snapshot` prevents documents that are updated while the query is active\nfrom being returned multiple times. See more\n[details about query snapshots](http://www.mongodb.org/display/DOCS/How+to+do+Snapshotted+Queries+in+the+Mongo+Database).\n* `timeout` if false, asks MongoDb not to time out this cursor after an\ninactivity period.\n\nFor information on how to create queries, see the\n[MongoDB section on querying](http://www.mongodb.org/display/DOCS/Querying).\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n var collection = db\n .collection('test')\n .find({})\n .limit(10)\n .toArray(function(err, docs) {\n console.dir(docs);\n });\n });\n```\n\n### Insert\n\nSignature:\n\n```javascript\n collection.insert(docs, options, [callback]);\n```\n\nwhere `docs` can be a single document or an array of documents.\n\nUseful options:\n\n* `w:1` Should always set if you have a callback.\n\nSee also: [MongoDB docs for insert](http://www.mongodb.org/display/DOCS/Inserting).\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n \n db.collection('test').insert({hello: 'world'}, {w:1}, function(err, objects) {\n if (err) console.warn(err.message);\n if (err && err.message.indexOf('E11000 ') !== -1) {\n // this _id was already inserted in the database\n }\n });\n });\n```\n\nNote that there's no reason to pass a callback to the insert or update commands\nunless you use the `w:1` option. If you don't specify `w:1`, then\nyour callback will be called immediately.\n\n### Update: update and insert (upsert)\n\nThe update operation will update the first document that matches your query\n(or all documents that match if you use `multi:true`).\nIf `w:1`, `upsert` is not set, and no documents match, your callback will return 0 documents updated.\n\nSee the [MongoDB docs](http://www.mongodb.org/display/DOCS/Updating) for\nthe modifier (`$inc`, `$set`, `$push`, etc.) formats.\n\nSignature:\n\n```javascript\n collection.update(criteria, objNew, options, [callback]);\n```\n\nUseful options:\n\n* `w:1` Should always set if you have a callback.\n* `multi:true` If set, all matching documents are updated, not just the first.\n* `upsert:true` Atomically inserts the document if no documents matched.\n\nExample for `update`:\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n\n db.collection('test').update({hi: 'here'}, {$set: {hi: 'there'}}, {w:1}, function(err) {\n if (err) console.warn(err.message);\n else console.log('successfully updated');\n });\n });\n```\n\n### Find and modify\n\n`findAndModify` is like `update`, but it also gives the updated document to\nyour callback. But there are a few key differences between findAndModify and\nupdate:\n\n 1. The signatures differ.\n 2. You can only findAndModify a single item, not multiple items.\n\nSignature:\n\n```javascript\n collection.findAndModify(query, sort, update, options, callback)\n```\n\nThe sort parameter is used to specify which object to operate on, if more than\none document matches. It takes the same format as the cursor sort (see\nConnection.find above).\n\nSee the\n[MongoDB docs for findAndModify](http://www.mongodb.org/display/DOCS/findAndModify+Command)\nfor more details.\n\nUseful options:\n\n* `remove:true` set to a true to remove the object before returning\n* `new:true` set to true if you want to return the modified object rather than the original. Ignored for remove.\n* `upsert:true` Atomically inserts the document if no documents matched.\n\nExample for `findAndModify`:\n\n```javascript\n var MongoClient = require('mongodb').MongoClient\n , format = require('util').format; \n\n MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {\n if(err) throw err;\n db.collection('test').findAndModify({hello: 'world'}, [['_id','asc']], {$set: {hi: 'there'}}, {}, function(err, object) {\n if (err) console.warn(err.message);\n else console.dir(object); // undefined if no matching object exists.\n });\n });\n```\n\n### Save\n\nThe `save` method is a shorthand for upsert if the document contains an\n`_id`, or an insert if there is no `_id`.\n\n## Release Notes\n\nSee HISTORY\n\n## Credits\n\n1. [10gen](http://github.com/mongodb/mongo-ruby-driver/)\n2. [Google Closure Library](http://code.google.com/closure/library/)\n3. [Jonas Raoni Soares Silva](http://jsfromhell.com/classes/binary-parser)\n\n## Contributors\n\nAaron Heckmann, Christoph Pojer, Pau Ramon Revilla, Nathan White, Emmerman, Seth LaForge, Boris Filipov, Stefan Schärmeli, Tedde Lundgren, renctan, Sergey Ukustov, Ciaran Jessup, kuno, srimonti, Erik Abele, Pratik Daga, Slobodan Utvic, Kristina Chodorow, Yonathan Randolph, Brian Noguchi, Sam Epstein, James Harrison Fisher, Vladimir Dronnikov, Ben Hockey, Henrik Johansson, Simon Weare, Alex Gorbatchev, Shimon Doodkin, Kyle Mueller, Eran Hammer-Lahav, Marcin Ciszak, François de Metz, Vinay Pulim, nstielau, Adam Wiggins, entrinzikyl, Jeremy Selier, Ian Millington, Public Keating, andrewjstone, Christopher Stott, Corey Jewett, brettkiefer, Rob Holland, Senmiao Liu, heroic, gitfy\n\n## License\n\n Copyright 2009 - 2013 MongoDb Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n", "readmeFilename": "Readme.md", - "_id": "mongodb@1.3.5", - "_from": "mongodb@1.3.5" + "_id": "mongodb@1.4.12", + "dist": { + "shasum": "d1c936e9a85d8bb26b498ca061cb8e78f27b44c7" + }, + "_from": "mongodb@1.4.12", + "_resolved": "https://registry.npmjs.org/mongodb/-/mongodb-1.4.12.tgz" } diff --git a/node_modules/mongoose/node_modules/mpromise/.npmignore b/node_modules/mongoose/node_modules/mpromise/.npmignore index be106ca..186bb73 100644 --- a/node_modules/mongoose/node_modules/mpromise/.npmignore +++ b/node_modules/mongoose/node_modules/mpromise/.npmignore @@ -1,2 +1,3 @@ *.sw* node_modules/ +.DS_Store diff --git a/node_modules/mongoose/node_modules/mpromise/.travis.yml b/node_modules/mongoose/node_modules/mpromise/.travis.yml index 09c230f..d63ba09 100644 --- a/node_modules/mongoose/node_modules/mpromise/.travis.yml +++ b/node_modules/mongoose/node_modules/mpromise/.travis.yml @@ -1,4 +1,5 @@ language: node_js node_js: - - 0.6 - - 0.8 + - 0.8 + - 0.10 + - 0.11 diff --git a/node_modules/mongoose/node_modules/mpromise/History.md b/node_modules/mongoose/node_modules/mpromise/History.md index f157b69..1fb1408 100644 --- a/node_modules/mongoose/node_modules/mpromise/History.md +++ b/node_modules/mongoose/node_modules/mpromise/History.md @@ -1,4 +1,39 @@ +0.4.3 / 2013-12-17 +================== + + * fixed; non-A+ behavior on fulfill and reject [lbeschastny](https://github.com/lbeschastny) + * tests; simplified harness + compatible with travis + compatible with windows + +0.4.2 / 2013-11-26 +================== + + * fixed; enter the domain only if not the present domain + * added; `end` returns the promise + +0.4.1 / 2013-10-26 +================== + + * Add `all` + * Longjohn for easier debugging + * can end a promise chain with an error handler + * Add ```chain``` + +0.4.0 / 2013-10-24 +================== + + * fixed; now plays nice with domains #3 [refack](https://github.com/refack) + * updated; compatibility for Promises A+ 2.0.0 [refack](https://github.com/refack) + * updated; guard against invalid arguments [refack](https://github.com/refack) + +0.3.0 / 2013-07-25 +================== + + * updated; sliced to 0.0.5 + * fixed; then is passed all fulfillment values + * use setImmediate if available + * conform to Promises A+ 1.1 + 0.2.1 / 2013-02-09 ================== diff --git a/node_modules/mongoose/node_modules/mpromise/Makefile b/node_modules/mongoose/node_modules/mpromise/Makefile deleted file mode 100644 index 717a796..0000000 --- a/node_modules/mongoose/node_modules/mpromise/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -TESTS = $(shell find test/ -name '*.test.js') - -test: - @make test-unit && echo "testing promises-A+ implementation ..." && make test-promises-A - -test-unit: - @./node_modules/.bin/mocha $(T) --async-only $(TESTS) - -test-promises-A: - @node test/promises-A.js - -.PHONY: test test-unit test-promises-A diff --git a/node_modules/mongoose/node_modules/mpromise/README.md b/node_modules/mongoose/node_modules/mpromise/README.md index 7da2725..2906f56 100644 --- a/node_modules/mongoose/node_modules/mpromise/README.md +++ b/node_modules/mongoose/node_modules/mpromise/README.md @@ -1,6 +1,8 @@ #mpromise ========== +[![Build Status](https://travis-ci.org/aheckmann/mpromise.png)](https://travis-ci.org/aheckmann/mpromise) + A [promises/A+](https://github.com/promises-aplus/promises-spec) conformant implementation, written for [mongoose](http://mongoosejs.com). ## installation @@ -158,12 +160,14 @@ p.then(function (arg) { assert.ok(err instanceof Error); assert.equal('2 is an error', err.message); }); -p.complete(1); +p.fullfill(1); ``` ####end -Signifies that this promise was the last in a chain of `then()s`: if a handler passed to the call to `then` which produced this promise throws, the exception will go uncaught. +Signifies that this promise was the last in a chain of `then()s`: if a handler passed to the call to `then` which produced this promise throws, the exception be rethrown. +You can pass an OnReject handler to `end` so that exceptions will be handled (like a final catch clause); +This method returns it's promise for easy use with `return`. ```js var p = new Promise; @@ -177,10 +181,30 @@ setTimeout(function () { // this time we use .end() which prevents catching thrown errors var p = new Promise; -var p2 = p.then(function(){ throw new Error('shucks') }).end(); // <-- setTimeout(function () { p.fulfill(); // throws "shucks" }, 10); +return p.then(function(){ throw new Error('shucks') }).end(); // <-- +``` + + +### chain + +Allows direct promise to promise chaining (especially useful by a outside aggregating function). It doesn't use the asynchronous `resolve` algorithm and so excepts only another Promise as it's argument. + +```js +function makeMeAPromise(i) { + var p = new Promise; + p.fulfill(i); + return p; +} + +var returnPromise = initialPromise = new Promise; +for (i=0; i<10; ++i) + returnPromise = returnPromise.chain(makeMeAPromise(i)); + +initialPromise.fulfill(); +return returnPromise; ``` ###Event names diff --git a/node_modules/mongoose/node_modules/mpromise/lib/promise.js b/node_modules/mongoose/node_modules/mpromise/lib/promise.js index be992c3..ca4e567 100644 --- a/node_modules/mongoose/node_modules/mpromise/lib/promise.js +++ b/node_modules/mongoose/node_modules/mpromise/lib/promise.js @@ -1,9 +1,12 @@ +'use strict'; /*! * Module dependencies. */ -var slice = require('sliced'); +var slice = function (arr, start, end) { + return Array.prototype.slice.call(arr, start, end) +}; var EventEmitter = require('events').EventEmitter; /** @@ -18,7 +21,9 @@ var EventEmitter = require('events').EventEmitter; * @api public */ -function Promise (back) { +function Promise(back) { + EventEmitter.call(this); + this.emitted = {}; this.ended = false; if ('function' == typeof back) @@ -128,9 +133,14 @@ Promise.prototype.resolve = function (err, val) { */ Promise.prototype.onFulfill = function (fn) { + if (!fn) return this; + if ('function' != typeof fn) throw new TypeError("fn should be a function"); return this.on(this.constructor.SUCCESS, fn); } +Promise.prototype.hasRejectListeners = function () { + return this.listeners(this.constructor.FAILURE).length > 0; +}; /** * Adds a listener to the FAILURE event. * @@ -139,6 +149,8 @@ Promise.prototype.onFulfill = function (fn) { */ Promise.prototype.onReject = function (fn) { + if (!fn) return this; + if ('function' != typeof fn) throw new TypeError("fn should be a function"); return this.on(this.constructor.FAILURE, fn); } @@ -153,11 +165,14 @@ Promise.prototype.onReject = function (fn) { */ Promise.prototype.onResolve = function (fn) { - this.on(this.constructor.FAILURE, function(err){ - fn.call(this, err); + if (!fn) return this; + if ('function' != typeof fn) throw new TypeError("fn should be a function"); + + this.on(this.constructor.FAILURE, function (err) { + fn.apply(this, [err]); }); - this.on(this.constructor.SUCCESS, function(){ + this.on(this.constructor.SUCCESS, function () { var args = slice(arguments); fn.apply(this, [null].concat(args)); }); @@ -168,7 +183,7 @@ Promise.prototype.onResolve = function (fn) { /** * Creates a new promise and returns it. If `onFulfill` or * `onReject` are passed, they are added as SUCCESS/ERROR callbacks - * to this promise after the nextTick. + * to this promise after the next tick. * * Conforms to [promises/A+](https://github.com/promises-aplus/promises-spec) specification. Read for more detail how to use this method. * @@ -187,7 +202,7 @@ Promise.prototype.onResolve = function (fn) { * * @see promises-A+ https://github.com/promises-aplus/promises-spec * @param {Function} onFulFill - * @param {Function} onReject + * @param {Function} [onReject] * @return {Promise} newPromise */ @@ -195,42 +210,97 @@ Promise.prototype.then = function (onFulfill, onReject) { var self = this , retPromise = new Promise; - function handler (fn) { - return function handle (arg) { - var val; + if ('function' == typeof onReject) { + self.onReject(handler(retPromise, onReject)); + } else { + self.onReject(retPromise.reject.bind(retPromise)); + } + if ('function' == typeof onFulfill) { + self.onFulfill(handler(retPromise, onFulfill)); + } else { + self.onFulfill(retPromise.fulfill.bind(retPromise)); + } + + return retPromise; +}; + + +function handler(retPromise, fn) { + return function handler() { + var args = arguments; + process.nextTick( + function in_the_handler() { + if (retPromise.domain && retPromise.domain !== process.domain) retPromise.domain.enter(); + var x; + + try { + x = fn.apply(undefined, args); + } catch (err) { + if (retPromise.ended && !retPromise.hasRejectListeners()) throw err; + return retPromise.reject(err); + } + + resolve(retPromise, x); + return; + } + ); + } +} + +function resolve(promise, x) { + var then; + var type; + var done; + var reject_; + var resolve_; + + type = typeof x; + if ('undefined' == type) { + return promise.fulfill(x); + } + + if (promise === x) { + return promise.reject(new TypeError("promise and x are the same")); + } + + if (null != x) { + if ('object' == type || 'function' == type) { try { - val = fn(arg); + then = x.then; } catch (err) { - if (retPromise.ended) throw err; - return retPromise.reject(err); + if (promise.ended && !promise.hasRejectListeners()) throw err; + return promise.reject(err); } - if (val && 'function' == typeof val.then) { - val.then( - retPromise.fulfill.bind(retPromise) - , retPromise.reject.bind(retPromise)) - } else { - retPromise.fulfill(val); + if ('function' == typeof then) { + try { + resolve_ = function () {var args = slice(arguments); resolve.apply(this, [promise].concat(args));}; + reject_ = promise.reject.bind(promise); + done = false; + return then.call( + x + , function fulfill() { + if (done) return; + done = true; + return resolve_.apply(this, arguments); + } + , function reject() { + if (done) return; + done = true; + return reject_.apply(this, arguments); + }) + } catch (err) { + if (done) return; + done = true; + if (promise.ended) throw err; + return promise.reject(err); + } } } } - process.nextTick(function () { - if ('function' == typeof onReject) { - self.onReject(handler(onReject)); - } else { - self.onReject(retPromise.reject.bind(retPromise)); - } - - if ('function' == typeof onFulfill) { - self.onFulfill(handler(onFulfill)); - } else { - self.onFulfill(retPromise.fulfill.bind(retPromise)); - } - }) - - return retPromise; + promise.fulfill(x); } /** @@ -255,14 +325,14 @@ Promise.prototype.then = function (onFulfill, onReject) { * }, 10); * * @api public + * @param {Function} [onReject] + * @return {Promise} this */ -Promise.prototype.end = function () { +Promise.prototype.end = function (onReject) { + this.onReject(onReject); this.ended = true; -} - -/*! - * Module exports. - */ + return this; +}; module.exports = Promise; diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/.npmignore b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/.npmignore deleted file mode 100644 index be106ca..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -*.sw* -node_modules/ diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/.travis.yml b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/History.md b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/History.md deleted file mode 100644 index 8132c95..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/History.md +++ /dev/null @@ -1,23 +0,0 @@ - -0.0.4 / 2013-01-07 -================== - - * added component.json #1 [jkroso](https://github.com/jkroso) - * reversed array loop #1 [jkroso](https://github.com/jkroso) - * remove fn params - -0.0.3 / 2012-09-29 -================== - - * faster with negative start args - -0.0.2 / 2012-09-29 -================== - - * support full [].slice semantics - -0.0.1 / 2012-09-29 -=================== - - * initial release - diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/LICENSE b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/LICENSE deleted file mode 100644 index 38c529d..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2012 [Aaron Heckmann](aaron.heckmann+github@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/Makefile b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/Makefile deleted file mode 100644 index 3dd8a2d..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/Makefile +++ /dev/null @@ -1,5 +0,0 @@ - -test: - @time ./node_modules/.bin/mocha $(T) $(TESTS) - -.PHONY: test diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/README.md b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/README.md deleted file mode 100644 index 6605c39..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/README.md +++ /dev/null @@ -1,62 +0,0 @@ -#sliced -========== - -A faster alternative to `[].slice.call(arguments)`. - -[![Build Status](https://secure.travis-ci.org/aheckmann/sliced.png)](http://travis-ci.org/aheckmann/sliced) - -Example output from [benchmark.js](https://github.com/bestiejs/benchmark.js) - - Array.prototype.slice.call x 1,320,205 ops/sec ±2.35% (92 runs sampled) - [].slice.call x 1,314,605 ops/sec ±1.60% (95 runs sampled) - cached slice.call x 10,468,380 ops/sec ±1.45% (95 runs sampled) - sliced x 16,608,237 ops/sec ±1.40% (92 runs sampled) - fastest is sliced - - Array.prototype.slice.call(arguments, 1) x 1,383,584 ops/sec ±1.73% (97 runs sampled) - [].slice.call(arguments, 1) x 1,494,735 ops/sec ±1.33% (95 runs sampled) - cached slice.call(arguments, 1) x 10,085,270 ops/sec ±1.51% (97 runs sampled) - sliced(arguments, 1) x 16,620,480 ops/sec ±1.29% (95 runs sampled) - fastest is sliced(arguments, 1) - - Array.prototype.slice.call(arguments, -1) x 1,303,262 ops/sec ±1.62% (94 runs sampled) - [].slice.call(arguments, -1) x 1,325,615 ops/sec ±1.36% (97 runs sampled) - cached slice.call(arguments, -1) x 9,673,603 ops/sec ±1.70% (96 runs sampled) - sliced(arguments, -1) x 16,384,575 ops/sec ±1.06% (91 runs sampled) - fastest is sliced(arguments, -1) - - Array.prototype.slice.call(arguments, -2, -10) x 1,404,390 ops/sec ±1.61% (95 runs sampled) - [].slice.call(arguments, -2, -10) x 1,514,367 ops/sec ±1.21% (96 runs sampled) - cached slice.call(arguments, -2, -10) x 9,836,017 ops/sec ±1.21% (95 runs sampled) - sliced(arguments, -2, -10) x 18,544,882 ops/sec ±1.30% (91 runs sampled) - fastest is sliced(arguments, -2, -10) - - Array.prototype.slice.call(arguments, -2, -1) x 1,458,604 ops/sec ±1.41% (97 runs sampled) - [].slice.call(arguments, -2, -1) x 1,536,547 ops/sec ±1.63% (99 runs sampled) - cached slice.call(arguments, -2, -1) x 10,060,633 ops/sec ±1.37% (96 runs sampled) - sliced(arguments, -2, -1) x 18,608,712 ops/sec ±1.08% (93 runs sampled) - fastest is sliced(arguments, -2, -1) - -_Benchmark [source](https://github.com/aheckmann/sliced/blob/master/bench.js)._ - -##Usage - -`sliced` accepts the same arguments as `Array#slice` so you can easily swap it out. - -```js -function zing () { - var slow = [].slice.call(arguments, 1, 8); - var args = slice(arguments, 1, 8); - - var slow = Array.prototype.slice.call(arguments); - var args = slice(arguments); - // etc -} -``` - -## install - - npm install sliced - - -[LICENSE](https://github.com/aheckmann/sliced/blob/master/LICENSE) diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/bench.js b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/bench.js deleted file mode 100644 index f201d16..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/bench.js +++ /dev/null @@ -1,95 +0,0 @@ - -var sliced = require('./') -var Bench = require('benchmark'); -var s = new Bench.Suite; -var slice = [].slice; - -s.add('Array.prototype.slice.call', function () { - Array.prototype.slice.call(arguments); -}).add('[].slice.call', function () { - [].slice.call(arguments); -}).add('cached slice.call', function () { - slice.call(arguments) -}).add('sliced', function () { - sliced(arguments) -}).on('cycle', function (evt) { - console.log(String(evt.target)); -}).on('complete', function () { - console.log('fastest is %s', this.filter('fastest').pluck('name')); -}) -.run(); - -var s = new Bench.Suite; -s.add('Array.prototype.slice.call(arguments, 1)', function () { - Array.prototype.slice.call(arguments, 1); -}).add('[].slice.call(arguments, 1)', function () { - [].slice.call(arguments, 1); -}).add('cached slice.call(arguments, 1)', function () { - slice.call(arguments, 1) -}).add('sliced(arguments, 1)', function () { - sliced(arguments, 1) -}).on('cycle', function (evt) { - console.log(String(evt.target)); -}).on('complete', function () { - console.log('fastest is %s', this.filter('fastest').pluck('name')); -}) -.run(); - -var s = new Bench.Suite; -s.add('Array.prototype.slice.call(arguments, -1)', function () { - Array.prototype.slice.call(arguments, -1); -}).add('[].slice.call(arguments, -1)', function () { - [].slice.call(arguments, -1); -}).add('cached slice.call(arguments, -1)', function () { - slice.call(arguments, -1) -}).add('sliced(arguments, -1)', function () { - sliced(arguments, -1) -}).on('cycle', function (evt) { - console.log(String(evt.target)); -}).on('complete', function () { - console.log('fastest is %s', this.filter('fastest').pluck('name')); -}) -.run(); - -var s = new Bench.Suite; -s.add('Array.prototype.slice.call(arguments, -2, -10)', function () { - Array.prototype.slice.call(arguments, -2, -10); -}).add('[].slice.call(arguments, -2, -10)', function () { - [].slice.call(arguments, -2, -10); -}).add('cached slice.call(arguments, -2, -10)', function () { - slice.call(arguments, -2, -10) -}).add('sliced(arguments, -2, -10)', function () { - sliced(arguments, -2, -10) -}).on('cycle', function (evt) { - console.log(String(evt.target)); -}).on('complete', function () { - console.log('fastest is %s', this.filter('fastest').pluck('name')); -}) -.run(); - -var s = new Bench.Suite; -s.add('Array.prototype.slice.call(arguments, -2, -1)', function () { - Array.prototype.slice.call(arguments, -2, -1); -}).add('[].slice.call(arguments, -2, -1)', function () { - [].slice.call(arguments, -2, -1); -}).add('cached slice.call(arguments, -2, -1)', function () { - slice.call(arguments, -2, -1) -}).add('sliced(arguments, -2, -1)', function () { - sliced(arguments, -2, -1) -}).on('cycle', function (evt) { - console.log(String(evt.target)); -}).on('complete', function () { - console.log('fastest is %s', this.filter('fastest').pluck('name')); -}) -.run(); - -/** - * Output: - * - * Array.prototype.slice.call x 1,289,592 ops/sec ±2.88% (87 runs sampled) - * [].slice.call x 1,345,451 ops/sec ±1.68% (97 runs sampled) - * cached slice.call x 10,719,886 ops/sec ±1.04% (99 runs sampled) - * sliced x 15,809,545 ops/sec ±1.46% (93 runs sampled) - * fastest is sliced - * - */ diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/component.json b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/component.json deleted file mode 100644 index a7ac7f2..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/component.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "sliced", - "version": "0.0.3", - "description": "A faster Node.js alternative to Array.prototype.slice.call(arguments)", - "repo" : "aheckmann/sliced", - "keywords": [ - "arguments", - "slice", - "array" - ], - "author": "Aaron Heckmann ", - "license": "MIT" -} diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/index.js b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/index.js deleted file mode 100644 index 3b90ae7..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = exports = require('./lib/sliced'); diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/lib/sliced.js b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/lib/sliced.js deleted file mode 100644 index d8c15bc..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/lib/sliced.js +++ /dev/null @@ -1,37 +0,0 @@ - -/** - * An Array.prototype.slice.call(arguments) alternative - * - * @param {Object} args something with a length - * @param {Number} slice - * @param {Number} sliceEnd - * @api public - */ - -module.exports = function () { - var args = arguments[0]; - var slice = arguments[1]; - var sliceEnd = arguments[2]; - - var ret = []; - var len = args.length; - - if (0 === len) return ret; - - var start = slice < 0 - ? Math.max(0, slice + len) - : slice || 0; - - var end = 3 === arguments.length - ? sliceEnd < 0 - ? sliceEnd + len - : sliceEnd - : len; - - while (end-- > start) { - ret[end - start] = args[end]; - } - - return ret; -} - diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/package.json b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/package.json deleted file mode 100644 index a76ed22..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "sliced", - "version": "0.0.4", - "description": "A faster Node.js alternative to Array.prototype.slice.call(arguments)", - "main": "index.js", - "scripts": { - "test": "make test" - }, - "repository": { - "type": "git", - "url": "git://github.com/aheckmann/sliced" - }, - "keywords": [ - "arguments", - "slice", - "array" - ], - "author": { - "name": "Aaron Heckmann", - "email": "aaron.heckmann+github@gmail.com" - }, - "license": "MIT", - "devDependencies": { - "mocha": "1.5.0", - "benchmark": "~1.0.0" - }, - "readme": "#sliced\n==========\n\nA faster alternative to `[].slice.call(arguments)`.\n\n[![Build Status](https://secure.travis-ci.org/aheckmann/sliced.png)](http://travis-ci.org/aheckmann/sliced)\n\nExample output from [benchmark.js](https://github.com/bestiejs/benchmark.js)\n\n Array.prototype.slice.call x 1,320,205 ops/sec ±2.35% (92 runs sampled)\n [].slice.call x 1,314,605 ops/sec ±1.60% (95 runs sampled)\n cached slice.call x 10,468,380 ops/sec ±1.45% (95 runs sampled)\n sliced x 16,608,237 ops/sec ±1.40% (92 runs sampled)\n fastest is sliced\n\n Array.prototype.slice.call(arguments, 1) x 1,383,584 ops/sec ±1.73% (97 runs sampled)\n [].slice.call(arguments, 1) x 1,494,735 ops/sec ±1.33% (95 runs sampled)\n cached slice.call(arguments, 1) x 10,085,270 ops/sec ±1.51% (97 runs sampled)\n sliced(arguments, 1) x 16,620,480 ops/sec ±1.29% (95 runs sampled)\n fastest is sliced(arguments, 1)\n\n Array.prototype.slice.call(arguments, -1) x 1,303,262 ops/sec ±1.62% (94 runs sampled)\n [].slice.call(arguments, -1) x 1,325,615 ops/sec ±1.36% (97 runs sampled)\n cached slice.call(arguments, -1) x 9,673,603 ops/sec ±1.70% (96 runs sampled)\n sliced(arguments, -1) x 16,384,575 ops/sec ±1.06% (91 runs sampled)\n fastest is sliced(arguments, -1)\n\n Array.prototype.slice.call(arguments, -2, -10) x 1,404,390 ops/sec ±1.61% (95 runs sampled)\n [].slice.call(arguments, -2, -10) x 1,514,367 ops/sec ±1.21% (96 runs sampled)\n cached slice.call(arguments, -2, -10) x 9,836,017 ops/sec ±1.21% (95 runs sampled)\n sliced(arguments, -2, -10) x 18,544,882 ops/sec ±1.30% (91 runs sampled)\n fastest is sliced(arguments, -2, -10)\n\n Array.prototype.slice.call(arguments, -2, -1) x 1,458,604 ops/sec ±1.41% (97 runs sampled)\n [].slice.call(arguments, -2, -1) x 1,536,547 ops/sec ±1.63% (99 runs sampled)\n cached slice.call(arguments, -2, -1) x 10,060,633 ops/sec ±1.37% (96 runs sampled)\n sliced(arguments, -2, -1) x 18,608,712 ops/sec ±1.08% (93 runs sampled)\n fastest is sliced(arguments, -2, -1)\n\n_Benchmark [source](https://github.com/aheckmann/sliced/blob/master/bench.js)._\n\n##Usage\n\n`sliced` accepts the same arguments as `Array#slice` so you can easily swap it out.\n\n```js\nfunction zing () {\n var slow = [].slice.call(arguments, 1, 8);\n var args = slice(arguments, 1, 8);\n\n var slow = Array.prototype.slice.call(arguments);\n var args = slice(arguments);\n // etc\n}\n```\n\n## install\n\n npm install sliced\n\n\n[LICENSE](https://github.com/aheckmann/sliced/blob/master/LICENSE)\n", - "readmeFilename": "README.md", - "bugs": { - "url": "https://github.com/aheckmann/sliced/issues" - }, - "_id": "sliced@0.0.4", - "_from": "sliced@0.0.4" -} diff --git a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/test/index.js b/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/test/index.js deleted file mode 100644 index 33d36a1..0000000 --- a/node_modules/mongoose/node_modules/mpromise/node_modules/sliced/test/index.js +++ /dev/null @@ -1,80 +0,0 @@ - -var sliced = require('../') -var assert = require('assert') - -describe('sliced', function(){ - it('exports a function', function(){ - assert.equal('function', typeof sliced); - }) - describe('with 1 arg', function(){ - it('returns an array of the arg', function(){ - var o = [3, "4", {}]; - var r = sliced(o); - assert.equal(3, r.length); - assert.equal(o[0], r[0]); - assert.equal(o[1], r[1]); - assert.equal(o[1], r[1]); - }) - }) - describe('with 2 args', function(){ - it('returns an array of the arg starting at the 2nd arg', function(){ - var o = [3, "4", 5, null]; - var r = sliced(o, 2); - assert.equal(2, r.length); - assert.equal(o[2], r[0]); - assert.equal(o[3], r[1]); - }) - }) - describe('with 3 args', function(){ - it('returns an array of the arg from the 2nd to the 3rd arg', function(){ - var o = [3, "4", 5, null]; - var r = sliced(o, 1, 2); - assert.equal(1, r.length); - assert.equal(o[1], r[0]); - }) - }) - describe('with negative start and no end', function(){ - it('begins at an offset from the end and includes all following elements', function(){ - var o = [3, "4", 5, null]; - var r = sliced(o, -2); - assert.equal(2, r.length); - assert.equal(o[2], r[0]); - assert.equal(o[3], r[1]); - - var r = sliced(o, -12); - assert.equal(4, r.length); - assert.equal(o[0], r[0]); - assert.equal(o[1], r[1]); - }) - }) - describe('with negative start and positive end', function(){ - it('begins at an offset from the end and includes `end` elements', function(){ - var o = [3, "4", {x:1}, null]; - - var r = sliced(o, -2, 1); - assert.equal(0, r.length); - - var r = sliced(o, -2, 2); - assert.equal(0, r.length); - - var r = sliced(o, -2, 3); - assert.equal(1, r.length); - assert.equal(o[2], r[0]); - }) - }) - describe('with negative start and negative end', function(){ - it('begins at `start` offset from the end and includes all elements up to `end` offset from the end', function(){ - var o = [3, "4", {x:1}, null]; - var r = sliced(o, -3, -1); - assert.equal(2, r.length); - assert.equal(o[1], r[0]); - assert.equal(o[2], r[1]); - - var r = sliced(o, -3, -3); - assert.equal(0, r.length); - - var r = sliced(o, -3, -4); - assert.equal(0, r.length); - }) - }) -}) diff --git a/node_modules/mongoose/node_modules/mpromise/package.json b/node_modules/mongoose/node_modules/mpromise/package.json index d923fb3..28aba05 100644 --- a/node_modules/mongoose/node_modules/mpromise/package.json +++ b/node_modules/mongoose/node_modules/mpromise/package.json @@ -1,17 +1,15 @@ { "name": "mpromise", - "version": "0.2.1", + "version": "0.4.3", "description": "Promises A+ conformant implementation", "main": "index.js", "scripts": { - "test": "make test" - }, - "dependencies": { - "sliced": "0.0.4" + "test": "node node_modules/mocha/bin/_mocha" }, "devDependencies": { - "mocha": "1.7.4", - "promises-aplus-tests": ">= 1.2" + "longjohn": "~0.2.1", + "promises-aplus-tests": "~2.0.2", + "mocha": "~1.13.0" }, "repository": { "type": "git", @@ -29,11 +27,11 @@ "email": "aaron.heckmann+github@gmail.com" }, "license": "MIT", - "readme": "#mpromise\n==========\n\nA [promises/A+](https://github.com/promises-aplus/promises-spec) conformant implementation, written for [mongoose](http://mongoosejs.com).\n\n## installation\n\n```\n$ npm install mpromise\n```\n\n## docs\n\nAn `mpromise` can be in any of three states, pending, fulfilled (success), or rejected (error). Once it is either fulfilled or rejected it's state can no longer be changed.\n\nThe exports object is the Promise constructor.\n\n```js\nvar Promise = require('mpromise');\n```\n\nThe constructor accepts an optional function which is executed when the promise is first resolved (either fulfilled or rejected).\n\n```js\nvar promise = new Promise(fn);\n```\n\nThis is the same as passing the `fn` to `onResolve` directly.\n\n```js\nvar promise = new Promise;\npromise.onResolve(function (err, args..) {\n ...\n});\n```\n\n### Methods\n\n####fulfill\n\nFulfilling a promise with values:\n\n```js\nvar promise = new Promise;\npromise.fulfill(args...);\n```\n\nIf the promise has already been fulfilled or rejected, no action is taken.\n\n####reject\n\nRejecting a promise with a reason:\n\n```js\nvar promise = new Promise;\npromise.reject(reason);\n```\n\nIf the promise has already been fulfilled or rejected, no action is taken.\n\n####resolve\n\nNode.js callback style promise resolution `(err, args...)`:\n\n```js\nvar promise = new Promise;\npromise.resolve([reason], [arg1, arg2, ...]);\n```\n\nIf the promise has already been fulfilled or rejected, no action is taken.\n\n####onFulfill\n\nTo register a function for execution when the promise is fulfilled, pass it to `onFulfill`. When executed it will receive the arguments passed to `fulfill()`.\n\n```js\nvar promise = new Promise;\npromise.onFulfill(function (a, b) {\n assert.equal(3, a + b);\n});\npromise.fulfill(1, 2);\n```\n\nThe function will only be called once when the promise is fulfilled, never when rejected.\n\nRegistering a function with `onFulfill` after the promise has already been fulfilled results in the immediate execution of the function with the original arguments used to fulfill the promise.\n\n```js\nvar promise = new Promise;\npromise.fulfill(\" :D \");\npromise.onFulfill(function (arg) {\n console.log(arg); // logs \" :D \"\n})\n```\n\n####onReject\n\nTo register a function for execution when the promise is rejected, pass it to `onReject`. When executed it will receive the argument passed to `reject()`.\n\n```js\nvar promise = new Promise;\npromise.onReject(function (reason) {\n assert.equal('sad', reason);\n});\npromise.reject('sad');\n```\n\nThe function will only be called once when the promise is rejected, never when fulfilled.\n\nRegistering a function with `onReject` after the promise has already been rejected results in the immediate execution of the function with the original argument used to reject the promise.\n\n```js\nvar promise = new Promise;\npromise.reject(\" :( \");\npromise.onReject(function (reason) {\n console.log(reason); // logs \" :( \"\n})\n```\n\n####onResolve\n\nAllows registration of node.js style callbacks `(err, args..)` to handle either promise resolution type (fulfill or reject).\n\n```js\n// fulfillment\nvar promise = new Promise;\npromise.onResolve(function (err, a, b) {\n console.log(a + b); // logs 3\n});\npromise.fulfill(1, 2);\n\n// rejection\nvar promise = new Promise;\npromise.onResolve(function (err) {\n if (err) {\n console.log(err.message); // logs \"failed\"\n }\n});\npromise.reject(new Error('failed'));\n```\n\n####then\n\nCreates a new promise and returns it. If `onFulfill` or `onReject` are passed, they are added as SUCCESS/ERROR callbacks to this promise after the nextTick.\n\nConforms to [promises/A+](https://github.com/promises-aplus/promises-spec) specification and passes its [tests](https://github.com/promises-aplus/promises-tests).\n\n```js\n// promise.then(onFulfill, onReject);\n\nvar p = new Promise;\n\np.then(function (arg) {\n return arg + 1;\n}).then(function (arg) {\n throw new Error(arg + ' is an error!');\n}).then(null, function (err) {\n assert.ok(err instanceof Error);\n assert.equal('2 is an error', err.message);\n});\np.complete(1);\n```\n\n####end\n\nSignifies that this promise was the last in a chain of `then()s`: if a handler passed to the call to `then` which produced this promise throws, the exception will go uncaught.\n\n```js\nvar p = new Promise;\np.then(function(){ throw new Error('shucks') });\nsetTimeout(function () {\n p.fulfill();\n // error was caught and swallowed by the promise returned from\n // p.then(). we either have to always register handlers on\n // the returned promises or we can do the following...\n}, 10);\n\n// this time we use .end() which prevents catching thrown errors\nvar p = new Promise;\nvar p2 = p.then(function(){ throw new Error('shucks') }).end(); // <--\nsetTimeout(function () {\n p.fulfill(); // throws \"shucks\"\n}, 10);\n```\n\n###Event names\n\nIf you'd like to alter this implementations event names used to signify success and failure you may do so by setting `Promise.SUCCESS` or `Promise.FAILURE` respectively.\n\n```js\nPromise.SUCCESS = 'complete';\nPromise.FAILURE = 'err';\n```\n\n###Luke, use the Source\nFor more ideas read the [source](https://github.com/aheckmann/mpromise/blob/master/lib), [tests](https://github.com/aheckmann/mpromise/blob/master/test), or the [mongoose implementation](https://github.com/LearnBoost/mongoose/blob/3.6x/lib/promise.js).\n\n## license\n\n[MIT](https://github.com/aheckmann/mpromise/blob/master/LICENSE)\n", + "readme": "#mpromise\n==========\n\n[![Build Status](https://travis-ci.org/aheckmann/mpromise.png)](https://travis-ci.org/aheckmann/mpromise)\n\nA [promises/A+](https://github.com/promises-aplus/promises-spec) conformant implementation, written for [mongoose](http://mongoosejs.com).\n\n## installation\n\n```\n$ npm install mpromise\n```\n\n## docs\n\nAn `mpromise` can be in any of three states, pending, fulfilled (success), or rejected (error). Once it is either fulfilled or rejected it's state can no longer be changed.\n\nThe exports object is the Promise constructor.\n\n```js\nvar Promise = require('mpromise');\n```\n\nThe constructor accepts an optional function which is executed when the promise is first resolved (either fulfilled or rejected).\n\n```js\nvar promise = new Promise(fn);\n```\n\nThis is the same as passing the `fn` to `onResolve` directly.\n\n```js\nvar promise = new Promise;\npromise.onResolve(function (err, args..) {\n ...\n});\n```\n\n### Methods\n\n####fulfill\n\nFulfilling a promise with values:\n\n```js\nvar promise = new Promise;\npromise.fulfill(args...);\n```\n\nIf the promise has already been fulfilled or rejected, no action is taken.\n\n####reject\n\nRejecting a promise with a reason:\n\n```js\nvar promise = new Promise;\npromise.reject(reason);\n```\n\nIf the promise has already been fulfilled or rejected, no action is taken.\n\n####resolve\n\nNode.js callback style promise resolution `(err, args...)`:\n\n```js\nvar promise = new Promise;\npromise.resolve([reason], [arg1, arg2, ...]);\n```\n\nIf the promise has already been fulfilled or rejected, no action is taken.\n\n####onFulfill\n\nTo register a function for execution when the promise is fulfilled, pass it to `onFulfill`. When executed it will receive the arguments passed to `fulfill()`.\n\n```js\nvar promise = new Promise;\npromise.onFulfill(function (a, b) {\n assert.equal(3, a + b);\n});\npromise.fulfill(1, 2);\n```\n\nThe function will only be called once when the promise is fulfilled, never when rejected.\n\nRegistering a function with `onFulfill` after the promise has already been fulfilled results in the immediate execution of the function with the original arguments used to fulfill the promise.\n\n```js\nvar promise = new Promise;\npromise.fulfill(\" :D \");\npromise.onFulfill(function (arg) {\n console.log(arg); // logs \" :D \"\n})\n```\n\n####onReject\n\nTo register a function for execution when the promise is rejected, pass it to `onReject`. When executed it will receive the argument passed to `reject()`.\n\n```js\nvar promise = new Promise;\npromise.onReject(function (reason) {\n assert.equal('sad', reason);\n});\npromise.reject('sad');\n```\n\nThe function will only be called once when the promise is rejected, never when fulfilled.\n\nRegistering a function with `onReject` after the promise has already been rejected results in the immediate execution of the function with the original argument used to reject the promise.\n\n```js\nvar promise = new Promise;\npromise.reject(\" :( \");\npromise.onReject(function (reason) {\n console.log(reason); // logs \" :( \"\n})\n```\n\n####onResolve\n\nAllows registration of node.js style callbacks `(err, args..)` to handle either promise resolution type (fulfill or reject).\n\n```js\n// fulfillment\nvar promise = new Promise;\npromise.onResolve(function (err, a, b) {\n console.log(a + b); // logs 3\n});\npromise.fulfill(1, 2);\n\n// rejection\nvar promise = new Promise;\npromise.onResolve(function (err) {\n if (err) {\n console.log(err.message); // logs \"failed\"\n }\n});\npromise.reject(new Error('failed'));\n```\n\n####then\n\nCreates a new promise and returns it. If `onFulfill` or `onReject` are passed, they are added as SUCCESS/ERROR callbacks to this promise after the nextTick.\n\nConforms to [promises/A+](https://github.com/promises-aplus/promises-spec) specification and passes its [tests](https://github.com/promises-aplus/promises-tests).\n\n```js\n// promise.then(onFulfill, onReject);\n\nvar p = new Promise;\n\np.then(function (arg) {\n return arg + 1;\n}).then(function (arg) {\n throw new Error(arg + ' is an error!');\n}).then(null, function (err) {\n assert.ok(err instanceof Error);\n assert.equal('2 is an error', err.message);\n});\np.fullfill(1);\n```\n\n####end\n\nSignifies that this promise was the last in a chain of `then()s`: if a handler passed to the call to `then` which produced this promise throws, the exception be rethrown.\nYou can pass an OnReject handler to `end` so that exceptions will be handled (like a final catch clause);\nThis method returns it's promise for easy use with `return`.\n\n```js\nvar p = new Promise;\np.then(function(){ throw new Error('shucks') });\nsetTimeout(function () {\n p.fulfill();\n // error was caught and swallowed by the promise returned from\n // p.then(). we either have to always register handlers on\n // the returned promises or we can do the following...\n}, 10);\n\n// this time we use .end() which prevents catching thrown errors\nvar p = new Promise;\nsetTimeout(function () {\n p.fulfill(); // throws \"shucks\"\n}, 10);\nreturn p.then(function(){ throw new Error('shucks') }).end(); // <--\n```\n\n\n### chain\n\nAllows direct promise to promise chaining (especially useful by a outside aggregating function). It doesn't use the asynchronous `resolve` algorithm and so excepts only another Promise as it's argument.\n\n```js\nfunction makeMeAPromise(i) {\n var p = new Promise;\n p.fulfill(i);\n return p;\n}\n\nvar returnPromise = initialPromise = new Promise;\nfor (i=0; i<10; ++i)\n returnPromise = returnPromise.chain(makeMeAPromise(i));\n\ninitialPromise.fulfill();\nreturn returnPromise;\n```\n\n###Event names\n\nIf you'd like to alter this implementations event names used to signify success and failure you may do so by setting `Promise.SUCCESS` or `Promise.FAILURE` respectively.\n\n```js\nPromise.SUCCESS = 'complete';\nPromise.FAILURE = 'err';\n```\n\n###Luke, use the Source\nFor more ideas read the [source](https://github.com/aheckmann/mpromise/blob/master/lib), [tests](https://github.com/aheckmann/mpromise/blob/master/test), or the [mongoose implementation](https://github.com/LearnBoost/mongoose/blob/3.6x/lib/promise.js).\n\n## license\n\n[MIT](https://github.com/aheckmann/mpromise/blob/master/LICENSE)\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/aheckmann/mpromise/issues" }, - "_id": "mpromise@0.2.1", - "_from": "mpromise@0.2.1" + "_id": "mpromise@0.4.3", + "_from": "mpromise@0.4.3" } diff --git a/node_modules/mongoose/node_modules/mpromise/test/promise.test.js b/node_modules/mongoose/node_modules/mpromise/test/promise.test.js index 45f6e29..5611931 100644 --- a/node_modules/mongoose/node_modules/mpromise/test/promise.test.js +++ b/node_modules/mongoose/node_modules/mpromise/test/promise.test.js @@ -1,10 +1,11 @@ - +/*global describe,it */ +if (process.version.indexOf('v0.11') == -1) require("longjohn"); /** * Module dependencies. */ -var assert = require('assert') -var Promise = require('../lib/promise'); +var assert = require('assert'); +var Promise = require('../'); /** * Test. @@ -159,43 +160,151 @@ describe('promise', function(){ }) }) - describe('then catching', function(){ - it('should not catch returned promise fulfillments', function(done){ - var p1 = new Promise; + describe('then', function(){ + describe('catching', function(){ + it('should not catch returned promise fulfillments', function(done){ + var errorSentinal + , p = new Promise + , p2 = p.then(function () { throw errorSentinal = new Error("boo!") }); - var p2 = p1.then(function () { return 'step 1' }) + p.fulfill(); + done(); + }); - p2.onFulfill(function () { throw new Error('fulfill threw me') }) - p2.reject = assert.ifError.bind(assert, new Error('reject should not have been called')); - setTimeout(function () { - assert.throws(function () { - p1.fulfill(); - }, /fulfill threw me/) - done(); - }, 10); + it('should not catch returned promise fulfillments even async', function (done) { + var errorSentinal + , p = new Promise + , p2 = p.then(function () { throw errorSentinal = new Error("boo!") }); - }) + setTimeout(function () { + p.fulfill(); + done(); + }, 10); + }); - it('can be disabled using .end()', function(done){ - var p = new Promise; - var p2 = p.then(function () { throw new Error('shucks') }) - p2.end(); + it('can be disabled using .end()', function(done){ + if (process.version.indexOf('v0.8') == 0) return done(); + var errorSentinal + , overTimeout + , domain = require('domain').create(); + + domain.once('error', function (err) { + assert(err, errorSentinal); + clearTimeout(overTimeout); + done() + }); + + domain.run(function () { + var p = new Promise; + var p2 = p.then(function () { + throw errorSentinal = new Error('shucks') + }); + p2.end(); - setTimeout(function () { - try { p.fulfill(); - } catch (err) { - assert.ok(/shucks/.test(err)) - done(); - } + }); + overTimeout = setTimeout(function () { done(new Error('error was swallowed')); }, 10); + }); - setTimeout(function () { - done(new Error('error was swallowed')); - }, 10); - }, 10); + it('can be disabled using .end() even when async', function (done) { + if (process.version.indexOf('v0.8') == 0) return done(); + var errorSentinal + , overTimeout + , domain = require('domain').create(); + + domain.on('error', function (err) { + assert(err, errorSentinal); + clearTimeout(overTimeout); + done() + }); + + domain.run(function () { + var p = new Promise; + var p2 = p.then(function () { + throw errorSentinal = new Error("boo!") + }); + p2.end(); + + setTimeout(function () {p.fulfill();}, 10); + }); + overTimeout = setTimeout(function () { done(new Error('error was swallowed')); }, 20); + }); + + + it('can be handled using .end() so no throwing', function (done) { + var errorSentinal + , overTimeout + , domain = require('domain').create(); + + domain.run(function () { + var p = new Promise; + var p2 = p.then(function () { + throw errorSentinal = new Error("boo!") + }); + p2.end(function (err) { + assert.equal(err, errorSentinal); + clearTimeout(overTimeout); + done() + }); + + setTimeout(function () {p.fulfill();}, 10); + }); + overTimeout = setTimeout(function () { done(new Error('error was swallowed')); }, 20); + }); + + }); + + it('persistent', function(done){ + var p = new Promise + v = null; + + function ensure (val) { + v = v || val; + assert.equal(v, val); + } + + function guard () { + throw new Error('onReject should not be called'); + } + + p.then(ensure, guard).end(); + + p.fulfill('foo'); + p.fulfill('bar'); + p.reject(new Error('baz')); + + p.then(ensure, guard).end(); + + setTimeout(done, 0); }) - }) -}) + + + it('accepts multiple completion values', function(done){ + var p = new Promise; + + p.then(function (a, b) { + assert.equal(2, arguments.length); + assert.equal('hi', a); + assert.equal(4, b); + done(); + }, done).end(); + + p.fulfill('hi', 4); + }) + }); + + + describe('end', function () { + it("should return the promise", function (done) { + var p = new Promise; + var p1 = p.end(); + assert.equal(p, p1); + done(); + }); + }); + + +}); diff --git a/node_modules/mongoose/node_modules/mpromise/test/promises-A.js b/node_modules/mongoose/node_modules/mpromise/test/promises-A.js deleted file mode 100644 index ebb4626..0000000 --- a/node_modules/mongoose/node_modules/mpromise/test/promises-A.js +++ /dev/null @@ -1,35 +0,0 @@ - -/** - * Module dependencies. - */ - -var assert = require('assert') -var Promise = require('../lib/promise'); -var aplus = require('promises-aplus-tests'); - -// tests - -var adapter = {}; -adapter.fulfilled = function (value) { - var p = new Promise; - p.fulfill(value); - return p; -}; -adapter.rejected = function (reason) { - var p = new Promise; - p.reject(reason); - return p; -} -adapter.pending = function () { - var p = new Promise; - return { - promise: p - , fulfill: p.fulfill.bind(p) - , reject: p.reject.bind(p) - } -} - -aplus(adapter, function (err) { - assert.ifError(err); -}); - diff --git a/node_modules/mongoose/node_modules/sliced/History.md b/node_modules/mongoose/node_modules/sliced/History.md index 04bbbbc..33abe6d 100644 --- a/node_modules/mongoose/node_modules/sliced/History.md +++ b/node_modules/mongoose/node_modules/sliced/History.md @@ -1,4 +1,18 @@ +0.0.5 / 2013-02-05 +================== + + * optimization: remove use of arguments [jkroso](https://github.com/jkroso) + * add scripts to component.json [jkroso](https://github.com/jkroso) + * tests; remove time for travis + +0.0.4 / 2013-01-07 +================== + + * added component.json #1 [jkroso](https://github.com/jkroso) + * reversed array loop #1 [jkroso](https://github.com/jkroso) + * remove fn params + 0.0.3 / 2012-09-29 ================== diff --git a/node_modules/mongoose/node_modules/sliced/Makefile b/node_modules/mongoose/node_modules/sliced/Makefile index 3dd8a2d..2ad4e47 100644 --- a/node_modules/mongoose/node_modules/sliced/Makefile +++ b/node_modules/mongoose/node_modules/sliced/Makefile @@ -1,5 +1,5 @@ test: - @time ./node_modules/.bin/mocha $(T) $(TESTS) + @./node_modules/.bin/mocha $(T) $(TESTS) .PHONY: test diff --git a/node_modules/mongoose/node_modules/sliced/lib/sliced.js b/node_modules/mongoose/node_modules/sliced/lib/sliced.js index 41eb115..d88c85b 100644 --- a/node_modules/mongoose/node_modules/sliced/lib/sliced.js +++ b/node_modules/mongoose/node_modules/sliced/lib/sliced.js @@ -18,14 +18,14 @@ module.exports = function (args, slice, sliceEnd) { ? Math.max(0, slice + len) : slice || 0; - var end = 3 === arguments.length - ? sliceEnd < 0 + if (sliceEnd !== undefined) { + len = sliceEnd < 0 ? sliceEnd + len : sliceEnd - : len; + } - for (var i = start; i < end; ++i) { - ret[i - start] = args[i]; + while (len-- > start) { + ret[len - start] = args[len]; } return ret; diff --git a/node_modules/mongoose/node_modules/sliced/package.json b/node_modules/mongoose/node_modules/sliced/package.json index ce16c7b..65ab2be 100644 --- a/node_modules/mongoose/node_modules/sliced/package.json +++ b/node_modules/mongoose/node_modules/sliced/package.json @@ -1,6 +1,6 @@ { "name": "sliced", - "version": "0.0.3", + "version": "0.0.5", "description": "A faster Node.js alternative to Array.prototype.slice.call(arguments)", "main": "index.js", "scripts": { @@ -29,6 +29,6 @@ "bugs": { "url": "https://github.com/aheckmann/sliced/issues" }, - "_id": "sliced@0.0.3", - "_from": "sliced@0.0.3" + "_id": "sliced@0.0.5", + "_from": "sliced@0.0.5" } diff --git a/node_modules/mongoose/package.json b/node_modules/mongoose/package.json index c372130..bc72e29 100644 --- a/node_modules/mongoose/package.json +++ b/node_modules/mongoose/package.json @@ -1,7 +1,7 @@ { "name": "mongoose", - "description": "Elegant MongoDB object modeling for Node.js", - "version": "3.6.11", + "description": "Mongoose MongoDB ODM", + "version": "3.8.20", "author": { "name": "Guillermo Rauch", "email": "guillermo@learnboost.com" @@ -21,24 +21,29 @@ "db" ], "dependencies": { + "mongodb": "1.4.12", "hooks": "0.2.1", - "mongodb": "1.3.5", "ms": "0.1.0", - "sliced": "0.0.3", + "sliced": "0.0.5", "muri": "0.3.1", - "mpromise": "0.2.1", + "mpromise": "0.4.3", "mpath": "0.1.1", - "regexp-clone": "0.0.1" + "regexp-clone": "0.0.1", + "mquery": "0.8.0" }, "devDependencies": { - "mocha": "1.8.1", + "mocha": "1.12.0", "node-static": "0.5.9", "dox": "0.3.1", "jade": "0.26.3", "highlight.js": "7.0.1", "markdown": "0.3.1", "promises-aplus-tests": ">= 1.0.2", - "tbd": "0.6.4" + "tbd": "0.6.4", + "benchmark": "1.0.0", + "open": "0.0.3", + "async": "0.2.5", + "underscore": "1.5.2" }, "directories": { "lib": "./lib/mongoose" @@ -51,15 +56,20 @@ "node": ">=0.6.19" }, "bugs": { - "url": "https://github.com/learnboost/mongoose/issues/new" + "url": "https://github.com/learnboost/mongoose/issues/new", + "email": "mongoose-orm@googlegroups.com" }, "repository": { "type": "git", "url": "git://github.com/LearnBoost/mongoose.git" }, "homepage": "http://mongoosejs.com", - "readme": "## What's Mongoose?\n\nMongoose is a [MongoDB](http://www.mongodb.org/) object modeling tool designed to work in an asynchronous environment.\n\n## Documentation\n\n[mongoosejs.com](http://mongoosejs.com/)\n\n## Try it live\n\n\n## Support\n\n - [Stack Overflow](http://stackoverflow.com/questions/tagged/mongoose)\n - [bug reports](https://github.com/learnboost/mongoose/issues/)\n - [help forum](http://groups.google.com/group/mongoose-orm)\n - [10gen support](http://www.mongodb.org/display/DOCS/Technical+Support)\n - (irc) #mongoosejs on freenode\n\n## Installation\n\nFirst install [node.js](http://nodejs.org/) and [mongodb](http://www.mongodb.org/downloads).\n\n $ npm install mongoose\n\n## Plugins\n\nCheck out the [plugins search site](http://plugins.mongoosejs.com/) to see hundreds of related modules from the community.\n\n## Contributors\n\nView all 90+ [contributors](https://github.com/learnboost/mongoose/graphs/contributors).\n\n## Get Involved\n\nStand up and be counted as a [contributor](https://github.com/LearnBoost/mongoose/blob/master/CONTRIBUTING.md) too!\n\n## Overview\n\n### Connecting to MongoDB\n\nFirst, we need to define a connection. If your app uses only one database, you should use `mongose.connect`. If you need to create additional connections, use `mongoose.createConnection`.\n\nBoth `connect` and `createConnection` take a `mongodb://` URI, or the parameters `host, database, port, options`.\n\n var mongoose = require('mongoose');\n\n mongoose.connect('mongodb://localhost/my_database');\n\nOnce connected, the `open` event is fired on the `Connection` instance. If you're using `mongoose.connect`, the `Connection` is `mongoose.connection`. Otherwise, `mongoose.createConnection` return value is a `Connection`.\n\n**Important!** Mongoose buffers all the commands until it's connected to the database. This means that you don't have to wait until it connects to MongoDB in order to define models, run queries, etc.\n\n### Defining a Model\n\nModels are defined through the `Schema` interface. \n\n var Schema = mongoose.Schema\n , ObjectId = Schema.ObjectId;\n\n var BlogPost = new Schema({\n author : ObjectId\n , title : String\n , body : String\n , date : Date\n });\n\nAside from defining the structure of your documents and the types of data you're storing, a Schema handles the definition of:\n\n* [Validators](http://mongoosejs.com/docs/validation.html) (async and sync)\n* [Defaults](http://mongoosejs.com/docs/api.html#schematype_SchemaType-default)\n* [Getters](http://mongoosejs.com/docs/api.html#schematype_SchemaType-get)\n* [Setters](http://mongoosejs.com/docs/api.html#schematype_SchemaType-set)\n* [Indexes](http://mongoosejs.com/docs/guide.html#indexes)\n* [Middleware](http://mongoosejs.com/docs/middleware.html)\n* [Methods](http://mongoosejs.com/docs/guide.html#methods) definition\n* [Statics](http://mongoosejs.com/docs/guide.html#statics) definition\n* [Plugins](http://mongoosejs.com/docs/plugins.html)\n* [pseudo-JOINs](http://mongoosejs.com/docs/populate.html)\n\nThe following example shows some of these features:\n\n var Comment = new Schema({\n name : { type: String, default: 'hahaha' }\n , age : { type: Number, min: 18, index: true }\n , bio : { type: String, match: /[a-z]/ }\n , date : { type: Date, default: Date.now }\n , buff : Buffer\n });\n\n // a setter\n Comment.path('name').set(function (v) {\n return capitalize(v);\n });\n\n // middleware\n Comment.pre('save', function (next) {\n notify(this.get('email'));\n next();\n });\n\nTake a look at the example in `examples/schema.js` for an end-to-end example of a typical setup.\n\n### Accessing a Model\n\nOnce we define a model through `mongoose.model('ModelName', mySchema)`, we can access it through the same function\n\n var myModel = mongoose.model('ModelName');\n\nOr just do it all at once\n\n var MyModel = mongoose.model('ModelName', mySchema);\n\nWe can then instantiate it, and save it:\n\n var instance = new MyModel();\n instance.my.key = 'hello';\n instance.save(function (err) {\n //\n });\n\nOr we can find documents from the same collection\n\n MyModel.find({}, function (err, docs) {\n // docs.forEach\n });\n\nYou can also `findOne`, `findById`, `update`, etc. For more details check out [the docs](http://mongoosejs.com/docs/queries.html).\n\n**Important!** If you opened a separate connection using `mongoose.createConnection()` but attempt to access the model through `mongoose.model('ModelName')` it will not work as expected since it is not hooked up to an active db connection. In this case access your model through the connection you created:\n\n var conn = mongoose.createConnection('your connection string');\n var MyModel = conn.model('ModelName', schema);\n var m = new MyModel;\n m.save() // works\n\n vs\n\n var conn = mongoose.createConnection('your connection string');\n var MyModel = mongoose.model('ModelName', schema);\n var m = new MyModel;\n m.save() // does not work b/c the default connection object was never connected\n\n### Embedded Documents\n\nIn the first example snippet, we defined a key in the Schema that looks like:\n\n comments: [Comments]\n\nWhere `Comments` is a `Schema` we created. This means that creating embedded documents is as simple as:\n\n // retrieve my model\n var BlogPost = mongoose.model('BlogPost');\n\n // create a blog post\n var post = new BlogPost();\n\n // create a comment\n post.comments.push({ title: 'My comment' });\n\n post.save(function (err) {\n if (!err) console.log('Success!');\n });\n\nThe same goes for removing them:\n\n BlogPost.findById(myId, function (err, post) {\n if (!err) {\n post.comments[0].remove();\n post.save(function (err) {\n // do something\n });\n }\n });\n\nEmbedded documents enjoy all the same features as your models. Defaults, validators, middleware. Whenever an error occurs, it's bubbled to the `save()` error callback, so error handling is a snap!\n\nMongoose interacts with your embedded documents in arrays _atomically_, out of the box.\n\n### Middleware\n\nSee the [docs](http://mongoosejs.com/docs/middleware.html) page.\n\n#### Intercepting and mutating method arguments\n\nYou can intercept method arguments via middleware.\n\nFor example, this would allow you to broadcast changes about your Documents every time someone `set`s a path in your Document to a new value:\n\n schema.pre('set', function (next, path, val, typel) {\n // `this` is the current Document\n this.emit('set', path, val);\n\n // Pass control to the next pre\n next();\n });\n\nMoreover, you can mutate the incoming `method` arguments so that subsequent middleware see different values for those arguments. To do so, just pass the new values to `next`:\n\n .pre(method, function firstPre (next, methodArg1, methodArg2) {\n // Mutate methodArg1\n next(\"altered-\" + methodArg1.toString(), methodArg2);\n })\n\n // pre declaration is chainable\n .pre(method, function secondPre (next, methodArg1, methodArg2) {\n console.log(methodArg1);\n // => 'altered-originalValOfMethodArg1' \n \n console.log(methodArg2);\n // => 'originalValOfMethodArg2' \n \n // Passing no arguments to `next` automatically passes along the current argument values\n // i.e., the following `next()` is equivalent to `next(methodArg1, methodArg2)`\n // and also equivalent to, with the example method arg \n // values, `next('altered-originalValOfMethodArg1', 'originalValOfMethodArg2')`\n next();\n })\n\n#### Schema gotcha\n\n`type`, when used in a schema has special meaning within Mongoose. If your schema requires using `type` as a nested property you must use object notation:\n\n new Schema({\n broken: { type: Boolean }\n , asset : {\n name: String\n , type: String // uh oh, it broke. asset will be interpreted as String\n }\n });\n\n new Schema({\n works: { type: Boolean }\n , asset : {\n name: String\n , type: { type: String } // works. asset is an object with a type property\n }\n });\n\n### Driver access\n\nThe driver being used defaults to [node-mongodb-native](https://github.com/mongodb/node-mongodb-native) and is directly accessible through `YourModel.collection`. **Note**: using the driver directly bypasses all Mongoose power-tools like validation, getters, setters, hooks, etc.\n\n## API Docs\n\nFind the API docs [here](http://mongoosejs.com/docs/api.html), generated by [dox](http://github.com/visionmedia/dox).\n\n## License\n\nCopyright (c) 2010 LearnBoost <dev@learnboost.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", + "readme": "# Mongoose\n\nMongoose is a [MongoDB](http://www.mongodb.org/) object modeling tool designed to work in an asynchronous environment.\n\n[![Build Status](https://travis-ci.org/LearnBoost/mongoose.png?branch=3.8.x)](https://travis-ci.org/LearnBoost/mongoose)\n\n## Documentation\n\n[mongoosejs.com](http://mongoosejs.com/)\n\n## Support\n\n - [Stack Overflow](http://stackoverflow.com/questions/tagged/mongoose)\n - [bug reports](https://github.com/learnboost/mongoose/issues/)\n - [help forum](http://groups.google.com/group/mongoose-orm)\n - [MongoDB support](http://www.mongodb.org/display/DOCS/Technical+Support)\n - (irc) #mongoosejs on freenode\n\n## Plugins\n\nCheck out the [plugins search site](http://plugins.mongoosejs.com/) to see hundreds of related modules from the community.\n\n## Contributors\n\nView all 100+ [contributors](https://github.com/learnboost/mongoose/graphs/contributors). Stand up and be counted as a [contributor](https://github.com/LearnBoost/mongoose/blob/master/CONTRIBUTING.md) too!\n\n## Live Examples\n\n\n## Installation\n\nFirst install [node.js](http://nodejs.org/) and [mongodb](http://www.mongodb.org/downloads). Then:\n\n```sh\n$ npm install mongoose\n```\n\n## Stability\n\nThe current stable branch is [3.8.x](https://github.com/LearnBoost/mongoose/tree/3.8.x). New (unstable) development always occurs on the [master](https://github.com/LearnBoost/mongoose/tree/master) branch.\n\n## Overview\n\n### Connecting to MongoDB\n\nFirst, we need to define a connection. If your app uses only one database, you should use `mongoose.connect`. If you need to create additional connections, use `mongoose.createConnection`.\n\nBoth `connect` and `createConnection` take a `mongodb://` URI, or the parameters `host, database, port, options`.\n\n```js\nvar mongoose = require('mongoose');\n\nmongoose.connect('mongodb://localhost/my_database');\n```\n\nOnce connected, the `open` event is fired on the `Connection` instance. If you're using `mongoose.connect`, the `Connection` is `mongoose.connection`. Otherwise, `mongoose.createConnection` return value is a `Connection`.\n\n**Important!** Mongoose buffers all the commands until it's connected to the database. This means that you don't have to wait until it connects to MongoDB in order to define models, run queries, etc.\n\n### Defining a Model\n\nModels are defined through the `Schema` interface. \n\n```js\nvar Schema = mongoose.Schema\n , ObjectId = Schema.ObjectId;\n\nvar BlogPost = new Schema({\n author : ObjectId\n , title : String\n , body : String\n , date : Date\n});\n```\n\nAside from defining the structure of your documents and the types of data you're storing, a Schema handles the definition of:\n\n* [Validators](http://mongoosejs.com/docs/validation.html) (async and sync)\n* [Defaults](http://mongoosejs.com/docs/api.html#schematype_SchemaType-default)\n* [Getters](http://mongoosejs.com/docs/api.html#schematype_SchemaType-get)\n* [Setters](http://mongoosejs.com/docs/api.html#schematype_SchemaType-set)\n* [Indexes](http://mongoosejs.com/docs/guide.html#indexes)\n* [Middleware](http://mongoosejs.com/docs/middleware.html)\n* [Methods](http://mongoosejs.com/docs/guide.html#methods) definition\n* [Statics](http://mongoosejs.com/docs/guide.html#statics) definition\n* [Plugins](http://mongoosejs.com/docs/plugins.html)\n* [pseudo-JOINs](http://mongoosejs.com/docs/populate.html)\n\nThe following example shows some of these features:\n\n```js\nvar Comment = new Schema({\n name : { type: String, default: 'hahaha' }\n , age : { type: Number, min: 18, index: true }\n , bio : { type: String, match: /[a-z]/ }\n , date : { type: Date, default: Date.now }\n , buff : Buffer\n});\n\n// a setter\nComment.path('name').set(function (v) {\n return capitalize(v);\n});\n\n// middleware\nComment.pre('save', function (next) {\n notify(this.get('email'));\n next();\n});\n```\n\nTake a look at the example in `examples/schema.js` for an end-to-end example of a typical setup.\n\n### Accessing a Model\n\nOnce we define a model through `mongoose.model('ModelName', mySchema)`, we can access it through the same function\n\n```js\nvar myModel = mongoose.model('ModelName');\n```\n\nOr just do it all at once\n\n```js\nvar MyModel = mongoose.model('ModelName', mySchema);\n```\n\nWe can then instantiate it, and save it:\n\n```js\nvar instance = new MyModel();\ninstance.my.key = 'hello';\ninstance.save(function (err) {\n //\n});\n```\n\nOr we can find documents from the same collection\n\n```js\nMyModel.find({}, function (err, docs) {\n // docs.forEach\n});\n```\n\nYou can also `findOne`, `findById`, `update`, etc. For more details check out [the docs](http://mongoosejs.com/docs/queries.html).\n\n**Important!** If you opened a separate connection using `mongoose.createConnection()` but attempt to access the model through `mongoose.model('ModelName')` it will not work as expected since it is not hooked up to an active db connection. In this case access your model through the connection you created:\n\n```js\nvar conn = mongoose.createConnection('your connection string')\n , MyModel = conn.model('ModelName', schema)\n , m = new MyModel;\nm.save(); // works\n```\n\nvs\n\n```js\nvar conn = mongoose.createConnection('your connection string')\n , MyModel = mongoose.model('ModelName', schema)\n , m = new MyModel;\nm.save(); // does not work b/c the default connection object was never connected\n```\n\n### Embedded Documents\n\nIn the first example snippet, we defined a key in the Schema that looks like:\n\n```\ncomments: [Comments]\n```\n\nWhere `Comments` is a `Schema` we created. This means that creating embedded documents is as simple as:\n\n```js\n// retrieve my model\nvar BlogPost = mongoose.model('BlogPost');\n\n// create a blog post\nvar post = new BlogPost();\n\n// create a comment\npost.comments.push({ title: 'My comment' });\n\npost.save(function (err) {\n if (!err) console.log('Success!');\n});\n```\n\nThe same goes for removing them:\n\n```js\nBlogPost.findById(myId, function (err, post) {\n if (!err) {\n post.comments[0].remove();\n post.save(function (err) {\n // do something\n });\n }\n});\n```\n\nEmbedded documents enjoy all the same features as your models. Defaults, validators, middleware. Whenever an error occurs, it's bubbled to the `save()` error callback, so error handling is a snap!\n\nMongoose interacts with your embedded documents in arrays _atomically_, out of the box.\n\n### Middleware\n\nSee the [docs](http://mongoosejs.com/docs/middleware.html) page.\n\n#### Intercepting and mutating method arguments\n\nYou can intercept method arguments via middleware.\n\nFor example, this would allow you to broadcast changes about your Documents every time someone `set`s a path in your Document to a new value:\n\n```js\nschema.pre('set', function (next, path, val, typel) {\n // `this` is the current Document\n this.emit('set', path, val);\n\n // Pass control to the next pre\n next();\n});\n```\n\nMoreover, you can mutate the incoming `method` arguments so that subsequent middleware see different values for those arguments. To do so, just pass the new values to `next`:\n\n```js\n.pre(method, function firstPre (next, methodArg1, methodArg2) {\n // Mutate methodArg1\n next(\"altered-\" + methodArg1.toString(), methodArg2);\n});\n\n// pre declaration is chainable\n.pre(method, function secondPre (next, methodArg1, methodArg2) {\n console.log(methodArg1);\n // => 'altered-originalValOfMethodArg1' \n \n console.log(methodArg2);\n // => 'originalValOfMethodArg2' \n \n // Passing no arguments to `next` automatically passes along the current argument values\n // i.e., the following `next()` is equivalent to `next(methodArg1, methodArg2)`\n // and also equivalent to, with the example method arg \n // values, `next('altered-originalValOfMethodArg1', 'originalValOfMethodArg2')`\n next();\n});\n```\n\n#### Schema gotcha\n\n`type`, when used in a schema has special meaning within Mongoose. If your schema requires using `type` as a nested property you must use object notation:\n\n```js\nnew Schema({\n broken: { type: Boolean }\n , asset : {\n name: String\n , type: String // uh oh, it broke. asset will be interpreted as String\n }\n});\n\nnew Schema({\n works: { type: Boolean }\n , asset : {\n name: String\n , type: { type: String } // works. asset is an object with a type property\n }\n});\n```\n\n### Driver access\n\nThe driver being used defaults to [node-mongodb-native](https://github.com/mongodb/node-mongodb-native) and is directly accessible through `YourModel.collection`. **Note**: using the driver directly bypasses all Mongoose power-tools like validation, getters, setters, hooks, etc.\n\n## API Docs\n\nFind the API docs [here](http://mongoosejs.com/docs/api.html), generated using [dox](http://github.com/visionmedia/dox).\n\n## License\n\nCopyright (c) 2010 LearnBoost <dev@learnboost.com>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n", "readmeFilename": "README.md", - "_id": "mongoose@3.6.11", - "_from": "mongoose@3.6.x" + "_id": "mongoose@3.8.20", + "dist": { + "shasum": "30fd41b9b071267a8519b96dbb099926903a7dea" + }, + "_from": "mongoose@3.8.20", + "_resolved": "https://registry.npmjs.org/mongoose/-/mongoose-3.8.20.tgz" } diff --git a/node_modules/mongoose/static.js b/node_modules/mongoose/static.js index 8eab8ad..f02ba5a 100644 --- a/node_modules/mongoose/static.js +++ b/node_modules/mongoose/static.js @@ -1,8 +1,15 @@ var static = require('node-static'); var server = new static.Server('.', { cache: 0 }); +var open = require('open') require('http').createServer(function (req, res) { + if ('/favicon.ico' == req.url) { + req.destroy(); + res.statusCode = 204 + return res.end(); + } + req.on('end', function () { server.serve(req, res, function (err) { if (err) { @@ -15,4 +22,5 @@ require('http').createServer(function (req, res) { req.resume(); }).listen(8088); -console.error('now listening on localhost:8088'); +console.error('now listening on http://localhost:8088'); +open('http://localhost:8088'); diff --git a/node_modules/mongoose/website.js b/node_modules/mongoose/website.js index 43a66d1..d7540ee 100644 --- a/node_modules/mongoose/website.js +++ b/node_modules/mongoose/website.js @@ -12,6 +12,7 @@ require('./docs/helpers/filters')(jade); // use last release package.version = getVersion(); +package.unstable = getUnstable(package.version); var filemap = require('./docs/source'); var files = Object.keys(filemap); @@ -58,3 +59,14 @@ function getVersion () { } throw new Error('no match found'); } + +function getUnstable(ver) { + ver = ver.replace("-pre"); + var spl = ver.split('.'); + spl = spl.map(function (i) { + return parseInt(i); + }); + spl[1]++; + spl[2] = "x"; + return spl.join('.'); +} diff --git a/node_modules/restify-oauth2/LICENSE.txt b/node_modules/restify-oauth2/LICENSE.txt index e2abbea..ae20051 100644 --- a/node_modules/restify-oauth2/LICENSE.txt +++ b/node_modules/restify-oauth2/LICENSE.txt @@ -1,7 +1,13 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE +Copyright © 2013–2014 Domenic Denicola + +This work is free. You can redistribute it and/or modify it under the +terms of the Do What The Fuck You Want To Public License, Version 2, +as published by Sam Hocevar. See below for more details. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 - Copyright © 2013 Domenic Denicola + Copyright (C) 2004 Sam Hocevar Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long @@ -11,4 +17,3 @@ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. - diff --git a/node_modules/restify-oauth2/README.md b/node_modules/restify-oauth2/README.md index 8a38afa..f3c0c10 100644 --- a/node_modules/restify-oauth2/README.md +++ b/node_modules/restify-oauth2/README.md @@ -14,12 +14,14 @@ If you provide Restify–OAuth2 with the appropriate hooks, it will: * If the token fails validation, it will send [an appropriate 400 or 401 error response][token-usage-error], with a [`WWW-Authenticate`][www-authenticate] header and a [`Link`][web-linking] [`rel="oauth2-token"`][oauth2-token-rel] header pointing to the token endpoint. - * Otherwise, it will set either `req.clientId` or `req.username` (depending on which flow you are using) to a value - determined by looking up the access token. -* If no access token is sent, it simply sets `req.clientId`/`req.username` to `null`: - * You can check for this whenever there is a resource you want to protect. - * If the user tries to access a protected resource, you can use Restify–OAuth2's `res.sendUnauthorized()` to send - appropriate 401 errors with helpful `WWW-Authenticate` and `Link` headers. + * Otherwise, you can use your `authenticateToken` and `grantScopes` hooks to set properties on the request object for + your routes to check later. +* If no access token is sent, it ensures that `req.username` is set to `null`; furthermore, none of your hooks are + called, so you can be sure that no properties that they set are present. + * You can then check for these conditions whenever there is a resource you want to protect. + * If the user tries to access a protected resource, you can use Restify–OAuth2's `res.sendUnauthenticated()` to send + appropriate 401 errors with helpful `WWW-Authenticate` and `Link` headers, or its `res.sendUnauthorized()` to send + appropriate 403 errors with similar headers. ## Use and Configuration @@ -59,17 +61,19 @@ expire, or revoke them if they fall in to the wrong hands. To install Restify–OAuth2's client credentials flow into your infrastructure, you will need to provide it with the following hooks in the `options.hooks` hash. You can see some [example CC hooks][] in the demo application. -#### `grantClientToken(clientId, clientSecret, cb)` +#### `grantClientToken({ clientId, clientSecret }, req, cb)` Checks that the API client is authorized to use your API, and has the correct secret. It should call back with a new token for that client if so, or `false` if the credentials are incorrect. It can also call back with an error if there was some internal server error while validating the credentials. -#### `authenticateToken(token, cb)` +#### `authenticateToken(token, req, cb)` -Checks that a token is valid, i.e. that it was granted in the past by `grantClientToken`. It should call back with the -client ID for that token if so, or `false` if the token is invalid. It can also call back with an error if there -was some internal server error while looking up the token. +Checks that a token is valid, i.e. that it was granted in the past by `grantClientToken`. It should call back with +`true` if so, or `false` if the token is invalid. It can also call back with an error if there was some internal +server error while looking up the token. If the token is valid, it is likely useful to set a property on the request +object indicating that so that your routes can check it later, e.g. `req.authenticated = true` or +`req.clientId = lookupClientIdFrom(token)`. ### Resource Owner Password Credentials Hooks @@ -83,23 +87,48 @@ To install Restify–OAuth2's resource owner password credentials flow into your provide it with the following hooks in the `options.hooks` hash. You can see some [example ROPC hooks][] in the demo application. -#### `validateClient(clientId, clientSecret, cb)` +#### `validateClient({ clientId, clientSecret }, req, cb)` Checks that the API client is authorized to use your API, and has the correct secret. It should call back with `true` or `false` depending on the result of the check. It can also call back with an error if there was some internal server error while doing the check. -#### `grantUserToken(username, password, cb)` +#### `grantUserToken({ clientId, clientSecret, username, password }, req, cb)` Checks that the API client is authenticating on behalf of a real user with correct credentials. It should call back with a new token for that user if so, or `false` if the credentials are incorrect. It can also call back with an error if there was some internal server error while validating the credentials. -#### `authenticateToken(token, cb)` +#### `authenticateToken(token, req, cb)` -Checks that a token is valid, i.e. that it was granted in the past by `grantUserToken`. It should call back with the -username for that token if so, or `false` if the token is invalid. It can also call back with an error if there -was some internal server error while looking up the token. +Checks that a token is valid, i.e. that it was granted in the past by `grantUserToken`. It should call back with +`true` if so, or `false` if the token is invalid. It can also call back with an error if there was some internal +server error while looking up the token. If the token is valid, it is likely useful to set a property on the request +object indicating that so that your routes can check it later, e.g. `req.authenticated = true` or +`req.username = lookupUsernameFrom(token)`. + +### Scope-Granting Hook + +Optionally, it is possible to limit the [scope][] of the issued tokens, so that you can implement an authorization +system in your application in addition to simple authentication. + +#### `grantScopes(credentials, scopesRequested, req, cb)` + +This hook is called after the token has been granted by `authenticateToken`. In the client credentials flow, +`credentials` will be `{ clientId, clientSecret, token }`; in the resource owner password credentials flow, it will be +`{ clientId, clientSecret, username, password, token }`. In both cases, `scopesRequested` will be an array of the +requested scopes. + +This hook can respond in several ways: + +* It can call back with `true` to grant all of the requested scopes. +* It can call back with `false` to indicate that the requested scopes are invalid, unknown, or exceed the set of scopes + that should be granted to the given credentials. +* It can call back with an array to grant a different set of scopes. +* It can call back with an error if there was some internal server error while granting scopes. + +In the cases of `false` or an internal server error, you should probably revoke the token before calling back, as the +server will send the user an error response, instead of a successful token grant. ### Other Options @@ -152,7 +181,7 @@ A secret resource that only authenticated users can access. * If a valid token is supplied in the Authorization header, `req.username` is truthy, and the app sends the secret data. -* If no token is supplied, `req.username` is `null`, so the application uses `res.sendUnauthorized()` to send a nice +* If no token is supplied, `req.username` is `null`, so the application uses `res.sendUnauthenticated()` to send a nice 401 error with `WWW-Authenticate` and `Link` headers. * If an invalid token is supplied, Restify–OAuth2 intercepts the request before it gets to the application, and sends an appropriate 400 or 401 error. @@ -168,6 +197,7 @@ A secret resource that only authenticated users can access. [oauth2-token-rel]: http://tools.ietf.org/html/draft-wmills-oauth-lrdd-07#section-3.2 [web-linking]: http://tools.ietf.org/html/rfc5988 [www-authenticate]: http://tools.ietf.org/html/rfc2617#section-3.2.1 +[scope]: http://tools.ietf.org/html/rfc6749#section-3.3 [example ROPC hooks]: https://github.com/domenic/restify-oauth2/blob/master/examples/ropc/hooks.js [example CC hooks]: https://github.com/domenic/restify-oauth2/blob/master/examples/cc/hooks.js [example servers]: https://github.com/domenic/restify-oauth2/tree/master/examples diff --git a/node_modules/restify-oauth2/lib/cc/grantToken.js b/node_modules/restify-oauth2/lib/cc/grantToken.js index 2aa4b42..c29e21f 100644 --- a/node_modules/restify-oauth2/lib/cc/grantToken.js +++ b/node_modules/restify-oauth2/lib/cc/grantToken.js @@ -1,57 +1,29 @@ "use strict"; -var restify = require("restify"); -var _ = require("underscore"); +var validateGrantTokenRequest = require("../common/validateGrantTokenRequest"); +var finishGrantingToken = require("../common/finishGrantingToken"); +var makeOAuthError = require("../common/makeOAuthError"); module.exports = function grantToken(req, res, next, options) { - function sendOAuthError(errorClass, errorType, errorDescription) { - var body = { error: errorType, error_description: errorDescription }; - var error = new restify[errorClass + "Error"]({ message: errorDescription, body: body }); - next(error); - } - - function sendBadRequestError(type, description) { - sendOAuthError("BadRequest", type, description); - } - - function sendUnauthorizedError(description) { - res.header("WWW-Authenticate", "Basic realm=\"" + description + "\""); - sendOAuthError("Unauthorized", "invalid_client", description); - } - - - if (!req.body || typeof req.body !== "object") { - return sendBadRequestError("invalid_request", "Must supply a body."); - } - - if (!_.has(req.body, "grant_type")) { - return sendBadRequestError("invalid_request", "Must specify grant_type field."); - } - - if (req.body.grant_type !== "client_credentials") { - return sendBadRequestError("unsupported_grant_type", "Only grant_type=client_credentials is supported."); - } - - if (!req.authorization || !req.authorization.basic) { - return sendBadRequestError("invalid_request", "Must include a basic access authentication header."); + if (!validateGrantTokenRequest("client_credentials", req, next)) { + return; } var clientId = req.authorization.basic.username; var clientSecret = req.authorization.basic.password; + var credentials = { clientId: clientId, clientSecret: clientSecret }; - options.hooks.grantClientToken(clientId, clientSecret, function (error, token) { + options.hooks.grantClientToken(credentials, req, function (error, token) { if (error) { return next(error); } if (!token) { - return sendUnauthorizedError("Client ID and secret did not authenticate."); + res.header("WWW-Authenticate", "Basic realm=\"Client ID and secret did not authenticate.\""); + return next(makeOAuthError("Unauthorized", "invalid_client", "Client ID and secret did not authenticate.")); } - res.send({ - access_token: token, - token_type: "Bearer", - expires_in: options.tokenExpirationTime - }); + var allCredentials = { clientId: clientId, clientSecret: clientSecret, token: token }; + finishGrantingToken(allCredentials, token, options, req, res, next); }); }; diff --git a/node_modules/restify-oauth2/lib/cc/index.js b/node_modules/restify-oauth2/lib/cc/index.js index b1ff8a3..a2ea112 100644 --- a/node_modules/restify-oauth2/lib/cc/index.js +++ b/node_modules/restify-oauth2/lib/cc/index.js @@ -4,7 +4,6 @@ var makeSetup = require("../common/makeSetup"); var grantToken = require("./grantToken"); var grantTypes = "client_credentials"; -var reqPropertyName = "clientId"; var requiredHooks = ["grantClientToken", "authenticateToken"]; -module.exports = makeSetup(grantTypes, reqPropertyName, requiredHooks, grantToken); +module.exports = makeSetup(grantTypes, requiredHooks, grantToken); diff --git a/node_modules/restify-oauth2/lib/common/makeErrorSenders.js b/node_modules/restify-oauth2/lib/common/makeErrorSenders.js index adf118e..7920b15 100644 --- a/node_modules/restify-oauth2/lib/common/makeErrorSenders.js +++ b/node_modules/restify-oauth2/lib/common/makeErrorSenders.js @@ -28,45 +28,59 @@ module.exports = function makeErrorSenders(grantTypes) { res.header("WWW-Authenticate", "Bearer realm=\"" + options.wwwAuthenticateRealm + "\""); } - function sendWithHeaders(res, options, error) { + function sendWithHeaders(res, next, options, error) { if (error.statusCode in statusCodesToErrorCodes) { setLinkHeader(res, options); setWwwAuthenticateHeader(res, options, error); } - res.send(error); + next(error); } - function sendAuthorizationRequired(res, options, error) { + function sendAuthenticationRequired(res, next, options, error) { setLinkHeader(res, options); setWwwAuthenticateHeaderWithoutErrorInfo(res, options); - res.send(error); + next(error); + } + + function sendInsufficientAuthorization(res, next, options, error) { + setLinkHeader(res, options); + next(error); } return { sendWithHeaders: sendWithHeaders, - tokenRequired: function (res, options, message) { + tokenRequired: function (res, next, options, message) { if (message === undefined) { message = "Bearer token required. Follow the oauth2-token link to get one!"; } - sendWithHeaders(res, options, new restify.BadRequestError(message)); + sendWithHeaders(res, next, options, new restify.BadRequestError(message)); + }, + + authenticationRequired: function (res, next, options, message) { + if (message === undefined) { + message = "Authentication via bearer token required. Follow the oauth2-token link to get one!"; + } + + sendAuthenticationRequired(res, next, options, new restify.UnauthorizedError(message)); }, - authorizationRequired: function (res, options, message) { + insufficientAuthorization: function (res, next, options, message) { if (message === undefined) { - message = "Authorization via bearer token required. Follow the oauth2-token link to get one!"; + message = "Insufficient authorization. Follow the oauth2-token link to get a token with more " + + "authorization!"; } - sendAuthorizationRequired(res, options, new restify.UnauthorizedError(message)); + sendInsufficientAuthorization(res, next, options, new restify.ForbiddenError(message)); }, - tokenInvalid: function (res, options, message) { + tokenInvalid: function (res, next, options, message) { if (message === undefined) { message = "Bearer token invalid. Follow the oauth2-token link to get a valid one!"; } - sendWithHeaders(res, options, new restify.UnauthorizedError(message)); + sendWithHeaders(res, next, options, new restify.UnauthorizedError(message)); } }; }; diff --git a/node_modules/restify-oauth2/lib/common/makeHandleAuthenticatedResource.js b/node_modules/restify-oauth2/lib/common/makeHandleAuthenticatedResource.js index 828886b..c706b9a 100644 --- a/node_modules/restify-oauth2/lib/common/makeHandleAuthenticatedResource.js +++ b/node_modules/restify-oauth2/lib/common/makeHandleAuthenticatedResource.js @@ -8,26 +8,25 @@ function getBearerToken(req) { return hasBearerToken(req) ? req.authorization.credentials : null; } -module.exports = function makeHandleAuthenticatedResource(reqPropertyName, errorSenders) { +module.exports = function makeHandleAuthenticatedResource(errorSenders) { return function handleAuthenticatedResource(req, res, next, options) { var token = getBearerToken(req); if (!token) { - return errorSenders.tokenRequired(res, options); + return errorSenders.tokenRequired(res, next, options); } req.pause(); - options.hooks.authenticateToken(token, function (error, credential) { + options.hooks.authenticateToken(token, req, function (error, authenticated) { req.resume(); if (error) { - return errorSenders.sendWithHeaders(res, options, error); + return errorSenders.sendWithHeaders(res, next, options, error); } - if (!credential) { - return errorSenders.tokenInvalid(res, options); + if (!authenticated) { + return errorSenders.tokenInvalid(res, next, options); } - req[reqPropertyName] = credential; next(); }); }; diff --git a/node_modules/restify-oauth2/lib/common/makeSetup.js b/node_modules/restify-oauth2/lib/common/makeSetup.js index b5368ca..3348683 100644 --- a/node_modules/restify-oauth2/lib/common/makeSetup.js +++ b/node_modules/restify-oauth2/lib/common/makeSetup.js @@ -2,9 +2,9 @@ var _ = require("underscore"); -module.exports = function makeSetup(grantTypes, reqPropertyName, requiredHooks, grantToken) { +module.exports = function makeSetup(grantTypes, requiredHooks, grantToken) { var errorSenders = require("./makeErrorSenders")(grantTypes); - var handleAuthenticatedResource = require("./makeHandleAuthenticatedResource")(reqPropertyName, errorSenders); + var handleAuthenticatedResource = require("./makeHandleAuthenticatedResource")(errorSenders); return function restifyOAuth2Setup(server, options) { if (typeof options.hooks !== "object" || options.hooks === null) { @@ -16,14 +16,22 @@ module.exports = function makeSetup(grantTypes, reqPropertyName, requiredHooks, } }); + if (typeof options.hooks.grantScopes !== "function") { + // By default, grant no scopes. + options.hooks.grantScopes = function (credentials, scopesRequested, req, cb) { + cb(null, []); + }; + } + options = _.defaults(options, { tokenEndpoint: "/token", wwwAuthenticateRealm: "Who goes there?", tokenExpirationTime: Infinity }); - // Allow `tokenExpirationTime: Infinity` (like above), but translate it into `undefined` so that `JSON.stringify` - // omits it entirely when we write out the response as `JSON.stringify({ expires_in: tokenExpirationTime, ... })`. + // Allow `tokenExpirationTime: Infinity` (like above), but translate it into `undefined` so that + // `JSON.stringify` omits it entirely when we write out the response as + // `JSON.stringify({ expires_in: tokenExpirationTime, ... })`. if (options.tokenExpirationTime === Infinity) { options.tokenExpirationTime = undefined; } @@ -33,8 +41,12 @@ module.exports = function makeSetup(grantTypes, reqPropertyName, requiredHooks, }); server.use(function ccOAuth2Plugin(req, res, next) { + res.sendUnauthenticated = function (message) { + errorSenders.authenticationRequired(res, res.send.bind(res), options, message); + }; + res.sendUnauthorized = function (message) { - errorSenders.authorizationRequired(res, options, message); + errorSenders.insufficientAuthorization(res, res.send.bind(res), options, message); }; if (req.method === "POST" && req.path() === options.tokenEndpoint) { @@ -43,6 +55,7 @@ module.exports = function makeSetup(grantTypes, reqPropertyName, requiredHooks, } else if (req.authorization.scheme) { handleAuthenticatedResource(req, res, next, options); } else { + // Otherwise Restify will set it by default, which gives false positives for application code. req.username = null; next(); } diff --git a/node_modules/restify-oauth2/lib/ropc/grantToken.js b/node_modules/restify-oauth2/lib/ropc/grantToken.js index fa6ed6e..a26d2fa 100644 --- a/node_modules/restify-oauth2/lib/ropc/grantToken.js +++ b/node_modules/restify-oauth2/lib/ropc/grantToken.js @@ -1,78 +1,62 @@ "use strict"; -var restify = require("restify"); -var _ = require("underscore"); +var validateGrantTokenRequest = require("../common/validateGrantTokenRequest"); +var finishGrantingToken = require("../common/finishGrantingToken"); +var makeOAuthError = require("../common/makeOAuthError"); module.exports = function grantToken(req, res, next, options) { - function sendOAuthError(errorClass, errorType, errorDescription) { - var body = { error: errorType, error_description: errorDescription }; - var error = new restify[errorClass + "Error"]({ message: errorDescription, body: body }); - next(error); - } - - function sendBadRequestError(type, description) { - sendOAuthError("BadRequest", type, description); - } - - function sendUnauthorizedError(description) { + function sendUnauthorizedError(type, description) { res.header("WWW-Authenticate", "Basic realm=\"" + description + "\""); - sendOAuthError("Unauthorized", "invalid_client", description); - } - - - if (!req.body || typeof req.body !== "object") { - return sendBadRequestError("invalid_request", "Must supply a body."); + next(makeOAuthError("Unauthorized", type, description)); } - if (!_.has(req.body, "grant_type")) { - return sendBadRequestError("invalid_request", "Must specify grant_type field."); - } - if (req.body.grant_type !== "password") { - return sendBadRequestError("unsupported_grant_type", "Only grant_type=password is supported."); + if (!validateGrantTokenRequest("password", req, next)) { + return; } var username = req.body.username; var password = req.body.password; if (!username) { - return sendBadRequestError("invalid_request", "Must specify username field."); + return next(makeOAuthError("BadRequest", "invalid_request", "Must specify username field.")); } if (!password) { - return sendBadRequestError("invalid_request", "Must specify password field."); - } - - if (!req.authorization || !req.authorization.basic) { - return sendBadRequestError("invalid_request", "Must include a basic access authentication header."); + return next(makeOAuthError("BadRequest", "invalid_request", "Must specify password field.")); } var clientId = req.authorization.basic.username; var clientSecret = req.authorization.basic.password; + var clientCredentials = { clientId: clientId, clientSecret: clientSecret }; - options.hooks.validateClient(clientId, clientSecret, function (error, result) { + options.hooks.validateClient(clientCredentials, req, function (error, result) { if (error) { return next(error); } if (!result) { - return sendUnauthorizedError("Client ID and secret did not validate."); + return sendUnauthorizedError("invalid_client", "Client ID and secret did not validate."); } - options.hooks.grantUserToken(username, password, function (error, token) { + var allCredentials = { clientId: clientId, clientSecret: clientSecret, username: username, password: password }; + options.hooks.grantUserToken(allCredentials, req, function (error, token) { if (error) { return next(error); } if (!token) { - return sendUnauthorizedError("Username and password did not authenticate."); + return sendUnauthorizedError("invalid_grant", "Username and password did not authenticate."); } - res.send({ - access_token: token, - token_type: "Bearer", - expires_in: options.tokenExpirationTime - }); + var allCredentials = { + clientId: clientId, + clientSecret: clientSecret, + username: username, + password: password, + token: token + }; + finishGrantingToken(allCredentials, token, options, req, res, next); }); }); }; diff --git a/node_modules/restify-oauth2/lib/ropc/index.js b/node_modules/restify-oauth2/lib/ropc/index.js index 0fd8bd0..0f637ff 100644 --- a/node_modules/restify-oauth2/lib/ropc/index.js +++ b/node_modules/restify-oauth2/lib/ropc/index.js @@ -4,7 +4,6 @@ var makeSetup = require("../common/makeSetup"); var grantToken = require("./grantToken"); var grantTypes = "password"; -var reqPropertyName = "username"; var requiredHooks = ["validateClient", "grantUserToken", "authenticateToken"]; -module.exports = makeSetup(grantTypes, reqPropertyName, requiredHooks, grantToken); +module.exports = makeSetup(grantTypes, requiredHooks, grantToken); diff --git a/node_modules/restify-oauth2/package.json b/node_modules/restify-oauth2/package.json index 0a6bb69..f0cb5fd 100644 --- a/node_modules/restify-oauth2/package.json +++ b/node_modules/restify-oauth2/package.json @@ -6,14 +6,15 @@ "oauth", "oauth2", "rest", + "authorization", "authentication", "api" ], - "version": "2.1.0", + "version": "4.0.0", "author": { "name": "Domenic Denicola", "email": "domenic@domenicdenicola.com", - "url": "http://domenicdenicola.com" + "url": "http://domenic.me/" }, "license": "WTFPL", "repository": { @@ -25,11 +26,12 @@ }, "main": "lib/index.js", "scripts": { - "test": "npm run test-ropc-unit && npm run test-cc-unit && npm run test-ropc-integration && npm run test-cc-integration", + "test": "npm run test-ropc-unit && npm run test-cc-unit && npm run test-ropc-integration && npm run test-cc-integration && npm run test-cc-with-scopes-integration", "test-ropc-unit": "mocha test/ropc-unit.coffee --reporter spec --compilers coffee:coffee-script", "test-cc-unit": "mocha test/cc-unit.coffee --reporter spec --compilers coffee:coffee-script", "test-ropc-integration": "vows test/ropc-integration.coffee --spec", "test-cc-integration": "vows test/cc-integration.coffee --spec", + "test-cc-with-scopes-integration": "vows test/cc-with-scopes-integration.coffee --spec", "lint": "jshint lib && jshint examples" }, "dependencies": { @@ -39,18 +41,22 @@ "restify": "2.x" }, "devDependencies": { - "api-easy": ">= 0.3.8", - "coffee-script": ">= 1.6.2", - "chai": ">= 1.6.0", - "jshint": ">= 2.1.2", - "mocha": ">= 1.9.0", - "restify": ">= 2.5.1", - "sinon": ">= 1.7.2", - "sinon-chai": ">= 2.4.0", - "vows": ">= 0.7.0" - }, - "readme": "# OAuth 2 Endpoints for Restify\n\nThis package provides a *very simple* OAuth 2.0 endpoint for the [Restify][] framework. In particular, it implements\nthe [Client Credentials][cc] and [Resource Owner Password Credentials][ropc] flows only.\n\n## What You Get\n\nIf you provide Restify–OAuth2 with the appropriate hooks, it will:\n\n* Set up a [token endpoint][], which returns [access token responses][token-endpoint-success] or\n [correctly-formatted error responses][token-endpoint-error].\n* For all other resources, when an access token is [sent via the `Authorization` header][send-token], it will validate\n it:\n * If the token fails validation, it will send [an appropriate 400 or 401 error response][token-usage-error], with a\n [`WWW-Authenticate`][www-authenticate] header and a [`Link`][web-linking] [`rel=\"oauth2-token\"`][oauth2-token-rel]\n header pointing to the token endpoint.\n * Otherwise, it will set either `req.clientId` or `req.username` (depending on which flow you are using) to a value\n determined by looking up the access token.\n* If no access token is sent, it simply sets `req.clientId`/`req.username` to `null`:\n * You can check for this whenever there is a resource you want to protect.\n * If the user tries to access a protected resource, you can use Restify–OAuth2's `res.sendUnauthorized()` to send\n appropriate 401 errors with helpful `WWW-Authenticate` and `Link` headers.\n\n## Use and Configuration\n\nTo use Restify–OAuth2, you'll need to pass it your server plus some options, including the hooks discussed below.\nRestify–OAuth2 also depends on the built-in `authorizationParser` and `bodyParser` plugins, the latter with `mapParams`\nset to `false`. So in short, it looks like this:\n\n```js\nvar restify = require(\"restify\");\nvar restifyOAuth2 = require(\"restify-oauth2\");\n\nvar server = restify.createServer({ name: \"My cool server\", version: \"1.0.0\" });\nserver.use(restify.authorizationParser());\nserver.use(restify.bodyParser({ mapParams: false }));\n\nrestifyOAuth2.cc(server, options);\n// or\nrestifyOAuth2.ropc(server, options);\n```\n\nUnfortunately, Restify–OAuth2 can't be a simple Restify plugin. It needs to install a route for the token\nendpoint, whereas plugins simply run on every request and don't modify the server's routing table.\n\n## Options\n\nThe options you pass to Restify–OAuth2 depend heavily on which of the two flows you are choosing. There are some\noptions common to both flows, but the `options.hooks` hash will vary depending on the flow. Once you provide the\nappropriate hooks, you get an OAuth 2 implementation for free.\n\n### Client Credentials Hooks\n\nThe idea behind this very simple OAuth 2 flow is that your API clients identify themselves with client IDs and secrets,\nand if those values authenticate, you grant them an access token they can use for further requests. The advantage of\nthis over simply requiring basic access authentication headers on every request is that now you can set those tokens to\nexpire, or revoke them if they fall in to the wrong hands.\n\nTo install Restify–OAuth2's client credentials flow into your infrastructure, you will need to provide it with the\nfollowing hooks in the `options.hooks` hash. You can see some [example CC hooks][] in the demo application.\n\n#### `grantClientToken(clientId, clientSecret, cb)`\n\nChecks that the API client is authorized to use your API, and has the correct secret. It should call back with a new\ntoken for that client if so, or `false` if the credentials are incorrect. It can also call back with an error if there\nwas some internal server error while validating the credentials.\n\n#### `authenticateToken(token, cb)`\n\nChecks that a token is valid, i.e. that it was granted in the past by `grantClientToken`. It should call back with the\nclient ID for that token if so, or `false` if the token is invalid. It can also call back with an error if there\nwas some internal server error while looking up the token.\n\n### Resource Owner Password Credentials Hooks\n\nThe idea behind this OAuth 2 flow is that your API clients will prompt the user for their username and password, and\nsend those to your API in exchange for an access token. This has some advantages over simply sending the user's\ncredentials to the server directly. For example, it obviates the need for the client to store the credentials, and\nallows expiration and revocation of tokens. However, it does imply that you trust your API clients, since they will\nhave at least one-time access to the user's credentials.\n\nTo install Restify–OAuth2's resource owner password credentials flow into your infrastructure, you will need to\nprovide it with the following hooks in the `options.hooks` hash. You can see some [example ROPC hooks][] in the demo\napplication.\n\n#### `validateClient(clientId, clientSecret, cb)`\n\nChecks that the API client is authorized to use your API, and has the correct secret. It should call back with `true`\nor `false` depending on the result of the check. It can also call back with an error if there was some internal server\nerror while doing the check.\n\n#### `grantUserToken(username, password, cb)`\n\nChecks that the API client is authenticating on behalf of a real user with correct credentials. It should call back\nwith a new token for that user if so, or `false` if the credentials are incorrect. It can also call back with an error\nif there was some internal server error while validating the credentials.\n\n#### `authenticateToken(token, cb)`\n\nChecks that a token is valid, i.e. that it was granted in the past by `grantUserToken`. It should call back with the\nusername for that token if so, or `false` if the token is invalid. It can also call back with an error if there\nwas some internal server error while looking up the token.\n\n### Other Options\n\nThe `hooks` hash is the only required option, but the following are also available for tweaking:\n\n* `tokenEndpoint`: the location at which the token endpoint should be created. Defaults to `\"/token\"`.\n* `wwwAuthenticateRealm`: the value of the \"Realm\" challenge in the `WWW-Authenticate` header. Defaults to\n `\"Who goes there?\"`.\n* `tokenExpirationTime`: the value returned for the `expires_in` component of the response from the token endpoint.\n Note that this is *only* the value reported; you are responsible for keeping track of token expiration yourself and\n calling back with `false` from `authenticateToken` when the token expires. Defaults to `Infinity`.\n\n## What Does That Look Like?\n\nOK, let's try something a bit more concrete. If you check out the [example servers][] used in the integration tests,\nyou'll see our setup. Here we'll walk you through the more complicated resource owner password credentials example,\nbut the idea for the client credentials example is very similar.\n\n## /\n\nThe initial resource, at which people enter the server.\n\n* If a valid token is supplied in the `Authorization` header, `req.username` is truthy, and the app responds with\n links to `/public` and `/secret`.\n* If no token is supplied, the app responds with links to `/token` and `/public`.\n* If an invalid token is supplied, Restify–OAuth2 intercepts the request before it gets to the application, and sends\n an appropriate 400 or 401 error.\n\n## /token\n\nThe token endpoint, managed entirely by Restify–OAuth2. It generates tokens for a given client ID/client\nsecret/username/password combination.\n\nThe client validation and token-generation logic is provided by the application, but none of the ceremony necessary for\nOAuth 2 conformance, error handling, etc. is present in the application code: Restify–OAuth2 takes care of all of that.\n\n## /public\n\nA public resource anyone can access.\n\n* If a valid token is supplied in the Authorization header, `req.username` contains the username, and the app uses\n that to send a personalized response.\n* If no token is supplied, `req.username` is `null`. The app still sends a response, just without personalizing.\n* If an invalid token is supplied, Restify–OAuth2 intercepts the request before it gets to the application, and sends\n an appropriate 400 or 401 error.\n\n## /secret\n\nA secret resource that only authenticated users can access.\n\n* If a valid token is supplied in the Authorization header, `req.username` is truthy, and the app sends the secret\n data.\n* If no token is supplied, `req.username` is `null`, so the application uses `res.sendUnauthorized()` to send a nice\n 401 error with `WWW-Authenticate` and `Link` headers.\n* If an invalid token is supplied, Restify–OAuth2 intercepts the request before it gets to the application, and sends\n an appropriate 400 or 401 error.\n\n[Restify]: http://mcavage.github.com/node-restify/\n[cc]: http://tools.ietf.org/html/rfc6749#section-1.3.4\n[ropc]: http://tools.ietf.org/html/rfc6749#section-1.3.3\n[token endpoint]: http://tools.ietf.org/html/rfc6749#section-3.2\n[token-endpoint-success]: http://tools.ietf.org/html/rfc6749#section-5.1\n[token-endpoint-error]: http://tools.ietf.org/html/rfc6749#section-5.2\n[send-token]: http://tools.ietf.org/html/rfc6750#section-2.1\n[token-usage-error]: http://tools.ietf.org/html/rfc6750#section-3.1\n[oauth2-token-rel]: http://tools.ietf.org/html/draft-wmills-oauth-lrdd-07#section-3.2\n[web-linking]: http://tools.ietf.org/html/rfc5988\n[www-authenticate]: http://tools.ietf.org/html/rfc2617#section-3.2.1\n[example ROPC hooks]: https://github.com/domenic/restify-oauth2/blob/master/examples/ropc/hooks.js\n[example CC hooks]: https://github.com/domenic/restify-oauth2/blob/master/examples/cc/hooks.js\n[example servers]: https://github.com/domenic/restify-oauth2/tree/master/examples\n", + "api-easy": "~0.3.8", + "coffee-script": "1.6.3", + "chai": "^1.9.0", + "jshint": "^2.4.4", + "mocha": "~1.17.1", + "restify": "^2.6.3", + "sinon": "^1.9.0", + "sinon-chai": "^2.5.0", + "vows": "~0.7.0" + }, + "readme": "# OAuth 2 Endpoints for Restify\n\nThis package provides a *very simple* OAuth 2.0 endpoint for the [Restify][] framework. In particular, it implements\nthe [Client Credentials][cc] and [Resource Owner Password Credentials][ropc] flows only.\n\n## What You Get\n\nIf you provide Restify–OAuth2 with the appropriate hooks, it will:\n\n* Set up a [token endpoint][], which returns [access token responses][token-endpoint-success] or\n [correctly-formatted error responses][token-endpoint-error].\n* For all other resources, when an access token is [sent via the `Authorization` header][send-token], it will validate\n it:\n * If the token fails validation, it will send [an appropriate 400 or 401 error response][token-usage-error], with a\n [`WWW-Authenticate`][www-authenticate] header and a [`Link`][web-linking] [`rel=\"oauth2-token\"`][oauth2-token-rel]\n header pointing to the token endpoint.\n * Otherwise, you can use your `authenticateToken` and `grantScopes` hooks to set properties on the request object for\n your routes to check later.\n* If no access token is sent, it ensures that `req.username` is set to `null`; furthermore, none of your hooks are\n called, so you can be sure that no properties that they set are present.\n * You can then check for these conditions whenever there is a resource you want to protect.\n * If the user tries to access a protected resource, you can use Restify–OAuth2's `res.sendUnauthenticated()` to send\n appropriate 401 errors with helpful `WWW-Authenticate` and `Link` headers, or its `res.sendUnauthorized()` to send\n appropriate 403 errors with similar headers.\n\n## Use and Configuration\n\nTo use Restify–OAuth2, you'll need to pass it your server plus some options, including the hooks discussed below.\nRestify–OAuth2 also depends on the built-in `authorizationParser` and `bodyParser` plugins, the latter with `mapParams`\nset to `false`. So in short, it looks like this:\n\n```js\nvar restify = require(\"restify\");\nvar restifyOAuth2 = require(\"restify-oauth2\");\n\nvar server = restify.createServer({ name: \"My cool server\", version: \"1.0.0\" });\nserver.use(restify.authorizationParser());\nserver.use(restify.bodyParser({ mapParams: false }));\n\nrestifyOAuth2.cc(server, options);\n// or\nrestifyOAuth2.ropc(server, options);\n```\n\nUnfortunately, Restify–OAuth2 can't be a simple Restify plugin. It needs to install a route for the token\nendpoint, whereas plugins simply run on every request and don't modify the server's routing table.\n\n## Options\n\nThe options you pass to Restify–OAuth2 depend heavily on which of the two flows you are choosing. There are some\noptions common to both flows, but the `options.hooks` hash will vary depending on the flow. Once you provide the\nappropriate hooks, you get an OAuth 2 implementation for free.\n\n### Client Credentials Hooks\n\nThe idea behind this very simple OAuth 2 flow is that your API clients identify themselves with client IDs and secrets,\nand if those values authenticate, you grant them an access token they can use for further requests. The advantage of\nthis over simply requiring basic access authentication headers on every request is that now you can set those tokens to\nexpire, or revoke them if they fall in to the wrong hands.\n\nTo install Restify–OAuth2's client credentials flow into your infrastructure, you will need to provide it with the\nfollowing hooks in the `options.hooks` hash. You can see some [example CC hooks][] in the demo application.\n\n#### `grantClientToken({ clientId, clientSecret }, req, cb)`\n\nChecks that the API client is authorized to use your API, and has the correct secret. It should call back with a new\ntoken for that client if so, or `false` if the credentials are incorrect. It can also call back with an error if there\nwas some internal server error while validating the credentials.\n\n#### `authenticateToken(token, req, cb)`\n\nChecks that a token is valid, i.e. that it was granted in the past by `grantClientToken`. It should call back with\n`true` if so, or `false` if the token is invalid. It can also call back with an error if there was some internal\nserver error while looking up the token. If the token is valid, it is likely useful to set a property on the request\nobject indicating that so that your routes can check it later, e.g. `req.authenticated = true` or\n`req.clientId = lookupClientIdFrom(token)`.\n\n### Resource Owner Password Credentials Hooks\n\nThe idea behind this OAuth 2 flow is that your API clients will prompt the user for their username and password, and\nsend those to your API in exchange for an access token. This has some advantages over simply sending the user's\ncredentials to the server directly. For example, it obviates the need for the client to store the credentials, and\nallows expiration and revocation of tokens. However, it does imply that you trust your API clients, since they will\nhave at least one-time access to the user's credentials.\n\nTo install Restify–OAuth2's resource owner password credentials flow into your infrastructure, you will need to\nprovide it with the following hooks in the `options.hooks` hash. You can see some [example ROPC hooks][] in the demo\napplication.\n\n#### `validateClient({ clientId, clientSecret }, req, cb)`\n\nChecks that the API client is authorized to use your API, and has the correct secret. It should call back with `true`\nor `false` depending on the result of the check. It can also call back with an error if there was some internal server\nerror while doing the check.\n\n#### `grantUserToken({ clientId, clientSecret, username, password }, req, cb)`\n\nChecks that the API client is authenticating on behalf of a real user with correct credentials. It should call back\nwith a new token for that user if so, or `false` if the credentials are incorrect. It can also call back with an error\nif there was some internal server error while validating the credentials.\n\n#### `authenticateToken(token, req, cb)`\n\nChecks that a token is valid, i.e. that it was granted in the past by `grantUserToken`. It should call back with\n`true` if so, or `false` if the token is invalid. It can also call back with an error if there was some internal\nserver error while looking up the token. If the token is valid, it is likely useful to set a property on the request\nobject indicating that so that your routes can check it later, e.g. `req.authenticated = true` or\n`req.username = lookupUsernameFrom(token)`.\n\n### Scope-Granting Hook\n\nOptionally, it is possible to limit the [scope][] of the issued tokens, so that you can implement an authorization\nsystem in your application in addition to simple authentication.\n\n#### `grantScopes(credentials, scopesRequested, req, cb)`\n\nThis hook is called after the token has been granted by `authenticateToken`. In the client credentials flow,\n`credentials` will be `{ clientId, clientSecret, token }`; in the resource owner password credentials flow, it will be\n`{ clientId, clientSecret, username, password, token }`. In both cases, `scopesRequested` will be an array of the\nrequested scopes.\n\nThis hook can respond in several ways:\n\n* It can call back with `true` to grant all of the requested scopes.\n* It can call back with `false` to indicate that the requested scopes are invalid, unknown, or exceed the set of scopes\n that should be granted to the given credentials.\n* It can call back with an array to grant a different set of scopes.\n* It can call back with an error if there was some internal server error while granting scopes.\n\nIn the cases of `false` or an internal server error, you should probably revoke the token before calling back, as the\nserver will send the user an error response, instead of a successful token grant.\n\n### Other Options\n\nThe `hooks` hash is the only required option, but the following are also available for tweaking:\n\n* `tokenEndpoint`: the location at which the token endpoint should be created. Defaults to `\"/token\"`.\n* `wwwAuthenticateRealm`: the value of the \"Realm\" challenge in the `WWW-Authenticate` header. Defaults to\n `\"Who goes there?\"`.\n* `tokenExpirationTime`: the value returned for the `expires_in` component of the response from the token endpoint.\n Note that this is *only* the value reported; you are responsible for keeping track of token expiration yourself and\n calling back with `false` from `authenticateToken` when the token expires. Defaults to `Infinity`.\n\n## What Does That Look Like?\n\nOK, let's try something a bit more concrete. If you check out the [example servers][] used in the integration tests,\nyou'll see our setup. Here we'll walk you through the more complicated resource owner password credentials example,\nbut the idea for the client credentials example is very similar.\n\n## /\n\nThe initial resource, at which people enter the server.\n\n* If a valid token is supplied in the `Authorization` header, `req.username` is truthy, and the app responds with\n links to `/public` and `/secret`.\n* If no token is supplied, the app responds with links to `/token` and `/public`.\n* If an invalid token is supplied, Restify–OAuth2 intercepts the request before it gets to the application, and sends\n an appropriate 400 or 401 error.\n\n## /token\n\nThe token endpoint, managed entirely by Restify–OAuth2. It generates tokens for a given client ID/client\nsecret/username/password combination.\n\nThe client validation and token-generation logic is provided by the application, but none of the ceremony necessary for\nOAuth 2 conformance, error handling, etc. is present in the application code: Restify–OAuth2 takes care of all of that.\n\n## /public\n\nA public resource anyone can access.\n\n* If a valid token is supplied in the Authorization header, `req.username` contains the username, and the app uses\n that to send a personalized response.\n* If no token is supplied, `req.username` is `null`. The app still sends a response, just without personalizing.\n* If an invalid token is supplied, Restify–OAuth2 intercepts the request before it gets to the application, and sends\n an appropriate 400 or 401 error.\n\n## /secret\n\nA secret resource that only authenticated users can access.\n\n* If a valid token is supplied in the Authorization header, `req.username` is truthy, and the app sends the secret\n data.\n* If no token is supplied, `req.username` is `null`, so the application uses `res.sendUnauthenticated()` to send a nice\n 401 error with `WWW-Authenticate` and `Link` headers.\n* If an invalid token is supplied, Restify–OAuth2 intercepts the request before it gets to the application, and sends\n an appropriate 400 or 401 error.\n\n[Restify]: http://mcavage.github.com/node-restify/\n[cc]: http://tools.ietf.org/html/rfc6749#section-1.3.4\n[ropc]: http://tools.ietf.org/html/rfc6749#section-1.3.3\n[token endpoint]: http://tools.ietf.org/html/rfc6749#section-3.2\n[token-endpoint-success]: http://tools.ietf.org/html/rfc6749#section-5.1\n[token-endpoint-error]: http://tools.ietf.org/html/rfc6749#section-5.2\n[send-token]: http://tools.ietf.org/html/rfc6750#section-2.1\n[token-usage-error]: http://tools.ietf.org/html/rfc6750#section-3.1\n[oauth2-token-rel]: http://tools.ietf.org/html/draft-wmills-oauth-lrdd-07#section-3.2\n[web-linking]: http://tools.ietf.org/html/rfc5988\n[www-authenticate]: http://tools.ietf.org/html/rfc2617#section-3.2.1\n[scope]: http://tools.ietf.org/html/rfc6749#section-3.3\n[example ROPC hooks]: https://github.com/domenic/restify-oauth2/blob/master/examples/ropc/hooks.js\n[example CC hooks]: https://github.com/domenic/restify-oauth2/blob/master/examples/cc/hooks.js\n[example servers]: https://github.com/domenic/restify-oauth2/tree/master/examples\n", "readmeFilename": "README.md", - "_id": "restify-oauth2@2.1.0", - "_from": "restify-oauth2@2.x" + "_id": "restify-oauth2@4.0.0", + "_from": "restify-oauth2@4.0.0", + "dist": { + "shasum": "0548457a6a2efce9c055f763d80e1b5a61ffad13" + }, + "_resolved": "https://registry.npmjs.org/restify-oauth2/-/restify-oauth2-4.0.0.tgz" } diff --git a/node_modules/restify/CHANGES.md b/node_modules/restify/CHANGES.md index c96a69c..e85cf24 100644 --- a/node_modules/restify/CHANGES.md +++ b/node_modules/restify/CHANGES.md @@ -1,6 +1,68 @@ # restify Changelog -## Not Yet Released +## not yet released + +## 2.8.2 + +- #619 Default to url, if string provided to createClient +- #614 do not compute the MD5 Hash of a partial content +- #516 Allow an `options` object to be passed into the authorization plugin +- Updating dependencies +- #626 Add more built-in errors to doc +- #460 Provide direct access to https server options if needed +- #656 update qs + +## 2.8.1 + +- revert #604, work around by not removing client listener + +## 2.8.0 + +- #604 trap http client errors +- #598 Simplify and correct path segment regexp +- #570 Route matching should only prefer later routes if version is greater +- #564 Using req.accepts() according to implementation +- #504 Helper to render a route with given parameters (for hypermedia APIs) + +## 2.7.0 + +- #547 Added mapFiles option to bodyParser +- #552 PUT JsonClient test should use PUT not POST +- #550 Make router preflight code more readable +- #548 Allow custom handling of multipart data. + +## 2.6.3 + +- Hotfix for CORS plugin if no origin was set in the options + +## 2.6.2 + +- #508 add server option: `ciphers` to pass down to https(tls) +- #502 `server.on('request')` not emitting +- #496 static plugin incorrectly handling `directories`; revert back to 2.6.0 + version +- #495 don't override client response code with custom error object +- #494 socket connecting detection logic incorrect +- #492 client `false` needs to actually disable retries +- changed indent from four to eight +- #505 fix audit logger plugin bug +- #510 request timeout support +- #523 added Access-Control-Allow-Credentials to the preflight handler + +## 2.6.1 + +- #478 Add `req.timers` to audit logging plugin. +- #487 RequestCaptureStream: dumpDefault, haveNonRawStreams, zero ring after dump +- #407 - bunyan 0.21.3 +- Add CSV/TSV parser (Dominik Lessel) +- Add `req.timers`: a list of hrtime's for each handler +- Set TCP SO_KEEPALIVE when default KeepAliveAgent is on (client) + +## 2.6.0 + +- EXPERIMENTAL: Native websocket support via watershed (Josh Clulow) +- Pass entire route, not just route.name to `after` (Dingman) +- Type coercion bug in Cache Control API (Chris Cannell) ## 2.5.1 diff --git a/node_modules/restify/README.md b/node_modules/restify/README.md index f8a49d1..cbfe755 100644 --- a/node_modules/restify/README.md +++ b/node_modules/restify/README.md @@ -1,6 +1,10 @@ # restify [![Build Status](https://travis-ci.org/mcavage/node-restify.png)](https://travis-ci.org/mcavage/node-restify) +[![Gitter chat](https://badges.gitter.im/mcavage/node-restify.png)](https://gitter.im/mcavage/node-restify) +[![Dependency Status](https://david-dm.org/mcavage/node-restify.png)](https://david-dm.org/mcavage/node-restify) +[![devDependency Status](https://david-dm.org/mcavage/node-restify/dev-status.png)](https://david-dm.org/mcavage/node-restify#info=devDependencies) + [restify](http://mcavage.github.com/node-restify) is a smallish framework, similar to [express](http://expressjs.com) for building REST APIs. For full @@ -9,40 +13,42 @@ details, see http://mcavage.github.com/node-restify. # Usage ## Server - - var restify = require('restify'); - - var server = restify.createServer({ - name: 'myapp', - version: '1.0.0' - }); - server.use(restify.acceptParser(server.acceptable)); - server.use(restify.queryParser()); - server.use(restify.bodyParser()); - - server.get('/echo/:name', function (req, res, next) { - res.send(req.params); - return next(); - }); - - server.listen(8080, function () { - console.log('%s listening at %s', server.name, server.url); - }); +```javascript +var restify = require('restify'); + +var server = restify.createServer({ + name: 'myapp', + version: '1.0.0' +}); +server.use(restify.acceptParser(server.acceptable)); +server.use(restify.queryParser()); +server.use(restify.bodyParser()); + +server.get('/echo/:name', function (req, res, next) { + res.send(req.params); + return next(); +}); + +server.listen(8080, function () { + console.log('%s listening at %s', server.name, server.url); +}); +``` ## Client - - var assert = require('assert'); - var restify = require('restify'); - - var client = restify.createJsonClient({ - url: 'http://localhost:8080', - version: '~1.0' - }); - - client.get('/echo/mark', function (err, req, res, obj) { - assert.ifError(err); - console.log('Server returned: %j', obj); - }); +```javascript +var assert = require('assert'); +var restify = require('restify'); + +var client = restify.createJsonClient({ + url: 'http://localhost:8080', + version: '~1.0' +}); + +client.get('/echo/mark', function (err, req, res, obj) { + assert.ifError(err); + console.log('Server returned: %j', obj); +}); +``` # Installation diff --git a/node_modules/restify/bin/report-latency b/node_modules/restify/bin/report-latency index 896834f..21dbc92 100755 --- a/node_modules/restify/bin/report-latency +++ b/node_modules/restify/bin/report-latency @@ -10,214 +10,210 @@ var sprintf = require('util').format; var nopt = require('nopt'); - - ///--- Globals var BUCKETS = {}; var REQUEST_IDS = {}; var OPTS = { - 'average': Boolean, - 'help': Boolean, - 'end': Date, - 'max-latency': Number, - 'max-requests': Number, - 'output': String, - 'percentile': [Number, Array], - 'period': Number, - 'requests': Boolean, - 'start': Date + 'average': Boolean, + 'help': Boolean, + 'end': Date, + 'max-latency': Number, + 'max-requests': Number, + 'output': String, + 'percentile': [Number, Array], + 'period': Number, + 'requests': Boolean, + 'start': Date }; var SHORT_OPTS = { - 'a': ['--average'], - 'h': ['--help'], - 'i': ['--period'], - 'e': ['--end'], - 'l': ['--max-latency'], - 'n': ['--max-requests'], - 'o': ['--output'], - 'p': ['--percentile'], - 'r': ['--requests'], - 's': ['--start'] + 'a': ['--average'], + 'h': ['--help'], + 'i': ['--period'], + 'e': ['--end'], + 'l': ['--max-latency'], + 'n': ['--max-requests'], + 'o': ['--output'], + 'p': ['--percentile'], + 'r': ['--requests'], + 's': ['--start'] }; - - ///--- Functions function percentile(p, vals) { - p = parseInt(p, 10); - return vals[(Math.round(((p/100) * vals.length) + 1/2) - 1)].latency; + p = parseInt(p, 10); + return vals[(Math.round(((p / 100) * vals.length) + 1 / 2) - 1)].latency; } function report(buckets, output) { - Object.keys(buckets).sort(function (a, b) { - return parseInt(a, 10) - parseInt(b, 10); - }).forEach(function (k) { - var avg = 0; - var perc = []; - var req = buckets[k].length; - var sum = 0; - var t = Math.round(buckets[k]._time); - - buckets[k] = buckets[k].sort(function (a, b) { - return a.latency - b.latency; + Object.keys(buckets).sort(function (a, b) { + return parseInt(a, 10) - parseInt(b, 10); + }).forEach(function (k) { + var avg = 0; + var perc = []; + var req = buckets[k].length; + var sum = 0; + var t = Math.round(buckets[k]._time); + + buckets[k] = buckets[k].sort(function (a, b) { + return a.latency - b.latency; + }); + + buckets[k].forEach(function (v) { + sum += v.latency; + }); + + if (sum > 0 && req > 0) { + if (output.average) + output.average.push([t, Math.round(sum / req)]); + if (output.requests) + output.requests.push([t, buckets[k].length]); + Object.keys(output.percentile).forEach(function (p) { + var _p = percentile(p, buckets[k]); + output.percentile[p].push([t, _p]); }); - - buckets[k].forEach(function (v) { - sum += v.latency; - }); - - if (sum > 0 && req > 0) { - if (output.average) - output.average.push([t, Math.round(sum/req)]); - if (output.requests) - output.requests.push([t, buckets[k].length]); - Object.keys(output.percentile).forEach(function (p) { - var _p = percentile(p, buckets[k]); - output.percentile[p].push([t, _p]); - }); - } + } }); - return output; + return output; } function usage(code, message) { - var str = ''; - Object.keys(SHORT_OPTS).forEach(function(k) { - if (!Array.isArray(SHORT_OPTS[k])) - return; - - var opt = SHORT_OPTS[k][0].replace('--', ''); - var type = OPTS[opt].name || 'string'; - if (type && type === 'boolean') - type = ''; - type = type.toLowerCase(); - - str += ' [--' + opt + ' ' + type + ']'; - }); - str += ' [file ...]'; - - if (message) - console.error(message); - - console.error('usage: ' + path.basename(process.argv[1]) + str); - process.exit(code); + var str = ''; + Object.keys(SHORT_OPTS).forEach(function (k) { + if (!Array.isArray(SHORT_OPTS[k])) + return; + + var opt = SHORT_OPTS[k][0].replace('--', ''); + var type = OPTS[opt].name || 'string'; + if (type && type === 'boolean') + type = ''; + type = type.toLowerCase(); + + str += ' [--' + opt + ' ' + type + ']'; + }); + str += ' [file ...]'; + + if (message) + console.error(message); + + console.error('usage: ' + path.basename(process.argv[1]) + str); + process.exit(code); } - ///--- Mainline var parsed; try { - parsed = nopt(OPTS, SHORT_OPTS, process.argv, 2); + parsed = nopt(OPTS, SHORT_OPTS, process.argv, 2); } catch (e) { - usage(1, e.toString()); + usage(1, e.toString()); } if (parsed.help) - usage(0); + usage(0); if (!parsed.average && !parsed.percentile) - usage(1, '--average or --percentile required'); + usage(1, '--average or --percentile required'); if (parsed.argv.remain.length < 1) - usage(1, 'log file required'); + usage(1, 'log file required'); var config = { - average: parsed.average || false, - maxLatency: parsed['max-latency'] || 1000, - maxRequests: parsed['max-requests'] || 10000, - percentile: parsed.percentile || [], - period: parsed.period || 60, - requests: parsed.requests || false, - start: parsed.start ? (parsed.start.getTime() / 1000) : 0, - end: parsed.end ? (parsed.end.getTime() / 1000) : Number.MAX_VALUE + average: parsed.average || false, + maxLatency: parsed['max-latency'] || 1000, + maxRequests: parsed['max-requests'] || 10000, + percentile: parsed.percentile || [], + period: parsed.period || 60, + requests: parsed.requests || false, + start: parsed.start ? (parsed.start.getTime() / 1000) : 0, + end: parsed.end ? (parsed.end.getTime() / 1000) : Number.MAX_VALUE }; var buckets = {}; var done = 0; parsed.argv.remain.forEach(function (f) { - var stream = readline.createInterface({ - input: fs.createReadStream(f), - output: null - }) - stream.on('line', function (l) { - var record; - var t = -1; - - try { - record = JSON.parse(l); - } catch (e) {} - - if (!record) - return; - - var t = -1; - if (record.time) - t = (new Date(record.time).getTime() / 1000); - - if (record._audit !== true || - REQUEST_IDS[record.req_id] || - t < config.start || - t > config.end) { - - console.error('Skipping %s', l); - } - - REQUEST_IDS[record.req_id] = true; - record.time = t; - - var b = Math.round(record.time / config.period) + ''; - if (!buckets[b]) - buckets[b] = []; - - buckets[b].push(record); - buckets[b]._time = record.time // good enough - }); + var stream = readline.createInterface({ + input: fs.createReadStream(f), + output: null + }) + stream.on('line', function (l) { + var record; + var t = -1; + + try { + record = JSON.parse(l); + } catch (e) { + } + + if (!record) + return; + + var t = -1; + if (record.time) + t = (new Date(record.time).getTime() / 1000); + + if (record._audit !== true || + REQUEST_IDS[record.req_id] || + t < config.start || + t > config.end) { + + console.error('Skipping %s', l); + } + + REQUEST_IDS[record.req_id] = true; + record.time = t; + + var b = Math.round(record.time / config.period) + ''; + if (!buckets[b]) + buckets[b] = []; + + buckets[b].push(record); + buckets[b]._time = record.time // good enough + }); + + stream.on('end', function () { + if (++done === parsed.argv.remain.length) { + console.error('Generating report...'); + + var output = { + average: config.average ? [] : false, + requests: config.requests ? [] : false, + percentile: {} + }; + config.percentile.forEach(function (p) { + output.percentile[p] = []; + }); + + output = report(buckets, output); + var finalOutput = []; + if (output.average) { + finalOutput.push({ + name: 'avg', + values: output.average + }); + } + if (output.requests) { + finalOutput.push({ + name: 'n', + values: output.requests + }); + } + Object.keys(output.percentile).forEach(function (k) { + finalOutput.push({ + name: 'p' + k, + values: output.percentile[k] + }); + }); - stream.on('end', function () { - if (++done === parsed.argv.remain.length) { - console.error('Generating report...'); - - var output = { - average: config.average ? [] : false, - requests: config.requests ? [] : false, - percentile: {} - }; - config.percentile.forEach(function (p) { - output.percentile[p] = []; - }); - - output = report(buckets, output); - var finalOutput = []; - if (output.average) { - finalOutput.push({ - name: 'avg', - values: output.average - }); - } - if (output.requests) { - finalOutput.push({ - name: 'n', - values: output.requests - }); - } - Object.keys(output.percentile).forEach(function (k) { - finalOutput.push({ - name: 'p' + k, - values: output.percentile[k] - }); - }); - - console.log(JSON.stringify(finalOutput)); - } - }); + console.log(JSON.stringify(finalOutput)); + } + }); }); diff --git a/node_modules/restify/lib/bunyan_helper.js b/node_modules/restify/lib/bunyan_helper.js index 9112722..7c6616e 100644 --- a/node_modules/restify/lib/bunyan_helper.js +++ b/node_modules/restify/lib/bunyan_helper.js @@ -9,7 +9,6 @@ var LRU = require('lru-cache'); var uuid = require('node-uuid'); - ///--- Globals var sprintf = util.format; @@ -17,170 +16,218 @@ var DEFAULT_REQ_ID = uuid.v4(); var STR_FMT = '[object %s]'; - ///--- Helpers function appendStream(streams, s) { - assert.arrayOfObject(streams, 'streams'); - assert.object(s, 'stream'); + assert.arrayOfObject(streams, 'streams'); + assert.object(s, 'stream'); - if (s instanceof Stream) { - streams.push({ - raw: false, - stream: s - }); - } else { - assert.optionalBool(s.raw, 'stream.raw'); - assert.object(s.stream, 'stream.stream'); - streams.push(s); - } + if (s instanceof Stream) { + streams.push({ + raw: false, + stream: s + }); + } else { + assert.optionalBool(s.raw, 'stream.raw'); + assert.object(s.stream, 'stream.stream'); + streams.push(s); + } } ///--- API +/** + * A Bunyan stream to capture records in a ring buffer and only pass through + * on a higher-level record. E.g. buffer up all records but only dump when + * getting a WARN or above. + * + * @param {Object} options contains the parameters: + * - {Object} stream The stream to which to write when dumping captured + * records. One of `stream` or `streams` must be specified. + * - {Array} streams One of `stream` or `streams` must be specified. + * - {Number|String} level The level at which to trigger dumping captured + * records. Defaults to bunyan.WARN. + * - {Number} maxRecords Number of records to capture. Default 100. + * - {Number} maxRequestIds Number of simultaneous request id capturing + * buckets to maintain. Default 1000. + * - {Boolean} dumpDefault If true, then dump captured records on the + * *default* request id when dumping. I.e. dump records logged without + * a "req_id" field. Default false. + */ function RequestCaptureStream(opts) { - assert.object(opts, 'options'); - assert.optionalObject(opts.stream, 'options.stream'); - assert.optionalArrayOfObject(opts.streams, 'options.streams'); - assert.optionalNumber(opts.level, 'options.level'); - assert.optionalNumber(opts.maxRecords, 'options.maxRecords'); - assert.optionalNumber(opts.maxRequestIds, 'options.maxRequestIds'); - - var self = this; - Stream.call(this); - - this.level = opts.level || bunyan.WARN; - this.limit = opts.maxRecords || 100; - this.maxRequestIds = opts.maxRequestIds || 1000; - this.requestMap = LRU({ - max: self.maxRequestIds - }); - - - this._offset = -1; - this._rings = []; - - this.streams = []; - - if (opts.stream) - appendStream(this.streams, opts.stream); - - if (opts.streams) - opts.streams.forEach(appendStream.bind(null, this.streams)); + assert.object(opts, 'options'); + assert.optionalObject(opts.stream, 'options.stream'); + assert.optionalArrayOfObject(opts.streams, 'options.streams'); + assert.optionalNumber(opts.level, 'options.level'); + assert.optionalNumber(opts.maxRecords, 'options.maxRecords'); + assert.optionalNumber(opts.maxRequestIds, 'options.maxRequestIds'); + assert.optionalBool(opts.dumpDefault, 'options.dumpDefault'); + + var self = this; + Stream.call(this); + + this.level = opts.level ? bunyan.resolveLevel(opts.level) : bunyan.WARN; + this.limit = opts.maxRecords || 100; + this.maxRequestIds = opts.maxRequestIds || 1000; + this.requestMap = LRU({ + max: self.maxRequestIds + }); + this.dumpDefault = opts.dumpDefault; + + this._offset = -1; + this._rings = []; + + this.streams = []; + + if (opts.stream) + appendStream(this.streams, opts.stream); + + if (opts.streams) + opts.streams.forEach(appendStream.bind(null, this.streams)); + + this.haveNonRawStreams = false; + for (var i = 0; i < this.streams.length; i++) { + if (!this.streams[i].raw) { + this.haveNonRawStreams = true; + break; + } + } } util.inherits(RequestCaptureStream, Stream); RequestCaptureStream.prototype.write = function write(record) { - var req_id = record.req_id || DEFAULT_REQ_ID; - var ring; - var self = this; - - if (!(ring = this.requestMap.get(req_id))) { - if (++this._offset > this.maxRequestIds) - this._offset = 0; - - if (this._rings.length <= this._offset) { - this._rings.push(new bunyan.RingBuffer({ - limit: self.limit - })); - } - - ring = this._rings[this._offset]; - ring.records.length = 0; - this.requestMap.set(req_id, ring); + var req_id = record.req_id || DEFAULT_REQ_ID; + var ring; + var self = this; + + if (!(ring = this.requestMap.get(req_id))) { + if (++this._offset > this.maxRequestIds) + this._offset = 0; + + if (this._rings.length <= this._offset) { + this._rings.push(new bunyan.RingBuffer({ + limit: self.limit + })); } - assert.ok(ring, 'no ring found'); - - if (record.level >= this.level) { - ring.records.forEach(function (r) { - var ser = JSON.stringify(r, bunyan.safeCycles()) + '\n'; - self.streams.forEach(function (s) { - s.stream.write(s.raw ? r : ser); - }); + ring = this._rings[this._offset]; + ring.records.length = 0; + this.requestMap.set(req_id, ring); + } + + assert.ok(ring, 'no ring found'); + + if (record.level >= this.level) { + var i, r, ser; + for (i = 0; i < ring.records.length; i++) { + r = ring.records[i]; + if (this.haveNonRawStreams) { + ser = JSON.stringify(r, + bunyan.safeCycles()) + '\n'; + } + self.streams.forEach(function (s) { + s.stream.write(s.raw ? r : ser); + }); + } + ring.records.length = 0; + if (this.dumpDefault) { + var defaultRing = self.requestMap.get(DEFAULT_REQ_ID); + for (i = 0; i < defaultRing.records.length; i++) { + r = defaultRing.records[i]; + if (this.haveNonRawStreams) { + ser = JSON.stringify(r, + bunyan.safeCycles()) + '\n'; + } + self.streams.forEach(function (s) { + s.stream.write(s.raw ? r : ser); }); - } else { - ring.write(record); + } + defaultRing.records.length = 0; } + } else { + ring.write(record); + } }; RequestCaptureStream.prototype.toString = function toString() { - return (sprintf(STR_FMT, - this.constructor.name, - this.level, - this.limit, - this.maxRequestIds)); + return (sprintf(STR_FMT, + this.constructor.name, + this.level, + this.limit, + this.maxRequestIds)); }; - ///--- Serializers function clientReq(req) { - if (!req) - return (req); - - var host; - - try { - host = req.host.split(':')[0]; - } catch (e) { - host = false; - } - - return ({ - method: req ? req.method : false, - url: req ? req.path : false, - address: host, - port: req ? req.port : false, - headers: req ? req.headers : false - }); + if (!req) + return (req); + + var host; + + try { + host = req.host.split(':')[0]; + } catch (e) { + host = false; + } + + return ({ + method: req ? req.method : false, + url: req ? req.path : false, + address: host, + port: req ? req.port : false, + headers: req ? req.headers : false + }); } function clientRes(res) { - if (!res || !res.statusCode) - return (res); + if (!res || !res.statusCode) + return (res); - return ({ - statusCode: res.statusCode, - headers: res.headers - }); + return ({ + statusCode: res.statusCode, + headers: res.headers + }); } var SERIALIZERS = { - err: bunyan.stdSerializers.err, - req: bunyan.stdSerializers.req, - res: bunyan.stdSerializers.res, - client_req: clientReq, - client_res: clientRes + err: bunyan.stdSerializers.err, + req: bunyan.stdSerializers.req, + res: bunyan.stdSerializers.res, + client_req: clientReq, + client_res: clientRes }; ///--- Exports module.exports = { - RequestCaptureStream: RequestCaptureStream, - serializers: SERIALIZERS, - - createLogger: function createLogger(name) { - return (bunyan.createLogger({ - name: name, - serializers: SERIALIZERS, - streams: [ { - level: 'warn', - stream: process.stderr - }, { - level: 'debug', - type: 'raw', - stream: new RequestCaptureStream({ - stream: process.stderr - }) - } ] - })); - } + RequestCaptureStream: RequestCaptureStream, + serializers: SERIALIZERS, + + createLogger: function createLogger(name) { + return (bunyan.createLogger({ + name: name, + serializers: SERIALIZERS, + streams: [ + { + level: 'warn', + stream: process.stderr + }, + { + level: 'debug', + type: 'raw', + stream: new RequestCaptureStream({ + stream: process.stderr + }) + } + ] + })); + } }; diff --git a/node_modules/restify/lib/clients/http_client.js b/node_modules/restify/lib/clients/http_client.js index 78d4b93..54ad8b5 100644 --- a/node_modules/restify/lib/clients/http_client.js +++ b/node_modules/restify/lib/clients/http_client.js @@ -13,16 +13,35 @@ var zlib = require('zlib'); var assert = require('assert-plus'); var backoff = require('backoff'); -var KeepAliveAgent = require('keep-alive-agent'); var mime = require('mime'); var once = require('once'); +var tunnelAgent = require('tunnel-agent'); var uuid = require('node-uuid'); var dtrace = require('../dtrace'); var errors = require('../errors'); var bunyan = require('../bunyan_helper'); - +// Use native KeepAlive in Node as of 0.11.6 +var semver = require('semver'); +var nodeVersion = process.version; +var nativeKeepAlive = semver.satisfies(nodeVersion, '>=0.11.6'); +var KeepAliveAgent; +var KeepAliveAgentSecure; +var httpMaxSockets = http.globalAgent.maxSockets; +var httpsMaxSockets = https.globalAgent.maxSockets; +if (!nativeKeepAlive) { + KeepAliveAgent = require('keep-alive-agent'); + KeepAliveAgentSecure = KeepAliveAgent.Secure; +} else { + KeepAliveAgent = http.Agent; + KeepAliveAgentSecure = https.Agent; + // maxSockets defaults to Infinity, but that doesn't + // lend itself well to KeepAlive, since sockets will + // never be reused. + httpMaxSockets = Math.min(httpMaxSockets, 1024); + httpsMaxSockets = Math.min(httpsMaxSockets, 1024); +} ///--- Globals @@ -30,416 +49,528 @@ var bunyan = require('../bunyan_helper'); var VERSION = JSON.parse(fs.readFileSync(require('path').normalize(__dirname + '/../../package.json'), 'utf8')).version; - ///--- Helpers function cloneRetryOptions(options, defaults) { - if (options === false) { - return ({ - minTimeout: 1, - maxTimeout: 2, - retries: 1 - }); - } - - assert.optionalObject(options, 'options.retry'); - var r = options || {}; - assert.optionalNumber(r.minTimeout, 'options.retry.minTimeout'); - assert.optionalNumber(r.maxTimeout, 'options.retry.maxTimeout'); - assert.optionalNumber(r.retries, 'options.retry.retries'); - assert.optionalObject(defaults, 'defaults'); - defaults = defaults || {}; - - return ({ - minTimeout: r.minTimeout || defaults.minTimeout || 1000, - maxTimeout: r.maxTimeout || defaults.maxTimeout || Infinity, - retries: r.retries || defaults.retries || 4 - }); + if (options === false) { + return (false); + } + + assert.optionalObject(options, 'options.retry'); + var r = options || {}; + assert.optionalNumber(r.minTimeout, 'options.retry.minTimeout'); + assert.optionalNumber(r.maxTimeout, 'options.retry.maxTimeout'); + assert.optionalNumber(r.retries, 'options.retry.retries'); + assert.optionalObject(defaults, 'defaults'); + defaults = defaults || {}; + + return ({ + minTimeout: r.minTimeout || defaults.minTimeout || 1000, + maxTimeout: r.maxTimeout || defaults.maxTimeout || Infinity, + retries: r.retries || defaults.retries || 4 + }); } function defaultUserAgent() { - var UA = 'restify/' + VERSION + - ' (' + os.arch() + '-' + os.platform() + '; ' + - 'v8/' + process.versions.v8 + '; ' + - 'OpenSSL/' + process.versions.openssl + ') ' + - 'node/' + process.versions.node; + var UA = 'restify/' + VERSION + + ' (' + os.arch() + '-' + os.platform() + '; ' + + 'v8/' + process.versions.v8 + '; ' + + 'OpenSSL/' + process.versions.openssl + ') ' + + 'node/' + process.versions.node; - return (UA); + return (UA); } function ConnectTimeoutError(ms) { - if (Error.captureStackTrace) - Error.captureStackTrace(this, ConnectTimeoutError); + if (Error.captureStackTrace) + Error.captureStackTrace(this, ConnectTimeoutError); - this.message = 'connect timeout after ' + ms + 'ms'; - this.name = 'ConnectTimeoutError'; + this.message = 'connect timeout after ' + ms + 'ms'; + this.name = 'ConnectTimeoutError'; } util.inherits(ConnectTimeoutError, Error); +function RequestTimeoutError(ms) { + if (Error.captureStackTrace) + Error.captureStackTrace(this, RequestTimeoutError); -function rawRequest(opts, cb) { - assert.object(opts, 'options'); - assert.object(opts.log, 'options.log'); - assert.func(cb, 'callback'); - - cb = once(cb); - - var id = dtrace.nextId(); - var log = opts.log; - var proto = opts.protocol === 'https:' ? https : http; - var timer; - - if (opts.cert && opts.key) - opts.agent = false; - - if (opts.connectTimeout) { - timer = setTimeout(function connectTimeout() { - timer = null; - if (req) { - req.abort(); - } - - var err = new ConnectTimeoutError(opts.connectTimeout); - dtrace._rstfy_probes['client-error'].fire(function () { - return ([id, err.toString()]); - }); - cb(err, req); - }, opts.connectTimeout); - } + this.message = 'request timeout after ' + ms + 'ms'; + this.name = 'RequestTimeoutError'; +} +util.inherits(RequestTimeoutError, Error); - dtrace._rstfy_probes['client-request'].fire(function () { - return ([ - opts.method, - opts.path, - opts.headers, - id - ]); +function rawRequest(opts, cb) { + assert.object(opts, 'options'); + assert.object(opts.log, 'options.log'); + assert.func(cb, 'callback'); + + cb = once(cb); + + var id = dtrace.nextId(); + var log = opts.log; + var proto = opts.protocol === 'https:' ? https : http; + var connectionTimer; + var requestTimer; + + if (opts.cert && opts.key) + opts.agent = false; + + if (opts.connectTimeout) { + connectionTimer = setTimeout(function connectTimeout() { + connectionTimer = null; + if (req) { + req.abort(); + } + + var err = new ConnectTimeoutError(opts.connectTimeout); + dtrace._rstfy_probes['client-error'].fire(function () { + return ([id, err.toString()]); + }); + cb(err, req); + }, opts.connectTimeout); + } + + dtrace._rstfy_probes['client-request'].fire(function () { + return ([ + opts.method, + opts.path, + opts.headers, + id + ]); + }); + + var emit_result = once(function _emit_result(_err, _req, _res) { + _req.emit('result', _err, _res); + }); + + var req = proto.request(opts, function onResponse(res) { + clearTimeout(connectionTimer); + clearTimeout(requestTimer); + + dtrace._rstfy_probes['client-response'].fire(function () { + return ([ id, res.statusCode, res.headers ]); }); + log.trace({client_res: res}, 'Response received'); - var req = proto.request(opts, function onResponse(res) { - clearTimeout(timer); - dtrace._rstfy_probes['client-response'].fire(function () { - return ([ id, res.statusCode, res.headers ]); - }); - log.trace({client_res: res}, 'Response received'); - - res.log = log; + res.log = log; - var err; - if (res.statusCode >= 400) - err = errors.codeToHttpError(res.statusCode); + var err; + if (res.statusCode >= 400) + err = errors.codeToHttpError(res.statusCode); - req.removeAllListeners('error'); - req.removeAllListeners('socket'); - req.emit('result', (err || null), res); - }); - req.log = log; + req.removeAllListeners('socket'); - req.on('error', function onError(err) { - dtrace._rstfy_probes['client-error'].fire(function () { - return ([id, (err || {}).toString()]); - }); - log.trace({err: err}, 'Request failed'); - clearTimeout(timer); + emit_result((err || null), req, res); + }); + req.log = log; - cb(err, req); - if (req) { - process.nextTick(function () { - req.emit('result', err, null); - }); - } + req.on('error', function onError(err) { + dtrace._rstfy_probes['client-error'].fire(function () { + return ([id, (err || {}).toString()]); }); + log.trace({err: err}, 'Request failed'); + clearTimeout(connectionTimer); + clearTimeout(requestTimer); + + cb(err, req); + if (req) { + process.nextTick(function () { + emit_result(err, req, null); + }); + } + }); - req.once('socket', function onSocket(socket) { - if (socket.writable && !socket._connecting) { - clearTimeout(timer); - cb(null, req); - return; - } - - socket.once('connect', function onConnect() { - clearTimeout(timer); - cb(null, req); - }); + req.once('upgrade', function onUpgrade(res, socket, _head) { + clearTimeout(connectionTimer); + clearTimeout(requestTimer); + dtrace._rstfy_probes['client-response'].fire(function () { + return ([ id, res.statusCode, res.headers ]); }); + log.trace({client_res: res}, 'upgrade response received'); - if (opts.signRequest) - opts.signRequest(req); - - if (log.trace()) - log.trace({client_req: opts}, 'request sent'); -} // end `rawRequest` + res.log = log; + var err; + if (res.statusCode >= 400) + err = errors.codeToHttpError(res.statusCode); + req.removeAllListeners('error'); + req.removeAllListeners('socket'); + req.emit('upgradeResult', (err || null), res, socket, _head); + }); -///--- API - -function HttpClient(options) { - assert.object(options, 'options'); - assert.optionalObject(options.headers, 'options.headers'); - assert.object(options.log, 'options.log'); - assert.optionalFunc(options.signRequest, 'options.signRequest'); - assert.optionalString(options.socketPath, 'options.socketPath'); - assert.optionalString(options.url, 'options.url'); - - EventEmitter.call(this); - - var self = this; - - this.agent = options.agent; - this.ca = options.ca; - this.cert = options.cert; - this.ciphers = options.ciphers; - this.connectTimeout = options.connectTimeout || false; - this.headers = options.headers || {}; - this.log = options.log; - if (!this.log.serializers.client_res) { - // Ensure logger has a reasonable serializer for `client_res` - // logged in this module. - this.log = this.log.child({ - serializers: {client_res: bunyan.serializers.client_res} - }); + req.once('socket', function onSocket(socket) { + var _socket = socket; + if (opts.protocol === 'https:' && socket.socket) { + _socket = socket.socket; } - this.key = options.key; - this.name = options.name || 'HttpClient'; - this.passphrase = options.passphrase; - this.pfx = options.pfx; - if (options.rejectUnauthorized !== undefined) { - this.rejectUnauthorized = options.rejectUnauthorized; - } else { - this.rejectUnauthorized = true; + + if (_socket.writable && !_socket._connecting) { + clearTimeout(connectionTimer); + cb(null, req); + return; } - this.retry = cloneRetryOptions(options.retry); - this.signRequest = options.signRequest || false; - this.socketPath = options.socketPath || false; - this.url = options.url ? url.parse(options.url) : {}; + _socket.once('connect', function onConnect() { + clearTimeout(connectionTimer); + if (opts._keep_alive) { + _socket.setKeepAlive(true); + socket.setKeepAlive(true); + } - if (options.accept) { - if (options.accept.indexOf('/') === -1) - options.accept = mime.lookup(options.accept); + if (opts.requestTimeout) { + requestTimer = setTimeout(function requestTimeout() { + requestTimer = null; - this.headers.accept = options.accept; - } + var err = new RequestTimeoutError(opts.requestTimeout); + dtrace._rstfy_probes['client-error'].fire(function () { + return ([id, err.toString()]); + }); - if (options.contentType) { - if (options.contentType.indexOf('/') === -1) - options.type = mime.lookup(options.contentType); + cb(err, req); - this.headers['content-type'] = options.contentType; - } + if (req) { + req.abort(); + process.nextTick(function () { + req.emit('result', err, null); + }); + } + }, opts.requestTimeout); + } - if (options.userAgent !== false) { - this.headers['user-agent'] = options.userAgent || - defaultUserAgent(); - } + cb(null, req); + }); + }); + + if (opts.signRequest) + opts.signRequest(req); + + if (log.trace()) + log.trace({client_req: opts}, 'request sent'); +} // end `rawRequest` - if (options.version) - this.headers['accept-version'] = options.version; - if (this.agent === undefined) { - var Agent; - var maxSockets; +///--- API - if (this.url.protocol === 'https:') { - Agent = KeepAliveAgent.Secure; - maxSockets = https.globalAgent.maxSockets; +function HttpClient(options) { + assert.object(options, 'options'); + assert.optionalObject(options.headers, 'options.headers'); + assert.object(options.log, 'options.log'); + assert.optionalFunc(options.signRequest, 'options.signRequest'); + assert.optionalString(options.socketPath, 'options.socketPath'); + assert.optionalString(options.url, 'options.url'); + + EventEmitter.call(this); + + var self = this; + + this.agent = options.agent; + this.ca = options.ca; + this.cert = options.cert; + this.ciphers = options.ciphers; + this.connectTimeout = options.connectTimeout || false; + this.requestTimeout = options.requestTimeout || false; + this.headers = options.headers || {}; + this.log = options.log; + if (!this.log.serializers) { + // Ensure logger has a reasonable serializer for `client_res` + // and `client_req` logged in this module. + this.log = this.log.child({serializers: bunyan.serializers}); + } + this.key = options.key; + this.name = options.name || 'HttpClient'; + this.passphrase = options.passphrase; + this.pfx = options.pfx; + if (options.rejectUnauthorized !== undefined) { + this.rejectUnauthorized = options.rejectUnauthorized; + } else { + this.rejectUnauthorized = true; + } + + if (process.env.https_proxy) { + this.proxy = url.parse(process.env.https_proxy); + } else if (process.env.http_proxy) { + this.proxy = url.parse(process.env.http_proxy); + } else if (options.proxy) { + this.proxy = options.proxy; + } else { + this.proxy = false; + } + + this.retry = cloneRetryOptions(options.retry); + this.signRequest = options.signRequest || false; + this.socketPath = options.socketPath || false; + this.url = options.url ? url.parse(options.url) : {}; + + if (options.accept) { + if (options.accept.indexOf('/') === -1) + options.accept = mime.lookup(options.accept); + + this.headers.accept = options.accept; + } + + if (options.contentType) { + if (options.contentType.indexOf('/') === -1) + options.type = mime.lookup(options.contentType); + + this.headers['content-type'] = options.contentType; + } + + if (options.userAgent !== false) { + this.headers['user-agent'] = options.userAgent || + defaultUserAgent(); + } + + if (options.version) + this.headers['accept-version'] = options.version; + + if (this.agent === undefined) { + var Agent; + var maxSockets; + + if (this.proxy) { + if (this.url.protocol == 'https:') { + if (this.proxy.protocol === 'https:') { + Agent = tunnelAgent.httpsOverHttps; + } else { + Agent = tunnelAgent.httpsOverHttp; + } + } else { + if (this.proxy.protocol === 'https:') { + Agent = tunnelAgent.httpOverHttps; } else { - Agent = KeepAliveAgent; - maxSockets = http.globalAgent.maxSockets; + Agent = tunnelAgent.httpOverHttp; } + } + } else if (this.url.protocol === 'https:') { + Agent = KeepAliveAgentSecure; + maxSockets = httpsMaxSockets; + } else { + Agent = KeepAliveAgent; + maxSockets = httpMaxSockets; + } - this.agent = new Agent({ - cert: self.cert, - ca: self.ca, - ciphers: self.ciphers, - key: self.key, - maxSockets: maxSockets, - maxKeepAliveRequests: 0, - maxKeepAliveTime: 0, - passphrase: self.passphrase, - pfx: self.pfx, - rejectUnauthorized: self.rejectUnauthorized - }); + if (this.proxy) { + this.agent = new Agent({ + proxy: self.proxy, + rejectUnauthorized: self.rejectUnauthorized, + ca: self.ca + }); + } else { + this.agent = new Agent({ + cert: self.cert, + ca: self.ca, + ciphers: self.ciphers, + key: self.key, + maxSockets: maxSockets, + + // require('keep-alive-agent') + maxKeepAliveRequests: 0, + maxKeepAliveTime: 0, + + // native keepalive + keepAliveMsecs: 1000, + keepAlive: true, + + passphrase: self.passphrase, + pfx: self.pfx, + rejectUnauthorized: self.rejectUnauthorized + }); + this._keep_alive = true; } + } } util.inherits(HttpClient, EventEmitter); module.exports = HttpClient; HttpClient.prototype.close = function close() { - var sockets = this.agent.sockets; - Object.keys((sockets || {})).forEach(function (k) { - sockets[k].forEach(function (s) { - s.end(); - }); - }); + var sockets = this.agent.sockets; + Object.keys((sockets || {})).forEach(function (k) { + if (Array.isArray(sockets[k])) { + sockets[k].forEach(function (s) { + s.end(); + }); + } + }); - sockets = this.agent.idleSockets; - Object.keys((sockets || {})).forEach(function (k) { - sockets[k].forEach(function (s) { - s.end(); - }); + sockets = this.agent.idleSockets || this.agent.freeSockets; + Object.keys((sockets || {})).forEach(function (k) { + sockets[k].forEach(function (s) { + s.end(); }); + }); }; HttpClient.prototype.del = function del(options, callback) { - var opts = this._options('DELETE', options); + var opts = this._options('DELETE', options); - return (this.read(opts, callback)); + return (this.read(opts, callback)); }; HttpClient.prototype.get = function get(options, callback) { - var opts = this._options('GET', options); + var opts = this._options('GET', options); - return (this.read(opts, callback)); + return (this.read(opts, callback)); }; HttpClient.prototype.head = function head(options, callback) { - var opts = this._options('HEAD', options); + var opts = this._options('HEAD', options); - return (this.read(opts, callback)); + return (this.read(opts, callback)); }; HttpClient.prototype.opts = function http_options(options, callback) { - var _opts = this._options('OPTIONS', options); + var _opts = this._options('OPTIONS', options); - return (this.read(_opts, callback)); + return (this.read(_opts, callback)); }; HttpClient.prototype.post = function post(options, callback) { - var opts = this._options('POST', options); + var opts = this._options('POST', options); - return (this.request(opts, callback)); + return (this.request(opts, callback)); }; HttpClient.prototype.put = function put(options, callback) { - var opts = this._options('PUT', options); + var opts = this._options('PUT', options); - return (this.request(opts, callback)); + return (this.request(opts, callback)); }; HttpClient.prototype.patch = function patch(options, callback) { - var opts = this._options('PATCH', options); + var opts = this._options('PATCH', options); - return (this.request(opts, callback)); + return (this.request(opts, callback)); }; HttpClient.prototype.read = function read(options, callback) { - var r = this.request(options, function readRequestCallback(err, req) { - if (!err) - req.end(); + var r = this.request(options, function readRequestCallback(err, req) { + if (!err) + req.end(); - return (callback(err, req)); - }); - return (r); + return (callback(err, req)); + }); + return (r); }; HttpClient.prototype.basicAuth = function basicAuth(username, password) { - if (username === false) { - delete this.headers.authorization; - } else { - assert.string(username, 'username'); - assert.string(password, 'password'); - - var buffer = new Buffer(username + ':' + password, 'utf8'); - this.headers.authorization = 'Basic ' + - buffer.toString('base64'); - } - - return (this); + if (username === false) { + delete this.headers.authorization; + } else { + assert.string(username, 'username'); + assert.string(password, 'password'); + + var buffer = new Buffer(username + ':' + password, 'utf8'); + this.headers.authorization = 'Basic ' + + buffer.toString('base64'); + } + + return (this); }; HttpClient.prototype.request = function request(opts, cb) { - assert.object(opts, 'options'); - assert.func(cb, 'callback'); + assert.object(opts, 'options'); + assert.func(cb, 'callback'); - cb = once(cb); + cb = once(cb); - var call; - var retry = cloneRetryOptions(opts.retry); + if (opts.retry === false) { + rawRequest(opts, cb); + return; + } - call = backoff.call(rawRequest, opts, cb); - call.setStrategy(new backoff.ExponentialStrategy({ - initialDelay: retry.minTimeout, - maxDelay: retry.maxTimeout - })); - call.failAfter(retry.retries); - call.on('backoff', this.emit.bind(this, 'attempt')); + var call; + var retry = cloneRetryOptions(opts.retry); - call.start(); + opts._keep_alive = this._keep_alive; + call = backoff.call(rawRequest, opts, cb); + call.setStrategy(new backoff.ExponentialStrategy({ + initialDelay: retry.minTimeout, + maxDelay: retry.maxTimeout + })); + call.failAfter(retry.retries); + call.on('backoff', this.emit.bind(this, 'attempt')); + + call.start(); }; HttpClient.prototype._options = function (method, options) { - if (typeof (options) !== 'object') - options = { path: options }; - - var self = this; - var opts = { - agent: options.agent || self.agent, - ca: options.ca || self.ca, - cert: options.cert || self.cert, - ciphers: options.ciphers || self.ciphers, - connectTimeout: options.connectTimeout || self.connectTimeout, - headers: options.headers || {}, - key: options.key || self.key, - log: options.log || self.log, - method: method, - passphrase: options.passphrase || self.passphrase, - path: options.path || self.path, - pfx: options.pfx || self.pfx, - rejectUnauthorized: options.rejectUnauthorized || - self.rejectUnauthorized, - retry: options.retry || self.retry, - signRequest: options.signRequest || self.signRequest - }; - - // Backwards compatibility with restify < 1.0 - if (options.query && - Object.keys(options.query).length && - opts.path.indexOf('?') === -1) { - opts.path += '?' + querystring.stringify(options.query); - } - - if (this.socketPath) - opts.socketPath = this.socketPath; - - Object.keys(self.url).forEach(function (k) { - if (!opts[k]) - opts[k] = self.url[k]; - }); - - Object.keys(self.headers).forEach(function (k) { - if (!opts.headers[k]) - opts.headers[k] = self.headers[k]; - }); - - if (!opts.headers.date) - opts.headers.date = new Date().toUTCString(); - - if (method === 'GET' || method === 'HEAD' || method === 'DELETE') { - if (opts.headers['content-type']) - delete opts.headers['content-type']; - if (opts.headers['content-md5']) - delete opts.headers['content-md5']; - if (opts.headers['content-length']) - delete opts.headers['content-length']; - if (opts.headers['transfer-encoding']) - delete opts.headers['transfer-encoding']; - } - - return (opts); + if (typeof (options) !== 'object') + options = { path: options }; + + var self = this; + var opts = { + agent: options.agent || self.agent, + ca: options.ca || self.ca, + cert: options.cert || self.cert, + ciphers: options.ciphers || self.ciphers, + connectTimeout: options.connectTimeout || self.connectTimeout, + requestTimeout: options.requestTimeout || self.requestTimeout, + headers: options.headers || {}, + key: options.key || self.key, + log: options.log || self.log, + method: method, + passphrase: options.passphrase || self.passphrase, + path: options.path || self.path, + pfx: options.pfx || self.pfx, + rejectUnauthorized: options.rejectUnauthorized || + self.rejectUnauthorized, + retry: options.retry !== false ? options.retry : false, + signRequest: options.signRequest || self.signRequest + }; + + if (!opts.retry && opts.retry !== false) + opts.retry = self.retry; + + + // Backwards compatibility with restify < 1.0 + if (options.query && + Object.keys(options.query).length && + opts.path.indexOf('?') === -1) { + opts.path += '?' + querystring.stringify(options.query); + } + + if (this.socketPath) + opts.socketPath = this.socketPath; + + Object.keys(this.url).forEach(function (k) { + if (!opts[k]) + opts[k] = self.url[k]; + }); + + Object.keys(self.headers).forEach(function (k) { + if (!opts.headers[k]) + opts.headers[k] = self.headers[k]; + }); + + if (!opts.headers.date) + opts.headers.date = new Date().toUTCString(); + + if (method === 'GET' || method === 'HEAD' || method === 'DELETE') { + if (opts.headers['content-type']) + delete opts.headers['content-type']; + if (opts.headers['content-md5']) + delete opts.headers['content-md5']; + if (opts.headers['content-length'] && method !== 'DELETE') + delete opts.headers['content-length']; + if (opts.headers['transfer-encoding']) + delete opts.headers['transfer-encoding']; + } + + return (opts); }; +// vim: set ts=4 sts=4 sw=4 et: diff --git a/node_modules/restify/lib/clients/index.js b/node_modules/restify/lib/clients/index.js index 153eb20..2c195a9 100644 --- a/node_modules/restify/lib/clients/index.js +++ b/node_modules/restify/lib/clients/index.js @@ -8,7 +8,7 @@ var StringClient = require('./string_client'); ///--- Exports module.exports = { - HttpClient: HttpClient, - JsonClient: JsonClient, - StringClient: StringClient + HttpClient: HttpClient, + JsonClient: JsonClient, + StringClient: StringClient }; diff --git a/node_modules/restify/lib/clients/json_client.js b/node_modules/restify/lib/clients/json_client.js index fef346c..7505159 100644 --- a/node_modules/restify/lib/clients/json_client.js +++ b/node_modules/restify/lib/clients/json_client.js @@ -10,79 +10,79 @@ var RestError = require('../errors').RestError; var StringClient = require('./string_client'); - ///--- API function JsonClient(options) { - assert.object(options, 'options'); + assert.object(options, 'options'); - options.accept = 'application/json'; - options.name = options.name || 'JsonClient'; - options.contentType = 'application/json'; + options.accept = 'application/json'; + options.name = options.name || 'JsonClient'; + options.contentType = 'application/json'; - StringClient.call(this, options); + StringClient.call(this, options); - this._super = StringClient.prototype; + this._super = StringClient.prototype; } util.inherits(JsonClient, StringClient); module.exports = JsonClient; JsonClient.prototype.write = function write(options, body, callback) { - assert.ok(body !== undefined, 'body'); - assert.object(body, 'body'); + assert.ok(body !== undefined, 'body'); + assert.object(body, 'body'); - body = JSON.stringify(body !== null ? body : {}); - return (this._super.write.call(this, options, body, callback)); + body = JSON.stringify(body !== null ? body : {}); + return (this._super.write.call(this, options, body, callback)); }; JsonClient.prototype.parse = function parse(req, callback) { - var log = this.log; - function parseResponse(err, req2, res, data) { - var obj; - try { - if (data && !/^\s*$/.test(data)) - obj = JSON.parse(data); - } catch (e) { - // Not really sure what else we can do here, besides - // make the client just keep going. - log.trace(e, 'Invalid JSON in response'); - } - obj = obj || {}; - - if (res && res.statusCode >= 400) { - // Upcast error to a RestError (if we can) - // Be nice and handle errors like - // { error: { code: '', message: '' } } - // in addition to { code: '', message: '' }. - if (obj.code || (obj.error && obj.error.code)) { - var _c = obj.code || - (obj.error ? obj.error.code : '') || - ''; - var _m = obj.message || - (obj.error ? obj.error.message : '') || - ''; - - err = new RestError({ - message: _m, - restCode: _c, - statusCode: res.statusCode - }); - err.name = err.restCode; - if (!/Error$/.test(err.name)) - err.name += 'Error'; - } else if (!err) { - err = codeToHttpError(res.statusCode, - obj.message || '', data); - } - } - - if (err) - err.body = obj; - - callback((err || null), req2, res, obj); + var log = this.log; + + function parseResponse(err, req2, res, data) { + var obj; + try { + if (data && !/^\s*$/.test(data)) + obj = JSON.parse(data); + } catch (e) { + // Not really sure what else we can do here, besides + // make the client just keep going. + log.trace(e, 'Invalid JSON in response'); + } + obj = obj || {}; + + if (res && res.statusCode >= 400) { + // Upcast error to a RestError (if we can) + // Be nice and handle errors like + // { error: { code: '', message: '' } } + // in addition to { code: '', message: '' }. + if (obj.code || (obj.error && obj.error.code)) { + var _c = obj.code || + (obj.error ? obj.error.code : '') || + ''; + var _m = obj.message || + (obj.error ? obj.error.message : '') || + ''; + + err = new RestError({ + message: _m, + restCode: _c, + statusCode: res.statusCode + }); + err.name = err.restCode; + if (!/Error$/.test(err.name)) + err.name += 'Error'; + } else if (!err) { + err = codeToHttpError(res.statusCode, + obj.message || '', data); + } } - return (this._super.parse.call(this, req, parseResponse)); + if (err) + err.body = obj; + + callback((err || null), req2, res, obj); + } + + return (this._super.parse.call(this, req, parseResponse)); }; diff --git a/node_modules/restify/lib/clients/string_client.js b/node_modules/restify/lib/clients/string_client.js index 4f99a0b..8abb017 100644 --- a/node_modules/restify/lib/clients/string_client.js +++ b/node_modules/restify/lib/clients/string_client.js @@ -10,182 +10,181 @@ var util = require('util'); var HttpClient = require('./http_client'); - ///--- Helpers ///--- API function StringClient(options) { - assert.object(options, 'options'); - assert.optionalObject(options.gzip, 'options.gzip'); + assert.object(options, 'options'); + assert.optionalObject(options.gzip, 'options.gzip'); - options.accept = options.accept || 'text/plain'; - options.name = options.name || 'StringClient'; - options.contentType = - options.contentType || 'application/x-www-form-urlencoded'; + options.accept = options.accept || 'text/plain'; + options.name = options.name || 'StringClient'; + options.contentType = + options.contentType || 'application/x-www-form-urlencoded'; - HttpClient.call(this, options); - this.gzip = options.gzip; + HttpClient.call(this, options); + this.gzip = options.gzip; } util.inherits(StringClient, HttpClient); module.exports = StringClient; StringClient.prototype.post = function post(options, body, callback) { - var opts = this._options('POST', options); - if (typeof (body) === 'function') { - callback = body; - body = null; - } + var opts = this._options('POST', options); + if (typeof (body) === 'function') { + callback = body; + body = null; + } - return (this.write(opts, body, callback)); + return (this.write(opts, body, callback)); }; StringClient.prototype.put = function put(options, body, callback) { - var opts = this._options('PUT', options); - if (typeof (body) === 'function') { - callback = body; - body = null; - } + var opts = this._options('PUT', options); + if (typeof (body) === 'function') { + callback = body; + body = null; + } - return (this.write(opts, body, callback)); + return (this.write(opts, body, callback)); }; StringClient.prototype.patch = function patch(options, body, callback) { - var opts = this._options('PATCH', options); - if (typeof (body) === 'function') { - callback = body; - body = null; - } + var opts = this._options('PATCH', options); + if (typeof (body) === 'function') { + callback = body; + body = null; + } - return (this.write(opts, body, callback)); + return (this.write(opts, body, callback)); }; StringClient.prototype.read = function read(options, callback) { - var self = this; - this.request(options, function _parse(err, req) { - if (err) - return (callback(err, req)); - - req.once('result', self.parse(req, callback)); - return (req.end()); - }); - return (this); + var self = this; + this.request(options, function _parse(err, req) { + if (err) + return (callback(err, req)); + + req.once('result', self.parse(req, callback)); + return (req.end()); + }); + return (this); }; StringClient.prototype.write = function write(options, body, callback) { - if (body !== null && typeof (body) !== 'string') - body = qs.stringify(body); + if (body !== null && typeof (body) !== 'string') + body = qs.stringify(body); - var self = this; + var self = this; - function _write(data) { - if (data) { - var hash = crypto.createHash('md5'); - hash.update(data, 'utf8'); - options.headers['content-md5'] = hash.digest('base64'); - } - - self.request(options, function (err, req) { - if (err) { - callback(err, req); - return; - } - - req.once('result', self.parse(req, callback)); - req.end(data); - }); + function _write(data) { + if (data) { + var hash = crypto.createHash('md5'); + hash.update(data, 'utf8'); + options.headers['content-md5'] = hash.digest('base64'); } - options.headers = options.headers || {}; + self.request(options, function (err, req) { + if (err) { + callback(err, req); + return; + } + + req.once('result', self.parse(req, callback)); + req.end(data); + }); + } - if (this.gzip) - options.headers['accept-encoding'] = 'gzip'; + options.headers = options.headers || {}; - if (body) { - if (this.gzip) { - options.headers['content-encoding'] = 'gzip'; - zlib.gzip(body, function (err, data) { - if (err) { - callback(err, null); - return; - } + if (this.gzip) + options.headers['accept-encoding'] = 'gzip'; - options.headers['content-length'] = data.length; - _write(data); - }); - } else { - options.headers['content-length'] = - Buffer.byteLength(body); - _write(body); + if (body) { + if (this.gzip) { + options.headers['content-encoding'] = 'gzip'; + zlib.gzip(body, function (err, data) { + if (err) { + callback(err, null); + return; } + + options.headers['content-length'] = data.length; + _write(data); + }); } else { - _write(); + options.headers['content-length'] = + Buffer.byteLength(body); + _write(body); } + } else { + _write(); + } - return (this); + return (this); }; StringClient.prototype.parse = function parse(req, callback) { - function parseResponse(err, res) { - if (res) { - function done() { - res.log.trace('body received:\n%s', body); - res.body = body; - if (hash && md5 !== hash.digest('base64')) { - err = new Error('BadDigest'); - callback(err, req, res); - return; - } - - if (err) { - err.body = body; - err.message = body; - } - - callback(err, req, res, body); - } - - var body = ''; - var gz; - var hash; - var md5 = res.headers['content-md5']; - if (md5 && req.method !== 'HEAD') - hash = crypto.createHash('md5'); - - if (res.headers['content-encoding'] === 'gzip') { - gz = zlib.createGunzip(); - gz.on('data', function (chunk) { - body += chunk.toString('utf8'); - }); - gz.once('end', done); - res.once('end', gz.end.bind(gz)); - } else { - res.setEncoding('utf8'); - res.once('end', done); - } - - res.on('data', function onData(chunk) { - if (hash) - hash.update(chunk); - - if (gz) { - gz.write(chunk); - } else { - body += chunk; - } - }); + function parseResponse(err, res) { + if (res) { + function done() { + res.log.trace('body received:\n%s', body); + res.body = body; + if (hash && md5 !== hash.digest('base64')) { + err = new Error('BadDigest'); + callback(err, req, res); + return; + } + + if (err) { + err.body = body; + err.message = body; + } + callback(err, req, res, body); + } + + var body = ''; + var gz; + var hash; + var md5 = res.headers['content-md5']; + if (md5 && req.method !== 'HEAD' && res.statusCode !== 206) + hash = crypto.createHash('md5'); + + if (res.headers['content-encoding'] === 'gzip') { + gz = zlib.createGunzip(); + gz.on('data', function (chunk) { + body += chunk.toString('utf8'); + }); + gz.once('end', done); + res.once('end', gz.end.bind(gz)); + } else { + res.setEncoding('utf8'); + res.once('end', done); + } + + res.on('data', function onData(chunk) { + if (hash) + hash.update(chunk); + + if (gz) { + gz.write(chunk); } else { - callback(err, req, null, null); + body += chunk; } + }); + + } else { + callback(err, req, null, null); } + } - return (parseResponse); + return (parseResponse); }; diff --git a/node_modules/restify/lib/dtrace.js b/node_modules/restify/lib/dtrace.js index 9f41d1d..411eb62 100644 --- a/node_modules/restify/lib/dtrace.js +++ b/node_modules/restify/lib/dtrace.js @@ -1,79 +1,82 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. - ///--- Globals var ID = 0; var MAX_INT = Math.pow(2, 32) - 1; var PROBES = { - // server_name, route_name, id, method, url, headers (json) - 'route-start': ['char *', 'char *', 'int', 'char *', 'char *', 'json'], + // server_name, route_name, id, method, url, headers (json) + 'route-start': ['char *', 'char *', 'int', 'char *', 'char *', 'json'], - // server_name, route_name, handler_name, id - 'handler-start': ['char *', 'char *', 'char *', 'int'], + // server_name, route_name, handler_name, id + 'handler-start': ['char *', 'char *', 'char *', 'int'], - // server_name, route_name, handler_name, id - 'handler-done': ['char *', 'char *', 'char *', 'int'], + // server_name, route_name, handler_name, id + 'handler-done': ['char *', 'char *', 'char *', 'int'], - // server_name, route_name, id, statusCode, headers (json) - 'route-done': ['char *', 'char *', 'int', 'int', 'json'], + // server_name, route_name, id, statusCode, headers (json) + 'route-done': ['char *', 'char *', 'int', 'int', 'json'], - // Client probes - // method, url, headers, id - 'client-request': ['char *', 'char *', 'json', 'int'], - // id, statusCode, headers - 'client-response': ['int', 'int', 'json'], - // id, Error.toString() - 'client-error': ['id', 'char *'] + // Client probes + // method, url, headers, id + 'client-request': ['char *', 'char *', 'json', 'int'], + // id, statusCode, headers + 'client-response': ['int', 'int', 'json'], + // id, Error.toString() + 'client-error': ['id', 'char *'] }; var PROVIDER; - ///--- API module.exports = function exportStaticProvider() { - if (!PROVIDER) { - try { - var dtrace = require('dtrace-provider'); - PROVIDER = dtrace.createDTraceProvider('restify'); - } catch (e) { - PROVIDER = { - fire: function () {}, - enable: function () {}, - addProbe: function () { - var p = { - fire: function () {} - }; - return (p); - }, - removeProbe: function () {}, - disable: function () {} - }; + if (!PROVIDER) { + try { + var dtrace = require('dtrace-provider'); + PROVIDER = dtrace.createDTraceProvider('restify'); + } catch (e) { + PROVIDER = { + fire: function () { + }, + enable: function () { + }, + addProbe: function () { + var p = { + fire: function () { + } + }; + return (p); + }, + removeProbe: function () { + }, + disable: function () { } + }; + } - PROVIDER._rstfy_probes = {}; + PROVIDER._rstfy_probes = {}; - Object.keys(PROBES).forEach(function (p) { - var args = PROBES[p].splice(0); - args.unshift(p); + Object.keys(PROBES).forEach(function (p) { + var args = PROBES[p].splice(0); + args.unshift(p); - var probe = PROVIDER.addProbe.apply(PROVIDER, args); - PROVIDER._rstfy_probes[p] = probe; - }); + var probe = PROVIDER.addProbe.apply(PROVIDER, args); + PROVIDER._rstfy_probes[p] = probe; + }); - PROVIDER.enable(); + PROVIDER.enable(); - PROVIDER.nextId = function nextId() { - if (++ID >= MAX_INT) - ID = 1; + PROVIDER.nextId = function nextId() { + if (++ID >= MAX_INT) + ID = 1; - return (ID); - }; - } + return (ID); + }; + } - return (PROVIDER); + return (PROVIDER); }(); diff --git a/node_modules/restify/lib/errors/http_error.js b/node_modules/restify/lib/errors/http_error.js index 514bff7..0cd1c0f 100644 --- a/node_modules/restify/lib/errors/http_error.js +++ b/node_modules/restify/lib/errors/http_error.js @@ -7,127 +7,122 @@ var assert = require('assert-plus'); var WError = require('verror').WError; - ///--- Globals var slice = Function.prototype.call.bind(Array.prototype.slice); - ///--- Helpers function codeToErrorName(code) { - code = parseInt(code, 10); - var status = http.STATUS_CODES[code]; - if (!status) - return (false); + code = parseInt(code, 10); + var status = http.STATUS_CODES[code]; + if (!status) + return (false); - var pieces = status.split(/\s+/); - var str = ''; - pieces.forEach(function (s) { - str += s.charAt(0).toUpperCase() + s.slice(1).toLowerCase(); - }); + var pieces = status.split(/\s+/); + var str = ''; + pieces.forEach(function (s) { + str += s.charAt(0).toUpperCase() + s.slice(1).toLowerCase(); + }); - str = str.replace(/\W+/g, ''); - if (!/\w+Error$/.test(str)) - str += 'Error'; + str = str.replace(/\W+/g, ''); + if (!/\w+Error$/.test(str)) + str += 'Error'; - return (str); + return (str); } - ///--- Error Base class function HttpError(options) { - assert.object(options, 'options'); - - options.constructorOpt = options.constructorOpt || HttpError; - WError.apply(this, arguments); - - var self = this; - var code = parseInt((options.statusCode || 500), 10); - this.statusCode = code; - this.body = options.body || { - code: codeToErrorName(code), - message: options.message || self.message - }; - this.message = options.message || self.message; + assert.object(options, 'options'); + + options.constructorOpt = options.constructorOpt || HttpError; + WError.apply(this, arguments); + + var self = this; + var code = parseInt((options.statusCode || 500), 10); + this.statusCode = code; + this.body = options.body || { + code: codeToErrorName(code), + message: options.message || self.message + }; + this.message = options.message || self.message; } util.inherits(HttpError, WError); - ///--- Exports module.exports = { - HttpError: HttpError, - - codeToHttpError: function codeToHttpError(code, message, body) { - var err; - var name = codeToErrorName(code); - - if (!name) { - err = new HttpError({ - statusCode: code, - message: message, - body: body - }); - err.name = 'Http' + code + 'Error'; - } else { - err = new module.exports[name]({ - body: body, - message: message, - constructorOpt: codeToHttpError, - statusCode: code - }); - } - - return (err); + HttpError: HttpError, + + codeToHttpError: function codeToHttpError(code, message, body) { + var err; + var name = codeToErrorName(code); + + if (!name) { + err = new HttpError({ + statusCode: code, + message: message, + body: body + }); + err.name = 'Http' + code + 'Error'; + } else { + err = new module.exports[name]({ + body: body, + message: message, + constructorOpt: codeToHttpError, + statusCode: code + }); } -}; + return (err); + } +}; // Export all the 4xx and 5xx HTTP Status codes as Errors var codes = Object.keys(http.STATUS_CODES); codes.forEach(function (code) { - if (code < 400) - return; + if (code < 400) + return; - var name = codeToErrorName(code); + var name = codeToErrorName(code); - module.exports[name] = function (cause, message) { - var index = 1; - var opts = { - statusCode: code - }; - - if (cause && cause instanceof Error) { - opts.cause = cause; - opts.constructorOpt = arguments.callee; - } else if (typeof (cause) === 'object') { - opts.body = cause.body; - opts.cause = cause.cause; - opts.constructorOpt = cause.constructorOpt; - opts.message = cause.message; - opts.statusCode = cause.statusCode || code; - } else { - opts.constructorOpt = arguments.callee; - index = 0; - } - - var args = slice(arguments, index); - args.unshift(opts); - HttpError.apply(this, args); + module.exports[name] = function (cause, message) { + var index = 1; + var opts = { + statusCode: code }; - util.inherits(module.exports[name], HttpError); - module.exports[name].displayName = - module.exports[name].prototype.name = - name; + if (cause && cause instanceof Error) { + opts.cause = cause; + opts.constructorOpt = arguments.callee; + } else if (typeof (cause) === 'object') { + opts.body = cause.body; + opts.cause = cause.cause; + opts.constructorOpt = cause.constructorOpt; + opts.message = cause.message; + opts.statusCode = cause.statusCode || code; + } else { + opts.constructorOpt = arguments.callee; + index = 0; + } + + var args = slice(arguments, index); + args.unshift(opts); + HttpError.apply(this, args); + }; + util.inherits(module.exports[name], HttpError); + + module.exports[name].displayName = + module.exports[name].prototype.name = + name; }); diff --git a/node_modules/restify/lib/errors/index.js b/node_modules/restify/lib/errors/index.js index a3fc363..74561cc 100644 --- a/node_modules/restify/lib/errors/index.js +++ b/node_modules/restify/lib/errors/index.js @@ -7,10 +7,10 @@ var restErrors = require('./rest_error'); module.exports = {}; Object.keys(httpErrors).forEach(function (k) { - module.exports[k] = httpErrors[k]; + module.exports[k] = httpErrors[k]; }); // Note some of the RestErrors overwrite plain HTTP errors. Object.keys(restErrors).forEach(function (k) { - module.exports[k] = restErrors[k]; + module.exports[k] = restErrors[k]; }); diff --git a/node_modules/restify/lib/errors/rest_error.js b/node_modules/restify/lib/errors/rest_error.js index 5f45058..1bda987 100644 --- a/node_modules/restify/lib/errors/rest_error.js +++ b/node_modules/restify/lib/errors/rest_error.js @@ -7,7 +7,6 @@ var assert = require('assert-plus'); var httpErrors = require('./http_error'); - ///--- Globals var slice = Function.prototype.call.bind(Array.prototype.slice); @@ -15,81 +14,79 @@ var slice = Function.prototype.call.bind(Array.prototype.slice); var HttpError = httpErrors.HttpError; var CODES = { - BadDigest: 400, - BadMethod: 405, - Internal: 500, // Don't have InternalErrorError - InvalidArgument: 409, - InvalidContent: 400, - InvalidCredentials: 401, - InvalidHeader: 400, - InvalidVersion: 400, - MissingParameter: 409, - NotAuthorized: 403, - PreconditionFailed: 412, - RequestExpired: 400, - RequestThrottled: 429, - ResourceNotFound: 404, - WrongAccept: 406 + BadDigest: 400, + BadMethod: 405, + Internal: 500, // Don't have InternalErrorError + InvalidArgument: 409, + InvalidContent: 400, + InvalidCredentials: 401, + InvalidHeader: 400, + InvalidVersion: 400, + MissingParameter: 409, + NotAuthorized: 403, + PreconditionFailed: 412, + RequestExpired: 400, + RequestThrottled: 429, + ResourceNotFound: 404, + WrongAccept: 406 }; - ///--- API function RestError(options) { - assert.object(options, 'options'); + assert.object(options, 'options'); - options.constructorOpt = options.constructorOpt || RestError; - HttpError.apply(this, arguments); + options.constructorOpt = options.constructorOpt || RestError; + HttpError.apply(this, arguments); - var self = this; - this.restCode = options.restCode || 'Error'; - this.body = options.body || { - code: self.restCode, - message: options.message || self.message - }; + var self = this; + this.restCode = options.restCode || 'Error'; + this.body = options.body || { + code: self.restCode, + message: options.message || self.message + }; } util.inherits(RestError, HttpError); - ///--- Exports module.exports = { - RestError: RestError + RestError: RestError }; Object.keys(CODES).forEach(function (k) { - var name = k; - if (!/\w+Error$/.test(name)) - name += 'Error'; - - module.exports[name] = function (cause, message) { - var index = 1; - var opts = { - restCode: (k === 'Internal' ? 'InternalError' : k), - statusCode: CODES[k] - }; - - opts.constructorOpt = arguments.callee; - - if (cause && cause instanceof Error) { - opts.cause = cause; - } else if (typeof (cause) === 'object') { - opts.body = cause.body; - opts.cause = cause.cause; - opts.message = cause.message; - opts.statusCode = cause.statusCode || CODES[k]; - } else { - index = 0; - } - - var args = slice(arguments, index); - args.unshift(opts); - RestError.apply(this, args); + var name = k; + if (!/\w+Error$/.test(name)) + name += 'Error'; + + module.exports[name] = function (cause, message) { + var index = 1; + var opts = { + restCode: (k === 'Internal' ? 'InternalError' : k), + statusCode: CODES[k] }; - util.inherits(module.exports[name], RestError); - module.exports[name].displayName = - module.exports[name].prototype.name = - name; + + opts.constructorOpt = arguments.callee; + + if (cause && cause instanceof Error) { + opts.cause = cause; + } else if (typeof (cause) === 'object') { + opts.body = cause.body; + opts.cause = cause.cause; + opts.message = cause.message; + opts.statusCode = cause.statusCode || CODES[k]; + } else { + index = 0; + } + + var args = slice(arguments, index); + args.unshift(opts); + RestError.apply(this, args); + }; + util.inherits(module.exports[name], RestError); + module.exports[name].displayName = + module.exports[name].prototype.name = + name; }); diff --git a/node_modules/restify/lib/formatters/binary.js b/node_modules/restify/lib/formatters/binary.js index 5cd81e6..d8b4d12 100644 --- a/node_modules/restify/lib/formatters/binary.js +++ b/node_modules/restify/lib/formatters/binary.js @@ -1,18 +1,17 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. - ///--- Exports function formatBinary(req, res, body) { - if (body instanceof Error) - res.statusCode = body.statusCode || 500; + if (body instanceof Error) + res.statusCode = body.statusCode || 500; - if (!Buffer.isBuffer(body)) - body = new Buffer(body.toString()); + if (!Buffer.isBuffer(body)) + body = new Buffer(body.toString()); - res.setHeader('Content-Length', body.length); - return (body); + res.setHeader('Content-Length', body.length); + return (body); } module.exports = formatBinary; \ No newline at end of file diff --git a/node_modules/restify/lib/formatters/index.js b/node_modules/restify/lib/formatters/index.js index 4fa9b9a..290e30a 100644 --- a/node_modules/restify/lib/formatters/index.js +++ b/node_modules/restify/lib/formatters/index.js @@ -1,12 +1,11 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. - ///--- Exports module.exports = { - 'application/javascript; q=0.1': require('./jsonp'), - 'application/json; q=0.4': require('./json'), - 'text/plain; q=0.3': require('./text'), - 'application/octet-stream; q=0.2': require('./binary') + 'application/javascript; q=0.1': require('./jsonp'), + 'application/json; q=0.4': require('./json'), + 'text/plain; q=0.3': require('./text'), + 'application/octet-stream; q=0.2': require('./binary') }; diff --git a/node_modules/restify/lib/formatters/json.js b/node_modules/restify/lib/formatters/json.js index 7508e98..cf4ca6d 100644 --- a/node_modules/restify/lib/formatters/json.js +++ b/node_modules/restify/lib/formatters/json.js @@ -1,30 +1,29 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. - ///--- Exports function formatJSON(req, res, body) { - if (body instanceof Error) { - // snoop for RestError or HttpError, but don't rely on - // instanceof - res.statusCode = body.statusCode || 500; - - if (body.body) { - body = body.body; - } else { - body = { - message: body.message - }; - } - } else if (Buffer.isBuffer(body)) { - body = body.toString('base64'); + if (body instanceof Error) { + // snoop for RestError or HttpError, but don't rely on + // instanceof + res.statusCode = body.statusCode || 500; + + if (body.body) { + body = body.body; + } else { + body = { + message: body.message + }; } + } else if (Buffer.isBuffer(body)) { + body = body.toString('base64'); + } - var data = JSON.stringify(body); - res.setHeader('Content-Length', Buffer.byteLength(data)); + var data = JSON.stringify(body); + res.setHeader('Content-Length', Buffer.byteLength(data)); - return (data); + return (data); } module.exports = formatJSON; diff --git a/node_modules/restify/lib/formatters/jsonp.js b/node_modules/restify/lib/formatters/jsonp.js index 96b7121..cb8729b 100644 --- a/node_modules/restify/lib/formatters/jsonp.js +++ b/node_modules/restify/lib/formatters/jsonp.js @@ -1,38 +1,37 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. - ///--- Exports function formatJSONP(req, res, body) { - if (!body) { - res.setHeader('Content-Length', 0); - return (null); - } - - if (body instanceof Error) { - if ((body.restCode || body.httpCode) && body.body) { - body = body.body; - } else { - body = { - message: body.message - }; - } + if (!body) { + res.setHeader('Content-Length', 0); + return (null); + } + + if (body instanceof Error) { + if ((body.restCode || body.httpCode) && body.body) { + body = body.body; + } else { + body = { + message: body.message + }; } + } - if (Buffer.isBuffer(body)) - body = body.toString('base64'); + if (Buffer.isBuffer(body)) + body = body.toString('base64'); - var cb = req.query.callback || req.query.jsonp; - var data; - if (cb) { - data = cb + '(' + JSON.stringify(body) + ');'; - } else { - data = JSON.stringify(body); - } + var cb = req.query.callback || req.query.jsonp; + var data; + if (cb) { + data = cb + '(' + JSON.stringify(body) + ');'; + } else { + data = JSON.stringify(body); + } - res.setHeader('Content-Length', Buffer.byteLength(data)); - return (data); + res.setHeader('Content-Length', Buffer.byteLength(data)); + return (data); } module.exports = formatJSONP; diff --git a/node_modules/restify/lib/formatters/text.js b/node_modules/restify/lib/formatters/text.js index d59817f..4a85641 100644 --- a/node_modules/restify/lib/formatters/text.js +++ b/node_modules/restify/lib/formatters/text.js @@ -1,21 +1,20 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. - ///--- Exports function formatText(req, res, body) { - if (body instanceof Error) { - res.statusCode = body.statusCode || 500; - body = body.message; - } else if (typeof (body) === 'object') { - body = JSON.stringify(body); - } else { - body = body.toString(); - } + if (body instanceof Error) { + res.statusCode = body.statusCode || 500; + body = body.message; + } else if (typeof (body) === 'object') { + body = JSON.stringify(body); + } else { + body = body.toString(); + } - res.setHeader('Content-Length', Buffer.byteLength(body)); - return (body); + res.setHeader('Content-Length', Buffer.byteLength(body)); + return (body); } module.exports = formatText; diff --git a/node_modules/restify/lib/http_date.js b/node_modules/restify/lib/http_date.js index 18ab3fb..c74398e 100644 --- a/node_modules/restify/lib/http_date.js +++ b/node_modules/restify/lib/http_date.js @@ -1,8 +1,8 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. module.exports = function httpDate(now) { - if (!now) - now = new Date(); + if (!now) + now = new Date(); - return (now.toUTCString()); + return (now.toUTCString()); }; diff --git a/node_modules/restify/lib/index.js b/node_modules/restify/lib/index.js index bb16f3a..ffc8e6a 100644 --- a/node_modules/restify/lib/index.js +++ b/node_modules/restify/lib/index.js @@ -11,84 +11,108 @@ var shallowCopy = require('./utils').shallowCopy; function createClient(options) { - var assert = require('assert-plus'); - var bunyan = require('./bunyan_helper'); - var clients = require('./clients'); - - assert.object(options, 'options'); - - var client; - var opts = shallowCopy(options); - opts.agent = options.agent; - opts.name = opts.name || 'restify'; - opts.type = opts.type || 'application/octet-stream'; - opts.log = opts.log || bunyan.createLogger(opts.name); - - switch (opts.type) { + if (typeof (options) === 'string') { + options = { + url: options + }; + } + + var assert = require('assert-plus'); + var bunyan = require('./bunyan_helper'); + var clients = require('./clients'); + + assert.object(options, 'options'); + + var client; + var opts = shallowCopy(options); + opts.agent = options.agent; + opts.name = opts.name || 'restify'; + opts.type = opts.type || 'application/octet-stream'; + opts.log = opts.log || bunyan.createLogger(opts.name); + + switch (opts.type) { case 'json': - client = new clients.JsonClient(opts); - break; + client = new clients.JsonClient(opts); + break; case 'string': - client = new clients.StringClient(opts); - break; + client = new clients.StringClient(opts); + break; case 'http': default: - client = new clients.HttpClient(opts); - break; - } + client = new clients.HttpClient(opts); + break; + } - return (client); + return (client); } function createJsonClient(options) { - options = options ? shallowCopy(options) : {}; - options.type = 'json'; - return (createClient(options)); + if (typeof (options) === 'string') { + options = { + url: options + }; + } + + options = options ? shallowCopy(options) : {}; + options.type = 'json'; + return (createClient(options)); } function createStringClient(options) { - options = options ? shallowCopy(options) : {}; - options.type = 'string'; - return (createClient(options)); + if (typeof (options) === 'string') { + options = { + url: options + }; + } + + options = options ? shallowCopy(options) : {}; + options.type = 'string'; + return (createClient(options)); } function createHttpClient(options) { - options = options ? shallowCopy(options) : {}; - options.type = 'http'; - return (createClient(options)); + if (typeof (options) === 'string') { + options = { + url: options + }; + } + + options = options ? shallowCopy(options) : {}; + options.type = 'http'; + return (createClient(options)); } function createServer(options) { - var bunyan = require('./bunyan_helper'); - var InternalError = require('./errors').InternalError; - var Router = require('./router'); - var Server = require('./server'); - - var opts = shallowCopy(options || {}); - var server; - - opts.name = opts.name || 'restify'; - opts.log = opts.log || bunyan.createLogger(opts.name); - opts.router = opts.router || new Router(opts); - - server = new Server(opts); - server.on('uncaughtException', function (req, res, route, e) { - if (this.listeners('uncaughtException').length > 1 || - res._headerSent) { - return (false); - } - - res.send(new InternalError(e, e.message || 'unexpected error')); - return (true); - }); - - return (server); + var bunyan = require('./bunyan_helper'); + var InternalError = require('./errors').InternalError; + var Router = require('./router'); + var Server = require('./server'); + + var opts = shallowCopy(options || {}); + var server; + + opts.name = opts.name || 'restify'; + opts.log = opts.log || bunyan.createLogger(opts.name); + opts.router = opts.router || new Router(opts); + + server = new Server(opts); + server.on('uncaughtException', function (req, res, route, e) { + if (this.listeners('uncaughtException').length > 1 || + res._headerSent) { + return (false); + } + + res.send(new InternalError(e, e.message || 'unexpected error')); + return (true); + }); + + return (server); } @@ -101,60 +125,59 @@ function createServer(options) { * @param {Object} a hash of parameter names to values for substitution. */ function realizeUrl(pattern, params) { - var p = pattern.replace(/\/:([^/]+)/g, function (match, k) { - return (params.hasOwnProperty(k) ? '/' + params[k] : match); - }); + var p = pattern.replace(/\/:([^/]+)/g, function (match, k) { + return (params.hasOwnProperty(k) ? '/' + params[k] : match); + }); - return (require('./utils').sanitizePath(p)); + return (require('./utils').sanitizePath(p)); } - ///--- Exports module.exports = { - // Client API - createClient: createClient, - createJsonClient: createJsonClient, - createJSONClient: createJsonClient, - createStringClient: createStringClient, - createHttpClient: createHttpClient, - get HttpClient() { - return (require('./clients').HttpClient); - }, - get JsonClient() { - return (require('./clients').JsonClient); - }, - get StringClient() { - return (require('./clients').StringClient); - }, - - // Miscellaneous API - get bunyan() { - return (require('./bunyan_helper')); - }, - - errors: {} + // Client API + createClient: createClient, + createJsonClient: createJsonClient, + createJSONClient: createJsonClient, + createStringClient: createStringClient, + createHttpClient: createHttpClient, + get HttpClient() { + return (require('./clients').HttpClient); + }, + get JsonClient() { + return (require('./clients').JsonClient); + }, + get StringClient() { + return (require('./clients').StringClient); + }, + + // Miscellaneous API + get bunyan() { + return (require('./bunyan_helper')); + }, + + errors: {} }; var errors = require('./errors'); Object.keys(errors).forEach(function (k) { - module.exports.errors[k] = errors[k]; - module.exports[k] = errors[k]; + module.exports.errors[k] = errors[k]; + module.exports[k] = errors[k]; }); if (!process.env.RESTIFY_CLIENT_ONLY) { - module.exports.createServer = createServer; - module.exports.httpDate = require('./http_date'); - module.exports.realizeUrl = realizeUrl; - module.exports.formatters = require('./formatters'); - module.exports.plugins = {}; - var plugins = require('./plugins'); - Object.keys(plugins).forEach(function (k) { - module.exports.plugins[k] = plugins[k]; - module.exports[k] = plugins[k]; - }); + module.exports.createServer = createServer; + module.exports.httpDate = require('./http_date'); + module.exports.realizeUrl = realizeUrl; + module.exports.formatters = require('./formatters'); + module.exports.plugins = {}; + var plugins = require('./plugins'); + Object.keys(plugins).forEach(function (k) { + module.exports.plugins[k] = plugins[k]; + module.exports[k] = plugins[k]; + }); } diff --git a/node_modules/restify/lib/plugins/accept.js b/node_modules/restify/lib/plugins/accept.js index 0ac16d6..e75b176 100644 --- a/node_modules/restify/lib/plugins/accept.js +++ b/node_modules/restify/lib/plugins/accept.js @@ -18,31 +18,31 @@ var NotAcceptableError = require('../errors').NotAcceptableError; * @throws {TypeError} on bad input */ function acceptParser(acceptable) { - if (!Array.isArray(acceptable)) - acceptable = [acceptable]; - assert.arrayOfString(acceptable, 'acceptable'); - - acceptable = acceptable.filter(function (a) { - return (a); - }).map(function (a) { - return ((a.indexOf('/') === -1) ? mime.lookup(a) : a); + if (!Array.isArray(acceptable)) + acceptable = [acceptable]; + assert.arrayOfString(acceptable, 'acceptable'); + + acceptable = acceptable.filter(function (a) { + return (a); + }).map(function (a) { + return ((a.indexOf('/') === -1) ? mime.lookup(a) : a); }).filter(function (a) { - return (a); + return (a); }); - var e = new NotAcceptableError('Server accepts: ' + acceptable.join()); + var e = new NotAcceptableError('Server accepts: ' + acceptable.join()); - function parseAccept(req, res, next) { - if (req.accepts(acceptable)) { - next(); - return; - } - - res.json(e); - next(false); + function parseAccept(req, res, next) { + if (req.accepts(acceptable)) { + next(); + return; } - return (parseAccept); + res.json(e); + next(false); + } + + return (parseAccept); } module.exports = acceptParser; diff --git a/node_modules/restify/lib/plugins/audit.js b/node_modules/restify/lib/plugins/audit.js index d1489c2..8be9230 100644 --- a/node_modules/restify/lib/plugins/audit.js +++ b/node_modules/restify/lib/plugins/audit.js @@ -20,79 +20,86 @@ var HttpError = require('../errors').HttpError; * @return {Function} to be used in server.after. */ function auditLogger(options) { - assert.object(options, 'options'); - assert.object(options.log, 'options.log'); - - var log = options.log.child({ - audit: true, - serializers: { - err: bunyan.stdSerializers.err, - req: function auditRequestSerializer(req) { - if (!req) - return (false); - - return ({ - method: req.method, - url: req.url, - headers: req.headers, - httpVersion: req.httpVersion, - trailers: req.trailers, - version: req.version, - body: options.body === true ? - req.body : undefined - }); - }, - res: function auditResponseSerializer(res) { - if (!res) - return (false); - - - var body; - if (options.body === true) { - if (res._body instanceof HttpError) { - body = res._body.body; - } else { - body = res._body; - } - } - - return ({ - statusCode: res.statusCode, - headers: res._headers, - trailer: res._trailer || false, - body: body - }); - } + assert.object(options, 'options'); + assert.object(options.log, 'options.log'); + + var log = options.log.child({ + audit: true, + serializers: { + err: bunyan.stdSerializers.err, + req: function auditRequestSerializer(req) { + if (!req) + return (false); + + var timers = {}; + (req.timers || []).forEach(function (time) { + var t = time.time; + var _t = Math.floor((1000000 * t[0]) + + (t[1] / 1000)); + timers[time.name] = _t; + }); + return ({ + method: req.method, + url: req.url, + headers: req.headers, + httpVersion: req.httpVersion, + trailers: req.trailers, + version: req.version(), + body: options.body === true ? + req.body : undefined, + timers: timers + }); + }, + res: function auditResponseSerializer(res) { + if (!res) + return (false); + + + var body; + if (options.body === true) { + if (res._body instanceof HttpError) { + body = res._body.body; + } else { + body = res._body; + } } - }); - - function audit(req, res, route, err) { - var latency = res.get('Response-Time'); - if (typeof (latency) !== 'number') - latency = Date.now() - req._time; - - var obj = { - remoteAddress: req.connection.remoteAddress, - remotePort: req.connection.remotePort, - req_id: req.getId(), - req: req, - res: res, - err: err, - latency: latency, - secure: req.secure, - _audit: true - }; - - log.info(obj, 'handled: %d', res.statusCode); - - return (true); - } - return (audit); + return ({ + statusCode: res.statusCode, + headers: res._headers, + trailer: res._trailer || false, + body: body + }); + } + } + }); + + function audit(req, res, route, err) { + var latency = res.get('Response-Time'); + if (typeof (latency) !== 'number') + latency = Date.now() - req._time; + + var obj = { + remoteAddress: req.connection.remoteAddress, + remotePort: req.connection.remotePort, + req_id: req.getId(), + req: req, + res: res, + err: err, + latency: latency, + secure: req.secure, + _audit: true + }; + + log.info(obj, 'handled: %d', res.statusCode); + + return (true); + } + + return (audit); } - ///-- Exports module.exports = auditLogger; diff --git a/node_modules/restify/lib/plugins/authorization.js b/node_modules/restify/lib/plugins/authorization.js index c126317..40010ee 100644 --- a/node_modules/restify/lib/plugins/authorization.js +++ b/node_modules/restify/lib/plugins/authorization.js @@ -5,72 +5,71 @@ var httpSignature = require('http-signature'); var errors = require('../errors'); - ///--- Globals var InvalidHeaderError = errors.InvalidHeaderError; var OPTIONS = { - algorithms: [ - 'rsa-sha1', - 'rsa-sha256', - 'rsa-sha512', - 'dsa-sha1', - 'hmac-sha1', - 'hmac-sha256', - 'hmac-sha512' - ] + algorithms: [ + 'rsa-sha1', + 'rsa-sha256', + 'rsa-sha512', + 'dsa-sha1', + 'hmac-sha1', + 'hmac-sha256', + 'hmac-sha512' + ] }; - ///--- Helpers function parseBasic(string) { - var decoded; - var index; - var pieces; - - decoded = (new Buffer(string, 'base64')).toString('utf8'); - if (!decoded) - throw new InvalidHeaderError('Authorization header invalid'); - - index = decoded.indexOf(':'); - if (index === -1) { - pieces = [decoded]; - } else { - pieces = [decoded.slice(0, index), decoded.slice(index + 1)]; - } - - if (!pieces || typeof (pieces[0]) !== 'string') - throw new InvalidHeaderError('Authorization header invalid'); - - // Allows for usernameless authentication - if (!pieces[0]) - pieces[0] = null; - - // Allows for passwordless authentication - if (!pieces[1]) - pieces[1] = null; - - return ({ - username: pieces[0], - password: pieces[1] - }); + var decoded; + var index; + var pieces; + + decoded = (new Buffer(string, 'base64')).toString('utf8'); + if (!decoded) + throw new InvalidHeaderError('Authorization header invalid'); + + index = decoded.indexOf(':'); + if (index === -1) { + pieces = [decoded]; + } else { + pieces = [decoded.slice(0, index), decoded.slice(index + 1)]; + } + + if (!pieces || typeof (pieces[0]) !== 'string') + throw new InvalidHeaderError('Authorization header invalid'); + + // Allows for usernameless authentication + if (!pieces[0]) + pieces[0] = null; + + // Allows for passwordless authentication + if (!pieces[1]) + pieces[1] = null; + + return ({ + username: pieces[0], + password: pieces[1] + }); } -function parseSignature(request) { - try { - return (httpSignature.parseRequest(request, OPTIONS)); - } catch (e) { - throw new InvalidHeaderError('Authorization header invalid: ' + - e.message); - } +function parseSignature(request, options) { + options = options || {}; + options.algorithms = OPTIONS.algorithms; + try { + return (httpSignature.parseRequest(request, options)); + } catch (e) { + throw new InvalidHeaderError('Authorization header invalid: ' + + e.message); + } } - /** * Returns a plugin that will parse the client's Authorization header. * @@ -90,50 +89,50 @@ function parseSignature(request) { * @return {Function} restify handler. * @throws {TypeError} on bad input */ -function authorizationParser() { - - function parseAuthorization(req, res, next) { - req.authorization = {}; - req.username = 'anonymous'; - - if (!req.headers.authorization) - return (next()); - - var pieces = req.headers.authorization.split(' ', 2); - if (!pieces || pieces.length !== 2) { - var e = new InvalidHeaderError('BasicAuth content ' + - 'is invalid.'); - return (next(e)); - } - - req.authorization.scheme = pieces[0]; - req.authorization.credentials = pieces[1]; - - try { - switch (pieces[0].toLowerCase()) { - case 'basic': - req.authorization.basic = parseBasic(pieces[1]); - req.username = req.authorization.basic.username; - break; - - case 'signature': - req.authorization.signature = - parseSignature(req); - req.username = - req.authorization.signature.keyId; - break; - - default: - break; - } - } catch (e2) { - return (next(e2)); - } - - return (next()); +function authorizationParser(options) { + + function parseAuthorization(req, res, next) { + req.authorization = {}; + req.username = 'anonymous'; + + if (!req.headers.authorization) + return (next()); + + var pieces = req.headers.authorization.split(' ', 2); + if (!pieces || pieces.length !== 2) { + var e = new InvalidHeaderError('BasicAuth content ' + + 'is invalid.'); + return (next(e)); } - return (parseAuthorization); + req.authorization.scheme = pieces[0]; + req.authorization.credentials = pieces[1]; + + try { + switch (pieces[0].toLowerCase()) { + case 'basic': + req.authorization.basic = parseBasic(pieces[1]); + req.username = req.authorization.basic.username; + break; + + case 'signature': + req.authorization.signature = + parseSignature(req, options); + req.username = + req.authorization.signature.keyId; + break; + + default: + break; + } + } catch (e2) { + return (next(e2)); + } + + return (next()); + } + + return (parseAuthorization); } module.exports = authorizationParser; diff --git a/node_modules/restify/lib/plugins/body_parser.js b/node_modules/restify/lib/plugins/body_parser.js index 1fe1795..851921f 100644 --- a/node_modules/restify/lib/plugins/body_parser.js +++ b/node_modules/restify/lib/plugins/body_parser.js @@ -8,7 +8,7 @@ var bodyReader = require('./body_reader'); var jsonParser = require('./json_body_parser'); var formParser = require('./form_body_parser'); var multipartParser = require('./multipart_parser'); - +var fieldedTextParser = require('./fielded_text_body_parser.js'); ///--- Globals @@ -16,64 +16,74 @@ var multipartParser = require('./multipart_parser'); var UnsupportedMediaTypeError = errors.UnsupportedMediaTypeError; - ///--- API function bodyParser(options) { - assert.optionalObject(options, 'options'); - options = options || {}; - options.bodyReader = true; - - var read = bodyReader(options); - var parseForm = formParser(options); - var parseJson = jsonParser(options); - var parseMultipart = multipartParser(options); - - function parseBody(req, res, next) { - // Allow use of 'requestBodyOnGet' flag to allow for merging of - // the request body of a GET request into req.params - if (req.method === 'HEAD') { - next(); - return; - } - if (req.method === 'GET') { - if (!options.requestBodyOnGet) { - next(); - return; - } - } - - if (req.contentLength() === 0 && !req.isChunked()) { - next(); - return; - } - - var parser; - var type = req.contentType(); - switch (type) { - case 'application/json': - parser = parseJson[0]; - break; - case 'application/x-www-form-urlencoded': - parser = parseForm[0]; - break; - case 'multipart/form-data': - parser = parseMultipart; - break; - default: - break; - } - - if (parser) { - parser(req, res, next); - } else if (options && options.rejectUnknown) { - next(new UnsupportedMediaTypeError(type)); - } else { - next(); - } + assert.optionalObject(options, 'options'); + options = options || {}; + options.bodyReader = true; + + var read = bodyReader(options); + var parseForm = formParser(options); + var parseJson = jsonParser(options); + var parseMultipart = multipartParser(options); + var parseFieldedText = fieldedTextParser(options); + + function parseBody(req, res, next) { + // Allow use of 'requestBodyOnGet' flag to allow for merging of + // the request body of a GET request into req.params + if (req.method === 'HEAD') { + next(); + return; + } + if (req.method === 'GET') { + if (!options.requestBodyOnGet) { + next(); + return; + } + } + + if (req.contentLength() === 0 && !req.isChunked()) { + next(); + return; + } + + var parser; + var type = req.contentType(); + switch (type) { + case 'application/json': + parser = parseJson[0]; + break; + case 'application/x-www-form-urlencoded': + parser = parseForm[0]; + break; + case 'multipart/form-data': + parser = parseMultipart; + break; + case 'text/tsv': + parser = parseFieldedText; + break; + case 'text/tab-separated-values': + parser = parseFieldedText; + break; + case 'text/csv': + parser = parseFieldedText; + break; + + default: + break; + } + + if (parser) { + parser(req, res, next); + } else if (options && options.rejectUnknown) { + next(new UnsupportedMediaTypeError(type)); + } else { + next(); } + } - return ([read, parseBody]); + return ([read, parseBody]); } module.exports = bodyParser; diff --git a/node_modules/restify/lib/plugins/body_reader.js b/node_modules/restify/lib/plugins/body_reader.js index 061ec21..3b02812 100644 --- a/node_modules/restify/lib/plugins/body_reader.js +++ b/node_modules/restify/lib/plugins/body_reader.js @@ -8,7 +8,6 @@ var assert = require('assert-plus'); var errors = require('../errors'); - ///--- Globals var BadDigestError = errors.BadDigestError; @@ -18,109 +17,108 @@ var RequestEntityTooLargeError = errors.RequestEntityTooLargeError; var MD5_MSG = 'Content-MD5 \'%s\' didn\'t match \'%s\''; - ///--- Helpers function createBodyWriter(req) { - var contentType = req.contentType(); - if (!contentType || - contentType === 'application/json' || - contentType === 'application/x-www-form-urlencoded' || - contentType === 'multipart/form-data' || - contentType.substr(0, 5) === 'text/') { - - req.body = ''; - return (function (chunk) { - req.body += chunk.toString('utf8'); - }); - } - - req.body = new Buffer(0); + var contentType = req.contentType(); + if (!contentType || + contentType === 'application/json' || + contentType === 'application/x-www-form-urlencoded' || + contentType === 'multipart/form-data' || + contentType.substr(0, 5) === 'text/') { + + req.body = ''; return (function (chunk) { - req.body = Buffer.concat([req.body, chunk]); + req.body += chunk.toString('utf8'); }); -} + } + req.body = new Buffer(0); + return (function (chunk) { + req.body = Buffer.concat([req.body, chunk]); + }); +} ///--- API function bodyReader(options) { - options = options || {}; - assert.object(options, 'options'); - - var maxBodySize = options.maxBodySize || 0; - - function readBody(req, res, next) { - if ((req.getContentLength() === 0 && !req.isChunked()) || - req.contentType() === 'multipart/form-data') { - next(); - return; - } - var bodyWriter = createBodyWriter(req); - - function done() { - if (maxBodySize && bytesReceived > maxBodySize) { - var msg = 'Request body size exceeds ' + - maxBodySize; - next(new RequestEntityTooLargeError(msg)); - return; - } - - if (!req.body.length) { - next(); - return; - } - - if (hash && md5 !== (digest = hash.digest('base64'))) { - next(new BadDigestError(MD5_MSG, md5, digest)); - return; - } - - next(); - } - - var bytesReceived = 0; - var digest; - var gz; - var hash; - var md5; - if ((md5 = req.headers['content-md5'])) - hash = crypto.createHash('md5'); - - if (req.headers['content-encoding'] === 'gzip') { - gz = zlib.createGunzip(); - gz.on('data', function onData(chunk) { - bodyWriter(chunk); - }); - gz.once('end', done); - req.once('end', gz.end.bind(gz)); - } else { - req.once('end', done); - } - - req.on('data', function onRequestData(chunk) { - if (maxBodySize) { - bytesReceived += chunk.length; - if (bytesReceived > maxBodySize) - return; - } - - if (hash) - hash.update(chunk, 'binary'); - - if (gz) { - gz.write(chunk); - } else { - bodyWriter(chunk); - } - }); - - req.once('error', next); - req.resume(); + options = options || {}; + assert.object(options, 'options'); + + var maxBodySize = options.maxBodySize || 0; + + function readBody(req, res, next) { + if ((req.getContentLength() === 0 && !req.isChunked()) || + req.contentType() === 'multipart/form-data' || + req.contentType() === 'application/octet-stream') { + next(); + return; + } + var bodyWriter = createBodyWriter(req); + + function done() { + if (maxBodySize && bytesReceived > maxBodySize) { + var msg = 'Request body size exceeds ' + + maxBodySize; + next(new RequestEntityTooLargeError(msg)); + return; + } + + if (!req.body.length) { + next(); + return; + } + + if (hash && md5 !== (digest = hash.digest('base64'))) { + next(new BadDigestError(MD5_MSG, md5, digest)); + return; + } + + next(); + } + + var bytesReceived = 0; + var digest; + var gz; + var hash; + var md5; + if ((md5 = req.headers['content-md5'])) + hash = crypto.createHash('md5'); + + if (req.headers['content-encoding'] === 'gzip') { + gz = zlib.createGunzip(); + gz.on('data', function onData(chunk) { + bodyWriter(chunk); + }); + gz.once('end', done); + req.once('end', gz.end.bind(gz)); + } else { + req.once('end', done); } - return (readBody); + req.on('data', function onRequestData(chunk) { + if (maxBodySize) { + bytesReceived += chunk.length; + if (bytesReceived > maxBodySize) + return; + } + + if (hash) + hash.update(chunk, 'binary'); + + if (gz) { + gz.write(chunk); + } else { + bodyWriter(chunk); + } + }); + + req.once('error', next); + req.resume(); + } + + return (readBody); } module.exports = bodyReader; diff --git a/node_modules/restify/lib/plugins/bunyan.js b/node_modules/restify/lib/plugins/bunyan.js index 6f41986..4bc16a7 100644 --- a/node_modules/restify/lib/plugins/bunyan.js +++ b/node_modules/restify/lib/plugins/bunyan.js @@ -5,43 +5,41 @@ var assert = require('assert-plus'); var shallowCopy = require('../utils').shallowCopy; - ///--- API function requestLogger(options) { - assert.optionalObject(options); - options = options || {}; - - var props; - if (options.properties) { - props = shallowCopy(options.properties); - } else { - props = {}; + assert.optionalObject(options); + options = options || {}; + + var props; + if (options.properties) { + props = shallowCopy(options.properties); + } else { + props = {}; + } + if (options.serializers) + props.serializers = options.serializers; + + function bunyan(req, res, next) { + if (!req.log && !options.log) { + next(); + return; } - if (options.serializers) - props.serializers = options.serializers; - - function bunyan(req, res, next) { - if (!req.log && !options.log) { - next(); - return; - } - var log = req.log || options.log; + var log = req.log || options.log; - props.req_id = req.getId(); - req.log = log.child(props, props.serializers ? false : true); - if (props.req_id) - delete props.req_id; + props.req_id = req.getId(); + req.log = log.child(props, props.serializers ? false : true); + if (props.req_id) + delete props.req_id; - next(); - } + next(); + } - return (bunyan); + return (bunyan); } - ///--- Exports module.exports = requestLogger; diff --git a/node_modules/restify/lib/plugins/conditional_request.js b/node_modules/restify/lib/plugins/conditional_request.js index 63cc921..3e3321b 100644 --- a/node_modules/restify/lib/plugins/conditional_request.js +++ b/node_modules/restify/lib/plugins/conditional_request.js @@ -3,7 +3,6 @@ var errors = require('../errors'); - ///--- Globals var BadRequestError = errors.BadRequestError; @@ -15,165 +14,163 @@ var IF_MOD_FAIL = 'object was modified at \'%s\'; if-modified-since \'%s\''; var IF_UNMOD_FAIL = 'object was modified at \'%s\'; if-unmodified-since \'%s\''; - ///--- API // Reference RFC2616 section 14 for an explanation of what this all does. function checkIfMatch(req, res, next) { - var clientETags; - var cur; - var etag = res.etag || res.getHeader('etag') || ''; - var ifMatch; - var matched = false; - - if ((ifMatch = req.headers['if-match'])) { - /* JSSTYLED */ - clientETags = ifMatch.split(/\s*,\s*/); - - for (var i = 0; i < clientETags.length; i++) { - cur = clientETags[i]; - // only strong comparison - /* JSSTYLED */ - cur = cur.replace(/^W\//, ''); - /* JSSTYLED */ - cur = cur.replace(/^"(\w*)"$/, '$1'); - - if (cur === '*' || cur === etag) { - matched = true; - break; - } - } - - if (!matched) { - var err = new PreconditionFailedError(IF_MATCH_FAIL, - ifMatch, - etag); - return (next(err)); - } + var clientETags; + var cur; + var etag = res.etag || res.getHeader('etag') || ''; + var ifMatch; + var matched = false; + + if ((ifMatch = req.headers['if-match'])) { + /* JSSTYLED */ + clientETags = ifMatch.split(/\s*,\s*/); + + for (var i = 0; i < clientETags.length; i++) { + cur = clientETags[i]; + // only strong comparison + /* JSSTYLED */ + cur = cur.replace(/^W\//, ''); + /* JSSTYLED */ + cur = cur.replace(/^"(\w*)"$/, '$1'); + + if (cur === '*' || cur === etag) { + matched = true; + break; + } } - return (next()); -} - - -function checkIfNoneMatch(req, res, next) { - var clientETags; - var cur; - var etag = res.etag || res.getHeader('etag') || ''; - var ifNoneMatch; - var matched = false; - - if ((ifNoneMatch = req.headers['if-none-match'])) { - /* JSSTYLED */ - clientETags = ifNoneMatch.split(/\s*,\s*/); - - for (var i = 0; i < clientETags.length; i++) { - cur = clientETags[i]; - // ignore weak validation - /* JSSTYLED */ - cur = cur.replace(/^W\//, ''); - /* JSSTYLED */ - cur = cur.replace(/^"(\w*)"$/, '$1'); - - if (cur === '*' || cur === etag) { - matched = true; - break; - } - } - - if (!matched) - return (next()); - - if (req.method !== 'GET' && req.method !== 'HEAD') { - var err = new PreconditionFailedError(IF_NO_MATCH_FAIL, - ifNoneMatch, - etag); - return (next(err)); - } - - res.send(304); - return (next(false)); + if (!matched) { + var err = new PreconditionFailedError(IF_MATCH_FAIL, + ifMatch, + etag); + return (next(err)); } + } - return (next()); + return (next()); } -function checkIfModified(req, res, next) { - var code; - var err; - var ctime = req.header('if-modified-since'); - var mtime = res.mtime || res.header('Last-Modified') || ''; - - if (!mtime || !ctime) { - next(); - return; +function checkIfNoneMatch(req, res, next) { + var clientETags; + var cur; + var etag = res.etag || res.getHeader('etag') || ''; + var ifNoneMatch; + var matched = false; + + if ((ifNoneMatch = req.headers['if-none-match'])) { + /* JSSTYLED */ + clientETags = ifNoneMatch.split(/\s*,\s*/); + + for (var i = 0; i < clientETags.length; i++) { + cur = clientETags[i]; + // ignore weak validation + /* JSSTYLED */ + cur = cur.replace(/^W\//, ''); + /* JSSTYLED */ + cur = cur.replace(/^"(\w*)"$/, '$1'); + + if (cur === '*' || cur === etag) { + matched = true; + break; + } } - try { - // - // TODO handle Range header modifications - // - // Note: this is not technically correct as per 2616 - - // 2616 only specifies semantics for GET requests, not - // any other method - but using if-modified-since with a - // PUT or DELETE seems like returning 412 is sane - // - if (Date.parse(mtime) <= Date.parse(ctime)) { - switch (req.method) { - case 'GET': - case 'HEAD': - code = 304; - break; - - default: - err = new PreconditionFailedError(IF_MOD_FAIL, - mtime, - ctime); - break; - } - } - } catch (e) { - next(new BadRequestError(e.message)); - return; - } + if (!matched) + return (next()); - if (code !== undefined) { - res.send(code); - next(false); - return; + if (req.method !== 'GET' && req.method !== 'HEAD') { + var err = new PreconditionFailedError(IF_NO_MATCH_FAIL, + ifNoneMatch, + etag); + return (next(err)); } - next(err); -} + res.send(304); + return (next(false)); + } + return (next()); +} -function checkIfUnmodified(req, res, next) { - var err; - var ctime = req.headers['if-unmodified-since']; - var mtime = res.mtime || res.header('Last-Modified') || ''; - if (!mtime || !ctime) { - next(); - return; +function checkIfModified(req, res, next) { + var code; + var err; + var ctime = req.header('if-modified-since'); + var mtime = res.mtime || res.header('Last-Modified') || ''; + + if (!mtime || !ctime) { + next(); + return; + } + + try { + // + // TODO handle Range header modifications + // + // Note: this is not technically correct as per 2616 - + // 2616 only specifies semantics for GET requests, not + // any other method - but using if-modified-since with a + // PUT or DELETE seems like returning 412 is sane + // + if (Date.parse(mtime) <= Date.parse(ctime)) { + switch (req.method) { + case 'GET': + case 'HEAD': + code = 304; + break; + + default: + err = new PreconditionFailedError(IF_MOD_FAIL, + mtime, + ctime); + break; + } } + } catch (e) { + next(new BadRequestError(e.message)); + return; + } + + if (code !== undefined) { + res.send(code); + next(false); + return; + } + + next(err); +} + - try { - if (Date.parse(mtime) > Date.parse(ctime)) { - err = new PreconditionFailedError(IF_UNMOD_FAIL, - mtime, - ctime); - } - } catch (e) { - next(new BadRequestError(e.message)); - return; +function checkIfUnmodified(req, res, next) { + var err; + var ctime = req.headers['if-unmodified-since']; + var mtime = res.mtime || res.header('Last-Modified') || ''; + + if (!mtime || !ctime) { + next(); + return; + } + + try { + if (Date.parse(mtime) > Date.parse(ctime)) { + err = new PreconditionFailedError(IF_UNMOD_FAIL, + mtime, + ctime); } + } catch (e) { + next(new BadRequestError(e.message)); + return; + } - next(err); + next(err); } - ///--- Exports /** @@ -183,13 +180,13 @@ function checkIfUnmodified(req, res, next) { * If-Unmodified-Since header. */ function conditionalRequest() { - var chain = [ - checkIfMatch, - checkIfNoneMatch, - checkIfModified, - checkIfUnmodified - ]; - return (chain); + var chain = [ + checkIfMatch, + checkIfNoneMatch, + checkIfModified, + checkIfUnmodified + ]; + return (chain); } module.exports = conditionalRequest; diff --git a/node_modules/restify/lib/plugins/cors.js b/node_modules/restify/lib/plugins/cors.js index 695321d..7fb5778 100644 --- a/node_modules/restify/lib/plugins/cors.js +++ b/node_modules/restify/lib/plugins/cors.js @@ -3,27 +3,26 @@ var assert = require('assert-plus'); - ///--- Globals var ALLOW_HEADERS = [ - 'accept', - 'accept-version', - 'content-type', - 'request-id', - 'origin', - 'x-api-version', - 'x-request-id' + 'accept', + 'accept-version', + 'content-type', + 'request-id', + 'origin', + 'x-api-version', + 'x-request-id' ]; var EXPOSE_HEADERS = [ - 'api-version', - 'content-length', - 'content-md5', - 'content-type', - 'date', - 'request-id', - 'response-time' + 'api-version', + 'content-length', + 'content-md5', + 'content-type', + 'date', + 'request-id', + 'response-time' ]; // Normal @@ -32,24 +31,22 @@ var AC_ALLOW_CREDS = 'Access-Control-Allow-Credentials'; var AC_EXPOSE_HEADERS = 'Access-Control-Expose-Headers'; - ///--- Internal Functions function matchOrigin(req, origins) { - var origin = req.headers['origin']; - - function belongs(o) { - if (origin === o || o === '*') { - origin = o; - return (true); - } + var origin = req.headers['origin']; - return (false); + function belongs(o) { + if (origin === o || o === '*') { + origin = o; + return (true); } - return ((origin && origins.some(belongs)) ? origin : false); -} + return (false); + } + return ((origin && origins.some(belongs)) ? origin : false); +} ///--- API @@ -60,64 +57,71 @@ function matchOrigin(req, origins) { // If "simple" request (paraphrased): // // 1. If the Origin header is not set, or if the value of Origin is not a -// case-senstive match to any values listed in `opts.origins`, do not +// case-sensitive match to any values listed in `opts.origins`, do not // send any CORS headers // // 2. If the resource supports credentials add a single -// 'Access-Controlw-Allow-Credentials' header with the value as "true", and +// 'Access-Control-Allow-Credentials' header with the value as "true", and // ensure 'AC-Allow-Origin' is not '*', but is the request header value, // otherwise add a single Access-Control-Allow-Origin header, with either the // value of the Origin header or the string "*" as value // // 3. Add Access-Control-Expose-Headers as appropriate // -// Preflight requests are handled by the router internally +// Pre-flight requests are handled by the router internally // function cors(opts) { - assert.optionalObject(opts, 'options'); - opts = opts || {}; - assert.optionalArrayOfString(opts.origins, 'options.origins'); - assert.optionalBool(opts.credentials, 'options.credentials'); - assert.optionalArrayOfString(opts.headers, 'options.headers'); - - var headers = (opts.headers || []).slice(0); - var origins = opts.origins || ['*']; - - EXPOSE_HEADERS.forEach(function (h) { - if (headers.indexOf(h) === -1) - headers.push(h); - }); - - // Handler for simple requests - function restifyCORSSimple(req, res, next) { - var origin; - if (!(origin = matchOrigin(req, origins))) { - next(); - return; - } - - function corsOnHeader() { - if (opts.credentials) { - origin = req.headers['origin']; - res.setHeader(AC_ALLOW_ORIGIN, origin); - res.setHeader(AC_ALLOW_CREDS, 'true'); - } else { - res.setHeader(AC_ALLOW_ORIGIN, origin); - } - - res.setHeader(AC_EXPOSE_HEADERS, headers.join(', ')); - } - - res.once('header', corsOnHeader); - next(); + assert.optionalObject(opts, 'options'); + opts = opts || {}; + assert.optionalArrayOfString(opts.origins, 'options.origins'); + assert.optionalBool(opts.credentials, 'options.credentials'); + assert.optionalArrayOfString(opts.headers, 'options.headers'); + + cors.credentials = opts.credentials; + cors.origins = opts.origins || ['*']; + + var headers = (opts.headers || []).slice(0); + var origins = opts.origins || ['*']; + + EXPOSE_HEADERS.forEach(function (h) { + if (headers.indexOf(h) === -1) + headers.push(h); + }); + + // Handler for simple requests + function restifyCORSSimple(req, res, next) { + var origin; + if (!(origin = matchOrigin(req, origins))) { + next(); + return; } - return (restifyCORSSimple); -} + function corsOnHeader() { + origin = req.headers['origin']; + if (opts.credentials) { + res.setHeader(AC_ALLOW_ORIGIN, origin); + res.setHeader(AC_ALLOW_CREDS, 'true'); + } else { + res.setHeader(AC_ALLOW_ORIGIN, origin); + } + + res.setHeader(AC_EXPOSE_HEADERS, headers.join(', ')); + } + res.once('header', corsOnHeader); + next(); + } + + return (restifyCORSSimple); +} ///--- Exports module.exports = cors; +// All of these are needed for the pre-flight code over in lib/router.js cors.ALLOW_HEADERS = ALLOW_HEADERS; +cors.EXPOSE_HEADERS = EXPOSE_HEADERS; +cors.credentials = false; +cors.origins = []; +cors.matchOrigin = matchOrigin; diff --git a/node_modules/restify/lib/plugins/date.js b/node_modules/restify/lib/plugins/date.js index 1605d05..dfae70e 100644 --- a/node_modules/restify/lib/plugins/date.js +++ b/node_modules/restify/lib/plugins/date.js @@ -5,7 +5,6 @@ var assert = require('assert-plus'); var errors = require('../errors'); - ///--- Globals var InvalidHeaderError = errors.InvalidHeaderError; @@ -15,7 +14,6 @@ var BAD_MSG = 'Date header is invalid'; var OLD_MSG = 'Date header %s is too old'; - ///--- API /** @@ -29,51 +27,51 @@ var OLD_MSG = 'Date header %s is too old'; * @throws {TypeError} on bad input */ function dateParser(clockSkew) { - if (!clockSkew) - clockSkew = 300; - assert.number(clockSkew, 'clockSkew'); + if (!clockSkew) + clockSkew = 300; + assert.number(clockSkew, 'clockSkew'); - clockSkew = clockSkew * 1000; + clockSkew = clockSkew * 1000; - function parseDate(req, res, next) { - if (!req.headers.date) - return (next()); + function parseDate(req, res, next) { + if (!req.headers.date) + return (next()); - var e; - var date = req.headers.date; - var log = req.log; + var e; + var date = req.headers.date; + var log = req.log; - try { - var now = Date.now(); - var sent = new Date(date).getTime(); + try { + var now = Date.now(); + var sent = new Date(date).getTime(); - if (log.trace()) { - log.trace({ - allowedSkew: clockSkew, - now: now, - sent: sent - }, 'Checking clock skew'); - } + if (log.trace()) { + log.trace({ + allowedSkew: clockSkew, + now: now, + sent: sent + }, 'Checking clock skew'); + } - if ((now - sent) > clockSkew) { - e = new RequestExpiredError(OLD_MSG, date); - return (next(e)); - } + if ((now - sent) > clockSkew) { + e = new RequestExpiredError(OLD_MSG, date); + return (next(e)); + } - } catch (err) { - log.trace({ - err: err - }, 'Bad Date header: %s', date); + } catch (err) { + log.trace({ + err: err + }, 'Bad Date header: %s', date); - e = new InvalidHeaderError(BAD_MSG, date); - return (next(e)); - } - - return (next()); + e = new InvalidHeaderError(BAD_MSG, date); + return (next(e)); } - return (parseDate); + return (next()); + } + + return (parseDate); } module.exports = dateParser; diff --git a/node_modules/restify/lib/plugins/form_body_parser.js b/node_modules/restify/lib/plugins/form_body_parser.js index 682e2ad..e880d77 100644 --- a/node_modules/restify/lib/plugins/form_body_parser.js +++ b/node_modules/restify/lib/plugins/form_body_parser.js @@ -9,13 +9,11 @@ var bodyReader = require('./body_reader'); var errors = require('../errors'); - ///--- Globals var MIME_TYPE = 'application/x-www-form-urlencoded'; - ///--- API /** @@ -29,47 +27,47 @@ var MIME_TYPE = 'application/x-www-form-urlencoded'; * @throws {TypeError} on bad input */ function urlEncodedBodyParser(options) { - options = options || {}; - assert.object(options, 'options'); - - var override = options.overrideParams; - - function parseUrlEncodedBody(req, res, next) { - if (req.getContentType() !== MIME_TYPE || !req.body) { - next(); - return; - } - - try { - var params = querystring.parse(req.body); - if (options.mapParams !== false) { - var keys = Object.keys(params); - keys.forEach(function (k) { - var p = req.params[k]; - if (p && !override) - return (false); - - req.params[k] = params[k]; - return (true); - }); - } else { - req._body = req.body; - req.body = params; - } - } catch (e) { - next(new errors.InvalidContentError(e.message)); - return; - } - - req.log.trace('req.params now: %j', req.params); - next(); + options = options || {}; + assert.object(options, 'options'); + + var override = options.overrideParams; + + function parseUrlEncodedBody(req, res, next) { + if (req.getContentType() !== MIME_TYPE || !req.body) { + next(); + return; } - var chain = []; - if (!options.bodyReader) - chain.push(bodyReader(options)); - chain.push(parseUrlEncodedBody); - return (chain); + try { + var params = querystring.parse(req.body); + if (options.mapParams !== false) { + var keys = Object.keys(params); + keys.forEach(function (k) { + var p = req.params[k]; + if (p && !override) + return (false); + + req.params[k] = params[k]; + return (true); + }); + } else { + req._body = req.body; + req.body = params; + } + } catch (e) { + next(new errors.InvalidContentError(e.message)); + return; + } + + req.log.trace('req.params now: %j', req.params); + next(); + } + + var chain = []; + if (!options.bodyReader) + chain.push(bodyReader(options)); + chain.push(parseUrlEncodedBody); + return (chain); } module.exports = urlEncodedBodyParser; diff --git a/node_modules/restify/lib/plugins/full_response.js b/node_modules/restify/lib/plugins/full_response.js index 19d298f..2335b17 100644 --- a/node_modules/restify/lib/plugins/full_response.js +++ b/node_modules/restify/lib/plugins/full_response.js @@ -5,106 +5,102 @@ var crypto = require('crypto'); var httpDate = require('../http_date'); - ///--- Globals var ALLOW_HEADERS = [ - 'Accept', - 'Accept-Version', - 'Content-Length', - 'Content-MD5', - 'Content-Type', - 'Date', - 'Api-Version', - 'Response-Time' + 'Accept', + 'Accept-Version', + 'Content-Length', + 'Content-MD5', + 'Content-Type', + 'Date', + 'Api-Version', + 'Response-Time' ].join(', '); var EXPOSE_HEADERS = [ - 'Api-Version', - 'Request-Id', - 'Response-Time' + 'Api-Version', + 'Request-Id', + 'Response-Time' ].join(', '); - ///--- API function setHeaders(req, res) { - var hash; - var now = new Date(); - var methods; + var hash; + var now = new Date(); + var methods; - if (!res.getHeader('Access-Control-Allow-Origin')) - res.setHeader('Access-Control-Allow-Origin', '*'); + if (!res.getHeader('Access-Control-Allow-Origin')) + res.setHeader('Access-Control-Allow-Origin', '*'); - if (!res.getHeader('Access-Control-Allow-Headers')) - res.setHeader('Access-Control-Allow-Headers', ALLOW_HEADERS); + if (!res.getHeader('Access-Control-Allow-Headers')) + res.setHeader('Access-Control-Allow-Headers', ALLOW_HEADERS); - if (!res.getHeader('Access-Control-Allow-Methods')) { - if (res.methods && res.methods.length > 0) { - methods = res.methods.join(', '); - res.setHeader('Access-Control-Allow-Methods', methods); - } + if (!res.getHeader('Access-Control-Allow-Methods')) { + if (res.methods && res.methods.length > 0) { + methods = res.methods.join(', '); + res.setHeader('Access-Control-Allow-Methods', methods); } + } - if (!res.getHeader('Access-Control-Expose-Headers')) - res.setHeader('Access-Control-Expose-Headers', EXPOSE_HEADERS); + if (!res.getHeader('Access-Control-Expose-Headers')) + res.setHeader('Access-Control-Expose-Headers', EXPOSE_HEADERS); - if (!res.getHeader('Connection')) { - res.setHeader('Connection', - req.isKeepAlive() ? 'Keep-Alive' : 'close'); - } + if (!res.getHeader('Connection')) { + res.setHeader('Connection', + req.isKeepAlive() ? 'Keep-Alive' : 'close'); + } - if (res._data && !res.getHeader('Content-MD5')) { - hash = crypto.createHash('md5'); - hash.update(res._data); - res.setHeader('Content-MD5', hash.digest('base64')); - } + if (res._data && !res.getHeader('Content-MD5')) { + hash = crypto.createHash('md5'); + hash.update(res._data); + res.setHeader('Content-MD5', hash.digest('base64')); + } - if (!res.getHeader('Date')) - res.setHeader('Date', httpDate(now)); + if (!res.getHeader('Date')) + res.setHeader('Date', httpDate(now)); - if (res.etag && !res.getHeader('Etag')) - res.setHeader('Etag', res.etag); + if (res.etag && !res.getHeader('Etag')) + res.setHeader('Etag', res.etag); - if (!res.getHeader('Server')) - res.setHeader('Server', res.serverName); + if (!res.getHeader('Server')) + res.setHeader('Server', res.serverName); - if (res.version && !res.getHeader('Api-Version')) - res.setHeader('Api-Version', res.version); + if (res.version && !res.getHeader('Api-Version')) + res.setHeader('Api-Version', res.version); - if (!res.getHeader('Request-Id')) - res.setHeader('Request-Id', req.getId()); + if (!res.getHeader('Request-Id')) + res.setHeader('Request-Id', req.getId()); - if (!res.getHeader('Response-Time')) - res.setHeader('Response-Time', now.getTime() - req._time); + if (!res.getHeader('Response-Time')) + res.setHeader('Response-Time', now.getTime() - req._time); } - function fullResponse() { - function restifyResponseHeaders(req, res, next) { - res.once('header', function () { + function restifyResponseHeaders(req, res, next) { + res.once('header', function () { - // Restify 1.0 compatibility - if (res.defaultResponseFormatters) - res.defaultResponseFormatters(res._data); + // Restify 1.0 compatibility + if (res.defaultResponseFormatters) + res.defaultResponseFormatters(res._data); - res.emit('beforeSend', res._data, res._body); + res.emit('beforeSend', res._data, res._body); - // end backwards-compatibility - return (setHeaders(req, res)); - }); + // end backwards-compatibility + return (setHeaders(req, res)); + }); - return (next()); - } + return (next()); + } - return (restifyResponseHeaders); + return (restifyResponseHeaders); } - ///--- Exports module.exports = fullResponse; diff --git a/node_modules/restify/lib/plugins/gzip.js b/node_modules/restify/lib/plugins/gzip.js index 6f5d2ea..855a6ae 100644 --- a/node_modules/restify/lib/plugins/gzip.js +++ b/node_modules/restify/lib/plugins/gzip.js @@ -6,47 +6,46 @@ var assert = require('assert-plus'); function _writeHead(originalFunction) { - this.removeHeader('Content-Length'); - originalFunction.apply(this, Array.prototype.slice.call(arguments, 1)); + this.removeHeader('Content-Length'); + originalFunction.apply(this, Array.prototype.slice.call(arguments, 1)); } ///--- API function gzipResponse(opts) { - assert.optionalObject(opts, 'options'); - - function gzip(req, res, next) { - if (!req.acceptsEncoding('gzip')) { - next(); - return; - } - - var gz = zlib.createGzip(opts); - - gz.on('data', res.write.bind(res)); - gz.once('end', res.end.bind(res)); - gz.on('drain', res.emit.bind(res, 'drain')); - - var origWrite = res.write; - var origEnd = res.end; - var origWriteHead = res.writeHead; - res.handledGzip = function _handledGzip() { - res.write = origWrite; - res.end = origEnd; - res.writeHead = origWriteHead; - }; - - res.write = gz.write.bind(gz); - res.end = gz.end.bind(gz); - - res.writeHead = _writeHead.bind(res, res.writeHead); - res.setHeader('Content-Encoding', 'gzip'); - next(); + assert.optionalObject(opts, 'options'); + + function gzip(req, res, next) { + if (!req.acceptsEncoding('gzip')) { + next(); + return; } - return (gzip); -} + var gz = zlib.createGzip(opts); + + gz.on('data', res.write.bind(res)); + gz.once('end', res.end.bind(res)); + gz.on('drain', res.emit.bind(res, 'drain')); + + var origWrite = res.write; + var origEnd = res.end; + var origWriteHead = res.writeHead; + res.handledGzip = function _handledGzip() { + res.write = origWrite; + res.end = origEnd; + res.writeHead = origWriteHead; + }; + res.write = gz.write.bind(gz); + res.end = gz.end.bind(gz); + + res.writeHead = _writeHead.bind(res, res.writeHead); + res.setHeader('Content-Encoding', 'gzip'); + next(); + } + + return (gzip); +} ///--- Exports diff --git a/node_modules/restify/lib/plugins/index.js b/node_modules/restify/lib/plugins/index.js index 521294f..c4fc56b 100644 --- a/node_modules/restify/lib/plugins/index.js +++ b/node_modules/restify/lib/plugins/index.js @@ -3,28 +3,28 @@ ///--- Exports module.exports = { - acceptParser: require('./accept'), - auditLogger: require('./audit'), - authorizationParser: require('./authorization'), - bodyParser: require('./body_parser'), - conditionalRequest: require('./conditional_request'), - CORS: require('./cors'), - dateParser: require('./date'), - jsonp: require('./jsonp'), - urlEncodedBodyParser: require('./form_body_parser'), - requestLogger: require('./bunyan'), - gzipResponse: require('./gzip'), - fullResponse: require('./full_response'), - jsonBodyParser: require('./json_body_parser'), - multipartBodyParser: require('./multipart_parser'), - queryParser: require('./query'), - sanitizePath: require('./pre/pre_path'), - serveStatic: require('./static'), - throttle: require('./throttle'), + acceptParser: require('./accept'), + auditLogger: require('./audit'), + authorizationParser: require('./authorization'), + bodyParser: require('./body_parser'), + conditionalRequest: require('./conditional_request'), + CORS: require('./cors'), + dateParser: require('./date'), + jsonp: require('./jsonp'), + urlEncodedBodyParser: require('./form_body_parser'), + requestLogger: require('./bunyan'), + gzipResponse: require('./gzip'), + fullResponse: require('./full_response'), + jsonBodyParser: require('./json_body_parser'), + multipartBodyParser: require('./multipart_parser'), + queryParser: require('./query'), + sanitizePath: require('./pre/pre_path'), + serveStatic: require('./static'), + throttle: require('./throttle'), - pre: { - pause: require('./pre/pause'), - sanitizePath: require('./pre/pre_path'), - userAgentConnection: require('./pre/user_agent') - } + pre: { + pause: require('./pre/pause'), + sanitizePath: require('./pre/pre_path'), + userAgentConnection: require('./pre/user_agent') + } }; diff --git a/node_modules/restify/lib/plugins/json_body_parser.js b/node_modules/restify/lib/plugins/json_body_parser.js index 52f9940..1a43c08 100644 --- a/node_modules/restify/lib/plugins/json_body_parser.js +++ b/node_modules/restify/lib/plugins/json_body_parser.js @@ -1,14 +1,11 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. -var crypto = require('crypto'); - var assert = require('assert-plus'); var bodyReader = require('./body_reader'); var errors = require('../errors'); - ///--- API /** @@ -22,54 +19,54 @@ var errors = require('../errors'); * @throws {TypeError} on bad input */ function jsonBodyParser(options) { - assert.optionalObject(options, 'options'); - options = options || {}; + assert.optionalObject(options, 'options'); + options = options || {}; - var override = options.overrideParams; + var override = options.overrideParams; - function parseJson(req, res, next) { - if (req.getContentType() !== 'application/json' || !req.body) { - next(); - return; - } + function parseJson(req, res, next) { + if (req.getContentType() !== 'application/json' || !req.body) { + next(); + return; + } - var params; - try { - params = JSON.parse(req.body); - } catch (e) { - next(new errors.InvalidContentError('Invalid JSON: ' + - e.message)); - return; - } + var params; + try { + params = JSON.parse(req.body); + } catch (e) { + next(new errors.InvalidContentError('Invalid JSON: ' + + e.message)); + return; + } - if (options.mapParams !== false) { - if (Array.isArray(params)) { - req.params = params; - } else if (typeof (params) === 'object') { - Object.keys(params).forEach(function (k) { - var p = req.params[k]; - if (p && !override) - return (false); - req.params[k] = params[k]; - return (true); - }); - } else { - req.params = params; - } - } else { - req._body = req.body; - } + if (options.mapParams !== false) { + if (Array.isArray(params)) { + req.params = params; + } else if (typeof (params) === 'object') { + Object.keys(params).forEach(function (k) { + var p = req.params[k]; + if (p && !override) + return (false); + req.params[k] = params[k]; + return (true); + }); + } else { + req.params = params; + } + } else { + req._body = req.body; + } - req.body = params; + req.body = params; - next(); - } + next(); + } - var chain = []; - if (!options.bodyReader) - chain.push(bodyReader(options)); - chain.push(parseJson); - return (chain); + var chain = []; + if (!options.bodyReader) + chain.push(bodyReader(options)); + chain.push(parseJson); + return (chain); } module.exports = jsonBodyParser; diff --git a/node_modules/restify/lib/plugins/jsonp.js b/node_modules/restify/lib/plugins/jsonp.js index 28eee2d..f14b947 100644 --- a/node_modules/restify/lib/plugins/jsonp.js +++ b/node_modules/restify/lib/plugins/jsonp.js @@ -3,24 +3,23 @@ var qs = require('qs'); - ///--- API function jsonp() { - function _jsonp(req, res, next) { - var q = req.getQuery(); + function _jsonp(req, res, next) { + var q = req.getQuery(); - // If the query plugin wasn't used, we need to hack it in now - if (typeof (q) === 'string') - req.query = qs.parse(q); + // If the query plugin wasn't used, we need to hack it in now + if (typeof (q) === 'string') + req.query = qs.parse(q); - if (req.query.callback || req.query.jsonp) - res.setHeader('Content-Type', 'application/javascript'); + if (req.query.callback || req.query.jsonp) + res.setHeader('Content-Type', 'application/javascript'); - next(); - } + next(); + } - return (_jsonp); + return (_jsonp); } diff --git a/node_modules/restify/lib/plugins/multipart_parser.js b/node_modules/restify/lib/plugins/multipart_parser.js index 4e875e7..1a26c81 100644 --- a/node_modules/restify/lib/plugins/multipart_parser.js +++ b/node_modules/restify/lib/plugins/multipart_parser.js @@ -6,13 +6,11 @@ var formidable = require('formidable'); var errors = require('../errors'); - ///--- Globals var BadRequestError = errors.BadRequestError; - ///--- API /** @@ -26,61 +24,78 @@ var BadRequestError = errors.BadRequestError; * @throws {TypeError} on bad input */ function multipartBodyParser(options) { - if (!options) - options = {}; - assert.object(options, 'options'); - - var override = options.overrideParams; - function parseMultipartBody(req, res, next) { - if (req.getContentType() !== 'multipart/form-data' || - (req.getContentLength() === 0 && !req.isChunked())) - return (next()); - - var form = new formidable.IncomingForm(); - form.keepExtensions = options.keepExtensions ? true : false; - if (options.uploadDir) - form.uploadDir = options.uploadDir; - - form.parse(req, function (err, fields, files) { - if (err) - return (next(new BadRequestError(err.message))); - - req.body = fields; - req.files = files; - - if (options.mapParams !== false) { - Object.keys(fields).forEach(function (k) { - if (req.params[k] && !override) - return (false); - - req.params[k] = fields[k]; - return (true); - }); - - Object.keys(files).forEach(function (f) { - if (req.params[f] && !override) - return (false); - var fs = require('fs'); - return fs.readFile( - files[f].path, - 'utf8', - function (ex, data) { - if (ex) { - return (false); - } - req.params[f] = data; - return (true); - }); - }); - } - - return (next()); + if (!options) + options = {}; + assert.object(options, 'options'); + + var override = options.overrideParams; + + function parseMultipartBody(req, res, next) { + if (req.getContentType() !== 'multipart/form-data' || + (req.getContentLength() === 0 && !req.isChunked())) + return (next()); + + var form = new formidable.IncomingForm(); + // enable multiple files on a single upload field + // (html5 multiple attribute) + form.multiples = options.multiples || false; + form.keepExtensions = options.keepExtensions ? true : false; + if (options.uploadDir) + form.uploadDir = options.uploadDir; + if (options.maxFieldsSize) + form.maxFieldsSize = options.maxFieldsSize; + + form.onPart = function onPart(part) { + if (part.filename && options.multipartFileHandler) + options.multipartFileHandler(part, req); + else if (!part.filename && options.multipartHandler) + options.multipartHandler(part, req); + else + form.handlePart(part); + }; + + form.parse(req, function (err, fields, files) { + if (err) + return (next(new BadRequestError(err.message))); + + req.body = fields; + req.files = files; + + if (options.mapParams !== false) { + Object.keys(fields).forEach(function (k) { + if (req.params[k] && !override) + return (false); + + req.params[k] = fields[k]; + return (true); }); - return (false); - } - - return (parseMultipartBody); + if (options.mapFiles) { + Object.keys(files).forEach(function (f) { + if (req.params[f] && !override) + return (false); + var fs = require('fs'); + return fs.readFile( + files[f].path, + 'utf8', + function (ex, data) { + if (ex) { + return (false); + } + req.params[f] = data; + return (true); + }); + }); + } + } + + return (next()); + }); + + return (false); + } + + return (parseMultipartBody); } module.exports = multipartBodyParser; diff --git a/node_modules/restify/lib/plugins/pre/pause.js b/node_modules/restify/lib/plugins/pre/pause.js index 3e74d25..2daf5e6 100644 --- a/node_modules/restify/lib/plugins/pre/pause.js +++ b/node_modules/restify/lib/plugins/pre/pause.js @@ -1,54 +1,52 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. - ///--- Helpers function pauseStream(stream) { - function _buffer(chunk) { - stream.__buffered.push(chunk); - } - - function _catchEnd(chunk) { - stream.__rstfy_ended = true; - } - - stream.__rstfy_ended = false; - stream.__rstfy_paused = true; - stream.__buffered = []; - stream.on('data', _buffer); - stream.once('end', _catchEnd); - stream.pause(); - - stream._resume = stream.resume; - stream.resume = function _rstfy_resume() { - if (!stream.__rstfy_paused) - return; - - stream.removeListener('data', _buffer); - stream.removeListener('end', _catchEnd); - - stream.__buffered.forEach(stream.emit.bind(stream, 'data')); - stream.__buffered.length = 0; - - stream._resume(); - stream.resume = stream._resume; - - if (stream.__rstfy_ended) - stream.emit('end'); - }; + function _buffer(chunk) { + stream.__buffered.push(chunk); + } + + function _catchEnd(chunk) { + stream.__rstfy_ended = true; + } + + stream.__rstfy_ended = false; + stream.__rstfy_paused = true; + stream.__buffered = []; + stream.on('data', _buffer); + stream.once('end', _catchEnd); + stream.pause(); + + stream._resume = stream.resume; + stream.resume = function _rstfy_resume() { + if (!stream.__rstfy_paused) + return; + + stream.removeListener('data', _buffer); + stream.removeListener('end', _catchEnd); + + stream.__buffered.forEach(stream.emit.bind(stream, 'data')); + stream.__buffered.length = 0; + + stream._resume(); + stream.resume = stream._resume; + + if (stream.__rstfy_ended) + stream.emit('end'); + }; } - ///--- Exports module.exports = function pause() { - function prePause(req, res, next) { - pauseStream(req); - next(); - } + function prePause(req, res, next) { + pauseStream(req); + next(); + } - return (prePause); + return (prePause); }; diff --git a/node_modules/restify/lib/plugins/pre/pre_path.js b/node_modules/restify/lib/plugins/pre/pre_path.js index 1080747..d57a8ab 100644 --- a/node_modules/restify/lib/plugins/pre/pre_path.js +++ b/node_modules/restify/lib/plugins/pre/pre_path.js @@ -1,7 +1,6 @@ // Copyright 2012 Mark Cavage, Inc. All rights reserved. - ///--- Helpers /** @@ -9,35 +8,34 @@ * */ function strip(path) { - var cur; - var next; - var str = ''; + var cur; + var next; + var str = ''; - for (var i = 0; i < path.length; i++) { - cur = path.charAt(i); - if (i !== path.length - 1) - next = path.charAt(i + 1); + for (var i = 0; i < path.length; i++) { + cur = path.charAt(i); + if (i !== path.length - 1) + next = path.charAt(i + 1); - if (cur === '/' && (next === '/' || (next === '?' && i > 0))) - continue; + if (cur === '/' && (next === '/' || (next === '?' && i > 0))) + continue; - str += cur; - } + str += cur; + } - return (str); + return (str); } - ///--- Exports module.exports = function sanitizePath(options) { - options = options || {}; + options = options || {}; - function _sanitizePath(req, res, next) { - req.url = strip(req.url); - next(); - } + function _sanitizePath(req, res, next) { + req.url = strip(req.url); + next(); + } - return (_sanitizePath); + return (_sanitizePath); }; diff --git a/node_modules/restify/lib/plugins/pre/user_agent.js b/node_modules/restify/lib/plugins/pre/user_agent.js index aac3100..2bb1fe3 100644 --- a/node_modules/restify/lib/plugins/pre/user_agent.js +++ b/node_modules/restify/lib/plugins/pre/user_agent.js @@ -3,7 +3,6 @@ var assert = require('assert-plus'); - ///--- API /** @@ -21,29 +20,29 @@ var assert = require('assert-plus'); * agent regexp, however. */ function userAgentConnection(opts) { - assert.optionalObject(opts, 'options'); - opts = opts || {}; - assert.optionalObject(opts.userAgentRegExp, 'options.userAgentRegExp'); - - var re = opts.userAgentRegExp; - if (!re) - re = /^curl.+/; + assert.optionalObject(opts, 'options'); + opts = opts || {}; + assert.optionalObject(opts.userAgentRegExp, 'options.userAgentRegExp'); - function handleUserAgent(req, res, next) { - var ua = req.headers['user-agent']; + var re = opts.userAgentRegExp; + if (!re) + re = /^curl.+/; - if (ua && re.test(ua)) - res.setHeader('Connection', 'close'); + function handleUserAgent(req, res, next) { + var ua = req.headers['user-agent']; - if (req.method === 'HEAD') { - res.once('header', - res.removeHeader.bind(res, 'content-length')); - } + if (ua && re.test(ua)) + res.setHeader('Connection', 'close'); - next(); + if (req.method === 'HEAD') { + res.once('header', + res.removeHeader.bind(res, 'content-length')); } - return (handleUserAgent); + next(); + } + + return (handleUserAgent); } module.exports = userAgentConnection; \ No newline at end of file diff --git a/node_modules/restify/lib/plugins/query.js b/node_modules/restify/lib/plugins/query.js index 9dd592f..fb9ded9 100644 --- a/node_modules/restify/lib/plugins/query.js +++ b/node_modules/restify/lib/plugins/query.js @@ -6,7 +6,6 @@ var url = require('url'); var assert = require('assert-plus'); - /** * Returns a plugin that will parse the query string, and merge the results * into req.params. @@ -15,32 +14,32 @@ var assert = require('assert-plus'); * @throws {TypeError} on bad input */ function queryParser(options) { - if (!options) - options = {}; - assert.object(options, 'options'); - + if (!options) + options = {}; + assert.object(options, 'options'); - function parseQueryString(req, res, next) { - if (!req.getQuery()) { - req.query = {}; - return (next()); - } - req._query = req.query = qs.parse(req.getQuery()); - if (options.mapParams !== false) { - Object.keys(req.query).forEach(function (k) { - if (req.params[k] && !options.overrideParams) - return (false); + function parseQueryString(req, res, next) { + if (!req.getQuery()) { + req.query = {}; + return (next()); + } - req.params[k] = req.query[k]; - return (true); - }); - } + req._query = req.query = qs.parse(req.getQuery()); + if (options.mapParams !== false) { + Object.keys(req.query).forEach(function (k) { + if (req.params[k] && !options.overrideParams) + return (false); - return (next()); + req.params[k] = req.query[k]; + return (true); + }); } - return (parseQueryString); + return (next()); + } + + return (parseQueryString); } module.exports = queryParser; diff --git a/node_modules/restify/lib/plugins/static.js b/node_modules/restify/lib/plugins/static.js index c2b5768..6d24dc5 100644 --- a/node_modules/restify/lib/plugins/static.js +++ b/node_modules/restify/lib/plugins/static.js @@ -16,122 +16,123 @@ var NotAuthorizedError = errors.NotAuthorizedError; var ResourceNotFoundError = errors.ResourceNotFoundError; - ///--- Functions function serveStatic(opts) { - opts = opts || {}; - assert.object(opts, 'options'); - assert.string(opts.directory, 'options.directory'); - assert.optionalNumber(opts.maxAge, 'options.maxAge'); - assert.optionalObject(opts.match, 'options.match'); - assert.optionalString(opts.charSet, 'options.charSet'); - - var p = path.normalize(opts.directory).replace(/\\/g, '/'); - var re = new RegExp('^' + escapeRE(p) + '/?.*'); - - function serveFileFromStats(file, err, stats, isGzip, req, res, next) { - if (err) { - next(new ResourceNotFoundError(err, - req.path())); - return; - } else if (!stats.isFile()) { - next(new ResourceNotFoundError(req.path())); - return; - } - - if (res.handledGzip && isGzip) { - res.handledGzip(); - } + opts = opts || {}; + assert.object(opts, 'options'); + assert.string(opts.directory, 'options.directory'); + assert.optionalNumber(opts.maxAge, 'options.maxAge'); + assert.optionalObject(opts.match, 'options.match'); + assert.optionalString(opts.charSet, 'options.charSet'); + + var p = path.normalize(opts.directory).replace(/\\/g, '/'); + var re = new RegExp('^' + escapeRE(p) + '/?.*'); + + function serveFileFromStats(file, err, stats, isGzip, req, res, next) { + if (err) { + next(new ResourceNotFoundError(err, + req.path())); + return; + } else if (!stats.isFile()) { + next(new ResourceNotFoundError('%s does not exist', req.path())); + return; + } - var fstream = fs.createReadStream(file + (isGzip ? '.gz' : '')); - fstream.once('open', function (fd) { - res.cache({maxAge: opts.maxAge || 3600}); - res.set('Content-Length', stats.size); - res.set('Content-Type', mime.lookup(file)); - res.set('Last-Modified', stats.mtime); - if (opts.charSet) { - var type = res.getHeader('Content-Type') + - '; charset=' + opts.charSet; - res.setHeader('Content-Type', type); - } - if (opts.etag) { - res.set('ETag', opts.etag(stats, opts)); - } - res.writeHead(200); - fstream.pipe(res); - fstream.once('end', function () { - next(false); - }); - }); + if (res.handledGzip && isGzip) { + res.handledGzip(); } - function serveNormal(file, req, res, next) { - fs.stat(file, function (err, stats) { - if (!err && stats.isDirectory() && opts.default) { - // Serve an index.html page or similar - file = path.join(opts.directory, opts.default); - fs.stat(file, function (dirErr, dirStats) { - serveFileFromStats(file, - dirErr, - dirStats, - false, - req, - res, - next); - }); - } else { - serveFileFromStats(file, - err, - stats, - false, - req, - res, - next); - } + var fstream = fs.createReadStream(file + (isGzip ? '.gz' : '')); + var maxAge = opts.maxAge === undefined ? 3600 : opts.maxAge; + fstream.once('open', function (fd) { + res.cache({maxAge: maxAge}); + res.set('Content-Length', stats.size); + res.set('Content-Type', mime.lookup(file)); + res.set('Last-Modified', stats.mtime); + if (opts.charSet) { + var type = res.getHeader('Content-Type') + + '; charset=' + opts.charSet; + res.setHeader('Content-Type', type); + } + if (opts.etag) { + res.set('ETag', opts.etag(stats, opts)); + } + res.writeHead(200); + fstream.pipe(res); + fstream.once('end', function () { + next(false); + }); + }); + } + + function serveNormal(file, req, res, next) { + fs.stat(file, function (err, stats) { + if (!err && stats.isDirectory() && opts.default) { + // Serve an index.html page or similar + file = path.join(file, opts.default); + fs.stat(file, function (dirErr, dirStats) { + serveFileFromStats(file, + dirErr, + dirStats, + false, + req, + res, + next); }); + } else { + serveFileFromStats(file, + err, + stats, + false, + req, + res, + next); + } + }); + } + + function serve(req, res, next) { + var file = path.join(opts.directory, + decodeURIComponent(req.path())); + + if (req.method !== 'GET' && req.method !== 'HEAD') { + next(new MethodNotAllowedError(req.method)); + return; } - function serve(req, res, next) { - var file = path.join(opts.directory, req.path()); - - if (req.method !== 'GET' && req.method !== 'HEAD') { - next(new MethodNotAllowedError(req.method)); - return; - } - - if (!re.test(file.replace(/\\/g, '/'))) { - next(new NotAuthorizedError(req.path())); - return; - } + if (!re.test(file.replace(/\\/g, '/'))) { + next(new NotAuthorizedError(req.path())); + return; + } - if (opts.match && !opts.match.test(file)) { - next(new NotAuthorizedError(req.path())); - return; - } + if (opts.match && !opts.match.test(file)) { + next(new NotAuthorizedError(req.path())); + return; + } - if (opts.gzip && req.acceptsEncoding('gzip')) { - fs.stat(file + '.gz', function (err, stats) { - if (!err) { - res.setHeader('Content-Encoding', 'gzip'); - serveFileFromStats(file, - err, - stats, - true, - req, - res, - next); - } else { - serveNormal(file, req, res, next); - } - }); + if (opts.gzip && req.acceptsEncoding('gzip')) { + fs.stat(file + '.gz', function (err, stats) { + if (!err) { + res.setHeader('Content-Encoding', 'gzip'); + serveFileFromStats(file, + err, + stats, + true, + req, + res, + next); } else { - serveNormal(file, req, res, next); + serveNormal(file, req, res, next); } - + }); + } else { + serveNormal(file, req, res, next); } - return (serve); + } + + return (serve); } module.exports = serveStatic; diff --git a/node_modules/restify/lib/plugins/throttle.js b/node_modules/restify/lib/plugins/throttle.js index a62b7f7..15c10b8 100644 --- a/node_modules/restify/lib/plugins/throttle.js +++ b/node_modules/restify/lib/plugins/throttle.js @@ -8,7 +8,6 @@ var LRU = require('lru-cache'); var errors = require('../errors'); - ///--- Globals var TooManyRequestsError = errors.TooManyRequestsError; @@ -16,22 +15,20 @@ var TooManyRequestsError = errors.TooManyRequestsError; var MESSAGE = 'You have exceeded your request rate of %s r/s.'; - ///--- Helpers function xor() { - var x = false; - for (var i = 0; i < arguments.length; i++) { - if (arguments[i] && !x) - x = true; - else if (arguments[i] && x) - return (false); - } - return (x); + var x = false; + for (var i = 0; i < arguments.length; i++) { + if (arguments[i] && !x) + x = true; + else if (arguments[i] && x) + return (false); + } + return (x); } - ///--- Internal Class (TokenBucket) /** @@ -55,13 +52,13 @@ function xor() { * - {Number} fillRate the rate to refill tokens. */ function TokenBucket(options) { - assert.object(options, 'options'); - assert.number(options.capacity, 'options.capacity'); - assert.number(options.fillRate, 'options.fillRate'); + assert.object(options, 'options'); + assert.number(options.capacity, 'options.capacity'); + assert.number(options.fillRate, 'options.fillRate'); - this.tokens = this.capacity = options.capacity; - this.fillRate = options.fillRate; - this.time = Date.now(); + this.tokens = this.capacity = options.capacity; + this.fillRate = options.fillRate; + this.time = Date.now(); } @@ -74,12 +71,12 @@ function TokenBucket(options) { * @return {Boolean} true if capacity, false otherwise. */ TokenBucket.prototype.consume = function consume(tokens) { - if (tokens <= this._fill()) { - this.tokens -= tokens; - return (true); - } + if (tokens <= this._fill()) { + this.tokens -= tokens; + return (true); + } - return (false); + return (false); }; @@ -95,43 +92,41 @@ TokenBucket.prototype.consume = function consume(tokens) { * @return {Number} the current number of tokens in the bucket. */ TokenBucket.prototype._fill = function _fill() { - var now = Date.now(); - if (now < this.time) // reset account for clock drift (like DST) - this.time = now - 1000; + var now = Date.now(); + if (now < this.time) // reset account for clock drift (like DST) + this.time = now - 1000; - if (this.tokens < this.capacity) { - var delta = this.fillRate * ((now - this.time) / 1000); - this.tokens = Math.min(this.capacity, this.tokens + delta); - } - this.time = now; + if (this.tokens < this.capacity) { + var delta = this.fillRate * ((now - this.time) / 1000); + this.tokens = Math.min(this.capacity, this.tokens + delta); + } + this.time = now; - return (this.tokens); + return (this.tokens); }; - ///--- Internal Class (TokenTable) // Just a wrapper over LRU that supports put/get to store token -> bucket // mappings function TokenTable(options) { - assert.object(options, 'options'); + assert.object(options, 'options'); - this.table = new LRU(options.size || 10000); + this.table = new LRU(options.size || 10000); } TokenTable.prototype.put = function put(key, value) { - this.table.set(key, value); + this.table.set(key, value); }; TokenTable.prototype.get = function get(key) { - return (this.table.get(key)); + return (this.table.get(key)); }; - ///--- Exported API /** @@ -189,79 +184,79 @@ TokenTable.prototype.get = function get(key) { * @throws {TypeError} on bad input. */ function throttle(options) { - assert.object(options, 'options'); - assert.number(options.burst, 'options.burst'); - assert.number(options.rate, 'options.rate'); - if (!xor(options.ip, options.xff, options.username)) - throw new Error('(ip ^ username ^ xff)'); - - var burst = options.burst; - var rate = options.rate; - var table = options.tokensTable || - new TokenTable({size: options.maxKeys}); - - function rateLimit(req, res, next) { - var attr; - if (options.ip) { - attr = req.connection.remoteAddress; - } else if (options.xff) { - attr = req.headers['x-forwarded-for']; - } else if (options.username) { - attr = req.username; - } else { - req.log.warn({config: options}, - 'Invalid throttle configuration'); - return (next()); - } - - // Before bothering with overrides, see if this request - // even matches - if (!attr) - return (next()); - - // Check the overrides - if (options.overrides && - options.overrides[attr] && - options.overrides[attr].burst !== undefined && - options.overrides[attr].rate !== undefined) { - - burst = options.overrides[attr].burst; - rate = options.overrides[attr].rate; - } - - if (!rate || !burst) - return (next()); - - var bucket = table.get(attr); - if (!bucket) { - bucket = new TokenBucket({ - capacity: burst, - fillRate: rate - }); - table.put(attr, bucket); - } - - req.log.trace('Throttle(%s): num_tokens= %d', - attr, bucket.tokens); - - if (!bucket.consume(1)) { - req.log.info({ - address: req.connection.remoteAddress || '?', - method: req.method, - url: req.url, - user: req.username || '?' - }, 'Throttling'); - - - // Until https://github.com/joyent/node/pull/2371 is in - var msg = sprintf(MESSAGE, rate); - return (next(new TooManyRequestsError(msg))); - } - - return (next()); + assert.object(options, 'options'); + assert.number(options.burst, 'options.burst'); + assert.number(options.rate, 'options.rate'); + if (!xor(options.ip, options.xff, options.username)) + throw new Error('(ip ^ username ^ xff)'); + + var burst = options.burst; + var rate = options.rate; + var table = options.tokensTable || + new TokenTable({size: options.maxKeys}); + + function rateLimit(req, res, next) { + var attr; + if (options.ip) { + attr = req.connection.remoteAddress; + } else if (options.xff) { + attr = req.headers['x-forwarded-for']; + } else if (options.username) { + attr = req.username; + } else { + req.log.warn({config: options}, + 'Invalid throttle configuration'); + return (next()); } - return (rateLimit); + // Before bothering with overrides, see if this request + // even matches + if (!attr) + return (next()); + + // Check the overrides + if (options.overrides && + options.overrides[attr] && + options.overrides[attr].burst !== undefined && + options.overrides[attr].rate !== undefined) { + + burst = options.overrides[attr].burst; + rate = options.overrides[attr].rate; + } + + if (!rate || !burst) + return (next()); + + var bucket = table.get(attr); + if (!bucket) { + bucket = new TokenBucket({ + capacity: burst, + fillRate: rate + }); + table.put(attr, bucket); + } + + req.log.trace('Throttle(%s): num_tokens= %d', + attr, bucket.tokens); + + if (!bucket.consume(1)) { + req.log.info({ + address: req.connection.remoteAddress || '?', + method: req.method, + url: req.url, + user: req.username || '?' + }, 'Throttling'); + + + // Until https://github.com/joyent/node/pull/2371 is in + var msg = sprintf(MESSAGE, rate); + return (next(new TooManyRequestsError(msg))); + } + + return (next()); + } + + return (rateLimit); } module.exports = throttle; diff --git a/node_modules/restify/lib/request.js b/node_modules/restify/lib/request.js index f78b632..a35fe60 100644 --- a/node_modules/restify/lib/request.js +++ b/node_modules/restify/lib/request.js @@ -12,7 +12,6 @@ var uuid = require('node-uuid'); var utils = require('./utils'); - ///--- Globals var Request = http.IncomingMessage; @@ -21,22 +20,21 @@ var parseAccept = utils.parseAccept; var sanitizePath = utils.sanitizePath; - ///-- Helpers function negotiator(req) { - var h = req.headers; - if (!req._negotatiator) { - req._negotiator = new Negotatior({ - headers: { - accept: h.accept || '*/*', - 'accept-encoding': h['accept-encoding'] || - 'identity' - } - }); - } + var h = req.headers; + if (!req._negotatiator) { + req._negotiator = new Negotatior({ + headers: { + accept: h.accept || '*/*', + 'accept-encoding': h['accept-encoding'] || + 'identity' + } + }); + } - return (req._negotiator); + return (req._negotiator); } @@ -45,262 +43,275 @@ function negotiator(req) { ///--- Patches Request.prototype.absoluteUri = function absoluteUri(path) { - assert.string(path, 'path'); + assert.string(path, 'path'); - var protocol = this.secure ? 'https://' : 'http://'; - var hostname = this.headers['host']; - return (url.resolve(protocol + hostname + this.path + '/', path)); + var protocol = this.secure ? 'https://' : 'http://'; + var hostname = this.headers['host']; + return (url.resolve(protocol + hostname + this.path + '/', path)); }; Request.prototype.accepts = function accepts(types) { - if (typeof (types) === 'string') - types = [types]; - - types = types.map(function (t) { - assert.string(t, 'type'); - if (t.indexOf('/') === -1) - t = mime.lookup(t); - return (t); - }); + if (typeof (types) === 'string') + types = [types]; + + types = types.map(function (t) { + assert.string(t, 'type'); + if (t.indexOf('/') === -1) + t = mime.lookup(t); + return (t); + }); - negotiator(this); + negotiator(this); - return (this._negotiator.preferredMediaType(types)); + return (this._negotiator.preferredMediaType(types)); }; Request.prototype.acceptsEncoding = function acceptsEncoding(types) { - if (typeof (types) === 'string') - types = [types]; + if (typeof (types) === 'string') + types = [types]; - assert.arrayOfString(types, 'types'); + assert.arrayOfString(types, 'types'); - negotiator(this); + negotiator(this); - return (this._negotiator.preferredEncoding(types)); + return (this._negotiator.preferredEncoding(types)); }; Request.prototype.getContentLength = function getContentLength() { - if (this._clen !== undefined) - return (this._clen === false ? undefined : this._clen); + if (this._clen !== undefined) + return (this._clen === false ? undefined : this._clen); - var len = this.header('content-length'); - if (!len) { - this._clen = false; - } else { - this._clen = parseInt(len, 10); - } + // We should not attempt to read and parse the body of an + // Upgrade request, so force Content-Length to zero: + if (this.isUpgradeRequest()) + return (0); - return (this._clen === false ? undefined : this._clen); + var len = this.header('content-length'); + if (!len) { + this._clen = false; + } else { + this._clen = parseInt(len, 10); + } + + return (this._clen === false ? undefined : this._clen); }; Request.prototype.contentLength = Request.prototype.getContentLength; Request.prototype.getContentType = function getContentType() { - if (this._contentType !== undefined) - return (this._contentType); + if (this._contentType !== undefined) + return (this._contentType); - var index; - var type = this.headers['content-type']; + var index; + var type = this.headers['content-type']; - if (!type) { - // RFC2616 section 7.2.1 - this._contentType = 'application/octet-stream'; + if (!type) { + // RFC2616 section 7.2.1 + this._contentType = 'application/octet-stream'; + } else { + if ((index = type.indexOf(';')) === -1) { + this._contentType = type; } else { - if ((index = type.indexOf(';')) === -1) { - this._contentType = type; - } else { - this._contentType = type.substring(0, index); - } + this._contentType = type.substring(0, index); } + } - return (this._contentType); + return (this._contentType); }; Request.prototype.contentType = Request.prototype.getContentType; Request.prototype.date = function date() { - if (this._date !== undefined) - return (this._date); - - this._date = new Date(this._time); + if (this._date !== undefined) return (this._date); + + this._date = new Date(this._time); + return (this._date); }; Request.prototype.getHref = function getHref() { - if (this._href !== undefined) - return (this._href); - - this._href = this.getUrl().href; + if (this._href !== undefined) return (this._href); + + this._href = this.getUrl().href; + return (this._href); }; Request.prototype.href = Request.prototype.getHref; Request.prototype.getId = function getId() { - if (this._id !== undefined) - return (this._id); + if (this._id !== undefined) + return (this._id); - this._id = this.headers['request-id'] || - this.headers['x-request-id'] || - uuid.v1(); + this._id = this.headers['request-id'] || + this.headers['x-request-id'] || + uuid.v1(); - return (this._id); + return (this._id); }; Request.prototype.id = Request.prototype.getId; Request.prototype.getPath = function getPath() { - if (this._path !== undefined) - return (this._path); - - this._path = this.getUrl().pathname; + if (this._path !== undefined) return (this._path); + + this._path = this.getUrl().pathname; + return (this._path); }; Request.prototype.path = Request.prototype.getPath; Request.prototype.getQuery = function getQuery() { - if (this._query !== undefined) - return (this._query); - - this._query = this.getUrl().query || {}; + if (this._query !== undefined) return (this._query); + + this._query = this.getUrl().query || {}; + return (this._query); }; Request.prototype.query = Request.prototype.getQuery; Request.prototype.time = function time() { - return (this._time); + return (this._time); }; Request.prototype.getUrl = function getUrl() { - if (this._url !== undefined) - return (this._url); - - this._url = url.parse(this.url); + if (this._url !== undefined) return (this._url); + + this._url = url.parse(this.url); + return (this._url); }; Request.prototype.getVersion = function getVersion() { - if (this._version !== undefined) - return (this._version); + if (this._version !== undefined) + return (this._version); - this._version = - this.headers['accept-version'] || - this.headers['x-api-version'] || - '*'; + this._version = + this.headers['accept-version'] || + this.headers['x-api-version'] || + '*'; - return (this._version); + return (this._version); }; Request.prototype.version = Request.prototype.getVersion; Request.prototype.header = function header(name, value) { - assert.string(name, 'name'); + assert.string(name, 'name'); - name = name.toLowerCase(); + name = name.toLowerCase(); - if (name === 'referer' || name === 'referrer') - name = 'referer'; + if (name === 'referer' || name === 'referrer') + name = 'referer'; - return (this.headers[name] || value); + return (this.headers[name] || value); }; Request.prototype.trailer = function trailer(name, value) { - assert.string(name, 'name'); - name = name.toLowerCase(); + assert.string(name, 'name'); + name = name.toLowerCase(); - if (name === 'referer' || name === 'referrer') - name = 'referer'; + if (name === 'referer' || name === 'referrer') + name = 'referer'; - return ((this.trailers || {})[name] || value); + return ((this.trailers || {})[name] || value); }; Request.prototype.is = function is(type) { - assert.string(type, 'type'); - - var contentType = this.getContentType(); - var matches = true; - if (!contentType) - return (false); - - if (type.indexOf('/') === -1) - type = mime.lookup(type); - - if (type.indexOf('*') !== -1) { - type = type.split('/'); - contentType = contentType.split('/'); - matches &= (type[0] === '*' || type[0] === contentType[0]); - matches &= (type[1] === '*' || type[1] === contentType[1]); - } else { - matches = (contentType === type); - } - - return (matches); + assert.string(type, 'type'); + + var contentType = this.getContentType(); + var matches = true; + if (!contentType) + return (false); + + if (type.indexOf('/') === -1) + type = mime.lookup(type); + + if (type.indexOf('*') !== -1) { + type = type.split('/'); + contentType = contentType.split('/'); + matches &= (type[0] === '*' || type[0] === contentType[0]); + matches &= (type[1] === '*' || type[1] === contentType[1]); + } else { + matches = (contentType === type); + } + + return (matches); }; Request.prototype.isChunked = function isChunked() { - return (this.headers['transfer-encoding'] === 'chunked'); + return (this.headers['transfer-encoding'] === 'chunked'); }; Request.prototype.isKeepAlive = function isKeepAlive() { - if (this._keepAlive !== undefined) - return (this._keepAlive); + if (this._keepAlive !== undefined) + return (this._keepAlive); - if (this.headers.connection) { - this._keepAlive = /keep-alive/i.test(this.headers.connection); - } else { - this._keepAlive = this.httpVersion === '1.0' ? false : true; - } + if (this.headers.connection) { + this._keepAlive = /keep-alive/i.test(this.headers.connection); + } else { + this._keepAlive = this.httpVersion === '1.0' ? false : true; + } - return (this._keepAlive); + return (this._keepAlive); }; Request.prototype.isSecure = function isSecure() { - if (this._secure !== undefined) - return (this._secure); - - this._secure = this.connection.encrypted ? true : false; + if (this._secure !== undefined) return (this._secure); + + this._secure = this.connection.encrypted ? true : false; + return (this._secure); +}; + + +Request.prototype.isUpgradeRequest = function isUpgradeRequest() { + if (this._upgradeRequest !== undefined) + return (this._upgradeRequest); + else + return (false); }; Request.prototype.isUpload = function isUpload() { - var m = this.method; - return (m === 'PATH' || m === 'POST' || m === 'PUT'); + var m = this.method; + return (m === 'PATH' || m === 'POST' || m === 'PUT'); }; Request.prototype.toString = function toString() { - var headers = ''; - var self = this; - var str; + var headers = ''; + var self = this; + var str; - Object.keys(this.headers).forEach(function (k) { - headers += sprintf('%s: %s\n', k, self.headers[k]); - }); + Object.keys(this.headers).forEach(function (k) { + headers += sprintf('%s: %s\n', k, self.headers[k]); + }); - str = sprintf('%s %s HTTP/%s\n%s', - this.method, - this.url, - this.httpVersion, - headers); + str = sprintf('%s %s HTTP/%s\n%s', + this.method, + this.url, + this.httpVersion, + headers); - return (str); + return (str); }; Request.prototype.userAgent = function userAgent() { - return (this.headers['user-agent']); + return (this.headers['user-agent']); }; diff --git a/node_modules/restify/lib/response.js b/node_modules/restify/lib/response.js index 3b77365..09218c2 100644 --- a/node_modules/restify/lib/response.js +++ b/node_modules/restify/lib/response.js @@ -12,7 +12,6 @@ var errors = require('./errors'); var httpDate = require('./http_date'); - ///--- Globals var HttpError = errors.HttpError; @@ -21,244 +20,254 @@ var RestError = errors.RestError; var Response = http.ServerResponse; - ///--- API Response.prototype.cache = function cache(type, options) { - if (typeof (type) !== 'string') { - options = type; - type = 'public'; - } + if (typeof (type) !== 'string') { + options = type; + type = 'public'; + } - if (options && options.maxAge) { - assert.number(options.maxAge, 'options.maxAge'); - type += ', max-age=' + options.maxAge; - } + if (options && options.maxAge !== undefined) { + assert.number(options.maxAge, 'options.maxAge'); + type += ', max-age=' + options.maxAge; + } - return (this.header('Cache-Control', type)); + return (this.header('Cache-Control', type)); }; Response.prototype.charSet = function charSet(type) { - assert.string(type, 'charset'); + assert.string(type, 'charset'); - this._charSet = type; + this._charSet = type; - return (this); + return (this); }; Response.prototype.format = function format(body, cb) { - var log = this.log; - var formatter; - var type = this.contentType || this.getHeader('Content-Type'); - var self = this; - - if (type && type.indexOf(';') !== '-1') - type = type.split(';')[0]; - - if (!(formatter = this.formatters[type])) { - if (!type) { - for (var i = 0; i < this.acceptable.length; i++) { - if (this.req.accepts(this.acceptable[i])) { - type = this.acceptable[i]; - break; - } - } - } else { - if (type.indexOf('/') === -1) - type = mime.lookup(type); - - if (this.acceptable.indexOf(type) === -1) - type = 'application/octet-stream'; - } - - formatter = this.formatters[type] || this.formatters['*/*']; - if (!formatter) { - log.warn({ - req: self.req - }, 'no formatter found. Returning 500.'); - this.statusCode = 500; - return (null); - } - this.setHeader('Content-Type', type); + var log = this.log; + var formatter; + var type = this.contentType || this.getHeader('Content-Type'); + var self = this; + + if (!type) { + if (this.req.accepts(this.acceptable)) { + type = this.req.accepts(this.acceptable); } - if (this._charSet) { - type = type + '; charset=' + this._charSet; - this.setHeader('Content-Type', type); + if (!type) { + // The importance of a status code outside of the + // 2xx range probably outweighs that of unable being to + // format the response body + if (this.statusCode >= 200 && this.statusCode < 300) + this.statusCode = 406; + + return (null); + } + } else if (type.indexOf(';') !== '-1') { + type = type.split(';')[0]; + } + + if (!(formatter = this.formatters[type])) { + if (type.indexOf('/') === -1) + type = mime.lookup(type); + + if (this.acceptable.indexOf(type) === -1) + type = 'application/octet-stream'; + + formatter = this.formatters[type] || this.formatters['*/*']; + + if (!formatter) { + log.warn({ + req: self.req + }, 'no formatter found. Returning 500.'); + this.statusCode = 500; + return (null); } + } + + if (this._charSet) { + type = type + '; charset=' + this._charSet; + } + + this.setHeader('Content-Type', type); - if (body instanceof Error && body.statusCode !== undefined) - this.statusCode = body.statusCode; - return (formatter.call(this, this.req, this, body, cb)); + if (body instanceof Error && body.statusCode !== undefined) + this.statusCode = body.statusCode; + return (formatter.call(this, this.req, this, body, cb)); }; Response.prototype.get = function get(name) { - assert.string(name, 'name'); + assert.string(name, 'name'); - return (this.getHeader(name)); + return (this.getHeader(name)); }; Response.prototype.getHeaders = function getHeaders() { - return (this._headers || {}); + return (this._headers || {}); }; Response.prototype.headers = Response.prototype.getHeaders; Response.prototype.header = function header(name, value) { - assert.string(name, 'name'); + assert.string(name, 'name'); - if (value === undefined) - return (this.getHeader(name)); + if (value === undefined) + return (this.getHeader(name)); - if (value instanceof Date) { - value = httpDate(value); - } else if (arguments.length > 2) { - // Support res.header('foo', 'bar %s', 'baz'); - var arg = Array.prototype.slice.call(arguments).slice(2); - value = sprintf(value, arg); - } + if (value instanceof Date) { + value = httpDate(value); + } else if (arguments.length > 2) { + // Support res.header('foo', 'bar %s', 'baz'); + var arg = Array.prototype.slice.call(arguments).slice(2); + value = sprintf(value, arg); + } - this.setHeader(name, value); - return (value); + this.setHeader(name, value); + return (value); }; Response.prototype.json = function json(code, object, headers) { - if (!/application\/json/.test(this.header('content-type'))) - this.header('Content-Type', 'application/json'); + if (!/application\/json/.test(this.header('content-type'))) + this.header('Content-Type', 'application/json'); - return (this.send(code, object, headers)); + return (this.send(code, object, headers)); }; Response.prototype.link = function link(l, rel) { - assert.string(l, 'link'); - assert.string(rel, 'rel'); + assert.string(l, 'link'); + assert.string(rel, 'rel'); - var _link = sprintf('<%s>; rel="%s"', l, rel); - return (this.header('Link', _link)); + var _link = sprintf('<%s>; rel="%s"', l, rel); + return (this.header('Link', _link)); }; Response.prototype.send = function send(code, body, headers) { - var isHead = (this.req.method === 'HEAD'); - var log = this.log; - var self = this; - - if (code === undefined) { - this.statusCode = 200; - } else if (code.constructor.name === 'Number') { - this.statusCode = code; - } else { - headers = body; - body = code; - code = null; - } + var isHead = (this.req.method === 'HEAD'); + var log = this.log; + var self = this; - headers = headers || {}; - - if (log.trace()) { - var _props = { - code: self.statusCode, - headers: headers - }; - if (body instanceof Error) { - _props.err = body; - } else { - _props.body = body; - } - log.trace(_props, 'response::send entered'); + if (code === undefined) { + this.statusCode = 200; + } else if (code.constructor.name === 'Number') { + this.statusCode = code; + if (body instanceof Error) { + body.statusCode = this.statusCode; } + } else { + headers = body; + body = code; + code = null; + } + + headers = headers || {}; + + if (log.trace()) { + var _props = { + code: self.statusCode, + headers: headers + }; + if (body instanceof Error) { + _props.err = body; + } else { + _props.body = body; + } + log.trace(_props, 'response::send entered'); + } - this._body = body; + this._body = body; - function _cb(err, _body) { - self._data = _body; - Object.keys(headers).forEach(function (k) { - self.setHeader(k, headers[k]); - }); + function _cb(err, _body) { + self._data = _body; + Object.keys(headers).forEach(function (k) { + self.setHeader(k, headers[k]); + }); - self.writeHead(self.statusCode); + self.writeHead(self.statusCode); - if (self._data && !(isHead || code === 204 || code === 304)) - self.write(self._data); + if (self._data && !(isHead || code === 204 || code === 304)) + self.write(self._data); - self.end(); + self.end(); - if (log.trace()) - log.trace({res: self}, 'response sent'); - } + if (log.trace()) + log.trace({res: self}, 'response sent'); + } - if (body) { - var ret = this.format(body, _cb); - if (!(ret instanceof Response)) { - _cb(null, ret); - } - } else { - _cb(null, null); + if (body) { + var ret = this.format(body, _cb); + if (!(ret instanceof Response)) { + _cb(null, ret); } + } else { + _cb(null, null); + } - return (this); + return (this); }; Response.prototype.set = function set(name, val) { - var self = this; + var self = this; - if (arguments.length === 2) { - assert.string(name, 'name'); - this.header(name, val); - } else { - assert.object(name, 'object'); - Object.keys(name).forEach(function (k) { - self.header(k, name[k]); - }); - } + if (arguments.length === 2) { + assert.string(name, 'name'); + this.header(name, val); + } else { + assert.object(name, 'object'); + Object.keys(name).forEach(function (k) { + self.header(k, name[k]); + }); + } - return (this); + return (this); }; Response.prototype.status = function status(code) { - assert.number(code, 'code'); + assert.number(code, 'code'); - this.statusCode = code; - return (code); + this.statusCode = code; + return (code); }; Response.prototype.toString = function toString() { - var headers = this.getHeaders(); - var headerString = ''; - var str; - - Object.keys(headers).forEach(function (k) { - headerString += k + ': ' + headers[k] + '\n'; - }); - str = sprintf('HTTP/1.1 %s %s\n%s', - this.statusCode, - http.STATUS_CODES[this.statusCode], - headerString); - - return (str); + var headers = this.getHeaders(); + var headerString = ''; + var str; + + Object.keys(headers).forEach(function (k) { + headerString += k + ': ' + headers[k] + '\n'; + }); + str = sprintf('HTTP/1.1 %s %s\n%s', + this.statusCode, + http.STATUS_CODES[this.statusCode], + headerString); + + return (str); }; if (!Response.prototype.hasOwnProperty('_writeHead')) - Response.prototype._writeHead = Response.prototype.writeHead; + Response.prototype._writeHead = Response.prototype.writeHead; Response.prototype.writeHead = function restifyWriteHead() { - this.emit('header'); + this.emit('header'); - if (this.statusCode === 204 || this.statusCode === 304) { - this.removeHeader('Content-Length'); - this.removeHeader('Content-MD5'); - this.removeHeader('Content-Type'); - } + if (this.statusCode === 204 || this.statusCode === 304) { + this.removeHeader('Content-Length'); + this.removeHeader('Content-MD5'); + this.removeHeader('Content-Type'); + this.removeHeader('Content-Encoding'); + } - this._writeHead.apply(this, arguments); + this._writeHead.apply(this, arguments); }; diff --git a/node_modules/restify/lib/router.js b/node_modules/restify/lib/router.js index ccc0ce2..88771df 100644 --- a/node_modules/restify/lib/router.js +++ b/node_modules/restify/lib/router.js @@ -15,7 +15,6 @@ var errors = require('./errors'); var utils = require('./utils'); - ///--- Globals var DEF_CT = 'application/octet-stream'; @@ -33,452 +32,491 @@ var UnsupportedMediaTypeError = errors.UnsupportedMediaTypeError; var shallowCopy = utils.shallowCopy; - ///--- Helpers function createCachedRoute(o, path, version, route) { - if (!o.hasOwnProperty(path)) - o[path] = {}; + if (!o.hasOwnProperty(path)) + o[path] = {}; - if (!o[path].hasOwnProperty(version)) - o[path][version] = route; + if (!o[path].hasOwnProperty(version)) + o[path][version] = route; } function matchURL(re, req) { - var i = 0; - var result = re.exec(req.path()); - var params = {}; + var i = 0; + var result = re.exec(req.path()); + var params = {}; - if (!result) - return (false); + if (!result) + return (false); - // This means the user original specified a regexp match, not a url - // string like /:foo/:bar - if (!re.restifyParams) { - for (i = 1; i < result.length; i++) - params[(i - 1)] = result[i]; + // This means the user original specified a regexp match, not a url + // string like /:foo/:bar + if (!re.restifyParams) { + for (i = 1; i < result.length; i++) + params[(i - 1)] = result[i]; - return (params); - } + return (params); + } - // This was a static string, like /foo - if (re.restifyParams.length === 0) - return (params); + // This was a static string, like /foo + if (re.restifyParams.length === 0) + return (params); - // This was the "normal" case, of /foo/:id - re.restifyParams.forEach(function (p) { - if (++i < result.length) - params[p] = decodeURIComponent(result[i]); - }); + // This was the "normal" case, of /foo/:id + re.restifyParams.forEach(function (p) { + if (++i < result.length) + params[p] = decodeURIComponent(result[i]); + }); - return (params); + return (params); } function compileURL(options) { - if (options.url instanceof RegExp) - return (options.url); - assert.string(options.url, 'url'); - - var params = []; - var pattern = '^'; - var re; - var _url = url.parse(options.url).pathname; - _url.split('/').forEach(function (frag) { - if (frag.length <= 0) - return (false); - - pattern += '\\/+'; - if (frag.charAt(0) === ':') { - if (options.urlParamPattern) { - pattern += '(' + options.urlParamPattern + ')'; - } else { - // Strictly adhere to RFC3986 - pattern += '([a-zA-Z0-9-_~\\.%@]+)'; - } - params.push(frag.slice(1)); - } else { - pattern += frag; - } + if (options.url instanceof RegExp) + return (options.url); + assert.string(options.url, 'url'); + + var params = []; + var pattern = '^'; + var re; + var _url = url.parse(options.url).pathname; + _url.split('/').forEach(function (frag) { + if (frag.length <= 0) + return (false); + + pattern += '\\/+'; + if (frag.charAt(0) === ':') { + if (options.urlParamPattern) { + pattern += '(' + options.urlParamPattern + ')'; + } else { + pattern += '([^/]*)'; + } + params.push(frag.slice(1)); + } else { + pattern += frag; + } - return (true); - }); + return (true); + }); - if (pattern === '^') - pattern += '\\/'; - pattern += '$'; + if (pattern === '^') + pattern += '\\/'; + pattern += '$'; - re = new RegExp(pattern, options.flags); - re.restifyParams = params; + re = new RegExp(pattern, options.flags); + re.restifyParams = params; - return (re); + return (re); } - ///--- API function Router(options) { - assert.object(options, 'options'); - assert.object(options.log, 'options.log'); - - EventEmitter.call(this); - - this.cache = LRU({max: 100}); - this.contentType = options.contentType || []; - if (!Array.isArray(this.contentType)) - this.contentType = [this.contentType]; - assert.arrayOfString(this.contentType, 'options.contentType'); - - this.log = options.log; - this.mounts = {}; - this.name = 'RestifyRouter'; - - // A list of methods to routes - this.routes = { - DELETE: [], - GET: [], - HEAD: [], - OPTIONS: [], - PATCH: [], - POST: [], - PUT: [] - }; - - // So we can retrun 405 vs 404, we maintain a reverse mapping of URLs - // to method - this.reverse = {}; - - this.versions = options.versions || options.version || []; - if (!Array.isArray(this.versions)) - this.versions = [this.versions]; - assert.arrayOfString(this.versions, 'options.versions'); - - this.versions.forEach(function (v) { - if (semver.valid(v)) - return (true); - - throw new InvalidArgumentError('%s is not a valid semver', v); - }); - this.versions.sort(); + assert.object(options, 'options'); + assert.object(options.log, 'options.log'); + + EventEmitter.call(this); + + this.cache = LRU({max: 100}); + this.contentType = options.contentType || []; + if (!Array.isArray(this.contentType)) + this.contentType = [this.contentType]; + assert.arrayOfString(this.contentType, 'options.contentType'); + + this.log = options.log; + this.mounts = {}; + this.name = 'RestifyRouter'; + + // A list of methods to routes + this.routes = { + DELETE: [], + GET: [], + HEAD: [], + OPTIONS: [], + PATCH: [], + POST: [], + PUT: [] + }; + + // So we can retrun 405 vs 404, we maintain a reverse mapping of URLs + // to method + this.reverse = {}; + + this.versions = options.versions || options.version || []; + if (!Array.isArray(this.versions)) + this.versions = [this.versions]; + assert.arrayOfString(this.versions, 'options.versions'); + + this.versions.forEach(function (v) { + if (semver.valid(v)) + return (true); + + throw new InvalidArgumentError('%s is not a valid semver', v); + }); + this.versions.sort(); } util.inherits(Router, EventEmitter); module.exports = Router; -Router.prototype.mount = function mount(options) { - assert.object(options, 'options'); - assert.string(options.method, 'options.method'); - assert.string(options.name, 'options.name'); - - var exists; - var name = options.name; - var route; - var routes = this.routes[options.method]; - var self = this; - var type = options.contentType || self.contentType; - var versions = options.versions || options.version || self.versions; - - if (type) { - if (!Array.isArray(type)) - type = [type]; - type.filter(function (t) { - return (t); - }).sort().join(); +Router.prototype.render = function render(routeName, params, query) { + function pathItem(match, key) { + if (params.hasOwnProperty(key) === false) { + throw new Error('Route <' + routeName + + '> is missing parameter <' + + key + '>'); } - if (versions) { - if (!Array.isArray(versions)) - versions = [versions]; - versions.sort(); - } + return ('/' + encodeURIComponent(params[key])); + } - exists = routes.some(function (r) { - return (r.name === name); - }); - if (exists) - return (false); - - route = { - name: name, - method: options.method, - path: compileURL({ - url: options.path || options.url, - flags: options.flags, - urlParamPattern: options.urlParamPattern - }), - spec: options, - types: type, - versions: versions - }; - routes.push(route); + function queryItem(key) { + return (encodeURIComponent(key) + '=' + encodeURIComponent(query[key])); + } - if (!this.reverse[route.path.source]) - this.reverse[route.path.source] = []; + var routeKey = routeName.replace(/\W/g, '').toLowerCase(); + var route = this.mounts[routeKey]; + if (!route) + return (null); - if (this.reverse[route.path.source].indexOf(route.method) === -1) - this.reverse[route.path.source].push(route.method); + var _url = route.spec.path.replace(/\/:([^/]+)/g, pathItem); + var items = Object.keys(query || {}).map(queryItem); + var queryString = items.length > 0 ? ('?' + items.join('&')) : ''; - this.mounts[route.name] = route; + return (_url + queryString); +}; - this.emit('mount', - route.method, - route.path, - route.types, - route.versions); - return (route.name); +Router.prototype.mount = function mount(options) { + assert.object(options, 'options'); + assert.string(options.method, 'options.method'); + assert.string(options.name, 'options.name'); + + var exists; + var name = options.name; + var route; + var routes = this.routes[options.method]; + var self = this; + var type = options.contentType || self.contentType; + var versions = options.versions || options.version || self.versions; + + if (type) { + if (!Array.isArray(type)) + type = [type]; + type.filter(function (t) { + return (t); + }).sort().join(); + } + + if (versions) { + if (!Array.isArray(versions)) + versions = [versions]; + versions.sort(); + } + + exists = routes.some(function (r) { + return (r.name === name); + }); + if (exists) + return (false); + + route = { + name: name, + method: options.method, + path: compileURL({ + url: options.path || options.url, + flags: options.flags, + urlParamPattern: options.urlParamPattern + }), + spec: options, + types: type, + versions: versions + }; + routes.push(route); + + if (!this.reverse[route.path.source]) + this.reverse[route.path.source] = []; + + if (this.reverse[route.path.source].indexOf(route.method) === -1) + this.reverse[route.path.source].push(route.method); + + this.mounts[route.name] = route; + + this.emit('mount', + route.method, + route.path, + route.types, + route.versions); + + return (route.name); }; Router.prototype.unmount = function unmount(name) { - var route = this.mounts[name]; - if (!route) { - this.log.warn('router.unmount(%s): route does not exist', name); - return (false); - } + var route = this.mounts[name]; + if (!route) { + this.log.warn('router.unmount(%s): route does not exist', name); + return (false); + } - var reverse = this.reverse[route.path.source]; - var routes = this.routes[route.method]; - this.routes[route.method] = routes.filter(function (r) { - return (r.name !== route.name); - }); + var reverse = this.reverse[route.path.source]; + var routes = this.routes[route.method]; + this.routes[route.method] = routes.filter(function (r) { + return (r.name !== route.name); + }); - this.reverse[route.path.source] = reverse.filter(function (r) { - return (r !== route.method); - }); + this.reverse[route.path.source] = reverse.filter(function (r) { + return (r !== route.method); + }); - if (this.reverse[route.path.source].length === 0) - delete this.reverse[route.path.source]; + if (this.reverse[route.path.source].length === 0) + delete this.reverse[route.path.source]; - delete this.mounts[name]; + delete this.mounts[name]; - return (name); + return (name); }; Router.prototype.get = function get(name, req, cb) { - var params; - var route = false; - var routes = this.routes[req.method] || []; - - for (var i = 0; i < routes.length; i++) { - if (routes[i].name === name) { - route = routes[i]; - try { - params = matchURL(route.path, req); - } catch (e) {} - break; - } + var params; + var route = false; + var routes = this.routes[req.method] || []; + + for (var i = 0; i < routes.length; i++) { + if (routes[i].name === name) { + route = routes[i]; + try { + params = matchURL(route.path, req); + } catch (e) { + } + break; } + } - if (route) { - cb(null, route, params || {}); - } else { - cb(new InternalError()); - } + if (route) { + cb(null, route, params || {}); + } else { + cb(new InternalError()); + } }; Router.prototype.find = function find(req, res, callback) { - var candidates = []; - var ct = req.headers['content-type'] || DEF_CT; - var cacheKey = req.method + req.url + req.version() + ct; - var cacheVal; - var neg; - var params; - var r; - var reverse; - var routes = this.routes[req.method] || []; - var typed; - var versioned; - - if ((cacheVal = this.cache.get(cacheKey))) { - res.methods = cacheVal.methods.slice(); - callback(null, cacheVal, shallowCopy(cacheVal.params)); - return; + var candidates = []; + var ct = req.headers['content-type'] || DEF_CT; + var cacheKey = req.method + req.url + req.version() + ct; + var cacheVal; + var neg; + var params; + var r; + var reverse; + var routes = this.routes[req.method] || []; + var typed; + var versioned; + + if ((cacheVal = this.cache.get(cacheKey))) { + res.methods = cacheVal.methods.slice(); + callback(null, cacheVal, shallowCopy(cacheVal.params)); + return; + } + + for (var i = 0; i < routes.length; i++) { + try { + params = matchURL(routes[i].path, req); + } catch (e) { + this.log.trace({err: e}, 'error parsing URL'); + callback(new BadRequestError(e.message)); + return; } - for (var i = 0; i < routes.length; i++) { - try { - params = matchURL(routes[i].path, req); - } catch (e) { - this.log.trace({err: e}, 'error parsing URL'); - callback(new BadRequestError(e.message)); - return; - } - - if (params === false) - continue; - - reverse = this.reverse[routes[i].path.source]; - - if (routes[i].types.length && req.isUpload()) { - candidates.push({ - p: params, - r: routes[i] - }); - typed = true; - continue; - } + if (params === false) + continue; - // GH-283: we want to find the latest version for a given route, - // not the first one. However, if neither the client nor - // server specified any version, we're done, because neither - // cared - if (routes[i].versions.length === 0 && req.version() === '*') { - r = routes[i]; - break; - } + reverse = this.reverse[routes[i].path.source]; - if (routes[i].versions.length > 0) { - candidates.push({ - p: params, - r: routes[i] - }); - versioned = true; - } + if (routes[i].types.length && req.isUpload()) { + candidates.push({ + p: params, + r: routes[i] + }); + typed = true; + continue; } - if (!r) { - // If upload and typed - if (typed) { - /* JSSTYLED */ - var _t = ct.split(/\s*,\s*/); - candidates = candidates.filter(function (c) { - neg = new Negotiator({ - headers: { - accept: c.r.types.join(', ') - } - }); - var tmp = neg.preferredMediaType(_t); - return (tmp && tmp.length); - }); - - // Pick the first one in case not versioned - if (candidates.length) { - r = candidates[0].r; - params = candidates[0].p; - } - } - - if (versioned) { - candidates.forEach(function (c) { - var k = c.r.versions; - var v = semver.maxSatisfying(k, req.version()); - if (v && (!r || semver.gt(v, r.versions))) { - r = c.r; - params = c.p; - } - }); - } + // GH-283: we want to find the latest version for a given route, + // not the first one. However, if neither the client nor + // server specified any version, we're done, because neither + // cared + if (routes[i].versions.length === 0 && req.version() === '*') { + r = routes[i]; + break; } - // In order, we check if the route exists, in which case, we're good. - // Otherwise we look to see if ver was set to false; that would tell us - // we indeed did find a matching route (method+url), but the version - // field didn't line up, so we return bad version. If no route and no - // version, we now need to go walk the reverse map and look at whether - // we should return 405 or 404. If it was an OPTIONS request, we need - // to handle this having been a preflight request. - if (params && r) { - cacheVal = { - methods: reverse, - name: r.name, - params: params, - spec: r.spec - }; - this.cache.set(cacheKey, cacheVal); - res.methods = reverse.slice(); - callback(null, cacheVal, shallowCopy(params)); - return; + if (routes[i].versions.length > 0) { + candidates.push({ + p: params, + r: routes[i] + }); + versioned = true; } + } + if (!r) { + // If upload and typed if (typed) { - callback(new UnsupportedMediaTypeError(ct)); - return; - } - if (versioned) { - callback(new InvalidVersionError('%s is not supported by %s %s', - req.version() || '?', - req.method, - req.path())); - return; - } - - // This is a very generic preflight handler - it does - // not handle requiring authentication, nor does it do - // any special checking for extra user headers. The - // user will need to defined their own .opts handler to - // do that - function preflight(methods) { - var headers = req.headers['access-control-request-headers']; - var method = req.headers['access-control-request-method']; - var origin = req.headers['origin']; - - if (req.method !== 'OPTIONS' || - !origin || - !method || - methods.indexOf(method) === -1) { - return (false); - } - // Last, check request-headers - var ok = true; - /* JSSTYLED */ - (headers || '').split(/\s*,\s*/).forEach(function (h) { - if (!h) - return; - - h = h.toLowerCase(); - ok = cors.ALLOW_HEADERS.indexOf(h) !== -1 && ok; + /* JSSTYLED */ + var _t = ct.split(/\s*,\s*/); + candidates = candidates.filter(function (c) { + neg = new Negotiator({ + headers: { + accept: c.r.types.join(', ') + } }); - if (!ok) - return (false); - - res.setHeader('Access-Control-Allow-Origin', '*'); - res.setHeader('Access-Control-Allow-Methods', - methods.join(', ')); - res.setHeader('Access-Control-Allow-Headers', - cors.ALLOW_HEADERS.join(', ')); - res.setHeader('Access-Control-Max-Age', 3600); - - return (true); + var tmp = neg.preferredMediaType(_t); + return (tmp && tmp.length); + }); + + // Pick the first one in case not versioned + if (candidates.length) { + r = candidates[0].r; + params = candidates[0].p; + } } - // Check for 405 instead of 404 - var urls = Object.keys(this.reverse); - for (i = 0; i < urls.length; i++) { - if (matchURL(new RegExp(urls[i]), req)) { - res.methods = this.reverse[urls[i]].slice(); - res.setHeader('Allow', res.methods.join(', ')); - if (preflight(res.methods)) { - callback(null, { name: 'preflight' }); - return; - } - var err = new MethodNotAllowedError('%s is not allowed', - req.method); - callback(err); - return; + if (versioned) { + var maxV; + candidates.forEach(function (c) { + var k = c.r.versions; + var v = semver.maxSatisfying(k, req.version()); + + if (v) { + if (!r || semver.gt(v, maxV)) { + r = c.r; + params = c.p; + maxV = v; + } } + }); + } + } + + // In order, we check if the route exists, in which case, we're good. + // Otherwise we look to see if ver was set to false; that would tell us + // we indeed did find a matching route (method+url), but the version + // field didn't line up, so we return bad version. If no route and no + // version, we now need to go walk the reverse map and look at whether + // we should return 405 or 404. If it was an OPTIONS request, we need + // to handle this having been a preflight request. + if (params && r) { + cacheVal = { + methods: reverse, + name: r.name, + params: params, + spec: r.spec + }; + this.cache.set(cacheKey, cacheVal); + res.methods = reverse.slice(); + callback(null, cacheVal, shallowCopy(params)); + return; + } + + if (typed) { + callback(new UnsupportedMediaTypeError(ct)); + return; + } + if (versioned) { + callback(new InvalidVersionError('%s is not supported by %s %s', + req.version() || '?', + req.method, + req.path())); + return; + } + + //Checks if header is in cors.ALLOWED_HEADERS + function inAllowedHeaders(header) { + header = header.toLowerCase(); + return (cors.ALLOW_HEADERS.indexOf(header) !== -1); + } + + // This is a very generic preflight handler - it does + // not handle requiring authentication, nor does it do + // any special checking for extra user headers. The + // user will need to defined their own .opts handler to + // do that + function preflight(methods) { + var headers = req.headers['access-control-request-headers']; + var method = req.headers['access-control-request-method']; + var origin = req.headers['origin']; + + if (req.method !== 'OPTIONS' || !origin || !method || + methods.indexOf(method) === -1) { + return (false); } + // Last, check request-headers + /* JSSTYLED */ + var ok = !headers || headers.split(/\s*,\s*/).every(inAllowedHeaders); + + if (!ok) + return (false); + + // Verify the incoming origin against the whitelist. The result will + // either be the matching origin, or `*`. + origin = cors.matchOrigin(req, cors.origins); + if (origin) { + res.setHeader('Access-Control-Allow-Origin', origin); + if (cors.credentials) { + res.setHeader('Access-Control-Allow-Credentials', 'true'); + } + } else { + res.setHeader('Access-Control-Allow-Origin', '*'); + } + res.setHeader('Access-Control-Allow-Methods', + methods.join(', ')); + res.setHeader('Access-Control-Allow-Headers', + cors.ALLOW_HEADERS.join(', ')); + res.setHeader('Access-Control-Max-Age', 3600); + + return (true); + } + + // Check for 405 instead of 404 + var urls = Object.keys(this.reverse); + for (i = 0; i < urls.length; i++) { + if (matchURL(new RegExp(urls[i]), req)) { + res.methods = this.reverse[urls[i]].slice(); + res.setHeader('Allow', res.methods.join(', ')); + if (preflight(res.methods)) { + callback(null, { name: 'preflight' }); + return; + } + var err = new MethodNotAllowedError('%s is not allowed', + req.method); + callback(err); + return; + } + } - callback(new ResourceNotFoundError('%s does not exist', req.url)); + callback(new ResourceNotFoundError('%s does not exist', req.url)); }; Router.prototype.toString = function toString() { - var self = this; - var str = this.name + ':\n'; + var self = this; + var str = this.name + ':\n'; - Object.keys(this.routes).forEach(function (k) { - var routes = self.routes[k].map(function (r) { - return (r.name); - }); - - str += '\t\t' + k + ': [' + routes.join(', ') + ']\n'; + Object.keys(this.routes).forEach(function (k) { + var routes = self.routes[k].map(function (r) { + return (r.name); }); - return (str); + str += '\t\t' + k + ': [' + routes.join(', ') + ']\n'; + }); + + return (str); }; diff --git a/node_modules/restify/lib/server.js b/node_modules/restify/lib/server.js index 214defc..ceffe1c 100644 --- a/node_modules/restify/lib/server.js +++ b/node_modules/restify/lib/server.js @@ -17,6 +17,7 @@ var dtrace = require('./dtrace'); var errors = require('./errors'); var formatters = require('./formatters'); var shallowCopy = require('./utils').shallowCopy; +var upgrade = require('./upgrade'); var semver = require('semver'); var maxSatisfying = semver.maxSatisfying; @@ -26,7 +27,6 @@ require('./request'); require('./response'); - ///--- Globals var sprintf = util.format; @@ -36,257 +36,263 @@ var InvalidVersionError = errors.InvalidVersionError; var ResourceNotFoundError = errors.ResourceNotFoundError; var PROXY_EVENTS = [ - 'clientError', - 'close', - 'connection', - 'error', - 'listening', - 'secureConnection', - 'upgrade' + 'clientError', + 'close', + 'connection', + 'error', + 'listening', + 'secureConnection' ]; - ///--- Helpers function argumentsToChain(args, start) { - assert.ok(args); + assert.ok(args); - args = Array.prototype.slice.call(args, start); + args = Array.prototype.slice.call(args, start); - if (args.length < 0) - throw new TypeError('handler (function) required'); + if (args.length < 0) + throw new TypeError('handler (function) required'); - var chain = []; + var chain = []; - function process(handlers) { - for (var i = 0; i < handlers.length; i++) { - if (Array.isArray(handlers[i])) { - process(handlers[i], 0); - } else { - assert.func(handlers[i], 'handler'); - chain.push(handlers[i]); - } - } - - return (chain); + function process(handlers) { + for (var i = 0; i < handlers.length; i++) { + if (Array.isArray(handlers[i])) { + process(handlers[i], 0); + } else { + assert.func(handlers[i], 'handler'); + chain.push(handlers[i]); + } } - return (process(args)); + return (chain); + } + + return (process(args)); } function mergeFormatters(fmt) { - var arr = []; - var defaults = Object.keys(formatters).length; - var i = 0; - var obj = {}; - - function addFormatter(src, k) { - assert.func(src[k], 'formatter'); - - var q; - var t = k; - if (k.indexOf(';') !== -1) { - /* JSSTYLED */ - var tmp = k.split(/\s*;\s*/); - t = tmp[0]; - if (tmp[1].indexOf('q=') !== -1) { - q = parseFloat(tmp[1].split('=')[1], 10) * 10; - } - } - - if (k.indexOf('/') === -1) - k = mime.lookup(k); - - obj[t] = src[k]; - arr.push({ - q: q || (i + defaults), - t: t - }); - i++; + var arr = []; + var defaults = Object.keys(formatters).length; + var i = 0; + var obj = {}; + + function addFormatter(src, k) { + assert.func(src[k], 'formatter'); + + var q; + var t = k; + if (k.indexOf(';') !== -1) { + /* JSSTYLED */ + var tmp = k.split(/\s*;\s*/); + t = tmp[0]; + if (tmp[1].indexOf('q=') !== -1) { + q = parseFloat(tmp[1].split('=')[1]) * 10; + } } - Object.keys(formatters).forEach(addFormatter.bind(this, formatters)); - Object.keys(fmt || {}).forEach(addFormatter.bind(this, fmt || {})); + if (k.indexOf('/') === -1) + k = mime.lookup(k); - arr = arr.sort(function (a, b) { - return (b.q - a.q); - }).map(function (a) { - return (a.t); + obj[t] = src[k]; + arr.push({ + q: q || (i + defaults), + t: t }); + i++; + } + + Object.keys(formatters).forEach(addFormatter.bind(this, formatters)); + Object.keys(fmt || {}).forEach(addFormatter.bind(this, fmt || {})); - return ({ - formatters: obj, - acceptable: arr + arr = arr.sort(function (a, b) { + return (b.q - a.q); + }).map(function (a) { + return (a.t); }); + + return ({ + formatters: obj, + acceptable: arr + }); } function ifError(n) { - function _ifError(err) { - if (err) { - err._restify_next = n; - throw err; - } + function _ifError(err) { + if (err) { + err._restify_next = n; + throw err; } - return (_ifError); + } + + return (_ifError); } function emitRouteError(server, req, res, err) { - var name; - if (err.name === 'ResourceNotFoundError') { - name = 'NotFound'; - } else if (err.name === 'InvalidVersionError') { - name = 'VersionNotAllowed'; - } else { - name = err.name.replace(/Error$/, ''); - } - if (server.listeners(name).length > 0) { - server.emit(name, req, res, once(function () { - server.emit('after', req, res, null); - })); - } else { - res.send(err); - server.emit('after', req, res, null); - } + var name; + if (err.name === 'ResourceNotFoundError') { + name = 'NotFound'; + } else if (err.name === 'InvalidVersionError') { + name = 'VersionNotAllowed'; + } else { + name = err.name.replace(/Error$/, ''); + } + if (server.listeners(name).length > 0) { + server.emit(name, req, res, once(function () { + server.emit('after', req, res, null); + })); + } else { + res.send(err); + server.emit('after', req, res, null); + } } function optionsError(err, req, res) { - var code = err.statusCode; - var ok = false; + var code = err.statusCode; + var ok = false; - if (code === 404 && req.method === 'OPTIONS' && req.url === '*') { - res.send(200); - ok = true; - } + if (code === 404 && req.method === 'OPTIONS' && req.url === '*') { + res.send(200); + ok = true; + } - return (ok); + return (ok); } - ///--- API function Server(options) { - assert.object(options, 'options'); - assert.object(options.log, 'options.log'); - assert.object(options.router, 'options.router'); - - var self = this; - - EventEmitter.call(this); - - this.before = []; - this.chain = []; - this.log = options.log; - this.name = options.name || 'restify'; - this.router = options.router; - this.routes = {}; - this.secure = false; - this.versions = options.versions || options.version || []; - - var fmt = mergeFormatters(options.formatters); - this.acceptable = fmt.acceptable; - this.formatters = fmt.formatters; - - if (options.spdy) { - this.spdy = true; - this.server = spdy.createServer(options.spdy); - } else if ((options.cert || options.certificate) && options.key) { - this.ca = options.ca; - this.certificate = options.certificate || options.cert; - this.key = options.key; - this.passphrase = options.passphrase || null; - this.secure = true; - - this.server = https.createServer({ - ca: self.ca, - cert: self.certificate, - key: self.key, - passphrase: self.passphrase, - rejectUnauthorized: options.rejectUnauthorized, - requestCert: options.requestCert - }); - } else { - this.server = http.createServer(); - } - - this.router.on('mount', this.emit.bind(this, 'mount')); - - PROXY_EVENTS.forEach(function (e) { - self.server.on(e, self.emit.bind(self, e)); + assert.object(options, 'options'); + assert.object(options.log, 'options.log'); + assert.object(options.router, 'options.router'); + + var self = this; + + EventEmitter.call(this); + + this.before = []; + this.chain = []; + this.log = options.log; + this.name = options.name || 'restify'; + this.router = options.router; + this.routes = {}; + this.secure = false; + this.versions = options.versions || options.version || []; + + var fmt = mergeFormatters(options.formatters); + this.acceptable = fmt.acceptable; + this.formatters = fmt.formatters; + + if (options.spdy) { + this.spdy = true; + this.server = spdy.createServer(options.spdy); + } else if ((options.cert || options.certificate) && options.key) { + this.ca = options.ca; + this.certificate = options.certificate || options.cert; + this.key = options.key; + this.passphrase = options.passphrase || null; + this.secure = true; + + this.server = https.createServer({ + ca: self.ca, + cert: self.certificate, + key: self.key, + passphrase: self.passphrase, + rejectUnauthorized: options.rejectUnauthorized, + requestCert: options.requestCert, + ciphers: options.ciphers }); + } else if (options.httpsServerOptions) { + this.server = https.createServer(options.httpsServerOptions); + } else { + this.server = http.createServer(); + } + + this.router.on('mount', this.emit.bind(this, 'mount')); + + if (!options.handleUpgrades && PROXY_EVENTS.indexOf('upgrade') === -1) + PROXY_EVENTS.push('upgrade'); + PROXY_EVENTS.forEach(function (e) { + self.server.on(e, self.emit.bind(self, e)); + }); + + // Now the things we can't blindly proxy + this.server.on('checkContinue', function onCheckContinue(req, res) { + if (self.listeners('checkContinue').length > 0) { + self.emit('checkContinue', req, res); + return; + } - // Now the things we can't blindly proxy - this.server.on('checkContinue', function onCheckContinue(req, res) { - if (self.listeners('checkContinue').length > 0) { - self.emit('checkContinue', req, res); - return; - } + if (!options.noWriteContinue) + res.writeContinue(); - if (!options.noWriteContinue) - res.writeContinue(); + self._setupRequest(req, res); + self._handle(req, res, true); + }); - self._setupRequest(req, res); - self._handle(req, res, true); + if (options.handleUpgrades) { + this.server.on('upgrade', function onUpgrade(req, socket, head) { + req._upgradeRequest = true; + var res = upgrade.createResponse(req, socket, head); + self._setupRequest(req, res); + self._handle(req, res); }); + } - this.server.on('request', function onRequest(req, res) { - /* JSSTYLED */ - if (/^\/socket.io.*/.test(req.url) && - self.listeners('request').length > 0) { - self.emit('request', req, res); - return; - } + this.server.on('request', function onRequest(req, res) { + self.emit('request', req, res); - self._setupRequest(req, res); - self._handle(req, res); - }); + self._setupRequest(req, res); + self._handle(req, res); + }); - this.__defineGetter__('maxHeadersCount', function () { - return (self.server.maxHeadersCount); - }); + this.__defineGetter__('maxHeadersCount', function () { + return (self.server.maxHeadersCount); + }); - this.__defineSetter__('maxHeadersCount', function (c) { - self.server.maxHeadersCount = c; - return (c); - }); + this.__defineSetter__('maxHeadersCount', function (c) { + self.server.maxHeadersCount = c; + return (c); + }); + this.__defineGetter__('url', function () { + if (self.socketPath) + return ('http://' + self.socketPath); - this.__defineGetter__('url', function () { - if (self.socketPath) - return ('http://' + self.socketPath); - - var addr = self.address(); - var str = ''; - if (self.spdy) { - str += 'spdy://'; - } else if (self.secure) { - str += 'https://'; - } else { - str += 'http://'; - } + var addr = self.address(); + var str = ''; + if (self.spdy) { + str += 'spdy://'; + } else if (self.secure) { + str += 'https://'; + } else { + str += 'http://'; + } - if (addr) { - str += addr.address; - str += ':'; - str += addr.port; - } else { - str += '169.254.0.1:0000'; - } + if (addr) { + str += addr.address; + str += ':'; + str += addr.port; + } else { + str += '169.254.0.1:0000'; + } - return (str); - }); + return (str); + }); } util.inherits(Server, EventEmitter); module.exports = Server; Server.prototype.address = function address() { - return (this.server.address()); + return (this.server.address()); }; /** @@ -301,8 +307,8 @@ Server.prototype.address = function address() { * @throws {TypeError} on bad input. */ Server.prototype.listen = function listen() { - var args = Array.prototype.slice.call(arguments); - return (this.server.listen.apply(this.server, args)); + var args = Array.prototype.slice.call(arguments); + return (this.server.listen.apply(this.server, args)); }; @@ -312,14 +318,14 @@ Server.prototype.listen = function listen() { * @param {Function} callback optional callback to invoke when done. */ Server.prototype.close = function close(callback) { - if (callback) - assert.func(callback, 'callback'); + if (callback) + assert.func(callback, 'callback'); - this.server.once('close', function onClose() { - return (callback ? callback() : false); - }); + this.server.once('close', function onClose() { + return (callback ? callback() : false); + }); - return (this.server.close()); + return (this.server.close()); }; @@ -331,71 +337,71 @@ Server.prototype.close = function close(callback) { * @return {Route} the newly created route. */ [ - 'del', - 'get', - 'head', - 'opts', - 'post', - 'put', - 'patch' + 'del', + 'get', + 'head', + 'opts', + 'post', + 'put', + 'patch' ].forEach(function (method) { Server.prototype[method] = function (opts) { - if (opts instanceof RegExp || typeof (opts) === 'string') { - opts = { - path: opts - }; - } else if (typeof (opts) === 'object') { - opts = shallowCopy(opts); - } else { - throw new TypeError('path (string) required'); - } - - if (arguments.length < 2) - throw new TypeError('handler (function) required'); - - var chain = []; - var route; - var self = this; - - function addHandler(h) { - assert.func(h, 'handler'); + if (opts instanceof RegExp || typeof (opts) === 'string') { + opts = { + path: opts + }; + } else if (typeof (opts) === 'object') { + opts = shallowCopy(opts); + } else { + throw new TypeError('path (string) required'); + } + + if (arguments.length < 2) + throw new TypeError('handler (function) required'); - chain.push(h); + var chain = []; + var route; + var self = this; + + function addHandler(h) { + assert.func(h, 'handler'); + + chain.push(h); + } + + if (method === 'del') + method = 'DELETE'; + if (method === 'opts') + method = 'OPTIONS'; + opts.method = method.toUpperCase(); + opts.versions = opts.versions || opts.version || self.versions; + if (!Array.isArray(opts.versions)) + opts.versions = [opts.versions]; + + if (!opts.name) { + opts.name = method + '-' + (opts.path || opts.url); + if (opts.versions.length > 0) { + opts.name += '-' + opts.versions.join('--'); } - if (method === 'del') - method = 'DELETE'; - if (method === 'opts') - method = 'OPTIONS'; - opts.method = method.toUpperCase(); - opts.versions = opts.versions || opts.version || self.versions; - if (!Array.isArray(opts.versions)) - opts.versions = [opts.versions]; - - if (!opts.name) { - opts.name = method + '-' + (opts.path || opts.url); - if (opts.versions.length > 0) { - opts.name += '-' + opts.versions.join('--'); - } - - opts.name = opts.name.replace(/\W/g, '').toLowerCase(); - if (this.router.mounts[opts.name]) // GH-401 - opts.name += uuid.v4().substr(0, 7); - } else { - opts.name = opts.name.replace(/\W/g, '').toLowerCase(); - } + opts.name = opts.name.replace(/\W/g, '').toLowerCase(); + if (this.router.mounts[opts.name]) // GH-401 + opts.name += uuid.v4().substr(0, 7); + } else { + opts.name = opts.name.replace(/\W/g, '').toLowerCase(); + } - if (!(route = this.router.mount(opts))) - return (false); + if (!(route = this.router.mount(opts))) + return (false); - this.chain.forEach(addHandler); - argumentsToChain(arguments, 1).forEach(addHandler); - this.routes[route] = chain; + this.chain.forEach(addHandler); + argumentsToChain(arguments, 1).forEach(addHandler); + this.routes[route] = chain; - return (route); + return (route); }; -}); + }); /** @@ -416,15 +422,15 @@ Server.prototype.close = function close(callback) { * @param {Function} The middleware function to execute */ Server.prototype.param = function param(name, fn) { - this.use(function _param(req, res, next) { - if (req.params && req.params[name]) { - fn.call(this, req, res, next, req.params[name], name); - } else { - next(); - } - }); + this.use(function _param(req, res, next) { + if (req.params && req.params[name]) { + fn.call(this, req, res, next, req.params[name], name); + } else { + next(); + } + }); - return (this); + return (this); }; @@ -446,27 +452,27 @@ Server.prototype.param = function param(name, fn) { * will be the selected version */ Server.prototype.versionedUse = function versionedUse(versions, fn) { - if (!Array.isArray(versions)) - versions = [versions]; - assert.arrayOfString(versions, 'versions'); - - versions.forEach(function (v) { - if (!semver.valid(v)) - throw new TypeError('%s is not a valid semver', v); - }); - - this.use(function _versionedUse(req, res, next) { - var ver; - if (req.version() === '*' || - (ver = maxSatisfying(versions, - req.version()) || false)) { - fn.call(this, req, res, next, ver); - } else { - next(); - } - }); + if (!Array.isArray(versions)) + versions = [versions]; + assert.arrayOfString(versions, 'versions'); + + versions.forEach(function (v) { + if (!semver.valid(v)) + throw new TypeError('%s is not a valid semver', v); + }); + + this.use(function _versionedUse(req, res, next) { + var ver; + if (req.version() === '*' || + (ver = maxSatisfying(versions, + req.version()) || false)) { + fn.call(this, req, res, next, ver); + } else { + next(); + } + }); - return (this); + return (this); }; @@ -480,11 +486,11 @@ Server.prototype.versionedUse = function versionedUse(versions, fn) { * @throws {TypeError} on bad input. */ Server.prototype.rm = function rm(route) { - var r = this.router.unmount(route); - if (r && this.routes[r]) - delete this.routes[r]; + var r = this.router.unmount(route); + if (r && this.routes[r]) + delete this.routes[r]; - return (r); + return (r); }; @@ -497,13 +503,13 @@ Server.prototype.rm = function rm(route) { * @throws {TypeError} on input error. */ Server.prototype.use = function use() { - var self = this; + var self = this; - (argumentsToChain(arguments) || []).forEach(function (h) { - self.chain.push(h); - }); + (argumentsToChain(arguments) || []).forEach(function (h) { + self.chain.push(h); + }); - return (this); + return (this); }; @@ -513,112 +519,113 @@ Server.prototype.use = function use() { * depends on. Note that req.params will _not_ be set yet. */ Server.prototype.pre = function pre() { - var self = this; + var self = this; - argumentsToChain(arguments).forEach(function (h) { - self.before.push(h); - }); + argumentsToChain(arguments).forEach(function (h) { + self.before.push(h); + }); - return (this); + return (this); }; Server.prototype.toString = function toString() { - var LINE_FMT = '\t%s: %s\n'; - var SUB_LINE_FMT = '\t\t%s: %s\n'; - var self = this; - var str = ''; - - function handlersToString(arr) { - var s = '[' + arr.map(function (b) { - return (b.name || 'function'); - }).join(', ') + ']'; - - return (s); - } - - str += sprintf(LINE_FMT, 'Accepts', this.acceptable.join(', ')); - str += sprintf(LINE_FMT, 'Name', this.name); - str += sprintf(LINE_FMT, 'Pre', handlersToString(this.before)); - str += sprintf(LINE_FMT, 'Router', this.router.toString()); - str += sprintf(LINE_FMT, 'Routes', ''); - Object.keys(this.routes).forEach(function (k) { - var handlers = handlersToString(self.routes[k]); - str += sprintf(SUB_LINE_FMT, k, handlers); - }); - str += sprintf(LINE_FMT, 'Secure', this.secure); - str += sprintf(LINE_FMT, 'Url', this.url); - str += sprintf(LINE_FMT, 'Version', this.versions.join()); - - return (str); + var LINE_FMT = '\t%s: %s\n'; + var SUB_LINE_FMT = '\t\t%s: %s\n'; + var self = this; + var str = ''; + + function handlersToString(arr) { + var s = '[' + arr.map(function (b) { + return (b.name || 'function'); + }).join(', ') + ']'; + + return (s); + } + + str += sprintf(LINE_FMT, 'Accepts', this.acceptable.join(', ')); + str += sprintf(LINE_FMT, 'Name', this.name); + str += sprintf(LINE_FMT, 'Pre', handlersToString(this.before)); + str += sprintf(LINE_FMT, 'Router', this.router.toString()); + str += sprintf(LINE_FMT, 'Routes', ''); + Object.keys(this.routes).forEach(function (k) { + var handlers = handlersToString(self.routes[k]); + str += sprintf(SUB_LINE_FMT, k, handlers); + }); + str += sprintf(LINE_FMT, 'Secure', this.secure); + str += sprintf(LINE_FMT, 'Url', this.url); + str += sprintf(LINE_FMT, 'Version', this.versions.join()); + + return (str); }; - ///--- Private methods Server.prototype._handle = function _handle(req, res) { - var self = this; + var self = this; - function routeAndRun() { - self._route(req, res, function (route, context) { - req.context = req.params = context; - req.route = route.spec; - var chain = self.routes[route]; + function routeAndRun() { + self._route(req, res, function (route, context) { + req.context = req.params = context; + req.route = route.spec; - self._run(req, res, route, chain, function done(e) { - self.emit('after', req, res, route, e); - }); - }); - } + var r = route ? route.name : null; + var chain = self.routes[r]; - if (this.before.length > 0) { - this._run(req, res, null, this.before, function (err) { - if (!err) { - routeAndRun(); - } - }); - } else { + self._run(req, res, route, chain, function done(e) { + self.emit('after', req, res, route, e); + }); + }); + } + + if (this.before.length > 0) { + this._run(req, res, null, this.before, function (err) { + if (!err) { routeAndRun(); - } + } + }); + } else { + routeAndRun(); + } }; Server.prototype._route = function _route(req, res, name, cb) { - var self = this; - - if (typeof (name) === 'function') { - cb = name; - name = null; + var self = this; + + if (typeof (name) === 'function') { + cb = name; + name = null; + } else { + this.router.get(name, req, function (err, route, ctx) { + if (err) { + emitRouteError(self, req, res, err); + } else { + cb(route, ctx); + } + }); + } + + this.router.find(req, res, function onRoute(err, route, ctx) { + var r = route ? route.name : null; + if (err) { + if (optionsError(err, req, res)) { + self.emit('after', req, res, err); + } else { + emitRouteError(self, req, res, err); + } + } else if (r === 'preflight') { + res.writeHead(200); + res.end(); + self.emit('after', req, res, null); + } else if (!r || !self.routes[r]) { + err = new ResourceNotFoundError(req.path()); + emitRouteError(self, res, res, err); } else { - this.router.get(name, req, function (err, route, ctx) { - if (err) { - emitRouteError(self, req, res, err); - } else { - cb(route, ctx); - } - }); + cb(route, ctx); } - - this.router.find(req, res, function onRoute(err, route, ctx) { - var r = route ? route.name : null; - if (err) { - if (optionsError(err, req, res)) { - self.emit('after', req, res, err); - } else { - emitRouteError(self, req, res, err); - } - } else if (r === 'preflight') { - res.writeHead(200); - res.end(); - self.emit('after', req, res, null); - } else if (!r || !self.routes[r]) { - err = new ResourceNotFoundError(req.path()); - emitRouteError(self, res, res, err); - } else { - cb(r, ctx); - } - }); + }); }; @@ -634,140 +641,153 @@ Server.prototype._route = function _route(req, res, name, cb) { // a response was sent and you don't want the chain to keep // going Server.prototype._run = function _run(req, res, route, chain, cb) { - var d; - var i = -1; - var id = dtrace.nextId(); - var log = this.log; - var self = this; - - function next(arg) { - var done = false; - if (arg) { - if (arg instanceof Error) { - log.trace({err: arg}, 'next(err=%s)', - (arg.name || 'Error')); - res.send(arg); - done = true; - } else if (typeof (arg) === 'string') { - if (req._rstfy_chained_route) { - var _e = new errors.InternalError(); - log.error({ - err: _e - }, 'Multiple next("chain") calls not ' + - 'supported'); - res.send(_e); - return (false); - } - - self._route(req, res, arg, function (r, ctx) { - req.context = req.params = ctx; - req.route = r.spec; - - var _c = chain.slice(0, i + 1); - function _uniq(fn) { - return (_c.indexOf(fn) === -1); - } - - var _routes = self.routes[r.name] || []; - var _chain = _routes.filter(_uniq); - - req._rstfy_chained_route = true; - self._run(req, res, r, _chain, cb); - }); - } + var d; + var i = -1; + var id = dtrace.nextId(); + var log = this.log; + var self = this; + var t; + + function next(arg) { + var done = false; + if (arg) { + if (arg instanceof Error) { + log.trace({err: arg}, 'next(err=%s)', + (arg.name || 'Error')); + res.send(arg); + done = true; + } else if (typeof (arg) === 'string') { + if (req._rstfy_chained_route) { + var _e = new errors.InternalError(); + log.error({ + err: _e + }, 'Multiple next("chain") calls not ' + + 'supported'); + res.send(_e); + return (false); } - if (arg === false) - done = true; - - // Fire DTrace done for the previous handler. - if ((i + 1) > 0 && chain[i] && !chain[i]._skip) { - dtrace._rstfy_probes['handler-done'].fire(function () { - return ([ - self.name, - route !== null ? route : 'pre', - chain[i].name || ('handler-' + i), - id - ]); - }); - } + self._route(req, res, arg, function (r, ctx) { + req.context = req.params = ctx; + req.route = r.spec; - // Run the next handler up - if (!done && chain[++i]) { - if (chain[i]._skip) - return (next()); - - if (log.trace()) - log.trace('running %s', chain[i].name || '?'); - - dtrace._rstfy_probes['handler-start'].fire(function () { - return ([ - self.name, - route !== null ? route : 'pre', - chain[i].name || ('handler-' + i), - id - ]); - }); - - var n = once(next); - n.ifError = ifError(n); - return (chain[i].call(self, req, res, n)); - } + var _c = chain.slice(0, i + 1); + + function _uniq(fn) { + return (_c.indexOf(fn) === -1); + } - dtrace._rstfy_probes['route-done'].fire(function () { - return ([ - self.name, - route !== null ? route : 'pre', - id, - res.statusCode || 200, - res.headers() - ]); + var _routes = self.routes[r.name] || []; + var _chain = _routes.filter(_uniq); + + req._rstfy_chained_route = true; + self._run(req, res, r, _chain, cb); }); + } + } - if (route === null) { - self.emit('preDone', req, res); - } else { - self.emit('done', req, res, route); - } + if (arg === false) + done = true; - return (cb ? cb(arg) : true); + // Fire DTrace done for the previous handler. + if ((i + 1) > 0 && chain[i] && !chain[i]._skip) { + var _name = chain[i].name || ('handler-' + i); + req.timers.push({ + name: _name, + time: process.hrtime(t) + }); + + dtrace._rstfy_probes['handler-done'].fire(function () { + return ([ + self.name, + route !== null ? route.name : 'pre', + _name, + id + ]); + }); } - var n1 = once(next); - n1.ifError = ifError(n1); - dtrace._rstfy_probes['route-start'].fire(function () { + // Run the next handler up + if (!done && chain[++i]) { + if (chain[i]._skip) + return (next()); + + t = process.hrtime(); + if (log.trace()) + log.trace('running %s', chain[i].name || '?'); + + dtrace._rstfy_probes['handler-start'].fire(function () { return ([ - self.name, - route !== null ? route : 'pre', - id, - req.method, - req.href(), - req.headers + self.name, + route !== null ? route.name : 'pre', + chain[i].name || ('handler-' + i), + id ]); - }); + }); - d = domain.create(); - d.add(req); - d.add(res); - d.on('error', function onError(err) { - if (err._restify_next) { - err._restify_next(err); - } else { - log.trace({err: err}, 'uncaughtException'); - self.emit('uncaughtException', req, res, route, err); - } + var n = once(next); + n.ifError = ifError(n); + return (chain[i].call(self, req, res, n)); + } + + dtrace._rstfy_probes['route-done'].fire(function () { + return ([ + self.name, + route !== null ? route.name : 'pre', + id, + res.statusCode || 200, + res.headers() + ]); }); - d.run(n1); + + if (route === null) { + self.emit('preDone', req, res); + } else { + self.emit('done', req, res, route); + } + + return (cb ? cb(arg) : true); + } + + var n1 = once(next); + n1.ifError = ifError(n1); + + dtrace._rstfy_probes['route-start'].fire(function () { + return ([ + self.name, + route !== null ? route.name : 'pre', + id, + req.method, + req.href(), + req.headers + ]); + }); + + req.timers = []; + d = domain.create(); + d.add(req); + d.add(res); + d.on('error', function onError(err) { + if (err._restify_next) { + err._restify_next(err); + } else { + log.trace({err: err}, 'uncaughtException'); + self.emit('uncaughtException', req, res, route, err); + } + }); + d.run(n1); }; Server.prototype._setupRequest = function _setupRequest(req, res) { - req.log = res.log = this.log; - req._time = res._time = Date.now(); - - res.acceptable = this.acceptable; - res.formatters = this.formatters; - res.req = req; - res.serverName = this.name; - res.version = this.router.versions[this.router.versions.length - 1]; + req.log = res.log = this.log; + req._time = res._time = Date.now(); + + res.acceptable = this.acceptable; + res.formatters = this.formatters; + res.req = req; + res.serverName = this.name; + res.version = this.router.versions[this.router.versions.length - 1]; }; + +// vim: set et ts=8 sts=8 sw=8: diff --git a/node_modules/restify/lib/utils.js b/node_modules/restify/lib/utils.js index 6349caf..ce9e0b1 100644 --- a/node_modules/restify/lib/utils.js +++ b/node_modules/restify/lib/utils.js @@ -3,7 +3,6 @@ var assert = require('assert-plus'); - /** * Cleans up sloppy URL paths, like /foo////bar/// to /foo/bar. * @@ -11,39 +10,37 @@ var assert = require('assert-plus'); * @return {String} Cleaned up form of path. */ function sanitizePath(path) { - assert.ok(path); + assert.ok(path); - // Be nice like apache and strip out any //my//foo//bar///blah - path = path.replace(/\/\/+/g, '/'); + // Be nice like apache and strip out any //my//foo//bar///blah + path = path.replace(/\/\/+/g, '/'); - // Kill a trailing '/' - if (path.lastIndexOf('/') === (path.length - 1) && path.length > 1) - path = path.substr(0, path.length - 1); + // Kill a trailing '/' + if (path.lastIndexOf('/') === (path.length - 1) && path.length > 1) + path = path.substr(0, path.length - 1); - return (path); + return (path); } - /** * Return a shallow copy of the given object; */ function shallowCopy(obj) { - if (!obj) { - return (obj); - } - var copy = {}; - Object.keys(obj).forEach(function (k) { - copy[k] = obj[k]; - }); - return (copy); + if (!obj) { + return (obj); + } + var copy = {}; + Object.keys(obj).forEach(function (k) { + copy[k] = obj[k]; + }); + return (copy); } - ///--- Exports module.exports = { - sanitizePath: sanitizePath, - shallowCopy: shallowCopy + sanitizePath: sanitizePath, + shallowCopy: shallowCopy }; diff --git a/node_modules/restify/node_modules/assert-plus/assert.js b/node_modules/restify/node_modules/assert-plus/assert.js index 70583f1..ff2ba02 100644 --- a/node_modules/restify/node_modules/assert-plus/assert.js +++ b/node_modules/restify/node_modules/assert-plus/assert.js @@ -9,6 +9,7 @@ var util = require('util'); ///--- Globals var NDEBUG = process.env.NODE_NDEBUG || false; +var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; @@ -53,6 +54,28 @@ function _assert(arg, type, name, stackFunc) { } +function _instanceof(arg, type, name, stackFunc) { + if (!NDEBUG) { + name = name || type; + stackFunc = stackFunc || _instanceof.caller; + + if (!(arg instanceof type)) { + throw new assert.AssertionError({ + message: _(TYPE_REQUIRED, name, type.name), + actual: _getClass(arg), + expected: type.name, + operator: 'instanceof', + stackStartFunction: stackFunc + }); + } + } +} + +function _getClass(object) { + return (Object.prototype.toString.call(object).slice(8, -1)); +}; + + ///--- API @@ -85,7 +108,7 @@ function bool(arg, name) { function buffer(arg, name) { if (!Buffer.isBuffer(arg)) { throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), + message: _(TYPE_REQUIRED, name || '', 'Buffer'), actual: typeof (arg), expected: 'buffer', operator: 'Buffer.isBuffer', @@ -102,6 +125,15 @@ function func(arg, name) { function number(arg, name) { _assert(arg, 'number', name); + if (!NDEBUG && (isNaN(arg) || !isFinite(arg))) { + throw new assert.AssertionError({ + message: _(TYPE_REQUIRED, name, 'number'), + actual: arg, + expected: 'number', + operator: 'isNaN', + stackStartFunction: number + }); + } } @@ -111,15 +143,16 @@ function object(arg, name) { function stream(arg, name) { - if (!(arg instanceof Stream)) { - throw new assert.AssertionError({ - message: _(TYPE_REQUIRED, name, type), - actual: typeof (arg), - expected: 'Stream', - operator: 'instanceof', - stackStartFunction: buffer - }); - } + _instanceof(arg, Stream, name); +} + + +function date(arg, name) { + _instanceof(arg, Date, name); +} + +function regexp(arg, name) { + _instanceof(arg, RegExp, name); } @@ -128,17 +161,33 @@ function string(arg, name) { } +function uuid(arg, name) { + string(arg, name); + if (!NDEBUG && !UUID_REGEXP.test(arg)) { + throw new assert.AssertionError({ + message: _(TYPE_REQUIRED, name, 'uuid'), + actual: 'string', + expected: 'uuid', + operator: 'test', + stackStartFunction: uuid + }); + } +} + ///--- Exports module.exports = { bool: bool, buffer: buffer, + date: date, func: func, number: number, object: object, + regexp: regexp, stream: stream, - string: string + string: string, + uuid: uuid }; diff --git a/node_modules/restify/node_modules/assert-plus/package.json b/node_modules/restify/node_modules/assert-plus/package.json index aaf2e92..be3abff 100644 --- a/node_modules/restify/node_modules/assert-plus/package.json +++ b/node_modules/restify/node_modules/assert-plus/package.json @@ -5,16 +5,23 @@ }, "name": "assert-plus", "description": "Extra assertions on top of node's assert module", - "version": "0.1.2", + "version": "0.1.5", "main": "./assert.js", - "dependencies": {}, "devDependencies": {}, "optionalDependencies": {}, + "repository": { + "type": "git", + "url": "https://github.com/mcavage/node-assert-plus.git" + }, "engines": { - "node": ">=0.6" + "node": ">=0.8" }, "readme": "# node-assert-plus\n\nThis library is a super small wrapper over node's assert module that has two\nthings: (1) the ability to disable assertions with the environment variable\nNODE_NDEBUG, and (2) some API wrappers for argument testing. Like\n`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks\nlike this:\n\n var assert = require('assert-plus');\n\n function fooAccount(options, callback) {\n\t assert.object(options, 'options');\n\t\tassert.number(options.id, 'options.id);\n\t\tassert.bool(options.isManager, 'options.isManager');\n\t\tassert.string(options.name, 'options.name');\n\t\tassert.arrayOfString(options.email, 'options.email');\n\t\tassert.func(callback, 'callback');\n\n // Do stuff\n\t\tcallback(null, {});\n }\n\n# API\n\nAll methods that *aren't* part of node's core assert API are simply assumed to\ntake an argument, and then a string 'name' that's not a message; `AssertionError`\nwill be thrown if the assertion fails with a message like:\n\n AssertionError: foo (string) is required\n\tat test (/home/mark/work/foo/foo.js:3:9)\n\tat Object. (/home/mark/work/foo/foo.js:15:1)\n\tat Module._compile (module.js:446:26)\n\tat Object..js (module.js:464:10)\n\tat Module.load (module.js:353:31)\n\tat Function._load (module.js:311:12)\n\tat Array.0 (module.js:484:10)\n\tat EventEmitter._tickCallback (node.js:190:38)\n\nfrom:\n\n function test(foo) {\n\t assert.string(foo, 'foo');\n }\n\nThere you go. You can check that arrays are of a homogenous type with `Arrayof$Type`:\n\n function test(foo) {\n\t assert.arrayOfString(foo, 'foo');\n }\n\nYou can assert IFF an argument is not `undefined` (i.e., an optional arg):\n\n assert.optionalString(foo, 'foo');\n\nLastly, you can opt-out of assertion checking altogether by setting the\nenvironment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have\nlots of assertions, and don't want to pay `typeof ()` taxes to v8 in\nproduction.\n\nThe complete list of APIs is:\n\n* assert.bool\n* assert.buffer\n* assert.func\n* assert.number\n* assert.object\n* assert.string\n* assert.arrayOfBool\n* assert.arrayOfFunc\n* assert.arrayOfNumber\n* assert.arrayOfObject\n* assert.arrayOfString\n* assert.optionalBool\n* assert.optionalBuffer\n* assert.optionalFunc\n* assert.optionalNumber\n* assert.optionalObject\n* assert.optionalString\n* assert.optionalArrayOfBool\n* assert.optionalArrayOfFunc\n* assert.optionalArrayOfNumber\n* assert.optionalArrayOfObject\n* assert.optionalArrayOfString\n* assert.AssertionError\n* assert.fail\n* assert.ok\n* assert.equal\n* assert.notEqual\n* assert.deepEqual\n* assert.notDeepEqual\n* assert.strictEqual\n* assert.notStrictEqual\n* assert.throws\n* assert.doesNotThrow\n* assert.ifError\n\n# Installation\n\n npm install assert-plus\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee .\n", "readmeFilename": "README.md", - "_id": "assert-plus@0.1.2", - "_from": "assert-plus@0.1.2" + "bugs": { + "url": "https://github.com/mcavage/node-assert-plus/issues" + }, + "dependencies": {}, + "_id": "assert-plus@0.1.5", + "_from": "assert-plus@^0.1.5" } diff --git a/node_modules/restify/node_modules/backoff/.travis.yml b/node_modules/restify/node_modules/backoff/.travis.yml index 041d471..1c4b6a3 100644 --- a/node_modules/restify/node_modules/backoff/.travis.yml +++ b/node_modules/restify/node_modules/backoff/.travis.yml @@ -1,7 +1,10 @@ language: node_js + +before_install: + - npm install -g npm + - npm install -g jshint + node_js: - - "0.6" - - "0.7" - "0.8" - "0.10" diff --git a/node_modules/restify/node_modules/backoff/CHANGES.md b/node_modules/restify/node_modules/backoff/CHANGES.md index e682a3f..6ddb905 100644 --- a/node_modules/restify/node_modules/backoff/CHANGES.md +++ b/node_modules/restify/node_modules/backoff/CHANGES.md @@ -1,5 +1,21 @@ # Changelog +## 2.4.0 + +- Replace `FunctionCall.getResults` by `FunctionCall.getLastResult` to avoid + storing intermediary results forever as this may lead to memory exhaustion + when used in conjunction with an infinite number of backoffs. +- Add `FunctionCall.getNumRetries` which returns the number of times the + wrapped function was retried. + +## 2.3.0 + +- Add four new methods to `FunctionCall` to query the state of the call. + - isPending + - isRunning + - isCompleted + - isAborted + ## 2.2.0 - To match `Backoff` default behavior, `FunctionCall` no longer sets a diff --git a/node_modules/restify/node_modules/backoff/README.md b/node_modules/restify/node_modules/backoff/README.md index 29943ce..10e672c 100644 --- a/node_modules/restify/node_modules/backoff/README.md +++ b/node_modules/restify/node_modules/backoff/README.md @@ -1,4 +1,6 @@ -# Backoff for Node.js [![Build Status](https://secure.travis-ci.org/MathieuTurcotte/node-backoff.png?branch=master)](http://travis-ci.org/MathieuTurcotte/node-backoff) +# Backoff for Node.js +[![Build Status](https://secure.travis-ci.org/MathieuTurcotte/node-backoff.png?branch=master)](http://travis-ci.org/MathieuTurcotte/node-backoff) +[![NPM version](https://badge.fury.io/js/backoff.png)](http://badge.fury.io/js/backoff) Fibonacci and exponential backoffs for Node.js. @@ -88,7 +90,7 @@ Typical usage looks like the following. ``` js var call = backoff.call(get, 'https://duplika.ca/', function(err, res) { - console.log('Retries: ' + call.getResults().length); + console.log('Num retries: ' + call.getNumRetries()); if (err) { console.log('Error: ' + err.message); @@ -257,12 +259,28 @@ way to create `FunctionCall` instances. Constructs a function handler for the given asynchronous function. +#### call.isPending() + +Returns whether the call is pending, i.e. hasn't been started. + +#### call.isRunning() + +Returns whether the call is in progress. + +#### call.isCompleted() + +Returns whether the call is completed. + +#### call.isAborted() + +Returns whether the call is aborted. + #### call.setStrategy(strategy) - strategy: strategy instance to use, defaults to `FibonacciStrategy`. Sets the backoff strategy to use. This method should be called before -`call.call()`. +`call.start()` otherwise an exception will be thrown. #### call.failAfter(maxNumberOfBackoffs) @@ -271,35 +289,45 @@ Sets the backoff strategy to use. This method should be called before Sets the maximum number of backoffs before the call is aborted. By default, there is no limit on the number of backoffs that can be performed. -This method should be called before `call.call()`. +This method should be called before `call.start()` otherwise an exception will +be thrown.. -#### call.getResults() +#### call.getLastResult() -Retrieves all intermediary results returned by the wrapped function. This +Retrieves the last intermediary result returned by the wrapped function. This method can be called at any point in time during the call life cycle, i.e. before, during and after the wrapped function invocation. -Returns an array of arrays containing the results returned by the wrapped -function for each call. For example, to get the error code returned by the -second call, one would do the following. +Returns an array containing the results returned by the last wrapped function +call. For example, to get the error code returned by the last call, one would +do the following. ``` js -var results = call.getResults(); -var error = results[1][0]; +var results = call.getLastResult(); +// The error code is the first parameter of the callback. +var error = results[0]; ``` +#### call.getNumRetries() + +Returns the number of times the wrapped function call was retried. For a +wrapped function that succeeded immediately, this would return 0. This +method can be called at any point in time during the call life cycle, i.e. +before, during and after the wrapped function invocation. + #### call.start() Initiates the call the wrapped function. This method should only be called -once per function call instance. +once otherwise an exception will be thrown. + #### call.abort() Aborts the call. -Past results can be retrieved using `call.getResults()`. This method can be -called at any point in time during the call life cycle, i.e. before, during -and after the wrapped function invocation. +The last result can be retrieved using `call.getLastResult()`. This method +can be called at any point in time during the call life cycle, i.e. before, +during and after the wrapped function invocation. #### Event: 'call' @@ -321,6 +349,10 @@ Emitted each time the wrapped function invokes its callback. Emitted each time a backoff operation is started. +## Annotated source code + +The annotated source code can be found at [mathieuturcotte.github.io/node-backoff/docs](http://mathieuturcotte.github.io/node-backoff/docs/). + ## License This code is free to use under the terms of the [MIT license](http://mturcotte.mit-license.org/). diff --git a/node_modules/restify/node_modules/backoff/doc/backoff_events.png b/node_modules/restify/node_modules/backoff/doc/backoff_events.png deleted file mode 100644 index a6b8a8e..0000000 Binary files a/node_modules/restify/node_modules/backoff/doc/backoff_events.png and /dev/null differ diff --git a/node_modules/restify/node_modules/backoff/doc/function_call_events.png b/node_modules/restify/node_modules/backoff/doc/function_call_events.png deleted file mode 100644 index c4eac45..0000000 Binary files a/node_modules/restify/node_modules/backoff/doc/function_call_events.png and /dev/null differ diff --git a/node_modules/restify/node_modules/backoff/doc/layers.png b/node_modules/restify/node_modules/backoff/doc/layers.png deleted file mode 100644 index cc702d1..0000000 Binary files a/node_modules/restify/node_modules/backoff/doc/layers.png and /dev/null differ diff --git a/node_modules/restify/node_modules/backoff/examples/function_call.js b/node_modules/restify/node_modules/backoff/examples/function_call.js index d21d551..9ec7938 100755 --- a/node_modules/restify/node_modules/backoff/examples/function_call.js +++ b/node_modules/restify/node_modules/backoff/examples/function_call.js @@ -27,7 +27,7 @@ function get(options, callback) { var call = backoff.call(get, URL, function(err, res) { // Notice how the call is captured inside the closure. - console.log('Retries: ' + call.getResults().length); + console.log('Num retries: ' + call.getNumRetries()); if (err) { console.log('Error: ' + err.message); diff --git a/node_modules/restify/node_modules/backoff/index.js b/node_modules/restify/node_modules/backoff/index.js index 5f184d3..6281fa6 100644 --- a/node_modules/restify/node_modules/backoff/index.js +++ b/node_modules/restify/node_modules/backoff/index.js @@ -1,7 +1,5 @@ -/* - * Copyright (c) 2012 Mathieu Turcotte - * Licensed under the MIT license. - */ +// Copyright (c) 2012 Mathieu Turcotte +// Licensed under the MIT license. var Backoff = require('./lib/backoff'); var ExponentialBackoffStrategy = require('./lib/strategy/exponential'); @@ -13,33 +11,17 @@ module.exports.FunctionCall = FunctionCall; module.exports.FibonacciStrategy = FibonacciBackoffStrategy; module.exports.ExponentialStrategy = ExponentialBackoffStrategy; -/** - * Constructs a Fibonacci backoff. - * @param options Fibonacci backoff strategy arguments. - * @return The fibonacci backoff. - * @see FibonacciBackoffStrategy - */ +// Constructs a Fibonacci backoff. module.exports.fibonacci = function(options) { return new Backoff(new FibonacciBackoffStrategy(options)); }; -/** - * Constructs an exponential backoff. - * @param options Exponential strategy arguments. - * @return The exponential backoff. - * @see ExponentialBackoffStrategy - */ +// Constructs an exponential backoff. module.exports.exponential = function(options) { return new Backoff(new ExponentialBackoffStrategy(options)); }; -/** - * Constructs a FunctionCall for the given function and arguments. - * @param fn The function to wrap in a backoff handler. - * @param vargs The function's arguments (var args). - * @param callback The function's callback. - * @return The FunctionCall instance. - */ +// Constructs a FunctionCall for the given function and arguments. module.exports.call = function(fn, vargs, callback) { var args = Array.prototype.slice.call(arguments); fn = args[0]; diff --git a/node_modules/restify/node_modules/backoff/lib/backoff.js b/node_modules/restify/node_modules/backoff/lib/backoff.js index cfa13ee..202a280 100644 --- a/node_modules/restify/node_modules/backoff/lib/backoff.js +++ b/node_modules/restify/node_modules/backoff/lib/backoff.js @@ -1,16 +1,12 @@ -/* - * Copyright (c) 2012 Mathieu Turcotte - * Licensed under the MIT license. - */ +// Copyright (c) 2012 Mathieu Turcotte +// Licensed under the MIT license. var events = require('events'); +var precond = require('precond'); var util = require('util'); -/** - * Backoff driver. - * @param backoffStrategy Backoff delay generator/strategy. - * @constructor - */ +// A class to hold the state of a backoff operation. Accepts a backoff strategy +// to generate the backoff delays. function Backoff(backoffStrategy) { events.EventEmitter.call(this); @@ -26,29 +22,20 @@ function Backoff(backoffStrategy) { } util.inherits(Backoff, events.EventEmitter); -/** - * Sets a limit, greater than 0, on the maximum number of backoffs. A 'fail' - * event will be emitted when the limit is reached. - * @param maxNumberOfRetry The maximum number of backoffs. - */ +// Sets a limit, greater than 0, on the maximum number of backoffs. A 'fail' +// event will be emitted when the limit is reached. Backoff.prototype.failAfter = function(maxNumberOfRetry) { - if (maxNumberOfRetry < 1) { - throw new Error('Maximum number of retry must be greater than 0. ' + - 'Actual: ' + maxNumberOfRetry); - } + precond.checkArgument(maxNumberOfRetry > 0, + 'Expected a maximum number of retry greater than 0 but got %s.', + maxNumberOfRetry); this.maxNumberOfRetry_ = maxNumberOfRetry; }; -/** - * Starts a backoff operation. - * @param err Optional paramater to let the listeners know why the backoff - * operation was started. - */ +// Starts a backoff operation. Accepts an optional parameter to let the +// listeners know why the backoff operation was started. Backoff.prototype.backoff = function(err) { - if (this.timeoutID_ !== -1) { - throw new Error('Backoff in progress.'); - } + precond.checkState(this.timeoutID_ === -1, 'Backoff in progress.'); if (this.backoffNumber_ === this.maxNumberOfRetry_) { this.emit('fail', err); @@ -60,20 +47,14 @@ Backoff.prototype.backoff = function(err) { } }; -/** - * Handles the backoff timeout completion. - * @private - */ +// Handles the backoff timeout completion. Backoff.prototype.onBackoff_ = function() { this.timeoutID_ = -1; this.emit('ready', this.backoffNumber_, this.backoffDelay_); this.backoffNumber_++; }; -/** - * Stops any backoff operation and resets the backoff delay to its inital - * value. - */ +// Stops any backoff operation and resets the backoff delay to its inital value. Backoff.prototype.reset = function() { this.backoffNumber_ = 0; this.backoffStrategy_.reset(); diff --git a/node_modules/restify/node_modules/backoff/lib/function_call.js b/node_modules/restify/node_modules/backoff/lib/function_call.js index 59cd4e9..6c95410 100644 --- a/node_modules/restify/node_modules/backoff/lib/function_call.js +++ b/node_modules/restify/node_modules/backoff/lib/function_call.js @@ -1,131 +1,118 @@ -/* - * Copyright (c) 2012 Mathieu Turcotte - * Licensed under the MIT license. - */ +// Copyright (c) 2012 Mathieu Turcotte +// Licensed under the MIT license. var events = require('events'); +var precond = require('precond'); var util = require('util'); var Backoff = require('./backoff'); var FibonacciBackoffStrategy = require('./strategy/fibonacci'); -/** - * Returns true if the specified value is a function - * @param val Variable to test. - * @return Whether variable is a function. - */ -function isFunction(val) { - return typeof val == 'function'; -} - -/** - * Manages the calling of a function in a backoff loop. - * @param fn Function to wrap in a backoff handler. - * @param args Array of function's arguments. - * @param callback Function's callback. - * @constructor - */ +// Wraps a function to be called in a backoff loop. function FunctionCall(fn, args, callback) { events.EventEmitter.call(this); - if (!isFunction(fn)) { - throw new Error('fn should be a function.' + - 'Actual: ' + typeof fn); - } - - if (!isFunction(callback)) { - throw new Error('callback should be a function.' + - 'Actual: ' + typeof fn); - } + precond.checkIsFunction(fn, 'Expected fn to be a function.'); + precond.checkIsArray(args, 'Expected args to be an array.'); + precond.checkIsFunction(callback, 'Expected callback to be a function.'); this.function_ = fn; this.arguments_ = args; this.callback_ = callback; - this.results_ = []; + this.lastResult_ = []; + this.numRetries_ = 0; this.backoff_ = null; this.strategy_ = null; this.failAfter_ = -1; - this.called_ = false; - this.aborted_ = false; + this.state_ = FunctionCall.State_.PENDING; } util.inherits(FunctionCall, events.EventEmitter); -/** - * Creates a backoff instance from the provided strategy; defaults to a - * Fibonacci backoff strategy if none is provided. - * @param strategy Optional strategy to use when instantiating the backoff. - * @return A backoff instance. - * @private - */ -FunctionCall.backoffFactory_ = function(strategy) { - return new Backoff(strategy || new FibonacciBackoffStrategy()); +// States in which the call can be. +FunctionCall.State_ = { + // Call isn't started yet. + PENDING: 0, + // Call is in progress. + RUNNING: 1, + // Call completed successfully which means that either the wrapped function + // returned successfully or the maximal number of backoffs was reached. + COMPLETED: 2, + // The call was aborted. + ABORTED: 3 +}; + +// Checks whether the call is pending. +FunctionCall.prototype.isPending = function() { + return this.state_ == FunctionCall.State_.PENDING; +}; + +// Checks whether the call is in progress. +FunctionCall.prototype.isRunning = function() { + return this.state_ == FunctionCall.State_.RUNNING; }; -/** - * Sets the backoff strategy. - * @param strategy The backoff strategy to use. - * @return Itself for chaining. - */ +// Checks whether the call is completed. +FunctionCall.prototype.isCompleted = function() { + return this.state_ == FunctionCall.State_.COMPLETED; +}; + +// Checks whether the call is aborted. +FunctionCall.prototype.isAborted = function() { + return this.state_ == FunctionCall.State_.ABORTED; +}; + +// Sets the backoff strategy to use. Can only be called before the call is +// started otherwise an exception will be thrown. FunctionCall.prototype.setStrategy = function(strategy) { - if (this.called_) { - throw new Error('Call in progress.'); - } + precond.checkState(this.isPending(), 'FunctionCall in progress.'); this.strategy_ = strategy; - return this; + return this; // Return this for chaining. +}; + +// Returns all intermediary results returned by the wrapped function since +// the initial call. +FunctionCall.prototype.getLastResult = function() { + return this.lastResult_.concat(); }; -/** - * Returns all intermediary results returned by the wrapped function since - * the initial call. - * @return An array of intermediary results. - */ -FunctionCall.prototype.getResults = function() { - return this.results_.concat(); +// Returns the number of times the wrapped function call was retried. +FunctionCall.prototype.getNumRetries = function() { + return this.numRetries_; }; -/** - * Sets the backoff limit. - * @param maxNumberOfRetry The maximum number of backoffs. - * @return Itself for chaining. - */ +// Sets the backoff limit. FunctionCall.prototype.failAfter = function(maxNumberOfRetry) { - if (this.called_) { - throw new Error('Call in progress.'); - } + precond.checkState(this.isPending(), 'FunctionCall in progress.'); this.failAfter_ = maxNumberOfRetry; - return this; + return this; // Return this for chaining. }; -/** - * Aborts the current call. - */ +// Aborts the call. FunctionCall.prototype.abort = function() { - this.aborted_ = true; - if (this.called_) { + precond.checkState(!this.isCompleted(), 'FunctionCall already completed.'); + + if (this.isRunning()) { this.backoff_.reset(); } + + this.state_ = FunctionCall.State_.ABORTED; }; -/** - * Initiates the call to the wrapped function. - * @param backoffFactory Optional factory method used to create the backoff - * instance. - */ +// Initiates the call to the wrapped function. Accepts an optional factory +// function used to create the backoff instance; used when testing. FunctionCall.prototype.start = function(backoffFactory) { - if (this.aborted_) { - return; - } + precond.checkState(!this.isAborted(), 'FunctionCall aborted.'); + precond.checkState(this.isPending(), 'FunctionCall already started.'); - if (this.called_) { - throw new Error('Call in progress.'); - } + var strategy = this.strategy_ || new FibonacciBackoffStrategy(); - backoffFactory = backoffFactory || FunctionCall.backoffFactory_; + this.backoff_ = backoffFactory ? + backoffFactory(strategy) : + new Backoff(strategy); - this.backoff_ = backoffFactory(this.strategy_); - this.backoff_.on('ready', this.doCall_.bind(this)); + this.backoff_.on('ready', this.doCall_.bind(this, true /* isRetry */)); this.backoff_.on('fail', this.doCallback_.bind(this)); this.backoff_.on('backoff', this.handleBackoff_.bind(this)); @@ -133,59 +120,47 @@ FunctionCall.prototype.start = function(backoffFactory) { this.backoff_.failAfter(this.failAfter_); } - this.called_ = true; - this.doCall_(); + this.state_ = FunctionCall.State_.RUNNING; + this.doCall_(false /* isRetry */); }; -/** - * Calls the wrapped function. - * @private - */ -FunctionCall.prototype.doCall_ = function() { +// Calls the wrapped function. +FunctionCall.prototype.doCall_ = function(isRetry) { + if (isRetry) { + this.numRetries_++; + } var eventArgs = ['call'].concat(this.arguments_); events.EventEmitter.prototype.emit.apply(this, eventArgs); var callback = this.handleFunctionCallback_.bind(this); this.function_.apply(null, this.arguments_.concat(callback)); }; -/** - * Calls the wrapped function's callback with the last result returned by the - * wrapped function. - * @private - */ +// Calls the wrapped function's callback with the last result returned by the +// wrapped function. FunctionCall.prototype.doCallback_ = function() { - var args = this.results_[this.results_.length - 1]; - this.callback_.apply(null, args); + this.callback_.apply(null, this.lastResult_); }; -/** - * Handles wrapped function's completion. This method acts as a replacement - * for the original callback function. - * @private - */ +// Handles wrapped function's completion. This method acts as a replacement +// for the original callback function. FunctionCall.prototype.handleFunctionCallback_ = function() { - if (this.aborted_) { + if (this.isAborted()) { return; } var args = Array.prototype.slice.call(arguments); - this.results_.push(args); // Save callback arguments. + this.lastResult_ = args; // Save last callback arguments. events.EventEmitter.prototype.emit.apply(this, ['callback'].concat(args)); if (args[0]) { this.backoff_.backoff(args[0]); } else { + this.state_ = FunctionCall.State_.COMPLETED; this.doCallback_(); } }; -/** - * Handles backoff event. - * @param number Backoff number. - * @param delay Backoff delay. - * @param err The error that caused the backoff. - * @private - */ +// Handles the backoff event by reemitting it. FunctionCall.prototype.handleBackoff_ = function(number, delay, err) { this.emit('backoff', number, delay, err); }; diff --git a/node_modules/restify/node_modules/backoff/lib/strategy/exponential.js b/node_modules/restify/node_modules/backoff/lib/strategy/exponential.js index 08a4746..9e19f60 100644 --- a/node_modules/restify/node_modules/backoff/lib/strategy/exponential.js +++ b/node_modules/restify/node_modules/backoff/lib/strategy/exponential.js @@ -1,16 +1,11 @@ -/* - * Copyright (c) 2012 Mathieu Turcotte - * Licensed under the MIT license. - */ +// Copyright (c) 2012 Mathieu Turcotte +// Licensed under the MIT license. var util = require('util'); var BackoffStrategy = require('./strategy'); -/** - * Exponential backoff strategy. - * @extends BackoffStrategy - */ +// Exponential backoff strategy. function ExponentialBackoffStrategy(options) { BackoffStrategy.call(this, options); this.backoffDelay_ = 0; @@ -18,14 +13,12 @@ function ExponentialBackoffStrategy(options) { } util.inherits(ExponentialBackoffStrategy, BackoffStrategy); -/** @inheritDoc */ ExponentialBackoffStrategy.prototype.next_ = function() { this.backoffDelay_ = Math.min(this.nextBackoffDelay_, this.getMaxDelay()); this.nextBackoffDelay_ = this.backoffDelay_ * 2; return this.backoffDelay_; }; -/** @inheritDoc */ ExponentialBackoffStrategy.prototype.reset_ = function() { this.backoffDelay_ = 0; this.nextBackoffDelay_ = this.getInitialDelay(); diff --git a/node_modules/restify/node_modules/backoff/lib/strategy/fibonacci.js b/node_modules/restify/node_modules/backoff/lib/strategy/fibonacci.js index 602b07f..7c71c03 100644 --- a/node_modules/restify/node_modules/backoff/lib/strategy/fibonacci.js +++ b/node_modules/restify/node_modules/backoff/lib/strategy/fibonacci.js @@ -1,16 +1,11 @@ -/* - * Copyright (c) 2012 Mathieu Turcotte - * Licensed under the MIT license. - */ +// Copyright (c) 2012 Mathieu Turcotte +// Licensed under the MIT license. var util = require('util'); var BackoffStrategy = require('./strategy'); -/** - * Fibonacci backoff strategy. - * @extends BackoffStrategy - */ +// Fibonacci backoff strategy. function FibonacciBackoffStrategy(options) { BackoffStrategy.call(this, options); this.backoffDelay_ = 0; @@ -18,7 +13,6 @@ function FibonacciBackoffStrategy(options) { } util.inherits(FibonacciBackoffStrategy, BackoffStrategy); -/** @inheritDoc */ FibonacciBackoffStrategy.prototype.next_ = function() { var backoffDelay = Math.min(this.nextBackoffDelay_, this.getMaxDelay()); this.nextBackoffDelay_ += this.backoffDelay_; @@ -26,7 +20,6 @@ FibonacciBackoffStrategy.prototype.next_ = function() { return backoffDelay; }; -/** @inheritDoc */ FibonacciBackoffStrategy.prototype.reset_ = function() { this.nextBackoffDelay_ = this.getInitialDelay(); this.backoffDelay_ = 0; diff --git a/node_modules/restify/node_modules/backoff/lib/strategy/strategy.js b/node_modules/restify/node_modules/backoff/lib/strategy/strategy.js index f5bf7d4..7adfd75 100644 --- a/node_modules/restify/node_modules/backoff/lib/strategy/strategy.js +++ b/node_modules/restify/node_modules/backoff/lib/strategy/strategy.js @@ -1,7 +1,5 @@ -/* - * Copyright (c) 2012 Mathieu Turcotte - * Licensed under the MIT license. - */ +// Copyright (c) 2012 Mathieu Turcotte +// Licensed under the MIT license. var events = require('events'); var util = require('util'); @@ -10,15 +8,14 @@ function isDef(value) { return value !== undefined && value !== null; } -/** - * Abstract class defining the skeleton for all backoff strategies. - * @param options Backoff strategy options. - * @param options.randomisationFactor The randomisation factor, must be between - * 0 and 1. - * @param options.initialDelay The backoff initial delay, in milliseconds. - * @param options.maxDelay The backoff maximal delay, in milliseconds. - * @constructor - */ +// Abstract class defining the skeleton for the backoff strategies. Accepts an +// object holding the options for the backoff strategy: +// +// * `randomisationFactor`: The randomisation factor which must be between 0 +// and 1 where 1 equates to a randomization factor of 100% and 0 to no +// randomization. +// * `initialDelay`: The backoff initial delay in milliseconds. +// * `maxDelay`: The backoff maximal delay in milliseconds. function BackoffStrategy(options) { options = options || {}; @@ -44,26 +41,18 @@ function BackoffStrategy(options) { this.randomisationFactor_ = options.randomisationFactor || 0; } -/** - * Retrieves the maximal backoff delay. - * @return The maximal backoff delay, in milliseconds. - */ +// Gets the maximal backoff delay. BackoffStrategy.prototype.getMaxDelay = function() { return this.maxDelay_; }; -/** - * Retrieves the initial backoff delay. - * @return The initial backoff delay, in milliseconds. - */ +// Gets the initial backoff delay. BackoffStrategy.prototype.getInitialDelay = function() { return this.initialDelay_; }; -/** - * Template method that computes the next backoff delay. - * @return The backoff delay, in milliseconds. - */ +// Template method that computes and returns the next backoff delay in +// milliseconds. BackoffStrategy.prototype.next = function() { var backoffDelay = this.next_(); var randomisationMultiple = 1 + Math.random() * this.randomisationFactor_; @@ -71,26 +60,19 @@ BackoffStrategy.prototype.next = function() { return randomizedDelay; }; -/** - * Computes the next backoff delay. - * @return The backoff delay, in milliseconds. - * @protected - */ +// Computes and returns the next backoff delay. Intended to be overridden by +// subclasses. BackoffStrategy.prototype.next_ = function() { throw new Error('BackoffStrategy.next_() unimplemented.'); }; -/** - * Template method that resets the backoff delay to its initial value. - */ +// Template method that resets the backoff delay to its initial value. BackoffStrategy.prototype.reset = function() { this.reset_(); }; -/** - * Resets the backoff delay to its initial value. - * @protected - */ +// Resets the backoff delay to its initial value. Intended to be overridden by +// subclasses. BackoffStrategy.prototype.reset_ = function() { throw new Error('BackoffStrategy.reset_() unimplemented.'); }; diff --git a/node_modules/restify/node_modules/backoff/package.json b/node_modules/restify/node_modules/backoff/package.json index 4a77272..0b4b83a 100644 --- a/node_modules/restify/node_modules/backoff/package.json +++ b/node_modules/restify/node_modules/backoff/package.json @@ -1,7 +1,8 @@ { "name": "backoff", "description": "Fibonacci and exponential backoffs.", - "version": "2.2.0", + "version": "2.4.0", + "license": "MIT", "author": { "name": "Mathieu Turcotte", "email": "turcotte.mat@gmail.com" @@ -16,23 +17,30 @@ "type": "git", "url": "https://github.com/MathieuTurcotte/node-backoff.git" }, + "dependencies": { + "precond": "0.2" + }, "devDependencies": { - "sinon": "1.5.2", - "nodeunit": "0.7", - "jshint": "1.1.0" + "sinon": "1.10", + "nodeunit": "0.9" }, "scripts": { - "pretest": "node_modules/jshint/bin/jshint lib/ tests/ examples/ index.js", + "docco": "docco lib/*.js lib/strategy/* index.js", + "pretest": "jshint lib/ tests/ examples/ index.js", "test": "node_modules/nodeunit/bin/nodeunit tests/" }, "engines": { "node": ">= 0.6" }, - "readme": "# Backoff for Node.js [![Build Status](https://secure.travis-ci.org/MathieuTurcotte/node-backoff.png?branch=master)](http://travis-ci.org/MathieuTurcotte/node-backoff)\n\nFibonacci and exponential backoffs for Node.js.\n\n## Installation\n\n```\nnpm install backoff\n```\n\n## Unit tests\n\n```\nnpm test\n```\n\n## Usage\n\n### Object Oriented\n\nThe usual way to instantiate a new `Backoff` object is to use one predefined\nfactory method: `backoff.fibonacci([options])`, `backoff.exponential([options])`.\n\n`Backoff` inherits from `EventEmitter`. When a backoff starts, a `backoff`\nevent is emitted and, when a backoff ends, a `ready` event is emitted.\nHandlers for these two events are called with the current backoff number and\ndelay.\n\n``` js\nvar backoff = require('backoff');\n\nvar fibonacciBackoff = backoff.fibonacci({\n randomisationFactor: 0,\n initialDelay: 10,\n maxDelay: 300\n});\n\nfibonacciBackoff.failAfter(10);\n\nfibonacciBackoff.on('backoff', function(number, delay) {\n // Do something when backoff starts, e.g. show to the\n // user the delay before next reconnection attempt.\n console.log(number + ' ' + delay + 'ms');\n});\n\nfibonacciBackoff.on('ready', function(number, delay) {\n // Do something when backoff ends, e.g. retry a failed\n // operation (DNS lookup, API call, etc.). If it fails\n // again then backoff, otherwise reset the backoff\n // instance.\n fibonacciBackoff.backoff();\n});\n\nfibonacciBackoff.on('fail', function() {\n // Do something when the maximum number of backoffs is\n // reached, e.g. ask the user to check its connection.\n console.log('fail');\n});\n\nfibonacciBackoff.backoff();\n```\n\nThe previous example would print the following.\n\n```\n0 10ms\n1 10ms\n2 20ms\n3 30ms\n4 50ms\n5 80ms\n6 130ms\n7 210ms\n8 300ms\n9 300ms\nfail\n```\n\nNote that `Backoff` objects are meant to be instantiated once and reused\nseveral times by calling `reset` after a successful \"retry\".\n\n### Functional\n\nIt's also possible to avoid some boilerplate code when invoking an asynchronous\nfunction in a backoff loop by using `backoff.call(fn, [args, ...], callback)`.\n\nTypical usage looks like the following.\n\n``` js\nvar call = backoff.call(get, 'https://duplika.ca/', function(err, res) {\n console.log('Retries: ' + call.getResults().length);\n\n if (err) {\n console.log('Error: ' + err.message);\n } else {\n console.log('Status: ' + res.statusCode);\n }\n});\n\ncall.setStrategy(new backoff.ExponentialStrategy());\ncall.failAfter(10);\ncall.start();\n```\n\n## API\n\n### backoff.fibonacci([options])\n\nConstructs a Fibonacci backoff (10, 10, 20, 30, 50, etc.).\n\nSee bellow for options description.\n\n### backoff.exponential([options])\n\nConstructs an exponential backoff (10, 20, 40, 80, etc.).\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n\nWith these values, the backoff delay will increase from 100 ms to 10000 ms. The\nrandomisation factor controls the range of randomness and must be between 0\nand 1. By default, no randomisation is applied on the backoff delay.\n\n### backoff.call(fn, [args, ...], callback)\n\n- fn: function to call in a backoff handler, i.e. the wrapped function\n- args: function's arguments\n- callback: function's callback accepting an error as its first argument\n\nConstructs a `FunctionCall` instance for the given function. The wrapped\nfunction will get retried until it succeds or reaches the maximum number\nof backoffs. In both cases, the callback function will be invoked with the\nlast result returned by the wrapped function.\n\nIt is the caller's responsability to initiate the call by invoking the\n`start` method on the returned `FunctionCall` instance.\n\n### Class Backoff\n\n#### new Backoff(strategy)\n\n- strategy: the backoff strategy to use\n\nConstructs a new backoff object from a specific backoff strategy. The backoff\nstrategy must implement the `BackoffStrategy`interface defined bellow.\n\n#### backoff.failAfter(numberOfBackoffs)\n\n- numberOfBackoffs: maximum number of backoffs before the fail event gets\nemitted, must be greater than 0\n\nSets a limit on the maximum number of backoffs that can be performed before\na fail event gets emitted and the backoff instance is reset. By default, there\nis no limit on the number of backoffs that can be performed.\n\n#### backoff.backoff([err])\n\nStarts a backoff operation. If provided, the error parameter will be emitted\nas the last argument of the `backoff` and `fail` events to let the listeners\nknow why the backoff operation was attempted.\n\nAn error will be thrown an error if a backoff operation is already in progress.\n\nIn practice, this method should be called after a failed attempt to perform a\nsensitive operation (connecting to a database, downloading a resource over the\nnetwork, etc.).\n\n#### backoff.reset()\n\nResets the backoff delay to the initial backoff delay and stop any backoff\noperation in progress. After reset, a backoff instance can and should be\nreused.\n\nIn practice, this method should be called after having successfully completed\nthe sensitive operation guarded by the backoff instance or if the client code\nrequest to stop any reconnection attempt.\n\n#### Event: 'backoff'\n\n- number: number of backoffs since last reset, starting at 0\n- delay: backoff delay in milliseconds\n- err: optional error parameter passed to `backoff.backoff([err])`\n\nEmitted when a backoff operation is started. Signals to the client how long\nthe next backoff delay will be.\n\n#### Event: 'ready'\n\n- number: number of backoffs since last reset, starting at 0\n- delay: backoff delay in milliseconds\n\nEmitted when a backoff operation is done. Signals that the failing operation\nshould be retried.\n\n#### Event: 'fail'\n\n- err: optional error parameter passed to `backoff.backoff([err])`\n\nEmitted when the maximum number of backoffs is reached. This event will only\nbe emitted if the client has set a limit on the number of backoffs by calling\n`backoff.failAfter(numberOfBackoffs)`. The backoff instance is automatically\nreset after this event is emitted.\n\n### Interface BackoffStrategy\n\nA backoff strategy must provide the following methods.\n\n#### strategy.next()\n\nComputes and returns the next backoff delay.\n\n#### strategy.reset()\n\nResets the backoff delay to its initial value.\n\n### Class ExponentialStrategy\n\nExponential (10, 20, 40, 80, etc.) backoff strategy implementation.\n\n#### new ExponentialStrategy([options])\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n\n### Class FibonacciStrategy\n\nFibonnaci (10, 10, 20, 30, 50, etc.) backoff strategy implementation.\n\n#### new FibonacciStrategy([options])\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n\n### Class FunctionCall\n\nThis class manages the calling of an asynchronous function within a backoff\nloop.\n\nThis class should rarely be instantiated directly since the factory method\n`backoff.call(fn, [args, ...], callback)` offers a more convenient and safer\nway to create `FunctionCall` instances.\n\n#### new FunctionCall(fn, args, callback)\n\n- fn: asynchronous function to call\n- args: an array containing fn's args\n- callback: fn's callback\n\nConstructs a function handler for the given asynchronous function.\n\n#### call.setStrategy(strategy)\n\n- strategy: strategy instance to use, defaults to `FibonacciStrategy`.\n\nSets the backoff strategy to use. This method should be called before\n`call.call()`.\n\n#### call.failAfter(maxNumberOfBackoffs)\n\n- maxNumberOfBackoffs: maximum number of backoffs before the call is aborted\n\nSets the maximum number of backoffs before the call is aborted. By default,\nthere is no limit on the number of backoffs that can be performed.\n\nThis method should be called before `call.call()`.\n\n#### call.getResults()\n\nRetrieves all intermediary results returned by the wrapped function. This\nmethod can be called at any point in time during the call life cycle, i.e.\nbefore, during and after the wrapped function invocation.\n\nReturns an array of arrays containing the results returned by the wrapped\nfunction for each call. For example, to get the error code returned by the\nsecond call, one would do the following.\n\n``` js\nvar results = call.getResults();\nvar error = results[1][0];\n```\n\n#### call.start()\n\nInitiates the call the wrapped function. This method should only be called\nonce per function call instance.\n\n#### call.abort()\n\nAborts the call.\n\nPast results can be retrieved using `call.getResults()`. This method can be\ncalled at any point in time during the call life cycle, i.e. before, during\nand after the wrapped function invocation.\n\n#### Event: 'call'\n\n- args: wrapped function's arguments\n\nEmitted each time the wrapped function is called.\n\n#### Event: 'callback'\n\n- results: wrapped function's return values\n\nEmitted each time the wrapped function invokes its callback.\n\n#### Event: 'backoff'\n\n- number: backoff number, starts at 0\n- delay: backoff delay in milliseconds\n- err: the error that triggered the backoff operation\n\nEmitted each time a backoff operation is started.\n\n## License\n\nThis code is free to use under the terms of the [MIT license](http://mturcotte.mit-license.org/).\n", + "file": [ + "index.js", + "lib" + ], + "readme": "# Backoff for Node.js\n[![Build Status](https://secure.travis-ci.org/MathieuTurcotte/node-backoff.png?branch=master)](http://travis-ci.org/MathieuTurcotte/node-backoff)\n[![NPM version](https://badge.fury.io/js/backoff.png)](http://badge.fury.io/js/backoff)\n\nFibonacci and exponential backoffs for Node.js.\n\n## Installation\n\n```\nnpm install backoff\n```\n\n## Unit tests\n\n```\nnpm test\n```\n\n## Usage\n\n### Object Oriented\n\nThe usual way to instantiate a new `Backoff` object is to use one predefined\nfactory method: `backoff.fibonacci([options])`, `backoff.exponential([options])`.\n\n`Backoff` inherits from `EventEmitter`. When a backoff starts, a `backoff`\nevent is emitted and, when a backoff ends, a `ready` event is emitted.\nHandlers for these two events are called with the current backoff number and\ndelay.\n\n``` js\nvar backoff = require('backoff');\n\nvar fibonacciBackoff = backoff.fibonacci({\n randomisationFactor: 0,\n initialDelay: 10,\n maxDelay: 300\n});\n\nfibonacciBackoff.failAfter(10);\n\nfibonacciBackoff.on('backoff', function(number, delay) {\n // Do something when backoff starts, e.g. show to the\n // user the delay before next reconnection attempt.\n console.log(number + ' ' + delay + 'ms');\n});\n\nfibonacciBackoff.on('ready', function(number, delay) {\n // Do something when backoff ends, e.g. retry a failed\n // operation (DNS lookup, API call, etc.). If it fails\n // again then backoff, otherwise reset the backoff\n // instance.\n fibonacciBackoff.backoff();\n});\n\nfibonacciBackoff.on('fail', function() {\n // Do something when the maximum number of backoffs is\n // reached, e.g. ask the user to check its connection.\n console.log('fail');\n});\n\nfibonacciBackoff.backoff();\n```\n\nThe previous example would print the following.\n\n```\n0 10ms\n1 10ms\n2 20ms\n3 30ms\n4 50ms\n5 80ms\n6 130ms\n7 210ms\n8 300ms\n9 300ms\nfail\n```\n\nNote that `Backoff` objects are meant to be instantiated once and reused\nseveral times by calling `reset` after a successful \"retry\".\n\n### Functional\n\nIt's also possible to avoid some boilerplate code when invoking an asynchronous\nfunction in a backoff loop by using `backoff.call(fn, [args, ...], callback)`.\n\nTypical usage looks like the following.\n\n``` js\nvar call = backoff.call(get, 'https://duplika.ca/', function(err, res) {\n console.log('Num retries: ' + call.getNumRetries());\n\n if (err) {\n console.log('Error: ' + err.message);\n } else {\n console.log('Status: ' + res.statusCode);\n }\n});\n\ncall.setStrategy(new backoff.ExponentialStrategy());\ncall.failAfter(10);\ncall.start();\n```\n\n## API\n\n### backoff.fibonacci([options])\n\nConstructs a Fibonacci backoff (10, 10, 20, 30, 50, etc.).\n\nSee bellow for options description.\n\n### backoff.exponential([options])\n\nConstructs an exponential backoff (10, 20, 40, 80, etc.).\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n\nWith these values, the backoff delay will increase from 100 ms to 10000 ms. The\nrandomisation factor controls the range of randomness and must be between 0\nand 1. By default, no randomisation is applied on the backoff delay.\n\n### backoff.call(fn, [args, ...], callback)\n\n- fn: function to call in a backoff handler, i.e. the wrapped function\n- args: function's arguments\n- callback: function's callback accepting an error as its first argument\n\nConstructs a `FunctionCall` instance for the given function. The wrapped\nfunction will get retried until it succeds or reaches the maximum number\nof backoffs. In both cases, the callback function will be invoked with the\nlast result returned by the wrapped function.\n\nIt is the caller's responsability to initiate the call by invoking the\n`start` method on the returned `FunctionCall` instance.\n\n### Class Backoff\n\n#### new Backoff(strategy)\n\n- strategy: the backoff strategy to use\n\nConstructs a new backoff object from a specific backoff strategy. The backoff\nstrategy must implement the `BackoffStrategy`interface defined bellow.\n\n#### backoff.failAfter(numberOfBackoffs)\n\n- numberOfBackoffs: maximum number of backoffs before the fail event gets\nemitted, must be greater than 0\n\nSets a limit on the maximum number of backoffs that can be performed before\na fail event gets emitted and the backoff instance is reset. By default, there\nis no limit on the number of backoffs that can be performed.\n\n#### backoff.backoff([err])\n\nStarts a backoff operation. If provided, the error parameter will be emitted\nas the last argument of the `backoff` and `fail` events to let the listeners\nknow why the backoff operation was attempted.\n\nAn error will be thrown an error if a backoff operation is already in progress.\n\nIn practice, this method should be called after a failed attempt to perform a\nsensitive operation (connecting to a database, downloading a resource over the\nnetwork, etc.).\n\n#### backoff.reset()\n\nResets the backoff delay to the initial backoff delay and stop any backoff\noperation in progress. After reset, a backoff instance can and should be\nreused.\n\nIn practice, this method should be called after having successfully completed\nthe sensitive operation guarded by the backoff instance or if the client code\nrequest to stop any reconnection attempt.\n\n#### Event: 'backoff'\n\n- number: number of backoffs since last reset, starting at 0\n- delay: backoff delay in milliseconds\n- err: optional error parameter passed to `backoff.backoff([err])`\n\nEmitted when a backoff operation is started. Signals to the client how long\nthe next backoff delay will be.\n\n#### Event: 'ready'\n\n- number: number of backoffs since last reset, starting at 0\n- delay: backoff delay in milliseconds\n\nEmitted when a backoff operation is done. Signals that the failing operation\nshould be retried.\n\n#### Event: 'fail'\n\n- err: optional error parameter passed to `backoff.backoff([err])`\n\nEmitted when the maximum number of backoffs is reached. This event will only\nbe emitted if the client has set a limit on the number of backoffs by calling\n`backoff.failAfter(numberOfBackoffs)`. The backoff instance is automatically\nreset after this event is emitted.\n\n### Interface BackoffStrategy\n\nA backoff strategy must provide the following methods.\n\n#### strategy.next()\n\nComputes and returns the next backoff delay.\n\n#### strategy.reset()\n\nResets the backoff delay to its initial value.\n\n### Class ExponentialStrategy\n\nExponential (10, 20, 40, 80, etc.) backoff strategy implementation.\n\n#### new ExponentialStrategy([options])\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n\n### Class FibonacciStrategy\n\nFibonnaci (10, 10, 20, 30, 50, etc.) backoff strategy implementation.\n\n#### new FibonacciStrategy([options])\n\nThe options are the following.\n\n- randomisationFactor: defaults to 0, must be between 0 and 1\n- initialDelay: defaults to 100 ms\n- maxDelay: defaults to 10000 ms\n\n### Class FunctionCall\n\nThis class manages the calling of an asynchronous function within a backoff\nloop.\n\nThis class should rarely be instantiated directly since the factory method\n`backoff.call(fn, [args, ...], callback)` offers a more convenient and safer\nway to create `FunctionCall` instances.\n\n#### new FunctionCall(fn, args, callback)\n\n- fn: asynchronous function to call\n- args: an array containing fn's args\n- callback: fn's callback\n\nConstructs a function handler for the given asynchronous function.\n\n#### call.isPending()\n\nReturns whether the call is pending, i.e. hasn't been started.\n\n#### call.isRunning()\n\nReturns whether the call is in progress.\n\n#### call.isCompleted()\n\nReturns whether the call is completed.\n\n#### call.isAborted()\n\nReturns whether the call is aborted.\n\n#### call.setStrategy(strategy)\n\n- strategy: strategy instance to use, defaults to `FibonacciStrategy`.\n\nSets the backoff strategy to use. This method should be called before\n`call.start()` otherwise an exception will be thrown.\n\n#### call.failAfter(maxNumberOfBackoffs)\n\n- maxNumberOfBackoffs: maximum number of backoffs before the call is aborted\n\nSets the maximum number of backoffs before the call is aborted. By default,\nthere is no limit on the number of backoffs that can be performed.\n\nThis method should be called before `call.start()` otherwise an exception will\nbe thrown..\n\n#### call.getLastResult()\n\nRetrieves the last intermediary result returned by the wrapped function. This\nmethod can be called at any point in time during the call life cycle, i.e.\nbefore, during and after the wrapped function invocation.\n\nReturns an array containing the results returned by the last wrapped function\ncall. For example, to get the error code returned by the last call, one would\ndo the following.\n\n``` js\nvar results = call.getLastResult();\n// The error code is the first parameter of the callback.\nvar error = results[0];\n```\n\n#### call.getNumRetries()\n\nReturns the number of times the wrapped function call was retried. For a\nwrapped function that succeeded immediately, this would return 0. This\nmethod can be called at any point in time during the call life cycle, i.e.\nbefore, during and after the wrapped function invocation.\n\n#### call.start()\n\nInitiates the call the wrapped function. This method should only be called\nonce otherwise an exception will be thrown.\n\n\n#### call.abort()\n\nAborts the call.\n\nThe last result can be retrieved using `call.getLastResult()`. This method\ncan be called at any point in time during the call life cycle, i.e. before,\nduring and after the wrapped function invocation.\n\n#### Event: 'call'\n\n- args: wrapped function's arguments\n\nEmitted each time the wrapped function is called.\n\n#### Event: 'callback'\n\n- results: wrapped function's return values\n\nEmitted each time the wrapped function invokes its callback.\n\n#### Event: 'backoff'\n\n- number: backoff number, starts at 0\n- delay: backoff delay in milliseconds\n- err: the error that triggered the backoff operation\n\nEmitted each time a backoff operation is started.\n\n## Annotated source code\n\nThe annotated source code can be found at [mathieuturcotte.github.io/node-backoff/docs](http://mathieuturcotte.github.io/node-backoff/docs/).\n\n## License\n\nThis code is free to use under the terms of the [MIT license](http://mturcotte.mit-license.org/).\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/MathieuTurcotte/node-backoff/issues" }, - "_id": "backoff@2.2.0", - "_from": "backoff@2.2.0" + "_id": "backoff@2.4.0", + "_from": "backoff@^2.3.0" } diff --git a/node_modules/restify/node_modules/backoff/tests/backoff.js b/node_modules/restify/node_modules/backoff/tests/backoff.js index bd35e5a..84bbd16 100644 --- a/node_modules/restify/node_modules/backoff/tests/backoff.js +++ b/node_modules/restify/node_modules/backoff/tests/backoff.js @@ -108,7 +108,7 @@ exports["Backoff"] = { var backoff = this.backoff; test.throws(function() { backoff.failAfter(0); - }, /must be greater than 0/); + }, /greater than 0 but got 0/); test.done(); }, diff --git a/node_modules/restify/node_modules/backoff/tests/function_call.js b/node_modules/restify/node_modules/backoff/tests/function_call.js index 52307f0..bf2565a 100644 --- a/node_modules/restify/node_modules/backoff/tests/function_call.js +++ b/node_modules/restify/node_modules/backoff/tests/function_call.js @@ -36,14 +36,78 @@ exports["FunctionCall"] = { "constructor's first argument should be a function": function(test) { test.throws(function() { new FunctionCall(1, [], function() {}); - }, /should be a function/); + }, /Expected fn to be a function./); test.done(); }, "constructor's last argument should be a function": function(test) { test.throws(function() { new FunctionCall(function() {}, [], 3); - }, /should be a function/); + }, /Expected callback to be a function./); + test.done(); + }, + + "isPending should return false once the call is started": function(test) { + this.wrappedFn. + onFirstCall().yields(new Error()). + onSecondCall().yields(null, 'Success!'); + var call = new FunctionCall(this.wrappedFn, [], this.callback); + + test.ok(call.isPending()); + + call.start(this.backoffFactory); + test.ok(!call.isPending()); + + this.backoff.emit('ready'); + test.ok(!call.isPending()); + + test.done(); + }, + + "isRunning should return true when call is in progress": function(test) { + this.wrappedFn. + onFirstCall().yields(new Error()). + onSecondCall().yields(null, 'Success!'); + var call = new FunctionCall(this.wrappedFn, [], this.callback); + + test.ok(!call.isRunning()); + + call.start(this.backoffFactory); + test.ok(call.isRunning()); + + this.backoff.emit('ready'); + test.ok(!call.isRunning()); + + test.done(); + }, + + "isCompleted should return true once the call completes": function(test) { + this.wrappedFn. + onFirstCall().yields(new Error()). + onSecondCall().yields(null, 'Success!'); + var call = new FunctionCall(this.wrappedFn, [], this.callback); + + test.ok(!call.isCompleted()); + + call.start(this.backoffFactory); + test.ok(!call.isCompleted()); + + this.backoff.emit('ready'); + test.ok(call.isCompleted()); + + test.done(); + }, + + "isAborted should return true once the call is aborted": function(test) { + this.wrappedFn. + onFirstCall().yields(new Error()). + onSecondCall().yields(null, 'Success!'); + var call = new FunctionCall(this.wrappedFn, [], this.callback); + + test.ok(!call.isAborted()); + call.abort(); + test.ok(call.isAborted()); + test.done(); }, @@ -101,7 +165,18 @@ exports["FunctionCall"] = { call.start(backoffFactory); test.throws(function() { call.start(backoffFactory); - }, /in progress/); + }, /already started/); + test.done(); + }, + + "start shouldn't allow invocation of aborted call": function(test) { + var call = new FunctionCall(this.wrappedFn, [], this.callback); + var backoffFactory = this.backoffFactory; + + call.abort(); + test.throws(function() { + call.start(backoffFactory); + }, /aborted/); test.done(); }, @@ -114,10 +189,11 @@ exports["FunctionCall"] = { "call should complete when the wrapped function succeeds": function(test) { var call = new FunctionCall(this.wrappedFn, [1, 2, 3], this.callback); - this.wrappedFn.yields(new Error()) - .yields(new Error()) - .yields(new Error()) - .yields(null, 'Success!'); + this.wrappedFn. + onCall(0).yields(new Error()). + onCall(1).yields(new Error()). + onCall(2).yields(new Error()). + onCall(3).yields(null, 'Success!'); call.start(this.backoffFactory); @@ -152,15 +228,6 @@ exports["FunctionCall"] = { test.done(); }, - "wrapped function shouldn't be called after abort": function(test) { - var call = new FunctionCall(this.wrappedFn, [], this.callback); - call.abort(); - call.start(this.backoffFactory); - test.equals(this.wrappedFn.callCount, 0, - 'Wrapped function shouldn\'t be called after abort.'); - test.done(); - }, - "wrapped function's callback shouldn't be called after abort": function(test) { var call = new FunctionCall(function(callback) { call.abort(); // Abort in middle of wrapped function's execution. @@ -174,7 +241,7 @@ exports["FunctionCall"] = { test.done(); }, - "getResults should return intermediary results": function(test) { + "getLastResult should return the last intermediary result": function(test) { var call = new FunctionCall(this.wrappedFn, [], this.callback); this.wrappedFn.yields(1); call.start(this.backoffFactory); @@ -182,12 +249,34 @@ exports["FunctionCall"] = { for (var i = 2; i < 5; i++) { this.wrappedFn.yields(i); this.backoff.emit('ready'); + test.deepEqual([i], call.getLastResult()); + } + + this.wrappedFn.yields(null); + this.backoff.emit('ready'); + test.deepEqual([null], call.getLastResult()); + + test.done(); + }, + + "getNumRetries should return the number of retries": function(test) { + var call = new FunctionCall(this.wrappedFn, [], this.callback); + + this.wrappedFn.yields(1); + call.start(this.backoffFactory); + // The inital call doesn't count as a retry. + test.equals(0, call.getNumRetries()); + + for (var i = 2; i < 5; i++) { + this.wrappedFn.yields(i); + this.backoff.emit('ready'); + test.equals(i - 1, call.getNumRetries()); } this.wrappedFn.yields(null); this.backoff.emit('ready'); + test.equals(4, call.getNumRetries()); - test.deepEqual([[1], [2], [3], [4], [null]], call.getResults()); test.done(); }, diff --git a/node_modules/restify/node_modules/bunyan/AUTHORS b/node_modules/restify/node_modules/bunyan/AUTHORS index 10f706e..ed0a0ce 100644 --- a/node_modules/restify/node_modules/bunyan/AUTHORS +++ b/node_modules/restify/node_modules/bunyan/AUTHORS @@ -5,3 +5,7 @@ Michael Hart (https://github.com/mhart) Isaac Schlueter (https://github.com/isaacs) Rob Gulewich (https://github.com/rgulewich) Bryan Cantrill (https://github.com/bcantrill) +Michael Hart (https://github.com/mhart) +Simon Wade (https://github.com/aexmachina) +https://github.com/glenn-murray-bse +Chakrit Wichian (https://github.com/chakrit) diff --git a/node_modules/restify/node_modules/bunyan/CHANGES.md b/node_modules/restify/node_modules/bunyan/CHANGES.md index 609a584..a0e2926 100644 --- a/node_modules/restify/node_modules/bunyan/CHANGES.md +++ b/node_modules/restify/node_modules/bunyan/CHANGES.md @@ -6,6 +6,100 @@ Known issues: bug](https://github.com/TooTallNate/node-gyp/issues/65). +## bunyan 0.23.1 + +- [pull #125, pull #97, issue #73] Unref rotating-file timeout which was + preventing processes from exiting (by https://github.com/chakrit and + https://github.com/glenn-murray-bse). Note: this only fixes the issue + for node 0.10 and above. + + +## bunyan 0.23.0 + +- [issue #139] Fix `bunyan` crash on a log record with `res.header` that is an + object. A side effect of this improvement is that a record with `res.statusCode` + but no header info will render a response block, for example: + + [2012-08-08T10:25:47.637Z] INFO: my-service/12859 on my-host: some message (...) + ... + -- + HTTP/1.1 200 OK + -- + ... + +- [pull #42] Fix `bunyan` crash on a log record with `req.headers` that is a *string* + (by https://github.com/aexmachina). + +- Drop node 0.6 support. I can't effectively `npm install` with a node 0.6 + anymore. + +- [issue #85] Ensure logging a non-object/non-string doesn't throw (by + https://github.com/mhart). This changes fixes: + + log.info() # TypeError: Object.keys called on non-object + log.info() # "msg":"" (instead of wanted "msg":"[Function]") + log.info() # "msg":"" (instead of wanted "msg":util.format()) + + +## bunyan 0.22.3 + +- Republish the same code to npm. + + +## bunyan 0.22.2 + +Note: Bad release. The published package in the npm registry got corrupted. Use 0.22.3 or later. + +- [issue #131] Allow `log.info()` and, most importantly, don't crash on that. + +- Update 'mv' optional dep to latest. + + +## bunyan 0.22.1 + +- [issue #111] Fix a crash when attempting to use `bunyan -p` on a platform without + dtrace. + +- [issue #101] Fix a crash in `bunyan` rendering a record with unexpected "res.headers". + + +## bunyan 0.22.0 + +- [issue #104] `log.reopenFileStreams()` convenience method to be used with external log + rotation. + + +## bunyan 0.21.4 + +- [issue #96] Fix `bunyan` to default to paging (with `less`) by default in node 0.10.0. + The intention has always been to default to paging for node >=0.8. + + +## bunyan 0.21.3 + +- [issue #90] Fix `bunyan -p '*'` breakage in version 0.21.2. + + +## bunyan 0.21.2 + +**Note: Bad release. The switchrate change below broke `bunyan -p '*'` usage +(see issue #90). Use 0.21.3 or later.** + +- [issue #88] Should be able to efficiently combine "-l" with "-p *". + +- Avoid DTrace buffer filling up, e.g. like this: + + $ bunyan -p 42241 > /tmp/all.log + dtrace: error on enabled probe ID 3 (ID 75795: bunyan42241:mod-87ea640:log-trace:log-trace): out of scratch space in action #1 at DIF offset 12 + dtrace: error on enabled probe ID 3 (ID 75795: bunyan42241:mod-87ea640:log-trace:log-trace): out of scratch space in action #1 at DIF offset 12 + dtrace: 138 drops on CPU 4 + ... + + From Bryan: "the DTrace buffer is filling up because the string size is so + large... by increasing the switchrate, you're increasing the rate at + which that buffer is emptied." + + ## bunyan 0.21.1 - [pull #83] Support rendering 'client_res' key in bunyan CLI (by diff --git a/node_modules/restify/node_modules/bunyan/Makefile b/node_modules/restify/node_modules/bunyan/Makefile index eeee27e..c38a767 100644 --- a/node_modules/restify/node_modules/bunyan/Makefile +++ b/node_modules/restify/node_modules/bunyan/Makefile @@ -36,14 +36,15 @@ all: # Ensure all version-carrying files have the same version. .PHONY: versioncheck versioncheck: + @echo version is: $(shell cat package.json | json version) [[ `cat package.json | json version` == `grep '^## ' CHANGES.md | head -1 | awk '{print $$3}'` ]] [[ `cat package.json | json version` == `grep '^var VERSION' bin/bunyan | awk -F"'" '{print $$2}'` ]] [[ `cat package.json | json version` == `grep '^var VERSION' lib/bunyan.js | awk -F"'" '{print $$2}'` ]] @echo Version check ok. .PHONY: cutarelease -cutarelease: versioncheck - [[ `git status | tail -n1` == "nothing to commit (working directory clean)" ]] +cutarelease: versioncheck check + [[ `git status | tail -n1 | cut -c1-17` == "nothing to commit" ]] ./tools/cutarelease.py -p bunyan -f package.json -f lib/bunyan.js -f bin/bunyan .PHONY: docs @@ -82,10 +83,10 @@ test: $(NODEUNIT) # Test will all node supported versions (presumes install locations I use on # my machine). -# Note: 'test08' is last so (if all is well) I end up with a binary -# dtrace-provider build for node 0.8 (my current version). +# Note: 'test10' is last so (if all is well) I end up with a binary +# dtrace-provider build for node 0.10 (my current version). .PHONY: testall -testall: test06 test10 test08 +testall: test08 test10 .PHONY: test10 test10: @@ -97,11 +98,6 @@ test08: @echo "# Test node 0.8.x (with node `$(NODEOPT)/node-0.8/bin/node --version`)" @$(NODEOPT)/node-0.8/bin/node --version PATH="$(NODEOPT)/node-0.8/bin:$(PATH)" make distclean all test -.PHONY: test06 -test06: - @echo "# Test node 0.6.x (with node `$(NODEOPT)/node-0.6/bin/node --version`)" - @$(NODEOPT)/node-0.6/bin/node --version - PATH="$(NODEOPT)/node-0.6/bin:$(PATH)" make distclean all test #---- check diff --git a/node_modules/restify/node_modules/bunyan/README.md b/node_modules/restify/node_modules/bunyan/README.md index e1088d2..ed261f3 100644 --- a/node_modules/restify/node_modules/bunyan/README.md +++ b/node_modules/restify/node_modules/bunyan/README.md @@ -23,6 +23,11 @@ production services. Bunyan supports node 0.6 and greater. Follow @trentmick for updates to Bunyan. +There is an email discussion list +[bunyan-logging@googlegroups.com](mailto:bunyan-logging@googlegroups.com), +also [as a forum in the +browser](https://groups.google.com/forum/?fromgroups#!forum/bunyan-logging). + # Installation @@ -45,7 +50,7 @@ node.js library usage of bunyan in your apps. [`src: true`](#src) - light-weight specialization of Logger instances with [`log.child`](#logchild) - custom rendering of logged objects with ["serializers"](#serializers) -- [Dtrace support](#dtrace-support) +- [Runtime log snooping via Dtrace support](#dtrace-support) # Introduction @@ -79,7 +84,7 @@ full API is: // This is equivalent to `log.isInfoEnabled()` or // `log.isEnabledFor(INFO)` in log4j. - log.info('hi'); // Log a simple string message. + log.info('hi'); // Log a simple string message (or number). log.info('hi %s', bob, anotherVar); // Uses `util.format` for msg formatting. log.info({foo: 'bar'}, 'hi'); @@ -105,7 +110,7 @@ This will dove-tail with [Bunyan serializer support](#serializers), discussed later. The same goes for all of Bunyan's log levels: `log.trace`, `log.debug`, -`log.info`, `log.warn`, and `log.fatal`. See the [levels section](#levels) +`log.info`, `log.warn`, `log.error`, and `log.fatal`. See the [levels section](#levels) below for details and suggestions. @@ -160,7 +165,7 @@ streams at different levels**. streams: [ { level: 'info', - stream: process.stdout, // log INFO and above to stdout + stream: process.stdout // log INFO and above to stdout }, { level: 'error', @@ -219,12 +224,13 @@ And with the `bunyan` CLI (using the "short" output mode): A more practical example is in the [node-restify](https://github.com/mcavage/node-restify) web framework. Restify uses Bunyan for its logging. One feature of its integration, is that -each restify request handler includes a `req.log` logger that is: +if `server.use(restify.requestLogger())` is used, each restify request handler +includes a `req.log` logger that is: log.child({req_id: }, true) Apps using restify can then use `req.log` and have all such log records -include the unique request id (as "req_id"). Handy. +include the unique request id (as "req\_id"). Handy. ## Serializers @@ -442,7 +448,7 @@ Recommended/Best Practice Fields: for a request. This really shines when you have a SOA with multiple services and you carry a single request ID from the top API down through all APIs (as [node-restify](https://github.com/mcavage/node-restify) facilitates - with its 'X-Request-Id' header). + with its 'Request-Id' header). - `req`: An HTTP server request. Bunyan provides `bunyan.stdSerializers.req` to serialize a request with a suggested set of keys. Example: @@ -525,6 +531,9 @@ do this: // Handle stream write or create error here. }); +Note: This is **not** that same as a log record at the "error" level as +produced by `log.error(...)`. + ## stream type: `stream` @@ -634,6 +643,14 @@ used for anything else. ## stream type: `rotating-file` +**WARNING:** Users of Bunyan's `rotating-file` should (a) be using at least +bunyan 0.23.1 (with the fix for [this +issue](https://github.com/trentm/node-bunyan/pull/97)), and (b) should use at +least node 0.10 (node 0.8 does not support the `unref()` method on +`setTimeout(...)` needed for the mentioned fix). The symptom is that process +termination will hang for up to a full rotation period. + + A `type === 'rotating-file'` is a file stream that handles file automatic rotation. @@ -714,6 +731,23 @@ used for anything else. +**Note on log rotation**: Often you may be using external log rotation utilities +like `logrotate` on Linux or `logadm` on SmartOS/Illumos. In those cases, unless +your are ensuring "copy and truncate" sematics (via `copytruncate` with +logrotate or `-c` with logadm) then the fd for your 'file' stream will change. +You can tell bunyan to reopen the file stream with code like this in your +app: + + var log = bunyan.createLogger(...); + ... + process.on('SIGUSR2', function () { + log.reopenFileStreams(); + }); + +where you'd configure your log rotation to send SIGUSR2 (or some other signal) +to your process. Any other mechanism to signal your app to run +`log.reopenFileStreams()` would work as well. + ## stream type: `raw` @@ -776,7 +810,7 @@ This example emits: -# DTrace support +# Runtime log snooping via DTrace On systems that support DTrace (e.g., MacOS, FreeBSD, illumos derivatives like SmartOS and OmniOS), Bunyan will create a DTrace provider (`bunyan`) @@ -901,6 +935,7 @@ MIT. See "LICENSE.txt". - Bunyan syslog support: . - Bunyan + Graylog2: . +- Bunyan middleware for Express: - An example of a Bunyan shim to the Winston logging system: . - [Bunyan for Bash](https://github.com/trevoro/bash-bunyan). diff --git a/node_modules/restify/node_modules/bunyan/TODO.md b/node_modules/restify/node_modules/bunyan/TODO.md index ebaf1fe..969cb7f 100644 --- a/node_modules/restify/node_modules/bunyan/TODO.md +++ b/node_modules/restify/node_modules/bunyan/TODO.md @@ -63,3 +63,4 @@ - differential HTTP *client* req/res with *server* req/res. - statsd stream? http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/ Think about it. +- web ui. Ideas: http://googlecloudplatform.blogspot.ca/2014/04/a-new-logs-viewer-for-google-cloud.html diff --git a/node_modules/restify/node_modules/bunyan/bin/bunyan b/node_modules/restify/node_modules/bunyan/bin/bunyan index ba176bb..edfdd97 100755 --- a/node_modules/restify/node_modules/bunyan/bin/bunyan +++ b/node_modules/restify/node_modules/bunyan/bin/bunyan @@ -6,8 +6,9 @@ // See . // -var VERSION = '0.21.1'; +var VERSION = '0.23.1'; +var p = console.log; var util = require('util'); var pathlib = require('path'); var vm = require('vm'); @@ -165,7 +166,6 @@ function objCopy(obj) { function printHelp() { /* BEGIN JSSTYLED */ - var p = console.log; p('Usage:'); p(' bunyan [OPTIONS] [FILE ...]'); p(' ... | bunyan [OPTIONS]'); @@ -177,7 +177,7 @@ function printHelp() { p(' -h, --help print this help info and exit'); p(' --version print version of this command and exit'); p(''); - p('Dtrace options (only on dtrace-supporting platforms):'); + p('Runtime log snooping (via DTrace, only on supported platforms):'); p(' -p PID Process bunyan:log-* probes from the process'); p(' with the given PID. Can be used multiple times,'); p(' or specify all processes with "*", or a set of'); @@ -754,14 +754,19 @@ function emitRecord(rec, line, opts, stylize) { var req = rec.req; delete rec.req; var headers = req.headers; + if (!headers) { + headers = ''; + } else if (typeof (headers) === 'string') { + headers = '\n' + headers; + } else if (typeof (headers) === 'object') { + headers = '\n' + Object.keys(headers).map(function (h) { + return h + ': ' + headers[h]; + }).join('\n'); + } var s = format('%s %s HTTP/%s%s', req.method, req.url, req.httpVersion || '1.1', - (headers ? - '\n' + Object.keys(headers).map(function (h) { - return h + ': ' + headers[h]; - }).join('\n') : - '') + headers ); delete req.url; delete req.method; @@ -832,24 +837,37 @@ function emitRecord(rec, line, opts, stylize) { function _res(res) { var s = ''; - if (res.header) { - s += res.header.trimRight(); - } else if (res.headers) { - if (res.statusCode) { - s += format('HTTP/1.1 %s %s\n', res.statusCode, - http.STATUS_CODES[res.statusCode]); - } - var headers = res.headers; + if (res.statusCode !== undefined) { + s += format('HTTP/1.1 %s %s\n', res.statusCode, + http.STATUS_CODES[res.statusCode]); + delete res.statusCode; + } + // Handle `res.header` or `res.headers` as either a string or + // and object of header key/value pairs. Prefer `res.header` if set + // (TODO: Why? I don't recall. Typical of restify serializer? + // Typical JSON.stringify of a core node HttpResponse?) + var headers; + if (res.header !== undefined) { + headers = res.header; + delete res.header; + } else if (res.headers !== undefined) { + headers = res.headers; + delete res.headers; + } + if (!headers) { + /* pass through */ + } else if (typeof (headers) === 'string') { + s += headers.trimRight(); + } else { s += Object.keys(headers).map( function (h) { return h + ': ' + headers[h]; }).join('\n'); } - delete res.header; - delete res.headers; - delete res.statusCode; - if (res.body) { + if (res.body !== undefined) { s += '\n\n' + (typeof (res.body) === 'object' ? JSON.stringify(res.body, null, 2) : res.body); delete res.body; + } else { + s = s.trimRight(); } if (res.trailer) { s += '\n' + res.trailer; @@ -1102,15 +1120,40 @@ function processPids(opts, stylize, callback) { } var probes = pids.map(function (pid) { - return format('bunyan%s:::log-*', pid); + if (!opts.level) + return format('bunyan%s:::log-*', pid); + + var rval = [], l; + + for (l in levelFromName) { + if (levelFromName[l] >= opts.level) + rval.push(format('bunyan%s:::log-%s', pid, l)); + } + + if (rval.length != 0) + return rval.join(','); + + warn('bunyan: error: level (%d) exceeds maximum logging level', + opts.level); + return drainStdoutAndExit(1); }).join(','); - var argv = ['dtrace', '-Z', '-x', 'strsize=4k', '-qn', + var argv = ['dtrace', '-Z', '-x', 'strsize=4k', + '-x', 'switchrate=10hz', '-qn', format('%s{printf("%s", copyinstr(arg0))}', probes)]; //console.log('dtrace argv: %s', argv); var dtrace = spawn(argv[0], argv.slice(1), // Share the stderr handle to have error output come // straight through. Only supported in v0.8+. {stdio: ['pipe', 'pipe', process.stderr]}); + dtrace.on('error', function (e) { + if (e.syscall === 'spawn' && e.errno === 'ENOENT') { + console.error('bunyan: error: could not spawn "dtrace" ' + + '("bunyan -p" is only supported on platforms with dtrace)'); + } else { + console.error('bunyan: error: unexpected dtrace error: %s', e); + } + callback(1); + }) child = dtrace; // intentionally global function finish(code) { @@ -1118,7 +1161,7 @@ function processPids(opts, stylize, callback) { handleLogLine(null, leftover, opts, stylize); leftover = ''; } - callback(returnCode); + callback(code); } dtrace.stdout.setEncoding('utf8'); @@ -1332,6 +1375,7 @@ process.on('uncaughtException', function (err) { e('* https://github.com/trentm/node-bunyan/issues/new?title=%s', title); e('*'); e('* * *'); + e('* platform:', process.platform); e('* node version:', process.version); e('* bunyan version:', getVersion()); e('* argv: %j', process.argv); @@ -1383,7 +1427,7 @@ function main(argv) { !opts.pids && // Don't page if following process output. opts.args.length > 0 && // Don't page if no file args to process. process.platform !== 'win32' && - nodeVer >= [0, 8, 0] && + (nodeVer[0] > 0 || nodeVer[1] >= 8) && (opts.paginate === true || (opts.paginate !== false && (!process.env.BUNYAN_NO_PAGER || diff --git a/node_modules/restify/node_modules/bunyan/lib/bunyan.js b/node_modules/restify/node_modules/bunyan/lib/bunyan.js index 18fc519..cd9555c 100644 --- a/node_modules/restify/node_modules/bunyan/lib/bunyan.js +++ b/node_modules/restify/node_modules/bunyan/lib/bunyan.js @@ -1,10 +1,13 @@ /* * Copyright (c) 2013 Trent Mick. All rights reserved. + * Copyright (c) 2013 Joyent Inc. All rights reserved. * * The bunyan logging library for node.js. + * + * vim: expandtab:ts=4:sw=4 */ -var VERSION = '0.21.1'; +var VERSION = '0.23.1'; // Bunyan log format version. This becomes the 'v' field on all log records. // `0` is until I release a version '1.0.0' of node-bunyan. Thereafter, @@ -508,6 +511,44 @@ Logger.prototype.child = function (options, simple) { } +/** + * A convenience method to reopen 'file' streams on a logger. This can be + * useful with external log rotation utilities that move and re-open log files + * (e.g. logrotate on Linux, logadm on SmartOS/Illumos). Those utilities + * typically have rotation options to copy-and-truncate the log file, but + * you may not want to use that. An alternative is to do this in your + * application: + * + * var log = bunyan.createLogger(...); + * ... + * process.on('SIGUSR2', function () { + * log.reopenFileStreams(); + * }); + * ... + * + * See . + */ +Logger.prototype.reopenFileStreams = function () { + var self = this; + self.streams.forEach(function (s) { + if (s.type === 'file') { + if (s.stream) { + // Not sure if typically would want this, or more immediate + // `s.stream.destroy()`. + s.stream.end(); + s.stream.destroySoon(); + delete s.stream; + } + s.stream = fs.createWriteStream(s.path, + {flags: 'a', encoding: 'utf8'}); + s.stream.on('error', function (err) { + self.emit('error', err, s); + }); + } + }); +}; + + /* BEGIN JSSTYLED */ /** * Close this logger. @@ -664,21 +705,6 @@ Logger.prototype._applySerializers = function (fields, excludeFields) { } -/** - * A log record is a 4-tuple: - * [, - * , - * , - * ] - * For Perf reasons, we only render this down to a single object when - * it is emitted. - */ -Logger.prototype._mkRecord = function (fields, level, msgArgs) { - var recFields = (fields ? objCopy(fields) : null); - return [this.fields, recFields, level, msgArgs]; -} - - /** * Emit a log record. * @@ -743,7 +769,8 @@ function mkLogEmitter(minLevel) { } else { msgArgs = Array.prototype.slice.call(args, 1); } - } else if (typeof (args[0]) === 'string') { + } else if (typeof (args[0]) !== 'object' && args[0] !== null || + Array.isArray(args[0])) { // `log.(msg, ...)` fields = null; msgArgs = Array.prototype.slice.call(args); @@ -990,6 +1017,9 @@ RotatingFileStream.prototype._setupNextRot = function () { this.timeout = setTimeout( function () { self.rotate(); }, this.rotAt - Date.now()); + if (typeof (this.timeout.unref) === 'function') { + this.timeout.unref(); + } } RotatingFileStream.prototype._nextRotTime = function _nextRotTime(first) { diff --git a/node_modules/restify/node_modules/bunyan/node_modules/mv/.travis.yml b/node_modules/restify/node_modules/bunyan/node_modules/mv/.travis.yml index df63076..4a83e22 100644 --- a/node_modules/restify/node_modules/bunyan/node_modules/mv/.travis.yml +++ b/node_modules/restify/node_modules/bunyan/node_modules/mv/.travis.yml @@ -1,4 +1,5 @@ language: node_js node_js: + - "0.11" - "0.10" - "0.8" diff --git a/node_modules/restify/node_modules/bunyan/node_modules/mv/README.md b/node_modules/restify/node_modules/bunyan/node_modules/mv/README.md index 9881e0d..7708039 100644 --- a/node_modules/restify/node_modules/bunyan/node_modules/mv/README.md +++ b/node_modules/restify/node_modules/bunyan/node_modules/mv/README.md @@ -1,12 +1,10 @@ -[![Build Status](https://secure.travis-ci.org/superjoe30/node-mv.png)](http://travis-ci.org/superjoe30/node-mv) +[![Build Status](https://secure.travis-ci.org/andrewrk/node-mv.png)](http://travis-ci.org/andrewrk/node-mv) Usage: ------ -```javascript -var mv; - -mv = require('mv'); +```js +var mv = require('mv'); mv('source/file', 'dest/file', function(err) { // done. it tried fs.rename first, and then falls back to @@ -14,3 +12,22 @@ mv('source/file', 'dest/file', function(err) { // the source file. }); ``` + +Another example: + +```js +mv('source/dir', 'dest/a/b/c/dir', {mkdirp: true}, function(err) { + // done. it first created all the necessary directories, and then + // tried fs.rename, then falls back to using ncp to copy the dir + // to dest and then rimraf to remove the source dir +}); +``` + +Another example: + +```js +mv('source/file', 'dest/file', {clobber: false}, function(err) { + // done. If 'dest/file' exists, an error is returned + // with err.code === 'EEXIST'. +}); +``` diff --git a/node_modules/restify/node_modules/bunyan/node_modules/mv/index.js b/node_modules/restify/node_modules/bunyan/node_modules/mv/index.js index 69cd691..e70342a 100644 --- a/node_modules/restify/node_modules/bunyan/node_modules/mv/index.js +++ b/node_modules/restify/node_modules/bunyan/node_modules/mv/index.js @@ -1,68 +1,105 @@ -var fs; +var fs = require('fs'); +var ncp = require('ncp').ncp; +var path = require('path'); +var rimraf = require('rimraf'); +var mkdirp = require('mkdirp'); -fs = require('fs'); +module.exports = mv; -module.exports = function mv(source, dest, cb){ - fs.rename(source, dest, function(err){ - if (!err) return cb(); - if (err.code !== 'EXDEV') return cb(err); - fs.stat(source, function (err, stats) { +function mv(source, dest, options, cb){ + if (typeof options === 'function') { + cb = options; + options = {}; + } + var shouldMkdirp = !!options.mkdirp; + var clobber = options.clobber !== false; + var limit = options.limit || 16; + + if (shouldMkdirp) { + mkdirs(); + } else { + doRename(); + } + + function mkdirs() { + mkdirp(path.dirname(dest), function(err) { if (err) return cb(err); - if (stats.isFile()) { - moveFileAcrossDevice(source, dest, cb); - } else if (stats.isDirectory()) { - moveDirAcrossDevice(source, dest, cb); - } else { - var err; - err = new Error("source must be file or directory"); - err.code = 'NOTFILEORDIR'; - cb(err); - } + doRename(); }); - }); + } + + function doRename() { + if (clobber) { + fs.rename(source, dest, function(err) { + if (!err) return cb(); + if (err.code !== 'EXDEV') return cb(err); + moveFileAcrossDevice(source, dest, clobber, limit, cb); + }); + } else { + fs.link(source, dest, function(err) { + if (err) { + if (err.code === 'EXDEV') { + moveFileAcrossDevice(source, dest, clobber, limit, cb); + return; + } + if (err.code === 'EISDIR' || err.code === 'EPERM') { + moveDirAcrossDevice(source, dest, clobber, limit, cb); + return; + } + cb(err); + return; + } + fs.unlink(source, cb); + }); + } + } } -function moveFileAcrossDevice(source, dest, cb) { - var ins, outs; - ins = fs.createReadStream(source); - outs = fs.createWriteStream(dest); - ins.once('error', function(err){ - outs.removeAllListeners('error'); - outs.removeAllListeners('close'); +function moveFileAcrossDevice(source, dest, clobber, limit, cb) { + var outFlags = clobber ? 'w' : 'wx'; + var ins = fs.createReadStream(source); + var outs = fs.createWriteStream(dest, {flags: outFlags}); + ins.on('error', function(err){ + ins.destroy(); outs.destroy(); - cb(err); + outs.removeListener('close', onClose); + if (err.code === 'EISDIR' || err.code === 'EPERM') { + moveDirAcrossDevice(source, dest, clobber, limit, cb); + } else { + cb(err); + } }); - outs.once('error', function(err){ - ins.removeAllListeners('error'); - outs.removeAllListeners('close'); + outs.on('error', function(err){ ins.destroy(); + outs.destroy(); + outs.removeListener('close', onClose); cb(err); }); - outs.once('close', function(){ - fs.unlink(source, cb); - }); + outs.once('close', onClose); ins.pipe(outs); + function onClose(){ + fs.unlink(source, cb); + } } -// TODO: do this natively instead of shelling out to `mv` -function moveDirAcrossDevice(source, dest, cb) { - var child, stdout, stderr, err; - child = require('child_process').spawn('mv', [source, dest], {stdio: 'pipe'}); - child.stderr.setEncoding('utf8'); - child.stdout.setEncoding('utf8'); - stderr = ''; - stdout = ''; - child.stderr.on('data', function(data) { stderr += data; }); - child.stdout.on('data', function(data) { stdout += data; }); - child.on('close', function(code) { - if (code === 0) { - cb(); - } else { - err = new Error("mv had nonzero exit code"); - err.code = 'RETCODE'; - err.stdout = stdout; - err.stderr = stderr; - cb(err); - } - }); +function moveDirAcrossDevice(source, dest, clobber, limit, cb) { + var options = { + stopOnErr: true, + clobber: false, + limit: limit, + }; + if (clobber) { + rimraf(dest, function(err) { + if (err) return cb(err); + startNcp(); + }); + } else { + startNcp(); + } + function startNcp() { + ncp(source, dest, options, function(errList) { + if (errList) return cb(errList[0]); + rimraf(source, cb); + }); + } } diff --git a/node_modules/restify/node_modules/bunyan/node_modules/mv/package.json b/node_modules/restify/node_modules/bunyan/node_modules/mv/package.json index afc7b3e..4d648d3 100644 --- a/node_modules/restify/node_modules/bunyan/node_modules/mv/package.json +++ b/node_modules/restify/node_modules/bunyan/node_modules/mv/package.json @@ -1,14 +1,14 @@ { "name": "mv", - "version": "0.0.5", + "version": "2.0.3", "description": "fs.rename but works across devices. same as the unix utility 'mv'", "main": "index.js", "scripts": { - "test": "mocha" + "test": "mocha test/test.js --reporter spec" }, "repository": { "type": "git", - "url": "git://github.com/superjoe30/node-mv.git" + "url": "git://github.com/andrewrk/node-mv.git" }, "keywords": [ "mv", @@ -21,19 +21,27 @@ "author": { "name": "Andrew Kelley" }, - "license": "BSD", + "license": "MIT", "engines": { "node": ">=0.8.0" }, "devDependencies": { - "proxyquire": "~0.3.4", - "mocha": "~1.6.0" + "mocha": "~1.21.0" + }, + "dependencies": { + "mkdirp": "~0.5.0", + "ncp": "~0.6.0", + "rimraf": "~2.2.8" }, - "readme": "[![Build Status](https://secure.travis-ci.org/superjoe30/node-mv.png)](http://travis-ci.org/superjoe30/node-mv)\n\nUsage:\n------\n\n```javascript\nvar mv;\n\nmv = require('mv');\n\nmv('source/file', 'dest/file', function(err) {\n // done. it tried fs.rename first, and then falls back to\n // piping the source file to the dest file and then unlinking\n // the source file.\n});\n```\n", - "readmeFilename": "README.md", "bugs": { - "url": "https://github.com/superjoe30/node-mv/issues" + "url": "https://github.com/andrewrk/node-mv/issues" }, - "_id": "mv@0.0.5", - "_from": "mv@0.0.5" + "homepage": "https://github.com/andrewrk/node-mv", + "directories": { + "test": "test" + }, + "readme": "[![Build Status](https://secure.travis-ci.org/andrewrk/node-mv.png)](http://travis-ci.org/andrewrk/node-mv)\n\nUsage:\n------\n\n```js\nvar mv = require('mv');\n\nmv('source/file', 'dest/file', function(err) {\n // done. it tried fs.rename first, and then falls back to\n // piping the source file to the dest file and then unlinking\n // the source file.\n});\n```\n\nAnother example:\n\n```js\nmv('source/dir', 'dest/a/b/c/dir', {mkdirp: true}, function(err) {\n // done. it first created all the necessary directories, and then\n // tried fs.rename, then falls back to using ncp to copy the dir\n // to dest and then rimraf to remove the source dir\n});\n```\n\nAnother example:\n\n```js\nmv('source/file', 'dest/file', {clobber: false}, function(err) {\n // done. If 'dest/file' exists, an error is returned\n // with err.code === 'EEXIST'.\n});\n```\n", + "readmeFilename": "README.md", + "_id": "mv@2.0.3", + "_from": "mv@~2" } diff --git a/node_modules/restify/node_modules/bunyan/node_modules/mv/test/test.js b/node_modules/restify/node_modules/bunyan/node_modules/mv/test/test.js index 46770a5..f80821a 100644 --- a/node_modules/restify/node_modules/bunyan/node_modules/mv/test/test.js +++ b/node_modules/restify/node_modules/bunyan/node_modules/mv/test/test.js @@ -1,28 +1,28 @@ -var assert, proxyquire, fs; - -assert = require('assert'); -proxyquire = require('proxyquire'); -fs = require('fs'); - -describe("mv", function() { - var mock_fs, mocked_mv; +var assert = require('assert'); +var fs = require('fs'); +var rimraf = require('rimraf'); +var describe = global.describe; +var it = global.it; +var mv = require('../'); +var realFsRename = fs.rename; +function overrideFsRename() { // makes fs.rename return cross-device error. - mock_fs = {}; - mock_fs.rename = function(src, dest, cb) { + fs.rename = function(src, dest, cb) { setTimeout(function() { - var err; - err = new Error(); + var err = new Error(); err.code = 'EXDEV'; cb(err); }, 10); }; +} - it("should rename a file on the same device", function (done) { - var mv; - - mv = proxyquire.resolve('../index', __dirname, {}); +function restoreFsRename() { + fs.rename = realFsRename; +} +describe("mv", function() { + it("should rename a file on the same device", function (done) { mv("test/a-file", "test/a-file-dest", function (err) { assert.ifError(err); fs.readFile("test/a-file-dest", 'utf8', function (err, contents) { @@ -34,26 +34,52 @@ describe("mv", function() { }); }); - it("should work across devices", function (done) { - var mv; + it("should not overwrite if clobber = false", function (done) { + mv("test/a-file", "test/a-folder/another-file", {clobber: false}, function (err) { + assert.ok(err && err.code === 'EEXIST', "throw EEXIST"); + done(); + }); + }); + + it("should not create directory structure by default", function (done) { + mv("test/a-file", "test/does/not/exist/a-file-dest", function (err) { + assert.strictEqual(err.code, 'ENOENT'); + done(); + }); + }); + + it("should create directory structure when mkdirp option set", function (done) { + mv("test/a-file", "test/does/not/exist/a-file-dest", {mkdirp: true}, function (err) { + assert.ifError(err); + fs.readFile("test/does/not/exist/a-file-dest", 'utf8', function (err, contents) { + assert.ifError(err); + assert.strictEqual(contents, "sonic the hedgehog\n"); + // move it back + mv("test/does/not/exist/a-file-dest", "test/a-file", function(err) { + assert.ifError(err); + rimraf("test/does", done); + }); + }); + }); + }); - mv = proxyquire.resolve('../index', __dirname, {fs: mock_fs}); + it("should work across devices", function (done) { + overrideFsRename(); mv("test/a-file", "test/a-file-dest", function (err) { assert.ifError(err); fs.readFile("test/a-file-dest", 'utf8', function (err, contents) { assert.ifError(err); assert.strictEqual(contents, "sonic the hedgehog\n"); // move it back - mv("test/a-file-dest", "test/a-file", done); + mv("test/a-file-dest", "test/a-file", function(err) { + restoreFsRename(); + done(err); + }); }); }); }); it("should move folders", function (done) { - var mv; - - mv = proxyquire.resolve('../index', __dirname, {}); - mv("test/a-folder", "test/a-folder-dest", function (err) { assert.ifError(err); fs.readFile("test/a-folder-dest/another-file", 'utf8', function (err, contents) { @@ -66,17 +92,17 @@ describe("mv", function() { }); it("should move folders across devices", function (done) { - var mv; - - mv = proxyquire.resolve('../index', __dirname, {fs: mock_fs}); - + overrideFsRename(); mv("test/a-folder", "test/a-folder-dest", function (err) { assert.ifError(err); fs.readFile("test/a-folder-dest/another-folder/file3", 'utf8', function (err, contents) { assert.ifError(err); assert.strictEqual(contents, "knuckles\n"); // move it back - mv("test/a-folder-dest", "test/a-folder", done); + mv("test/a-folder-dest", "test/a-folder", function(err) { + restoreFsRename(); + done(err); + }); }); }); }); diff --git a/node_modules/restify/node_modules/bunyan/package.json b/node_modules/restify/node_modules/bunyan/package.json index 5892bce..06d045b 100644 --- a/node_modules/restify/node_modules/bunyan/package.json +++ b/node_modules/restify/node_modules/bunyan/package.json @@ -1,6 +1,6 @@ { "name": "bunyan", - "version": "0.21.1", + "version": "0.23.1", "description": "a JSON Logger library for node.js services", "author": { "name": "Trent Mick", @@ -16,7 +16,7 @@ "url": "git://github.com/trentm/node-bunyan.git" }, "engines": [ - "node >=0.6.0" + "node >=0.8.0" ], "keywords": [ "log", @@ -25,18 +25,19 @@ "json" ], "dependencies": { - "mv": "0.0.5", + "mv": "~2", "dtrace-provider": "0.2.8" }, "// comment": "'mv' required for RotatingFileStream", "optionalDependencies": { - "mv": "0.0.5", + "mv": "~2", "dtrace-provider": "0.2.8" }, "devDependencies": { "nodeunit": "0.7.4", "ben": "0.0.0", - "verror": "1.3.3" + "verror": "1.3.3", + "vasync": "1.4.3" }, "scripts": { "test": "make test" @@ -72,13 +73,28 @@ { "name": "Bryan Cantrill", "url": "https://github.com/bcantrill" + }, + { + "name": "Michael Hart", + "url": "https://github.com/mhart" + }, + { + "name": "Simon Wade", + "url": "https://github.com/aexmachina" + }, + { + "name": "https://github.com/glenn-murray-bse" + }, + { + "name": "Chakrit Wichian", + "url": "https://github.com/chakrit" } ], - "readme": "Bunyan is **a simple and fast JSON logging library** for node.js services:\n\n var bunyan = require('bunyan');\n var log = bunyan.createLogger({name: \"myapp\"});\n log.info(\"hi\");\n\nand **a `bunyan` CLI tool** for nicely viewing those logs:\n\n![bunyan CLI screenshot](https://raw.github.com/trentm/node-bunyan/master/tools/screenshot1.png)\n\nManifesto: Server logs should be structured. JSON's a good format. Let's do\nthat. A log record is one line of `JSON.stringify`'d output. Let's also\nspecify some common names for the requisite and common fields for a log\nrecord (see below).\n\nAlso: log4j is way more than you need.\n\n\n# Current Status\n\nSolid core functionality is there. Joyent is using this for a number of\nproduction services. Bunyan supports node 0.6 and greater. Follow\n@trentmick\nfor updates to Bunyan.\n\n\n# Installation\n\n npm install bunyan\n\n**Tip**: The `bunyan` CLI tool is written to be compatible (within reason) with\nall versions of Bunyan logs. Therefore you might want to `npm install -g bunyan`\nto get the bunyan CLI on your PATH, then use local bunyan installs for\nnode.js library usage of bunyan in your apps.\n\n\n# Features\n\n- elegant [log method API](#log-method-api)\n- extensible [streams](#streams) system for controlling where log records\n go (to a stream, to a file, [log file rotation](#stream-type-rotating-file),\n etc.)\n- [`bunyan` CLI](#cli-usage) for pretty-printing and filtering of Bunyan logs\n- simple include of log call source location (file, line, function) with\n [`src: true`](#src)\n- light-weight specialization of Logger instances with [`log.child`](#logchild)\n- custom rendering of logged objects with [\"serializers\"](#serializers)\n- [Dtrace support](#dtrace-support)\n\n\n# Introduction\n\nLike most logging libraries you create a Logger instance and call methods\nnamed after the logging levels:\n\n $ cat hi.js\n var bunyan = require('bunyan');\n var log = bunyan.createLogger({name: 'myapp'});\n log.info('hi');\n log.warn({lang: 'fr'}, 'au revoir');\n\nAll loggers must provide a \"name\". This is somewhat akin to the log4j logger\n\"name\", but Bunyan doesn't do hierarchical logger names.\n\n**Bunyan log records are JSON.** A few fields are added automatically:\n\"pid\", \"hostname\", \"time\" and \"v\".\n\n $ node hi.js\n {\"name\":\"myapp\",\"hostname\":\"banana.local\",\"pid\":40161,\"level\":30,\"msg\":\"hi\",\"time\":\"2013-01-04T18:46:23.851Z\",\"v\":0}\n {\"name\":\"myapp\",\"hostname\":\"banana.local\",\"pid\":40161,\"level\":40,\"lang\":\"fr\",\"msg\":\"au revoir\",\"time\":\"2013-01-04T18:46:23.853Z\",\"v\":0}\n\n\n## Log Method API\n\nThe example above shows two different ways to call `log.info(...)`. The\nfull API is:\n\n log.info(); // Returns a boolean: is the \"info\" level enabled?\n // This is equivalent to `log.isInfoEnabled()` or\n // `log.isEnabledFor(INFO)` in log4j.\n\n log.info('hi'); // Log a simple string message.\n log.info('hi %s', bob, anotherVar); // Uses `util.format` for msg formatting.\n\n log.info({foo: 'bar'}, 'hi');\n // Adds \"foo\" field to log record. You can add any number\n // of additional fields here.\n\n log.info(err); // Special case to log an `Error` instance to the record.\n // This adds an \"err\" field with exception details\n // (including the stack) and sets \"msg\" to the exception\n // message.\n log.info(err, 'more on this: %s', more);\n // ... or you can specify the \"msg\".\n\nNote that this implies **you cannot pass any object as the first argument\nto log it**. IOW, `log.info(mywidget)` may not be what you expect. Instead\nof a string representation of `mywidget` that other logging libraries may\ngive you, Bunyan will try to JSON-ify your object. It is a Bunyan best\npractice to always give a field name to included objects, e.g.:\n\n log.info({widget: mywidget}, ...)\n\nThis will dove-tail with [Bunyan serializer support](#serializers), discussed\nlater.\n\nThe same goes for all of Bunyan's log levels: `log.trace`, `log.debug`,\n`log.info`, `log.warn`, and `log.fatal`. See the [levels section](#levels)\nbelow for details and suggestions.\n\n\n## CLI Usage\n\nBunyan log output is a stream of JSON objects. This is great for processing,\nbut not for reading directly. A **`bunyan` tool** is provided **for\npretty-printing bunyan logs** and for **filtering** (e.g.\n`| bunyan -c 'this.foo == \"bar\"'`). Using our example above:\n\n $ node hi.js | ./bin/bunyan\n [2013-01-04T19:01:18.241Z] INFO: myapp/40208 on banana.local: hi\n [2013-01-04T19:01:18.242Z] WARN: myapp/40208 on banana.local: au revoir (lang=fr)\n\nSee the screenshot above for an example of the default coloring of rendered\nlog output. That example also shows the nice formatting automatically done for\nsome well-known log record fields (e.g. `req` is formatted like an HTTP request,\n`res` like an HTTP response, `err` like an error stack trace).\n\nOne interesting feature is **filtering** of log content, which can be useful\nfor digging through large log files or for analysis. We can filter only\nrecords above a certain level:\n\n $ node hi.js | bunyan -l warn\n [2013-01-04T19:08:37.182Z] WARN: myapp/40353 on banana.local: au revoir (lang=fr)\n\nOr filter on the JSON fields in the records (e.g. only showing the French\nrecords in our contrived example):\n\n $ node hi.js | bunyan -c 'this.lang == \"fr\"'\n [2013-01-04T19:08:26.411Z] WARN: myapp/40342 on banana.local: au revoir (lang=fr)\n\nSee `bunyan --help` for other facilities.\n\n\n## Streams Introduction\n\nBy default, log output is to stdout and at the \"info\" level. Explicitly that\nlooks like:\n\n var log = bunyan.createLogger({\n name: 'myapp',\n stream: process.stdout,\n level: 'info'\n });\n\nThat is an abbreviated form for a single stream. **You can define multiple\nstreams at different levels**.\n\n var log = bunyan.createLogger({\n name: 'myapp',\n streams: [\n {\n level: 'info',\n stream: process.stdout, // log INFO and above to stdout\n },\n {\n level: 'error',\n path: '/var/log/myapp-error.log' // log ERROR and above to a file\n }\n ]\n });\n\nMore on streams in the [Streams section](#streams) below.\n\n\n## log.child\n\nBunyan has a concept of a child logger to **specialize a logger for a\nsub-component of your application**, i.e. to create a new logger with\nadditional bound fields that will be included in its log records. A child\nlogger is created with `log.child(...)`.\n\nIn the following example, logging on a \"Wuzzle\" instance's `this.log` will\nbe exactly as on the parent logger with the addition of the `widget_type`\nfield:\n\n var bunyan = require('bunyan');\n var log = bunyan.createLogger({name: 'myapp'});\n\n function Wuzzle(options) {\n this.log = options.log.child({widget_type: 'wuzzle'});\n this.log.info('creating a wuzzle')\n }\n Wuzzle.prototype.woos = function () {\n this.log.warn('This wuzzle is woosey.')\n }\n\n log.info('start');\n var wuzzle = new Wuzzle({log: log});\n wuzzle.woos();\n log.info('done');\n\nRunning that looks like (raw):\n\n $ node myapp.js\n {\"name\":\"myapp\",\"hostname\":\"myhost\",\"pid\":34572,\"level\":30,\"msg\":\"start\",\"time\":\"2013-01-04T07:47:25.814Z\",\"v\":0}\n {\"name\":\"myapp\",\"hostname\":\"myhost\",\"pid\":34572,\"widget_type\":\"wuzzle\",\"level\":30,\"msg\":\"creating a wuzzle\",\"time\":\"2013-01-04T07:47:25.815Z\",\"v\":0}\n {\"name\":\"myapp\",\"hostname\":\"myhost\",\"pid\":34572,\"widget_type\":\"wuzzle\",\"level\":40,\"msg\":\"This wuzzle is woosey.\",\"time\":\"2013-01-04T07:47:25.815Z\",\"v\":0}\n {\"name\":\"myapp\",\"hostname\":\"myhost\",\"pid\":34572,\"level\":30,\"msg\":\"done\",\"time\":\"2013-01-04T07:47:25.816Z\",\"v\":0}\n\nAnd with the `bunyan` CLI (using the \"short\" output mode):\n\n $ node myapp.js | bunyan -o short\n 07:46:42.707Z INFO myapp: start\n 07:46:42.709Z INFO myapp: creating a wuzzle (widget_type=wuzzle)\n 07:46:42.709Z WARN myapp: This wuzzle is woosey. (widget_type=wuzzle)\n 07:46:42.709Z INFO myapp: done\n\n\nA more practical example is in the\n[node-restify](https://github.com/mcavage/node-restify) web framework.\nRestify uses Bunyan for its logging. One feature of its integration, is that\neach restify request handler includes a `req.log` logger that is:\n\n log.child({req_id: }, true)\n\nApps using restify can then use `req.log` and have all such log records\ninclude the unique request id (as \"req_id\"). Handy.\n\n\n## Serializers\n\nBunyan has a concept of **\"serializers\" to produce a JSON-able object from a\nJavaScript object**, so you can easily do the following:\n\n log.info({req: }, 'something about handling this request');\n\nSerializers is a mapping of log record field name, \"req\" in this example, to\na serializer function. That looks like this:\n\n function reqSerializer(req) {\n return {\n method: req.method,\n url: req.url,\n headers: req.headers\n }\n }\n var log = bunyan.createLogger({\n name: 'myapp',\n serializers: {\n req: reqSerializer\n }\n });\n\nOr this:\n\n var log = bunyan.createLogger({\n name: 'myapp',\n serializers: {req: bunyan.stdSerializers.req}\n });\n\nbecause Buyan includes a small set of standard serializers. To use all the\nstandard serializers you can use:\n\n var log = bunyan.createLogger({\n ...\n serializers: bunyan.stdSerializers\n });\n\n**Note**: Your own serializers should never throw, otherwise you'll get an\nugly message on stderr from Bunyan (along with the traceback) and the field\nin your log record will be replaced with a short error message.\n\n\n## src\n\nThe **source file, line and function of the log call site** can be added to\nlog records by using the `src: true` config option:\n\n var log = bunyan.createLogger({src: true, ...});\n\nThis adds the call source info with the 'src' field, like this:\n\n {\n \"name\": \"src-example\",\n \"hostname\": \"banana.local\",\n \"pid\": 123,\n \"component\": \"wuzzle\",\n \"level\": 4,\n \"msg\": \"This wuzzle is woosey.\",\n \"time\": \"2012-02-06T04:19:35.605Z\",\n \"src\": {\n \"file\": \"/Users/trentm/tm/node-bunyan/examples/src.js\",\n \"line\": 20,\n \"func\": \"Wuzzle.woos\"\n },\n \"v\": 0\n }\n\n**WARNING: Determining the call source info is slow. Never use this option\nin production.**\n\n\n# Levels\n\nThe log levels in bunyan are as follows. The level descriptions are best\npractice *opinions*.\n\n- \"fatal\" (60): The service/app is going to stop or become unusable now.\n An operator should definitely look into this soon.\n- \"error\" (50): Fatal for a particular request, but the service/app continues\n servicing other requests. An operator should look at this soon(ish).\n- \"warn\" (40): A note on something that should probably be looked at by an\n operator eventually.\n- \"info\" (30): Detail on regular operation.\n- \"debug\" (20): Anything else, i.e. too verbose to be included in \"info\" level.\n- \"trace\" (10): Logging from external libraries used by your app or *very*\n detailed application logging.\n\nSuggestions: Use \"debug\" sparingly. Information that will be useful to debug\nerrors *post mortem* should usually be included in \"info\" messages if it's\ngenerally relevant or else with the corresponding \"error\" event. Don't rely\non spewing mostly irrelevant debug messages all the time and sifting through\nthem when an error occurs.\n\nIntegers are used for the actual level values (10 for \"trace\", ..., 60 for\n\"fatal\") and constants are defined for the (bunyan.TRACE ... bunyan.DEBUG).\nThe lowercase level names are aliases supported in the API.\n\nHere is the API for changing levels in an existing logger:\n\n log.level() -> INFO // gets current level (lowest level of all streams)\n\n log.level(INFO) // set all streams to level INFO\n log.level(\"info\") // set all streams to level INFO\n\n log.levels() -> [DEBUG, INFO] // get array of levels of all streams\n log.levels(0) -> DEBUG // get level of stream at index 0\n log.levels(\"foo\") // get level of stream with name \"foo\"\n\n log.levels(0, INFO) // set level of stream 0 to INFO\n log.levels(0, \"info\") // can use \"info\" et al aliases\n log.levels(\"foo\", WARN) // set stream named \"foo\" to WARN\n\n\n\n# Log Record Fields\n\nThis section will describe *rules* for the Bunyan log format: field names,\nfield meanings, required fields, etc. However, a Bunyan library doesn't\nstrictly enforce all these rules while records are being emitted. For example,\nBunyan will add a `time` field with the correct format to your log records,\nbut you can specify your own. It is the caller's responsibility to specify\nthe appropriate format.\n\nThe reason for the above leniency is because IMO logging a message should\nnever break your app. This leads to this rule of logging: **a thrown\nexception from `log.info(...)` or equivalent (other than for calling with the\nincorrect signature) is always a bug in Bunyan.**\n\n\nA typical Bunyan log record looks like this:\n\n {\"name\":\"myserver\",\"hostname\":\"banana.local\",\"pid\":123,\"req\":{\"method\":\"GET\",\"url\":\"/path?q=1#anchor\",\"headers\":{\"x-hi\":\"Mom\",\"connection\":\"close\"}},\"level\":3,\"msg\":\"start request\",\"time\":\"2012-02-03T19:02:46.178Z\",\"v\":0}\n\nPretty-printed:\n\n {\n \"name\": \"myserver\",\n \"hostname\": \"banana.local\",\n \"pid\": 123,\n \"req\": {\n \"method\": \"GET\",\n \"url\": \"/path?q=1#anchor\",\n \"headers\": {\n \"x-hi\": \"Mom\",\n \"connection\": \"close\"\n },\n \"remoteAddress\": \"120.0.0.1\",\n \"remotePort\": 51244\n },\n \"level\": 3,\n \"msg\": \"start request\",\n \"time\": \"2012-02-03T19:02:57.534Z\",\n \"v\": 0\n }\n\n\nCore fields:\n\n- `v`: Required. Integer. Added by Bunyan. Cannot be overriden.\n This is the Bunyan log format version (`require('bunyan').LOG_VERSION`).\n The log version is a single integer. `0` is until I release a version\n \"1.0.0\" of node-bunyan. Thereafter, starting with `1`, this will be\n incremented if there is any backward incompatible change to the log record\n format. Details will be in \"CHANGES.md\" (the change log).\n- `level`: Required. Integer. Added by Bunyan. Cannot be overriden.\n See the \"Levels\" section.\n- `name`: Required. String. Provided at Logger creation.\n You must specify a name for your logger when creating it. Typically this\n is the name of the service/app using Bunyan for logging.\n- `hostname`: Required. String. Provided or determined at Logger creation.\n You can specify your hostname at Logger creation or it will be retrieved\n vi `os.hostname()`.\n- `pid`: Required. Integer. Filled in automatically at Logger creation.\n- `time`: Required. String. Added by Bunyan. Can be overriden.\n The date and time of the event in [ISO 8601\n Extended Format](http://en.wikipedia.org/wiki/ISO_8601) format and in UTC,\n as from\n [`Date.toISOString()`](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString).\n- `msg`: Required. String.\n Every `log.debug(...)` et al call must provide a log message.\n- `src`: Optional. Object giving log call source info. This is added\n automatically by Bunyan if the \"src: true\" config option is given to the\n Logger. Never use in production as this is really slow.\n\n\nGo ahead and add more fields, and nested ones are fine (and recommended) as\nwell. This is why we're using JSON. Some suggestions and best practices\nfollow (feedback from actual users welcome).\n\n\nRecommended/Best Practice Fields:\n\n- `err`: Object. A caught JS exception. Log that thing with `log.info(err)`\n to get:\n\n ...\n \"err\": {\n \"message\": \"boom\",\n \"name\": \"TypeError\",\n \"stack\": \"TypeError: boom\\n at Object. ...\"\n },\n \"msg\": \"boom\",\n ...\n\n Or use the `bunyan.stdSerializers.err` serializer in your Logger and\n do this `log.error({err: err}, \"oops\")`. See \"examples/err.js\".\n\n- `req_id`: String. A request identifier. Including this field in all logging\n tied to handling a particular request to your server is strongly suggested.\n This allows post analysis of logs to easily collate all related logging\n for a request. This really shines when you have a SOA with multiple services\n and you carry a single request ID from the top API down through all APIs\n (as [node-restify](https://github.com/mcavage/node-restify) facilitates\n with its 'X-Request-Id' header).\n\n- `req`: An HTTP server request. Bunyan provides `bunyan.stdSerializers.req`\n to serialize a request with a suggested set of keys. Example:\n\n {\n \"method\": \"GET\",\n \"url\": \"/path?q=1#anchor\",\n \"headers\": {\n \"x-hi\": \"Mom\",\n \"connection\": \"close\"\n },\n \"remoteAddress\": \"120.0.0.1\",\n \"remotePort\": 51244\n }\n\n- `res`: An HTTP server response. Bunyan provides `bunyan.stdSerializers.res`\n to serialize a response with a suggested set of keys. Example:\n\n {\n \"statusCode\": 200,\n \"header\": \"HTTP/1.1 200 OK\\r\\nContent-Type: text/plain\\r\\nConnection: keep-alive\\r\\nTransfer-Encoding: chunked\\r\\n\\r\\n\"\n }\n\n\nOther fields to consider:\n\n- `req.username`: Authenticated user (or for a 401, the user attempting to\n auth).\n- Some mechanism to calculate response latency. \"restify\" users will have\n a \"X-Response-Time\" header. A `latency` custom field would be fine.\n- `req.body`: If you know that request bodies are small (common in APIs,\n for example), then logging the request body is good.\n\n\n# Streams\n\nA \"stream\" is Bunyan's name for an output for log messages (the equivalent\nto a log4j Appender). Ultimately Bunyan uses a\n[Writable Stream](http://nodejs.org/docs/latest/api/all.html#writable_Stream)\ninterface, but there are some additional attributes used to create and\nmanage the stream. A Bunyan Logger instance has one or more streams.\nIn general streams are specified with the \"streams\" option:\n\n var bunyan = require('bunyan');\n var log = bunyan.createLogger({\n name: \"foo\",\n streams: [\n {\n stream: process.stderr,\n level: \"debug\"\n },\n ...\n ]\n });\n\nFor convenience, if there is only one stream, it can specified with the\n\"stream\" and \"level\" options (internally converted to a `Logger.streams`).\n\n var log = bunyan.createLogger({\n name: \"foo\",\n stream: process.stderr,\n level: \"debug\"\n });\n\nNote that \"file\" streams do not support this shortcut (partly for historical\nreasons and partly to not make it difficult to add a literal \"path\" field\non log records).\n\nIf neither \"streams\" nor \"stream\" are specified, the default is a stream of\ntype \"stream\" emitting to `process.stdout` at the \"info\" level.\n\n\n## stream errors\n\nBunyan re-emits error events from the created `WriteStream`. So you can\ndo this:\n\n var log = bunyan.createLogger({name: 'mylog', streams: [{path: LOG_PATH}]});\n log.on('error', function (err, stream) {\n // Handle stream write or create error here.\n });\n\n\n## stream type: `stream`\n\nA `type === 'stream'` is a plain ol' node.js [Writable\nStream](http://nodejs.org/docs/latest/api/all.html#writable_Stream). A\n\"stream\" (the writeable stream) field is required. E.g.: `process.stdout`,\n`process.stderr`.\n\n var log = bunyan.createLogger({\n name: 'foo',\n streams: [{\n stream: process.stderr\n // `type: 'stream'` is implied\n }]\n });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    FieldRequired?DefaultDescription
    streamYes-A \"Writable Stream\", e.g. a std handle or an open file write stream.
    typeNon/a`type == 'stream'` is implied if the `stream` field is given.
    levelNoinfoThe level at which logging to this stream is enabled. If not\nspecified it defaults to \"info\". If specified this can be one of the\nlevel strings (\"trace\", \"debug\", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).
    nameNo-A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream \"name\" isn't\nused for anything else.
    \n\n\n## stream type: `file`\n\nA `type === 'file'` stream requires a \"path\" field. Bunyan will open this\nfile for appending. E.g.:\n\n var log = bunyan.createLogger({\n name: 'foo',\n streams: [{\n path: '/var/log/foo.log',\n // `type: 'file'` is implied\n }]\n });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    FieldRequired?DefaultDescription
    pathYes-A file path to which to log.
    typeNon/a`type == 'file'` is implied if the `path` field is given.
    levelNoinfoThe level at which logging to this stream is enabled. If not\nspecified it defaults to \"info\". If specified this can be one of the\nlevel strings (\"trace\", \"debug\", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).
    nameNo-A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream \"name\" isn't\nused for anything else.
    \n\n\n## stream type: `rotating-file`\n\nA `type === 'rotating-file'` is a file stream that handles file automatic\nrotation.\n\n var log = bunyan.createLogger({\n name: 'foo',\n streams: [{\n type: 'rotating-file',\n path: '/var/log/foo.log',\n period: '1d', // daily rotation\n count: 3 // keep 3 back copies\n }]\n });\n\nThis will rotate '/var/log/foo.log' every day (at midnight) to:\n\n /var/log/foo.log.0 # yesterday\n /var/log/foo.log.1 # 1 day ago\n /var/log/foo.log.2 # 2 days ago\n\n*Currently*, there is no support for providing a template for the rotated\nfiles, or for rotating when the log reaches a threshold size.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    FieldRequired?DefaultDescription
    typeYes-\"rotating-file\"
    pathYes-A file path to which to log. Rotated files will be \"$path.0\",\n\"$path.1\", ...
    periodNo1dThe period at which to rotate. This is a string of the format\n\"$number$scope\" where \"$scope\" is one of \"h\" (hours), \"d\" (days), \"w\" (weeks),\n\"m\" (months), \"y\" (years). Or one of the following names can be used\n\"hourly\" (means 1h), \"daily\" (1d), \"weekly\" (1w), \"monthly\" (1m),\n\"yearly\" (1y). Rotation is done at the start of the scope: top of the hour (h),\nmidnight (d), start of Sunday (w), start of the 1st of the month (m),\nstart of Jan 1st (y).
    countNo10The number of rotated files to keep.
    levelNoinfoThe level at which logging to this stream is enabled. If not\nspecified it defaults to \"info\". If specified this can be one of the\nlevel strings (\"trace\", \"debug\", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).
    nameNo-A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream \"name\" isn't\nused for anything else.
    \n\n\n\n## stream type: `raw`\n\n- `raw`: Similar to a \"stream\" writeable stream, except that the write method\n is given raw log record *Object*s instead of a JSON-stringified string.\n This can be useful for hooking on further processing to all Bunyan logging:\n pushing to an external service, a RingBuffer (see below), etc.\n\n\n\n## `raw` + RingBuffer Stream\n\nBunyan comes with a special stream called a RingBuffer which keeps the last N\nrecords in memory and does *not* write the data anywhere else. One common\nstrategy is to log 'info' and higher to a normal log file but log all records\n(including 'trace') to a ringbuffer that you can access via a debugger, or your\nown HTTP interface, or a post-mortem facility like MDB or node-panic.\n\nTo use a RingBuffer:\n\n /* Create a ring buffer that stores the last 100 records. */\n var bunyan = require('bunyan');\n var ringbuffer = new bunyan.RingBuffer({ limit: 100 });\n var log = bunyan.createLogger({\n name: 'foo',\n streams: [\n {\n level: 'info',\n stream: process.stdout\n },\n {\n level: 'trace',\n type: 'raw', // use 'raw' to get raw log record objects\n stream: ringbuffer\n }\n ]\n });\n\n log.info('hello world');\n console.log(ringbuffer.records);\n\nThis example emits:\n\n [ { name: 'foo',\n hostname: '912d2b29',\n pid: 50346,\n level: 30,\n msg: 'hello world',\n time: '2012-06-19T21:34:19.906Z',\n v: 0 } ]\n\n\n## third-party streams\n\n- syslog:\n [mcavage/node-bunyan-syslog](https://github.com/mcavage/node-bunyan-syslog)\n provides support for directing bunyan logging to a syslog server.\n\n- TODO: eventually https://github.com/trentm/node-bunyan-winston\n\n\n\n# DTrace support\n\nOn systems that support DTrace (e.g., MacOS, FreeBSD, illumos derivatives\nlike SmartOS and OmniOS), Bunyan will create a DTrace provider (`bunyan`)\nthat makes available the following probes:\n\n log-trace\n log-debug\n log-info\n log-warn\n log-error\n log-fatal\n\nEach of these probes has a single argument: the string that would be\nwritten to the log. Note that when a probe is enabled, it will\nfire whenever the corresponding function is called, even if the level of\nthe log message is less than that of any stream.\n\n\n## DTrace examples\n\nTrace all log messages coming from any Bunyan module on the system.\n(The `-x strsize=4k` is to raise dtrace's default 256 byte buffer size\nbecause log messages are longer than typical dtrace probes.)\n\n dtrace -x strsize=4k -qn 'bunyan*:::log-*{printf(\"%d: %s: %s\", pid, probefunc, copyinstr(arg0))}'\n\nTrace all log messages coming from the \"wuzzle\" component:\n\n dtrace -x strsize=4k -qn 'bunyan*:::log-*/strstr(this->str = copyinstr(arg0), \"\\\"component\\\":\\\"wuzzle\\\"\") != NULL/{printf(\"%s\", this->str)}'\n\nAggregate debug messages from process 1234, by message:\n\n dtrace -x strsize=4k -n 'bunyan1234:::log-debug{@[copyinstr(arg0)] = count()}'\n\nHave the bunyan CLI pretty-print the traced logs:\n\n dtrace -x strsize=4k -qn 'bunyan1234:::log-*{printf(\"%s\", copyinstr(arg0))}' | bunyan\n\nA convenience handle has been made for this:\n\n bunyan -p 1234\n\n\nOn systems that support the\n[`jstack`](http://dtrace.org/blogs/dap/2012/04/25/profiling-node-js/) action\nvia a node.js helper, get a stack backtrace for any debug message that\nincludes the string \"danger!\":\n\n dtrace -x strsize=4k -qn 'log-debug/strstr(copyinstr(arg0), \"danger!\") != NULL/{printf(\"\\n%s\", copyinstr(arg0)); jstack()}'\n\nOutput of the above might be:\n\n {\"name\":\"foo\",\"hostname\":\"763bf293-d65c-42d5-872b-4abe25d5c4c7.local\",\"pid\":12747,\"level\":20,\"msg\":\"danger!\",\"time\":\"2012-10-30T18:28:57.115Z\",\"v\":0}\n\n node`0x87e2010\n DTraceProviderBindings.node`usdt_fire_probe+0x32\n DTraceProviderBindings.node`_ZN4node11DTraceProbe5_fireEN2v85LocalINS1_5ValueEEE+0x32d\n DTraceProviderBindings.node`_ZN4node11DTraceProbe4FireERKN2v89ArgumentsE+0x77\n << internal code >>\n (anon) as (anon) at /root/node-bunyan/lib/bunyan.js position 40484\n << adaptor >>\n (anon) as doit at /root/my-prog.js position 360\n (anon) as list.ontimeout at timers.js position 4960\n << adaptor >>\n << internal >>\n << entry >>\n node`_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb+0x101\n node`_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb+0xcb\n node`_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE+0xf0\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE+0x11f\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE+0x66\n node`_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si+0x63\n node`uv__run_timers+0x66\n node`uv__run+0x1b\n node`uv_run+0x17\n node`_ZN4node5StartEiPPc+0x1d0\n node`main+0x1b\n node`_start+0x83\n\n node`0x87e2010\n DTraceProviderBindings.node`usdt_fire_probe+0x32\n DTraceProviderBindings.node`_ZN4node11DTraceProbe5_fireEN2v85LocalINS1_5ValueEEE+0x32d\n DTraceProviderBindings.node`_ZN4node11DTraceProbe4FireERKN2v89ArgumentsE+0x77\n << internal code >>\n (anon) as (anon) at /root/node-bunyan/lib/bunyan.js position 40484\n << adaptor >>\n (anon) as doit at /root/my-prog.js position 360\n (anon) as list.ontimeout at timers.js position 4960\n << adaptor >>\n << internal >>\n << entry >>\n node`_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb+0x101\n node`_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb+0xcb\n node`_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE+0xf0\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE+0x11f\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE+0x66\n node`_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si+0x63\n node`uv__run_timers+0x66\n node`uv__run+0x1b\n node`uv_run+0x17\n node`_ZN4node5StartEiPPc+0x1d0\n node`main+0x1b\n node`_start+0x83\n\n\n# Versioning\n\nThe scheme I follow is most succintly described by the bootstrap guys\n[here](https://github.com/twitter/bootstrap#versioning).\n\ntl;dr: All versions are `..` which will be incremented for\nbreaking backward compat and major reworks, new features without breaking\nchange, and bug fixes, respectively.\n\n\n# License\n\nMIT. See \"LICENSE.txt\".\n\n\n# See Also\n\n- Bunyan syslog support: .\n- Bunyan + Graylog2: .\n- An example of a Bunyan shim to the Winston logging system:\n .\n- [Bunyan for Bash](https://github.com/trevoro/bash-bunyan).\n- TODO: `RequestCaptureStream` example from restify.\n", + "readme": "Bunyan is **a simple and fast JSON logging library** for node.js services:\n\n var bunyan = require('bunyan');\n var log = bunyan.createLogger({name: \"myapp\"});\n log.info(\"hi\");\n\nand **a `bunyan` CLI tool** for nicely viewing those logs:\n\n![bunyan CLI screenshot](https://raw.github.com/trentm/node-bunyan/master/tools/screenshot1.png)\n\nManifesto: Server logs should be structured. JSON's a good format. Let's do\nthat. A log record is one line of `JSON.stringify`'d output. Let's also\nspecify some common names for the requisite and common fields for a log\nrecord (see below).\n\nAlso: log4j is way more than you need.\n\n\n# Current Status\n\nSolid core functionality is there. Joyent is using this for a number of\nproduction services. Bunyan supports node 0.6 and greater. Follow\n@trentmick\nfor updates to Bunyan.\n\nThere is an email discussion list\n[bunyan-logging@googlegroups.com](mailto:bunyan-logging@googlegroups.com),\nalso [as a forum in the\nbrowser](https://groups.google.com/forum/?fromgroups#!forum/bunyan-logging).\n\n\n# Installation\n\n npm install bunyan\n\n**Tip**: The `bunyan` CLI tool is written to be compatible (within reason) with\nall versions of Bunyan logs. Therefore you might want to `npm install -g bunyan`\nto get the bunyan CLI on your PATH, then use local bunyan installs for\nnode.js library usage of bunyan in your apps.\n\n\n# Features\n\n- elegant [log method API](#log-method-api)\n- extensible [streams](#streams) system for controlling where log records\n go (to a stream, to a file, [log file rotation](#stream-type-rotating-file),\n etc.)\n- [`bunyan` CLI](#cli-usage) for pretty-printing and filtering of Bunyan logs\n- simple include of log call source location (file, line, function) with\n [`src: true`](#src)\n- light-weight specialization of Logger instances with [`log.child`](#logchild)\n- custom rendering of logged objects with [\"serializers\"](#serializers)\n- [Runtime log snooping via Dtrace support](#dtrace-support)\n\n\n# Introduction\n\nLike most logging libraries you create a Logger instance and call methods\nnamed after the logging levels:\n\n $ cat hi.js\n var bunyan = require('bunyan');\n var log = bunyan.createLogger({name: 'myapp'});\n log.info('hi');\n log.warn({lang: 'fr'}, 'au revoir');\n\nAll loggers must provide a \"name\". This is somewhat akin to the log4j logger\n\"name\", but Bunyan doesn't do hierarchical logger names.\n\n**Bunyan log records are JSON.** A few fields are added automatically:\n\"pid\", \"hostname\", \"time\" and \"v\".\n\n $ node hi.js\n {\"name\":\"myapp\",\"hostname\":\"banana.local\",\"pid\":40161,\"level\":30,\"msg\":\"hi\",\"time\":\"2013-01-04T18:46:23.851Z\",\"v\":0}\n {\"name\":\"myapp\",\"hostname\":\"banana.local\",\"pid\":40161,\"level\":40,\"lang\":\"fr\",\"msg\":\"au revoir\",\"time\":\"2013-01-04T18:46:23.853Z\",\"v\":0}\n\n\n## Log Method API\n\nThe example above shows two different ways to call `log.info(...)`. The\nfull API is:\n\n log.info(); // Returns a boolean: is the \"info\" level enabled?\n // This is equivalent to `log.isInfoEnabled()` or\n // `log.isEnabledFor(INFO)` in log4j.\n\n log.info('hi'); // Log a simple string message (or number).\n log.info('hi %s', bob, anotherVar); // Uses `util.format` for msg formatting.\n\n log.info({foo: 'bar'}, 'hi');\n // Adds \"foo\" field to log record. You can add any number\n // of additional fields here.\n\n log.info(err); // Special case to log an `Error` instance to the record.\n // This adds an \"err\" field with exception details\n // (including the stack) and sets \"msg\" to the exception\n // message.\n log.info(err, 'more on this: %s', more);\n // ... or you can specify the \"msg\".\n\nNote that this implies **you cannot pass any object as the first argument\nto log it**. IOW, `log.info(mywidget)` may not be what you expect. Instead\nof a string representation of `mywidget` that other logging libraries may\ngive you, Bunyan will try to JSON-ify your object. It is a Bunyan best\npractice to always give a field name to included objects, e.g.:\n\n log.info({widget: mywidget}, ...)\n\nThis will dove-tail with [Bunyan serializer support](#serializers), discussed\nlater.\n\nThe same goes for all of Bunyan's log levels: `log.trace`, `log.debug`,\n`log.info`, `log.warn`, `log.error`, and `log.fatal`. See the [levels section](#levels)\nbelow for details and suggestions.\n\n\n## CLI Usage\n\nBunyan log output is a stream of JSON objects. This is great for processing,\nbut not for reading directly. A **`bunyan` tool** is provided **for\npretty-printing bunyan logs** and for **filtering** (e.g.\n`| bunyan -c 'this.foo == \"bar\"'`). Using our example above:\n\n $ node hi.js | ./bin/bunyan\n [2013-01-04T19:01:18.241Z] INFO: myapp/40208 on banana.local: hi\n [2013-01-04T19:01:18.242Z] WARN: myapp/40208 on banana.local: au revoir (lang=fr)\n\nSee the screenshot above for an example of the default coloring of rendered\nlog output. That example also shows the nice formatting automatically done for\nsome well-known log record fields (e.g. `req` is formatted like an HTTP request,\n`res` like an HTTP response, `err` like an error stack trace).\n\nOne interesting feature is **filtering** of log content, which can be useful\nfor digging through large log files or for analysis. We can filter only\nrecords above a certain level:\n\n $ node hi.js | bunyan -l warn\n [2013-01-04T19:08:37.182Z] WARN: myapp/40353 on banana.local: au revoir (lang=fr)\n\nOr filter on the JSON fields in the records (e.g. only showing the French\nrecords in our contrived example):\n\n $ node hi.js | bunyan -c 'this.lang == \"fr\"'\n [2013-01-04T19:08:26.411Z] WARN: myapp/40342 on banana.local: au revoir (lang=fr)\n\nSee `bunyan --help` for other facilities.\n\n\n## Streams Introduction\n\nBy default, log output is to stdout and at the \"info\" level. Explicitly that\nlooks like:\n\n var log = bunyan.createLogger({\n name: 'myapp',\n stream: process.stdout,\n level: 'info'\n });\n\nThat is an abbreviated form for a single stream. **You can define multiple\nstreams at different levels**.\n\n var log = bunyan.createLogger({\n name: 'myapp',\n streams: [\n {\n level: 'info',\n stream: process.stdout // log INFO and above to stdout\n },\n {\n level: 'error',\n path: '/var/log/myapp-error.log' // log ERROR and above to a file\n }\n ]\n });\n\nMore on streams in the [Streams section](#streams) below.\n\n\n## log.child\n\nBunyan has a concept of a child logger to **specialize a logger for a\nsub-component of your application**, i.e. to create a new logger with\nadditional bound fields that will be included in its log records. A child\nlogger is created with `log.child(...)`.\n\nIn the following example, logging on a \"Wuzzle\" instance's `this.log` will\nbe exactly as on the parent logger with the addition of the `widget_type`\nfield:\n\n var bunyan = require('bunyan');\n var log = bunyan.createLogger({name: 'myapp'});\n\n function Wuzzle(options) {\n this.log = options.log.child({widget_type: 'wuzzle'});\n this.log.info('creating a wuzzle')\n }\n Wuzzle.prototype.woos = function () {\n this.log.warn('This wuzzle is woosey.')\n }\n\n log.info('start');\n var wuzzle = new Wuzzle({log: log});\n wuzzle.woos();\n log.info('done');\n\nRunning that looks like (raw):\n\n $ node myapp.js\n {\"name\":\"myapp\",\"hostname\":\"myhost\",\"pid\":34572,\"level\":30,\"msg\":\"start\",\"time\":\"2013-01-04T07:47:25.814Z\",\"v\":0}\n {\"name\":\"myapp\",\"hostname\":\"myhost\",\"pid\":34572,\"widget_type\":\"wuzzle\",\"level\":30,\"msg\":\"creating a wuzzle\",\"time\":\"2013-01-04T07:47:25.815Z\",\"v\":0}\n {\"name\":\"myapp\",\"hostname\":\"myhost\",\"pid\":34572,\"widget_type\":\"wuzzle\",\"level\":40,\"msg\":\"This wuzzle is woosey.\",\"time\":\"2013-01-04T07:47:25.815Z\",\"v\":0}\n {\"name\":\"myapp\",\"hostname\":\"myhost\",\"pid\":34572,\"level\":30,\"msg\":\"done\",\"time\":\"2013-01-04T07:47:25.816Z\",\"v\":0}\n\nAnd with the `bunyan` CLI (using the \"short\" output mode):\n\n $ node myapp.js | bunyan -o short\n 07:46:42.707Z INFO myapp: start\n 07:46:42.709Z INFO myapp: creating a wuzzle (widget_type=wuzzle)\n 07:46:42.709Z WARN myapp: This wuzzle is woosey. (widget_type=wuzzle)\n 07:46:42.709Z INFO myapp: done\n\n\nA more practical example is in the\n[node-restify](https://github.com/mcavage/node-restify) web framework.\nRestify uses Bunyan for its logging. One feature of its integration, is that\nif `server.use(restify.requestLogger())` is used, each restify request handler\nincludes a `req.log` logger that is:\n\n log.child({req_id: }, true)\n\nApps using restify can then use `req.log` and have all such log records\ninclude the unique request id (as \"req\\_id\"). Handy.\n\n\n## Serializers\n\nBunyan has a concept of **\"serializers\" to produce a JSON-able object from a\nJavaScript object**, so you can easily do the following:\n\n log.info({req: }, 'something about handling this request');\n\nSerializers is a mapping of log record field name, \"req\" in this example, to\na serializer function. That looks like this:\n\n function reqSerializer(req) {\n return {\n method: req.method,\n url: req.url,\n headers: req.headers\n }\n }\n var log = bunyan.createLogger({\n name: 'myapp',\n serializers: {\n req: reqSerializer\n }\n });\n\nOr this:\n\n var log = bunyan.createLogger({\n name: 'myapp',\n serializers: {req: bunyan.stdSerializers.req}\n });\n\nbecause Buyan includes a small set of standard serializers. To use all the\nstandard serializers you can use:\n\n var log = bunyan.createLogger({\n ...\n serializers: bunyan.stdSerializers\n });\n\n**Note**: Your own serializers should never throw, otherwise you'll get an\nugly message on stderr from Bunyan (along with the traceback) and the field\nin your log record will be replaced with a short error message.\n\n\n## src\n\nThe **source file, line and function of the log call site** can be added to\nlog records by using the `src: true` config option:\n\n var log = bunyan.createLogger({src: true, ...});\n\nThis adds the call source info with the 'src' field, like this:\n\n {\n \"name\": \"src-example\",\n \"hostname\": \"banana.local\",\n \"pid\": 123,\n \"component\": \"wuzzle\",\n \"level\": 4,\n \"msg\": \"This wuzzle is woosey.\",\n \"time\": \"2012-02-06T04:19:35.605Z\",\n \"src\": {\n \"file\": \"/Users/trentm/tm/node-bunyan/examples/src.js\",\n \"line\": 20,\n \"func\": \"Wuzzle.woos\"\n },\n \"v\": 0\n }\n\n**WARNING: Determining the call source info is slow. Never use this option\nin production.**\n\n\n# Levels\n\nThe log levels in bunyan are as follows. The level descriptions are best\npractice *opinions*.\n\n- \"fatal\" (60): The service/app is going to stop or become unusable now.\n An operator should definitely look into this soon.\n- \"error\" (50): Fatal for a particular request, but the service/app continues\n servicing other requests. An operator should look at this soon(ish).\n- \"warn\" (40): A note on something that should probably be looked at by an\n operator eventually.\n- \"info\" (30): Detail on regular operation.\n- \"debug\" (20): Anything else, i.e. too verbose to be included in \"info\" level.\n- \"trace\" (10): Logging from external libraries used by your app or *very*\n detailed application logging.\n\nSuggestions: Use \"debug\" sparingly. Information that will be useful to debug\nerrors *post mortem* should usually be included in \"info\" messages if it's\ngenerally relevant or else with the corresponding \"error\" event. Don't rely\non spewing mostly irrelevant debug messages all the time and sifting through\nthem when an error occurs.\n\nIntegers are used for the actual level values (10 for \"trace\", ..., 60 for\n\"fatal\") and constants are defined for the (bunyan.TRACE ... bunyan.DEBUG).\nThe lowercase level names are aliases supported in the API.\n\nHere is the API for changing levels in an existing logger:\n\n log.level() -> INFO // gets current level (lowest level of all streams)\n\n log.level(INFO) // set all streams to level INFO\n log.level(\"info\") // set all streams to level INFO\n\n log.levels() -> [DEBUG, INFO] // get array of levels of all streams\n log.levels(0) -> DEBUG // get level of stream at index 0\n log.levels(\"foo\") // get level of stream with name \"foo\"\n\n log.levels(0, INFO) // set level of stream 0 to INFO\n log.levels(0, \"info\") // can use \"info\" et al aliases\n log.levels(\"foo\", WARN) // set stream named \"foo\" to WARN\n\n\n\n# Log Record Fields\n\nThis section will describe *rules* for the Bunyan log format: field names,\nfield meanings, required fields, etc. However, a Bunyan library doesn't\nstrictly enforce all these rules while records are being emitted. For example,\nBunyan will add a `time` field with the correct format to your log records,\nbut you can specify your own. It is the caller's responsibility to specify\nthe appropriate format.\n\nThe reason for the above leniency is because IMO logging a message should\nnever break your app. This leads to this rule of logging: **a thrown\nexception from `log.info(...)` or equivalent (other than for calling with the\nincorrect signature) is always a bug in Bunyan.**\n\n\nA typical Bunyan log record looks like this:\n\n {\"name\":\"myserver\",\"hostname\":\"banana.local\",\"pid\":123,\"req\":{\"method\":\"GET\",\"url\":\"/path?q=1#anchor\",\"headers\":{\"x-hi\":\"Mom\",\"connection\":\"close\"}},\"level\":3,\"msg\":\"start request\",\"time\":\"2012-02-03T19:02:46.178Z\",\"v\":0}\n\nPretty-printed:\n\n {\n \"name\": \"myserver\",\n \"hostname\": \"banana.local\",\n \"pid\": 123,\n \"req\": {\n \"method\": \"GET\",\n \"url\": \"/path?q=1#anchor\",\n \"headers\": {\n \"x-hi\": \"Mom\",\n \"connection\": \"close\"\n },\n \"remoteAddress\": \"120.0.0.1\",\n \"remotePort\": 51244\n },\n \"level\": 3,\n \"msg\": \"start request\",\n \"time\": \"2012-02-03T19:02:57.534Z\",\n \"v\": 0\n }\n\n\nCore fields:\n\n- `v`: Required. Integer. Added by Bunyan. Cannot be overriden.\n This is the Bunyan log format version (`require('bunyan').LOG_VERSION`).\n The log version is a single integer. `0` is until I release a version\n \"1.0.0\" of node-bunyan. Thereafter, starting with `1`, this will be\n incremented if there is any backward incompatible change to the log record\n format. Details will be in \"CHANGES.md\" (the change log).\n- `level`: Required. Integer. Added by Bunyan. Cannot be overriden.\n See the \"Levels\" section.\n- `name`: Required. String. Provided at Logger creation.\n You must specify a name for your logger when creating it. Typically this\n is the name of the service/app using Bunyan for logging.\n- `hostname`: Required. String. Provided or determined at Logger creation.\n You can specify your hostname at Logger creation or it will be retrieved\n vi `os.hostname()`.\n- `pid`: Required. Integer. Filled in automatically at Logger creation.\n- `time`: Required. String. Added by Bunyan. Can be overriden.\n The date and time of the event in [ISO 8601\n Extended Format](http://en.wikipedia.org/wiki/ISO_8601) format and in UTC,\n as from\n [`Date.toISOString()`](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/toISOString).\n- `msg`: Required. String.\n Every `log.debug(...)` et al call must provide a log message.\n- `src`: Optional. Object giving log call source info. This is added\n automatically by Bunyan if the \"src: true\" config option is given to the\n Logger. Never use in production as this is really slow.\n\n\nGo ahead and add more fields, and nested ones are fine (and recommended) as\nwell. This is why we're using JSON. Some suggestions and best practices\nfollow (feedback from actual users welcome).\n\n\nRecommended/Best Practice Fields:\n\n- `err`: Object. A caught JS exception. Log that thing with `log.info(err)`\n to get:\n\n ...\n \"err\": {\n \"message\": \"boom\",\n \"name\": \"TypeError\",\n \"stack\": \"TypeError: boom\\n at Object. ...\"\n },\n \"msg\": \"boom\",\n ...\n\n Or use the `bunyan.stdSerializers.err` serializer in your Logger and\n do this `log.error({err: err}, \"oops\")`. See \"examples/err.js\".\n\n- `req_id`: String. A request identifier. Including this field in all logging\n tied to handling a particular request to your server is strongly suggested.\n This allows post analysis of logs to easily collate all related logging\n for a request. This really shines when you have a SOA with multiple services\n and you carry a single request ID from the top API down through all APIs\n (as [node-restify](https://github.com/mcavage/node-restify) facilitates\n with its 'Request-Id' header).\n\n- `req`: An HTTP server request. Bunyan provides `bunyan.stdSerializers.req`\n to serialize a request with a suggested set of keys. Example:\n\n {\n \"method\": \"GET\",\n \"url\": \"/path?q=1#anchor\",\n \"headers\": {\n \"x-hi\": \"Mom\",\n \"connection\": \"close\"\n },\n \"remoteAddress\": \"120.0.0.1\",\n \"remotePort\": 51244\n }\n\n- `res`: An HTTP server response. Bunyan provides `bunyan.stdSerializers.res`\n to serialize a response with a suggested set of keys. Example:\n\n {\n \"statusCode\": 200,\n \"header\": \"HTTP/1.1 200 OK\\r\\nContent-Type: text/plain\\r\\nConnection: keep-alive\\r\\nTransfer-Encoding: chunked\\r\\n\\r\\n\"\n }\n\n\nOther fields to consider:\n\n- `req.username`: Authenticated user (or for a 401, the user attempting to\n auth).\n- Some mechanism to calculate response latency. \"restify\" users will have\n a \"X-Response-Time\" header. A `latency` custom field would be fine.\n- `req.body`: If you know that request bodies are small (common in APIs,\n for example), then logging the request body is good.\n\n\n# Streams\n\nA \"stream\" is Bunyan's name for an output for log messages (the equivalent\nto a log4j Appender). Ultimately Bunyan uses a\n[Writable Stream](http://nodejs.org/docs/latest/api/all.html#writable_Stream)\ninterface, but there are some additional attributes used to create and\nmanage the stream. A Bunyan Logger instance has one or more streams.\nIn general streams are specified with the \"streams\" option:\n\n var bunyan = require('bunyan');\n var log = bunyan.createLogger({\n name: \"foo\",\n streams: [\n {\n stream: process.stderr,\n level: \"debug\"\n },\n ...\n ]\n });\n\nFor convenience, if there is only one stream, it can specified with the\n\"stream\" and \"level\" options (internally converted to a `Logger.streams`).\n\n var log = bunyan.createLogger({\n name: \"foo\",\n stream: process.stderr,\n level: \"debug\"\n });\n\nNote that \"file\" streams do not support this shortcut (partly for historical\nreasons and partly to not make it difficult to add a literal \"path\" field\non log records).\n\nIf neither \"streams\" nor \"stream\" are specified, the default is a stream of\ntype \"stream\" emitting to `process.stdout` at the \"info\" level.\n\n\n## stream errors\n\nBunyan re-emits error events from the created `WriteStream`. So you can\ndo this:\n\n var log = bunyan.createLogger({name: 'mylog', streams: [{path: LOG_PATH}]});\n log.on('error', function (err, stream) {\n // Handle stream write or create error here.\n });\n\nNote: This is **not** that same as a log record at the \"error\" level as\nproduced by `log.error(...)`.\n\n\n## stream type: `stream`\n\nA `type === 'stream'` is a plain ol' node.js [Writable\nStream](http://nodejs.org/docs/latest/api/all.html#writable_Stream). A\n\"stream\" (the writeable stream) field is required. E.g.: `process.stdout`,\n`process.stderr`.\n\n var log = bunyan.createLogger({\n name: 'foo',\n streams: [{\n stream: process.stderr\n // `type: 'stream'` is implied\n }]\n });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    FieldRequired?DefaultDescription
    streamYes-A \"Writable Stream\", e.g. a std handle or an open file write stream.
    typeNon/a`type == 'stream'` is implied if the `stream` field is given.
    levelNoinfoThe level at which logging to this stream is enabled. If not\nspecified it defaults to \"info\". If specified this can be one of the\nlevel strings (\"trace\", \"debug\", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).
    nameNo-A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream \"name\" isn't\nused for anything else.
    \n\n\n## stream type: `file`\n\nA `type === 'file'` stream requires a \"path\" field. Bunyan will open this\nfile for appending. E.g.:\n\n var log = bunyan.createLogger({\n name: 'foo',\n streams: [{\n path: '/var/log/foo.log',\n // `type: 'file'` is implied\n }]\n });\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    FieldRequired?DefaultDescription
    pathYes-A file path to which to log.
    typeNon/a`type == 'file'` is implied if the `path` field is given.
    levelNoinfoThe level at which logging to this stream is enabled. If not\nspecified it defaults to \"info\". If specified this can be one of the\nlevel strings (\"trace\", \"debug\", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).
    nameNo-A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream \"name\" isn't\nused for anything else.
    \n\n\n## stream type: `rotating-file`\n\n**WARNING:** Users of Bunyan's `rotating-file` should (a) be using at least\nbunyan 0.23.1 (with the fix for [this\nissue](https://github.com/trentm/node-bunyan/pull/97)), and (b) should use at\nleast node 0.10 (node 0.8 does not support the `unref()` method on\n`setTimeout(...)` needed for the mentioned fix). The symptom is that process\ntermination will hang for up to a full rotation period.\n\n\nA `type === 'rotating-file'` is a file stream that handles file automatic\nrotation.\n\n var log = bunyan.createLogger({\n name: 'foo',\n streams: [{\n type: 'rotating-file',\n path: '/var/log/foo.log',\n period: '1d', // daily rotation\n count: 3 // keep 3 back copies\n }]\n });\n\nThis will rotate '/var/log/foo.log' every day (at midnight) to:\n\n /var/log/foo.log.0 # yesterday\n /var/log/foo.log.1 # 1 day ago\n /var/log/foo.log.2 # 2 days ago\n\n*Currently*, there is no support for providing a template for the rotated\nfiles, or for rotating when the log reaches a threshold size.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
    FieldRequired?DefaultDescription
    typeYes-\"rotating-file\"
    pathYes-A file path to which to log. Rotated files will be \"$path.0\",\n\"$path.1\", ...
    periodNo1dThe period at which to rotate. This is a string of the format\n\"$number$scope\" where \"$scope\" is one of \"h\" (hours), \"d\" (days), \"w\" (weeks),\n\"m\" (months), \"y\" (years). Or one of the following names can be used\n\"hourly\" (means 1h), \"daily\" (1d), \"weekly\" (1w), \"monthly\" (1m),\n\"yearly\" (1y). Rotation is done at the start of the scope: top of the hour (h),\nmidnight (d), start of Sunday (w), start of the 1st of the month (m),\nstart of Jan 1st (y).
    countNo10The number of rotated files to keep.
    levelNoinfoThe level at which logging to this stream is enabled. If not\nspecified it defaults to \"info\". If specified this can be one of the\nlevel strings (\"trace\", \"debug\", ...) or constants (`bunyan.TRACE`,\n`bunyan.DEBUG`, ...).
    nameNo-A name for this stream. This may be useful for usage of `log.level(NAME,\nLEVEL)`. See the [Levels section](#levels) for details. A stream \"name\" isn't\nused for anything else.
    \n\n\n**Note on log rotation**: Often you may be using external log rotation utilities\nlike `logrotate` on Linux or `logadm` on SmartOS/Illumos. In those cases, unless\nyour are ensuring \"copy and truncate\" sematics (via `copytruncate` with\nlogrotate or `-c` with logadm) then the fd for your 'file' stream will change.\nYou can tell bunyan to reopen the file stream with code like this in your\napp:\n\n var log = bunyan.createLogger(...);\n ...\n process.on('SIGUSR2', function () {\n log.reopenFileStreams();\n });\n\nwhere you'd configure your log rotation to send SIGUSR2 (or some other signal)\nto your process. Any other mechanism to signal your app to run\n`log.reopenFileStreams()` would work as well.\n\n\n## stream type: `raw`\n\n- `raw`: Similar to a \"stream\" writeable stream, except that the write method\n is given raw log record *Object*s instead of a JSON-stringified string.\n This can be useful for hooking on further processing to all Bunyan logging:\n pushing to an external service, a RingBuffer (see below), etc.\n\n\n\n## `raw` + RingBuffer Stream\n\nBunyan comes with a special stream called a RingBuffer which keeps the last N\nrecords in memory and does *not* write the data anywhere else. One common\nstrategy is to log 'info' and higher to a normal log file but log all records\n(including 'trace') to a ringbuffer that you can access via a debugger, or your\nown HTTP interface, or a post-mortem facility like MDB or node-panic.\n\nTo use a RingBuffer:\n\n /* Create a ring buffer that stores the last 100 records. */\n var bunyan = require('bunyan');\n var ringbuffer = new bunyan.RingBuffer({ limit: 100 });\n var log = bunyan.createLogger({\n name: 'foo',\n streams: [\n {\n level: 'info',\n stream: process.stdout\n },\n {\n level: 'trace',\n type: 'raw', // use 'raw' to get raw log record objects\n stream: ringbuffer\n }\n ]\n });\n\n log.info('hello world');\n console.log(ringbuffer.records);\n\nThis example emits:\n\n [ { name: 'foo',\n hostname: '912d2b29',\n pid: 50346,\n level: 30,\n msg: 'hello world',\n time: '2012-06-19T21:34:19.906Z',\n v: 0 } ]\n\n\n## third-party streams\n\n- syslog:\n [mcavage/node-bunyan-syslog](https://github.com/mcavage/node-bunyan-syslog)\n provides support for directing bunyan logging to a syslog server.\n\n- TODO: eventually https://github.com/trentm/node-bunyan-winston\n\n\n\n# Runtime log snooping via DTrace\n\nOn systems that support DTrace (e.g., MacOS, FreeBSD, illumos derivatives\nlike SmartOS and OmniOS), Bunyan will create a DTrace provider (`bunyan`)\nthat makes available the following probes:\n\n log-trace\n log-debug\n log-info\n log-warn\n log-error\n log-fatal\n\nEach of these probes has a single argument: the string that would be\nwritten to the log. Note that when a probe is enabled, it will\nfire whenever the corresponding function is called, even if the level of\nthe log message is less than that of any stream.\n\n\n## DTrace examples\n\nTrace all log messages coming from any Bunyan module on the system.\n(The `-x strsize=4k` is to raise dtrace's default 256 byte buffer size\nbecause log messages are longer than typical dtrace probes.)\n\n dtrace -x strsize=4k -qn 'bunyan*:::log-*{printf(\"%d: %s: %s\", pid, probefunc, copyinstr(arg0))}'\n\nTrace all log messages coming from the \"wuzzle\" component:\n\n dtrace -x strsize=4k -qn 'bunyan*:::log-*/strstr(this->str = copyinstr(arg0), \"\\\"component\\\":\\\"wuzzle\\\"\") != NULL/{printf(\"%s\", this->str)}'\n\nAggregate debug messages from process 1234, by message:\n\n dtrace -x strsize=4k -n 'bunyan1234:::log-debug{@[copyinstr(arg0)] = count()}'\n\nHave the bunyan CLI pretty-print the traced logs:\n\n dtrace -x strsize=4k -qn 'bunyan1234:::log-*{printf(\"%s\", copyinstr(arg0))}' | bunyan\n\nA convenience handle has been made for this:\n\n bunyan -p 1234\n\n\nOn systems that support the\n[`jstack`](http://dtrace.org/blogs/dap/2012/04/25/profiling-node-js/) action\nvia a node.js helper, get a stack backtrace for any debug message that\nincludes the string \"danger!\":\n\n dtrace -x strsize=4k -qn 'log-debug/strstr(copyinstr(arg0), \"danger!\") != NULL/{printf(\"\\n%s\", copyinstr(arg0)); jstack()}'\n\nOutput of the above might be:\n\n {\"name\":\"foo\",\"hostname\":\"763bf293-d65c-42d5-872b-4abe25d5c4c7.local\",\"pid\":12747,\"level\":20,\"msg\":\"danger!\",\"time\":\"2012-10-30T18:28:57.115Z\",\"v\":0}\n\n node`0x87e2010\n DTraceProviderBindings.node`usdt_fire_probe+0x32\n DTraceProviderBindings.node`_ZN4node11DTraceProbe5_fireEN2v85LocalINS1_5ValueEEE+0x32d\n DTraceProviderBindings.node`_ZN4node11DTraceProbe4FireERKN2v89ArgumentsE+0x77\n << internal code >>\n (anon) as (anon) at /root/node-bunyan/lib/bunyan.js position 40484\n << adaptor >>\n (anon) as doit at /root/my-prog.js position 360\n (anon) as list.ontimeout at timers.js position 4960\n << adaptor >>\n << internal >>\n << entry >>\n node`_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb+0x101\n node`_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb+0xcb\n node`_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE+0xf0\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE+0x11f\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE+0x66\n node`_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si+0x63\n node`uv__run_timers+0x66\n node`uv__run+0x1b\n node`uv_run+0x17\n node`_ZN4node5StartEiPPc+0x1d0\n node`main+0x1b\n node`_start+0x83\n\n node`0x87e2010\n DTraceProviderBindings.node`usdt_fire_probe+0x32\n DTraceProviderBindings.node`_ZN4node11DTraceProbe5_fireEN2v85LocalINS1_5ValueEEE+0x32d\n DTraceProviderBindings.node`_ZN4node11DTraceProbe4FireERKN2v89ArgumentsE+0x77\n << internal code >>\n (anon) as (anon) at /root/node-bunyan/lib/bunyan.js position 40484\n << adaptor >>\n (anon) as doit at /root/my-prog.js position 360\n (anon) as list.ontimeout at timers.js position 4960\n << adaptor >>\n << internal >>\n << entry >>\n node`_ZN2v88internalL6InvokeEbNS0_6HandleINS0_10JSFunctionEEENS1_INS0_6ObjectEEEiPS5_Pb+0x101\n node`_ZN2v88internal9Execution4CallENS0_6HandleINS0_6ObjectEEES4_iPS4_Pbb+0xcb\n node`_ZN2v88Function4CallENS_6HandleINS_6ObjectEEEiPNS1_INS_5ValueEEE+0xf0\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_8FunctionEEEiPNS1_INS0_5ValueEEE+0x11f\n node`_ZN4node12MakeCallbackEN2v86HandleINS0_6ObjectEEENS1_INS0_6StringEEEiPNS1_INS0_5ValueEEE+0x66\n node`_ZN4node9TimerWrap9OnTimeoutEP10uv_timer_si+0x63\n node`uv__run_timers+0x66\n node`uv__run+0x1b\n node`uv_run+0x17\n node`_ZN4node5StartEiPPc+0x1d0\n node`main+0x1b\n node`_start+0x83\n\n\n# Versioning\n\nThe scheme I follow is most succintly described by the bootstrap guys\n[here](https://github.com/twitter/bootstrap#versioning).\n\ntl;dr: All versions are `..` which will be incremented for\nbreaking backward compat and major reworks, new features without breaking\nchange, and bug fixes, respectively.\n\n\n# License\n\nMIT. See \"LICENSE.txt\".\n\n\n# See Also\n\n- Bunyan syslog support: .\n- Bunyan + Graylog2: .\n- Bunyan middleware for Express: \n- An example of a Bunyan shim to the Winston logging system:\n .\n- [Bunyan for Bash](https://github.com/trevoro/bash-bunyan).\n- TODO: `RequestCaptureStream` example from restify.\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/trentm/node-bunyan/issues" }, - "_id": "bunyan@0.21.1", - "_from": "bunyan@0.21.1" + "_id": "bunyan@0.23.1", + "_from": "bunyan@^0.23.1" } diff --git a/node_modules/restify/node_modules/bunyan/test/cli.test.js b/node_modules/restify/node_modules/bunyan/test/cli.test.js index d2ba55f..f71be5d 100644 --- a/node_modules/restify/node_modules/bunyan/test/cli.test.js +++ b/node_modules/restify/node_modules/bunyan/test/cli.test.js @@ -4,10 +4,11 @@ * Test the `bunyan` CLI. */ +var p = console.warn; var path = require('path'); var exec = require('child_process').exec; var _ = require('util').format; -var debug = console.warn; +var vasync = require('vasync'); // node-tap API if (require.cache[__dirname + '/tap4nodeunit.js']) @@ -365,6 +366,8 @@ test('robust req handling', function (t) { '[2012-08-08T10:25:47.637Z] INFO: amon-master/12859 on 9724a190-27b6-4fd8-830b-a574f839c67d: HeadAgentProbes handled: 200 (req_id=cce79d15-ffc2-487c-a4e4-e940bdaac31e, audit=true, remoteAddress=10.2.207.2, remotePort=50394, latency=3, secure=false, _audit=true, req.version=*)', ' HEAD /agentprobes?agent=ccf92af9-0b24-46b6-ab60-65095fdd3037 HTTP/1.1', ' --', + ' HTTP/1.1 200 OK', + ' --', ' route: {', ' "name": "HeadAgentProbes",', ' "version": false', @@ -378,3 +381,19 @@ test('robust req handling', function (t) { t.end(); }); }); + +// Some past crashes from issues. +test('should not crash on these', function (t) { + vasync.forEachPipeline({ + inputs: ['139.log', '144.log'], + func: function (logName, next) { + exec(_('%s %s/corpus/%s', BUNYAN, __dirname, logName), + function (err, stdout, stderr) { + next(err); + }); + } + }, function (err, results) { + t.ifError(err); + t.end(); + }); +}); diff --git a/node_modules/restify/node_modules/bunyan/test/log.test.js b/node_modules/restify/node_modules/bunyan/test/log.test.js index 77e013b..5483f68 100644 --- a/node_modules/restify/node_modules/bunyan/test/log.test.js +++ b/node_modules/restify/node_modules/bunyan/test/log.test.js @@ -4,6 +4,11 @@ * Test the `log.trace(...)`, `log.debug(...)`, ..., `log.fatal(...)` API. */ +var util = require('util'), + format = util.format, + inspect = util.inspect; +var p = console.log; + var bunyan = require('../lib/bunyan'); // node-tap API @@ -15,6 +20,8 @@ var before = tap4nodeunit.before; var test = tap4nodeunit.test; +// ---- test boolean `log.()` calls + var log1 = bunyan.createLogger({ name: 'log1', streams: [ @@ -57,5 +64,177 @@ test('log.LEVEL() -> boolean', function (t) { t.end(); }); -//TODO: -// - rest of api + +// ---- test `log.(...)` calls which various input types + +function Catcher() { + this.records = []; +} +Catcher.prototype.write = function (record) { + this.records.push(record); +} +var catcher = new Catcher(); +var log3 = new bunyan.createLogger({ + name: 'log3', + streams: [ + { + type: 'raw', + stream: catcher, + level: 'trace' + } + ] +}); + +var names = ['trace', 'debug', 'info', 'warn', 'error', 'fatal']; +var fields = {one: 'un'}; + +test('log.info(undefined, )', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, undefined, 'some message'); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, 'undefined \'some message\'', + format('log.%s msg is "some message"', lvl)); + }); + t.end(); +}); + +test('log.info(, undefined)', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, fields, undefined); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, 'undefined', + format('log.%s msg: expect "undefined", got %j', lvl, rec.msg)); + t.equal(rec.one, 'un'); + }); + t.end(); +}); + +test('log.info(null, )', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, null, 'some message'); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, 'some message', + format('log.%s msg is "some message"', lvl)); + }); + t.end(); +}); + +test('log.info(, null)', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, fields, null); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, 'null', + format('log.%s msg: expect "null", got %j', lvl, rec.msg)); + t.equal(rec.one, 'un'); + }); + t.end(); +}); + +test('log.info()', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, 'some message'); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, 'some message', + format('log.%s msg is "some message"', lvl)); + }); + t.end(); +}); + +test('log.info(, )', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, fields, 'some message'); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, 'some message', + format('log.%s msg: got %j', lvl, rec.msg)); + t.equal(rec.one, 'un'); + }); + t.end(); +}); + +test('log.info()', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, true); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, 'true', + format('log.%s msg is "true"', lvl)); + }); + t.end(); +}); + +test('log.info(, )', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, fields, true); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, 'true', + format('log.%s msg: got %j', lvl, rec.msg)); + t.equal(rec.one, 'un'); + }); + t.end(); +}); + +test('log.info()', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, 3.14); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, '3.14', + format('log.%s msg: got %j', lvl, rec.msg)); + }); + t.end(); +}); + +test('log.info(, )', function (t) { + names.forEach(function (lvl) { + log3[lvl].call(log3, fields, 3.14); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, '3.14', + format('log.%s msg: got %j', lvl, rec.msg)); + t.equal(rec.one, 'un'); + }); + t.end(); +}); + +test('log.info()', function (t) { + var func = function func1() {}; + names.forEach(function (lvl) { + log3[lvl].call(log3, func); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, '[Function: func1]', + format('log.%s msg: got %j', lvl, rec.msg)); + }); + t.end(); +}); + +test('log.info(, )', function (t) { + var func = function func2() {}; + names.forEach(function (lvl) { + log3[lvl].call(log3, fields, func); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, '[Function: func2]', + format('log.%s msg: got %j', lvl, rec.msg)); + t.equal(rec.one, 'un'); + }); + t.end(); +}); + +test('log.info()', function (t) { + var arr = ['a', 1, {two: 'deux'}]; + names.forEach(function (lvl) { + log3[lvl].call(log3, arr); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, format(arr), + format('log.%s msg: got %j', lvl, rec.msg)); + }); + t.end(); +}); + +test('log.info(, )', function (t) { + var arr = ['a', 1, {two: 'deux'}]; + names.forEach(function (lvl) { + log3[lvl].call(log3, fields, arr); + var rec = catcher.records[catcher.records.length - 1]; + t.equal(rec.msg, format(arr), + format('log.%s msg: got %j', lvl, rec.msg)); + t.equal(rec.one, 'un'); + }); + t.end(); +}); diff --git a/node_modules/restify/node_modules/deep-equal/README.markdown b/node_modules/restify/node_modules/deep-equal/README.markdown deleted file mode 100644 index c3293d3..0000000 --- a/node_modules/restify/node_modules/deep-equal/README.markdown +++ /dev/null @@ -1,55 +0,0 @@ -deep-equal -========== - -Node's `assert.deepEqual() algorithm` as a standalone module. - -example -======= - -``` js -var equal = require('deep-equal'); -console.dir([ - equal( - { a : [ 2, 3 ], b : [ 4 ] }, - { a : [ 2, 3 ], b : [ 4 ] } - ), - equal( - { x : 5, y : [6] }, - { x : 5, y : 6 } - ) -]); -``` - -methods -======= - -var deepEqual = require('deep-equal') - -deepEqual(a, b) ---------------- - -Compare objects `a` and `b`, returning whether they are equal according to a -recursive equality algorithm. - -install -======= - -With [npm](http://npmjs.org) do: - -``` -npm install deep-equal -``` - -test -==== - -With [npm](http://npmjs.org) do: - -``` -npm test -``` - -license -======= - -MIT. Derived largely from node's assert module. diff --git a/node_modules/restify/node_modules/deep-equal/index.js b/node_modules/restify/node_modules/deep-equal/index.js index e4e37be..fd2c4f3 100644 --- a/node_modules/restify/node_modules/deep-equal/index.js +++ b/node_modules/restify/node_modules/deep-equal/index.js @@ -1,14 +1,9 @@ var pSlice = Array.prototype.slice; -var Object_keys = typeof Object.keys === 'function' - ? Object.keys - : function (obj) { - var keys = []; - for (var key in obj) keys.push(key); - return keys; - } -; +var objectKeys = require('./lib/keys.js'); +var isArguments = require('./lib/is_arguments.js'); -var deepEqual = module.exports = function (actual, expected) { +var deepEqual = module.exports = function (actual, expected, opts) { + if (!opts) opts = {}; // 7.1. All identical values are equivalent, as determined by ===. if (actual === expected) { return true; @@ -19,7 +14,7 @@ var deepEqual = module.exports = function (actual, expected) { // 7.3. Other pairs that do not both pass typeof value == 'object', // equivalence is determined by ==. } else if (typeof actual != 'object' && typeof expected != 'object') { - return actual == expected; + return opts.strict ? actual === expected : actual == expected; // 7.4. For all other Object pairs, including Array objects, equivalence is // determined by having the same number of owned properties (as verified @@ -28,7 +23,7 @@ var deepEqual = module.exports = function (actual, expected) { // corresponding key, and an identical 'prototype' property. Note: this // accounts for both named and indexed properties on Arrays. } else { - return objEquiv(actual, expected); + return objEquiv(actual, expected, opts); } } @@ -36,11 +31,17 @@ function isUndefinedOrNull(value) { return value === null || value === undefined; } -function isArguments(object) { - return Object.prototype.toString.call(object) == '[object Arguments]'; +function isBuffer (x) { + if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false; + if (typeof x.copy !== 'function' || typeof x.slice !== 'function') { + return false; + } + if (x.length > 0 && typeof x[0] !== 'number') return false; + return true; } -function objEquiv(a, b) { +function objEquiv(a, b, opts) { + var i, key; if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) return false; // an identical 'prototype' property. @@ -53,12 +54,21 @@ function objEquiv(a, b) { } a = pSlice.call(a); b = pSlice.call(b); - return deepEqual(a, b); + return deepEqual(a, b, opts); + } + if (isBuffer(a)) { + if (!isBuffer(b)) { + return false; + } + if (a.length !== b.length) return false; + for (i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false; + } + return true; } try { - var ka = Object_keys(a), - kb = Object_keys(b), - key, i; + var ka = objectKeys(a), + kb = objectKeys(b); } catch (e) {//happens when one is a string literal and the other isn't return false; } @@ -78,7 +88,7 @@ function objEquiv(a, b) { //~~~possibly expensive deep test for (i = ka.length - 1; i >= 0; i--) { key = ka[i]; - if (!deepEqual(a[key], b[key])) return false; + if (!deepEqual(a[key], b[key], opts)) return false; } return true; } diff --git a/node_modules/restify/node_modules/deep-equal/package.json b/node_modules/restify/node_modules/deep-equal/package.json index 0916478..2a5497f 100644 --- a/node_modules/restify/node_modules/deep-equal/package.json +++ b/node_modules/restify/node_modules/deep-equal/package.json @@ -1,6 +1,6 @@ { "name": "deep-equal", - "version": "0.0.0", + "version": "0.2.1", "description": "node's assert.deepEqual algorithm", "main": "index.js", "directories": { @@ -9,10 +9,10 @@ "test": "test" }, "scripts": { - "test": "tap test/*.js" + "test": "tape test/*.js" }, "devDependencies": { - "tap": "0.0.x" + "tape": "~2.3.2" }, "repository": { "type": "git", @@ -28,15 +28,38 @@ "email": "mail@substack.net", "url": "http://substack.net" }, - "license": "MIT/X11", - "engine": { - "node": ">=0.4" + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": { + "ie": [ + 6, + 7, + 8, + 9 + ], + "ff": [ + 3.5, + 10, + 15 + ], + "chrome": [ + 10, + 22 + ], + "safari": [ + 5.1 + ], + "opera": [ + 12 + ] + } }, - "readme": "deep-equal\n==========\n\nNode's `assert.deepEqual() algorithm` as a standalone module.\n\nexample\n=======\n\n``` js\nvar equal = require('deep-equal');\nconsole.dir([\n equal(\n { a : [ 2, 3 ], b : [ 4 ] },\n { a : [ 2, 3 ], b : [ 4 ] }\n ),\n equal(\n { x : 5, y : [6] },\n { x : 5, y : 6 }\n )\n]);\n```\n\nmethods\n=======\n\nvar deepEqual = require('deep-equal')\n\ndeepEqual(a, b)\n---------------\n\nCompare objects `a` and `b`, returning whether they are equal according to a\nrecursive equality algorithm.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install deep-equal\n```\n\ntest\n====\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm test\n```\n\nlicense\n=======\n\nMIT. Derived largely from node's assert module.\n", - "readmeFilename": "README.markdown", + "readme": "# deep-equal\n\nNode's `assert.deepEqual() algorithm` as a standalone module.\n\nThis module is around [5 times faster](https://gist.github.com/2790507)\nthan wrapping `assert.deepEqual()` in a `try/catch`.\n\n[![browser support](https://ci.testling.com/substack/node-deep-equal.png)](https://ci.testling.com/substack/node-deep-equal)\n\n[![build status](https://secure.travis-ci.org/substack/node-deep-equal.png)](https://travis-ci.org/substack/node-deep-equal)\n\n# example\n\n``` js\nvar equal = require('deep-equal');\nconsole.dir([\n equal(\n { a : [ 2, 3 ], b : [ 4 ] },\n { a : [ 2, 3 ], b : [ 4 ] }\n ),\n equal(\n { x : 5, y : [6] },\n { x : 5, y : 6 }\n )\n]);\n```\n\n# methods\n\n``` js\nvar deepEqual = require('deep-equal')\n```\n\n## deepEqual(a, b, opts)\n\nCompare objects `a` and `b`, returning whether they are equal according to a\nrecursive equality algorithm.\n\nIf `opts.strict` is `true`, use strict equality (`===`) to compare leaf nodes.\nThe default is to use coercive equality (`==`) because that's how\n`assert.deepEqual()` works by default.\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install deep-equal\n```\n\n# test\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm test\n```\n\n# license\n\nMIT. Derived largely from node's assert module.\n", + "readmeFilename": "readme.markdown", "bugs": { "url": "https://github.com/substack/node-deep-equal/issues" }, - "_id": "deep-equal@0.0.0", - "_from": "deep-equal@0.0.0" + "_id": "deep-equal@0.2.1", + "_from": "deep-equal@^0.2.1" } diff --git a/node_modules/restify/node_modules/deep-equal/test/cmp.js b/node_modules/restify/node_modules/deep-equal/test/cmp.js index 8418f0f..a10186a 100644 --- a/node_modules/restify/node_modules/deep-equal/test/cmp.js +++ b/node_modules/restify/node_modules/deep-equal/test/cmp.js @@ -1,5 +1,7 @@ -var test = require('tap').test; +var test = require('tape'); var equal = require('../'); +var isArguments = require('../lib/is_arguments.js'); +var objectKeys = require('../lib/keys.js'); test('equal', function (t) { t.ok(equal( @@ -16,3 +18,67 @@ test('not equal', function (t) { )); t.end(); }); + +test('nested nulls', function (t) { + t.ok(equal([ null, null, null ], [ null, null, null ])); + t.end(); +}); + +test('strict equal', function (t) { + t.notOk(equal( + [ { a: 3 }, { b: 4 } ], + [ { a: '3' }, { b: '4' } ], + { strict: true } + )); + t.end(); +}); + +test('non-objects', function (t) { + t.ok(equal(3, 3)); + t.ok(equal('beep', 'beep')); + t.ok(equal('3', 3)); + t.notOk(equal('3', 3, { strict: true })); + t.notOk(equal('3', [3])); + t.end(); +}); + +test('arguments class', function (t) { + t.ok(equal( + (function(){return arguments})(1,2,3), + (function(){return arguments})(1,2,3), + "compares arguments" + )); + t.notOk(equal( + (function(){return arguments})(1,2,3), + [1,2,3], + "differenciates array and arguments" + )); + t.end(); +}); + +test('test the arguments shim', function (t) { + t.ok(isArguments.supported((function(){return arguments})())); + t.notOk(isArguments.supported([1,2,3])); + + t.ok(isArguments.unsupported((function(){return arguments})())); + t.notOk(isArguments.unsupported([1,2,3])); + + t.end(); +}); + +test('test the keys shim', function (t) { + t.deepEqual(objectKeys.shim({ a: 1, b : 2 }), [ 'a', 'b' ]); + t.end(); +}); + +test('dates', function (t) { + var d0 = new Date(1387585278000); + var d1 = new Date('Fri Dec 20 2013 16:21:18 GMT-0800 (PST)'); + t.ok(equal(d0, d1)); + t.end(); +}); + +test('buffers', function (t) { + t.ok(equal(Buffer('xyz'), Buffer('xyz'))); + t.end(); +}); diff --git a/node_modules/restify/node_modules/dtrace-provider/build/DTraceProviderBindings.target.mk b/node_modules/restify/node_modules/dtrace-provider/build/DTraceProviderBindings.target.mk deleted file mode 100644 index 5d08c7d..0000000 --- a/node_modules/restify/node_modules/dtrace-provider/build/DTraceProviderBindings.target.mk +++ /dev/null @@ -1,164 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := DTraceProviderBindings -DEFS_Debug := \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' \ - '-DDEBUG' \ - '-D_DEBUG' - -# Flags passed to all source files. -CFLAGS_Debug := \ - -O0 \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Debug := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Debug := \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Debug := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Debug := - -INCS_Debug := \ - -I/Users/rossgallagher/.node-gyp/0.10.10/src \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include \ - -I$(srcdir)/libusdt - -DEFS_Release := \ - '-D_DARWIN_USE_64_BIT_INODE=1' \ - '-D_LARGEFILE_SOURCE' \ - '-D_FILE_OFFSET_BITS=64' \ - '-DBUILDING_NODE_EXTENSION' - -# Flags passed to all source files. -CFLAGS_Release := \ - -Os \ - -gdwarf-2 \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -Wall \ - -Wendif-labels \ - -W \ - -Wno-unused-parameter - -# Flags passed to only C files. -CFLAGS_C_Release := \ - -fno-strict-aliasing - -# Flags passed to only C++ files. -CFLAGS_CC_Release := \ - -fno-rtti \ - -fno-exceptions \ - -fno-threadsafe-statics \ - -fno-strict-aliasing - -# Flags passed to only ObjC files. -CFLAGS_OBJC_Release := - -# Flags passed to only ObjC++ files. -CFLAGS_OBJCC_Release := - -INCS_Release := \ - -I/Users/rossgallagher/.node-gyp/0.10.10/src \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include \ - -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include \ - -I$(srcdir)/libusdt - -OBJS := \ - $(obj).target/$(TARGET)/dtrace_provider.o \ - $(obj).target/$(TARGET)/dtrace_probe.o \ - $(obj).target/$(TARGET)/dtrace_argument.o - -# Add to the list of files we specially track dependencies for. -all_deps += $(OBJS) - -# Make sure our dependencies are built before any of us. -$(OBJS): | $(obj).target/libusdt.stamp - -# CFLAGS et al overrides must be target-local. -# See "Target-specific Variable Values" in the GNU Make manual. -$(OBJS): TOOLSET := $(TOOLSET) -$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) -$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE)) -$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)) - -# Suffix rules, putting all outputs into $(obj). - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# Try building from generated source, too. - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%.cc FORCE_DO_CMD - @$(call do_cmd,cxx,1) - -# End of this set of suffix rules -### Rules for final target. -LDFLAGS_Debug := \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) \ - -install_name @rpath/DTraceProviderBindings.node - -LIBTOOLFLAGS_Debug := \ - -Wl,-search_paths_first - -LDFLAGS_Release := \ - -Wl,-search_paths_first \ - -mmacosx-version-min=10.5 \ - -arch x86_64 \ - -L$(builddir) \ - -install_name @rpath/DTraceProviderBindings.node - -LIBTOOLFLAGS_Release := \ - -Wl,-search_paths_first - -LIBS := \ - -undefined dynamic_lookup \ - -L/Users/rossgallagher/Development/Restify-oauth/node_modules/restify/node_modules/dtrace-provider/libusdt -l usdt - -$(builddir)/DTraceProviderBindings.node: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE)) -$(builddir)/DTraceProviderBindings.node: LIBS := $(LIBS) -$(builddir)/DTraceProviderBindings.node: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE)) -$(builddir)/DTraceProviderBindings.node: TOOLSET := $(TOOLSET) -$(builddir)/DTraceProviderBindings.node: $(OBJS) FORCE_DO_CMD - $(call do_cmd,solink_module) - -all_deps += $(builddir)/DTraceProviderBindings.node -# Add target alias -.PHONY: DTraceProviderBindings -DTraceProviderBindings: $(builddir)/DTraceProviderBindings.node - -# Short alias for building this executable. -.PHONY: DTraceProviderBindings.node -DTraceProviderBindings.node: $(builddir)/DTraceProviderBindings.node - -# Add executable to "all" target. -.PHONY: all -all: $(builddir)/DTraceProviderBindings.node - diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Makefile b/node_modules/restify/node_modules/dtrace-provider/build/Makefile index 7c24a8d..3f923bb 100644 --- a/node_modules/restify/node_modules/dtrace-provider/build/Makefile +++ b/node_modules/restify/node_modules/dtrace-provider/build/Makefile @@ -49,7 +49,7 @@ all_deps := # export LINK=g++ # # This will allow make to invoke N linker processes as specified in -jN. -LINK ?= ./gyp-mac-tool flock $(builddir)/linker.lock $(CXX) +LINK ?= flock $(builddir)/linker.lock $(CXX.target) CC.target ?= $(CC) CFLAGS.target ?= $(CFLAGS) @@ -134,34 +134,6 @@ cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $ quiet_cmd_cxx = CXX($(TOOLSET)) $@ cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_objc = CXX($(TOOLSET)) $@ -cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< - -quiet_cmd_objcxx = CXX($(TOOLSET)) $@ -cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# Commands for precompiled header files. -quiet_cmd_pch_c = CXX($(TOOLSET)) $@ -cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ -cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< -quiet_cmd_pch_m = CXX($(TOOLSET)) $@ -cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< -quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ -cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< - -# gyp-mac-tool is written next to the root Makefile by gyp. -# Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd -# already. -quiet_cmd_mac_tool = MACTOOL $(4) $< -cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" - -quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ -cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) - -quiet_cmd_infoplist = INFOPLIST $@ -cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" - quiet_cmd_touch = TOUCH $@ cmd_touch = touch $@ @@ -169,21 +141,39 @@ quiet_cmd_copy = COPY $@ # send stderr to /dev/null to ignore messages when linking directories. cmd_copy = rm -rf "$@" && cp -af "$<" "$@" -quiet_cmd_alink = LIBTOOL-STATIC $@ -cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^) +quiet_cmd_alink = AR($(TOOLSET)) $@ +cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) +quiet_cmd_alink_thin = AR($(TOOLSET)) $@ +cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) + +# Due to circular dependencies between libraries :(, we wrap the +# special "figure out circular dependencies" flags around the entire +# input list during linking. quiet_cmd_link = LINK($(TOOLSET)) $@ -cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) +cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS) -# TODO(thakis): Find out and document the difference between shared_library and -# loadable_module on mac. +# We support two kinds of shared objects (.so): +# 1) shared_library, which is just bundling together many dependent libraries +# into a link line. +# 2) loadable_module, which is generating a module intended for dlopen(). +# +# They differ only slightly: +# In the former case, we want to package all dependent code into the .so. +# In the latter case, we want to package just the API exposed by the +# outermost module. +# This means shared_library uses --whole-archive, while loadable_module doesn't. +# (Note that --whole-archive is incompatible with the --start-group used in +# normal linking.) + +# Other shared-object link notes: +# - Set SONAME to the library filename so our binaries don't reference +# the local, absolute paths used on the link command-line. quiet_cmd_solink = SOLINK($(TOOLSET)) $@ -cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) +cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) -# TODO(thakis): The solink_module rule is likely wrong. Xcode seems to pass -# -bundle -single_module here (for osmesa.so). quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ -cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) +cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS) # Define an escape_quotes function to escape single quotes. @@ -222,15 +212,14 @@ command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ # $| -- order-only dependencies prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) -# Helper that executes all postbuilds, and deletes the output file when done -# if any of the postbuilds failed. +# Helper that executes all postbuilds until one fails. define do_postbuilds @E=0;\ for p in $(POSTBUILDS); do\ eval $$p;\ - F=$$?;\ - if [ $$F -ne 0 ]; then\ - E=$$F;\ + E=$$?;\ + if [ $$E -ne 0 ]; then\ + break;\ fi;\ done;\ if [ $$E -ne 0 ]; then\ @@ -249,7 +238,7 @@ define do_cmd $(if $(or $(command_changed),$(prereq_changed)), @$(call exact_echo, $($(quiet)cmd_$(1))) @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" - $(if $(findstring flock,$(word 2,$(cmd_$1))), + $(if $(findstring flock,$(word 1,$(cmd_$1))), @$(cmd_$(1)) @echo " $(quiet_cmd_$(1)): Finished", @$(cmd_$(1)) @@ -287,10 +276,6 @@ $(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD @$(call do_cmd,cxx,1) $(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(srcdir)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) $(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD @$(call do_cmd,cc,1) $(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD @@ -305,10 +290,6 @@ $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD @$(call do_cmd,cxx,1) $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD @$(call do_cmd,cc,1) $(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD @@ -322,10 +303,6 @@ $(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD @$(call do_cmd,cxx,1) $(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD @$(call do_cmd,cxx,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.m FORCE_DO_CMD - @$(call do_cmd,objc,1) -$(obj).$(TOOLSET)/%.o: $(obj)/%.mm FORCE_DO_CMD - @$(call do_cmd,objcxx,1) $(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD @$(call do_cmd,cc,1) $(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD @@ -334,18 +311,13 @@ $(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ $(findstring $(join ^,$(prefix)),\ - $(join ^,DTraceProviderBindings.target.mk)))),) - include DTraceProviderBindings.target.mk -endif -ifeq ($(strip $(foreach prefix,$(NO_LOAD),\ - $(findstring $(join ^,$(prefix)),\ - $(join ^,libusdt.target.mk)))),) - include libusdt.target.mk + $(join ^,DTraceProviderStub.target.mk)))),) + include DTraceProviderStub.target.mk endif quiet_cmd_regen_makefile = ACTION Regenerating $@ -cmd_regen_makefile = /usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." -I/Users/rossgallagher/Development/Restify-oauth/node_modules/restify/node_modules/dtrace-provider/build/config.gypi -I/usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/Users/rossgallagher/.node-gyp/0.10.10/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/Users/rossgallagher/.node-gyp/0.10.10" "-Dmodule_root_dir=/Users/rossgallagher/Development/Restify-oauth/node_modules/restify/node_modules/dtrace-provider" binding.gyp -Makefile: $(srcdir)/../../../../../../.node-gyp/0.10.10/common.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(srcdir)/../../../../../../../../usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi +cmd_regen_makefile = /home/geoff/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp -fmake --ignore-environment "--toplevel-dir=." -I/home/geoff/www/node-restify-oauth2-mongodb/node_modules/restify/node_modules/dtrace-provider/build/config.gypi -I/home/geoff/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/home/geoff/.node-gyp/0.10.18/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/home/geoff/.node-gyp/0.10.18" "-Dmodule_root_dir=/home/geoff/www/node-restify-oauth2-mongodb/node_modules/restify/node_modules/dtrace-provider" binding.gyp +Makefile: $(srcdir)/../../../../../../.node-gyp/0.10.18/common.gypi $(srcdir)/../../../../../../local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(call do_cmd,regen_makefile) # "all" is a concatenation of the "all" targets from all the included diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/..d b/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/..d deleted file mode 100644 index 922baab..0000000 --- a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/..d +++ /dev/null @@ -1 +0,0 @@ -cmd_. := LD_LIBRARY_PATH=/Users/rossgallagher/Development/Restify-oauth/node_modules/restify/node_modules/dtrace-provider/build/Release/lib.host:/Users/rossgallagher/Development/Restify-oauth/node_modules/restify/node_modules/dtrace-provider/build/Release/lib.target:$$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../.; sh libusdt-build.sh diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/DTraceProviderBindings.node.d b/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/DTraceProviderBindings.node.d deleted file mode 100644 index 5fd325c..0000000 --- a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/DTraceProviderBindings.node.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/DTraceProviderBindings.node := ./gyp-mac-tool flock ./Release/linker.lock c++ -shared -Wl,-search_paths_first -mmacosx-version-min=10.5 -arch x86_64 -L./Release -install_name @rpath/DTraceProviderBindings.node -o Release/DTraceProviderBindings.node Release/obj.target/DTraceProviderBindings/dtrace_provider.o Release/obj.target/DTraceProviderBindings/dtrace_probe.o Release/obj.target/DTraceProviderBindings/dtrace_argument.o -undefined dynamic_lookup -L/Users/rossgallagher/Development/Restify-oauth/node_modules/restify/node_modules/dtrace-provider/libusdt -l usdt diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_argument.o.d b/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_argument.o.d deleted file mode 100644 index e075c62..0000000 --- a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_argument.o.d +++ /dev/null @@ -1,23 +0,0 @@ -cmd_Release/obj.target/DTraceProviderBindings/dtrace_argument.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/rossgallagher/.node-gyp/0.10.10/src -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include -I../libusdt -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_argument.o.d.raw -c -o Release/obj.target/DTraceProviderBindings/dtrace_argument.o ../dtrace_argument.cc -Release/obj.target/DTraceProviderBindings/dtrace_argument.o: \ - ../dtrace_argument.cc ../dtrace_provider.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h \ - ../libusdt/usdt.h -../dtrace_argument.cc: -../dtrace_provider.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h: -../libusdt/usdt.h: diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_probe.o.d b/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_probe.o.d deleted file mode 100644 index c9416d5..0000000 --- a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_probe.o.d +++ /dev/null @@ -1,23 +0,0 @@ -cmd_Release/obj.target/DTraceProviderBindings/dtrace_probe.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/rossgallagher/.node-gyp/0.10.10/src -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include -I../libusdt -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_probe.o.d.raw -c -o Release/obj.target/DTraceProviderBindings/dtrace_probe.o ../dtrace_probe.cc -Release/obj.target/DTraceProviderBindings/dtrace_probe.o: \ - ../dtrace_probe.cc ../dtrace_provider.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h \ - ../libusdt/usdt.h -../dtrace_probe.cc: -../dtrace_provider.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h: -../libusdt/usdt.h: diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_provider.o.d b/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_provider.o.d deleted file mode 100644 index 194da99..0000000 --- a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_provider.o.d +++ /dev/null @@ -1,23 +0,0 @@ -cmd_Release/obj.target/DTraceProviderBindings/dtrace_provider.o := c++ '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/rossgallagher/.node-gyp/0.10.10/src -I/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include -I/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include -I../libusdt -Os -gdwarf-2 -mmacosx-version-min=10.5 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/DTraceProviderBindings/dtrace_provider.o.d.raw -c -o Release/obj.target/DTraceProviderBindings/dtrace_provider.o ../dtrace_provider.cc -Release/obj.target/DTraceProviderBindings/dtrace_provider.o: \ - ../dtrace_provider.cc ../dtrace_provider.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h \ - /Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h \ - /Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h \ - ../libusdt/usdt.h -../dtrace_provider.cc: -../dtrace_provider.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-unix.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/ngx-queue.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/uv/include/uv-private/uv-darwin.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8.h: -/Users/rossgallagher/.node-gyp/0.10.10/deps/v8/include/v8stdint.h: -/Users/rossgallagher/.node-gyp/0.10.10/src/node_object_wrap.h: -../libusdt/usdt.h: diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/libusdt.stamp.d b/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/libusdt.stamp.d deleted file mode 100644 index 08bacb1..0000000 --- a/node_modules/restify/node_modules/dtrace-provider/build/Release/.deps/Release/obj.target/libusdt.stamp.d +++ /dev/null @@ -1 +0,0 @@ -cmd_Release/obj.target/libusdt.stamp := touch Release/obj.target/libusdt.stamp diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/DTraceProviderBindings.node b/node_modules/restify/node_modules/dtrace-provider/build/Release/DTraceProviderBindings.node deleted file mode 100755 index 5932bd0..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/build/Release/DTraceProviderBindings.node and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/linker.lock b/node_modules/restify/node_modules/dtrace-provider/build/Release/linker.lock deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/DTraceProviderBindings/dtrace_argument.o b/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/DTraceProviderBindings/dtrace_argument.o deleted file mode 100644 index 9f72f04..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/DTraceProviderBindings/dtrace_argument.o and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/DTraceProviderBindings/dtrace_probe.o b/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/DTraceProviderBindings/dtrace_probe.o deleted file mode 100644 index 4563e7f..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/DTraceProviderBindings/dtrace_probe.o and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/DTraceProviderBindings/dtrace_provider.o b/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/DTraceProviderBindings/dtrace_provider.o deleted file mode 100644 index aa3adfb..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/DTraceProviderBindings/dtrace_provider.o and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/libusdt.stamp b/node_modules/restify/node_modules/dtrace-provider/build/Release/obj.target/libusdt.stamp deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/restify/node_modules/dtrace-provider/build/binding.Makefile b/node_modules/restify/node_modules/dtrace-provider/build/binding.Makefile index 75ed2bd..b69548f 100644 --- a/node_modules/restify/node_modules/dtrace-provider/build/binding.Makefile +++ b/node_modules/restify/node_modules/dtrace-provider/build/binding.Makefile @@ -3,4 +3,4 @@ export builddir_name ?= build/./. .PHONY: all all: - $(MAKE) libusdt DTraceProviderBindings + $(MAKE) DTraceProviderStub diff --git a/node_modules/restify/node_modules/dtrace-provider/build/config.gypi b/node_modules/restify/node_modules/dtrace-provider/build/config.gypi index 6cc584c..19e2e41 100644 --- a/node_modules/restify/node_modules/dtrace-provider/build/config.gypi +++ b/node_modules/restify/node_modules/dtrace-provider/build/config.gypi @@ -9,10 +9,10 @@ }, "variables": { "clang": 0, - "gcc_version": 42, + "gcc_version": 47, "host_arch": "x64", "node_install_npm": "true", - "node_prefix": "", + "node_prefix": "/home/geoff/local", "node_shared_cares": "false", "node_shared_http_parser": "false", "node_shared_libuv": "false", @@ -21,93 +21,94 @@ "node_shared_zlib": "false", "node_tag": "", "node_unsafe_optimizations": 0, - "node_use_dtrace": "true", + "node_use_dtrace": "false", "node_use_etw": "false", "node_use_openssl": "true", "node_use_perfctr": "false", + "node_use_systemtap": "false", "python": "/usr/bin/python", "target_arch": "x64", "v8_enable_gdbjit": 0, "v8_no_strict_aliasing": 1, - "v8_use_snapshot": "false", - "nodedir": "/Users/rossgallagher/.node-gyp/0.10.10", + "v8_use_snapshot": "true", + "nodedir": "/home/geoff/.node-gyp/0.10.18", "copy_dev_lib": "true", "standalone_static_library": 1, - "save_dev": "", - "browser": "", - "viewer": "man", - "rollback": "true", - "usage": "", - "globalignorefile": "/usr/local/etc/npmignore", - "init_author_url": "", - "shell": "/bin/bash", - "parseable": "", - "shrinkwrap": "true", - "userignorefile": "/Users/rossgallagher/.npmignore", - "cache_max": "null", - "init_author_email": "", + "cache_lock_stale": "60000", + "pre": "", "sign_git_tag": "", - "ignore": "", - "long": "", - "registry": "https://registry.npmjs.org/", - "fetch_retries": "2", - "npat": "", - "message": "%s", - "versions": "", - "globalconfig": "/usr/local/etc/npmrc", "always_auth": "", - "cache_lock_retries": "10", - "fetch_retry_mintimeout": "10000", - "proprietary_attribs": "true", - "coverage": "", - "json": "", - "pre": "", - "description": "true", - "engine_strict": "", - "https_proxy": "", - "init_module": "/Users/rossgallagher/.npm-init.js", - "userconfig": "/Users/rossgallagher/.npmrc", - "npaturl": "http://npat.npmjs.org/", - "node_version": "v0.10.10", - "user": "", - "editor": "vi", - "save": "", - "tag": "latest", - "global": "", - "optional": "true", - "username": "", + "user_agent": "node/v0.10.18 linux x64", "bin_links": "true", + "description": "true", + "fetch_retries": "2", + "init_version": "0.0.0", + "user": "1000", "force": "", - "searchopts": "", + "ignore": "", + "cache_min": "10", + "editor": "vi", + "rollback": "true", + "cache_max": "null", + "userconfig": "/home/geoff/.npmrc", + "coverage": "", + "engine_strict": "", + "init_author_name": "", + "init_author_url": "", + "tmp": "/home/geoff/tmp", + "userignorefile": "/home/geoff/.npmignore", + "yes": "", "depth": "null", + "save_dev": "", + "usage": "", + "https_proxy": "", + "onload_script": "", "rebuild_bundle": "true", + "save_bundle": "", + "shell": "/bin/bash", + "prefix": "/home/geoff/local", + "registry": "https://registry.npmjs.org/", + "browser": "", + "cache_lock_wait": "10000", + "save_optional": "", + "searchopts": "", + "versions": "", + "cache": "/home/geoff/.npm", + "npaturl": "http://npat.npmjs.org/", "searchsort": "name", - "unicode": "true", - "yes": "", + "version": "", + "viewer": "man", + "color": "true", + "fetch_retry_mintimeout": "10000", + "umask": "18", "fetch_retry_maxtimeout": "60000", + "message": "%s", + "global": "", + "link": "", + "save": "", + "unicode": "true", + "long": "", + "production": "", + "unsafe_perm": "true", + "node_version": "v0.10.18", + "tag": "latest", + "shrinkwrap": "true", + "fetch_retry_factor": "10", + "npat": "", + "proprietary_attribs": "true", "strict_ssl": "true", + "username": "", "dev": "", - "fetch_retry_factor": "10", - "group": "20", - "cache_lock_stale": "60000", - "version": "", - "cache_min": "10", - "cache": "/Users/rossgallagher/.npm", + "globalconfig": "/home/geoff/local/etc/npmrc", + "init_module": "/home/geoff/.npm-init.js", + "parseable": "", + "globalignorefile": "/home/geoff/local/etc/npmignore", + "cache_lock_retries": "10", + "group": "1000", + "init_author_email": "", "searchexclude": "", - "color": "true", - "save_optional": "", - "user_agent": "node/v0.10.10 darwin x64", - "cache_lock_wait": "10000", - "production": "", - "save_bundle": "", - "init_version": "0.0.0", - "umask": "18", "git": "git", - "init_author_name": "", - "onload_script": "", - "tmp": "/var/folders/y_/7y5c4dls6d93p_qj1nhyp_100000gn/T/", - "unsafe_perm": "true", - "link": "", - "prefix": "/usr/local" + "optional": "true", + "json": "" } } diff --git a/node_modules/restify/node_modules/dtrace-provider/build/gyp-mac-tool b/node_modules/restify/node_modules/dtrace-provider/build/gyp-mac-tool deleted file mode 100755 index bf059c3..0000000 --- a/node_modules/restify/node_modules/dtrace-provider/build/gyp-mac-tool +++ /dev/null @@ -1,211 +0,0 @@ -#!/usr/bin/env python -# Generated by gyp. Do not edit. -# Copyright (c) 2012 Google Inc. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -"""Utility functions to perform Xcode-style build steps. - -These functions are executed via gyp-mac-tool when using the Makefile generator. -""" - -import fcntl -import os -import plistlib -import re -import shutil -import string -import subprocess -import sys - - -def main(args): - executor = MacTool() - exit_code = executor.Dispatch(args) - if exit_code is not None: - sys.exit(exit_code) - - -class MacTool(object): - """This class performs all the Mac tooling steps. The methods can either be - executed directly, or dispatched from an argument list.""" - - def Dispatch(self, args): - """Dispatches a string command to a method.""" - if len(args) < 1: - raise Exception("Not enough arguments") - - method = "Exec%s" % self._CommandifyName(args[0]) - return getattr(self, method)(*args[1:]) - - def _CommandifyName(self, name_string): - """Transforms a tool name like copy-info-plist to CopyInfoPlist""" - return name_string.title().replace('-', '') - - def ExecCopyBundleResource(self, source, dest): - """Copies a resource file to the bundle/Resources directory, performing any - necessary compilation on each resource.""" - extension = os.path.splitext(source)[1].lower() - if os.path.isdir(source): - # Copy tree. - if os.path.exists(dest): - shutil.rmtree(dest) - shutil.copytree(source, dest) - elif extension == '.xib': - return self._CopyXIBFile(source, dest) - elif extension == '.strings': - self._CopyStringsFile(source, dest) - else: - shutil.copyfile(source, dest) - - def _CopyXIBFile(self, source, dest): - """Compiles a XIB file with ibtool into a binary plist in the bundle.""" - tools_dir = os.environ.get('DEVELOPER_BIN_DIR', '/usr/bin') - args = [os.path.join(tools_dir, 'ibtool'), '--errors', '--warnings', - '--notices', '--output-format', 'human-readable-text', '--compile', - dest, source] - ibtool_section_re = re.compile(r'/\*.*\*/') - ibtool_re = re.compile(r'.*note:.*is clipping its content') - ibtoolout = subprocess.Popen(args, stdout=subprocess.PIPE) - current_section_header = None - for line in ibtoolout.stdout: - if ibtool_section_re.match(line): - current_section_header = line - elif not ibtool_re.match(line): - if current_section_header: - sys.stdout.write(current_section_header) - current_section_header = None - sys.stdout.write(line) - return ibtoolout.returncode - - def _CopyStringsFile(self, source, dest): - """Copies a .strings file using iconv to reconvert the input into UTF-16.""" - input_code = self._DetectInputEncoding(source) or "UTF-8" - fp = open(dest, 'w') - args = ['/usr/bin/iconv', '--from-code', input_code, '--to-code', - 'UTF-16', source] - subprocess.call(args, stdout=fp) - fp.close() - - def _DetectInputEncoding(self, file_name): - """Reads the first few bytes from file_name and tries to guess the text - encoding. Returns None as a guess if it can't detect it.""" - fp = open(file_name, 'rb') - try: - header = fp.read(3) - except e: - fp.close() - return None - fp.close() - if header.startswith("\xFE\xFF"): - return "UTF-16BE" - elif header.startswith("\xFF\xFE"): - return "UTF-16LE" - elif header.startswith("\xEF\xBB\xBF"): - return "UTF-8" - else: - return None - - def ExecCopyInfoPlist(self, source, dest): - """Copies the |source| Info.plist to the destination directory |dest|.""" - # Read the source Info.plist into memory. - fd = open(source, 'r') - lines = fd.read() - fd.close() - - # Go through all the environment variables and replace them as variables in - # the file. - for key in os.environ: - if key.startswith('_'): - continue - evar = '${%s}' % key - lines = string.replace(lines, evar, os.environ[key]) - - # Write out the file with variables replaced. - fd = open(dest, 'w') - fd.write(lines) - fd.close() - - # Now write out PkgInfo file now that the Info.plist file has been - # "compiled". - self._WritePkgInfo(dest) - - def _WritePkgInfo(self, info_plist): - """This writes the PkgInfo file from the data stored in Info.plist.""" - plist = plistlib.readPlist(info_plist) - if not plist: - return - - # Only create PkgInfo for executable types. - package_type = plist['CFBundlePackageType'] - if package_type != 'APPL': - return - - # The format of PkgInfo is eight characters, representing the bundle type - # and bundle signature, each four characters. If that is missing, four - # '?' characters are used instead. - signature_code = plist.get('CFBundleSignature', '????') - if len(signature_code) != 4: # Wrong length resets everything, too. - signature_code = '?' * 4 - - dest = os.path.join(os.path.dirname(info_plist), 'PkgInfo') - fp = open(dest, 'w') - fp.write('%s%s' % (package_type, signature_code)) - fp.close() - - def ExecFlock(self, lockfile, *cmd_list): - """Emulates the most basic behavior of Linux's flock(1).""" - # Rely on exception handling to report errors. - fd = os.open(lockfile, os.O_RDONLY|os.O_NOCTTY|os.O_CREAT, 0o666) - fcntl.flock(fd, fcntl.LOCK_EX) - return subprocess.call(cmd_list) - - def ExecFilterLibtool(self, *cmd_list): - """Calls libtool and filters out 'libtool: file: foo.o has no symbols'.""" - libtool_re = re.compile(r'^libtool: file: .* has no symbols$') - libtoolout = subprocess.Popen(cmd_list, stderr=subprocess.PIPE) - _, err = libtoolout.communicate() - for line in err.splitlines(): - if not libtool_re.match(line): - print >>sys.stderr, line - return libtoolout.returncode - - def ExecPackageFramework(self, framework, version): - """Takes a path to Something.framework and the Current version of that and - sets up all the symlinks.""" - # Find the name of the binary based on the part before the ".framework". - binary = os.path.basename(framework).split('.')[0] - - CURRENT = 'Current' - RESOURCES = 'Resources' - VERSIONS = 'Versions' - - if not os.path.exists(os.path.join(framework, VERSIONS, version, binary)): - # Binary-less frameworks don't seem to contain symlinks (see e.g. - # chromium's out/Debug/org.chromium.Chromium.manifest/ bundle). - return - - # Move into the framework directory to set the symlinks correctly. - pwd = os.getcwd() - os.chdir(framework) - - # Set up the Current version. - self._Relink(version, os.path.join(VERSIONS, CURRENT)) - - # Set up the root symlinks. - self._Relink(os.path.join(VERSIONS, CURRENT, binary), binary) - self._Relink(os.path.join(VERSIONS, CURRENT, RESOURCES), RESOURCES) - - # Back to where we were before! - os.chdir(pwd) - - def _Relink(self, dest, link): - """Creates a symlink to |dest| named |link|. If |link| already exists, - it is overwritten.""" - if os.path.lexists(link): - os.remove(link) - os.symlink(dest, link) - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/node_modules/restify/node_modules/dtrace-provider/build/libusdt.target.mk b/node_modules/restify/node_modules/dtrace-provider/build/libusdt.target.mk deleted file mode 100644 index a6ea771..0000000 --- a/node_modules/restify/node_modules/dtrace-provider/build/libusdt.target.mk +++ /dev/null @@ -1,46 +0,0 @@ -# This file is generated by gyp; do not edit. - -TOOLSET := target -TARGET := libusdt -### Rules for action "build_libusdt": -quiet_cmd_binding_gyp_libusdt_target_build_libusdt = ACTION binding_gyp_libusdt_target_build_libusdt $@ -cmd_binding_gyp_libusdt_target_build_libusdt = LD_LIBRARY_PATH=$(builddir)/lib.host:$(builddir)/lib.target:$$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd $(srcdir)/.; sh libusdt-build.sh - -.: obj := $(abs_obj) -.: builddir := $(abs_builddir) -.: export BUILT_PRODUCTS_DIR := ${abs_builddir} -.: export CONFIGURATION := ${BUILDTYPE} -.: export PRODUCT_NAME := libusdt -.: export SDKROOT := -.: export SRCROOT := ${abs_srcdir}/ -.: export SOURCE_ROOT := ${SRCROOT} -.: export TARGET_BUILD_DIR := ${abs_builddir} -.: export TEMP_DIR := ${TMPDIR} -.: TOOLSET := $(TOOLSET) -.: $(srcdir)/. FORCE_DO_CMD - $(call do_cmd,binding_gyp_libusdt_target_build_libusdt) - -all_deps += . -action_binding_gyp_libusdt_target_build_libusdt_outputs := . - - -### Rules for final target. -# Build our special outputs first. -$(obj).target/libusdt.stamp: | $(action_binding_gyp_libusdt_target_build_libusdt_outputs) - -# Preserve order dependency of special output on deps. -$(action_binding_gyp_libusdt_target_build_libusdt_outputs): | - -$(obj).target/libusdt.stamp: TOOLSET := $(TOOLSET) -$(obj).target/libusdt.stamp: FORCE_DO_CMD - $(call do_cmd,touch) - -all_deps += $(obj).target/libusdt.stamp -# Add target alias -.PHONY: libusdt -libusdt: $(obj).target/libusdt.stamp - -# Add target alias to "all" target. -.PHONY: all -all: libusdt - diff --git a/node_modules/restify/node_modules/dtrace-provider/libusdt/libusdt.a b/node_modules/restify/node_modules/dtrace-provider/libusdt/libusdt.a deleted file mode 100644 index b8615cf..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/libusdt/libusdt.a and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt.o b/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt.o deleted file mode 100644 index b0c2e83..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt.o and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_dof.o b/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_dof.o deleted file mode 100644 index 075d9a7..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_dof.o and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_dof_file.o b/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_dof_file.o deleted file mode 100644 index c08b79f..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_dof_file.o and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_dof_sections.o b/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_dof_sections.o deleted file mode 100644 index 292708c..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_dof_sections.o and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_probe.o b/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_probe.o deleted file mode 100644 index e578174..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_probe.o and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_tracepoints.o b/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_tracepoints.o deleted file mode 100644 index 0d564c6..0000000 Binary files a/node_modules/restify/node_modules/dtrace-provider/libusdt/usdt_tracepoints.o and /dev/null differ diff --git a/node_modules/restify/node_modules/dtrace-provider/package.json b/node_modules/restify/node_modules/dtrace-provider/package.json index 835716c..24d7ce1 100644 --- a/node_modules/restify/node_modules/dtrace-provider/package.json +++ b/node_modules/restify/node_modules/dtrace-provider/package.json @@ -31,5 +31,5 @@ "url": "https://github.com/chrisa/node-dtrace-provider/issues" }, "_id": "dtrace-provider@0.2.8", - "_from": "dtrace-provider@0.2.8" + "_from": "dtrace-provider@^0.2.8" } diff --git a/node_modules/restify/node_modules/escape-regexp-component/package.json b/node_modules/restify/node_modules/escape-regexp-component/package.json index 541e4e4..2f748fc 100644 --- a/node_modules/restify/node_modules/escape-regexp-component/package.json +++ b/node_modules/restify/node_modules/escape-regexp-component/package.json @@ -16,5 +16,5 @@ "readme": "\n# escape-regexp\n\n Escape regular expression special characters.\n\n## Example\n\n```js\nvar escape = require('escape-regexp');\nescape(str);\n```\n\n## License\n\n MIT", "readmeFilename": "Readme.md", "_id": "escape-regexp-component@1.0.2", - "_from": "escape-regexp-component@1.0.2" + "_from": "escape-regexp-component@^1.0.2" } diff --git a/node_modules/restify/node_modules/formidable/.npmignore b/node_modules/restify/node_modules/formidable/.npmignore index 4fbabb3..ed16858 100644 --- a/node_modules/restify/node_modules/formidable/.npmignore +++ b/node_modules/restify/node_modules/formidable/.npmignore @@ -1,4 +1,7 @@ -/test/tmp/ +/test +/tool +/example +/benchmark *.upload *.un~ *.http diff --git a/node_modules/restify/node_modules/formidable/.travis.yml b/node_modules/restify/node_modules/formidable/.travis.yml index cb931cb..e20bedc 100644 --- a/node_modules/restify/node_modules/formidable/.travis.yml +++ b/node_modules/restify/node_modules/formidable/.travis.yml @@ -1,5 +1,5 @@ language: node_js node_js: - 0.8 - - 0.9 - "0.10" + - 0.11 diff --git a/node_modules/restify/node_modules/formidable/Readme.md b/node_modules/restify/node_modules/formidable/Readme.md index 08e9eca..0f8cc61 100644 --- a/node_modules/restify/node_modules/formidable/Readme.md +++ b/node_modules/restify/node_modules/formidable/Readme.md @@ -22,6 +22,8 @@ a large variety of clients and is considered production-ready. ## Installation +This is a low level package, and if you're using a high level framework such as Express, chances are it's already included in it. You can [read this discussion](http://stackoverflow.com/questions/11295554/how-to-disable-express-bodyparser-for-file-uploads-node-js) about how Formidable is integrated with Express. + Via [npm](http://github.com/isaacs/npm): ``` npm install formidable@latest @@ -82,11 +84,10 @@ form.encoding = 'utf-8'; Sets encoding for incoming form fields. ```javascript -form.uploadDir = process.env.TMP || process.env.TMPDIR || process.env.TEMP || '/tmp' || process.cwd(); +form.uploadDir = "/my/dir"; ``` -The directory for placing file uploads in. You can move them later on using -`fs.rename()`. The default directory is picked at module load time depending on -the first existing directory from those listed above. +Sets the directory for placing file uploads in. You can move them later on using +`fs.rename()`. The default is `os.tmpDir()`. ```javascript form.keepExtensions = false; @@ -106,16 +107,21 @@ If this value is exceeded, an `'error'` event is emitted. The default size is 2MB. ```javascript -form.maxFields = 0; +form.maxFields = 1000; ``` Limits the number of fields that the querystring parser will decode. Defaults -to 0 (unlimited). +to 1000 (0 for unlimited). ```javascript form.hash = false; ``` If you want checksums calculated for incoming files, set this to either `'sha1'` or `'md5'`. +```javascript +form.multiples = false; +``` +If this option is enabled, when you call `form.parse`, the `files` argument will contain arrays of files for inputs which submit multiple files using the HTML5 `multiple` attribute. + ```javascript form.bytesReceived ``` @@ -129,7 +135,7 @@ The expected number of bytes in this form. ```javascript form.parse(request, [cb]); ``` -Parses an incoming node.js `request` containing form data. If `cb` is provided, all fields an files are collected and passed to the callback: +Parses an incoming node.js `request` containing form data. If `cb` is provided, all fields and files are collected and passed to the callback: ```javascript diff --git a/node_modules/restify/node_modules/formidable/benchmark/bench-multipart-parser.js b/node_modules/restify/node_modules/formidable/benchmark/bench-multipart-parser.js deleted file mode 100644 index 49abc43..0000000 --- a/node_modules/restify/node_modules/formidable/benchmark/bench-multipart-parser.js +++ /dev/null @@ -1,71 +0,0 @@ -var assert = require('assert'); -require('../test/common'); -var multipartParser = require('../lib/multipart_parser'), - MultipartParser = multipartParser.MultipartParser, - parser = new MultipartParser(), - Buffer = require('buffer').Buffer, - boundary = '-----------------------------168072824752491622650073', - mb = 100, - buffer = createMultipartBuffer(boundary, mb * 1024 * 1024), - callbacks = - { partBegin: -1, - partEnd: -1, - headerField: -1, - headerValue: -1, - partData: -1, - end: -1, - }; - - -parser.initWithBoundary(boundary); -parser.onHeaderField = function() { - callbacks.headerField++; -}; - -parser.onHeaderValue = function() { - callbacks.headerValue++; -}; - -parser.onPartBegin = function() { - callbacks.partBegin++; -}; - -parser.onPartData = function() { - callbacks.partData++; -}; - -parser.onPartEnd = function() { - callbacks.partEnd++; -}; - -parser.onEnd = function() { - callbacks.end++; -}; - -var start = +new Date(), - nparsed = parser.write(buffer), - duration = +new Date - start, - mbPerSec = (mb / (duration / 1000)).toFixed(2); - -console.log(mbPerSec+' mb/sec'); - -assert.equal(nparsed, buffer.length); - -function createMultipartBuffer(boundary, size) { - var head = - '--'+boundary+'\r\n' - + 'content-disposition: form-data; name="field1"\r\n' - + '\r\n' - , tail = '\r\n--'+boundary+'--\r\n' - , buffer = new Buffer(size); - - buffer.write(head, 'ascii', 0); - buffer.write(tail, 'ascii', buffer.length - tail.length); - return buffer; -} - -process.on('exit', function() { - for (var k in callbacks) { - assert.equal(0, callbacks[k], k+' count off by '+callbacks[k]); - } -}); diff --git a/node_modules/restify/node_modules/formidable/example/json.js b/node_modules/restify/node_modules/formidable/example/json.js deleted file mode 100644 index eb8a724..0000000 --- a/node_modules/restify/node_modules/formidable/example/json.js +++ /dev/null @@ -1,67 +0,0 @@ -var common = require('../test/common'), - http = require('http'), - util = require('util'), - formidable = common.formidable, - Buffer = require('buffer').Buffer, - port = common.port, - server; - -server = http.createServer(function(req, res) { - if (req.method !== 'POST') { - res.writeHead(200, {'content-type': 'text/plain'}) - res.end('Please POST a JSON payload to http://localhost:'+port+'/') - return; - } - - var form = new formidable.IncomingForm(), - fields = {}; - - form - .on('error', function(err) { - res.writeHead(500, {'content-type': 'text/plain'}); - res.end('error:\n\n'+util.inspect(err)); - console.error(err); - }) - .on('field', function(field, value) { - console.log(field, value); - fields[field] = value; - }) - .on('end', function() { - console.log('-> post done'); - res.writeHead(200, {'content-type': 'text/plain'}); - res.end('received fields:\n\n '+util.inspect(fields)); - }); - form.parse(req); -}); -server.listen(port); - -console.log('listening on http://localhost:'+port+'/'); - - -var request = http.request({ - host: 'localhost', - path: '/', - port: port, - method: 'POST', - headers: { 'content-type':'application/json', 'content-length':48 } -}, function(response) { - var data = ''; - console.log('\nServer responded with:'); - console.log('Status:', response.statusCode); - response.pipe(process.stdout); - response.on('end', function() { - console.log('\n') - process.exit(); - }); - // response.on('data', function(chunk) { - // data += chunk.toString('utf8'); - // }); - // response.on('end', function() { - // console.log('Response Data:') - // console.log(data); - // process.exit(); - // }); -}) - -request.write('{"numbers":[1,2,3,4,5],"nested":{"key":"value"}}'); -request.end(); diff --git a/node_modules/restify/node_modules/formidable/example/post.js b/node_modules/restify/node_modules/formidable/example/post.js deleted file mode 100644 index f6c15a6..0000000 --- a/node_modules/restify/node_modules/formidable/example/post.js +++ /dev/null @@ -1,43 +0,0 @@ -require('../test/common'); -var http = require('http'), - util = require('util'), - formidable = require('formidable'), - server; - -server = http.createServer(function(req, res) { - if (req.url == '/') { - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - } else if (req.url == '/post') { - var form = new formidable.IncomingForm(), - fields = []; - - form - .on('error', function(err) { - res.writeHead(200, {'content-type': 'text/plain'}); - res.end('error:\n\n'+util.inspect(err)); - }) - .on('field', function(field, value) { - console.log(field, value); - fields.push([field, value]); - }) - .on('end', function() { - console.log('-> post done'); - res.writeHead(200, {'content-type': 'text/plain'}); - res.end('received fields:\n\n '+util.inspect(fields)); - }); - form.parse(req); - } else { - res.writeHead(404, {'content-type': 'text/plain'}); - res.end('404'); - } -}); -server.listen(TEST_PORT); - -console.log('listening on http://localhost:'+TEST_PORT+'/'); diff --git a/node_modules/restify/node_modules/formidable/example/upload.js b/node_modules/restify/node_modules/formidable/example/upload.js deleted file mode 100644 index 050cdd9..0000000 --- a/node_modules/restify/node_modules/formidable/example/upload.js +++ /dev/null @@ -1,48 +0,0 @@ -require('../test/common'); -var http = require('http'), - util = require('util'), - formidable = require('formidable'), - server; - -server = http.createServer(function(req, res) { - if (req.url == '/') { - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - } else if (req.url == '/upload') { - var form = new formidable.IncomingForm(), - files = [], - fields = []; - - form.uploadDir = TEST_TMP; - - form - .on('field', function(field, value) { - console.log(field, value); - fields.push([field, value]); - }) - .on('file', function(field, file) { - console.log(field, file); - files.push([field, file]); - }) - .on('end', function() { - console.log('-> upload done'); - res.writeHead(200, {'content-type': 'text/plain'}); - res.write('received fields:\n\n '+util.inspect(fields)); - res.write('\n\n'); - res.end('received files:\n\n '+util.inspect(files)); - }); - form.parse(req); - } else { - res.writeHead(404, {'content-type': 'text/plain'}); - res.end('404'); - } -}); -server.listen(TEST_PORT); - -console.log('listening on http://localhost:'+TEST_PORT+'/'); diff --git a/node_modules/restify/node_modules/formidable/lib/incoming_form.js b/node_modules/restify/node_modules/formidable/lib/incoming_form.js index c2eeaf8..27b9aed 100644 --- a/node_modules/restify/node_modules/formidable/lib/incoming_form.js +++ b/node_modules/restify/node_modules/formidable/lib/incoming_form.js @@ -29,7 +29,8 @@ function IncomingForm(opts) { this.encoding = opts.encoding || 'utf-8'; this.headers = null; this.type = null; - this.hash = false; + this.hash = opts.hash || false; + this.multiples = opts.multiples || false; this.bytesReceived = null; this.bytesExpected = null; @@ -40,7 +41,7 @@ function IncomingForm(opts) { this.openedFiles = []; return this; -}; +} util.inherits(IncomingForm, EventEmitter); exports.IncomingForm = IncomingForm; @@ -83,7 +84,18 @@ IncomingForm.prototype.parse = function(req, cb) { fields[name] = value; }) .on('file', function(name, file) { - files[name] = file; + if (this.multiples) { + if (files[name]) { + if (!Array.isArray(files[name])) { + files[name] = [files[name]]; + } + files[name].push(file); + } else { + files[name] = file; + } + } else { + files[name] = file; + } }) .on('error', function(err) { cb(err, fields, files); @@ -130,8 +142,11 @@ IncomingForm.prototype.writeHeaders = function(headers) { }; IncomingForm.prototype.write = function(buffer) { + if (this.error) { + return; + } if (!this._parser) { - this._error(new Error('unintialized parser')); + this._error(new Error('uninitialized parser')); return; } @@ -198,6 +213,9 @@ IncomingForm.prototype.handlePart = function(part) { this.openedFiles.push(file); part.on('data', function(buffer) { + if (buffer.length == 0) { + return; + } self.pause(); file.write(buffer, function() { self.resume(); @@ -245,8 +263,8 @@ IncomingForm.prototype._parseContentType = function() { } if (this.headers['content-type'].match(/multipart/i)) { - var m; - if (m = this.headers['content-type'].match(/boundary=(?:"([^"]+)"|([^;]+))/i)) { + var m = this.headers['content-type'].match(/boundary=(?:"([^"]+)"|([^;]+))/i); + if (m) { this._initMultipart(m[1] || m[2]); } else { this._error(new Error('bad content-type header, no multipart boundary')); @@ -268,13 +286,12 @@ IncomingForm.prototype._error = function(err) { } this.error = err; - this.pause(); this.emit('error', err); if (Array.isArray(this.openedFiles)) { this.openedFiles.forEach(function(file) { file._writeStream.destroy(); - setTimeout(fs.unlink, 0, file.path); + setTimeout(fs.unlink, 0, file.path, function(error) { }); }); } }; @@ -334,9 +351,9 @@ IncomingForm.prototype._initMultipart = function(boundary) { headerField = headerField.toLowerCase(); part.headers[headerField] = headerValue; - var m; + var m = headerValue.match(/\bname="([^"]+)"/i); if (headerField == 'content-disposition') { - if (m = headerValue.match(/\bname="([^"]+)"/i)) { + if (m) { part.name = m[1]; } @@ -375,13 +392,13 @@ IncomingForm.prototype._initMultipart = function(boundary) { can be divided by 4, it will result in a number of buytes that can be divided vy 3. */ - var offset = parseInt(part.transferBuffer.length / 4) * 4; - part.emit('data', new Buffer(part.transferBuffer.substring(0, offset), 'base64')) + var offset = parseInt(part.transferBuffer.length / 4, 10) * 4; + part.emit('data', new Buffer(part.transferBuffer.substring(0, offset), 'base64')); part.transferBuffer = part.transferBuffer.substring(offset); }; parser.onPartEnd = function() { - part.emit('data', new Buffer(part.transferBuffer, 'base64')) + part.emit('data', new Buffer(part.transferBuffer, 'base64')); part.emit('end'); }; break; @@ -443,9 +460,8 @@ IncomingForm.prototype._initOctetStream = function() { type: mime }); - file.open(); - this.emit('fileBegin', filename, file); + file.open(); this._flushing++; @@ -475,8 +491,10 @@ IncomingForm.prototype._initOctetStream = function() { self.ended = true; var done = function(){ - self.emit('file', 'file', file); - self._maybeEnd(); + file.end(function() { + self.emit('file', 'file', file); + self._maybeEnd(); + }); }; if(outstandingWrites === 0){ @@ -499,7 +517,7 @@ IncomingForm.prototype._initJSONencoded = function() { parser.onField = function(key, val) { self.emit('field', key, val); - } + }; parser.onEnd = function() { self.ended = true; @@ -517,7 +535,7 @@ IncomingForm.prototype._uploadPath = function(filename) { if (this.keepExtensions) { var ext = path.extname(filename); - ext = ext.replace(/(\.[a-z0-9]+).*/, '$1'); + ext = ext.replace(/(\.[a-z0-9]+).*/i, '$1'); name += ext; } diff --git a/node_modules/restify/node_modules/formidable/lib/json_parser.js b/node_modules/restify/node_modules/formidable/lib/json_parser.js index 6ce966b..db39c31 100644 --- a/node_modules/restify/node_modules/formidable/lib/json_parser.js +++ b/node_modules/restify/node_modules/formidable/lib/json_parser.js @@ -1,16 +1,16 @@ if (global.GENTLY) require = GENTLY.hijack(require); -var Buffer = require('buffer').Buffer +var Buffer = require('buffer').Buffer; function JSONParser() { this.data = new Buffer(''); this.bytesWritten = 0; -}; +} exports.JSONParser = JSONParser; JSONParser.prototype.initWithLength = function(length) { this.data = new Buffer(length); -} +}; JSONParser.prototype.write = function(buffer) { if (this.data.length >= this.bytesWritten + buffer.length) { @@ -20,11 +20,11 @@ JSONParser.prototype.write = function(buffer) { } this.bytesWritten += buffer.length; return buffer.length; -} +}; JSONParser.prototype.end = function() { try { - var fields = JSON.parse(this.data.toString('utf8')) + var fields = JSON.parse(this.data.toString('utf8')); for (var field in fields) { this.onField(field, fields[field]); } @@ -32,4 +32,4 @@ JSONParser.prototype.end = function() { this.data = null; this.onEnd(); -} \ No newline at end of file +}; diff --git a/node_modules/restify/node_modules/formidable/lib/multipart_parser.js b/node_modules/restify/node_modules/formidable/lib/multipart_parser.js index 98a6856..d70dd4d 100644 --- a/node_modules/restify/node_modules/formidable/lib/multipart_parser.js +++ b/node_modules/restify/node_modules/formidable/lib/multipart_parser.js @@ -46,7 +46,7 @@ function MultipartParser() { this.index = null; this.flags = 0; -}; +} exports.MultipartParser = MultipartParser; MultipartParser.stateToString = function(stateNumber) { @@ -127,18 +127,25 @@ MultipartParser.prototype.write = function(buffer) { state = S.START_BOUNDARY; case S.START_BOUNDARY: if (index == boundary.length - 2) { - if (c != CR) { + if (c == HYPHEN) { + flags |= F.LAST_BOUNDARY; + } else if (c != CR) { return i; } index++; break; } else if (index - 1 == boundary.length - 2) { - if (c != LF) { + if (flags & F.LAST_BOUNDARY && c == HYPHEN){ + callback('end'); + state = S.END; + flags = 0; + } else if (!(flags & F.LAST_BOUNDARY) && c == LF) { + index = 0; + callback('partBegin'); + state = S.HEADER_FIELD_START; + } else { return i; } - index = 0; - callback('partBegin'); - state = S.HEADER_FIELD_START; break; } @@ -214,7 +221,7 @@ MultipartParser.prototype.write = function(buffer) { case S.PART_DATA: prevIndex = index; - if (index == 0) { + if (index === 0) { // boyer-moore derrived algorithm to safely skip non-boundary data i += boundaryEnd; while (i < bufferLength && !(buffer[i] in boundaryChars)) { @@ -226,7 +233,7 @@ MultipartParser.prototype.write = function(buffer) { if (index < boundary.length) { if (boundary[index] == c) { - if (index == 0) { + if (index === 0) { dataCallback('partData', true); } index++; @@ -260,6 +267,7 @@ MultipartParser.prototype.write = function(buffer) { callback('partEnd'); callback('end'); state = S.END; + flags = 0; } else { index = 0; } @@ -310,7 +318,7 @@ MultipartParser.prototype.end = function() { self[callbackSymbol](); } }; - if ((this.state == S.HEADER_FIELD_START && this.index == 0) || + if ((this.state == S.HEADER_FIELD_START && this.index === 0) || (this.state == S.PART_DATA && this.index == this.boundary.length)) { callback(this, 'partEnd'); callback(this, 'end'); diff --git a/node_modules/restify/node_modules/formidable/lib/querystring_parser.js b/node_modules/restify/node_modules/formidable/lib/querystring_parser.js index 320ce5a..fcaffe0 100644 --- a/node_modules/restify/node_modules/formidable/lib/querystring_parser.js +++ b/node_modules/restify/node_modules/formidable/lib/querystring_parser.js @@ -7,7 +7,7 @@ var querystring = require('querystring'); function QuerystringParser(maxKeys) { this.maxKeys = maxKeys; this.buffer = ''; -}; +} exports.QuerystringParser = QuerystringParser; QuerystringParser.prototype.write = function(buffer) { diff --git a/node_modules/restify/node_modules/formidable/package.json b/node_modules/restify/node_modules/formidable/package.json index 4679a11..4241ee7 100644 --- a/node_modules/restify/node_modules/formidable/package.json +++ b/node_modules/restify/node_modules/formidable/package.json @@ -2,7 +2,7 @@ "name": "formidable", "description": "A node.js module for parsing form data, especially file uploads.", "homepage": "https://github.com/felixge/node-formidable", - "version": "1.0.14", + "version": "1.0.15", "devDependencies": { "gently": "0.8.0", "findit": "0.1.1", @@ -30,9 +30,9 @@ "url": "http://github.com/felixge/node-formidable/issues" }, "optionalDependencies": {}, - "readme": "# Formidable\n\n[![Build Status](https://secure.travis-ci.org/felixge/node-formidable.png?branch=master)](http://travis-ci.org/felixge/node-formidable)\n\n## Purpose\n\nA node.js module for parsing form data, especially file uploads.\n\n## Current status\n\nThis module was developed for [Transloadit](http://transloadit.com/), a service focused on uploading\nand encoding images and videos. It has been battle-tested against hundreds of GB of file uploads from\na large variety of clients and is considered production-ready.\n\n## Features\n\n* Fast (~500mb/sec), non-buffering multipart parser\n* Automatically writing file uploads to disk\n* Low memory footprint\n* Graceful error handling\n* Very high test coverage\n\n## Installation\n\nVia [npm](http://github.com/isaacs/npm):\n```\nnpm install formidable@latest\n```\nManually:\n```\ngit clone git://github.com/felixge/node-formidable.git formidable\nvim my.js\n# var formidable = require('./formidable');\n```\n\nNote: Formidable requires [gently](http://github.com/felixge/node-gently) to run the unit tests, but you won't need it for just using the library.\n\n## Example\n\nParse an incoming file upload.\n```javascript\nvar formidable = require('formidable'),\n http = require('http'),\n util = require('util');\n\nhttp.createServer(function(req, res) {\n if (req.url == '/upload' && req.method.toLowerCase() == 'post') {\n // parse a file upload\n var form = new formidable.IncomingForm();\n\n form.parse(req, function(err, fields, files) {\n res.writeHead(200, {'content-type': 'text/plain'});\n res.write('received upload:\\n\\n');\n res.end(util.inspect({fields: fields, files: files}));\n });\n\n return;\n }\n\n // show a file upload form\n res.writeHead(200, {'content-type': 'text/html'});\n res.end(\n '
    '+\n '
    '+\n '
    '+\n ''+\n '
    '\n );\n}).listen(8080);\n```\n## API\n\n### Formidable.IncomingForm\n```javascript\nvar form = new formidable.IncomingForm()\n```\nCreates a new incoming form.\n\n```javascript\nform.encoding = 'utf-8';\n```\nSets encoding for incoming form fields.\n\n```javascript\nform.uploadDir = process.env.TMP || process.env.TMPDIR || process.env.TEMP || '/tmp' || process.cwd();\n```\nThe directory for placing file uploads in. You can move them later on using\n`fs.rename()`. The default directory is picked at module load time depending on\nthe first existing directory from those listed above.\n\n```javascript\nform.keepExtensions = false;\n```\nIf you want the files written to `form.uploadDir` to include the extensions of the original files, set this property to `true`.\n\n```javascript\nform.type\n```\nEither 'multipart' or 'urlencoded' depending on the incoming request.\n\n```javascript\nform.maxFieldsSize = 2 * 1024 * 1024;\n```\nLimits the amount of memory a field (not file) can allocate in bytes.\nIf this value is exceeded, an `'error'` event is emitted. The default\nsize is 2MB.\n\n```javascript\nform.maxFields = 0;\n```\nLimits the number of fields that the querystring parser will decode. Defaults\nto 0 (unlimited).\n\n```javascript\nform.hash = false;\n```\nIf you want checksums calculated for incoming files, set this to either `'sha1'` or `'md5'`.\n\n```javascript\nform.bytesReceived\n```\nThe amount of bytes received for this form so far.\n\n```javascript\nform.bytesExpected\n```\nThe expected number of bytes in this form.\n\n```javascript\nform.parse(request, [cb]);\n```\nParses an incoming node.js `request` containing form data. If `cb` is provided, all fields an files are collected and passed to the callback:\n\n\n```javascript\nform.parse(req, function(err, fields, files) {\n // ...\n});\n\nform.onPart(part);\n```\nYou may overwrite this method if you are interested in directly accessing the multipart stream. Doing so will disable any `'field'` / `'file'` events processing which would occur otherwise, making you fully responsible for handling the processing.\n\n```javascript\nform.onPart = function(part) {\n part.addListener('data', function() {\n // ...\n });\n}\n```\nIf you want to use formidable to only handle certain parts for you, you can do so:\n```javascript\nform.onPart = function(part) {\n if (!part.filename) {\n // let formidable handle all non-file parts\n form.handlePart(part);\n }\n}\n```\nCheck the code in this method for further inspiration.\n\n\n### Formidable.File\n```javascript\nfile.size = 0\n```\nThe size of the uploaded file in bytes. If the file is still being uploaded (see `'fileBegin'` event), this property says how many bytes of the file have been written to disk yet.\n```javascript\nfile.path = null\n```\nThe path this file is being written to. You can modify this in the `'fileBegin'` event in\ncase you are unhappy with the way formidable generates a temporary path for your files.\n```javascript\nfile.name = null\n```\nThe name this file had according to the uploading client.\n```javascript\nfile.type = null\n```\nThe mime type of this file, according to the uploading client.\n```javascript\nfile.lastModifiedDate = null\n```\nA date object (or `null`) containing the time this file was last written to. Mostly\nhere for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/).\n```javascript\nfile.hash = null\n```\nIf hash calculation was set, you can read the hex digest out of this var.\n\n#### Formidable.File#toJSON()\n\n This method returns a JSON-representation of the file, allowing you to\n `JSON.stringify()` the file which is useful for logging and responding\n to requests.\n\n### Events\n\n\n#### 'progress'\n```javascript\nform.on('progress', function(bytesReceived, bytesExpected) {\n});\n```\nEmitted after each incoming chunk of data that has been parsed. Can be used to roll your own progress bar.\n\n\n\n#### 'field'\n```javascript\nform.on('field', function(name, value) {\n});\n```\n\n#### 'fileBegin'\n\nEmitted whenever a field / value pair has been received.\n```javascript\nform.on('fileBegin', function(name, file) {\n});\n```\n\n#### 'file'\n\nEmitted whenever a new file is detected in the upload stream. Use this even if\nyou want to stream the file to somewhere else while buffering the upload on\nthe file system.\n\nEmitted whenever a field / file pair has been received. `file` is an instance of `File`.\n```javascript\nform.on('file', function(name, file) {\n});\n```\n\n#### 'error'\n\nEmitted when there is an error processing the incoming form. A request that experiences an error is automatically paused, you will have to manually call `request.resume()` if you want the request to continue firing `'data'` events.\n```javascript\nform.on('error', function(err) {\n});\n```\n\n#### 'aborted'\n\n\nEmitted when the request was aborted by the user. Right now this can be due to a 'timeout' or 'close' event on the socket. In the future there will be a separate 'timeout' event (needs a change in the node core).\n```javascript\nform.on('aborted', function() {\n});\n```\n\n##### 'end'\n```javascript\nform.on('end', function() {\n});\n```\nEmitted when the entire request has been received, and all contained files have finished flushing to disk. This is a great place for you to send your response.\n\n\n\n## Changelog\n\n### v1.0.14\n\n* Add failing hash tests. (Ben Trask)\n* Enable hash calculation again (Eugene Girshov)\n* Test for immediate data events (Tim Smart)\n* Re-arrange IncomingForm#parse (Tim Smart)\n\n### v1.0.13\n\n* Only update hash if update method exists (Sven Lito)\n* According to travis v0.10 needs to go quoted (Sven Lito)\n* Bumping build node versions (Sven Lito)\n* Additional fix for empty requests (Eugene Girshov)\n* Change the default to 1000, to match the new Node behaviour. (OrangeDog)\n* Add ability to control maxKeys in the querystring parser. (OrangeDog)\n* Adjust test case to work with node 0.9.x (Eugene Girshov)\n* Update package.json (Sven Lito)\n* Path adjustment according to eb4468b (Markus Ast)\n\n### v1.0.12\n\n* Emit error on aborted connections (Eugene Girshov)\n* Add support for empty requests (Eugene Girshov)\n* Fix name/filename handling in Content-Disposition (jesperp)\n* Tolerate malformed closing boundary in multipart (Eugene Girshov)\n* Ignore preamble in multipart messages (Eugene Girshov)\n* Add support for application/json (Mike Frey, Carlos Rodriguez)\n* Add support for Base64 encoding (Elmer Bulthuis)\n* Add File#toJSON (TJ Holowaychuk)\n* Remove support for Node.js 0.4 & 0.6 (Andrew Kelley)\n* Documentation improvements (Sven Lito, Andre Azevedo)\n* Add support for application/octet-stream (Ion Lupascu, Chris Scribner)\n* Use os.tmpDir() to get tmp directory (Andrew Kelley)\n* Improve package.json (Andrew Kelley, Sven Lito)\n* Fix benchmark script (Andrew Kelley)\n* Fix scope issue in incoming_forms (Sven Lito)\n* Fix file handle leak on error (OrangeDog)\n\n### v1.0.11\n\n* Calculate checksums for incoming files (sreuter)\n* Add definition parameters to \"IncomingForm\" as an argument (Math-)\n\n### v1.0.10\n\n* Make parts to be proper Streams (Matt Robenolt)\n\n### v1.0.9\n\n* Emit progress when content length header parsed (Tim Koschützki)\n* Fix Readme syntax due to GitHub changes (goob)\n* Replace references to old 'sys' module in Readme with 'util' (Peter Sugihara)\n\n### v1.0.8\n\n* Strip potentially unsafe characters when using `keepExtensions: true`.\n* Switch to utest / urun for testing\n* Add travis build\n\n### v1.0.7\n\n* Remove file from package that was causing problems when installing on windows. (#102)\n* Fix typos in Readme (Jason Davies).\n\n### v1.0.6\n\n* Do not default to the default to the field name for file uploads where\n filename=\"\".\n\n### v1.0.5\n\n* Support filename=\"\" in multipart parts\n* Explain unexpected end() errors in parser better\n\n**Note:** Starting with this version, formidable emits 'file' events for empty\nfile input fields. Previously those were incorrectly emitted as regular file\ninput fields with value = \"\".\n\n### v1.0.4\n\n* Detect a good default tmp directory regardless of platform. (#88)\n\n### v1.0.3\n\n* Fix problems with utf8 characters (#84) / semicolons in filenames (#58)\n* Small performance improvements\n* New test suite and fixture system\n\n### v1.0.2\n\n* Exclude node\\_modules folder from git\n* Implement new `'aborted'` event\n* Fix files in example folder to work with recent node versions\n* Make gently a devDependency\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.1...v1.0.2)\n\n### v1.0.1\n\n* Fix package.json to refer to proper main directory. (#68, Dean Landolt)\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.0...v1.0.1)\n\n### v1.0.0\n\n* Add support for multipart boundaries that are quoted strings. (Jeff Craig)\n\nThis marks the beginning of development on version 2.0 which will include\nseveral architectural improvements.\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.11...v1.0.0)\n\n### v0.9.11\n\n* Emit `'progress'` event when receiving data, regardless of parsing it. (Tim Koschützki)\n* Use [W3C FileAPI Draft](http://dev.w3.org/2006/webapi/FileAPI/) properties for File class\n\n**Important:** The old property names of the File class will be removed in a\nfuture release.\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.10...v0.9.11)\n\n### Older releases\n\nThese releases were done before starting to maintain the above Changelog:\n\n* [v0.9.10](https://github.com/felixge/node-formidable/compare/v0.9.9...v0.9.10)\n* [v0.9.9](https://github.com/felixge/node-formidable/compare/v0.9.8...v0.9.9)\n* [v0.9.8](https://github.com/felixge/node-formidable/compare/v0.9.7...v0.9.8)\n* [v0.9.7](https://github.com/felixge/node-formidable/compare/v0.9.6...v0.9.7)\n* [v0.9.6](https://github.com/felixge/node-formidable/compare/v0.9.5...v0.9.6)\n* [v0.9.5](https://github.com/felixge/node-formidable/compare/v0.9.4...v0.9.5)\n* [v0.9.4](https://github.com/felixge/node-formidable/compare/v0.9.3...v0.9.4)\n* [v0.9.3](https://github.com/felixge/node-formidable/compare/v0.9.2...v0.9.3)\n* [v0.9.2](https://github.com/felixge/node-formidable/compare/v0.9.1...v0.9.2)\n* [v0.9.1](https://github.com/felixge/node-formidable/compare/v0.9.0...v0.9.1)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.1.0](https://github.com/felixge/node-formidable/commits/v0.1.0)\n\n## License\n\nFormidable is licensed under the MIT license.\n\n## Ports\n\n* [multipart-parser](http://github.com/FooBarWidget/multipart-parser): a C++ parser based on formidable\n\n## Credits\n\n* [Ryan Dahl](http://twitter.com/ryah) for his work on [http-parser](http://github.com/ry/http-parser) which heavily inspired multipart_parser.js\n", + "readme": "# Formidable\n\n[![Build Status](https://secure.travis-ci.org/felixge/node-formidable.png?branch=master)](http://travis-ci.org/felixge/node-formidable)\n\n## Purpose\n\nA node.js module for parsing form data, especially file uploads.\n\n## Current status\n\nThis module was developed for [Transloadit](http://transloadit.com/), a service focused on uploading\nand encoding images and videos. It has been battle-tested against hundreds of GB of file uploads from\na large variety of clients and is considered production-ready.\n\n## Features\n\n* Fast (~500mb/sec), non-buffering multipart parser\n* Automatically writing file uploads to disk\n* Low memory footprint\n* Graceful error handling\n* Very high test coverage\n\n## Installation\n\nThis is a low level package, and if you're using a high level framework such as Express, chances are it's already included in it. You can [read this discussion](http://stackoverflow.com/questions/11295554/how-to-disable-express-bodyparser-for-file-uploads-node-js) about how Formidable is integrated with Express.\n\nVia [npm](http://github.com/isaacs/npm):\n```\nnpm install formidable@latest\n```\nManually:\n```\ngit clone git://github.com/felixge/node-formidable.git formidable\nvim my.js\n# var formidable = require('./formidable');\n```\n\nNote: Formidable requires [gently](http://github.com/felixge/node-gently) to run the unit tests, but you won't need it for just using the library.\n\n## Example\n\nParse an incoming file upload.\n```javascript\nvar formidable = require('formidable'),\n http = require('http'),\n util = require('util');\n\nhttp.createServer(function(req, res) {\n if (req.url == '/upload' && req.method.toLowerCase() == 'post') {\n // parse a file upload\n var form = new formidable.IncomingForm();\n\n form.parse(req, function(err, fields, files) {\n res.writeHead(200, {'content-type': 'text/plain'});\n res.write('received upload:\\n\\n');\n res.end(util.inspect({fields: fields, files: files}));\n });\n\n return;\n }\n\n // show a file upload form\n res.writeHead(200, {'content-type': 'text/html'});\n res.end(\n '
    '+\n '
    '+\n '
    '+\n ''+\n '
    '\n );\n}).listen(8080);\n```\n## API\n\n### Formidable.IncomingForm\n```javascript\nvar form = new formidable.IncomingForm()\n```\nCreates a new incoming form.\n\n```javascript\nform.encoding = 'utf-8';\n```\nSets encoding for incoming form fields.\n\n```javascript\nform.uploadDir = \"/my/dir\";\n```\nSets the directory for placing file uploads in. You can move them later on using\n`fs.rename()`. The default is `os.tmpDir()`.\n\n```javascript\nform.keepExtensions = false;\n```\nIf you want the files written to `form.uploadDir` to include the extensions of the original files, set this property to `true`.\n\n```javascript\nform.type\n```\nEither 'multipart' or 'urlencoded' depending on the incoming request.\n\n```javascript\nform.maxFieldsSize = 2 * 1024 * 1024;\n```\nLimits the amount of memory a field (not file) can allocate in bytes.\nIf this value is exceeded, an `'error'` event is emitted. The default\nsize is 2MB.\n\n```javascript\nform.maxFields = 1000;\n```\nLimits the number of fields that the querystring parser will decode. Defaults\nto 1000 (0 for unlimited).\n\n```javascript\nform.hash = false;\n```\nIf you want checksums calculated for incoming files, set this to either `'sha1'` or `'md5'`.\n\n```javascript\nform.multiples = false;\n```\nIf this option is enabled, when you call `form.parse`, the `files` argument will contain arrays of files for inputs which submit multiple files using the HTML5 `multiple` attribute.\n\n```javascript\nform.bytesReceived\n```\nThe amount of bytes received for this form so far.\n\n```javascript\nform.bytesExpected\n```\nThe expected number of bytes in this form.\n\n```javascript\nform.parse(request, [cb]);\n```\nParses an incoming node.js `request` containing form data. If `cb` is provided, all fields and files are collected and passed to the callback:\n\n\n```javascript\nform.parse(req, function(err, fields, files) {\n // ...\n});\n\nform.onPart(part);\n```\nYou may overwrite this method if you are interested in directly accessing the multipart stream. Doing so will disable any `'field'` / `'file'` events processing which would occur otherwise, making you fully responsible for handling the processing.\n\n```javascript\nform.onPart = function(part) {\n part.addListener('data', function() {\n // ...\n });\n}\n```\nIf you want to use formidable to only handle certain parts for you, you can do so:\n```javascript\nform.onPart = function(part) {\n if (!part.filename) {\n // let formidable handle all non-file parts\n form.handlePart(part);\n }\n}\n```\nCheck the code in this method for further inspiration.\n\n\n### Formidable.File\n```javascript\nfile.size = 0\n```\nThe size of the uploaded file in bytes. If the file is still being uploaded (see `'fileBegin'` event), this property says how many bytes of the file have been written to disk yet.\n```javascript\nfile.path = null\n```\nThe path this file is being written to. You can modify this in the `'fileBegin'` event in\ncase you are unhappy with the way formidable generates a temporary path for your files.\n```javascript\nfile.name = null\n```\nThe name this file had according to the uploading client.\n```javascript\nfile.type = null\n```\nThe mime type of this file, according to the uploading client.\n```javascript\nfile.lastModifiedDate = null\n```\nA date object (or `null`) containing the time this file was last written to. Mostly\nhere for compatibility with the [W3C File API Draft](http://dev.w3.org/2006/webapi/FileAPI/).\n```javascript\nfile.hash = null\n```\nIf hash calculation was set, you can read the hex digest out of this var.\n\n#### Formidable.File#toJSON()\n\n This method returns a JSON-representation of the file, allowing you to\n `JSON.stringify()` the file which is useful for logging and responding\n to requests.\n\n### Events\n\n\n#### 'progress'\n```javascript\nform.on('progress', function(bytesReceived, bytesExpected) {\n});\n```\nEmitted after each incoming chunk of data that has been parsed. Can be used to roll your own progress bar.\n\n\n\n#### 'field'\n```javascript\nform.on('field', function(name, value) {\n});\n```\n\n#### 'fileBegin'\n\nEmitted whenever a field / value pair has been received.\n```javascript\nform.on('fileBegin', function(name, file) {\n});\n```\n\n#### 'file'\n\nEmitted whenever a new file is detected in the upload stream. Use this even if\nyou want to stream the file to somewhere else while buffering the upload on\nthe file system.\n\nEmitted whenever a field / file pair has been received. `file` is an instance of `File`.\n```javascript\nform.on('file', function(name, file) {\n});\n```\n\n#### 'error'\n\nEmitted when there is an error processing the incoming form. A request that experiences an error is automatically paused, you will have to manually call `request.resume()` if you want the request to continue firing `'data'` events.\n```javascript\nform.on('error', function(err) {\n});\n```\n\n#### 'aborted'\n\n\nEmitted when the request was aborted by the user. Right now this can be due to a 'timeout' or 'close' event on the socket. In the future there will be a separate 'timeout' event (needs a change in the node core).\n```javascript\nform.on('aborted', function() {\n});\n```\n\n##### 'end'\n```javascript\nform.on('end', function() {\n});\n```\nEmitted when the entire request has been received, and all contained files have finished flushing to disk. This is a great place for you to send your response.\n\n\n\n## Changelog\n\n### v1.0.14\n\n* Add failing hash tests. (Ben Trask)\n* Enable hash calculation again (Eugene Girshov)\n* Test for immediate data events (Tim Smart)\n* Re-arrange IncomingForm#parse (Tim Smart)\n\n### v1.0.13\n\n* Only update hash if update method exists (Sven Lito)\n* According to travis v0.10 needs to go quoted (Sven Lito)\n* Bumping build node versions (Sven Lito)\n* Additional fix for empty requests (Eugene Girshov)\n* Change the default to 1000, to match the new Node behaviour. (OrangeDog)\n* Add ability to control maxKeys in the querystring parser. (OrangeDog)\n* Adjust test case to work with node 0.9.x (Eugene Girshov)\n* Update package.json (Sven Lito)\n* Path adjustment according to eb4468b (Markus Ast)\n\n### v1.0.12\n\n* Emit error on aborted connections (Eugene Girshov)\n* Add support for empty requests (Eugene Girshov)\n* Fix name/filename handling in Content-Disposition (jesperp)\n* Tolerate malformed closing boundary in multipart (Eugene Girshov)\n* Ignore preamble in multipart messages (Eugene Girshov)\n* Add support for application/json (Mike Frey, Carlos Rodriguez)\n* Add support for Base64 encoding (Elmer Bulthuis)\n* Add File#toJSON (TJ Holowaychuk)\n* Remove support for Node.js 0.4 & 0.6 (Andrew Kelley)\n* Documentation improvements (Sven Lito, Andre Azevedo)\n* Add support for application/octet-stream (Ion Lupascu, Chris Scribner)\n* Use os.tmpDir() to get tmp directory (Andrew Kelley)\n* Improve package.json (Andrew Kelley, Sven Lito)\n* Fix benchmark script (Andrew Kelley)\n* Fix scope issue in incoming_forms (Sven Lito)\n* Fix file handle leak on error (OrangeDog)\n\n### v1.0.11\n\n* Calculate checksums for incoming files (sreuter)\n* Add definition parameters to \"IncomingForm\" as an argument (Math-)\n\n### v1.0.10\n\n* Make parts to be proper Streams (Matt Robenolt)\n\n### v1.0.9\n\n* Emit progress when content length header parsed (Tim Koschützki)\n* Fix Readme syntax due to GitHub changes (goob)\n* Replace references to old 'sys' module in Readme with 'util' (Peter Sugihara)\n\n### v1.0.8\n\n* Strip potentially unsafe characters when using `keepExtensions: true`.\n* Switch to utest / urun for testing\n* Add travis build\n\n### v1.0.7\n\n* Remove file from package that was causing problems when installing on windows. (#102)\n* Fix typos in Readme (Jason Davies).\n\n### v1.0.6\n\n* Do not default to the default to the field name for file uploads where\n filename=\"\".\n\n### v1.0.5\n\n* Support filename=\"\" in multipart parts\n* Explain unexpected end() errors in parser better\n\n**Note:** Starting with this version, formidable emits 'file' events for empty\nfile input fields. Previously those were incorrectly emitted as regular file\ninput fields with value = \"\".\n\n### v1.0.4\n\n* Detect a good default tmp directory regardless of platform. (#88)\n\n### v1.0.3\n\n* Fix problems with utf8 characters (#84) / semicolons in filenames (#58)\n* Small performance improvements\n* New test suite and fixture system\n\n### v1.0.2\n\n* Exclude node\\_modules folder from git\n* Implement new `'aborted'` event\n* Fix files in example folder to work with recent node versions\n* Make gently a devDependency\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.1...v1.0.2)\n\n### v1.0.1\n\n* Fix package.json to refer to proper main directory. (#68, Dean Landolt)\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v1.0.0...v1.0.1)\n\n### v1.0.0\n\n* Add support for multipart boundaries that are quoted strings. (Jeff Craig)\n\nThis marks the beginning of development on version 2.0 which will include\nseveral architectural improvements.\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.11...v1.0.0)\n\n### v0.9.11\n\n* Emit `'progress'` event when receiving data, regardless of parsing it. (Tim Koschützki)\n* Use [W3C FileAPI Draft](http://dev.w3.org/2006/webapi/FileAPI/) properties for File class\n\n**Important:** The old property names of the File class will be removed in a\nfuture release.\n\n[See Commits](https://github.com/felixge/node-formidable/compare/v0.9.10...v0.9.11)\n\n### Older releases\n\nThese releases were done before starting to maintain the above Changelog:\n\n* [v0.9.10](https://github.com/felixge/node-formidable/compare/v0.9.9...v0.9.10)\n* [v0.9.9](https://github.com/felixge/node-formidable/compare/v0.9.8...v0.9.9)\n* [v0.9.8](https://github.com/felixge/node-formidable/compare/v0.9.7...v0.9.8)\n* [v0.9.7](https://github.com/felixge/node-formidable/compare/v0.9.6...v0.9.7)\n* [v0.9.6](https://github.com/felixge/node-formidable/compare/v0.9.5...v0.9.6)\n* [v0.9.5](https://github.com/felixge/node-formidable/compare/v0.9.4...v0.9.5)\n* [v0.9.4](https://github.com/felixge/node-formidable/compare/v0.9.3...v0.9.4)\n* [v0.9.3](https://github.com/felixge/node-formidable/compare/v0.9.2...v0.9.3)\n* [v0.9.2](https://github.com/felixge/node-formidable/compare/v0.9.1...v0.9.2)\n* [v0.9.1](https://github.com/felixge/node-formidable/compare/v0.9.0...v0.9.1)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.9.0](https://github.com/felixge/node-formidable/compare/v0.8.0...v0.9.0)\n* [v0.1.0](https://github.com/felixge/node-formidable/commits/v0.1.0)\n\n## License\n\nFormidable is licensed under the MIT license.\n\n## Ports\n\n* [multipart-parser](http://github.com/FooBarWidget/multipart-parser): a C++ parser based on formidable\n\n## Credits\n\n* [Ryan Dahl](http://twitter.com/ryah) for his work on [http-parser](http://github.com/ry/http-parser) which heavily inspired multipart_parser.js\n", "readmeFilename": "Readme.md", "dependencies": {}, - "_id": "formidable@1.0.14", - "_from": "formidable@1.0.14" + "_id": "formidable@1.0.15", + "_from": "formidable@^1.0.14" } diff --git a/node_modules/restify/node_modules/formidable/test/common.js b/node_modules/restify/node_modules/formidable/test/common.js deleted file mode 100644 index 6a94295..0000000 --- a/node_modules/restify/node_modules/formidable/test/common.js +++ /dev/null @@ -1,18 +0,0 @@ -var path = require('path'); - -var root = path.join(__dirname, '../'); -exports.dir = { - root : root, - lib : root + '/lib', - fixture : root + '/test/fixture', - tmp : root + '/test/tmp', -}; - -exports.port = 13532; - -exports.formidable = require('..'); -exports.assert = require('assert'); - -exports.require = function(lib) { - return require(exports.dir.lib + '/' + lib); -}; diff --git a/node_modules/restify/node_modules/formidable/test/fixture/file/beta-sticker-1.png b/node_modules/restify/node_modules/formidable/test/fixture/file/beta-sticker-1.png deleted file mode 100644 index 20b1a7f..0000000 Binary files a/node_modules/restify/node_modules/formidable/test/fixture/file/beta-sticker-1.png and /dev/null differ diff --git a/node_modules/restify/node_modules/formidable/test/fixture/file/binaryfile.tar.gz b/node_modules/restify/node_modules/formidable/test/fixture/file/binaryfile.tar.gz deleted file mode 100644 index 4a85af7..0000000 Binary files a/node_modules/restify/node_modules/formidable/test/fixture/file/binaryfile.tar.gz and /dev/null differ diff --git a/node_modules/restify/node_modules/formidable/test/fixture/file/blank.gif b/node_modules/restify/node_modules/formidable/test/fixture/file/blank.gif deleted file mode 100755 index 75b945d..0000000 Binary files a/node_modules/restify/node_modules/formidable/test/fixture/file/blank.gif and /dev/null differ diff --git a/node_modules/restify/node_modules/formidable/test/fixture/file/funkyfilename.txt b/node_modules/restify/node_modules/formidable/test/fixture/file/funkyfilename.txt deleted file mode 100644 index e7a4785..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/file/funkyfilename.txt +++ /dev/null @@ -1 +0,0 @@ -I am a text file with a funky name! diff --git a/node_modules/restify/node_modules/formidable/test/fixture/file/menu_separator.png b/node_modules/restify/node_modules/formidable/test/fixture/file/menu_separator.png deleted file mode 100644 index 1c16a71..0000000 Binary files a/node_modules/restify/node_modules/formidable/test/fixture/file/menu_separator.png and /dev/null differ diff --git a/node_modules/restify/node_modules/formidable/test/fixture/file/plain.txt b/node_modules/restify/node_modules/formidable/test/fixture/file/plain.txt deleted file mode 100644 index 9b6903e..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/file/plain.txt +++ /dev/null @@ -1 +0,0 @@ -I am a plain text file diff --git a/node_modules/restify/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md b/node_modules/restify/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md deleted file mode 100644 index 3c9dbe3..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/http/special-chars-in-filename/info.md +++ /dev/null @@ -1,3 +0,0 @@ -* Opera does not allow submitting this file, it shows a warning to the - user that the file could not be found instead. Tested in 9.8, 11.51 on OSX. - Reported to Opera on 08.09.2011 (tracking email DSK-346009@bugs.opera.com). diff --git a/node_modules/restify/node_modules/formidable/test/fixture/js/encoding.js b/node_modules/restify/node_modules/formidable/test/fixture/js/encoding.js deleted file mode 100644 index fc22026..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/js/encoding.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports['menu_seperator.png.http'] = [ - {type: 'file', name: 'image', filename: 'menu_separator.png', fixture: 'menu_separator.png', - sha1: 'c845ca3ea794be298f2a1b79769b71939eaf4e54'} -]; - -module.exports['beta-sticker-1.png.http'] = [ - {type: 'file', name: 'sticker', filename: 'beta-sticker-1.png', fixture: 'beta-sticker-1.png', - sha1: '6abbcffd12b4ada5a6a084fe9e4584f846331bc4'} -]; - -module.exports['blank.gif.http'] = [ - {type: 'file', name: 'file', filename: 'blank.gif', fixture: 'blank.gif', - sha1: 'a1fdee122b95748d81cee426d717c05b5174fe96'} -]; - -module.exports['binaryfile.tar.gz.http'] = [ - {type: 'file', name: 'file', filename: 'binaryfile.tar.gz', fixture: 'binaryfile.tar.gz', - sha1: 'cfabe13b348e5e69287d677860880c52a69d2155'} -]; - -module.exports['plain.txt.http'] = [ - {type: 'file', name: 'file', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'} -]; diff --git a/node_modules/restify/node_modules/formidable/test/fixture/js/misc.js b/node_modules/restify/node_modules/formidable/test/fixture/js/misc.js deleted file mode 100644 index 4489176..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/js/misc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - 'empty.http': [], - 'empty-urlencoded.http': [], - 'empty-multipart.http': [], - 'minimal.http': [], -}; diff --git a/node_modules/restify/node_modules/formidable/test/fixture/js/no-filename.js b/node_modules/restify/node_modules/formidable/test/fixture/js/no-filename.js deleted file mode 100644 index f03b4f0..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/js/no-filename.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports['generic.http'] = [ - {type: 'file', name: 'upload', filename: '', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; - -module.exports['filename-name.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; diff --git a/node_modules/restify/node_modules/formidable/test/fixture/js/preamble.js b/node_modules/restify/node_modules/formidable/test/fixture/js/preamble.js deleted file mode 100644 index d2e4cfd..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/js/preamble.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports['crlf.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; - -module.exports['preamble.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; diff --git a/node_modules/restify/node_modules/formidable/test/fixture/js/special-chars-in-filename.js b/node_modules/restify/node_modules/formidable/test/fixture/js/special-chars-in-filename.js deleted file mode 100644 index eb76fdc..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/js/special-chars-in-filename.js +++ /dev/null @@ -1,21 +0,0 @@ -var properFilename = 'funkyfilename.txt'; - -function expect(filename) { - return [ - {type: 'field', name: 'title', value: 'Weird filename'}, - {type: 'file', name: 'upload', filename: filename, fixture: properFilename}, - ]; -}; - -var webkit = " ? % * | \" < > . ? ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"; -var ffOrIe = " ? % * | \" < > . ☃ ; ' @ # $ ^ & ( ) - _ = + { } [ ] ` ~.txt"; - -module.exports = { - 'osx-chrome-13.http' : expect(webkit), - 'osx-firefox-3.6.http' : expect(ffOrIe), - 'osx-safari-5.http' : expect(webkit), - 'xp-chrome-12.http' : expect(webkit), - 'xp-ie-7.http' : expect(ffOrIe), - 'xp-ie-8.http' : expect(ffOrIe), - 'xp-safari-5.http' : expect(webkit), -}; diff --git a/node_modules/restify/node_modules/formidable/test/fixture/js/workarounds.js b/node_modules/restify/node_modules/formidable/test/fixture/js/workarounds.js deleted file mode 100644 index e59c5b2..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/js/workarounds.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports['missing-hyphens1.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; -module.exports['missing-hyphens2.http'] = [ - {type: 'file', name: 'upload', filename: 'plain.txt', fixture: 'plain.txt', - sha1: 'b31d07bac24ac32734de88b3687dddb10e976872'}, -]; diff --git a/node_modules/restify/node_modules/formidable/test/fixture/multipart.js b/node_modules/restify/node_modules/formidable/test/fixture/multipart.js deleted file mode 100644 index a476169..0000000 --- a/node_modules/restify/node_modules/formidable/test/fixture/multipart.js +++ /dev/null @@ -1,72 +0,0 @@ -exports['rfc1867'] = - { boundary: 'AaB03x', - raw: - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="field1"\r\n'+ - '\r\n'+ - 'Joe Blow\r\nalmost tricked you!\r\n'+ - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="pics"; filename="file1.txt"\r\n'+ - 'Content-Type: text/plain\r\n'+ - '\r\n'+ - '... contents of file1.txt ...\r\r\n'+ - '--AaB03x--\r\n', - parts: - [ { headers: { - 'content-disposition': 'form-data; name="field1"', - }, - data: 'Joe Blow\r\nalmost tricked you!', - }, - { headers: { - 'content-disposition': 'form-data; name="pics"; filename="file1.txt"', - 'Content-Type': 'text/plain', - }, - data: '... contents of file1.txt ...\r', - } - ] - }; - -exports['noTrailing\r\n'] = - { boundary: 'AaB03x', - raw: - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="field1"\r\n'+ - '\r\n'+ - 'Joe Blow\r\nalmost tricked you!\r\n'+ - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="pics"; filename="file1.txt"\r\n'+ - 'Content-Type: text/plain\r\n'+ - '\r\n'+ - '... contents of file1.txt ...\r\r\n'+ - '--AaB03x--', - parts: - [ { headers: { - 'content-disposition': 'form-data; name="field1"', - }, - data: 'Joe Blow\r\nalmost tricked you!', - }, - { headers: { - 'content-disposition': 'form-data; name="pics"; filename="file1.txt"', - 'Content-Type': 'text/plain', - }, - data: '... contents of file1.txt ...\r', - } - ] - }; - -exports['emptyHeader'] = - { boundary: 'AaB03x', - raw: - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="field1"\r\n'+ - ': foo\r\n'+ - '\r\n'+ - 'Joe Blow\r\nalmost tricked you!\r\n'+ - '--AaB03x\r\n'+ - 'content-disposition: form-data; name="pics"; filename="file1.txt"\r\n'+ - 'Content-Type: text/plain\r\n'+ - '\r\n'+ - '... contents of file1.txt ...\r\r\n'+ - '--AaB03x--\r\n', - expectError: true, - }; diff --git a/node_modules/restify/node_modules/formidable/test/integration/test-fixtures.js b/node_modules/restify/node_modules/formidable/test/integration/test-fixtures.js deleted file mode 100644 index 8e10ac9..0000000 --- a/node_modules/restify/node_modules/formidable/test/integration/test-fixtures.js +++ /dev/null @@ -1,96 +0,0 @@ -var hashish = require('hashish'); -var fs = require('fs'); -var findit = require('findit'); -var path = require('path'); -var http = require('http'); -var net = require('net'); -var assert = require('assert'); - -var common = require('../common'); -var formidable = common.formidable; - -var server = http.createServer(); -server.listen(common.port, findFixtures); - -function findFixtures() { - var fixtures = []; - findit - .sync(common.dir.fixture + '/js') - .forEach(function(jsPath) { - if (!/\.js$/.test(jsPath)) return; - - var group = path.basename(jsPath, '.js'); - hashish.forEach(require(jsPath), function(fixture, name) { - fixtures.push({ - name : group + '/' + name, - fixture : fixture, - }); - }); - }); - - testNext(fixtures); -} - -function testNext(fixtures) { - var fixture = fixtures.shift(); - if (!fixture) return server.close(); - - var name = fixture.name; - var fixture = fixture.fixture; - - uploadFixture(name, function(err, parts) { - if (err) throw err; - - fixture.forEach(function(expectedPart, i) { - var parsedPart = parts[i]; - assert.equal(parsedPart.type, expectedPart.type); - assert.equal(parsedPart.name, expectedPart.name); - - if (parsedPart.type === 'file') { - var file = parsedPart.value; - assert.equal(file.name, expectedPart.filename); - if(expectedPart.sha1) assert.equal(file.hash, expectedPart.sha1); - } - }); - - testNext(fixtures); - }); -}; - -function uploadFixture(name, cb) { - server.once('request', function(req, res) { - var form = new formidable.IncomingForm(); - form.uploadDir = common.dir.tmp; - form.hash = "sha1"; - form.parse(req); - - function callback() { - var realCallback = cb; - cb = function() {}; - realCallback.apply(null, arguments); - } - - var parts = []; - form - .on('error', callback) - .on('fileBegin', function(name, value) { - parts.push({type: 'file', name: name, value: value}); - }) - .on('field', function(name, value) { - parts.push({type: 'field', name: name, value: value}); - }) - .on('end', function() { - res.end('OK'); - callback(null, parts); - }); - }); - - var socket = net.createConnection(common.port); - var file = fs.createReadStream(common.dir.fixture + '/http/' + name); - - file.pipe(socket, {end: false}); - socket.on('data', function () { - socket.end(); - }); - -} diff --git a/node_modules/restify/node_modules/formidable/test/integration/test-json.js b/node_modules/restify/node_modules/formidable/test/integration/test-json.js deleted file mode 100644 index 28e758e..0000000 --- a/node_modules/restify/node_modules/formidable/test/integration/test-json.js +++ /dev/null @@ -1,38 +0,0 @@ -var common = require('../common'); -var formidable = common.formidable; -var http = require('http'); -var assert = require('assert'); - -var testData = { - numbers: [1, 2, 3, 4, 5], - nested: { key: 'value' } -}; - -var server = http.createServer(function(req, res) { - var form = new formidable.IncomingForm(); - - form.parse(req, function(err, fields, files) { - assert.deepEqual(fields, testData); - - res.end(); - server.close(); - }); -}); - -var port = common.port; - -server.listen(port, function(err){ - assert.equal(err, null); - - var request = http.request({ - port: port, - method: 'POST', - headers: { - 'Content-Type': 'application/json' - } - }); - - request.write(JSON.stringify(testData)); - request.end(); -}); - diff --git a/node_modules/restify/node_modules/formidable/test/integration/test-octet-stream.js b/node_modules/restify/node_modules/formidable/test/integration/test-octet-stream.js deleted file mode 100644 index 643d2c6..0000000 --- a/node_modules/restify/node_modules/formidable/test/integration/test-octet-stream.js +++ /dev/null @@ -1,45 +0,0 @@ -var common = require('../common'); -var formidable = common.formidable; -var http = require('http'); -var fs = require('fs'); -var path = require('path'); -var hashish = require('hashish'); -var assert = require('assert'); - -var testFilePath = path.join(__dirname, '../fixture/file/binaryfile.tar.gz'); - -var server = http.createServer(function(req, res) { - var form = new formidable.IncomingForm(); - - form.parse(req, function(err, fields, files) { - assert.equal(hashish(files).length, 1); - var file = files.file; - - assert.equal(file.size, 301); - - var uploaded = fs.readFileSync(file.path); - var original = fs.readFileSync(testFilePath); - - assert.deepEqual(uploaded, original); - - res.end(); - server.close(); - }); -}); - -var port = common.port; - -server.listen(port, function(err){ - assert.equal(err, null); - - var request = http.request({ - port: port, - method: 'POST', - headers: { - 'Content-Type': 'application/octet-stream' - } - }); - - fs.createReadStream(testFilePath).pipe(request); -}); - diff --git a/node_modules/restify/node_modules/formidable/test/legacy/common.js b/node_modules/restify/node_modules/formidable/test/legacy/common.js deleted file mode 100644 index 2b98598..0000000 --- a/node_modules/restify/node_modules/formidable/test/legacy/common.js +++ /dev/null @@ -1,24 +0,0 @@ -var path = require('path'), - fs = require('fs'); - -try { - global.Gently = require('gently'); -} catch (e) { - throw new Error('this test suite requires node-gently'); -} - -exports.lib = path.join(__dirname, '../../lib'); - -global.GENTLY = new Gently(); - -global.assert = require('assert'); -global.TEST_PORT = 13532; -global.TEST_FIXTURES = path.join(__dirname, '../fixture'); -global.TEST_TMP = path.join(__dirname, '../tmp'); - -// Stupid new feature in node that complains about gently attaching too many -// listeners to process 'exit'. This is a workaround until I can think of a -// better way to deal with this. -if (process.setMaxListeners) { - process.setMaxListeners(10000); -} diff --git a/node_modules/restify/node_modules/formidable/test/legacy/integration/test-multipart-parser.js b/node_modules/restify/node_modules/formidable/test/legacy/integration/test-multipart-parser.js deleted file mode 100644 index 75232aa..0000000 --- a/node_modules/restify/node_modules/formidable/test/legacy/integration/test-multipart-parser.js +++ /dev/null @@ -1,80 +0,0 @@ -var common = require('../common'); -var CHUNK_LENGTH = 10, - multipartParser = require(common.lib + '/multipart_parser'), - MultipartParser = multipartParser.MultipartParser, - parser = new MultipartParser(), - fixtures = require(TEST_FIXTURES + '/multipart'), - Buffer = require('buffer').Buffer; - -Object.keys(fixtures).forEach(function(name) { - var fixture = fixtures[name], - buffer = new Buffer(Buffer.byteLength(fixture.raw, 'binary')), - offset = 0, - chunk, - nparsed, - - parts = [], - part = null, - headerField, - headerValue, - endCalled = ''; - - parser.initWithBoundary(fixture.boundary); - parser.onPartBegin = function() { - part = {headers: {}, data: ''}; - parts.push(part); - headerField = ''; - headerValue = ''; - }; - - parser.onHeaderField = function(b, start, end) { - headerField += b.toString('ascii', start, end); - }; - - parser.onHeaderValue = function(b, start, end) { - headerValue += b.toString('ascii', start, end); - } - - parser.onHeaderEnd = function() { - part.headers[headerField] = headerValue; - headerField = ''; - headerValue = ''; - }; - - parser.onPartData = function(b, start, end) { - var str = b.toString('ascii', start, end); - part.data += b.slice(start, end); - } - - parser.onEnd = function() { - endCalled = true; - } - - buffer.write(fixture.raw, 'binary', 0); - - while (offset < buffer.length) { - if (offset + CHUNK_LENGTH < buffer.length) { - chunk = buffer.slice(offset, offset+CHUNK_LENGTH); - } else { - chunk = buffer.slice(offset, buffer.length); - } - offset = offset + CHUNK_LENGTH; - - nparsed = parser.write(chunk); - if (nparsed != chunk.length) { - if (fixture.expectError) { - return; - } - puts('-- ERROR --'); - p(chunk.toString('ascii')); - throw new Error(chunk.length+' bytes written, but only '+nparsed+' bytes parsed!'); - } - } - - if (fixture.expectError) { - throw new Error('expected parse error did not happen'); - } - - assert.ok(endCalled); - assert.deepEqual(parts, fixture.parts); -}); diff --git a/node_modules/restify/node_modules/formidable/test/legacy/simple/test-file.js b/node_modules/restify/node_modules/formidable/test/legacy/simple/test-file.js deleted file mode 100644 index 52ceedb..0000000 --- a/node_modules/restify/node_modules/formidable/test/legacy/simple/test-file.js +++ /dev/null @@ -1,104 +0,0 @@ -var common = require('../common'); -var WriteStreamStub = GENTLY.stub('fs', 'WriteStream'); - -var File = require(common.lib + '/file'), - EventEmitter = require('events').EventEmitter, - file, - gently; - -function test(test) { - gently = new Gently(); - file = new File(); - test(); - gently.verify(test.name); -} - -test(function constructor() { - assert.ok(file instanceof EventEmitter); - assert.strictEqual(file.size, 0); - assert.strictEqual(file.path, null); - assert.strictEqual(file.name, null); - assert.strictEqual(file.type, null); - assert.strictEqual(file.lastModifiedDate, null); - - assert.strictEqual(file._writeStream, null); - - (function testSetProperties() { - var file2 = new File({foo: 'bar'}); - assert.equal(file2.foo, 'bar'); - })(); -}); - -test(function open() { - var WRITE_STREAM; - file.path = '/foo'; - - gently.expect(WriteStreamStub, 'new', function (path) { - WRITE_STREAM = this; - assert.strictEqual(path, file.path); - }); - - file.open(); - assert.strictEqual(file._writeStream, WRITE_STREAM); -}); - -test(function write() { - var BUFFER = {length: 10}, - CB_STUB, - CB = function() { - CB_STUB.apply(this, arguments); - }; - - file._writeStream = {}; - - gently.expect(file._writeStream, 'write', function (buffer, cb) { - assert.strictEqual(buffer, BUFFER); - - gently.expect(file, 'emit', function (event, bytesWritten) { - assert.ok(file.lastModifiedDate instanceof Date); - assert.equal(event, 'progress'); - assert.equal(bytesWritten, file.size); - }); - - CB_STUB = gently.expect(function writeCb() { - assert.equal(file.size, 10); - }); - - cb(); - - gently.expect(file, 'emit', function (event, bytesWritten) { - assert.equal(event, 'progress'); - assert.equal(bytesWritten, file.size); - }); - - CB_STUB = gently.expect(function writeCb() { - assert.equal(file.size, 20); - }); - - cb(); - }); - - file.write(BUFFER, CB); -}); - -test(function end() { - var CB_STUB, - CB = function() { - CB_STUB.apply(this, arguments); - }; - - file._writeStream = {}; - - gently.expect(file._writeStream, 'end', function (cb) { - gently.expect(file, 'emit', function (event) { - assert.equal(event, 'end'); - }); - - CB_STUB = gently.expect(function endCb() { - }); - - cb(); - }); - - file.end(CB); -}); diff --git a/node_modules/restify/node_modules/formidable/test/legacy/simple/test-incoming-form.js b/node_modules/restify/node_modules/formidable/test/legacy/simple/test-incoming-form.js deleted file mode 100644 index 25bd887..0000000 --- a/node_modules/restify/node_modules/formidable/test/legacy/simple/test-incoming-form.js +++ /dev/null @@ -1,756 +0,0 @@ -var common = require('../common'); -var MultipartParserStub = GENTLY.stub('./multipart_parser', 'MultipartParser'), - QuerystringParserStub = GENTLY.stub('./querystring_parser', 'QuerystringParser'), - EventEmitterStub = GENTLY.stub('events', 'EventEmitter'), - StreamStub = GENTLY.stub('stream', 'Stream'), - FileStub = GENTLY.stub('./file'); - -var formidable = require(common.lib + '/index'), - IncomingForm = formidable.IncomingForm, - events = require('events'), - fs = require('fs'), - path = require('path'), - Buffer = require('buffer').Buffer, - fixtures = require(TEST_FIXTURES + '/multipart'), - form, - gently; - -function test(test) { - gently = new Gently(); - gently.expect(EventEmitterStub, 'call'); - form = new IncomingForm(); - test(); - gently.verify(test.name); -} - -test(function constructor() { - assert.strictEqual(form.error, null); - assert.strictEqual(form.ended, false); - assert.strictEqual(form.type, null); - assert.strictEqual(form.headers, null); - assert.strictEqual(form.keepExtensions, false); - // Can't assume dir === '/tmp' for portability - // assert.strictEqual(form.uploadDir, '/tmp'); - // Make sure it is a directory instead - assert.doesNotThrow(function () { - assert(fs.statSync(form.uploadDir).isDirectory()); - }); - assert.strictEqual(form.encoding, 'utf-8'); - assert.strictEqual(form.bytesReceived, null); - assert.strictEqual(form.bytesExpected, null); - assert.strictEqual(form.maxFieldsSize, 2 * 1024 * 1024); - assert.strictEqual(form._parser, null); - assert.strictEqual(form._flushing, 0); - assert.strictEqual(form._fieldsSize, 0); - assert.ok(form instanceof EventEmitterStub); - assert.equal(form.constructor.name, 'IncomingForm'); - - (function testSimpleConstructor() { - gently.expect(EventEmitterStub, 'call'); - var form = IncomingForm(); - assert.ok(form instanceof IncomingForm); - })(); - - (function testSimpleConstructorShortcut() { - gently.expect(EventEmitterStub, 'call'); - var form = formidable(); - assert.ok(form instanceof IncomingForm); - })(); -}); - -test(function parse() { - var REQ = {headers: {}} - , emit = {}; - - gently.expect(form, 'writeHeaders', function(headers) { - assert.strictEqual(headers, REQ.headers); - }); - - var EVENTS = ['error', 'aborted', 'data', 'end']; - gently.expect(REQ, 'on', EVENTS.length, function(event, fn) { - assert.equal(event, EVENTS.shift()); - emit[event] = fn; - return this; - }); - - form.parse(REQ); - - (function testPause() { - gently.expect(REQ, 'pause'); - assert.strictEqual(form.pause(), true); - })(); - - (function testPauseCriticalException() { - form.ended = false; - - var ERR = new Error('dasdsa'); - gently.expect(REQ, 'pause', function() { - throw ERR; - }); - - gently.expect(form, '_error', function(err) { - assert.strictEqual(err, ERR); - }); - - assert.strictEqual(form.pause(), false); - })(); - - (function testPauseHarmlessException() { - form.ended = true; - - var ERR = new Error('dasdsa'); - gently.expect(REQ, 'pause', function() { - throw ERR; - }); - - assert.strictEqual(form.pause(), false); - })(); - - (function testResume() { - gently.expect(REQ, 'resume'); - assert.strictEqual(form.resume(), true); - })(); - - (function testResumeCriticalException() { - form.ended = false; - - var ERR = new Error('dasdsa'); - gently.expect(REQ, 'resume', function() { - throw ERR; - }); - - gently.expect(form, '_error', function(err) { - assert.strictEqual(err, ERR); - }); - - assert.strictEqual(form.resume(), false); - })(); - - (function testResumeHarmlessException() { - form.ended = true; - - var ERR = new Error('dasdsa'); - gently.expect(REQ, 'resume', function() { - throw ERR; - }); - - assert.strictEqual(form.resume(), false); - })(); - - (function testEmitError() { - var ERR = new Error('something bad happened'); - gently.expect(form, '_error',function(err) { - assert.strictEqual(err, ERR); - }); - emit.error(ERR); - })(); - - (function testEmitAborted() { - gently.expect(form, 'emit',function(event) { - assert.equal(event, 'aborted'); - }); - gently.expect(form, '_error'); - - emit.aborted(); - })(); - - - (function testEmitData() { - var BUFFER = [1, 2, 3]; - gently.expect(form, 'write', function(buffer) { - assert.strictEqual(buffer, BUFFER); - }); - emit.data(BUFFER); - })(); - - (function testEmitEnd() { - form._parser = {}; - - (function testWithError() { - var ERR = new Error('haha'); - gently.expect(form._parser, 'end', function() { - return ERR; - }); - - gently.expect(form, '_error', function(err) { - assert.strictEqual(err, ERR); - }); - - emit.end(); - })(); - - (function testWithoutError() { - gently.expect(form._parser, 'end'); - emit.end(); - })(); - - (function testAfterError() { - form.error = true; - emit.end(); - })(); - })(); - - (function testWithCallback() { - gently.expect(EventEmitterStub, 'call'); - var form = new IncomingForm(), - REQ = {headers: {}}, - parseCalled = 0; - - gently.expect(form, 'on', 4, function(event, fn) { - if (event == 'field') { - fn('field1', 'foo'); - fn('field1', 'bar'); - fn('field2', 'nice'); - } - - if (event == 'file') { - fn('file1', '1'); - fn('file1', '2'); - fn('file2', '3'); - } - - if (event == 'end') { - fn(); - } - return this; - }); - - gently.expect(form, 'writeHeaders'); - - gently.expect(REQ, 'on', 4, function() { - return this; - }); - - var parseCbOk = function (err, fields, files) { - assert.deepEqual(fields, {field1: 'bar', field2: 'nice'}); - assert.deepEqual(files, {file1: '2', file2: '3'}); - }; - form.parse(REQ, parseCbOk); - - var ERR = new Error('test'); - gently.expect(form, 'on', 3, function(event, fn) { - if (event == 'field') { - fn('foo', 'bar'); - } - - if (event == 'error') { - fn(ERR); - gently.expect(form, 'on'); - gently.expect(form, 'writeHeaders'); - gently.expect(REQ, 'on', 4, function() { - return this; - }); - } - return this; - }); - - form.parse(REQ, function parseCbErr(err, fields, files) { - assert.strictEqual(err, ERR); - assert.deepEqual(fields, {foo: 'bar'}); - }); - })(); - - (function testWriteOrder() { - gently.expect(EventEmitterStub, 'call'); - var form = new IncomingForm(); - var REQ = new events.EventEmitter(); - var BUF = {}; - var DATACB = null; - - REQ.on('newListener', function(event, fn) { - if ('data' === event) fn(BUF); - }); - - gently.expect(form, 'writeHeaders'); - gently.expect(form, 'write', function(buf) { - assert.strictEqual(buf, BUF); - }); - - form.parse(REQ); - })(); -}); - -test(function pause() { - assert.strictEqual(form.pause(), false); -}); - -test(function resume() { - assert.strictEqual(form.resume(), false); -}); - - -test(function writeHeaders() { - var HEADERS = {}; - gently.expect(form, '_parseContentLength'); - gently.expect(form, '_parseContentType'); - - form.writeHeaders(HEADERS); - assert.strictEqual(form.headers, HEADERS); -}); - -test(function write() { - var parser = {}, - BUFFER = [1, 2, 3]; - - form._parser = parser; - form.bytesExpected = 523423; - - (function testBasic() { - gently.expect(form, 'emit', function(event, bytesReceived, bytesExpected) { - assert.equal(event, 'progress'); - assert.equal(bytesReceived, BUFFER.length); - assert.equal(bytesExpected, form.bytesExpected); - }); - - gently.expect(parser, 'write', function(buffer) { - assert.strictEqual(buffer, BUFFER); - return buffer.length; - }); - - assert.equal(form.write(BUFFER), BUFFER.length); - assert.equal(form.bytesReceived, BUFFER.length); - })(); - - (function testParserError() { - gently.expect(form, 'emit'); - - gently.expect(parser, 'write', function(buffer) { - assert.strictEqual(buffer, BUFFER); - return buffer.length - 1; - }); - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/parser error/i)); - }); - - assert.equal(form.write(BUFFER), BUFFER.length - 1); - assert.equal(form.bytesReceived, BUFFER.length + BUFFER.length); - })(); - - (function testUninitialized() { - delete form._parser; - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/unintialized parser/i)); - }); - form.write(BUFFER); - })(); -}); - -test(function parseContentType() { - var HEADERS = {}; - - form.headers = {'content-type': 'application/x-www-form-urlencoded'}; - gently.expect(form, '_initUrlencoded'); - form._parseContentType(); - - // accept anything that has 'urlencoded' in it - form.headers = {'content-type': 'broken-client/urlencoded-stupid'}; - gently.expect(form, '_initUrlencoded'); - form._parseContentType(); - - var BOUNDARY = '---------------------------57814261102167618332366269'; - form.headers = {'content-type': 'multipart/form-data; boundary='+BOUNDARY}; - - gently.expect(form, '_initMultipart', function(boundary) { - assert.equal(boundary, BOUNDARY); - }); - form._parseContentType(); - - (function testQuotedBoundary() { - form.headers = {'content-type': 'multipart/form-data; boundary="' + BOUNDARY + '"'}; - - gently.expect(form, '_initMultipart', function(boundary) { - assert.equal(boundary, BOUNDARY); - }); - form._parseContentType(); - })(); - - (function testNoBoundary() { - form.headers = {'content-type': 'multipart/form-data'}; - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/no multipart boundary/i)); - }); - form._parseContentType(); - })(); - - (function testNoContentType() { - form.headers = {}; - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/no content-type/i)); - }); - form._parseContentType(); - })(); - - (function testUnknownContentType() { - form.headers = {'content-type': 'invalid'}; - - gently.expect(form, '_error', function(err) { - assert.ok(err.message.match(/unknown content-type/i)); - }); - form._parseContentType(); - })(); -}); - -test(function parseContentLength() { - var HEADERS = {}; - - form.headers = {}; - gently.expect(form, 'emit', function(event, bytesReceived, bytesExpected) { - assert.equal(event, 'progress'); - assert.equal(bytesReceived, 0); - assert.equal(bytesExpected, 0); - }); - form._parseContentLength(); - - form.headers['content-length'] = '8'; - gently.expect(form, 'emit', function(event, bytesReceived, bytesExpected) { - assert.equal(event, 'progress'); - assert.equal(bytesReceived, 0); - assert.equal(bytesExpected, 8); - }); - form._parseContentLength(); - assert.strictEqual(form.bytesReceived, 0); - assert.strictEqual(form.bytesExpected, 8); - - // JS can be evil, lets make sure we are not - form.headers['content-length'] = '08'; - gently.expect(form, 'emit', function(event, bytesReceived, bytesExpected) { - assert.equal(event, 'progress'); - assert.equal(bytesReceived, 0); - assert.equal(bytesExpected, 8); - }); - form._parseContentLength(); - assert.strictEqual(form.bytesExpected, 8); -}); - -test(function _initMultipart() { - var BOUNDARY = '123', - PARSER; - - gently.expect(MultipartParserStub, 'new', function() { - PARSER = this; - }); - - gently.expect(MultipartParserStub.prototype, 'initWithBoundary', function(boundary) { - assert.equal(boundary, BOUNDARY); - }); - - form._initMultipart(BOUNDARY); - assert.equal(form.type, 'multipart'); - assert.strictEqual(form._parser, PARSER); - - (function testRegularField() { - var PART; - gently.expect(StreamStub, 'new', function() { - PART = this; - }); - - gently.expect(form, 'onPart', function(part) { - assert.strictEqual(part, PART); - assert.deepEqual - ( part.headers - , { 'content-disposition': 'form-data; name="field1"' - , 'foo': 'bar' - } - ); - assert.equal(part.name, 'field1'); - - var strings = ['hello', ' world']; - gently.expect(part, 'emit', 2, function(event, b) { - assert.equal(event, 'data'); - assert.equal(b.toString(), strings.shift()); - }); - - gently.expect(part, 'emit', function(event, b) { - assert.equal(event, 'end'); - }); - }); - - PARSER.onPartBegin(); - PARSER.onHeaderField(new Buffer('content-disposition'), 0, 10); - PARSER.onHeaderField(new Buffer('content-disposition'), 10, 19); - PARSER.onHeaderValue(new Buffer('form-data; name="field1"'), 0, 14); - PARSER.onHeaderValue(new Buffer('form-data; name="field1"'), 14, 24); - PARSER.onHeaderEnd(); - PARSER.onHeaderField(new Buffer('foo'), 0, 3); - PARSER.onHeaderValue(new Buffer('bar'), 0, 3); - PARSER.onHeaderEnd(); - PARSER.onHeadersEnd(); - PARSER.onPartData(new Buffer('hello world'), 0, 5); - PARSER.onPartData(new Buffer('hello world'), 5, 11); - PARSER.onPartEnd(); - })(); - - (function testFileField() { - var PART; - gently.expect(StreamStub, 'new', function() { - PART = this; - }); - - gently.expect(form, 'onPart', function(part) { - assert.deepEqual - ( part.headers - , { 'content-disposition': 'form-data; name="field2"; filename="C:\\Documents and Settings\\IE\\Must\\Die\\Sun"et.jpg"' - , 'content-type': 'text/plain' - } - ); - assert.equal(part.name, 'field2'); - assert.equal(part.filename, 'Sun"et.jpg'); - assert.equal(part.mime, 'text/plain'); - - gently.expect(part, 'emit', function(event, b) { - assert.equal(event, 'data'); - assert.equal(b.toString(), '... contents of file1.txt ...'); - }); - - gently.expect(part, 'emit', function(event, b) { - assert.equal(event, 'end'); - }); - }); - - PARSER.onPartBegin(); - PARSER.onHeaderField(new Buffer('content-disposition'), 0, 19); - PARSER.onHeaderValue(new Buffer('form-data; name="field2"; filename="C:\\Documents and Settings\\IE\\Must\\Die\\Sun"et.jpg"'), 0, 85); - PARSER.onHeaderEnd(); - PARSER.onHeaderField(new Buffer('Content-Type'), 0, 12); - PARSER.onHeaderValue(new Buffer('text/plain'), 0, 10); - PARSER.onHeaderEnd(); - PARSER.onHeadersEnd(); - PARSER.onPartData(new Buffer('... contents of file1.txt ...'), 0, 29); - PARSER.onPartEnd(); - })(); - - (function testEnd() { - gently.expect(form, '_maybeEnd'); - PARSER.onEnd(); - assert.ok(form.ended); - })(); -}); - -test(function _fileName() { - // TODO - return; -}); - -test(function _initUrlencoded() { - var PARSER; - - gently.expect(QuerystringParserStub, 'new', function() { - PARSER = this; - }); - - form._initUrlencoded(); - assert.equal(form.type, 'urlencoded'); - assert.strictEqual(form._parser, PARSER); - - (function testOnField() { - var KEY = 'KEY', VAL = 'VAL'; - gently.expect(form, 'emit', function(field, key, val) { - assert.equal(field, 'field'); - assert.equal(key, KEY); - assert.equal(val, VAL); - }); - - PARSER.onField(KEY, VAL); - })(); - - (function testOnEnd() { - gently.expect(form, '_maybeEnd'); - - PARSER.onEnd(); - assert.equal(form.ended, true); - })(); -}); - -test(function _error() { - var ERR = new Error('bla'); - - gently.expect(form, 'pause'); - gently.expect(form, 'emit', function(event, err) { - assert.equal(event, 'error'); - assert.strictEqual(err, ERR); - }); - - form._error(ERR); - assert.strictEqual(form.error, ERR); - - // make sure _error only does its thing once - form._error(ERR); -}); - -test(function onPart() { - var PART = {}; - gently.expect(form, 'handlePart', function(part) { - assert.strictEqual(part, PART); - }); - - form.onPart(PART); -}); - -test(function handlePart() { - (function testUtf8Field() { - var PART = new events.EventEmitter(); - PART.name = 'my_field'; - - gently.expect(form, 'emit', function(event, field, value) { - assert.equal(event, 'field'); - assert.equal(field, 'my_field'); - assert.equal(value, 'hello world: €'); - }); - - form.handlePart(PART); - PART.emit('data', new Buffer('hello')); - PART.emit('data', new Buffer(' world: ')); - PART.emit('data', new Buffer([0xE2])); - PART.emit('data', new Buffer([0x82, 0xAC])); - PART.emit('end'); - })(); - - (function testBinaryField() { - var PART = new events.EventEmitter(); - PART.name = 'my_field2'; - - gently.expect(form, 'emit', function(event, field, value) { - assert.equal(event, 'field'); - assert.equal(field, 'my_field2'); - assert.equal(value, 'hello world: '+new Buffer([0xE2, 0x82, 0xAC]).toString('binary')); - }); - - form.encoding = 'binary'; - form.handlePart(PART); - PART.emit('data', new Buffer('hello')); - PART.emit('data', new Buffer(' world: ')); - PART.emit('data', new Buffer([0xE2])); - PART.emit('data', new Buffer([0x82, 0xAC])); - PART.emit('end'); - })(); - - (function testFieldSize() { - form.maxFieldsSize = 8; - var PART = new events.EventEmitter(); - PART.name = 'my_field'; - - gently.expect(form, '_error', function(err) { - assert.equal(err.message, 'maxFieldsSize exceeded, received 9 bytes of field data'); - }); - - form.handlePart(PART); - form._fieldsSize = 1; - PART.emit('data', new Buffer(7)); - PART.emit('data', new Buffer(1)); - })(); - - (function testFilePart() { - var PART = new events.EventEmitter(), - FILE = new events.EventEmitter(), - PATH = '/foo/bar'; - - PART.name = 'my_file'; - PART.filename = 'sweet.txt'; - PART.mime = 'sweet.txt'; - - gently.expect(form, '_uploadPath', function(filename) { - assert.equal(filename, PART.filename); - return PATH; - }); - - gently.expect(FileStub, 'new', function(properties) { - assert.equal(properties.path, PATH); - assert.equal(properties.name, PART.filename); - assert.equal(properties.type, PART.mime); - FILE = this; - - gently.expect(form, 'emit', function (event, field, file) { - assert.equal(event, 'fileBegin'); - assert.strictEqual(field, PART.name); - assert.strictEqual(file, FILE); - }); - - gently.expect(FILE, 'open'); - }); - - form.handlePart(PART); - assert.equal(form._flushing, 1); - - var BUFFER; - gently.expect(form, 'pause'); - gently.expect(FILE, 'write', function(buffer, cb) { - assert.strictEqual(buffer, BUFFER); - gently.expect(form, 'resume'); - // @todo handle cb(new Err) - cb(); - }); - - PART.emit('data', BUFFER = new Buffer('test')); - - gently.expect(FILE, 'end', function(cb) { - gently.expect(form, 'emit', function(event, field, file) { - assert.equal(event, 'file'); - assert.strictEqual(file, FILE); - }); - - gently.expect(form, '_maybeEnd'); - - cb(); - assert.equal(form._flushing, 0); - }); - - PART.emit('end'); - })(); -}); - -test(function _uploadPath() { - (function testUniqueId() { - var UUID_A, UUID_B; - gently.expect(GENTLY.hijacked.path, 'join', function(uploadDir, uuid) { - assert.equal(uploadDir, form.uploadDir); - UUID_A = uuid; - }); - form._uploadPath(); - - gently.expect(GENTLY.hijacked.path, 'join', function(uploadDir, uuid) { - UUID_B = uuid; - }); - form._uploadPath(); - - assert.notEqual(UUID_A, UUID_B); - })(); - - (function testFileExtension() { - form.keepExtensions = true; - var FILENAME = 'foo.jpg', - EXT = '.bar'; - - gently.expect(GENTLY.hijacked.path, 'extname', function(filename) { - assert.equal(filename, FILENAME); - gently.restore(path, 'extname'); - - return EXT; - }); - - gently.expect(GENTLY.hijacked.path, 'join', function(uploadDir, name) { - assert.equal(path.extname(name), EXT); - }); - form._uploadPath(FILENAME); - })(); -}); - -test(function _maybeEnd() { - gently.expect(form, 'emit', 0); - form._maybeEnd(); - - form.ended = true; - form._flushing = 1; - form._maybeEnd(); - - gently.expect(form, 'emit', function(event) { - assert.equal(event, 'end'); - }); - - form.ended = true; - form._flushing = 0; - form._maybeEnd(); -}); diff --git a/node_modules/restify/node_modules/formidable/test/legacy/simple/test-multipart-parser.js b/node_modules/restify/node_modules/formidable/test/legacy/simple/test-multipart-parser.js deleted file mode 100644 index bf2cd5e..0000000 --- a/node_modules/restify/node_modules/formidable/test/legacy/simple/test-multipart-parser.js +++ /dev/null @@ -1,50 +0,0 @@ -var common = require('../common'); -var multipartParser = require(common.lib + '/multipart_parser'), - MultipartParser = multipartParser.MultipartParser, - events = require('events'), - Buffer = require('buffer').Buffer, - parser; - -function test(test) { - parser = new MultipartParser(); - test(); -} - -test(function constructor() { - assert.equal(parser.boundary, null); - assert.equal(parser.state, 0); - assert.equal(parser.flags, 0); - assert.equal(parser.boundaryChars, null); - assert.equal(parser.index, null); - assert.equal(parser.lookbehind, null); - assert.equal(parser.constructor.name, 'MultipartParser'); -}); - -test(function initWithBoundary() { - var boundary = 'abc'; - parser.initWithBoundary(boundary); - assert.deepEqual(Array.prototype.slice.call(parser.boundary), [13, 10, 45, 45, 97, 98, 99]); - assert.equal(parser.state, multipartParser.START); - - assert.deepEqual(parser.boundaryChars, {10: true, 13: true, 45: true, 97: true, 98: true, 99: true}); -}); - -test(function parserError() { - var boundary = 'abc', - buffer = new Buffer(5); - - parser.initWithBoundary(boundary); - buffer.write('--ad', 'ascii', 0); - assert.equal(parser.write(buffer), 5); -}); - -test(function end() { - (function testError() { - assert.equal(parser.end().message, 'MultipartParser.end(): stream ended unexpectedly: ' + parser.explain()); - })(); - - (function testRegular() { - parser.state = multipartParser.END; - assert.strictEqual(parser.end(), undefined); - })(); -}); diff --git a/node_modules/restify/node_modules/formidable/test/legacy/simple/test-querystring-parser.js b/node_modules/restify/node_modules/formidable/test/legacy/simple/test-querystring-parser.js deleted file mode 100644 index 54d3e2d..0000000 --- a/node_modules/restify/node_modules/formidable/test/legacy/simple/test-querystring-parser.js +++ /dev/null @@ -1,45 +0,0 @@ -var common = require('../common'); -var QuerystringParser = require(common.lib + '/querystring_parser').QuerystringParser, - Buffer = require('buffer').Buffer, - gently, - parser; - -function test(test) { - gently = new Gently(); - parser = new QuerystringParser(); - test(); - gently.verify(test.name); -} - -test(function constructor() { - assert.equal(parser.buffer, ''); - assert.equal(parser.constructor.name, 'QuerystringParser'); -}); - -test(function write() { - var a = new Buffer('a=1'); - assert.equal(parser.write(a), a.length); - - var b = new Buffer('&b=2'); - parser.write(b); - assert.equal(parser.buffer, a + b); -}); - -test(function end() { - var FIELDS = {a: ['b', {c: 'd'}], e: 'f'}; - - gently.expect(GENTLY.hijacked.querystring, 'parse', function(str) { - assert.equal(str, parser.buffer); - return FIELDS; - }); - - gently.expect(parser, 'onField', Object.keys(FIELDS).length, function(key, val) { - assert.deepEqual(FIELDS[key], val); - }); - - gently.expect(parser, 'onEnd'); - - parser.buffer = 'my buffer'; - parser.end(); - assert.equal(parser.buffer, ''); -}); diff --git a/node_modules/restify/node_modules/formidable/test/legacy/system/test-multi-video-upload.js b/node_modules/restify/node_modules/formidable/test/legacy/system/test-multi-video-upload.js deleted file mode 100644 index b35ffd6..0000000 --- a/node_modules/restify/node_modules/formidable/test/legacy/system/test-multi-video-upload.js +++ /dev/null @@ -1,71 +0,0 @@ -var common = require('../common'); -var BOUNDARY = '---------------------------10102754414578508781458777923', - FIXTURE = TEST_FIXTURES+'/multi_video.upload', - fs = require('fs'), - http = require('http'), - formidable = require(common.lib + '/index'), - server = http.createServer(); - -server.on('request', function(req, res) { - var form = new formidable.IncomingForm(), - uploads = {}; - - form.uploadDir = TEST_TMP; - form.hash = 'sha1'; - form.parse(req); - - form - .on('fileBegin', function(field, file) { - assert.equal(field, 'upload'); - - var tracker = {file: file, progress: [], ended: false}; - uploads[file.name] = tracker; - file - .on('progress', function(bytesReceived) { - tracker.progress.push(bytesReceived); - assert.equal(bytesReceived, file.size); - }) - .on('end', function() { - tracker.ended = true; - }); - }) - .on('field', function(field, value) { - assert.equal(field, 'title'); - assert.equal(value, ''); - }) - .on('file', function(field, file) { - assert.equal(field, 'upload'); - assert.strictEqual(uploads[file.name].file, file); - }) - .on('end', function() { - assert.ok(uploads['shortest_video.flv']); - assert.ok(uploads['shortest_video.flv'].ended); - assert.ok(uploads['shortest_video.flv'].progress.length > 3); - assert.equal(uploads['shortest_video.flv'].file.hash, 'd6a17616c7143d1b1438ceeef6836d1a09186b3a'); - assert.equal(uploads['shortest_video.flv'].progress.slice(-1), uploads['shortest_video.flv'].file.size); - assert.ok(uploads['shortest_video.mp4']); - assert.ok(uploads['shortest_video.mp4'].ended); - assert.ok(uploads['shortest_video.mp4'].progress.length > 3); - assert.equal(uploads['shortest_video.mp4'].file.hash, '937dfd4db263f4887ceae19341dcc8d63bcd557f'); - - server.close(); - res.writeHead(200); - res.end('good'); - }); -}); - -server.listen(TEST_PORT, function() { - var stat, headers, request, fixture; - - stat = fs.statSync(FIXTURE); - request = http.request({ - port: TEST_PORT, - path: '/', - method: 'POST', - headers: { - 'content-type': 'multipart/form-data; boundary='+BOUNDARY, - 'content-length': stat.size, - }, - }); - fs.createReadStream(FIXTURE).pipe(request); -}); diff --git a/node_modules/restify/node_modules/formidable/test/run.js b/node_modules/restify/node_modules/formidable/test/run.js deleted file mode 100755 index 02d6d5c..0000000 --- a/node_modules/restify/node_modules/formidable/test/run.js +++ /dev/null @@ -1 +0,0 @@ -require('urun')(__dirname) diff --git a/node_modules/restify/node_modules/formidable/test/standalone/test-connection-aborted.js b/node_modules/restify/node_modules/formidable/test/standalone/test-connection-aborted.js deleted file mode 100644 index 4ea4431..0000000 --- a/node_modules/restify/node_modules/formidable/test/standalone/test-connection-aborted.js +++ /dev/null @@ -1,27 +0,0 @@ -var assert = require('assert'); -var http = require('http'); -var net = require('net'); -var formidable = require('../../lib/index'); - -var server = http.createServer(function (req, res) { - var form = new formidable.IncomingForm(); - var aborted_received = false; - form.on('aborted', function () { - aborted_received = true; - }); - form.on('error', function () { - assert(aborted_received, 'Error event should follow aborted'); - server.close(); - }); - form.on('end', function () { - throw new Error('Unexpected "end" event'); - }); - form.parse(req); -}).listen(0, 'localhost', function () { - var client = net.connect(server.address().port); - client.write( - "POST / HTTP/1.1\r\n" + - "Content-Length: 70\r\n" + - "Content-Type: multipart/form-data; boundary=foo\r\n\r\n"); - client.end(); -}); diff --git a/node_modules/restify/node_modules/formidable/test/standalone/test-content-transfer-encoding.js b/node_modules/restify/node_modules/formidable/test/standalone/test-content-transfer-encoding.js deleted file mode 100644 index 165628a..0000000 --- a/node_modules/restify/node_modules/formidable/test/standalone/test-content-transfer-encoding.js +++ /dev/null @@ -1,48 +0,0 @@ -var assert = require('assert'); -var common = require('../common'); -var formidable = require('../../lib/index'); -var http = require('http'); - -var server = http.createServer(function(req, res) { - var form = new formidable.IncomingForm(); - form.uploadDir = common.dir.tmp; - form.on('end', function () { - throw new Error('Unexpected "end" event'); - }); - form.on('error', function (e) { - res.writeHead(500); - res.end(e.message); - }); - form.parse(req); -}); - -server.listen(0, function() { - var body = - '--foo\r\n' + - 'Content-Disposition: form-data; name="file1"; filename="file1"\r\n' + - 'Content-Type: application/octet-stream\r\n' + - '\r\nThis is the first file\r\n' + - '--foo\r\n' + - 'Content-Type: application/octet-stream\r\n' + - 'Content-Disposition: form-data; name="file2"; filename="file2"\r\n' + - 'Content-Transfer-Encoding: unknown\r\n' + - '\r\nThis is the second file\r\n' + - '--foo--\r\n'; - - var req = http.request({ - method: 'POST', - port: server.address().port, - headers: { - 'Content-Length': body.length, - 'Content-Type': 'multipart/form-data; boundary=foo' - } - }); - req.on('response', function (res) { - assert.equal(res.statusCode, 500); - res.on('data', function () {}); - res.on('end', function () { - server.close(); - }); - }); - req.end(body); -}); diff --git a/node_modules/restify/node_modules/formidable/test/standalone/test-issue-46.js b/node_modules/restify/node_modules/formidable/test/standalone/test-issue-46.js deleted file mode 100644 index 1939328..0000000 --- a/node_modules/restify/node_modules/formidable/test/standalone/test-issue-46.js +++ /dev/null @@ -1,49 +0,0 @@ -var http = require('http'), - formidable = require('../../lib/index'), - request = require('request'), - assert = require('assert'); - -var host = 'localhost'; - -var index = [ - '
    ', - ' ', - ' ', - '
    ' -].join("\n"); - -var server = http.createServer(function(req, res) { - - // Show a form for testing purposes. - if (req.method == 'GET') { - res.writeHead(200, {'content-type': 'text/html'}); - res.end(index); - return; - } - - // Parse form and write results to response. - var form = new formidable.IncomingForm(); - form.parse(req, function(err, fields, files) { - res.writeHead(200, {'content-type': 'text/plain'}); - res.write(JSON.stringify({err: err, fields: fields, files: files})); - res.end(); - }); - -}).listen(0, host, function() { - - console.log("Server up and running..."); - - var server = this, - url = 'http://' + host + ':' + server.address().port; - - var parts = [ - {'Content-Disposition': 'form-data; name="foo"', 'body': 'bar'} - ] - - var req = request({method: 'POST', url: url, multipart: parts}, function(e, res, body) { - var obj = JSON.parse(body); - assert.equal("bar", obj.fields.foo); - server.close(); - }); - -}); diff --git a/node_modules/restify/node_modules/formidable/test/tools/base64.html b/node_modules/restify/node_modules/formidable/test/tools/base64.html deleted file mode 100644 index 48ad92e..0000000 --- a/node_modules/restify/node_modules/formidable/test/tools/base64.html +++ /dev/null @@ -1,67 +0,0 @@ - - - Convert a file to a base64 request - - - - - - - -
    -
    -
    -
    -
    -
    -

    -Don't forget to save the output with windows (CRLF) line endings! -

    - - - diff --git a/node_modules/restify/node_modules/formidable/test/unit/test-file.js b/node_modules/restify/node_modules/formidable/test/unit/test-file.js deleted file mode 100644 index fc8f36e..0000000 --- a/node_modules/restify/node_modules/formidable/test/unit/test-file.js +++ /dev/null @@ -1,33 +0,0 @@ -var common = require('../common'); -var test = require('utest'); -var assert = common.assert; -var File = common.require('file'); - -var file; -var now = new Date; -test('IncomingForm', { - before: function() { - file = new File({ - size: 1024, - path: '/tmp/cat.png', - name: 'cat.png', - type: 'image/png', - lastModifiedDate: now, - filename: 'cat.png', - mime: 'image/png' - }) - }, - - '#toJSON()': function() { - var obj = file.toJSON(); - var len = Object.keys(obj).length; - assert.equal(1024, obj.size); - assert.equal('/tmp/cat.png', obj.path); - assert.equal('cat.png', obj.name); - assert.equal('image/png', obj.type); - assert.equal('image/png', obj.mime); - assert.equal('cat.png', obj.filename); - assert.equal(now, obj.mtime); - assert.equal(len, 8); - } -}); \ No newline at end of file diff --git a/node_modules/restify/node_modules/formidable/test/unit/test-incoming-form.js b/node_modules/restify/node_modules/formidable/test/unit/test-incoming-form.js deleted file mode 100644 index fe2ac1c..0000000 --- a/node_modules/restify/node_modules/formidable/test/unit/test-incoming-form.js +++ /dev/null @@ -1,63 +0,0 @@ -var common = require('../common'); -var test = require('utest'); -var assert = common.assert; -var IncomingForm = common.require('incoming_form').IncomingForm; -var path = require('path'); - -var form; -test('IncomingForm', { - before: function() { - form = new IncomingForm(); - }, - - '#_fileName with regular characters': function() { - var filename = 'foo.txt'; - assert.equal(form._fileName(makeHeader(filename)), 'foo.txt'); - }, - - '#_fileName with unescaped quote': function() { - var filename = 'my".txt'; - assert.equal(form._fileName(makeHeader(filename)), 'my".txt'); - }, - - '#_fileName with escaped quote': function() { - var filename = 'my%22.txt'; - assert.equal(form._fileName(makeHeader(filename)), 'my".txt'); - }, - - '#_fileName with bad quote and additional sub-header': function() { - var filename = 'my".txt'; - var header = makeHeader(filename) + '; foo="bar"'; - assert.equal(form._fileName(header), filename); - }, - - '#_fileName with semicolon': function() { - var filename = 'my;.txt'; - assert.equal(form._fileName(makeHeader(filename)), 'my;.txt'); - }, - - '#_fileName with utf8 character': function() { - var filename = 'my☃.txt'; - assert.equal(form._fileName(makeHeader(filename)), 'my☃.txt'); - }, - - '#_uploadPath strips harmful characters from extension when keepExtensions': function() { - form.keepExtensions = true; - - var ext = path.extname(form._uploadPath('fine.jpg?foo=bar')); - assert.equal(ext, '.jpg'); - - var ext = path.extname(form._uploadPath('fine?foo=bar')); - assert.equal(ext, ''); - - var ext = path.extname(form._uploadPath('super.cr2+dsad')); - assert.equal(ext, '.cr2'); - - var ext = path.extname(form._uploadPath('super.bar')); - assert.equal(ext, '.bar'); - }, -}); - -function makeHeader(filename) { - return 'Content-Disposition: form-data; name="upload"; filename="' + filename + '"'; -} diff --git a/node_modules/restify/node_modules/formidable/tool/record.js b/node_modules/restify/node_modules/formidable/tool/record.js deleted file mode 100644 index 9f1cef8..0000000 --- a/node_modules/restify/node_modules/formidable/tool/record.js +++ /dev/null @@ -1,47 +0,0 @@ -var http = require('http'); -var fs = require('fs'); -var connections = 0; - -var server = http.createServer(function(req, res) { - var socket = req.socket; - console.log('Request: %s %s -> %s', req.method, req.url, socket.filename); - - req.on('end', function() { - if (req.url !== '/') { - res.end(JSON.stringify({ - method: req.method, - url: req.url, - filename: socket.filename, - })); - return; - } - - res.writeHead(200, {'content-type': 'text/html'}); - res.end( - '
    '+ - '
    '+ - '
    '+ - ''+ - '
    ' - ); - }); -}); - -server.on('connection', function(socket) { - connections++; - - socket.id = connections; - socket.filename = 'connection-' + socket.id + '.http'; - socket.file = fs.createWriteStream(socket.filename); - socket.pipe(socket.file); - - console.log('--> %s', socket.filename); - socket.on('close', function() { - console.log('<-- %s', socket.filename); - }); -}); - -var port = process.env.PORT || 8080; -server.listen(port, function() { - console.log('Recording connections on port %s', port); -}); diff --git a/node_modules/restify/node_modules/http-signature/package.json b/node_modules/restify/node_modules/http-signature/package.json index be8c156..6558a5c 100644 --- a/node_modules/restify/node_modules/http-signature/package.json +++ b/node_modules/restify/node_modules/http-signature/package.json @@ -31,5 +31,5 @@ "url": "https://github.com/joyent/node-http-signature/issues" }, "_id": "http-signature@0.10.0", - "_from": "http-signature@0.10.0" + "_from": "http-signature@^0.10.0" } diff --git a/node_modules/restify/node_modules/keep-alive-agent/package.json b/node_modules/restify/node_modules/keep-alive-agent/package.json index 7ce2b01..7c95625 100644 --- a/node_modules/restify/node_modules/keep-alive-agent/package.json +++ b/node_modules/restify/node_modules/keep-alive-agent/package.json @@ -39,5 +39,5 @@ "url": "https://github.com/ceejbot/keep-alive-agent/issues" }, "_id": "keep-alive-agent@0.0.1", - "_from": "keep-alive-agent@0.0.1" + "_from": "keep-alive-agent@^0.0.1" } diff --git a/node_modules/restify/node_modules/lru-cache/AUTHORS b/node_modules/restify/node_modules/lru-cache/AUTHORS deleted file mode 100644 index 016d7fb..0000000 --- a/node_modules/restify/node_modules/lru-cache/AUTHORS +++ /dev/null @@ -1,8 +0,0 @@ -# Authors, sorted by whether or not they are me -Isaac Z. Schlueter -Carlos Brito Lage -Marko Mikulicic -Trent Mick -Kevin O'Hara -Marco Rogers -Jesse Dailey diff --git a/node_modules/restify/node_modules/lru-cache/lib/lru-cache.js b/node_modules/restify/node_modules/lru-cache/lib/lru-cache.js index 8c80853..d1d1381 100644 --- a/node_modules/restify/node_modules/lru-cache/lib/lru-cache.js +++ b/node_modules/restify/node_modules/lru-cache/lib/lru-cache.js @@ -14,244 +14,239 @@ function hOP (obj, key) { function naiveLength () { return 1 } function LRUCache (options) { - if (!(this instanceof LRUCache)) { + if (!(this instanceof LRUCache)) return new LRUCache(options) - } - - var max - if (typeof options === 'number') { - max = options - options = { max: max } - } - - if (!options) options = {} - - max = options.max - - var lengthCalculator = options.length || naiveLength - - if (typeof lengthCalculator !== "function") { - lengthCalculator = naiveLength - } - if (!max || !(typeof max === "number") || max <= 0 ) { - // a little bit silly. maybe this should throw? - max = Infinity - } - - var allowStale = options.stale || false + if (typeof options === 'number') + options = { max: options } - var maxAge = options.maxAge || null + if (!options) + options = {} - var dispose = options.dispose + this._max = options.max + // Kind of weird to have a default max of Infinity, but oh well. + if (!this._max || !(typeof this._max === "number") || this._max <= 0 ) + this._max = Infinity - var cache = Object.create(null) // hash of items by key - , lruList = Object.create(null) // list of items in order of use recency - , mru = 0 // most recently used - , lru = 0 // least recently used - , length = 0 // number of items in the list - , itemCount = 0 + this._lengthCalculator = options.length || naiveLength + if (typeof this._lengthCalculator !== "function") + this._lengthCalculator = naiveLength + this._allowStale = options.stale || false + this._maxAge = options.maxAge || null + this._dispose = options.dispose + this.reset() +} - // resize the cache when the max changes. - Object.defineProperty(this, "max", - { set : function (mL) { - if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity - max = mL - // if it gets above double max, trim right away. - // otherwise, do it whenever it's convenient. - if (length > max) trim() - } - , get : function () { return max } - , enumerable : true - }) - - // resize the cache when the lengthCalculator changes. - Object.defineProperty(this, "lengthCalculator", - { set : function (lC) { - if (typeof lC !== "function") { - lengthCalculator = naiveLength - length = itemCount - for (var key in cache) { - cache[key].length = 1 - } - } else { - lengthCalculator = lC - length = 0 - for (var key in cache) { - cache[key].length = lengthCalculator(cache[key].value) - length += cache[key].length - } +// resize the cache when the max changes. +Object.defineProperty(LRUCache.prototype, "max", + { set : function (mL) { + if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity + this._max = mL + if (this._length > this._max) trim(this) + } + , get : function () { return this._max } + , enumerable : true + }) + +// resize the cache when the lengthCalculator changes. +Object.defineProperty(LRUCache.prototype, "lengthCalculator", + { set : function (lC) { + if (typeof lC !== "function") { + this._lengthCalculator = naiveLength + this._length = this._itemCount + for (var key in this._cache) { + this._cache[key].length = 1 + } + } else { + this._lengthCalculator = lC + this._length = 0 + for (var key in this._cache) { + this._cache[key].length = this._lengthCalculator(this._cache[key].value) + this._length += this._cache[key].length } - - if (length > max) trim() } - , get : function () { return lengthCalculator } - , enumerable : true - }) - - Object.defineProperty(this, "length", - { get : function () { return length } - , enumerable : true - }) - - - Object.defineProperty(this, "itemCount", - { get : function () { return itemCount } - , enumerable : true - }) - - this.forEach = function (fn, thisp) { - thisp = thisp || this - var i = 0; - for (var k = mru - 1; k >= 0 && i < itemCount; k--) if (lruList[k]) { - i++ - var hit = lruList[k] - fn.call(thisp, hit.value, hit.key, this) - } - } - this.keys = function () { - var keys = new Array(itemCount) - var i = 0 - for (var k = mru - 1; k >= 0 && i < itemCount; k--) if (lruList[k]) { - var hit = lruList[k] - keys[i++] = hit.key + if (this._length > this._max) trim(this) } - return keys - } - - this.values = function () { - var values = new Array(itemCount) - var i = 0 - for (var k = mru - 1; k >= 0 && i < itemCount; k--) if (lruList[k]) { - var hit = lruList[k] - values[i++] = hit.value + , get : function () { return this._lengthCalculator } + , enumerable : true + }) + +Object.defineProperty(LRUCache.prototype, "length", + { get : function () { return this._length } + , enumerable : true + }) + + +Object.defineProperty(LRUCache.prototype, "itemCount", + { get : function () { return this._itemCount } + , enumerable : true + }) + +LRUCache.prototype.forEach = function (fn, thisp) { + thisp = thisp || this + var i = 0; + for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { + i++ + var hit = this._lruList[k] + if (this._maxAge && (Date.now() - hit.now > this._maxAge)) { + del(this, hit) + if (!this._allowStale) hit = undefined } - return values - } - - this.reset = function () { - if (dispose) { - for (var k in cache) { - dispose(k, cache[k].value) - } + if (hit) { + fn.call(thisp, hit.value, hit.key, this) } - cache = {} - lruList = {} - lru = 0 - mru = 0 - length = 0 - itemCount = 0 } +} - // Provided for debugging/dev purposes only. No promises whatsoever that - // this API stays stable. - this.dump = function () { - return cache +LRUCache.prototype.keys = function () { + var keys = new Array(this._itemCount) + var i = 0 + for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { + var hit = this._lruList[k] + keys[i++] = hit.key } + return keys +} - this.dumpLru = function () { - return lruList +LRUCache.prototype.values = function () { + var values = new Array(this._itemCount) + var i = 0 + for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) { + var hit = this._lruList[k] + values[i++] = hit.value } + return values +} - this.set = function (key, value) { - if (hOP(cache, key)) { - // dispose of the old one before overwriting - if (dispose) dispose(key, cache[key].value) - if (maxAge) cache[key].now = Date.now() - cache[key].value = value - this.get(key) - return true +LRUCache.prototype.reset = function () { + if (this._dispose && this._cache) { + for (var k in this._cache) { + this._dispose(k, this._cache[k].value) } + } - var len = lengthCalculator(value) - var age = maxAge ? Date.now() : 0 - var hit = new Entry(key, value, mru++, len, age) + this._cache = Object.create(null) // hash of items by key + this._lruList = Object.create(null) // list of items in order of use recency + this._mru = 0 // most recently used + this._lru = 0 // least recently used + this._length = 0 // number of items in the list + this._itemCount = 0 +} - // oversized objects fall out of cache automatically. - if (hit.length > max) { - if (dispose) dispose(key, value) - return false - } +// Provided for debugging/dev purposes only. No promises whatsoever that +// this API stays stable. +LRUCache.prototype.dump = function () { + return this._cache +} - length += hit.length - lruList[hit.lu] = cache[key] = hit - itemCount ++ +LRUCache.prototype.dumpLru = function () { + return this._lruList +} - if (length > max) trim() +LRUCache.prototype.set = function (key, value) { + if (hOP(this._cache, key)) { + // dispose of the old one before overwriting + if (this._dispose) this._dispose(key, this._cache[key].value) + if (this._maxAge) this._cache[key].now = Date.now() + this._cache[key].value = value + this.get(key) return true } - this.has = function (key) { - if (!hOP(cache, key)) return false - var hit = cache[key] - if (maxAge && (Date.now() - hit.now > maxAge)) { - return false - } - return true - } + var len = this._lengthCalculator(value) + var age = this._maxAge ? Date.now() : 0 + var hit = new Entry(key, value, this._mru++, len, age) - this.get = function (key) { - return get(key, true) + // oversized objects fall out of cache automatically. + if (hit.length > this._max) { + if (this._dispose) this._dispose(key, value) + return false } - this.peek = function (key) { - return get(key, false) - } + this._length += hit.length + this._lruList[hit.lu] = this._cache[key] = hit + this._itemCount ++ - function get (key, doUse) { - var hit = cache[key] - if (hit) { - if (maxAge && (Date.now() - hit.now > maxAge)) { - del(hit) - if (!allowStale) hit = undefined - } else { - if (doUse) use(hit) - } - if (hit) hit = hit.value - } - return hit - } + if (this._length > this._max) trim(this) + return true +} - function use (hit) { - shiftLU(hit) - hit.lu = mru ++ - lruList[hit.lu] = hit +LRUCache.prototype.has = function (key) { + if (!hOP(this._cache, key)) return false + var hit = this._cache[key] + if (this._maxAge && (Date.now() - hit.now > this._maxAge)) { + return false } + return true +} - this.del = function (key) { - del(cache[key]) - } +LRUCache.prototype.get = function (key) { + return get(this, key, true) +} - function trim () { - while (lru < mru && length > max) - del(lruList[lru]) - } +LRUCache.prototype.peek = function (key) { + return get(this, key, false) +} - function shiftLU(hit) { - delete lruList[ hit.lu ] - while (lru < mru && !lruList[lru]) lru ++ - } +LRUCache.prototype.pop = function () { + var hit = this._lruList[this._lru] + del(this, hit) + return hit || null +} - function del(hit) { - if (hit) { - if (dispose) dispose(hit.key, hit.value) - length -= hit.length - itemCount -- - delete cache[ hit.key ] - shiftLU(hit) +LRUCache.prototype.del = function (key) { + del(this, this._cache[key]) +} + +function get (self, key, doUse) { + var hit = self._cache[key] + if (hit) { + if (self._maxAge && (Date.now() - hit.now > self._maxAge)) { + del(self, hit) + if (!self._allowStale) hit = undefined + } else { + if (doUse) use(self, hit) } + if (hit) hit = hit.value + } + return hit +} + +function use (self, hit) { + shiftLU(self, hit) + hit.lu = self._mru ++ + self._lruList[hit.lu] = hit +} + +function trim (self) { + while (self._lru < self._mru && self._length > self._max) + del(self, self._lruList[self._lru]) +} + +function shiftLU (self, hit) { + delete self._lruList[ hit.lu ] + while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++ +} + +function del (self, hit) { + if (hit) { + if (self._dispose) self._dispose(hit.key, hit.value) + self._length -= hit.length + self._itemCount -- + delete self._cache[ hit.key ] + shiftLU(self, hit) } } // classy, since V8 prefers predictable objects. -function Entry (key, value, mru, len, age) { +function Entry (key, value, lu, length, now) { this.key = key this.value = value - this.lu = mru - this.length = len - this.now = age + this.lu = lu + this.length = length + this.now = now } })() diff --git a/node_modules/restify/node_modules/lru-cache/package.json b/node_modules/restify/node_modules/lru-cache/package.json index 90391e0..466f85f 100644 --- a/node_modules/restify/node_modules/lru-cache/package.json +++ b/node_modules/restify/node_modules/lru-cache/package.json @@ -1,7 +1,7 @@ { "name": "lru-cache", "description": "A cache object that deletes the least-recently-used items.", - "version": "2.3.0", + "version": "2.5.0", "author": { "name": "Isaac Z. Schlueter", "email": "i@izs.me" @@ -22,41 +22,11 @@ "type": "MIT", "url": "http://github.com/isaacs/node-lru-cache/raw/master/LICENSE" }, - "contributors": [ - { - "name": "Isaac Z. Schlueter", - "email": "i@izs.me" - }, - { - "name": "Carlos Brito Lage", - "email": "carlos@carloslage.net" - }, - { - "name": "Marko Mikulicic", - "email": "marko.mikulicic@isti.cnr.it" - }, - { - "name": "Trent Mick", - "email": "trentm@gmail.com" - }, - { - "name": "Kevin O'Hara", - "email": "kevinohara80@gmail.com" - }, - { - "name": "Marco Rogers", - "email": "marco.rogers@gmail.com" - }, - { - "name": "Jesse Dailey", - "email": "jesse.dailey@gmail.com" - } - ], "readme": "# lru cache\n\nA cache object that deletes the least-recently-used items.\n\n## Usage:\n\n```javascript\nvar LRU = require(\"lru-cache\")\n , options = { max: 500\n , length: function (n) { return n * 2 }\n , dispose: function (key, n) { n.close() }\n , maxAge: 1000 * 60 * 60 }\n , cache = LRU(options)\n , otherCache = LRU(50) // sets just the max size\n\ncache.set(\"key\", \"value\")\ncache.get(\"key\") // \"value\"\n\ncache.reset() // empty the cache\n```\n\nIf you put more stuff in it, then items will fall out.\n\nIf you try to put an oversized thing in it, then it'll fall out right\naway.\n\n## Options\n\n* `max` The maximum size of the cache, checked by applying the length\n function to all values in the cache. Not setting this is kind of\n silly, since that's the whole purpose of this lib, but it defaults\n to `Infinity`.\n* `maxAge` Maximum age in ms. Items are not pro-actively pruned out\n as they age, but if you try to get an item that is too old, it'll\n drop it and return undefined instead of giving it to you.\n* `length` Function that is used to calculate the length of stored\n items. If you're storing strings or buffers, then you probably want\n to do something like `function(n){return n.length}`. The default is\n `function(n){return 1}`, which is fine if you want to store `n`\n like-sized things.\n* `dispose` Function that is called on items when they are dropped\n from the cache. This can be handy if you want to close file\n descriptors or do other cleanup tasks when items are no longer\n accessible. Called with `key, value`. It's called *before*\n actually removing the item from the internal cache, so if you want\n to immediately put it back in, you'll have to do that in a\n `nextTick` or `setTimeout` callback or it won't do anything.\n* `stale` By default, if you set a `maxAge`, it'll only actually pull\n stale items out of the cache when you `get(key)`. (That is, it's\n not pre-emptively doing a `setTimeout` or anything.) If you set\n `stale:true`, it'll return the stale value before deleting it. If\n you don't set this, then it'll return `undefined` when you try to\n get a stale entry, as if it had already been deleted.\n\n## API\n\n* `set(key, value)`\n* `get(key) => value`\n\n Both of these will update the \"recently used\"-ness of the key.\n They do what you think.\n\n* `peek(key)`\n\n Returns the key value (or `undefined` if not found) without\n updating the \"recently used\"-ness of the key.\n\n (If you find yourself using this a lot, you *might* be using the\n wrong sort of data structure, but there are some use cases where\n it's handy.)\n\n* `del(key)`\n\n Deletes a key out of the cache.\n\n* `reset()`\n\n Clear the cache entirely, throwing away all values.\n\n* `has(key)`\n\n Check if a key is in the cache, without updating the recent-ness\n or deleting it for being stale.\n\n* `forEach(function(value,key,cache), [thisp])`\n\n Just like `Array.prototype.forEach`. Iterates over all the keys\n in the cache, in order of recent-ness. (Ie, more recently used\n items are iterated over first.)\n\n* `keys()`\n\n Return an array of the keys in the cache.\n\n* `values()`\n\n Return an array of the values in the cache.\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/isaacs/node-lru-cache/issues" }, - "_id": "lru-cache@2.3.0", - "_from": "lru-cache@2.3.0" + "_id": "lru-cache@2.5.0", + "_from": "lru-cache@^2.5.0" } diff --git a/node_modules/restify/node_modules/lru-cache/s.js b/node_modules/restify/node_modules/lru-cache/s.js deleted file mode 100644 index c2a9e54..0000000 --- a/node_modules/restify/node_modules/lru-cache/s.js +++ /dev/null @@ -1,25 +0,0 @@ -var LRU = require('lru-cache'); - -var max = +process.argv[2] || 10240; -var more = 1024; - -var cache = LRU({ - max: max, maxAge: 86400e3 -}); - -// fill cache -for (var i = 0; i < max; ++i) { - cache.set(i, {}); -} - -var start = process.hrtime(); - -// adding more items -for ( ; i < max+more; ++i) { - cache.set(i, {}); -} - -var end = process.hrtime(start); -var msecs = end[0] * 1E3 + end[1] / 1E6; - -console.log('adding %d items took %d ms', more, msecs.toPrecision(5)); diff --git a/node_modules/restify/node_modules/lru-cache/test/basic.js b/node_modules/restify/node_modules/lru-cache/test/basic.js index 70f3f8b..f72697c 100644 --- a/node_modules/restify/node_modules/lru-cache/test/basic.js +++ b/node_modules/restify/node_modules/lru-cache/test/basic.js @@ -327,3 +327,43 @@ test("least recently set w/ peek", function (t) { t.equal(cache.get("a"), undefined) t.end() }) + +test("pop the least used item", function (t) { + var cache = new LRU(3) + , last + + cache.set("a", "A") + cache.set("b", "B") + cache.set("c", "C") + + t.equal(cache.length, 3) + t.equal(cache.max, 3) + + // Ensure we pop a, c, b + cache.get("b", "B") + + last = cache.pop() + t.equal(last.key, "a") + t.equal(last.value, "A") + t.equal(cache.length, 2) + t.equal(cache.max, 3) + + last = cache.pop() + t.equal(last.key, "c") + t.equal(last.value, "C") + t.equal(cache.length, 1) + t.equal(cache.max, 3) + + last = cache.pop() + t.equal(last.key, "b") + t.equal(last.value, "B") + t.equal(cache.length, 0) + t.equal(cache.max, 3) + + last = cache.pop() + t.equal(last, null) + t.equal(cache.length, 0) + t.equal(cache.max, 3) + + t.end() +}) diff --git a/node_modules/restify/node_modules/mime/README.md b/node_modules/restify/node_modules/mime/README.md index b90552a..6ca19bd 100644 --- a/node_modules/restify/node_modules/mime/README.md +++ b/node_modules/restify/node_modules/mime/README.md @@ -11,7 +11,7 @@ Install with [npm](http://github.com/isaacs/npm): ## API - Queries ### mime.lookup(path) -Get the mime type associated with a file. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. +Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. var mime = require('mime'); @@ -20,6 +20,9 @@ Get the mime type associated with a file. Performs a case-insensitive lookup usi mime.lookup('.TXT'); // => 'text/plain' mime.lookup('htm'); // => 'text/html' +### mime.default_type +Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) + ### mime.extension(type) Get the default extension for `type` diff --git a/node_modules/restify/node_modules/mime/mime.js b/node_modules/restify/node_modules/mime/mime.js index 70a6384..48be0c5 100644 --- a/node_modules/restify/node_modules/mime/mime.js +++ b/node_modules/restify/node_modules/mime/mime.js @@ -69,7 +69,7 @@ Mime.prototype.load = function(file) { * Lookup a mime type based on extension */ Mime.prototype.lookup = function(path, fallback) { - var ext = path.replace(/.*[\.\/]/, '').toLowerCase(); + var ext = path.replace(/.*[\.\/\\]/, '').toLowerCase(); return this.types[ext] || fallback || this.default_type; }; @@ -78,7 +78,8 @@ Mime.prototype.lookup = function(path, fallback) { * Return file extension associated with a mime type */ Mime.prototype.extension = function(mimeType) { - return this.extensions[mimeType]; + var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); + return this.extensions[type]; }; // Default instance diff --git a/node_modules/restify/node_modules/mime/package.json b/node_modules/restify/node_modules/mime/package.json index 9664284..86c3107 100644 --- a/node_modules/restify/node_modules/mime/package.json +++ b/node_modules/restify/node_modules/mime/package.json @@ -24,12 +24,12 @@ "url": "https://github.com/broofa/node-mime", "type": "git" }, - "version": "1.2.9", - "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n", + "version": "1.2.11", + "readme": "# mime\n\nComprehensive MIME type mapping API. Includes all 600+ types and 800+ extensions defined by the Apache project, plus additional types submitted by the node.js community.\n\n## Install\n\nInstall with [npm](http://github.com/isaacs/npm):\n\n npm install mime\n\n## API - Queries\n\n### mime.lookup(path)\nGet the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g.\n\n var mime = require('mime');\n\n mime.lookup('/path/to/file.txt'); // => 'text/plain'\n mime.lookup('file.txt'); // => 'text/plain'\n mime.lookup('.TXT'); // => 'text/plain'\n mime.lookup('htm'); // => 'text/html'\n\n### mime.default_type\nSets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.)\n\n### mime.extension(type)\nGet the default extension for `type`\n\n mime.extension('text/html'); // => 'html'\n mime.extension('application/octet-stream'); // => 'bin'\n\n### mime.charsets.lookup()\n\nMap mime-type to charset\n\n mime.charsets.lookup('text/plain'); // => 'UTF-8'\n\n(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.)\n\n## API - Defining Custom Types\n\nThe following APIs allow you to add your own type mappings within your project. If you feel a type should be included as part of node-mime, see [requesting new types](https://github.com/broofa/node-mime/wiki/Requesting-New-Types).\n\n### mime.define()\n\nAdd custom mime/extension mappings\n\n mime.define({\n 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'],\n 'application/x-my-type': ['x-mt', 'x-mtt'],\n // etc ...\n });\n\n mime.lookup('x-sft'); // => 'text/x-some-format'\n\nThe first entry in the extensions array is returned by `mime.extension()`. E.g.\n\n mime.extension('text/x-some-format'); // => 'x-sf'\n\n### mime.load(filepath)\n\nLoad mappings from an Apache \".types\" format file\n\n mime.load('./my_project.types');\n\nThe .types file format is simple - See the `types` dir for examples.\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/broofa/node-mime/issues" }, - "_id": "mime@1.2.9", - "_from": "mime@1.2.9" + "_id": "mime@1.2.11", + "_from": "mime@^1.2.11" } diff --git a/node_modules/restify/node_modules/mime/test.js b/node_modules/restify/node_modules/mime/test.js index cbad034..2cda1c7 100644 --- a/node_modules/restify/node_modules/mime/test.js +++ b/node_modules/restify/node_modules/mime/test.js @@ -4,6 +4,7 @@ var mime = require('./mime'); var assert = require('assert'); +var path = require('path'); function eq(a, b) { console.log('Test: ' + a + ' === ' + b); @@ -17,16 +18,16 @@ console.log(Object.keys(mime.types).length + ' extensions\n'); // Test mime lookups // -eq('text/plain', mime.lookup('text.txt')); -eq('text/plain', mime.lookup('.text.txt')); -eq('text/plain', mime.lookup('.txt')); -eq('text/plain', mime.lookup('txt')); -eq('application/octet-stream', mime.lookup('text.nope')); -eq('fallback', mime.lookup('text.fallback', 'fallback')); -eq('application/octet-stream', mime.lookup('constructor')); -eq('text/plain', mime.lookup('TEXT.TXT')); -eq('text/event-stream', mime.lookup('text/event-stream')); -eq('application/x-web-app-manifest+json', mime.lookup('text.webapp')); +eq('text/plain', mime.lookup('text.txt')); // normal file +eq('text/plain', mime.lookup('TEXT.TXT')); // uppercase +eq('text/plain', mime.lookup('dir/text.txt')); // dir + file +eq('text/plain', mime.lookup('.text.txt')); // hidden file +eq('text/plain', mime.lookup('.txt')); // nameless +eq('text/plain', mime.lookup('txt')); // extension-only +eq('text/plain', mime.lookup('/txt')); // extension-less () +eq('text/plain', mime.lookup('\\txt')); // Windows, extension-less +eq('application/octet-stream', mime.lookup('text.nope')); // unrecognized +eq('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default // // Test extensions @@ -35,14 +36,23 @@ eq('application/x-web-app-manifest+json', mime.lookup('text.webapp')); eq('txt', mime.extension(mime.types.text)); eq('html', mime.extension(mime.types.htm)); eq('bin', mime.extension('application/octet-stream')); -eq(undefined, mime.extension('constructor')); +eq('bin', mime.extension('application/octet-stream ')); +eq('html', mime.extension(' text/html; charset=UTF-8')); +eq('html', mime.extension('text/html; charset=UTF-8 ')); +eq('html', mime.extension('text/html; charset=UTF-8')); +eq('html', mime.extension('text/html ; charset=UTF-8')); +eq('html', mime.extension('text/html;charset=UTF-8')); +eq('html', mime.extension('text/Html;charset=UTF-8')); +eq(undefined, mime.extension('unrecognized')); // -// Test node types +// Test node.types lookups // +eq('application/font-woff', mime.lookup('file.woff')); eq('application/octet-stream', mime.lookup('file.buffer')); eq('audio/mp4', mime.lookup('file.m4a')); +eq('font/opentype', mime.lookup('file.otf')); // // Test charsets @@ -52,4 +62,23 @@ eq('UTF-8', mime.charsets.lookup('text/plain')); eq(undefined, mime.charsets.lookup(mime.types.js)); eq('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); +// +// Test for overlaps between mime.types and node.types +// + +var apacheTypes = new mime.Mime(), nodeTypes = new mime.Mime(); +apacheTypes.load(path.join(__dirname, 'types/mime.types')); +nodeTypes.load(path.join(__dirname, 'types/node.types')); + +var keys = [].concat(Object.keys(apacheTypes.types)) + .concat(Object.keys(nodeTypes.types)); +keys.sort(); +for (var i = 1; i < keys.length; i++) { + if (keys[i] == keys[i-1]) { + console.warn('Warning: ' + + 'node.types defines ' + keys[i] + '->' + nodeTypes.types[keys[i]] + + ', mime.types defines ' + keys[i] + '->' + apacheTypes.types[keys[i]]); + } +} + console.log('\nOK'); diff --git a/node_modules/restify/node_modules/mime/types/mime.types b/node_modules/restify/node_modules/mime/types/mime.types index b90b165..da8cd69 100644 --- a/node_modules/restify/node_modules/mime/types/mime.types +++ b/node_modules/restify/node_modules/mime/types/mime.types @@ -1054,7 +1054,7 @@ application/x-font-snf snf # application/x-font-sunos-news application/x-font-ttf ttf ttc application/x-font-type1 pfa pfb pfm afm -application/x-font-woff woff +application/font-woff woff # application/x-font-vfont application/x-freearc arc application/x-futuresplash spl diff --git a/node_modules/restify/node_modules/mime/types/node.types b/node_modules/restify/node_modules/mime/types/node.types index 970a1bd..55b2cf7 100644 --- a/node_modules/restify/node_modules/mime/types/node.types +++ b/node_modules/restify/node_modules/mime/types/node.types @@ -15,11 +15,11 @@ application/x-chrome-extension crx # Added by: niftylettuce text/x-component htc -# What: HTML5 application cache manifest +# What: HTML5 application cache manifes ('.manifest' extension) # Why: De-facto standard. Required by Mozilla browser when serving HTML5 apps # per https://developer.mozilla.org/en/offline_resources_in_firefox # Added by: louisremi -text/cache-manifest appcache manifest +text/cache-manifest manifest # What: node binary buffer format # Why: semi-standard extension w/in the node community @@ -58,3 +58,20 @@ application/x-lua-bytecode luac # Why: http://stackoverflow.com/questions/10701983/what-is-the-mime-type-for-markdown # Added by: avoidwork text/x-markdown markdown md mkd + +# What: ini files +# Why: because they're just text files +# Added by: Matthew Kastor +text/plain ini + +# What: DASH Adaptive Streaming manifest +# Why: https://developer.mozilla.org/en-US/docs/DASH_Adaptive_Streaming_for_HTML_5_Video +# Added by: eelcocramer +application/dash+xml mdp + +# What: OpenType font files - http://www.microsoft.com/typography/otspec/ +# Why: Browsers usually ignore the font MIME types and sniff the content, +# but Chrome, shows a warning if OpenType fonts aren't served with +# the `font/opentype` MIME type: http://i.imgur.com/8c5RN8M.png. +# Added by: alrra +font/opentype otf diff --git a/node_modules/restify/node_modules/negotiator/LICENSE b/node_modules/restify/node_modules/negotiator/LICENSE index 42ca2e7..692b534 100644 --- a/node_modules/restify/node_modules/negotiator/LICENSE +++ b/node_modules/restify/node_modules/negotiator/LICENSE @@ -1,27 +1,23 @@ -Original "Negotiator" program Copyright Federico Romero -Port to JavaScript Copyright Isaac Z. Schlueter +(The MIT License) -All rights reserved. +Copyright (c) 2012 Federico Romero +Copyright (c) 2012-2014 Isaac Z. Schlueter -MIT License - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/restify/node_modules/negotiator/examples/accept.js b/node_modules/restify/node_modules/negotiator/examples/accept.js deleted file mode 100644 index 2a18039..0000000 --- a/node_modules/restify/node_modules/negotiator/examples/accept.js +++ /dev/null @@ -1,47 +0,0 @@ -(function() { - var Negotiator, availableMediaTypes, http, key, representations, server, val; - - Negotiator = require('../lib/negotiator').Negotiator; - - http = require('http'); - - representations = { - 'text/html': '

    Hello world!

    ', - 'text/plain': 'Hello World!', - 'application/json': JSON.stringify({ - hello: 'world!' - }) - }; - - availableMediaTypes = (function() { - var _results; - _results = []; - for (key in representations) { - val = representations[key]; - _results.push(key); - } - return _results; - })(); - - server = http.createServer(function(req, res) { - var mediaType, negotiator; - negotiator = new Negotiator(req); - console.log("Accept: " + req.headers['accept']); - console.log("Preferred: " + (negotiator.preferredMediaTypes())); - console.log("Possible: " + (negotiator.preferredMediaTypes(availableMediaTypes))); - mediaType = negotiator.preferredMediaType(availableMediaTypes); - console.log("Selected: " + mediaType); - if (mediaType) { - res.writeHead(200, { - 'Content-Type': mediaType - }); - return res.end(representations[mediaType]); - } else { - res.writeHead(406); - return res.end(); - } - }); - - server.listen(8080); - -}).call(this); diff --git a/node_modules/restify/node_modules/negotiator/examples/charset.js b/node_modules/restify/node_modules/negotiator/examples/charset.js deleted file mode 100644 index 6455eff..0000000 --- a/node_modules/restify/node_modules/negotiator/examples/charset.js +++ /dev/null @@ -1,52 +0,0 @@ -(function() { - var Buffer, Iconv, Negotiator, availableCharsets, http, iconv, key, message, messages, server, val; - - Negotiator = require('../lib/negotiator').Negotiator; - - http = require('http'); - - Buffer = require('buffer').Buffer; - - Iconv = require('iconv').Iconv; - - iconv = new Iconv('UTF-8', 'ISO-8859-1'); - - message = "ë"; - - messages = { - 'utf-8': message, - 'iso-8859-1': iconv.convert(new Buffer(message)) - }; - - availableCharsets = (function() { - var _results; - _results = []; - for (key in messages) { - val = messages[key]; - _results.push(key); - } - return _results; - })(); - - server = http.createServer(function(req, res) { - var charset, negotiator; - negotiator = new Negotiator(req); - console.log("Accept-Charset: " + req.headers['accept-charset']); - console.log("Preferred: " + (negotiator.preferredCharsets())); - console.log("Possible: " + (negotiator.preferredCharsets(availableCharsets))); - charset = negotiator.preferredCharset(availableCharsets); - console.log("Selected: " + charset); - if (charset) { - res.writeHead(200, { - 'Content-Type': "text/html; charset=" + charset - }); - return res.end(messages[charset]); - } else { - res.writeHead(406); - return res.end(); - } - }); - - server.listen(8080); - -}).call(this); diff --git a/node_modules/restify/node_modules/negotiator/examples/encoding.js b/node_modules/restify/node_modules/negotiator/examples/encoding.js deleted file mode 100644 index a02d0f4..0000000 --- a/node_modules/restify/node_modules/negotiator/examples/encoding.js +++ /dev/null @@ -1,48 +0,0 @@ -(function() { - var Negotiator, gbuf, http, messages; - - Negotiator = require('../lib/negotiator').Negotiator; - - http = require('http'); - - gbuf = require('gzip-buffer'); - - messages = { - identity: 'Hello World' - }; - - gbuf.gzip(messages.identity, function(zipped) { - var availableEncodings, key, server, val; - messages.gzip = zipped; - availableEncodings = (function() { - var _results; - _results = []; - for (key in messages) { - val = messages[key]; - _results.push(key); - } - return _results; - })(); - console.log(availableEncodings); - server = http.createServer(function(req, res) { - var encoding, negotiator; - negotiator = new Negotiator(req); - console.log("Accept-Encoding: " + req.headers['accept-encoding']); - console.log("Preferred: " + (negotiator.preferredEncodings())); - console.log("Possible: " + (negotiator.preferredEncodings(availableEncodings))); - encoding = negotiator.preferredEncoding(availableEncodings); - console.log("Selected: " + encoding); - if (encoding) { - res.writeHead(200, { - 'Content-Encoding': encoding - }); - return res.end(messages[encoding]); - } else { - res.writeHead(406); - return res.end(); - } - }); - return server.listen(8080); - }); - -}).call(this); diff --git a/node_modules/restify/node_modules/negotiator/examples/language.js b/node_modules/restify/node_modules/negotiator/examples/language.js deleted file mode 100644 index f161743..0000000 --- a/node_modules/restify/node_modules/negotiator/examples/language.js +++ /dev/null @@ -1,44 +0,0 @@ -(function() { - var Negotiator, availableLanguages, http, key, messages, server, val; - - Negotiator = require('../lib/negotiator').Negotiator; - - http = require('http'); - - messages = { - es: "¡Hola Mundo!", - en: "Hello World!" - }; - - availableLanguages = (function() { - var _results; - _results = []; - for (key in messages) { - val = messages[key]; - _results.push(key); - } - return _results; - })(); - - server = http.createServer(function(req, res) { - var language, negotiator; - negotiator = new Negotiator(req); - console.log("Accept-Language: " + req.headers['accept-language']); - console.log("Preferred: " + (negotiator.preferredLanguages())); - console.log("Possible: " + (negotiator.preferredLanguages(availableLanguages))); - language = negotiator.preferredLanguage(availableLanguages); - console.log("Selected: " + language); - if (language) { - res.writeHead(200, { - 'Content-Language': language - }); - return res.end(messages[language]); - } else { - res.writeHead(406); - return res.end(); - } - }); - - server.listen(8080); - -}).call(this); diff --git a/node_modules/restify/node_modules/negotiator/lib/charset.js b/node_modules/restify/node_modules/negotiator/lib/charset.js index 3c1a1bd..58da58f 100644 --- a/node_modules/restify/node_modules/negotiator/lib/charset.js +++ b/node_modules/restify/node_modules/negotiator/lib/charset.js @@ -2,14 +2,14 @@ module.exports = preferredCharsets; preferredCharsets.preferredCharsets = preferredCharsets; function parseAcceptCharset(accept) { - return accept.split(',').map(function(e) { - return parseCharset(e.trim()); + return accept.split(',').map(function(e, i) { + return parseCharset(e.trim(), i); }).filter(function(e) { - return e && e.q > 0; + return e; }); } -function parseCharset(s) { +function parseCharset(s, i) { var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/); if (!match) return null; @@ -28,40 +28,59 @@ function parseCharset(s) { return { charset: charset, - q: q + q: q, + i: i }; } function getCharsetPriority(charset, accepted) { - return (accepted.filter(function(a) { + return (accepted.map(function(a) { return specify(charset, a); - }).sort(function (a, b) { - // revsort - return a.q === b.q ? 0 : a.q > b.q ? -1 : 1; - })[0] || {q:0}).q; + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q:0}); } function specify(charset, spec) { - if (spec.charset === '*' || spec.charset === charset) { - return spec; + var s = 0; + if(spec.charset.toLowerCase() === charset.toLowerCase()){ + s |= 1; + } else if (spec.charset !== '*' ) { + return null } -}; + + return { + s: s, + q: spec.q, + } +} function preferredCharsets(accept, provided) { - accept = parseAcceptCharset(accept || ''); + // RFC 2616 sec 14.2: no header = * + accept = parseAcceptCharset(accept === undefined ? '*' : accept || ''); if (provided) { return provided.map(function(type) { return [type, getCharsetPriority(type, accept)]; }).filter(function(pair) { - return pair[1] > 0; + return pair[1].q > 0; }).sort(function(a, b) { - // revsort - return a[1] === b[1] ? 0 : a[1] > b[1] ? -1 : 1; + var pa = a[1]; + var pb = b[1]; + return (pb.q - pa.q) || (pb.s - pa.s) || (pa.i - pb.i); }).map(function(pair) { return pair[0]; }); } else { - return accept.map(function(type) { + return accept.sort(function (a, b) { + // revsort + return (b.q - a.q) || (a.i - b.i); + }).filter(function(type) { + return type.q > 0; + }).map(function(type) { return type.charset; }); } diff --git a/node_modules/restify/node_modules/negotiator/lib/encoding.js b/node_modules/restify/node_modules/negotiator/lib/encoding.js index 98f2aac..4b8acc1 100644 --- a/node_modules/restify/node_modules/negotiator/lib/encoding.js +++ b/node_modules/restify/node_modules/negotiator/lib/encoding.js @@ -5,28 +5,41 @@ function parseAcceptEncoding(accept) { var acceptableEncodings; if (accept) { - acceptableEncodings = accept.split(',').map(function(e) { - return parseEncoding(e.trim()); + acceptableEncodings = accept.split(',').map(function(e, i) { + return parseEncoding(e.trim(), i); }); } else { acceptableEncodings = []; } if (!acceptableEncodings.some(function(e) { - return e.encoding === 'identity'; + return e && specify('identity', e); })) { + /* + * If identity doesn't explicitly appear in the accept-encoding header, + * it's added to the list of acceptable encoding with the lowest q + * + */ + var lowestQ = 1; + + for(var i = 0; i < acceptableEncodings.length; i++){ + var e = acceptableEncodings[i]; + if(e && e.q < lowestQ){ + lowestQ = e.q; + } + } acceptableEncodings.push({ encoding: 'identity', - q: 0.1 + q: lowestQ / 2, }); } return acceptableEncodings.filter(function(e) { - return e && e.q > 0; + return e; }); } -function parseEncoding(s) { +function parseEncoding(s, i) { var match = s.match(/^\s*(\S+?)\s*(?:;(.*))?$/); if (!match) return null; @@ -46,24 +59,36 @@ function parseEncoding(s) { return { encoding: encoding, - q: q + q: q, + i: i }; } function getEncodingPriority(encoding, accepted) { - return (accepted.filter(function(a) { + return (accepted.map(function(a) { return specify(encoding, a); - }).sort(function (a, b) { - // revsort - return a.q === b.q ? 0 : a.q > b.q ? -1 : 1; - })[0] || {q:0}).q; + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q: 0}); } function specify(encoding, spec) { - if (spec.encoding === '*' || spec.encoding === encoding) { - return spec; + var s = 0; + if(spec.encoding.toLowerCase() === encoding.toLowerCase()){ + s |= 1; + } else if (spec.encoding !== '*' ) { + return null } -} + + return { + s: s, + q: spec.q, + } +}; function preferredEncodings(accept, provided) { accept = parseAcceptEncoding(accept || ''); @@ -71,15 +96,21 @@ function preferredEncodings(accept, provided) { return provided.map(function(type) { return [type, getEncodingPriority(type, accept)]; }).filter(function(pair) { - return pair[1] > 0; + return pair[1].q > 0; }).sort(function(a, b) { - // revsort - return a[1] === b[1] ? 0 : a[1] > b[1] ? -1 : 1; + var pa = a[1]; + var pb = b[1]; + return (pb.q - pa.q) || (pb.s - pa.s) || (pa.i - pb.i); }).map(function(pair) { return pair[0]; }); } else { - return accept.map(function(type) { + return accept.sort(function (a, b) { + // revsort + return (b.q - a.q) || (a.i - b.i); + }).filter(function(type){ + return type.q > 0; + }).map(function(type) { return type.encoding; }); } diff --git a/node_modules/restify/node_modules/negotiator/lib/language.js b/node_modules/restify/node_modules/negotiator/lib/language.js index 3f0d522..8fc63df 100644 --- a/node_modules/restify/node_modules/negotiator/lib/language.js +++ b/node_modules/restify/node_modules/negotiator/lib/language.js @@ -2,14 +2,14 @@ module.exports = preferredLanguages; preferredLanguages.preferredLanguages = preferredLanguages; function parseAcceptLanguage(accept) { - return accept.split(',').map(function(e) { - return parseLanguage(e.trim()); + return accept.split(',').map(function(e, i) { + return parseLanguage(e.trim(), i); }).filter(function(e) { - return e && e.q > 0; + return e; }); } -function parseLanguage(s) { +function parseLanguage(s, i) { var match = s.match(/^\s*(\S+?)(?:-(\S+?))?\s*(?:;(.*))?$/); if (!match) return null; @@ -32,57 +32,68 @@ function parseLanguage(s) { prefix: prefix, suffix: suffix, q: q, + i: i, full: full }; } function getLanguagePriority(language, accepted) { - var match = getClosestMatch(language, accepted); - return match ? match.q : 0; + return (accepted.map(function(a){ + return specify(language, a); + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q: 0}); } -function getClosestMatch(language, accepted) { - var parsed = parseLanguage(language); - - var matches = accepted.filter(function(a) { - return a.full === parsed.full; - }); - if (matches.length) return matches[0]; - - matches = accepted.filter(function(a) { - return a.prefix === parsed.prefix && !a.suffix; - }); - if (matches.length) return matches[0]; - - matches = accepted.filter(function(a) { - return a.prefix === parsed.prefix; - }); - if (matches.length) return matches[0]; +function specify(language, spec) { + var p = parseLanguage(language) + if (!p) return null; + var s = 0; + if(spec.full.toLowerCase() === p.full.toLowerCase()){ + s |= 4; + } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) { + s |= 2; + } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) { + s |= 1; + } else if (spec.full !== '*' ) { + return null + } - matches = accepted.filter(function(a) { - return a.prefix === '*'; - }); - return matches[0]; -} + return { + s: s, + q: spec.q, + } +}; function preferredLanguages(accept, provided) { - accept = parseAcceptLanguage(accept || ''); + // RFC 2616 sec 14.4: no header = * + accept = parseAcceptLanguage(accept === undefined ? '*' : accept || ''); if (provided) { var ret = provided.map(function(type) { return [type, getLanguagePriority(type, accept)]; }).filter(function(pair) { - return pair[1] > 0; + return pair[1].q > 0; }).sort(function(a, b) { - // revsort - return a[1] === b[1] ? 0 : a[1] > b[1] ? -1 : 1; + var pa = a[1]; + var pb = b[1]; + return (pb.q - pa.q) || (pb.s - pa.s) || (pa.i - pb.i); }).map(function(pair) { return pair[0]; }); return ret; } else { - return accept.map(function(type) { + return accept.sort(function (a, b) { + // revsort + return (b.q - a.q) || (a.i - b.i); + }).filter(function(type) { + return type.q > 0; + }).map(function(type) { return type.full; }); } diff --git a/node_modules/restify/node_modules/negotiator/lib/mediaType.js b/node_modules/restify/node_modules/negotiator/lib/mediaType.js index 766bb11..e413cad 100644 --- a/node_modules/restify/node_modules/negotiator/lib/mediaType.js +++ b/node_modules/restify/node_modules/negotiator/lib/mediaType.js @@ -2,15 +2,15 @@ module.exports = preferredMediaTypes; preferredMediaTypes.preferredMediaTypes = preferredMediaTypes; function parseAccept(accept) { - return accept.split(',').map(function(e) { - return parseMediaType(e.trim()); + return accept.split(',').map(function(e, i) { + return parseMediaType(e.trim(), i); }).filter(function(e) { - return e && e.q > 0; + return e; }); }; -function parseMediaType(s) { - var match = s.match(/\s*(\S+)\/([^;\s]+)\s*(?:;(.*))?/); +function parseMediaType(s, i) { + var match = s.match(/\s*(\S+?)\/([^;\s]+)\s*(?:;(.*))?/); if (!match) return null; var type = match[1], @@ -38,61 +38,85 @@ function parseMediaType(s) { subtype: subtype, params: params, q: q, + i: i, full: full }; } function getMediaTypePriority(type, accepted) { - return (accepted.filter(function(a) { + return (accepted.map(function(a) { return specify(type, a); - }).sort(function (a, b) { - // revsort - return a.q > b.q ? -1 : 1; - })[0] || {q:0}).q; -} - -function specifies(spec, type) { - return spec === '*' || spec === type; + }).filter(Boolean).sort(function (a, b) { + if(a.s == b.s) { + return a.q > b.q ? -1 : 1; + } else { + return a.s > b.s ? -1 : 1; + } + })[0] || {s: 0, q: 0}); } function specify(type, spec) { var p = parseMediaType(type); + var s = 0; + + if (!p) { + return null; + } + + if(spec.type.toLowerCase() == p.type.toLowerCase()) { + s |= 4 + } else if(spec.type != '*') { + return null; + } - if (spec.params) { - var keys = Object.keys(spec.params); - if (keys.some(function (k) { - return !specifies(spec.params[k], p.params[k]); + if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) { + s |= 2 + } else if(spec.subtype != '*') { + return null; + } + + var keys = Object.keys(spec.params); + if (keys.length > 0) { + if (keys.every(function (k) { + return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase(); })) { - // some didn't specify. - return null; + s |= 1 + } else { + return null } } - if (specifies(spec.type, p.type) && - specifies(spec.subtype, p.subtype)) { - return spec; + return { + q: spec.q, + s: s, } + } function preferredMediaTypes(accept, provided) { - accept = parseAccept(accept || ''); + // RFC 2616 sec 14.2: no header = */* + accept = parseAccept(accept === undefined ? '*/*' : accept || ''); if (provided) { return provided.map(function(type) { return [type, getMediaTypePriority(type, accept)]; }).filter(function(pair) { - return pair[1] > 0; + return pair[1].q > 0; }).sort(function(a, b) { - // revsort - return a[1] === b[1] ? 0 : a[1] > b[1] ? -1 : 1; + var pa = a[1]; + var pb = b[1]; + return (pb.q - pa.q) || (pb.s - pa.s) || (pa.i - pb.i); }).map(function(pair) { return pair[0]; }); } else { - return accept.map(function(type) { + return accept.sort(function (a, b) { + // revsort + return (b.q - a.q) || (a.i - b.i); + }).filter(function(type) { + return type.q > 0; + }).map(function(type) { return type.full; }); } } - - diff --git a/node_modules/restify/node_modules/negotiator/lib/negotiator.js b/node_modules/restify/node_modules/negotiator/lib/negotiator.js index c6f5842..ba0c48b 100644 --- a/node_modules/restify/node_modules/negotiator/lib/negotiator.js +++ b/node_modules/restify/node_modules/negotiator/lib/negotiator.js @@ -2,18 +2,23 @@ module.exports = Negotiator; Negotiator.Negotiator = Negotiator; function Negotiator(request) { + if (!(this instanceof Negotiator)) return new Negotiator(request); this.request = request; } -var set = { preferredCharset: [require('./charset.js'), 'accept-charset'], - preferredEncoding: [require('./encoding.js'), 'accept-encoding'], - preferredLanguage: [require('./language.js'), 'accept-language'], - preferredMediaType: [require('./mediaType.js'), 'accept'] }; +var set = { charset: 'accept-charset', + encoding: 'accept-encoding', + language: 'accept-language', + mediaType: 'accept' }; + + +function capitalize(string){ + return string.charAt(0).toUpperCase() + string.slice(1); +} Object.keys(set).forEach(function (k) { - var mh = set[k], - method = mh[0], - header = mh[1], + var header = set[k], + method = require('./'+k+'.js'), singular = k, plural = k + 's'; @@ -25,4 +30,8 @@ Object.keys(set).forEach(function (k) { var set = this[plural](available); if (set) return set[0]; }; + + // Keep preferred* methods for legacy compatibility + Negotiator.prototype['preferred'+capitalize(plural)] = Negotiator.prototype[plural]; + Negotiator.prototype['preferred'+capitalize(singular)] = Negotiator.prototype[singular]; }) diff --git a/node_modules/restify/node_modules/negotiator/package.json b/node_modules/restify/node_modules/negotiator/package.json index 72c53cb..04237a9 100644 --- a/node_modules/restify/node_modules/negotiator/package.json +++ b/node_modules/restify/node_modules/negotiator/package.json @@ -1,7 +1,7 @@ { "name": "negotiator", "description": "HTTP content negotiation", - "version": "0.2.5", + "version": "0.4.9", "author": { "name": "Federico Romero", "email": "federico.romero@outboxlabs.com" @@ -15,7 +15,7 @@ ], "repository": { "type": "git", - "url": "git://github.com/federomero/negotiator.git" + "url": "jshttp/negotiator" }, "keywords": [ "http", @@ -25,25 +25,29 @@ "accept-encoding", "accept-charset" ], - "engine": "node >= 0.6", "license": "MIT", "devDependencies": { - "nodeunit": "0.6.x" + "istanbul": "~0.3.2", + "nodeunit": "0.8.x" }, "scripts": { - "test": "nodeunit test" + "test": "nodeunit test", + "test-cov": "istanbul cover ./node_modules/nodeunit/bin/nodeunit test" }, - "optionalDependencies": {}, "engines": { - "node": "*" + "node": ">= 0.6" }, "main": "lib/negotiator.js", - "readme": "# Negotiator\n\nAn HTTP content negotiator for node.js written in javascript.\n\n# Accept Negotiation\n\n Negotiator = require('negotiator')\n\n availableMediaTypes = ['text/html', 'text/plain', 'application/json']\n\n // The negotiator constructor receives a request object\n negotiator = new Negotiator(request)\n\n // Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg';q=0.8\n\n negotiator.preferredMediaTypes()\n // -> ['text/html', 'application/*', 'image/jpeg']\n\n negotiator.preferredMediaTypes(availableMediaTypes)\n // -> ['text/html', 'application.json']\n\n negotiator.preferredLanguage(availableMediaTypes)\n // -> 'text/html'\n\nYou can check a working example at `examples/accept.js`.\n\n## Methods\n\n`preferredMediaTypes(availableMediaTypes)`:\n\nReturns an array of preferred media types ordered by priority from a list of available media types.\n\n`preferredMediaType(availableMediaType)`:\n\nReturns the top preferred media type from a list of available media types.\n\n# Accept-Language Negotiation\n\n Negotiator = require('negotiator')\n\n negotiator = new Negotiator(request)\n\n availableLanguages = 'en', 'es', 'fr'\n\n // Let's say Accept-Language header is 'en;q=0.8, es, pt'\n\n negotiator.preferredLanguages()\n // -> ['es', 'pt', 'en']\n\n negotiator.preferredLanguages(availableLanguages)\n // -> ['es', 'en']\n\n language = negotiator.preferredLanguage(availableLanguages)\n // -> 'es'\n\nYou can check a working example at `examples/language.js`.\n\n## Methods\n\n`preferredLanguages(availableLanguages)`:\n\nReturns an array of preferred languages ordered by priority from a list of available languages.\n\n`preferredLanguage(availableLanguages)`:\n\nReturns the top preferred language from a list of available languages.\n\n# Accept-Charset Negotiation\n\n Negotiator = require('negotiator')\n\n availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']\n\n negotiator = new Negotiator(request)\n\n // Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'\n\n negotiator.preferredCharsets()\n // -> ['utf-8', 'iso-8859-1', 'utf-7']\n\n negotiator.preferredCharsets(availableCharsets)\n // -> ['utf-8', 'iso-8859-1']\n\n negotiator.preferredCharset(availableCharsets)\n // -> 'utf-8'\n\nYou can check a working example at `examples/charset.js`.\n\n## Methods\n\n`preferredCharsets(availableCharsets)`:\n\nReturns an array of preferred charsets ordered by priority from a list of available charsets.\n\n`preferredCharset(availableCharsets)`:\n\nReturns the top preferred charset from a list of available charsets.\n\n# Accept-Encoding Negotiation\n\n Negotiator = require('negotiator').Negotiator\n\n availableEncodings = ['identity', 'gzip']\n\n negotiator = new Negotiator(request)\n\n // Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'\n\n negotiator.preferredEncodings()\n // -> ['gzip', 'identity', 'compress']\n\n negotiator.preferredEncodings(availableEncodings)\n // -> ['gzip', 'identity']\n\n negotiator.preferredEncoding(availableEncodings)\n // -> 'gzip'\n\nYou can check a working example at `examples/encoding.js`.\n\n## Methods\n\n`preferredEncodings(availableEncodings)`:\n\nReturns an array of preferred encodings ordered by priority from a list of available encodings.\n\n`preferredEncoding(availableEncodings)`:\n\nReturns the top preferred encoding from a list of available encodings.\n\n# License\n\nMIT\n", - "readmeFilename": "readme.md", - "bugs": { - "url": "https://github.com/federomero/negotiator/issues" + "files": [ + "lib", + "LICENSE" + ], + "readme": "# negotiator\n\n[![NPM Version][npm-image]][npm-url]\n[![NPM Downloads][downloads-image]][downloads-url]\n[![Node.js Version][node-version-image]][node-version-url]\n[![Build Status][travis-image]][travis-url]\n[![Test Coverage][coveralls-image]][coveralls-url]\n\nAn HTTP content negotiator for Node.js\n\n## Installation\n\n```sh\n$ npm install negotiator\n```\n\n## API\n\n```js\nvar Negotiator = require('negotiator')\n```\n\n### Accept Negotiation\n\n```js\navailableMediaTypes = ['text/html', 'text/plain', 'application/json']\n\n// The negotiator constructor receives a request object\nnegotiator = new Negotiator(request)\n\n// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8'\n\nnegotiator.mediaTypes()\n// -> ['text/html', 'image/jpeg', 'application/*']\n\nnegotiator.mediaTypes(availableMediaTypes)\n// -> ['text/html', 'application/json']\n\nnegotiator.mediaType(availableMediaTypes)\n// -> 'text/html'\n```\n\nYou can check a working example at `examples/accept.js`.\n\n#### Methods\n\n##### mediaTypes(availableMediaTypes):\n\nReturns an array of preferred media types ordered by priority from a list of available media types.\n\n##### mediaType(availableMediaType):\n\nReturns the top preferred media type from a list of available media types.\n\n### Accept-Language Negotiation\n\n```js\nnegotiator = new Negotiator(request)\n\navailableLanguages = 'en', 'es', 'fr'\n\n// Let's say Accept-Language header is 'en;q=0.8, es, pt'\n\nnegotiator.languages()\n// -> ['es', 'pt', 'en']\n\nnegotiator.languages(availableLanguages)\n// -> ['es', 'en']\n\nlanguage = negotiator.language(availableLanguages)\n// -> 'es'\n```\n\nYou can check a working example at `examples/language.js`.\n\n#### Methods\n\n##### languages(availableLanguages):\n\nReturns an array of preferred languages ordered by priority from a list of available languages.\n\n##### language(availableLanguages):\n\nReturns the top preferred language from a list of available languages.\n\n### Accept-Charset Negotiation\n\n```js\navailableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5']\n\nnegotiator = new Negotiator(request)\n\n// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2'\n\nnegotiator.charsets()\n// -> ['utf-8', 'iso-8859-1', 'utf-7']\n\nnegotiator.charsets(availableCharsets)\n// -> ['utf-8', 'iso-8859-1']\n\nnegotiator.charset(availableCharsets)\n// -> 'utf-8'\n```\n\nYou can check a working example at `examples/charset.js`.\n\n#### Methods\n\n##### charsets(availableCharsets):\n\nReturns an array of preferred charsets ordered by priority from a list of available charsets.\n\n##### charset(availableCharsets):\n\nReturns the top preferred charset from a list of available charsets.\n\n### Accept-Encoding Negotiation\n\n```js\navailableEncodings = ['identity', 'gzip']\n\nnegotiator = new Negotiator(request)\n\n// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5'\n\nnegotiator.encodings()\n// -> ['gzip', 'identity', 'compress']\n\nnegotiator.encodings(availableEncodings)\n// -> ['gzip', 'identity']\n\nnegotiator.encoding(availableEncodings)\n// -> 'gzip'\n```\n\nYou can check a working example at `examples/encoding.js`.\n\n#### Methods\n\n##### encodings(availableEncodings):\n\nReturns an array of preferred encodings ordered by priority from a list of available encodings.\n\n##### encoding(availableEncodings):\n\nReturns the top preferred encoding from a list of available encodings.\n\n## License\n\n[MIT](LICENSE)\n\n[npm-image]: https://img.shields.io/npm/v/negotiator.svg?style=flat\n[npm-url]: https://npmjs.org/package/negotiator\n[node-version-image]: https://img.shields.io/node/v/negotiator.svg?style=flat\n[node-version-url]: http://nodejs.org/download/\n[travis-image]: https://img.shields.io/travis/jshttp/negotiator.svg?style=flat\n[travis-url]: https://travis-ci.org/jshttp/negotiator\n[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator.svg?style=flat\n[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master\n[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg?style=flat\n[downloads-url]: https://npmjs.org/package/negotiator\n", + "readmeFilename": "README.md", + "_id": "negotiator@0.4.9", + "dist": { + "shasum": "a8c93fe58496da99bf329fb64351aaaca98ad2cb" }, - "dependencies": {}, - "_id": "negotiator@0.2.5", - "_from": "negotiator@0.2.5" + "_from": "negotiator@^0.4.5", + "_resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.4.9.tgz" } diff --git a/node_modules/restify/node_modules/negotiator/readme.md b/node_modules/restify/node_modules/negotiator/readme.md deleted file mode 100644 index 23154e5..0000000 --- a/node_modules/restify/node_modules/negotiator/readme.md +++ /dev/null @@ -1,132 +0,0 @@ -# Negotiator - -An HTTP content negotiator for node.js written in javascript. - -# Accept Negotiation - - Negotiator = require('negotiator') - - availableMediaTypes = ['text/html', 'text/plain', 'application/json'] - - // The negotiator constructor receives a request object - negotiator = new Negotiator(request) - - // Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg';q=0.8 - - negotiator.preferredMediaTypes() - // -> ['text/html', 'application/*', 'image/jpeg'] - - negotiator.preferredMediaTypes(availableMediaTypes) - // -> ['text/html', 'application.json'] - - negotiator.preferredLanguage(availableMediaTypes) - // -> 'text/html' - -You can check a working example at `examples/accept.js`. - -## Methods - -`preferredMediaTypes(availableMediaTypes)`: - -Returns an array of preferred media types ordered by priority from a list of available media types. - -`preferredMediaType(availableMediaType)`: - -Returns the top preferred media type from a list of available media types. - -# Accept-Language Negotiation - - Negotiator = require('negotiator') - - negotiator = new Negotiator(request) - - availableLanguages = 'en', 'es', 'fr' - - // Let's say Accept-Language header is 'en;q=0.8, es, pt' - - negotiator.preferredLanguages() - // -> ['es', 'pt', 'en'] - - negotiator.preferredLanguages(availableLanguages) - // -> ['es', 'en'] - - language = negotiator.preferredLanguage(availableLanguages) - // -> 'es' - -You can check a working example at `examples/language.js`. - -## Methods - -`preferredLanguages(availableLanguages)`: - -Returns an array of preferred languages ordered by priority from a list of available languages. - -`preferredLanguage(availableLanguages)`: - -Returns the top preferred language from a list of available languages. - -# Accept-Charset Negotiation - - Negotiator = require('negotiator') - - availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5'] - - negotiator = new Negotiator(request) - - // Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2' - - negotiator.preferredCharsets() - // -> ['utf-8', 'iso-8859-1', 'utf-7'] - - negotiator.preferredCharsets(availableCharsets) - // -> ['utf-8', 'iso-8859-1'] - - negotiator.preferredCharset(availableCharsets) - // -> 'utf-8' - -You can check a working example at `examples/charset.js`. - -## Methods - -`preferredCharsets(availableCharsets)`: - -Returns an array of preferred charsets ordered by priority from a list of available charsets. - -`preferredCharset(availableCharsets)`: - -Returns the top preferred charset from a list of available charsets. - -# Accept-Encoding Negotiation - - Negotiator = require('negotiator').Negotiator - - availableEncodings = ['identity', 'gzip'] - - negotiator = new Negotiator(request) - - // Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5' - - negotiator.preferredEncodings() - // -> ['gzip', 'identity', 'compress'] - - negotiator.preferredEncodings(availableEncodings) - // -> ['gzip', 'identity'] - - negotiator.preferredEncoding(availableEncodings) - // -> 'gzip' - -You can check a working example at `examples/encoding.js`. - -## Methods - -`preferredEncodings(availableEncodings)`: - -Returns an array of preferred encodings ordered by priority from a list of available encodings. - -`preferredEncoding(availableEncodings)`: - -Returns the top preferred encoding from a list of available encodings. - -# License - -MIT diff --git a/node_modules/restify/node_modules/negotiator/test/charset.js b/node_modules/restify/node_modules/negotiator/test/charset.js deleted file mode 100644 index 59af0cf..0000000 --- a/node_modules/restify/node_modules/negotiator/test/charset.js +++ /dev/null @@ -1,58 +0,0 @@ -(function() { - var configuration, preferredCharsets, testConfigurations, testCorrectCharset, _i, _len, - _this = this; - - preferredCharsets = require('../lib/charset').preferredCharsets; - - this["Should not return a charset when no charset is provided"] = function(test) { - test.deepEqual(preferredCharsets('*', []), []); - return test.done(); - }; - - this["Should not return a charset when no charset is acceptable"] = function(test) { - test.deepEqual(preferredCharsets('ISO-8859-1', ['utf-8']), []); - return test.done(); - }; - - this["Should not return a charset with q = 0"] = function(test) { - test.deepEqual(preferredCharsets('utf-8;q=0', ['utf-8']), []); - return test.done(); - }; - - testCorrectCharset = function(c) { - return _this["Should return " + c.selected + " for accept-charset header " + c.accept + " with provided charset " + c.provided] = function(test) { - test.deepEqual(preferredCharsets(c.accept, c.provided), c.selected); - return test.done(); - }; - }; - - testConfigurations = [ - { - accept: 'utf-8', - provided: ['utf-8'], - selected: ['utf-8'] - }, { - accept: '*', - provided: ['utf-8'], - selected: ['utf-8'] - }, { - accept: 'utf-8', - provided: ['utf-8', 'ISO-8859-1'], - selected: ['utf-8'] - }, { - accept: 'utf-8, ISO-8859-1', - provided: ['utf-8'], - selected: ['utf-8'] - }, { - accept: 'utf-8;q=0.8, ISO-8859-1', - provided: ['utf-8', 'ISO-8859-1'], - selected: ['ISO-8859-1', 'utf-8'] - } - ]; - - for (_i = 0, _len = testConfigurations.length; _i < _len; _i++) { - configuration = testConfigurations[_i]; - testCorrectCharset(configuration); - } - -}).call(this); diff --git a/node_modules/restify/node_modules/negotiator/test/encoding.js b/node_modules/restify/node_modules/negotiator/test/encoding.js deleted file mode 100644 index 123d729..0000000 --- a/node_modules/restify/node_modules/negotiator/test/encoding.js +++ /dev/null @@ -1,66 +0,0 @@ -(function() { - var configuration, preferredEncodings, testConfigurations, testCorrectEncoding, _i, _len, - _this = this; - - preferredEncodings = require('../lib/encoding').preferredEncodings; - - this["Should return identity encoding when no encoding is provided"] = function(test) { - test.deepEqual(preferredEncodings(null), ['identity']); - return test.done(); - }; - - this["Should include the identity encoding even if not explicity listed"] = function(test) { - test.ok(preferredEncodings('gzip').indexOf('identity') !== -1); - return test.done(); - }; - - this["Should not return identity encoding if q = 0"] = function(test) { - test.ok(preferredEncodings('identity;q=0').indexOf('identity') === -1); - return test.done(); - }; - - testCorrectEncoding = function(c) { - return _this["Should return " + c.selected + " for accept-encoding header " + c.accept + " with provided encoding " + c.provided] = function(test) { - test.deepEqual(preferredEncodings(c.accept, c.provided), c.selected); - return test.done(); - }; - }; - - testConfigurations = [ - { - accept: 'gzip', - provided: ['identity', 'gzip'], - selected: ['gzip', 'identity'] - }, { - accept: 'gzip, compress', - provided: ['compress'], - selected: ['compress'] - }, { - accept: 'deflate', - provided: ['gzip', 'identity'], - selected: ['identity'] - }, { - accept: '*', - provided: ['identity', 'gzip'], - selected: ['identity', 'gzip'] - }, { - accept: 'gzip, compress', - provided: ['compress', 'identity'], - selected: ['compress', 'identity'] - }, { - accept: 'gzip;q=0.8, identity;q=0.5, *;q=0.3', - provided: ['identity', 'gzip', 'compress'], - selected: ['gzip', 'identity', 'compress'] - }, { - accept: 'gzip;q=0.8, compress', - provided: ['gzip', 'compress'], - selected: ['compress', 'gzip'] - } - ]; - - for (_i = 0, _len = testConfigurations.length; _i < _len; _i++) { - configuration = testConfigurations[_i]; - testCorrectEncoding(configuration); - } - -}).call(this); diff --git a/node_modules/restify/node_modules/negotiator/test/language.js b/node_modules/restify/node_modules/negotiator/test/language.js deleted file mode 100644 index 2adada7..0000000 --- a/node_modules/restify/node_modules/negotiator/test/language.js +++ /dev/null @@ -1,66 +0,0 @@ -(function() { - var configuration, preferredLanguages, testConfigurations, testCorrectType, _i, _len, - _this = this; - - preferredLanguages = require('../lib/language').preferredLanguages; - - this["Should not return a language when no is provided"] = function(test) { - test.deepEqual(preferredLanguages('*', []), []); - return test.done(); - }; - - this["Should not return a language when no language is acceptable"] = function(test) { - test.deepEqual(preferredLanguages('en', ['es']), []); - return test.done(); - }; - - this["Should not return a language with q = 0"] = function(test) { - test.deepEqual(preferredLanguages('en;q=0', ['en']), []); - return test.done(); - }; - - testCorrectType = function(c) { - return _this["Should return " + c.selected + " for accept-language header " + c.accept + " with provided language " + c.provided] = function(test) { - test.deepEqual(preferredLanguages(c.accept, c.provided), c.selected); - return test.done(); - }; - }; - - testConfigurations = [ - { - accept: 'en', - provided: ['en'], - selected: ['en'] - }, { - accept: '*', - provided: ['en'], - selected: ['en'] - }, { - accept: 'en-US, en;q=0.8', - provided: ['en-US', 'en-GB'], - selected: ['en-US', 'en-GB'] - }, { - accept: 'en-US, en-GB', - provided: ['en-US'], - selected: ['en-US'] - }, { - accept: 'en', - provided: ['en-US'], - selected: ['en-US'] - }, { - accept: 'en;q=0.8, es', - provided: ['en', 'es'], - selected: ['es', 'en'] - }, { - accept: 'en-US;q=0.8, es', - provided: ['en', 'es'], - selected: ['es', 'en'] - } - ]; - - for (_i = 0, _len = testConfigurations.length; _i < _len; _i++) { - configuration = testConfigurations[_i]; - testCorrectType(configuration); - } - -}).call(this); diff --git a/node_modules/restify/node_modules/negotiator/test/mediaType.js b/node_modules/restify/node_modules/negotiator/test/mediaType.js deleted file mode 100644 index 9339025..0000000 --- a/node_modules/restify/node_modules/negotiator/test/mediaType.js +++ /dev/null @@ -1,66 +0,0 @@ -(function() { - var configuration, preferredMediaTypes, testConfigurations, testCorrectType, _i, _len, - _this = this; - - preferredMediaTypes = require('../lib/mediaType').preferredMediaTypes; - - this["Should not return a media type when no media type provided"] = function(test) { - test.deepEqual(preferredMediaTypes('*/*', []), []); - return test.done(); - }; - - this["Should not return a media type when no media type is acceptable"] = function(test) { - test.deepEqual(preferredMediaTypes('application/json', ['text/html']), []); - return test.done(); - }; - - this["Should not return a media type with q = 0"] = function(test) { - test.deepEqual(preferredMediaTypes('text/html;q=0', ['text/html']), []); - return test.done(); - }; - - testCorrectType = function(c) { - return _this["Should return " + c.selected + " for access header " + c.accept + " with provided types " + c.provided] = function(test) { - test.deepEqual(preferredMediaTypes(c.accept, c.provided), c.selected); - return test.done(); - }; - }; - - testConfigurations = [ - { - accept: 'text/html', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: '*/*', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: 'text/*', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: 'application/json, text/html', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: 'text/html;q=0.1', - provided: ['text/html'], - selected: ['text/html'] - }, { - accept: 'application/json, text/html', - provided: ['application/json', 'text/html'], - selected: ['application/json', 'text/html'] - }, { - accept: 'application/json;q=0.2, text/html', - provided: ['application/json', 'text/html'], - selected: ['text/html', 'application/json'] - } - ]; - - for (_i = 0, _len = testConfigurations.length; _i < _len; _i++) { - configuration = testConfigurations[_i]; - testCorrectType(configuration); - } - -}).call(this); diff --git a/node_modules/restify/node_modules/node-uuid/LICENSE.md b/node_modules/restify/node_modules/node-uuid/LICENSE.md index bcdddf9..f039427 100644 --- a/node_modules/restify/node_modules/node-uuid/LICENSE.md +++ b/node_modules/restify/node_modules/node-uuid/LICENSE.md @@ -1,3 +1,2 @@ -Copyright (c) 2010 Robert Kieffer - -Dual licensed under the [MIT](http://en.wikipedia.org/wiki/MIT_License) and [GPL](http://en.wikipedia.org/wiki/GNU_General_Public_License) licenses. +Copyright (c) 2010-2012 Robert Kieffer +MIT License - http://opensource.org/licenses/mit-license.php diff --git a/node_modules/restify/node_modules/node-uuid/README.md b/node_modules/restify/node_modules/node-uuid/README.md index d62f7a1..e436a89 100644 --- a/node_modules/restify/node_modules/node-uuid/README.md +++ b/node_modules/restify/node_modules/node-uuid/README.md @@ -6,6 +6,7 @@ Features: * Generate RFC4122 version 1 or version 4 UUIDs * Runs in node.js and all browsers. +* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid'). * Cryptographically strong random # generation on supporting platforms * 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! ) * [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html) @@ -189,15 +190,18 @@ For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid- ## Release notes -v1.4 +### 1.4.0 + * Improved module context detection * Removed public RNG functions -v1.3.2: +### 1.3.2 + * Improve tests and handling of v1() options (Issue #24) * Expose RNG option to allow for perf testing with different generators -v1.3: +### 1.3.0 + * Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! * Support for node.js crypto API * De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/restify/node_modules/node-uuid/package.json b/node_modules/restify/node_modules/node-uuid/package.json index c4b6c87..858cec8 100644 --- a/node_modules/restify/node_modules/node-uuid/package.json +++ b/node_modules/restify/node_modules/node-uuid/package.json @@ -23,12 +23,12 @@ "type": "git", "url": "https://github.com/broofa/node-uuid.git" }, - "version": "1.4.0", - "readme": "# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require('node-uuid');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> \nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\nv1.4\n* Improved module context detection\n* Removed public RNG functions\n\nv1.3.2:\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\nv1.3:\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", + "version": "1.4.1", + "readme": "# node-uuid\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and all browsers.\n* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').\n* Cryptographically strong random # generation on supporting platforms\n* 1.1K minified and gzip'ed (Want something smaller? Check this [crazy shit](https://gist.github.com/982883) out! )\n* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)\n\n## Getting Started\n\nInstall it in your browser:\n\n```html\n\n```\n\nOr in node.js:\n\n```\nnpm install node-uuid\n```\n\n```javascript\nvar uuid = require('node-uuid');\n```\n\nThen create some ids ...\n\n```javascript\n// Generate a v1 (time-based) id\nuuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n\n// Generate a v4 (random) id\nuuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'\n```\n\n## API\n\n### uuid.v1([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v1 (timestamp-based) UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1.\n * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used.\n * `msecs` - (Number | Date) Time in milliseconds since unix Epoch. Default: The current time is used.\n * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nNotes:\n\n1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v1({\n node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],\n clockseq: 0x1234,\n msecs: new Date('2011-11-01').getTime(),\n nsecs: 5678\n}); // -> \"710b962e-041c-11e1-9234-0123456789ab\"\n```\n\nExample: In-place generation of two binary IDs\n\n```javascript\n// Generate two ids in an array\nvar arr = new Array(32); // -> []\nuuid.v1(null, arr, 0); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\nuuid.v1(null, arr, 16); // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]\n\n// Optionally use uuid.unparse() to get stringify the ids\nuuid.unparse(buffer); // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'\nuuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'\n```\n\n### uuid.v4([`options` [, `buffer` [, `offset`]]])\n\nGenerate and return a RFC4122 v4 UUID.\n\n* `options` - (Object) Optional uuid state to apply. Properties may include:\n\n * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values\n * `rng` - (Function) Random # generator to use. Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.\n\n* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.\n* `offset` - (Number) Starting index in `buffer` at which to begin writing.\n\nReturns `buffer`, if specified, otherwise the string form of the UUID\n\nExample: Generate string UUID with fully-specified options\n\n```javascript\nuuid.v4({\n random: [\n 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,\n 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36\n ]\n});\n// -> \"109156be-c4fb-41ea-b1b4-efe1671c5836\"\n```\n\nExample: Generate two IDs in a single buffer\n\n```javascript\nvar buffer = new Array(32); // (or 'new Buffer' in node.js)\nuuid.v4(null, buffer, 0);\nuuid.v4(null, buffer, 16);\n```\n\n### uuid.parse(id[, buffer[, offset]])\n### uuid.unparse(buffer[, offset])\n\nParse and unparse UUIDs\n\n * `id` - (String) UUID(-like) string\n * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used\n * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0\n\nExample parsing and unparsing a UUID string\n\n```javascript\nvar bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> \nvar string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'\n```\n\n### uuid.noConflict()\n\n(Browsers only) Set `uuid` property back to it's previous value.\n\nReturns the node-uuid object.\n\nExample:\n\n```javascript\nvar myUuid = uuid.noConflict();\nmyUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'\n```\n\n## Deprecated APIs\n\nSupport for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.\n\n### uuid([format [, buffer [, offset]]])\n\nuuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).\n\n### uuid.BufferClass\n\nThe class of container created when generating binary uuid data if no buffer argument is specified. This is expected to go away, with no replacement API.\n\n## Testing\n\nIn node.js\n\n```\n> cd test\n> node test.js\n```\n\nIn Browser\n\n```\nopen test/test.html\n```\n\n### Benchmarking\n\nRequires node.js\n\n```\nnpm install uuid uuid-js\nnode benchmark/benchmark.js\n```\n\nFor a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)\n\nFor browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).\n\n## Release notes\n\n### 1.4.0\n\n* Improved module context detection\n* Removed public RNG functions\n\n### 1.3.2\n\n* Improve tests and handling of v1() options (Issue #24)\n* Expose RNG option to allow for perf testing with different generators\n\n### 1.3.0\n\n* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!\n* Support for node.js crypto API\n* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/broofa/node-uuid/issues" }, - "_id": "node-uuid@1.4.0", - "_from": "node-uuid@1.4.0" + "_id": "node-uuid@1.4.1", + "_from": "node-uuid@^1.4.1" } diff --git a/node_modules/restify/node_modules/node-uuid/uuid.js b/node_modules/restify/node_modules/node-uuid/uuid.js index 4795b9d..2fac6dc 100644 --- a/node_modules/restify/node_modules/node-uuid/uuid.js +++ b/node_modules/restify/node_modules/node-uuid/uuid.js @@ -1,8 +1,8 @@ // uuid.js // -// (c) 2010-2012 Robert Kieffer -// MIT License -// https://github.com/broofa/node-uuid +// Copyright (c) 2010-2012 Robert Kieffer +// MIT License - http://opensource.org/licenses/mit-license.php + (function() { var _global = this; @@ -224,7 +224,7 @@ uuid.unparse = unparse; uuid.BufferClass = BufferClass; - if (_global.define && define.amd) { + if (typeof define === 'function' && define.amd) { // Publish as AMD module define(function() {return uuid;}); } else if (typeof(module) != 'undefined' && module.exports) { @@ -242,4 +242,4 @@ _global.uuid = uuid; } -}()); +}).call(this); diff --git a/node_modules/restify/node_modules/once/README.md b/node_modules/restify/node_modules/once/README.md index e833b83..a2981ea 100644 --- a/node_modules/restify/node_modules/once/README.md +++ b/node_modules/restify/node_modules/once/README.md @@ -31,3 +31,21 @@ function load (file, cb) { Ironically, the prototype feature makes this module twice as complicated as necessary. + +To check whether you function has been called, use `fn.called`. Once the +function is called for the first time the return value of the original +function is saved in `fn.value` and subsequent calls will continue to +return this value. + +```javascript +var once = require('once') + +function load (cb) { + cb = once(cb) + var stream = createStream() + stream.once('data', cb) + stream.once('end', function () { + if (!cb.called) cb(new Error('not found')) + }) +} +``` diff --git a/node_modules/restify/node_modules/once/once.js b/node_modules/restify/node_modules/once/once.js index effc50a..2e1e721 100644 --- a/node_modules/restify/node_modules/once/once.js +++ b/node_modules/restify/node_modules/once/once.js @@ -1,4 +1,5 @@ -module.exports = once +var wrappy = require('wrappy') +module.exports = wrappy(once) once.proto = once(function () { Object.defineProperty(Function.prototype, 'once', { @@ -10,10 +11,11 @@ once.proto = once(function () { }) function once (fn) { - var called = false - return function () { - if (called) return - called = true - return fn.apply(this, arguments) + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) } + f.called = false + return f } diff --git a/node_modules/restify/node_modules/once/package.json b/node_modules/restify/node_modules/once/package.json index 4ce9891..1db453d 100644 --- a/node_modules/restify/node_modules/once/package.json +++ b/node_modules/restify/node_modules/once/package.json @@ -1,12 +1,14 @@ { "name": "once", - "version": "1.1.1", + "version": "1.3.1", "description": "Run a function exactly one time", "main": "once.js", "directories": { "test": "test" }, - "dependencies": {}, + "dependencies": { + "wrappy": "1" + }, "devDependencies": { "tap": "~0.3.0" }, @@ -29,11 +31,11 @@ "url": "http://blog.izs.me/" }, "license": "BSD", - "readme": "# once\n\nOnly call a function once.\n\n## usage\n\n```javascript\nvar once = require('once')\n\nfunction load (file, cb) {\n cb = once(cb)\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nOr add to the Function.prototype in a responsible way:\n\n```javascript\n// only has to be done once\nrequire('once').proto()\n\nfunction load (file, cb) {\n cb = cb.once()\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nIronically, the prototype feature makes this module twice as\ncomplicated as necessary.\n", + "readme": "# once\n\nOnly call a function once.\n\n## usage\n\n```javascript\nvar once = require('once')\n\nfunction load (file, cb) {\n cb = once(cb)\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nOr add to the Function.prototype in a responsible way:\n\n```javascript\n// only has to be done once\nrequire('once').proto()\n\nfunction load (file, cb) {\n cb = cb.once()\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nIronically, the prototype feature makes this module twice as\ncomplicated as necessary.\n\nTo check whether you function has been called, use `fn.called`. Once the\nfunction is called for the first time the return value of the original\nfunction is saved in `fn.value` and subsequent calls will continue to\nreturn this value.\n\n```javascript\nvar once = require('once')\n\nfunction load (cb) {\n cb = once(cb)\n var stream = createStream()\n stream.once('data', cb)\n stream.once('end', function () {\n if (!cb.called) cb(new Error('not found'))\n })\n}\n```\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/isaacs/once/issues" }, - "_id": "once@1.1.1", - "_from": "once@1.1.1" + "_id": "once@1.3.1", + "_from": "once@^1.3.0" } diff --git a/node_modules/restify/node_modules/once/test/once.js b/node_modules/restify/node_modules/once/test/once.js index f0291a4..c618360 100644 --- a/node_modules/restify/node_modules/once/test/once.js +++ b/node_modules/restify/node_modules/once/test/once.js @@ -3,15 +3,20 @@ var once = require('../once.js') test('once', function (t) { var f = 0 - var foo = once(function (g) { + function fn (g) { t.equal(f, 0) f ++ return f + g + this - }) + } + fn.ownProperty = {} + var foo = once(fn) + t.equal(fn.ownProperty, foo.ownProperty) + t.notOk(foo.called) for (var i = 0; i < 1E3; i++) { t.same(f, i === 0 ? 0 : 1) var g = foo.call(1, 1) - t.same(g, i === 0 ? 3 : undefined) + t.ok(foo.called) + t.same(g, 3) t.same(f, 1) } t.end() diff --git a/node_modules/restify/node_modules/qs/.gitmodules b/node_modules/restify/node_modules/qs/.gitmodules deleted file mode 100644 index 49e31da..0000000 --- a/node_modules/restify/node_modules/qs/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "support/expresso"] - path = support/expresso - url = git://github.com/visionmedia/expresso.git -[submodule "support/should"] - path = support/should - url = git://github.com/visionmedia/should.js.git diff --git a/node_modules/restify/node_modules/qs/.npmignore b/node_modules/restify/node_modules/qs/.npmignore index e85ce2a..7e1574d 100644 --- a/node_modules/restify/node_modules/qs/.npmignore +++ b/node_modules/restify/node_modules/qs/.npmignore @@ -1,7 +1,18 @@ -test -.travis.yml -benchmark.js -component.json -examples.js -History.md -Makefile +.idea +*.iml +npm-debug.log +dump.rdb +node_modules +results.tap +results.xml +npm-shrinkwrap.json +config.json +.DS_Store +*/.DS_Store +*/*/.DS_Store +._* +*/._* +*/*/._* +coverage.* +lib-cov +complexity.md diff --git a/node_modules/restify/node_modules/qs/Readme.md b/node_modules/restify/node_modules/qs/Readme.md deleted file mode 100644 index 27e54a4..0000000 --- a/node_modules/restify/node_modules/qs/Readme.md +++ /dev/null @@ -1,58 +0,0 @@ -# node-querystring - - query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others. - -## Installation - - $ npm install qs - -## Examples - -```js -var qs = require('qs'); - -qs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com'); -// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } } - -qs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }}) -// => user[name]=Tobi&user[email]=tobi%40learnboost.com -``` - -## Testing - -Install dev dependencies: - - $ npm install -d - -and execute: - - $ make test - -browser: - - $ open test/browser/index.html - -## License - -(The MIT License) - -Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/restify/node_modules/qs/index.js b/node_modules/restify/node_modules/qs/index.js index 8480bf6..bb0a047 100644 --- a/node_modules/restify/node_modules/qs/index.js +++ b/node_modules/restify/node_modules/qs/index.js @@ -1,377 +1 @@ -/** - * Object#toString() ref for stringify(). - */ - -var toString = Object.prototype.toString; - -/** - * Object#hasOwnProperty ref - */ - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * Array#indexOf shim. - */ - -var indexOf = typeof Array.prototype.indexOf === 'function' - ? function(arr, el) { return arr.indexOf(el); } - : function(arr, el) { - for (var i = 0; i < arr.length; i++) { - if (arr[i] === el) return i; - } - return -1; - }; - -/** - * Array.isArray shim. - */ - -var isArray = Array.isArray || function(arr) { - return toString.call(arr) == '[object Array]'; -}; - -/** - * Object.keys shim. - */ - -var objectKeys = Object.keys || function(obj) { - var ret = []; - for (var key in obj) ret.push(key); - return ret; -}; - -/** - * Array#forEach shim. - */ - -var forEach = typeof Array.prototype.forEach === 'function' - ? function(arr, fn) { return arr.forEach(fn); } - : function(arr, fn) { - for (var i = 0; i < arr.length; i++) fn(arr[i]); - }; - -/** - * Array#reduce shim. - */ - -var reduce = function(arr, fn, initial) { - if (typeof arr.reduce === 'function') return arr.reduce(fn, initial); - var res = initial; - for (var i = 0; i < arr.length; i++) res = fn(res, arr[i]); - return res; -}; - -/** - * Create a nullary object if possible - */ - -function createObject() { - return Object.create - ? Object.create(null) - : {}; -} - -/** - * Cache non-integer test regexp. - */ - -var isint = /^[0-9]+$/; - -function promote(parent, key) { - if (parent[key].length == 0) return parent[key] = createObject(); - var t = createObject(); - for (var i in parent[key]) t[i] = parent[key][i]; - parent[key] = t; - return t; -} - -function parse(parts, parent, key, val) { - var part = parts.shift(); - // end - if (!part) { - if (isArray(parent[key])) { - parent[key].push(val); - } else if ('object' == typeof parent[key]) { - parent[key] = val; - } else if ('undefined' == typeof parent[key]) { - parent[key] = val; - } else { - parent[key] = [parent[key], val]; - } - // array - } else { - var obj = parent[key] = parent[key] || []; - if (']' == part) { - if (isArray(obj)) { - if ('' != val) obj.push(val); - } else if ('object' == typeof obj) { - obj[objectKeys(obj).length] = val; - } else { - obj = parent[key] = [parent[key], val]; - } - // prop - } else if (~indexOf(part, ']')) { - part = part.substr(0, part.length - 1); - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - // key - } else { - if (!isint.test(part) && isArray(obj)) obj = promote(parent, key); - parse(parts, obj, part, val); - } - } -} - -/** - * Merge parent key/val pair. - */ - -function merge(parent, key, val){ - if (~indexOf(key, ']')) { - var parts = key.split('[') - , len = parts.length - , last = len - 1; - parse(parts, parent, 'base', val); - // optimize - } else { - if (!isint.test(key) && isArray(parent.base)) { - var t = createObject(); - for (var k in parent.base) t[k] = parent.base[k]; - parent.base = t; - } - set(parent.base, key, val); - } - - return parent; -} - -/** - * Compact sparse arrays. - */ - -function compact(obj) { - if ('object' != typeof obj) return obj; - - if (isArray(obj)) { - var ret = []; - for (var i in obj) ret.push(obj[i]); - return ret; - } - - for (var key in obj) { - obj[key] = compact(obj[key]); - } - - return obj; -} - -/** - * Restore Object.prototype. - * see pull-request #58 - */ - -function restoreProto(obj) { - if (!Object.create) return obj; - if (isArray(obj)) return obj; - if (obj && 'object' != typeof obj) return obj; - - for (var key in obj) { - if (hasOwnProperty.call(obj, key)) { - obj[key] = restoreProto(obj[key]); - } - } - - obj.__proto__ = Object.prototype; - return obj; -} - -/** - * Parse the given obj. - */ - -function parseObject(obj){ - var ret = { base: {} }; - - forEach(objectKeys(obj), function(name){ - merge(ret, name, obj[name]); - }); - - return compact(ret.base); -} - -/** - * Parse the given str. - */ - -function parseString(str){ - var ret = reduce(String(str).split('&'), function(ret, pair){ - var eql = indexOf(pair, '=') - , brace = lastBraceInKey(pair) - , key = pair.substr(0, brace || eql) - , val = pair.substr(brace || eql, pair.length) - , val = val.substr(indexOf(val, '=') + 1, val.length); - - // ?foo - if ('' == key) key = pair, val = ''; - if ('' == key) return ret; - - return merge(ret, decode(key), decode(val)); - }, { base: createObject() }).base; - - return restoreProto(compact(ret)); -} - -/** - * Parse the given query `str` or `obj`, returning an object. - * - * @param {String} str | {Object} obj - * @return {Object} - * @api public - */ - -exports.parse = function(str){ - if (null == str || '' == str) return {}; - return 'object' == typeof str - ? parseObject(str) - : parseString(str); -}; - -/** - * Turn the given `obj` into a query string - * - * @param {Object} obj - * @return {String} - * @api public - */ - -var stringify = exports.stringify = function(obj, prefix) { - if (isArray(obj)) { - return stringifyArray(obj, prefix); - } else if ('[object Object]' == toString.call(obj)) { - return stringifyObject(obj, prefix); - } else if ('string' == typeof obj) { - return stringifyString(obj, prefix); - } else { - return prefix + '=' + encodeURIComponent(String(obj)); - } -}; - -/** - * Stringify the given `str`. - * - * @param {String} str - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyString(str, prefix) { - if (!prefix) throw new TypeError('stringify expects an object'); - return prefix + '=' + encodeURIComponent(str); -} - -/** - * Stringify the given `arr`. - * - * @param {Array} arr - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyArray(arr, prefix) { - var ret = []; - if (!prefix) throw new TypeError('stringify expects an object'); - for (var i = 0; i < arr.length; i++) { - ret.push(stringify(arr[i], prefix + '[' + i + ']')); - } - return ret.join('&'); -} - -/** - * Stringify the given `obj`. - * - * @param {Object} obj - * @param {String} prefix - * @return {String} - * @api private - */ - -function stringifyObject(obj, prefix) { - var ret = [] - , keys = objectKeys(obj) - , key; - - for (var i = 0, len = keys.length; i < len; ++i) { - key = keys[i]; - if ('' == key) continue; - if (null == obj[key]) { - ret.push(encodeURIComponent(key) + '='); - } else { - ret.push(stringify(obj[key], prefix - ? prefix + '[' + encodeURIComponent(key) + ']' - : encodeURIComponent(key))); - } - } - - return ret.join('&'); -} - -/** - * Set `obj`'s `key` to `val` respecting - * the weird and wonderful syntax of a qs, - * where "foo=bar&foo=baz" becomes an array. - * - * @param {Object} obj - * @param {String} key - * @param {String} val - * @api private - */ - -function set(obj, key, val) { - var v = obj[key]; - if (undefined === v) { - obj[key] = val; - } else if (isArray(v)) { - v.push(val); - } else { - obj[key] = [v, val]; - } -} - -/** - * Locate last brace in `str` within the key. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function lastBraceInKey(str) { - var len = str.length - , brace - , c; - for (var i = 0; i < len; ++i) { - c = str[i]; - if (']' == c) brace = false; - if ('[' == c) brace = true; - if ('=' == c && !brace) return i; - } -} - -/** - * Decode `str`. - * - * @param {String} str - * @return {String} - * @api private - */ - -function decode(str) { - try { - return decodeURIComponent(str.replace(/\+/g, ' ')); - } catch (err) { - return str; - } -} +module.exports = require('./lib'); diff --git a/node_modules/restify/node_modules/qs/package.json b/node_modules/restify/node_modules/qs/package.json old mode 100644 new mode 100755 index 17121c7..c426ef2 --- a/node_modules/restify/node_modules/qs/package.json +++ b/node_modules/restify/node_modules/qs/package.json @@ -1,37 +1,39 @@ { "name": "qs", - "description": "querystring parser", - "version": "0.6.4", - "keywords": [ - "query string", - "parser", - "component" - ], - "repository": { - "type": "git", - "url": "git://github.com/visionmedia/node-querystring.git" - }, + "version": "1.2.2", + "description": "A querystring parser that supports nesting and arrays, with a depth limit", + "homepage": "https://github.com/hapijs/qs", + "main": "index.js", + "dependencies": {}, "devDependencies": { - "mocha": "*", - "expect.js": "*" + "lab": "3.x.x" }, "scripts": { - "test": "make test" + "test": "make test-cov" }, - "author": { - "name": "TJ Holowaychuk", - "email": "tj@vision-media.ca", - "url": "http://tjholowaychuk.com" + "repository": { + "type": "git", + "url": "https://github.com/hapijs/qs.git" }, - "main": "index", - "engines": { - "node": "*" + "keywords": [ + "querystring", + "qs" + ], + "author": { + "name": "Nathan LaFreniere", + "email": "quitlahok@gmail.com" }, - "readme": "# node-querystring\n\n query string parser for node and the browser supporting nesting, as it was removed from `0.3.x`, so this library provides the previous and commonly desired behaviour (and twice as fast). Used by [express](http://expressjs.com), [connect](http://senchalabs.github.com/connect) and others.\n\n## Installation\n\n $ npm install qs\n\n## Examples\n\n```js\nvar qs = require('qs');\n\nqs.parse('user[name][first]=Tobi&user[email]=tobi@learnboost.com');\n// => { user: { name: { first: 'Tobi' }, email: 'tobi@learnboost.com' } }\n\nqs.stringify({ user: { name: 'Tobi', email: 'tobi@learnboost.com' }})\n// => user[name]=Tobi&user[email]=tobi%40learnboost.com\n```\n\n## Testing\n\nInstall dev dependencies:\n\n $ npm install -d\n\nand execute:\n\n $ make test\n\nbrowser:\n\n $ open test/browser/index.html\n\n## License \n\n(The MIT License)\n\nCopyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.", - "readmeFilename": "Readme.md", + "licenses": [ + { + "type": "BSD", + "url": "http://github.com/hapijs/qs/raw/master/LICENSE" + } + ], + "readme": "# qs\n\nA querystring parsing and stringifying library with some added security.\n\n[![Build Status](https://secure.travis-ci.org/hapijs/qs.svg)](http://travis-ci.org/hapijs/qs)\n\nLead Maintainer: [Nathan LaFreniere](https://github.com/nlf)\n\nThe **qs** module was originally created and maintained by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring).\n\n## Usage\n\n```javascript\nvar Qs = require('qs');\n\nvar obj = Qs.parse('a=c'); // { a: 'c' }\nvar str = Qs.stringify(obj); // 'a=c'\n```\n\n### Parsing Objects\n\n```javascript\nQs.parse(string, [depth], [delimiter]);\n```\n\n**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`.\nFor example, the string `'foo[bar]=baz'` converts to:\n\n```javascript\n{\n foo: {\n bar: 'baz'\n }\n}\n```\n\nURI encoded strings work too:\n\n```javascript\nQs.parse('a%5Bb%5D=c');\n// { a: { b: 'c' } }\n```\n\nYou can also nest your objects, like `'foo[bar][baz]=foobarbaz'`:\n\n```javascript\n{\n foo: {\n bar: {\n baz: 'foobarbaz'\n }\n }\n}\n```\n\nBy default, when nesting objects **qs** will only parse up to 5 children deep. This means if you attempt to parse a string like\n`'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be:\n\n```javascript\n{\n a: {\n b: {\n c: {\n d: {\n e: {\n f: {\n '[g][h][i]': 'j'\n }\n }\n }\n }\n }\n }\n}\n```\n\nThis depth can be overridden by passing a `depth` option to `Qs.parse(string, depth)`:\n\n```javascript\nQs.parse('a[b][c][d][e][f][g][h][i]=j', 1);\n// { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } }\n```\n\nThe depth limit mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number.\n\nAn optional delimiter can also be passed:\n\n```javascript\nQs.parse('a=b;c=d', ';');\n// { a: 'b', c: 'd' }\n```\n\n### Parsing Arrays\n\n**qs** can also parse arrays using a similar `[]` notation:\n\n```javascript\nQs.parse('a[]=b&a[]=c');\n// { a: ['b', 'c'] }\n```\n\nYou may specify an index as well:\n\n```javascript\nQs.parse('a[1]=c&a[0]=b');\n// { a: ['b', 'c'] }\n```\n\nNote that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number\nto create an array. When creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving\ntheir order:\n\n```javascript\nQs.parse('a[1]=b&a[15]=c');\n// { a: ['b', 'c'] }\n```\n\nNote that an empty string is also a value, and will be preserved:\n\n```javascript\nQs.parse('a[]=&a[]=b');\n// { a: ['', 'b'] }\nQs.parse('a[0]=b&a[1]=&a[2]=c');\n// { a: ['b', '', 'c'] }\n```\n\n**qs** will also limit specifying indices in an array to a maximum index of `20`. Any array members with an index of greater than `20` will\ninstead be converted to an object with the index as the key:\n\n```javascript\nQs.parse('a[100]=b');\n// { a: { '100': 'b' } }\n```\n\nIf you mix notations, **qs** will merge the two items into an object:\n\n```javascript\nQs.parse('a[0]=b&a[b]=c');\n// { a: { '0': 'b', b: 'c' } }\n```\n\nYou can also create arrays of objects:\n\n```javascript\nQs.parse('a[][b]=c');\n// { a: [{ b: 'c' }] }\n```\n\n### Stringifying\n\n```javascript\nQs.stringify(object, [delimiter]);\n```\n\nWhen stringifying, **qs** always URI encodes output. Objects are stringified as you would expect:\n\n```javascript\nQs.stringify({ a: 'b' });\n// 'a=b'\nQs.stringify({ a: { b: 'c' } });\n// 'a%5Bb%5D=c'\n```\n\nExamples beyond this point will be shown as though the output is not URI encoded for clarity. Please note that the return values in these cases *will* be URI encoded during real usage.\n\nWhen arrays are stringified, they are always given explicit indices:\n\n```javascript\nQs.stringify({ a: ['b', 'c', 'd'] });\n// 'a[0]=b&a[1]=c&a[2]=d'\n```\n\nEmpty strings and null values will omit the value, but the equals sign (=) remains in place:\n\n```javascript\nQs.stringify({ a: '' });\n// 'a='\n```\n\nProperties that are set to `undefined` will be omitted entirely:\n\n```javascript\nQs.stringify({ a: null, b: undefined });\n// 'a='\n```\n\nThe delimiter may be overridden with stringify as well:\n\n```javascript\nQs.stringify({ a: 'b', c: 'd' }, ';');\n// 'a=b;c=d'\n```\n", + "readmeFilename": "README.md", "bugs": { - "url": "https://github.com/visionmedia/node-querystring/issues" + "url": "https://github.com/hapijs/qs/issues" }, - "_id": "qs@0.6.4", - "_from": "qs@0.6.4" + "_id": "qs@1.2.2", + "_from": "qs@^1.0.0" } diff --git a/node_modules/restify/node_modules/semver/LICENSE b/node_modules/restify/node_modules/semver/LICENSE index 05a4010..0c44ae7 100644 --- a/node_modules/restify/node_modules/semver/LICENSE +++ b/node_modules/restify/node_modules/semver/LICENSE @@ -1,23 +1,27 @@ -Copyright 2009, 2010, 2011 Isaac Z. Schlueter. +Copyright (c) Isaac Z. Schlueter ("Author") All rights reserved. -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: +The BSD License -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/restify/node_modules/semver/README.md b/node_modules/restify/node_modules/semver/README.md index 2193009..4e95b84 100644 --- a/node_modules/restify/node_modules/semver/README.md +++ b/node_modules/restify/node_modules/semver/README.md @@ -16,11 +16,12 @@ As a command-line utility: $ semver -h - Usage: semver -v [-r ] - Test if version(s) satisfy the supplied range(s), - and sort them. + Usage: semver [ [...]] [-r | -i | -d ] + Test if version(s) satisfy the supplied range(s), and sort them. - Multiple versions or ranges may be supplied. + Multiple versions or ranges may be supplied, unless increment + or decrement options are specified. In that case, only a single + version may be used, and it is incremented by the specified level Program exits successfully if any valid version satisfies all supplied ranges, and prints all satisfying versions. @@ -33,87 +34,125 @@ As a command-line utility: ## Versions -A version is the following things, in this order: - -* a number (Major) -* a period -* a number (minor) -* a period -* a number (patch) -* OPTIONAL: a hyphen, followed by a number (build) -* OPTIONAL: a collection of pretty much any non-whitespace characters - (tag) +A "version" is described by the `v2.0.0` specification found at +. A leading `"="` or `"v"` character is stripped off and ignored. -## Comparisons - -The ordering of versions is done using the following algorithm, given -two versions and asked to find the greater of the two: - -* If the majors are numerically different, then take the one - with a bigger major number. `2.3.4 > 1.3.4` -* If the minors are numerically different, then take the one - with the bigger minor number. `2.3.4 > 2.2.4` -* If the patches are numerically different, then take the one with the - bigger patch number. `2.3.4 > 2.3.3` -* If only one of them has a build number, then take the one with the - build number. `2.3.4-0 > 2.3.4` -* If they both have build numbers, and the build numbers are numerically - different, then take the one with the bigger build number. - `2.3.4-10 > 2.3.4-9` -* If only one of them has a tag, then take the one without the tag. - `2.3.4 > 2.3.4-beta` -* If they both have tags, then take the one with the lexicographically - larger tag. `2.3.4-beta > 2.3.4-alpha` -* At this point, they're equal. - ## Ranges The following range styles are supported: +* `1.2.3` A specific version. When nothing else will do. Must be a full + version number, with major, minor, and patch versions specified. + Note that build metadata is still ignored, so `1.2.3+build2012` will + satisfy this range. * `>1.2.3` Greater than a specific version. -* `<1.2.3` Less than +* `<1.2.3` Less than a specific version. If there is no prerelease + tag on the version range, then no prerelease version will be allowed + either, even though these are technically "less than". +* `>=1.2.3` Greater than or equal to. Note that prerelease versions + are NOT equal to their "normal" equivalents, so `1.2.3-beta` will + not satisfy this range, but `2.3.0-beta` will. +* `<=1.2.3` Less than or equal to. In this case, prerelease versions + ARE allowed, so `1.2.3-beta` would satisfy. * `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4` -* `~1.2.3` := `>=1.2.3 <1.3.0` -* `~1.2` := `>=1.2.0 <1.3.0` -* `~1` := `>=1.0.0 <2.0.0` -* `1.2.x` := `>=1.2.0 <1.3.0` -* `1.x` := `>=1.0.0 <2.0.0` +* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` "Reasonably close to `1.2.3`". When + using tilde operators, prerelease versions are supported as well, + but a prerelease of the next significant digit will NOT be + satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`. +* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` "Compatible with `1.2.3`". When + using caret operators, anything from the specified version (including + prerelease) will be supported up to, but not including, the next + major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`, + while `1.2.2` and `2.0.0-beta` will not. +* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` "Compatible with `0.1.3`". `0.x.x` versions are + special: the first non-zero component indicates potentially breaking changes, + meaning the caret operator matches any version with the same first non-zero + component starting at the specified version. +* `^0.0.2` := `=0.0.2` "Only the version `0.0.2` is considered compatible" +* `~1.2` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`" +* `^1.2` := `>=1.2.0-0 <2.0.0-0` "Any version compatible with `1.2`" +* `1.2.x` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`" +* `1.2.*` Same as `1.2.x`. +* `1.2` Same as `1.2.x`. +* `~1` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`" +* `^1` := `>=1.0.0-0 <2.0.0-0` "Any version compatible with `1`" +* `1.x` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`" +* `1.*` Same as `1.x`. +* `1` Same as `1.x`. +* `*` Any version whatsoever. +* `x` Same as `*`. +* `""` (just an empty string) Same as `*`. + Ranges can be joined with either a space (which implies "and") or a `||` (which implies "or"). ## Functions -* valid(v): Return the parsed version, or null if it's not valid. -* inc(v, release): Return the version incremented by the release type - (major, minor, patch, or build), or null if it's not valid. +All methods and classes take a final `loose` boolean argument that, if +true, will be more forgiving about not-quite-valid semver strings. +The resulting output will always be 100% strict, of course. + +Strict-mode Comparators and Ranges will be strict about the SemVer +strings that they parse. + +* `valid(v)`: Return the parsed version, or null if it's not valid. +* `inc(v, release)`: Return the version incremented by the release + type (`major`, `premajor`, `minor`, `preminor`, `patch`, + `prepatch`, or `prerelease`), or null if it's not valid + * `premajor` in one call will bump the version up to the next major + version and down to a prerelease of that major version. + `preminor`, and `prepatch` work the same way. + * If called from a non-prerelease version, the `prerelease` will work the + same as `prepatch`. It increments the patch version, then makes a + prerelease. If the input version is already a prerelease it simply + increments it. ### Comparison -* gt(v1, v2): `v1 > v2` -* gte(v1, v2): `v1 >= v2` -* lt(v1, v2): `v1 < v2` -* lte(v1, v2): `v1 <= v2` -* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent, +* `gt(v1, v2)`: `v1 > v2` +* `gte(v1, v2)`: `v1 >= v2` +* `lt(v1, v2)`: `v1 < v2` +* `lte(v1, v2)`: `v1 <= v2` +* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent, even if they're not the exact same string. You already know how to compare strings. -* neq(v1, v2): `v1 != v2` The opposite of eq. -* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call +* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`. +* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call the corresponding function above. `"==="` and `"!=="` do simple string comparison, but are included for completeness. Throws if an invalid comparison string is provided. -* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if - v2 is greater. Sorts in ascending order if passed to Array.sort(). -* rcompare(v1, v2): The reverse of compare. Sorts an array of versions - in descending order when passed to Array.sort(). +* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if + `v2` is greater. Sorts in ascending order if passed to `Array.sort()`. +* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions + in descending order when passed to `Array.sort()`. ### Ranges -* validRange(range): Return the valid range or null if it's not valid -* satisfies(version, range): Return true if the version satisfies the +* `validRange(range)`: Return the valid range or null if it's not valid +* `satisfies(version, range)`: Return true if the version satisfies the range. -* maxSatisfying(versions, range): Return the highest version in the list - that satisfies the range, or null if none of them do. +* `maxSatisfying(versions, range)`: Return the highest version in the list + that satisfies the range, or `null` if none of them do. +* `gtr(version, range)`: Return `true` if version is greater than all the + versions possible in the range. +* `ltr(version, range)`: Return `true` if version is less than all the + versions possible in the range. +* `outside(version, range, hilo)`: Return true if the version is outside + the bounds of the range in either the high or low direction. The + `hilo` argument must be either the string `'>'` or `'<'`. (This is + the function called by `gtr` and `ltr`.) + +Note that, since ranges may be non-contiguous, a version might not be +greater than a range, less than a range, *or* satisfy a range! For +example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9` +until `2.0.0`, so the version `1.2.10` would not be greater than the +range (because `2.0.1` satisfies, which is higher), nor less than the +range (since `1.2.8` satisfies, which is lower), and it also does not +satisfy the range. + +If you want to know if a version satisfies or does not satisfy a +range, use the `satisfies(version, range)` function. diff --git a/node_modules/restify/node_modules/semver/bin/semver b/node_modules/restify/node_modules/semver/bin/semver index d4e637e..41c148f 100755 --- a/node_modules/restify/node_modules/semver/bin/semver +++ b/node_modules/restify/node_modules/semver/bin/semver @@ -9,18 +9,44 @@ var argv = process.argv.slice(2) , gt = [] , lt = [] , eq = [] + , inc = null + , version = require("../package.json").version + , loose = false , semver = require("../semver") + , reverse = false main() function main () { if (!argv.length) return help() while (argv.length) { - var a - switch (a = argv.shift()) { + var a = argv.shift() + var i = a.indexOf('=') + if (i !== -1) { + a = a.slice(0, i) + argv.unshift(a.slice(i + 1)) + } + switch (a) { + case "-rv": case "-rev": case "--rev": case "--reverse": + reverse = true + break + case "-l": case "--loose": + loose = true + break case "-v": case "--version": versions.push(argv.shift()) break + case "-i": case "--inc": case "--increment": + switch (argv[0]) { + case "major": case "minor": case "patch": case "prerelease": + case "premajor": case "preminor": case "prepatch": + inc = argv.shift() + break + default: + inc = "patch" + break + } + break case "-r": case "--range": range.push(argv.shift()) break @@ -32,41 +58,68 @@ function main () { } } - versions = versions.filter(semver.valid) + versions = versions.filter(function (v) { + return semver.valid(v, loose) + }) if (!versions.length) return fail() + if (inc && (versions.length !== 1 || range.length)) + return failInc() + for (var i = 0, l = range.length; i < l ; i ++) { versions = versions.filter(function (v) { - return semver.satisfies(v, range[i]) + return semver.satisfies(v, range[i], loose) }) if (!versions.length) return fail() } return success(versions) } +function failInc () { + console.error("--inc can only be used on a single version with no range") + fail() +} + function fail () { process.exit(1) } function success () { - versions.sort(semver.compare) - .map(semver.clean) - .forEach(function (v,i,_) { console.log(v) }) + var compare = reverse ? "rcompare" : "compare" + versions.sort(function (a, b) { + return semver[compare](a, b, loose) + }).map(function (v) { + return semver.clean(v, loose) + }).map(function (v) { + return inc ? semver.inc(v, inc, loose) : v + }).forEach(function (v,i,_) { console.log(v) }) } function help () { - console.log(["Usage: semver -v [-r ]" - ,"Test if version(s) satisfy the supplied range(s)," - ,"and sort them." + console.log(["SemVer " + version ,"" - ,"Multiple versions or ranges may be supplied." + ,"A JavaScript implementation of the http://semver.org/ specification" + ,"Copyright Isaac Z. Schlueter" + ,"" + ,"Usage: semver [options] [ [...]]" + ,"Prints valid versions sorted by SemVer precedence" + ,"" + ,"Options:" + ,"-r --range " + ," Print versions that match the specified range." + ,"" + ,"-i --increment []" + ," Increment a version by the specified level. Level can" + ," be one of: major, minor, patch, premajor, preminor," + ," prepatch, or prerelease. Default level is 'patch'." + ," Only one version may be specified." + ,"" + ,"-l --loose" + ," Interpret versions and ranges loosely" ,"" ,"Program exits successfully if any valid version satisfies" ,"all supplied ranges, and prints all satisfying versions." ,"" - ,"If no versions are valid, or ranges are not satisfied," - ,"then exits failure." + ,"If no satisfying versions are found, then exits failure." ,"" ,"Versions are printed in ascending order, so supplying" ,"multiple versions to the utility will just sort them." ].join("\n")) } - - diff --git a/node_modules/restify/node_modules/semver/package.json b/node_modules/restify/node_modules/semver/package.json index 0b59f4e..75d6d20 100644 --- a/node_modules/restify/node_modules/semver/package.json +++ b/node_modules/restify/node_modules/semver/package.json @@ -1,18 +1,19 @@ { "name": "semver", - "version": "1.1.4", + "version": "2.3.2", "description": "The semantic version parser used by npm.", "main": "semver.js", + "browser": "semver.browser.js", + "min": "semver.min.js", "scripts": { - "test": "tap test.js" + "test": "tap test/*.js", + "prepublish": "make" }, "devDependencies": { - "tap": "0.x >=0.0.4" - }, - "license": { - "type": "MIT", - "url": "https://github.com/isaacs/semver/raw/master/LICENSE" + "tap": "0.x >=0.0.4", + "uglify-js": "~2.3.6" }, + "license": "BSD", "repository": { "type": "git", "url": "git://github.com/isaacs/node-semver.git" @@ -20,11 +21,11 @@ "bin": { "semver": "./bin/semver" }, - "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n $ npm install semver\n\n semver.valid('1.2.3') // '1.2.3'\n semver.valid('a.b.c') // null\n semver.clean(' =v1.2.3 ') // '1.2.3'\n semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n semver.gt('1.2.3', '9.8.7') // false\n semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n $ semver -h\n\n Usage: semver -v [-r ]\n Test if version(s) satisfy the supplied range(s),\n and sort them.\n\n Multiple versions or ranges may be supplied.\n\n Program exits successfully if any valid version satisfies\n all supplied ranges, and prints all satisfying versions.\n\n If no versions are valid, or ranges are not satisfied,\n then exits failure.\n\n Versions are printed in ascending order, so supplying\n multiple versions to the utility will just sort them.\n\n## Versions\n\nA version is the following things, in this order:\n\n* a number (Major)\n* a period\n* a number (minor)\n* a period\n* a number (patch)\n* OPTIONAL: a hyphen, followed by a number (build)\n* OPTIONAL: a collection of pretty much any non-whitespace characters\n (tag)\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Comparisons\n\nThe ordering of versions is done using the following algorithm, given\ntwo versions and asked to find the greater of the two:\n\n* If the majors are numerically different, then take the one\n with a bigger major number. `2.3.4 > 1.3.4`\n* If the minors are numerically different, then take the one\n with the bigger minor number. `2.3.4 > 2.2.4`\n* If the patches are numerically different, then take the one with the\n bigger patch number. `2.3.4 > 2.3.3`\n* If only one of them has a build number, then take the one with the\n build number. `2.3.4-0 > 2.3.4`\n* If they both have build numbers, and the build numbers are numerically\n different, then take the one with the bigger build number.\n `2.3.4-10 > 2.3.4-9`\n* If only one of them has a tag, then take the one without the tag.\n `2.3.4 > 2.3.4-beta`\n* If they both have tags, then take the one with the lexicographically\n larger tag. `2.3.4-beta > 2.3.4-alpha`\n* At this point, they're equal.\n\n## Ranges\n\nThe following range styles are supported:\n\n* `>1.2.3` Greater than a specific version.\n* `<1.2.3` Less than\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n* `~1.2.3` := `>=1.2.3 <1.3.0`\n* `~1.2` := `>=1.2.0 <1.3.0`\n* `~1` := `>=1.0.0 <2.0.0`\n* `1.2.x` := `>=1.2.0 <1.3.0`\n* `1.x` := `>=1.0.0 <2.0.0`\n\nRanges can be joined with either a space (which implies \"and\") or a\n`||` (which implies \"or\").\n\n## Functions\n\n* valid(v): Return the parsed version, or null if it's not valid.\n* inc(v, release): Return the version incremented by the release type\n (major, minor, patch, or build), or null if it's not valid.\n\n### Comparison\n\n* gt(v1, v2): `v1 > v2`\n* gte(v1, v2): `v1 >= v2`\n* lt(v1, v2): `v1 < v2`\n* lte(v1, v2): `v1 <= v2`\n* eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,\n even if they're not the exact same string. You already know how to\n compare strings.\n* neq(v1, v2): `v1 != v2` The opposite of eq.\n* cmp(v1, comparator, v2): Pass in a comparison string, and it'll call\n the corresponding function above. `\"===\"` and `\"!==\"` do simple\n string comparison, but are included for completeness. Throws if an\n invalid comparison string is provided.\n* compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if\n v2 is greater. Sorts in ascending order if passed to Array.sort().\n* rcompare(v1, v2): The reverse of compare. Sorts an array of versions\n in descending order when passed to Array.sort().\n\n\n### Ranges\n\n* validRange(range): Return the valid range or null if it's not valid\n* satisfies(version, range): Return true if the version satisfies the\n range.\n* maxSatisfying(versions, range): Return the highest version in the list\n that satisfies the range, or null if none of them do.\n", + "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Usage\n\n $ npm install semver\n\n semver.valid('1.2.3') // '1.2.3'\n semver.valid('a.b.c') // null\n semver.clean(' =v1.2.3 ') // '1.2.3'\n semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n semver.gt('1.2.3', '9.8.7') // false\n semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n $ semver -h\n\n Usage: semver [ [...]] [-r | -i | -d ]\n Test if version(s) satisfy the supplied range(s), and sort them.\n\n Multiple versions or ranges may be supplied, unless increment\n or decrement options are specified. In that case, only a single\n version may be used, and it is incremented by the specified level\n\n Program exits successfully if any valid version satisfies\n all supplied ranges, and prints all satisfying versions.\n\n If no versions are valid, or ranges are not satisfied,\n then exits failure.\n\n Versions are printed in ascending order, so supplying\n multiple versions to the utility will just sort them.\n\n## Versions\n\nA \"version\" is described by the `v2.0.0` specification found at\n.\n\nA leading `\"=\"` or `\"v\"` character is stripped off and ignored.\n\n## Ranges\n\nThe following range styles are supported:\n\n* `1.2.3` A specific version. When nothing else will do. Must be a full\n version number, with major, minor, and patch versions specified.\n Note that build metadata is still ignored, so `1.2.3+build2012` will\n satisfy this range.\n* `>1.2.3` Greater than a specific version.\n* `<1.2.3` Less than a specific version. If there is no prerelease\n tag on the version range, then no prerelease version will be allowed\n either, even though these are technically \"less than\".\n* `>=1.2.3` Greater than or equal to. Note that prerelease versions\n are NOT equal to their \"normal\" equivalents, so `1.2.3-beta` will\n not satisfy this range, but `2.3.0-beta` will.\n* `<=1.2.3` Less than or equal to. In this case, prerelease versions\n ARE allowed, so `1.2.3-beta` would satisfy.\n* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`\n* `~1.2.3` := `>=1.2.3-0 <1.3.0-0` \"Reasonably close to `1.2.3`\". When\n using tilde operators, prerelease versions are supported as well,\n but a prerelease of the next significant digit will NOT be\n satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`.\n* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` \"Compatible with `1.2.3`\". When\n using caret operators, anything from the specified version (including\n prerelease) will be supported up to, but not including, the next\n major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`,\n while `1.2.2` and `2.0.0-beta` will not.\n* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` \"Compatible with `0.1.3`\". `0.x.x` versions are\n special: the first non-zero component indicates potentially breaking changes,\n meaning the caret operator matches any version with the same first non-zero\n component starting at the specified version.\n* `^0.0.2` := `=0.0.2` \"Only the version `0.0.2` is considered compatible\"\n* `~1.2` := `>=1.2.0-0 <1.3.0-0` \"Any version starting with `1.2`\"\n* `^1.2` := `>=1.2.0-0 <2.0.0-0` \"Any version compatible with `1.2`\"\n* `1.2.x` := `>=1.2.0-0 <1.3.0-0` \"Any version starting with `1.2`\"\n* `1.2.*` Same as `1.2.x`.\n* `1.2` Same as `1.2.x`.\n* `~1` := `>=1.0.0-0 <2.0.0-0` \"Any version starting with `1`\"\n* `^1` := `>=1.0.0-0 <2.0.0-0` \"Any version compatible with `1`\"\n* `1.x` := `>=1.0.0-0 <2.0.0-0` \"Any version starting with `1`\"\n* `1.*` Same as `1.x`.\n* `1` Same as `1.x`.\n* `*` Any version whatsoever.\n* `x` Same as `*`.\n* `\"\"` (just an empty string) Same as `*`.\n\n\nRanges can be joined with either a space (which implies \"and\") or a\n`||` (which implies \"or\").\n\n## Functions\n\nAll methods and classes take a final `loose` boolean argument that, if\ntrue, will be more forgiving about not-quite-valid semver strings.\nThe resulting output will always be 100% strict, of course.\n\nStrict-mode Comparators and Ranges will be strict about the SemVer\nstrings that they parse.\n\n* `valid(v)`: Return the parsed version, or null if it's not valid.\n* `inc(v, release)`: Return the version incremented by the release\n type (`major`, `premajor`, `minor`, `preminor`, `patch`,\n `prepatch`, or `prerelease`), or null if it's not valid\n * `premajor` in one call will bump the version up to the next major\n version and down to a prerelease of that major version.\n `preminor`, and `prepatch` work the same way.\n * If called from a non-prerelease version, the `prerelease` will work the\n same as `prepatch`. It increments the patch version, then makes a\n prerelease. If the input version is already a prerelease it simply\n increments it.\n\n### Comparison\n\n* `gt(v1, v2)`: `v1 > v2`\n* `gte(v1, v2)`: `v1 >= v2`\n* `lt(v1, v2)`: `v1 < v2`\n* `lte(v1, v2)`: `v1 <= v2`\n* `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,\n even if they're not the exact same string. You already know how to\n compare strings.\n* `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.\n* `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call\n the corresponding function above. `\"===\"` and `\"!==\"` do simple\n string comparison, but are included for completeness. Throws if an\n invalid comparison string is provided.\n* `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if\n `v2` is greater. Sorts in ascending order if passed to `Array.sort()`.\n* `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions\n in descending order when passed to `Array.sort()`.\n\n\n### Ranges\n\n* `validRange(range)`: Return the valid range or null if it's not valid\n* `satisfies(version, range)`: Return true if the version satisfies the\n range.\n* `maxSatisfying(versions, range)`: Return the highest version in the list\n that satisfies the range, or `null` if none of them do.\n* `gtr(version, range)`: Return `true` if version is greater than all the\n versions possible in the range.\n* `ltr(version, range)`: Return `true` if version is less than all the\n versions possible in the range.\n* `outside(version, range, hilo)`: Return true if the version is outside\n the bounds of the range in either the high or low direction. The\n `hilo` argument must be either the string `'>'` or `'<'`. (This is\n the function called by `gtr` and `ltr`.)\n\nNote that, since ranges may be non-contiguous, a version might not be\ngreater than a range, less than a range, *or* satisfy a range! For\nexample, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`\nuntil `2.0.0`, so the version `1.2.10` would not be greater than the\nrange (because `2.0.1` satisfies, which is higher), nor less than the\nrange (since `1.2.8` satisfies, which is lower), and it also does not\nsatisfy the range.\n\nIf you want to know if a version satisfies or does not satisfy a\nrange, use the `satisfies(version, range)` function.\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/isaacs/node-semver/issues" }, - "_id": "semver@1.1.4", - "_from": "semver@1.1.4" + "_id": "semver@2.3.2", + "_from": "semver@^2.3.0" } diff --git a/node_modules/restify/node_modules/semver/semver.js b/node_modules/restify/node_modules/semver/semver.js index cebfe6f..75f60f2 100644 --- a/node_modules/restify/node_modules/semver/semver.js +++ b/node_modules/restify/node_modules/semver/semver.js @@ -1,158 +1,715 @@ -;(function (exports) { // nothing in here is node-specific. - -// See http://semver.org/ -// This implementation is a *hair* less strict in that it allows -// v1.2.3 things, and also tags that don't begin with a char. - -var semver = "\\s*[v=]*\\s*([0-9]+)" // major - + "\\.([0-9]+)" // minor - + "\\.([0-9]+)" // patch - + "(-[0-9]+-?)?" // build - + "([a-zA-Z-+][a-zA-Z0-9-\.:]*)?" // tag - , exprComparator = "^((<|>)?=?)\s*("+semver+")$|^$" - , xRangePlain = "[v=]*([0-9]+|x|X|\\*)" - + "(?:\\.([0-9]+|x|X|\\*)" - + "(?:\\.([0-9]+|x|X|\\*)" - + "([a-zA-Z-][a-zA-Z0-9-\.:]*)?)?)?" - , xRange = "((?:<|>)=?)?\\s*" + xRangePlain - , exprLoneSpermy = "(?:~>?)" - , exprSpermy = exprLoneSpermy + xRange - , expressions = exports.expressions = - { parse : new RegExp("^\\s*"+semver+"\\s*$") - , parsePackage : new RegExp("^\\s*([^\/]+)[-@](" +semver+")\\s*$") - , parseRange : new RegExp( - "^\\s*(" + semver + ")\\s+-\\s+(" + semver + ")\\s*$") - , validComparator : new RegExp("^"+exprComparator+"$") - , parseXRange : new RegExp("^"+xRange+"$") - , parseSpermy : new RegExp("^"+exprSpermy+"$") - } +// export the class if we are in a Node-like system. +if (typeof module === 'object' && module.exports === exports) + exports = module.exports = SemVer; + +// The debug function is excluded entirely from the minified version. +/* nomin */ var debug; +/* nomin */ if (typeof process === 'object' && + /* nomin */ process.env && + /* nomin */ process.env.NODE_DEBUG && + /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG)) + /* nomin */ debug = function() { + /* nomin */ var args = Array.prototype.slice.call(arguments, 0); + /* nomin */ args.unshift('SEMVER'); + /* nomin */ console.log.apply(console, args); + /* nomin */ }; +/* nomin */ else + /* nomin */ debug = function() {}; + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0'; + +// The actual regexps go on exports.re +var re = exports.re = []; +var src = exports.src = []; +var R = 0; + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++; +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'; +var NUMERICIDENTIFIERLOOSE = R++; +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'; + + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++; +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'; + + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++; +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')'; + +var MAINVERSIONLOOSE = R++; +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')'; + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++; +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + +var PRERELEASEIDENTIFIERLOOSE = R++; +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++; +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'; + +var PRERELEASELOOSE = R++; +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'; + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++; +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'; + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++; +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'; + + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++; +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?'; + +src[FULL] = '^' + FULLPLAIN + '$'; + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?'; + +var LOOSE = R++; +src[LOOSE] = '^' + LOOSEPLAIN + '$'; + +var GTLT = R++; +src[GTLT] = '((?:<|>)?=?)'; + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++; +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'; +var XRANGEIDENTIFIER = R++; +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'; + +var XRANGEPLAIN = R++; +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:(' + src[PRERELEASE] + ')' + + ')?)?)?'; + +var XRANGEPLAINLOOSE = R++; +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:(' + src[PRERELEASELOOSE] + ')' + + ')?)?)?'; + +// >=2.x, for example, means >=2.0.0-0 +// <1.x would be the same as "<1.0.0-0", though. +var XRANGE = R++; +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'; +var XRANGELOOSE = R++; +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'; + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++; +src[LONETILDE] = '(?:~>?)'; + +var TILDETRIM = R++; +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'; +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g'); +var tildeTrimReplace = '$1~'; + +var TILDE = R++; +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'; +var TILDELOOSE = R++; +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'; + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++; +src[LONECARET] = '(?:\\^)'; + +var CARETTRIM = R++; +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'; +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g'); +var caretTrimReplace = '$1^'; + +var CARET = R++; +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'; +var CARETLOOSE = R++; +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'; + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++; +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'; +var COMPARATOR = R++; +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'; + + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++; +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'; + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g'); +var comparatorTrimReplace = '$1$2$3'; + + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++; +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$'; + +var HYPHENRANGELOOSE = R++; +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$'; + +// Star ranges basically just allow anything at all. +var STAR = R++; +src[STAR] = '(<|>)?=?\\s*\\*'; + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]); + if (!re[i]) + re[i] = new RegExp(src[i]); +} + +exports.parse = parse; +function parse(version, loose) { + var r = loose ? re[LOOSE] : re[FULL]; + return (r.test(version)) ? new SemVer(version, loose) : null; +} -Object.getOwnPropertyNames(expressions).forEach(function (i) { - exports[i] = function (str) { - return ("" + (str || "")).match(expressions[i]) +exports.valid = valid; +function valid(version, loose) { + var v = parse(version, loose); + return v ? v.version : null; +} + + +exports.clean = clean; +function clean(version, loose) { + var s = parse(version, loose); + return s ? s.version : null; +} + +exports.SemVer = SemVer; + +function SemVer(version, loose) { + if (version instanceof SemVer) { + if (version.loose === loose) + return version; + else + version = version.version; + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version); } -}) - -exports.rangeReplace = ">=$1 <=$7" -exports.clean = clean -exports.compare = compare -exports.rcompare = rcompare -exports.satisfies = satisfies -exports.gt = gt -exports.gte = gte -exports.lt = lt -exports.lte = lte -exports.eq = eq -exports.neq = neq -exports.cmp = cmp -exports.inc = inc - -exports.valid = valid -exports.validPackage = validPackage -exports.validRange = validRange -exports.maxSatisfying = maxSatisfying - -exports.replaceStars = replaceStars -exports.toComparators = toComparators - -function stringify (version) { - var v = version - return [v[1]||'', v[2]||'', v[3]||''].join(".") + (v[4]||'') + (v[5]||'') -} - -function clean (version) { - version = exports.parse(version) - if (!version) return version - return stringify(version) -} - -function valid (version) { - if (typeof version !== "string") return null - return exports.parse(version) && version.trim().replace(/^[v=]+/, '') -} - -function validPackage (version) { - if (typeof version !== "string") return null - return version.match(expressions.parsePackage) && version.trim() -} - -// range can be one of: -// "1.0.3 - 2.0.0" range, inclusive, like ">=1.0.3 <=2.0.0" -// ">1.0.2" like 1.0.3 - 9999.9999.9999 -// ">=1.0.2" like 1.0.2 - 9999.9999.9999 -// "<2.0.0" like 0.0.0 - 1.9999.9999 -// ">1.0.2 <2.0.0" like 1.0.3 - 1.9999.9999 -var starExpression = /(<|>)?=?\s*\*/g - , starReplace = "" - , compTrimExpression = new RegExp("((<|>)?=|<|>)\\s*(" - +semver+"|"+xRangePlain+")", "g") - , compTrimReplace = "$1$3" - -function toComparators (range) { - var ret = (range || "").trim() - .replace(expressions.parseRange, exports.rangeReplace) - .replace(compTrimExpression, compTrimReplace) - .split(/\s+/) - .join(" ") - .split("||") - .map(function (orchunk) { - return orchunk - .replace(new RegExp("(" + exprLoneSpermy + ")\\s+"), "$1") - .split(" ") - .map(replaceXRanges) - .map(replaceSpermies) - .map(replaceStars) - .join(" ").trim() - }) - .map(function (orchunk) { - return orchunk - .trim() - .split(/\s+/) - .filter(function (c) { return c.match(expressions.validComparator) }) - }) - .filter(function (c) { return c.length }) - return ret -} - -function replaceStars (stars) { - return stars.trim().replace(starExpression, starReplace) -} - -// "2.x","2.x.x" --> ">=2.0.0- <2.1.0-" -// "2.3.x" --> ">=2.3.0- <2.4.0-" -function replaceXRanges (ranges) { - return ranges.split(/\s+/) - .map(replaceXRange) - .join(" ") -} - -function replaceXRange (version) { - return version.trim().replace(expressions.parseXRange, - function (v, gtlt, M, m, p, t) { - var anyX = !M || M.toLowerCase() === "x" || M === "*" - || !m || m.toLowerCase() === "x" || m === "*" - || !p || p.toLowerCase() === "x" || p === "*" - , ret = v - if (gtlt && anyX) { - // just replace x'es with zeroes - ;(!M || M === "*" || M.toLowerCase() === "x") && (M = 0) - ;(!m || m === "*" || m.toLowerCase() === "x") && (m = 0) - ;(!p || p === "*" || p.toLowerCase() === "x") && (p = 0) - ret = gtlt + M+"."+m+"."+p+"-" - } else if (!M || M === "*" || M.toLowerCase() === "x") { - ret = "*" // allow any - } else if (!m || m === "*" || m.toLowerCase() === "x") { - // append "-" onto the version, otherwise - // "1.x.x" matches "2.0.0beta", since the tag - // *lowers* the version value - ret = ">="+M+".0.0- <"+(+M+1)+".0.0-" - } else if (!p || p === "*" || p.toLowerCase() === "x") { - ret = ">="+M+"."+m+".0- <"+M+"."+(+m+1)+".0-" + if (!(this instanceof SemVer)) + return new SemVer(version, loose); + + debug('SemVer', version, loose); + this.loose = loose; + var m = version.trim().match(loose ? re[LOOSE] : re[FULL]); + + if (!m) + throw new TypeError('Invalid Version: ' + version); + + this.raw = version; + + // these are actually numbers + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; + + // numberify any prerelease numeric ids + if (!m[4]) + this.prerelease = []; + else + this.prerelease = m[4].split('.').map(function(id) { + return (/^[0-9]+$/.test(id)) ? +id : id; + }); + + this.build = m[5] ? m[5].split('.') : []; + this.format(); +} + +SemVer.prototype.format = function() { + this.version = this.major + '.' + this.minor + '.' + this.patch; + if (this.prerelease.length) + this.version += '-' + this.prerelease.join('.'); + return this.version; +}; + +SemVer.prototype.inspect = function() { + return ''; +}; + +SemVer.prototype.toString = function() { + return this.version; +}; + +SemVer.prototype.compare = function(other) { + debug('SemVer.compare', this.version, this.loose, other); + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + return this.compareMain(other) || this.comparePre(other); +}; + +SemVer.prototype.compareMain = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch); +}; + +SemVer.prototype.comparePre = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.loose); + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) + return -1; + else if (!this.prerelease.length && other.prerelease.length) + return 1; + else if (!this.prerelease.length && !other.prerelease.length) + return 0; + + var i = 0; + do { + var a = this.prerelease[i]; + var b = other.prerelease[i]; + debug('prerelease compare', i, a, b); + if (a === undefined && b === undefined) + return 0; + else if (b === undefined) + return 1; + else if (a === undefined) + return -1; + else if (a === b) + continue; + else + return compareIdentifiers(a, b); + } while (++i); +}; + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function(release) { + switch (release) { + case 'premajor': + this.inc('major'); + this.inc('pre'); + break; + case 'preminor': + this.inc('minor'); + this.inc('pre'); + break; + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch'); + this.inc('pre'); + break; + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) + this.inc('patch'); + this.inc('pre'); + break; + case 'major': + this.major++; + this.minor = -1; + case 'minor': + this.minor++; + this.patch = 0; + this.prerelease = []; + break; + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) + this.patch++; + this.prerelease = []; + break; + // This probably shouldn't be used publically. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) + this.prerelease = [0]; + else { + var i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) // didn't increment anything + this.prerelease.push(0); + } + break; + + default: + throw new Error('invalid increment argument: ' + release); + } + this.format(); + return this; +}; + +exports.inc = inc; +function inc(version, release, loose) { + try { + return new SemVer(version, loose).inc(release).version; + } catch (er) { + return null; + } +} + +exports.compareIdentifiers = compareIdentifiers; + +var numeric = /^[0-9]+$/; +function compareIdentifiers(a, b) { + var anum = numeric.test(a); + var bnum = numeric.test(b); + + if (anum && bnum) { + a = +a; + b = +b; + } + + return (anum && !bnum) ? -1 : + (bnum && !anum) ? 1 : + a < b ? -1 : + a > b ? 1 : + 0; +} + +exports.rcompareIdentifiers = rcompareIdentifiers; +function rcompareIdentifiers(a, b) { + return compareIdentifiers(b, a); +} + +exports.compare = compare; +function compare(a, b, loose) { + return new SemVer(a, loose).compare(b); +} + +exports.compareLoose = compareLoose; +function compareLoose(a, b) { + return compare(a, b, true); +} + +exports.rcompare = rcompare; +function rcompare(a, b, loose) { + return compare(b, a, loose); +} + +exports.sort = sort; +function sort(list, loose) { + return list.sort(function(a, b) { + return exports.compare(a, b, loose); + }); +} + +exports.rsort = rsort; +function rsort(list, loose) { + return list.sort(function(a, b) { + return exports.rcompare(a, b, loose); + }); +} + +exports.gt = gt; +function gt(a, b, loose) { + return compare(a, b, loose) > 0; +} + +exports.lt = lt; +function lt(a, b, loose) { + return compare(a, b, loose) < 0; +} + +exports.eq = eq; +function eq(a, b, loose) { + return compare(a, b, loose) === 0; +} + +exports.neq = neq; +function neq(a, b, loose) { + return compare(a, b, loose) !== 0; +} + +exports.gte = gte; +function gte(a, b, loose) { + return compare(a, b, loose) >= 0; +} + +exports.lte = lte; +function lte(a, b, loose) { + return compare(a, b, loose) <= 0; +} + +exports.cmp = cmp; +function cmp(a, op, b, loose) { + var ret; + switch (op) { + case '===': ret = a === b; break; + case '!==': ret = a !== b; break; + case '': case '=': case '==': ret = eq(a, b, loose); break; + case '!=': ret = neq(a, b, loose); break; + case '>': ret = gt(a, b, loose); break; + case '>=': ret = gte(a, b, loose); break; + case '<': ret = lt(a, b, loose); break; + case '<=': ret = lte(a, b, loose); break; + default: throw new TypeError('Invalid operator: ' + op); + } + return ret; +} + +exports.Comparator = Comparator; +function Comparator(comp, loose) { + if (comp instanceof Comparator) { + if (comp.loose === loose) + return comp; + else + comp = comp.value; + } + + if (!(this instanceof Comparator)) + return new Comparator(comp, loose); + + debug('comparator', comp, loose); + this.loose = loose; + this.parse(comp); + + if (this.semver === ANY) + this.value = ''; + else + this.value = this.operator + this.semver.version; +} + +var ANY = {}; +Comparator.prototype.parse = function(comp) { + var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var m = comp.match(r); + + if (!m) + throw new TypeError('Invalid comparator: ' + comp); + + this.operator = m[1]; + if (this.operator === '=') + this.operator = ''; + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) + this.semver = ANY; + else { + this.semver = new SemVer(m[2], this.loose); + + // <1.2.3-rc DOES allow 1.2.3-beta (has prerelease) + // >=1.2.3 DOES NOT allow 1.2.3-beta + // <=1.2.3 DOES allow 1.2.3-beta + // However, <1.2.3 does NOT allow 1.2.3-beta, + // even though `1.2.3-beta < 1.2.3` + // The assumption is that the 1.2.3 version has something you + // *don't* want, so we push the prerelease down to the minimum. + if (this.operator === '<' && !this.semver.prerelease.length) { + this.semver.prerelease = ['0']; + this.semver.format(); } - return ret - }) + } +}; + +Comparator.prototype.inspect = function() { + return ''; +}; + +Comparator.prototype.toString = function() { + return this.value; +}; + +Comparator.prototype.test = function(version) { + debug('Comparator.test', version, this.loose); + return (this.semver === ANY) ? true : + cmp(version, this.operator, this.semver, this.loose); +}; + + +exports.Range = Range; +function Range(range, loose) { + if ((range instanceof Range) && range.loose === loose) + return range; + + if (!(this instanceof Range)) + return new Range(range, loose); + + this.loose = loose; + + // First, split based on boolean or || + this.raw = range; + this.set = range.split(/\s*\|\|\s*/).map(function(range) { + return this.parseRange(range.trim()); + }, this).filter(function(c) { + // throw out any that are not relevant for whatever reason + return c.length; + }); + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range); + } + + this.format(); +} + +Range.prototype.inspect = function() { + return ''; +}; + +Range.prototype.format = function() { + this.range = this.set.map(function(comps) { + return comps.join(' ').trim(); + }).join('||').trim(); + return this.range; +}; + +Range.prototype.toString = function() { + return this.range; +}; + +Range.prototype.parseRange = function(range) { + var loose = this.loose; + range = range.trim(); + debug('range', range, loose); + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; + range = range.replace(hr, hyphenReplace); + debug('hyphen replace', range); + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace); + debug('comparator trim', range, re[COMPARATORTRIM]); + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace); + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace); + + // normalize spaces + range = range.split(/\s+/).join(' '); + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var set = range.split(' ').map(function(comp) { + return parseComparator(comp, loose); + }).join(' ').split(/\s+/); + if (this.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function(comp) { + return !!comp.match(compRe); + }); + } + set = set.map(function(comp) { + return new Comparator(comp, loose); + }); + + return set; +}; + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators; +function toComparators(range, loose) { + return new Range(range, loose).set.map(function(comp) { + return comp.map(function(c) { + return c.value; + }).join(' ').trim().split(' '); + }); +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator(comp, loose) { + debug('comp', comp); + comp = replaceCarets(comp, loose); + debug('caret', comp); + comp = replaceTildes(comp, loose); + debug('tildes', comp); + comp = replaceXRanges(comp, loose); + debug('xrange', comp); + comp = replaceStars(comp, loose); + debug('stars', comp); + return comp; +} + +function isX(id) { + return !id || id.toLowerCase() === 'x' || id === '*'; } // ~, ~> --> * (any, kinda silly) @@ -161,146 +718,333 @@ function replaceXRange (version) { // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceSpermies (version) { - return version.trim().replace(expressions.parseSpermy, - function (v, gtlt, M, m, p, t) { - if (gtlt) throw new Error( - "Using '"+gtlt+"' with ~ makes no sense. Don't do it.") - - if (!M || M.toLowerCase() === "x") { - return "" - } - // ~1 == >=1.0.0- <2.0.0- - if (!m || m.toLowerCase() === "x") { - return ">="+M+".0.0- <"+(+M+1)+".0.0-" - } - // ~1.2 == >=1.2.0- <1.3.0- - if (!p || p.toLowerCase() === "x") { - return ">="+M+"."+m+".0- <"+M+"."+(+m+1)+".0-" +function replaceTildes(comp, loose) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceTilde(comp, loose); + }).join(' '); +} + +function replaceTilde(comp, loose) { + var r = loose ? re[TILDELOOSE] : re[TILDE]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0'; + else if (isX(p)) + // ~1.2 == >=1.2.0- <1.3.0- + ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0'; + else if (pr) { + debug('replaceTilde pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0-0'; + } else + // ~1.2.3 == >=1.2.3-0 <1.3.0-0 + ret = '>=' + M + '.' + m + '.' + p + '-0' + + ' <' + M + '.' + (+m + 1) + '.0-0'; + + debug('tilde return', ret); + return ret; + }); +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets(comp, loose) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceCaret(comp, loose); + }).join(' '); +} + +function replaceCaret(comp, loose) { + var r = loose ? re[CARETLOOSE] : re[CARET]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0'; + else if (isX(p)) { + if (M === '0') + ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0'; + else + ret = '>=' + M + '.' + m + '.0-0 <' + (+M + 1) + '.0.0-0'; + } else if (pr) { + debug('replaceCaret pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + if (M === '0') { + if (m === '0') + ret = '=' + M + '.' + m + '.' + p + pr; + else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0-0'; + } else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + (+M + 1) + '.0.0-0'; + } else { + if (M === '0') { + if (m === '0') + ret = '=' + M + '.' + m + '.' + p; + else + ret = '>=' + M + '.' + m + '.' + p + '-0' + + ' <' + M + '.' + (+m + 1) + '.0-0'; + } else + ret = '>=' + M + '.' + m + '.' + p + '-0' + + ' <' + (+M + 1) + '.0.0-0'; } - // ~1.2.3 == >=1.2.3- <1.3.0- - t = t || "-" - return ">="+M+"."+m+"."+p+t+" <"+M+"."+(+m+1)+".0-" - }) -} - -function validRange (range) { - range = replaceStars(range) - var c = toComparators(range) - return (c.length === 0) - ? null - : c.map(function (c) { return c.join(" ") }).join("||") -} - -// returns the highest satisfying version in the list, or undefined -function maxSatisfying (versions, range) { - return versions - .filter(function (v) { return satisfies(v, range) }) - .sort(compare) - .pop() -} -function satisfies (version, range) { - version = valid(version) - if (!version) return false - range = toComparators(range) - for (var i = 0, l = range.length ; i < l ; i ++) { - var ok = false - for (var j = 0, ll = range[i].length ; j < ll ; j ++) { - var r = range[i][j] - , gtlt = r.charAt(0) === ">" ? gt - : r.charAt(0) === "<" ? lt - : false - , eq = r.charAt(!!gtlt) === "=" - , sub = (!!eq) + (!!gtlt) - if (!gtlt) eq = true - r = r.substr(sub) - r = (r === "") ? r : valid(r) - ok = (r === "") || (eq && r === version) || (gtlt && gtlt(version, r)) - if (!ok) break + + debug('caret return', ret); + return ret; + }); +} + +function replaceXRanges(comp, loose) { + debug('replaceXRanges', comp, loose); + return comp.split(/\s+/).map(function(comp) { + return replaceXRange(comp, loose); + }).join(' '); +} + +function replaceXRange(comp, loose) { + comp = comp.trim(); + var r = loose ? re[XRANGELOOSE] : re[XRANGE]; + return comp.replace(r, function(ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr); + var xM = isX(M); + var xm = xM || isX(m); + var xp = xm || isX(p); + var anyX = xp; + + if (gtlt === '=' && anyX) + gtlt = ''; + + if (gtlt && anyX) { + // replace X with 0, and then append the -0 min-prerelease + if (xM) + M = 0; + if (xm) + m = 0; + if (xp) + p = 0; + + if (gtlt === '>') { + // >1 => >=2.0.0-0 + // >1.2 => >=1.3.0-0 + // >1.2.3 => >= 1.2.4-0 + gtlt = '>='; + if (xM) { + // no change + } else if (xm) { + M = +M + 1; + m = 0; + p = 0; + } else if (xp) { + m = +m + 1; + p = 0; + } + } + + + ret = gtlt + M + '.' + m + '.' + p + '-0'; + } else if (xM) { + // allow any + ret = '*'; + } else if (xm) { + // append '-0' onto the version, otherwise + // '1.x.x' matches '2.0.0-beta', since the tag + // *lowers* the version value + ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0'; + } else if (xp) { + ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0'; } - if (ok) return true + + debug('xRange return', ret); + + return ret; + }); +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars(comp, loose) { + debug('replaceStars', comp, loose); + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], ''); +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0-0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0-0 <3.5.0-0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0-0 <3.5.0-0 +function hyphenReplace($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + + if (isX(fM)) + from = ''; + else if (isX(fm)) + from = '>=' + fM + '.0.0-0'; + else if (isX(fp)) + from = '>=' + fM + '.' + fm + '.0-0'; + else + from = '>=' + from; + + if (isX(tM)) + to = ''; + else if (isX(tm)) + to = '<' + (+tM + 1) + '.0.0-0'; + else if (isX(tp)) + to = '<' + tM + '.' + (+tm + 1) + '.0-0'; + else if (tpr) + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; + else + to = '<=' + to; + + return (from + ' ' + to).trim(); +} + + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function(version) { + if (!version) + return false; + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version)) + return true; + } + return false; +}; + +function testSet(set, version) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) + return false; } - return false -} - -// return v1 > v2 ? 1 : -1 -function compare (v1, v2) { - var g = gt(v1, v2) - return g === null ? 0 : g ? 1 : -1 -} - -function rcompare (v1, v2) { - return compare(v2, v1) -} - -function lt (v1, v2) { return gt(v2, v1) } -function gte (v1, v2) { return !lt(v1, v2) } -function lte (v1, v2) { return !gt(v1, v2) } -function eq (v1, v2) { return gt(v1, v2) === null } -function neq (v1, v2) { return gt(v1, v2) !== null } -function cmp (v1, c, v2) { - switch (c) { - case ">": return gt(v1, v2) - case "<": return lt(v1, v2) - case ">=": return gte(v1, v2) - case "<=": return lte(v1, v2) - case "==": return eq(v1, v2) - case "!=": return neq(v1, v2) - case "===": return v1 === v2 - case "!==": return v1 !== v2 - default: throw new Error("Y U NO USE VALID COMPARATOR!? "+c) + return true; +} + +exports.satisfies = satisfies; +function satisfies(version, range, loose) { + try { + range = new Range(range, loose); + } catch (er) { + return false; + } + return range.test(version); +} + +exports.maxSatisfying = maxSatisfying; +function maxSatisfying(versions, range, loose) { + return versions.filter(function(version) { + return satisfies(version, range, loose); + }).sort(function(a, b) { + return rcompare(a, b, loose); + })[0] || null; +} + +exports.validRange = validRange; +function validRange(range, loose) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, loose).range || '*'; + } catch (er) { + return null; } } -// return v1 > v2 -function num (v) { - return v === undefined ? -1 : parseInt((v||"0").replace(/[^0-9]+/g, ''), 10) +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr; +function ltr(version, range, loose) { + return outside(version, range, '<', loose); +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr; +function gtr(version, range, loose) { + return outside(version, range, '>', loose); } -function gt (v1, v2) { - v1 = exports.parse(v1) - v2 = exports.parse(v2) - if (!v1 || !v2) return false - for (var i = 1; i < 5; i ++) { - v1[i] = num(v1[i]) - v2[i] = num(v2[i]) - if (v1[i] > v2[i]) return true - else if (v1[i] !== v2[i]) return false +exports.outside = outside; +function outside(version, range, hilo, loose) { + version = new SemVer(version, loose); + range = new Range(range, loose); + + var gtfn, ltefn, ltfn, comp, ecomp; + switch (hilo) { + case '>': + gtfn = gt; + ltefn = lte; + ltfn = lt; + comp = '>'; + ecomp = '>='; + break; + case '<': + gtfn = lt; + ltefn = gte; + ltfn = gt; + comp = '<'; + ecomp = '<='; + break; + default: + throw new TypeError('Must provide a hilo val of "<" or ">"'); } - // no tag is > than any tag, or use lexicographical order. - var tag1 = v1[5] || "" - , tag2 = v2[5] || "" - - // kludge: null means they were equal. falsey, and detectable. - // embarrassingly overclever, though, I know. - return tag1 === tag2 ? null - : !tag1 ? true - : !tag2 ? false - : tag1 > tag2 -} - -function inc (version, release) { - version = exports.parse(version) - if (!version) return null - - var parsedIndexLookup = - { 'major': 1 - , 'minor': 2 - , 'patch': 3 - , 'build': 4 } - var incIndex = parsedIndexLookup[release] - if (incIndex === undefined) return null - - var current = num(version[incIndex]) - version[incIndex] = current === -1 ? 1 : current + 1 - - for (var i = incIndex + 1; i < 5; i ++) { - if (num(version[i]) !== -1) version[i] = "0" + + // If it satisifes the range it is not outside + if (satisfies(version, range, loose)) { + return false; } - if (version[4]) version[4] = "-" + version[4] - version[5] = "" + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i]; + + var high = null; + var low = null; - return stringify(version) + comparators.forEach(function(comparator) { + high = high || comparator; + low = low || comparator; + if (gtfn(comparator.semver, high.semver, loose)) { + high = comparator; + } else if (ltfn(comparator.semver, low.semver, loose)) { + low = comparator; + } + }); + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false; + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false; + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false; + } + } + return true; } -})(typeof exports === "object" ? exports : semver = {}) + +// Use the define() function if we're in AMD land +if (typeof define === 'function' && define.amd) + define(exports); diff --git a/node_modules/restify/node_modules/semver/test.js b/node_modules/restify/node_modules/semver/test.js deleted file mode 100644 index 475b77b..0000000 --- a/node_modules/restify/node_modules/semver/test.js +++ /dev/null @@ -1,436 +0,0 @@ -var tap = require("tap") - , test = tap.test - , semver = require("./semver.js") - , eq = semver.eq - , gt = semver.gt - , lt = semver.lt - , neq = semver.neq - , cmp = semver.cmp - , gte = semver.gte - , lte = semver.lte - , satisfies = semver.satisfies - , validRange = semver.validRange - , inc = semver.inc - , replaceStars = semver.replaceStars - , toComparators = semver.toComparators - -tap.plan(8) - -test("\ncomparison tests", function (t) { -// [version1, version2] -// version1 should be greater than version2 -; [ ["0.0.0", "0.0.0foo"] - , ["0.0.1", "0.0.0"] - , ["1.0.0", "0.9.9"] - , ["0.10.0", "0.9.0"] - , ["0.99.0", "0.10.0"] - , ["2.0.0", "1.2.3"] - , ["v0.0.0", "0.0.0foo"] - , ["v0.0.1", "0.0.0"] - , ["v1.0.0", "0.9.9"] - , ["v0.10.0", "0.9.0"] - , ["v0.99.0", "0.10.0"] - , ["v2.0.0", "1.2.3"] - , ["0.0.0", "v0.0.0foo"] - , ["0.0.1", "v0.0.0"] - , ["1.0.0", "v0.9.9"] - , ["0.10.0", "v0.9.0"] - , ["0.99.0", "v0.10.0"] - , ["2.0.0", "v1.2.3"] - , ["1.2.3", "1.2.3-asdf"] - , ["1.2.3-4", "1.2.3"] - , ["1.2.3-4-foo", "1.2.3"] - , ["1.2.3-5", "1.2.3-5-foo"] - , ["1.2.3-5", "1.2.3-4"] - , ["1.2.3-5-foo", "1.2.3-5-Foo"] - , ["3.0.0", "2.7.2+"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')") - t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')") - t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')") - t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')") - t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v1, "==", v1), "cmp('"+v1+"' == '"+v1+"')") - t.ok(cmp(v0, ">=", v1), "cmp('"+v0+"' >= '"+v1+"')") - t.ok(cmp(v1, "<=", v0), "cmp('"+v1+"' <= '"+v0+"')") - t.ok(cmp(v0, "!=", v1), "cmp('"+v0+"' != '"+v1+"')") - }) - t.end() -}) - -test("\nequality tests", function (t) { -// [version1, version2] -// version1 should be equivalent to version2 -; [ ["1.2.3", "v1.2.3"] - , ["1.2.3", "=1.2.3"] - , ["1.2.3", "v 1.2.3"] - , ["1.2.3", "= 1.2.3"] - , ["1.2.3", " v1.2.3"] - , ["1.2.3", " =1.2.3"] - , ["1.2.3", " v 1.2.3"] - , ["1.2.3", " = 1.2.3"] - , ["1.2.3-0", "v1.2.3-0"] - , ["1.2.3-0", "=1.2.3-0"] - , ["1.2.3-0", "v 1.2.3-0"] - , ["1.2.3-0", "= 1.2.3-0"] - , ["1.2.3-0", " v1.2.3-0"] - , ["1.2.3-0", " =1.2.3-0"] - , ["1.2.3-0", " v 1.2.3-0"] - , ["1.2.3-0", " = 1.2.3-0"] - , ["1.2.3-01", "v1.2.3-1"] - , ["1.2.3-01", "=1.2.3-1"] - , ["1.2.3-01", "v 1.2.3-1"] - , ["1.2.3-01", "= 1.2.3-1"] - , ["1.2.3-01", " v1.2.3-1"] - , ["1.2.3-01", " =1.2.3-1"] - , ["1.2.3-01", " v 1.2.3-1"] - , ["1.2.3-01", " = 1.2.3-1"] - , ["1.2.3beta", "v1.2.3beta"] - , ["1.2.3beta", "=1.2.3beta"] - , ["1.2.3beta", "v 1.2.3beta"] - , ["1.2.3beta", "= 1.2.3beta"] - , ["1.2.3beta", " v1.2.3beta"] - , ["1.2.3beta", " =1.2.3beta"] - , ["1.2.3beta", " v 1.2.3beta"] - , ["1.2.3beta", " = 1.2.3beta"] - ].forEach(function (v) { - var v0 = v[0] - , v1 = v[1] - t.ok(eq(v0, v1), "eq('"+v0+"', '"+v1+"')") - t.ok(!neq(v0, v1), "!neq('"+v0+"', '"+v1+"')") - t.ok(cmp(v0, "==", v1), "cmp("+v0+"=="+v1+")") - t.ok(!cmp(v0, "!=", v1), "!cmp("+v0+"!="+v1+")") - t.ok(!cmp(v0, "===", v1), "!cmp("+v0+"==="+v1+")") - t.ok(cmp(v0, "!==", v1), "cmp("+v0+"!=="+v1+")") - t.ok(!gt(v0, v1), "!gt('"+v0+"', '"+v1+"')") - t.ok(gte(v0, v1), "gte('"+v0+"', '"+v1+"')") - t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')") - t.ok(lte(v0, v1), "lte('"+v0+"', '"+v1+"')") - }) - t.end() -}) - - -test("\nrange tests", function (t) { -// [range, version] -// version should be included by range -; [ ["1.0.0 - 2.0.0", "1.2.3"] - , ["1.0.0", "1.0.0"] - , [">=*", "0.2.4"] - , ["", "1.0.0"] - , ["*", "1.2.3"] - , ["*", "v1.2.3-foo"] - , [">=1.0.0", "1.0.0"] - , [">=1.0.0", "1.0.1"] - , [">=1.0.0", "1.1.0"] - , [">1.0.0", "1.0.1"] - , [">1.0.0", "1.1.0"] - , ["<=2.0.0", "2.0.0"] - , ["<=2.0.0", "1.9999.9999"] - , ["<=2.0.0", "0.2.9"] - , ["<2.0.0", "1.9999.9999"] - , ["<2.0.0", "0.2.9"] - , [">= 1.0.0", "1.0.0"] - , [">= 1.0.0", "1.0.1"] - , [">= 1.0.0", "1.1.0"] - , ["> 1.0.0", "1.0.1"] - , ["> 1.0.0", "1.1.0"] - , ["<= 2.0.0", "2.0.0"] - , ["<= 2.0.0", "1.9999.9999"] - , ["<= 2.0.0", "0.2.9"] - , ["< 2.0.0", "1.9999.9999"] - , ["<\t2.0.0", "0.2.9"] - , [">=0.1.97", "v0.1.97"] - , [">=0.1.97", "0.1.97"] - , ["0.1.20 || 1.2.4", "1.2.4"] - , [">=0.2.3 || <0.0.1", "0.0.0"] - , [">=0.2.3 || <0.0.1", "0.2.3"] - , [">=0.2.3 || <0.0.1", "0.2.4"] - , ["||", "1.3.4"] - , ["2.x.x", "2.1.3"] - , ["1.2.x", "1.2.3"] - , ["1.2.x || 2.x", "2.1.3"] - , ["1.2.x || 2.x", "1.2.3"] - , ["x", "1.2.3"] - , ["2.*.*", "2.1.3"] - , ["1.2.*", "1.2.3"] - , ["1.2.* || 2.*", "2.1.3"] - , ["1.2.* || 2.*", "1.2.3"] - , ["*", "1.2.3"] - , ["2", "2.1.2"] - , ["2.3", "2.3.1"] - , ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.4.5"] - , ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0 - , ["~1", "1.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "1.2.3"] - , ["~> 1", "1.2.3"] - , ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0 - , ["~ 1.0", "1.0.2"] - , ["~ 1.0.3", "1.0.12"] - , [">=1", "1.0.0"] - , [">= 1", "1.0.0"] - , ["<1.2", "1.1.1"] - , ["< 1.2", "1.1.1"] - , ["1", "1.0.0beta"] - , ["~v0.5.4-pre", "0.5.5"] - , ["~v0.5.4-pre", "0.5.4"] - , ["=0.7.x", "0.7.2"] - , [">=0.7.x", "0.7.2"] - , ["=0.7.x", "0.7.0-asdf"] - , [">=0.7.x", "0.7.0-asdf"] - , ["<=0.7.x", "0.6.2"] - , ["~1.2.1 >=1.2.3", "1.2.3"] - , ["~1.2.1 =1.2.3", "1.2.3"] - , ["~1.2.1 1.2.3", "1.2.3"] - , ['~1.2.1 >=1.2.3 1.2.3', '1.2.3'] - , ['~1.2.1 1.2.3 >=1.2.3', '1.2.3'] - , ['~1.2.1 1.2.3', '1.2.3'] - , ['>=1.2.1 1.2.3', '1.2.3'] - , ['1.2.3 >=1.2.1', '1.2.3'] - , ['>=1.2.3 >=1.2.1', '1.2.3'] - , ['>=1.2.1 >=1.2.3', '1.2.3'] - ].forEach(function (v) { - t.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1]) - }) - t.end() -}) - -test("\nnegative range tests", function (t) { -// [range, version] -// version should not be included by range -; [ ["1.0.0 - 2.0.0", "2.2.3"] - , ["1.0.0", "1.0.1"] - , [">=1.0.0", "0.0.0"] - , [">=1.0.0", "0.0.1"] - , [">=1.0.0", "0.1.0"] - , [">1.0.0", "0.0.1"] - , [">1.0.0", "0.1.0"] - , ["<=2.0.0", "3.0.0"] - , ["<=2.0.0", "2.9999.9999"] - , ["<=2.0.0", "2.2.9"] - , ["<2.0.0", "2.9999.9999"] - , ["<2.0.0", "2.2.9"] - , [">=0.1.97", "v0.1.93"] - , [">=0.1.97", "0.1.93"] - , ["0.1.20 || 1.2.4", "1.2.3"] - , [">=0.2.3 || <0.0.1", "0.0.3"] - , [">=0.2.3 || <0.0.1", "0.2.2"] - , ["2.x.x", "1.1.3"] - , ["2.x.x", "3.1.3"] - , ["1.2.x", "1.3.3"] - , ["1.2.x || 2.x", "3.1.3"] - , ["1.2.x || 2.x", "1.1.3"] - , ["2.*.*", "1.1.3"] - , ["2.*.*", "3.1.3"] - , ["1.2.*", "1.3.3"] - , ["1.2.* || 2.*", "3.1.3"] - , ["1.2.* || 2.*", "1.1.3"] - , ["2", "1.1.2"] - , ["2.3", "2.4.1"] - , ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0 - , ["~2.4", "2.3.9"] - , ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0 - , ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0 - , ["~1", "0.2.3"] // >=1.0.0 <2.0.0 - , ["~>1", "2.2.3"] - , ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0 - , ["<1", "1.0.0"] - , [">=1.2", "1.1.1"] - , ["1", "2.0.0beta"] - , ["~v0.5.4-beta", "0.5.4-alpha"] - , ["<1", "1.0.0beta"] - , ["< 1", "1.0.0beta"] - , ["=0.7.x", "0.8.2"] - , [">=0.7.x", "0.6.2"] - , ["<=0.7.x", "0.7.2"] - ].forEach(function (v) { - t.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1]) - }) - t.end() -}) - -test("\nincrement versions test", function (t) { -// [version, inc, result] -// inc(version, inc) -> result -; [ [ "1.2.3", "major", "2.0.0" ] - , [ "1.2.3", "minor", "1.3.0" ] - , [ "1.2.3", "patch", "1.2.4" ] - , [ "1.2.3", "build", "1.2.3-1" ] - , [ "1.2.3-4", "build", "1.2.3-5" ] - , [ "1.2.3tag", "major", "2.0.0" ] - , [ "1.2.3-tag", "major", "2.0.0" ] - , [ "1.2.3tag", "build", "1.2.3-1" ] - , [ "1.2.3-tag", "build", "1.2.3-1" ] - , [ "1.2.3-4-tag", "build", "1.2.3-5" ] - , [ "1.2.3-4tag", "build", "1.2.3-5" ] - , [ "1.2.3", "fake", null ] - , [ "fake", "major", null ] - ].forEach(function (v) { - t.equal(inc(v[0], v[1]), v[2], "inc("+v[0]+", "+v[1]+") === "+v[2]) - }) - - t.end() -}) - -test("\nreplace stars test", function (t) { -// replace stars with "" -; [ [ "", "" ] - , [ "*", "" ] - , [ "> *", "" ] - , [ "<*", "" ] - , [ " >= *", "" ] - , [ "* || 1.2.3", " || 1.2.3" ] - ].forEach(function (v) { - t.equal(replaceStars(v[0]), v[1], "replaceStars("+v[0]+") === "+v[1]) - }) - - t.end() -}) - -test("\nvalid range test", function (t) { -// [range, result] -// validRange(range) -> result -// translate ranges into their canonical form -; [ ["1.0.0 - 2.0.0", ">=1.0.0 <=2.0.0"] - , ["1.0.0", "1.0.0"] - , [">=*", ""] - , ["", ""] - , ["*", ""] - , ["*", ""] - , [">=1.0.0", ">=1.0.0"] - , [">1.0.0", ">1.0.0"] - , ["<=2.0.0", "<=2.0.0"] - , ["1", ">=1.0.0- <2.0.0-"] - , ["<=2.0.0", "<=2.0.0"] - , ["<=2.0.0", "<=2.0.0"] - , ["<2.0.0", "<2.0.0"] - , ["<2.0.0", "<2.0.0"] - , [">= 1.0.0", ">=1.0.0"] - , [">= 1.0.0", ">=1.0.0"] - , [">= 1.0.0", ">=1.0.0"] - , ["> 1.0.0", ">1.0.0"] - , ["> 1.0.0", ">1.0.0"] - , ["<= 2.0.0", "<=2.0.0"] - , ["<= 2.0.0", "<=2.0.0"] - , ["<= 2.0.0", "<=2.0.0"] - , ["< 2.0.0", "<2.0.0"] - , ["< 2.0.0", "<2.0.0"] - , [">=0.1.97", ">=0.1.97"] - , [">=0.1.97", ">=0.1.97"] - , ["0.1.20 || 1.2.4", "0.1.20||1.2.4"] - , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"] - , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"] - , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"] - , ["||", "||"] - , ["2.x.x", ">=2.0.0- <3.0.0-"] - , ["1.2.x", ">=1.2.0- <1.3.0-"] - , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"] - , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"] - , ["x", ""] - , ["2.*.*", null] - , ["1.2.*", null] - , ["1.2.* || 2.*", null] - , ["1.2.* || 2.*", null] - , ["*", ""] - , ["2", ">=2.0.0- <3.0.0-"] - , ["2.3", ">=2.3.0- <2.4.0-"] - , ["~2.4", ">=2.4.0- <2.5.0-"] - , ["~2.4", ">=2.4.0- <2.5.0-"] - , ["~>3.2.1", ">=3.2.1- <3.3.0-"] - , ["~1", ">=1.0.0- <2.0.0-"] - , ["~>1", ">=1.0.0- <2.0.0-"] - , ["~> 1", ">=1.0.0- <2.0.0-"] - , ["~1.0", ">=1.0.0- <1.1.0-"] - , ["~ 1.0", ">=1.0.0- <1.1.0-"] - , ["<1", "<1.0.0-"] - , ["< 1", "<1.0.0-"] - , [">=1", ">=1.0.0-"] - , [">= 1", ">=1.0.0-"] - , ["<1.2", "<1.2.0-"] - , ["< 1.2", "<1.2.0-"] - , ["1", ">=1.0.0- <2.0.0-"] - ].forEach(function (v) { - t.equal(validRange(v[0]), v[1], "validRange("+v[0]+") === "+v[1]) - }) - - t.end() -}) - -test("\ncomparators test", function (t) { -// [range, comparators] -// turn range into a set of individual comparators -; [ ["1.0.0 - 2.0.0", [[">=1.0.0", "<=2.0.0"]] ] - , ["1.0.0", [["1.0.0"]] ] - , [">=*", [[">=0.0.0-"]] ] - , ["", [[""]]] - , ["*", [[""]] ] - , ["*", [[""]] ] - , [">=1.0.0", [[">=1.0.0"]] ] - , [">=1.0.0", [[">=1.0.0"]] ] - , [">=1.0.0", [[">=1.0.0"]] ] - , [">1.0.0", [[">1.0.0"]] ] - , [">1.0.0", [[">1.0.0"]] ] - , ["<=2.0.0", [["<=2.0.0"]] ] - , ["1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["<=2.0.0", [["<=2.0.0"]] ] - , ["<=2.0.0", [["<=2.0.0"]] ] - , ["<2.0.0", [["<2.0.0"]] ] - , ["<2.0.0", [["<2.0.0"]] ] - , [">= 1.0.0", [[">=1.0.0"]] ] - , [">= 1.0.0", [[">=1.0.0"]] ] - , [">= 1.0.0", [[">=1.0.0"]] ] - , ["> 1.0.0", [[">1.0.0"]] ] - , ["> 1.0.0", [[">1.0.0"]] ] - , ["<= 2.0.0", [["<=2.0.0"]] ] - , ["<= 2.0.0", [["<=2.0.0"]] ] - , ["<= 2.0.0", [["<=2.0.0"]] ] - , ["< 2.0.0", [["<2.0.0"]] ] - , ["<\t2.0.0", [["<2.0.0"]] ] - , [">=0.1.97", [[">=0.1.97"]] ] - , [">=0.1.97", [[">=0.1.97"]] ] - , ["0.1.20 || 1.2.4", [["0.1.20"], ["1.2.4"]] ] - , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ] - , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ] - , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ] - , ["||", [[""], [""]] ] - , ["2.x.x", [[">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.x", [[">=1.2.0-", "<1.3.0-"]] ] - , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["x", [[""]] ] - , ["2.*.*", [[">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.*", [[">=1.2.0-", "<1.3.0-"]] ] - , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ] - , ["*", [[""]] ] - , ["2", [[">=2.0.0-", "<3.0.0-"]] ] - , ["2.3", [[">=2.3.0-", "<2.4.0-"]] ] - , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ] - , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ] - , ["~>3.2.1", [[">=3.2.1-", "<3.3.0-"]] ] - , ["~1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["~>1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["~> 1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["~1.0", [[">=1.0.0-", "<1.1.0-"]] ] - , ["~ 1.0", [[">=1.0.0-", "<1.1.0-"]] ] - , ["~ 1.0.3", [[">=1.0.3-", "<1.1.0-"]] ] - , ["~> 1.0.3", [[">=1.0.3-", "<1.1.0-"]] ] - , ["<1", [["<1.0.0-"]] ] - , ["< 1", [["<1.0.0-"]] ] - , [">=1", [[">=1.0.0-"]] ] - , [">= 1", [[">=1.0.0-"]] ] - , ["<1.2", [["<1.2.0-"]] ] - , ["< 1.2", [["<1.2.0-"]] ] - , ["1", [[">=1.0.0-", "<2.0.0-"]] ] - , ["1 2", [[">=1.0.0-", "<2.0.0-", ">=2.0.0-", "<3.0.0-"]] ] - ].forEach(function (v) { - t.equivalent(toComparators(v[0]), v[1], "toComparators("+v[0]+") === "+JSON.stringify(v[1])) - }) - - t.end() -}) diff --git a/node_modules/restify/node_modules/spdy/.travis.yml b/node_modules/restify/node_modules/spdy/.travis.yml index 6b186f8..8fe40db 100644 --- a/node_modules/restify/node_modules/spdy/.travis.yml +++ b/node_modules/restify/node_modules/spdy/.travis.yml @@ -1,7 +1,8 @@ language: node_js node_js: - - 0.8 - - 0.10 + - "0.8" + - "0.10" + - "0.11" branches: only: - master diff --git a/node_modules/restify/node_modules/spdy/1.json b/node_modules/restify/node_modules/spdy/1.json deleted file mode 100644 index 4fd45f9..0000000 --- a/node_modules/restify/node_modules/spdy/1.json +++ /dev/null @@ -1 +0,0 @@ -{"something":"awesome", "this":"is", "spdy": true } diff --git a/node_modules/restify/node_modules/spdy/README.md b/node_modules/restify/node_modules/spdy/README.md index c43ae16..9e9fc9e 100644 --- a/node_modules/restify/node_modules/spdy/README.md +++ b/node_modules/restify/node_modules/spdy/README.md @@ -5,10 +5,11 @@ With this module you can create [SPDY](http://www.chromium.org/spdy) servers in node.js with natural http module interface and fallback to regular https -(for browsers that doesn't support SPDY yet). +(for browsers that don't support SPDY yet). ## Usage +Server: ```javascript var spdy = require('spdy'), fs = require('fs'); @@ -16,10 +17,13 @@ var spdy = require('spdy'), var options = { key: fs.readFileSync(__dirname + '/keys/spdy-key.pem'), cert: fs.readFileSync(__dirname + '/keys/spdy-cert.pem'), - ca: fs.readFileSync(__dirname + '/keys/spdy-csr.pem'), + ca: fs.readFileSync(__dirname + '/keys/spdy-ca.pem'), - // SPDY-specific options - windowSize: 1024, // Server's window size + // **optional** SPDY-specific options + windowSize: 1024 * 1024, // Server's window size + + // **optional** if true - server will send 3.1 frames on 3.0 *plain* spdy + autoSpdy31: false }; var server = spdy.createServer(options, function(req, res) { @@ -30,6 +34,36 @@ var server = spdy.createServer(options, function(req, res) { server.listen(443); ``` +Client: +```javascript +var spdy = require('spdy'); +var http = require('http'); + +var agent = spdy.createAgent({ + host: 'www.google.com', + port: 443, + + // Optional SPDY options + spdy: { + plain: false or true, + ssl: false or true, + version: 3 // Force SPDY version + } +}); + +http.get({ + host: 'www.google.com', + agent: agent +}, function(response) { + console.log('yikes'); + // Here it goes like with any other node.js HTTP request + // ... + // And once we're done - we may close TCP connection to server + // NOTE: All non-closed requests will die! + agent.close(); +}).end(); +``` + And by popular demand - usage with [express](https://github.com/visionmedia/express): @@ -78,11 +112,12 @@ the client requests it. ```javascript spdy.createServer(options, function(req, res) { var headers = { 'content-type': 'application/javascript' }; - res.push('/main.js', headers, function(err, stream) { - if (err) return; - - stream.end('alert("hello from push stream!");'); + var stream = res.push('/main.js', headers); + stream.on('acknowledge', function() { }); + stream.on('error', function() { + }); + stream.end('alert("hello from push stream!");'); res.end(''); }).listen(443); @@ -100,19 +135,70 @@ will receive two arguments: `err` (if any error is happened) and `stream` (stream object have API compatible with a [net.Socket](http://nodejs.org/docs/latest/api/net.html#net.Socket) ). +Client usage: +```javascript +var agent = spdy.createAgent({ /* ... */ }); +agent.on('push', function(stream) { + stream.on('error', function(err) { + // Handle error + }); + // Read data from stream + // ... + // stream.associated points to associated client-initiated stream +}); +``` + +NOTE: You're responsible for the `stream` object once given it in `.push()` +callback. Hence ignoring `error` events on it might result in uncaught +exceptions and crash your program. + +### Trailing headers + +Server usage: +```javascript +function (req, res) { + // Send trailing headers to client + res.addTrailers({ header1: 'value1', header2: 'value2' }); + + // On client's trailing headers + req.on('trailers', function(headers) { + // ... + }); +} +``` + +Client usage: +```javascript +var req = http.request({ agent: spdyAgent, /* ... */ }).function (res) { + // On server's trailing headers + res.on('trailers', function(headers) { + // ... + }); +}); +req.write('stuff'); +req.addTrailers({ /* ... */ }); +req.end(); +``` + ### Options All options supported by [tls](http://nodejs.org/docs/latest/api/tls.html#tls.createServer) are working with node-spdy. In addition, `maxStreams` options is available. it allows you -controlling [maximum concurrent streams][http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2#TOC-SETTINGS] +controlling [maximum concurrent streams](http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2#TOC-SETTINGS) protocol option (if client will start more streams than that limit, RST_STREAM will be sent for each additional stream). Additional options: -* `plain` - if defined, server will accept only plain (non-encrypted) - connections. +* `plain` - if defined, server will ignore NPN and ALPN data and choose whether + to use spdy or plain http by looking at first data packet. +* `ssl` - if `false` and `options.plain` is `true`, `http.Server` will be used + as a `base` class for created server. +* `maxChunk` - if set and non-falsy, limits number of bytes sent in one DATA + chunk. Setting it to non-zero value is recommended if you care about + interleaving of outgoing data from multiple different streams. + (defaults to 8192) #### Contributors @@ -128,7 +214,7 @@ Additional options: This software is licensed under the MIT License. -Copyright Fedor Indutny, 2012. +Copyright Fedor Indutny, 2014. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/node_modules/restify/node_modules/spdy/lib/spdy.js b/node_modules/restify/node_modules/spdy/lib/spdy.js index 3b00053..a1ac77c 100644 --- a/node_modules/restify/node_modules/spdy/lib/spdy.js +++ b/node_modules/restify/node_modules/spdy/lib/spdy.js @@ -4,19 +4,7 @@ var spdy = exports; spdy.utils = require('./spdy/utils'); // Export parser&framer -spdy.protocol = {}; - -try { - spdy.protocol.generic = require('./spdy/protocol/generic.node'); -} catch (e) { - spdy.protocol.generic = require('./spdy/protocol/generic.js'); -} - -// Supported SPDY versions -spdy.protocol[2] = require('./spdy/protocol/v2'); -spdy.protocol[3] = require('./spdy/protocol/v3'); - -spdy.parser = require('./spdy/parser'); +spdy.protocol = require('./spdy/protocol'); // Export ServerResponse spdy.response = require('./spdy/response'); @@ -27,6 +15,15 @@ spdy.scheduler = require('./spdy/scheduler'); // Export ZlibPool spdy.zlibpool = require('./spdy/zlib-pool'); +// Export Connection and Stream +spdy.Stream = require('./spdy/stream').Stream; +spdy.Connection = require('./spdy/connection').Connection; + // Export server spdy.server = require('./spdy/server'); +spdy.Server = spdy.server.Server; spdy.createServer = spdy.server.create; + +// Export client +spdy.Agent = require('./spdy/client').Agent; +spdy.createAgent = require('./spdy/client').create; diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/parser.js b/node_modules/restify/node_modules/spdy/lib/spdy/parser.js deleted file mode 100644 index b65ede2..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/parser.js +++ /dev/null @@ -1,235 +0,0 @@ -var parser = exports; - -var spdy = require('../spdy'), - util = require('util'), - stream = require('stream'), - Buffer = require('buffer').Buffer; - -var legacy = !stream.Duplex; - -if (legacy) { - var DuplexStream = stream; -} else { - var DuplexStream = stream.Duplex; -} - -// -// ### function Parser (connection) -// #### @connection {spdy.Connection} connection -// SPDY protocol frames parser's @constructor -// -function Parser(connection) { - DuplexStream.call(this); - - this.drained = true; - this.paused = false; - this.buffer = []; - this.buffered = 0; - this.waiting = 8; - - this.state = { type: 'frame-head' }; - this.socket = connection.socket; - this.connection = connection; - this.framer = null; - - this.connection = connection; - - if (legacy) { - this.readable = this.writable = true; - } -} -util.inherits(Parser, DuplexStream); - -// -// ### function create (connection) -// #### @connection {spdy.Connection} connection -// @constructor wrapper -// -parser.create = function create(connection) { - return new Parser(connection); -}; - -// -// ### function destroy () -// Just a stub. -// -Parser.prototype.destroy = function destroy() { -}; - -// -// ### function _write (data, encoding, cb) -// #### @data {Buffer} chunk of data -// #### @encoding {Null} encoding -// #### @cb {Function} callback -// Writes or buffers data to parser -// -Parser.prototype._write = function write(data, encoding, cb) { - // Legacy compatibility - if (!cb) cb = function() {}; - - if (data !== undefined) { - // Buffer data - this.buffer.push(data); - this.buffered += data.length; - } - - // Notify caller about state (for piping) - if (this.paused) return false; - - // We shall not do anything until we get all expected data - if (this.buffered < this.waiting) return cb(); - - // Mark parser as not drained - if (data !== undefined) this.drained = false; - - var self = this, - buffer = new Buffer(this.waiting), - sliced = 0, - offset = 0; - - while (this.waiting > offset && sliced < this.buffer.length) { - var chunk = this.buffer[sliced++], - overmatched = false; - - // Copy chunk into `buffer` - if (chunk.length > this.waiting - offset) { - chunk.copy(buffer, offset, 0, this.waiting - offset); - - this.buffer[--sliced] = chunk.slice(this.waiting - offset); - this.buffered += this.buffer[sliced].length; - - overmatched = true; - } else { - chunk.copy(buffer, offset); - } - - // Move offset and decrease amount of buffered data - offset += chunk.length; - this.buffered -= chunk.length; - - if (overmatched) break; - } - - // Remove used buffers - this.buffer = this.buffer.slice(sliced); - - // Executed parser for buffered data - this.paused = true; - this.execute(this.state, buffer, function (err, waiting) { - // And unpause once execution finished - self.paused = false; - - // Propagate errors - if (err) { - cb(); - return self.emit('error', err); - } - - // Set new `waiting` - self.waiting = waiting; - - if (self.waiting <= self.buffered) { - self._write(undefined, null, cb); - } else { - process.nextTick(function() { - if (self.drained) return; - - // Mark parser as drained - self.drained = true; - self.emit('drain'); - }); - - cb(); - } - }); -}; - -if (legacy) { - // - // ### function write (data, encoding, cb) - // #### @data {Buffer} chunk of data - // #### @encoding {Null} encoding - // #### @cb {Function} callback - // Legacy method - // - Parser.prototype.write = Parser.prototype._write; - - // - // ### function end () - // Stream's end() implementation - // - Parser.prototype.end = function end() { - this.emit('end'); - }; -} - -// -// ### function createFramer (version) -// #### @version {Number} Protocol version, either 2 or 3 -// Sets framer instance on Parser's instance -// -Parser.prototype.createFramer = function createFramer(version) { - if (spdy.protocol[version]) { - this.emit('version', version); - - this.framer = new spdy.protocol[version].Framer( - spdy.utils.zwrap(this.connection._deflate), - spdy.utils.zwrap(this.connection._inflate) - ); - - // Propagate framer to connection - this.connection._framer = this.framer; - this.emit('framer', this.framer); - } else { - this.emit( - 'error', - new Error('Unknown protocol version requested: ' + version) - ); - } -}; - -// -// ### function execute (state, data, callback) -// #### @state {Object} Parser's state -// #### @data {Buffer} Incoming data -// #### @callback {Function} continuation callback -// Parse buffered data -// -Parser.prototype.execute = function execute(state, data, callback) { - if (state.type === 'frame-head') { - var header = state.header = spdy.protocol.generic.parseHeader(data); - - // Lazily create framer - if (!this.framer && header.control) { - this.createFramer(header.version); - } - - state.type = 'frame-body'; - callback(null, header.length); - } else if (state.type === 'frame-body') { - var self = this; - - // Data frame - if (!state.header.control) { - return onFrame(null, { - type: 'DATA', - id: state.header.id, - fin: (state.header.flags & 0x01) === 0x01, - compressed: (state.header.flags & 0x02) === 0x02, - data: data - }); - } else { - // Control frame - this.framer.execute(state.header, data, onFrame); - } - - function onFrame(err, frame) { - if (err) return callback(err); - - self.emit('frame', frame); - - state.type = 'frame-head'; - callback(null, 8); - }; - } -}; diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/generic.js b/node_modules/restify/node_modules/spdy/lib/spdy/protocol/generic.js deleted file mode 100644 index 965bd5e..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/generic.js +++ /dev/null @@ -1,24 +0,0 @@ -// -// ### function parseHeader (data) -// ### @data {Buffer} incoming data -// Returns parsed SPDY frame header -// -exports.parseHeader = function parseHeader(data) { - var header = { - control: (data.readUInt8(0) & 0x80) === 0x80 ? true : false, - version: null, - type: null, - id: null, - flags: data.readUInt8(4), - length: data.readUInt32BE(4) & 0x00ffffff - }; - - if (header.control) { - header.version = data.readUInt16BE(0) & 0x7fff; - header.type = data.readUInt16BE(2); - } else { - header.id = data.readUInt32BE(0) & 0x7fffffff; - } - - return header; -}; diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/dictionary.js b/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/dictionary.js deleted file mode 100644 index 36bfb65..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/dictionary.js +++ /dev/null @@ -1,15 +0,0 @@ -exports.dictionary = new Buffer([ - 'optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-', - 'languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi', - 'f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser', - '-agent10010120020120220320420520630030130230330430530630740040140240340440', - '5406407408409410411412413414415416417500501502503504505accept-rangesageeta', - 'glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic', - 'ateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran', - 'sfer-encodingupgradeviawarningcontent-languagecontent-lengthcontent-locati', - 'oncontent-md5content-rangecontent-typeetagexpireslast-modifiedset-cookieMo', - 'ndayTuesdayWednesdayThursdayFridaySaturdaySundayJanFebMarAprMayJunJulAugSe', - 'pOctNovDecchunkedtext/htmlimage/pngimage/jpgimage/gifapplication/xmlapplic', - 'ation/xhtmltext/plainpublicmax-agecharset=iso-8859-1utf-8gzipdeflateHTTP/1', - '.1statusversionurl\x00' -].join('')); diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/framer.js b/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/framer.js deleted file mode 100644 index b162dff..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/framer.js +++ /dev/null @@ -1,286 +0,0 @@ -var framer = exports; - -var spdy = require('../../../spdy'), - Buffer = require('buffer').Buffer, - protocol = require('./'); - -// -// ### function Framer (deflate, inflate) -// #### @deflate {zlib.Deflate} Deflate stream -// #### @inflate {zlib.Inflate} Inflate stream -// Framer constructor -// -function Framer(deflate, inflate) { - this.version = 2; - this.deflate = deflate; - this.inflate = inflate; -} -exports.Framer = Framer; - - -// -// ### function execute (header, body, callback) -// #### @header {Object} Frame headers -// #### @body {Buffer} Frame's body -// #### @callback {Function} Continuation callback -// Parse frame (decompress data and create streams) -// -Framer.prototype.execute = function execute(header, body, callback) { - // SYN_STREAM or SYN_REPLY - if (header.type === 0x01 || header.type === 0x02) { - var frame = protocol.parseSynHead(header.type, header.flags, body); - - body = body.slice(frame._offset); - - this.inflate(body, function(err, chunks, length) { - if (err) return callback(err); - - var pairs = new Buffer(length); - for (var i = 0, offset = 0; i < chunks.length; i++) { - chunks[i].copy(pairs, offset); - offset += chunks[i].length; - } - - frame.headers = protocol.parseHeaders(pairs); - frame.url = frame.headers.url || ''; - - callback(null, frame); - }); - // RST_STREAM - } else if (header.type === 0x03) { - callback(null, protocol.parseRst(body)); - // SETTINGS - } else if (header.type === 0x04) { - callback(null, { type: 'SETTINGS' }); - } else if (header.type === 0x05) { - callback(null, { type: 'NOOP' }); - // PING - } else if (header.type === 0x06) { - callback(null, { type: 'PING', pingId: body }); - // GOAWAY - } else if (header.type === 0x07) { - callback(null, protocol.parseGoaway(body)); - } else { - callback(null, { type: 'unknown: ' + header.type, body: body }); - } -}; - -// -// internal, converts object into spdy dictionary -// -function headersToDict(headers, preprocess) { - function stringify(value) { - if (value !== undefined) { - if (Array.isArray(value)) { - return value.join('\x00'); - } else if (typeof value === 'string') { - return value; - } else { - return value.toString(); - } - } else { - return ''; - } - } - - // Lower case of all headers keys - var loweredHeaders = {}; - Object.keys(headers || {}).map(function(key) { - loweredHeaders[key.toLowerCase()] = headers[key]; - }); - - // Allow outer code to add custom headers or remove something - if (preprocess) preprocess(loweredHeaders); - - // Transform object into kv pairs - var len = 2, - pairs = Object.keys(loweredHeaders).filter(function(key) { - var lkey = key.toLowerCase(); - return lkey !== 'connection' && lkey !== 'keep-alive' && - lkey !== 'proxy-connection' && lkey !== 'transfer-encoding'; - }).map(function(key) { - var klen = Buffer.byteLength(key), - value = stringify(loweredHeaders[key]), - vlen = Buffer.byteLength(value); - - len += 4 + klen + vlen; - return [klen, key, vlen, value]; - }), - result = new Buffer(len); - - result.writeUInt16BE(pairs.length, 0, true); - - var offset = 2; - pairs.forEach(function(pair) { - // Write key length - result.writeUInt16BE(pair[0], offset, true); - // Write key - result.write(pair[1], offset + 2); - - offset += pair[0] + 2; - - // Write value length - result.writeUInt16BE(pair[2], offset, true); - // Write value - result.write(pair[3], offset + 2); - - offset += pair[2] + 2; - }); - - return result; -}; - -Framer.prototype._synFrame = function _synFrame(type, id, assoc, priority, dict, - callback) { - // Compress headers - this.deflate(dict, function (err, chunks, size) { - if (err) return callback(err); - - var offset = type === 'SYN_STREAM' ? 18 : 14, - total = (type === 'SYN_STREAM' ? 10 : 6) + size, - frame = new Buffer(offset + size);; - - frame.writeUInt16BE(0x8002, 0, true); // Control + Version - frame.writeUInt16BE(type === 'SYN_STREAM' ? 1 : 2, 2, true); // type - frame.writeUInt32BE(total & 0x00ffffff, 4, true); // No flag support - frame.writeUInt32BE(id & 0x7fffffff, 8, true); // Stream-ID - - if (type === 'SYN_STREAM') { - frame[4] = 2; - frame.writeUInt32BE(assoc & 0x7fffffff, 12, true); // Stream-ID - } - - frame.writeUInt8(priority & 0x3, 16, true); // Priority - - for (var i = 0; i < chunks.length; i++) { - chunks[i].copy(frame, offset); - offset += chunks[i].length; - } - - callback(null, frame); - }); -}; - -// -// ### function replyFrame (id, code, reason, headers, callback) -// #### @id {Number} Stream ID -// #### @code {Number} HTTP Status Code -// #### @reason {String} (optional) -// #### @headers {Object|Array} (optional) HTTP headers -// #### @callback {Function} Continuation function -// Sends SYN_REPLY frame -// -Framer.prototype.replyFrame = function replyFrame(id, code, reason, headers, - callback) { - var dict = headersToDict(headers, function(headers) { - headers.status = code + ' ' + reason; - headers.version = 'HTTP/1.1'; - }); - - this._synFrame('SYN_REPLY', id, null, 0, dict, callback); -}; - -// -// ### function streamFrame (id, assoc, headers, callback) -// #### @id {Number} stream id -// #### @assoc {Number} associated stream id -// #### @meta {Object} meta headers ( method, scheme, url, version ) -// #### @headers {Object} stream headers -// #### @callback {Function} continuation callback -// Create SYN_STREAM frame -// (needed for server push and testing) -// -Framer.prototype.streamFrame = function streamFrame(id, assoc, meta, headers, - callback) { - var dict = headersToDict(headers, function(headers) { - headers.status = 200; - headers.version = 'HTTP/1.1'; - headers.url = meta.url; - }); - - this._synFrame('SYN_STREAM', id, assoc, meta.priority, dict, callback); -}; - -// -// ### function dataFrame (id, fin, data) -// #### @id {Number} Stream id -// #### @fin {Bool} Is this data frame last frame -// #### @data {Buffer} Response data -// Sends DATA frame -// -Framer.prototype.dataFrame = function dataFrame(id, fin, data) { - if (!fin && !data.length) return []; - - var frame = new Buffer(8 + data.length); - - frame.writeUInt32BE(id & 0x7fffffff, 0, true); - frame.writeUInt32BE(data.length & 0x00ffffff, 4, true); - frame.writeUInt8(fin ? 0x01 : 0x0, 4, true); - - if (data.length) data.copy(frame, 8); - - return frame; -}; - -// -// ### function pingFrame (id) -// #### @id {Buffer} Ping ID -// Sends PING frame -// -Framer.prototype.pingFrame = function pingFrame(id) { - var header = new Buffer(12); - - header.writeUInt32BE(0x80020006, 0, true); // Version and type - header.writeUInt32BE(0x00000004, 4, true); // Length - id.copy(header, 8, 0, 4); // ID - - return header; -}; - -// -// ### function rstFrame (id, code) -// #### @id {Number} Stream ID -// #### @code {NUmber} RST Code -// Sends PING frame -// -Framer.prototype.rstFrame = function rstFrame(id, code) { - var header; - - if (!(header = Framer.rstCache[code])) { - header = new Buffer(16); - - header.writeUInt32BE(0x80020003, 0, true); // Version and type - header.writeUInt32BE(0x00000008, 4, true); // Length - header.writeUInt32BE(id & 0x7fffffff, 8, true); // Stream ID - header.writeUInt32BE(code, 12, true); // Status Code - - Framer.rstCache[code] = header; - } - - return header; -}; -Framer.rstCache = {}; - -// -// ### function settingsFrame (options) -// #### @options {Object} settings frame options -// Sends SETTINGS frame with MAX_CONCURRENT_STREAMS -// -Framer.prototype.settingsFrame = function settingsFrame(options) { - var settings; - - if (!(settings = Framer.settingsCache[options.maxStreams])) { - settings = new Buffer(20); - - settings.writeUInt32BE(0x80020004, 0, true); // Version and type - settings.writeUInt32BE(0x0000000C, 4, true); // length - settings.writeUInt32BE(0x00000001, 8, true); // Count of entries - settings.writeUInt32LE(0x01000004, 12, true); // Entry ID and Persist flag - settings.writeUInt32BE(options.maxStreams, 16, true); - - Framer.settingsCache[options.maxStreams] = settings; - } - - return settings; -}; -Framer.settingsCache = {}; diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/index.js b/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/index.js deleted file mode 100644 index 12a5ebc..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var v2; - -try { - v2 = require('./protocol.node'); -} catch (e) { - v2 = require('./protocol.js'); -} -module.exports = v2; - -v2.Framer = require('./framer').Framer; - -v2.dictionary = require('./dictionary').dictionary; diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/protocol.js b/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/protocol.js deleted file mode 100644 index 0a6bb24..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v2/protocol.js +++ /dev/null @@ -1,68 +0,0 @@ -var protocol = exports; - -// -// ### function parseSynHead (type, flags, data) -// #### @type {Number} Frame type -// #### @flags {Number} Frame flags -// #### @data {Buffer} input data -// Returns parsed syn_* frame's head -// -protocol.parseSynHead = function parseSynHead(type, flags, data) { - var stream = type === 0x01; - - return { - type: stream ? 'SYN_STREAM' : 'SYN_REPLY', - id: data.readUInt32BE(0, true) & 0x7fffffff, - version: 2, - associated: stream ? data.readUInt32BE(4, true) & 0x7fffffff : 0, - priority: stream ? data[8] >> 6 : 0, - fin: (flags & 0x01) === 0x01, - unidir: (flags & 0x02) === 0x02, - _offset: stream ? 10 : 6 - }; -}; - -// -// ### function parseHeaders (pairs) -// #### @pairs {Buffer} header pairs -// Returns hashmap of parsed headers -// -protocol.parseHeaders = function parseHeaders(pairs) { - var count = pairs.readUInt16BE(0, true), - headers = {}; - - pairs = pairs.slice(2); - - function readString() { - var len = pairs.readUInt16BE(0, true), - value = pairs.slice(2, 2 + len); - - pairs = pairs.slice(2 + len); - - return value.toString(); - } - - while(count > 0) { - headers[readString()] = readString(); - count--; - } - - return headers; -}; - -// -// ### function parsesRst frame -protocol.parseRst = function parseRst(data) { - return { - type: 'RST_STREAM', - id: data.readUInt32BE(0, true) & 0x7fffffff, - status: data.readUInt32BE(4, true) - }; -}; - -protocol.parseGoaway = function parseGoaway(data) { - return { - type: 'GOAWAY', - lastId: data.readUInt32BE(0, true) & 0x7fffffff - }; -}; diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/dictionary.js b/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/dictionary.js deleted file mode 100644 index 18f10bb..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/dictionary.js +++ /dev/null @@ -1,180 +0,0 @@ -exports.dictionary = new Buffer([ - 0x00, 0x00, 0x00, 0x07, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x00, 0x00, 0x00, 0x04, 0x68, - 0x65, 0x61, 0x64, 0x00, 0x00, 0x00, 0x04, 0x70, - 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03, 0x70, - 0x75, 0x74, 0x00, 0x00, 0x00, 0x06, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x00, 0x00, 0x00, 0x05, - 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x00, 0x00, - 0x06, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x00, - 0x00, 0x00, 0x0e, 0x61, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x2d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, - 0x74, 0x00, 0x00, 0x00, 0x0f, 0x61, 0x63, 0x63, - 0x65, 0x70, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x0f, - 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x2d, 0x6c, - 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, - 0x00, 0x00, 0x0d, 0x61, 0x63, 0x63, 0x65, 0x70, - 0x74, 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, - 0x00, 0x00, 0x00, 0x03, 0x61, 0x67, 0x65, 0x00, - 0x00, 0x00, 0x05, 0x61, 0x6c, 0x6c, 0x6f, 0x77, - 0x00, 0x00, 0x00, 0x0d, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x00, 0x00, 0x00, 0x0d, 0x63, 0x61, 0x63, - 0x68, 0x65, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x00, 0x00, 0x00, 0x0a, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x00, 0x00, 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x2d, 0x62, 0x61, 0x73, 0x65, - 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x2d, 0x65, 0x6e, 0x63, 0x6f, - 0x64, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, - 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x00, 0x00, 0x00, 0x0e, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x00, 0x00, 0x00, 0x10, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, - 0x00, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2d, 0x6d, 0x64, 0x35, 0x00, 0x00, 0x00, - 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x2d, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00, - 0x00, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2d, 0x74, 0x79, 0x70, 0x65, 0x00, 0x00, - 0x00, 0x04, 0x64, 0x61, 0x74, 0x65, 0x00, 0x00, - 0x00, 0x04, 0x65, 0x74, 0x61, 0x67, 0x00, 0x00, - 0x00, 0x06, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x00, 0x00, 0x00, 0x07, 0x65, 0x78, 0x70, 0x69, - 0x72, 0x65, 0x73, 0x00, 0x00, 0x00, 0x04, 0x66, - 0x72, 0x6f, 0x6d, 0x00, 0x00, 0x00, 0x04, 0x68, - 0x6f, 0x73, 0x74, 0x00, 0x00, 0x00, 0x08, 0x69, - 0x66, 0x2d, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, - 0x00, 0x00, 0x11, 0x69, 0x66, 0x2d, 0x6d, 0x6f, - 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2d, 0x73, - 0x69, 0x6e, 0x63, 0x65, 0x00, 0x00, 0x00, 0x0d, - 0x69, 0x66, 0x2d, 0x6e, 0x6f, 0x6e, 0x65, 0x2d, - 0x6d, 0x61, 0x74, 0x63, 0x68, 0x00, 0x00, 0x00, - 0x08, 0x69, 0x66, 0x2d, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x00, 0x00, 0x00, 0x13, 0x69, 0x66, 0x2d, - 0x75, 0x6e, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x2d, 0x73, 0x69, 0x6e, 0x63, 0x65, - 0x00, 0x00, 0x00, 0x0d, 0x6c, 0x61, 0x73, 0x74, - 0x2d, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x00, 0x00, 0x00, 0x08, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, - 0x0c, 0x6d, 0x61, 0x78, 0x2d, 0x66, 0x6f, 0x72, - 0x77, 0x61, 0x72, 0x64, 0x73, 0x00, 0x00, 0x00, - 0x06, 0x70, 0x72, 0x61, 0x67, 0x6d, 0x61, 0x00, - 0x00, 0x00, 0x12, 0x70, 0x72, 0x6f, 0x78, 0x79, - 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, 0x00, - 0x13, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x2d, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, 0x05, - 0x72, 0x61, 0x6e, 0x67, 0x65, 0x00, 0x00, 0x00, - 0x07, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x72, - 0x00, 0x00, 0x00, 0x0b, 0x72, 0x65, 0x74, 0x72, - 0x79, 0x2d, 0x61, 0x66, 0x74, 0x65, 0x72, 0x00, - 0x00, 0x00, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x00, 0x00, 0x00, 0x02, 0x74, 0x65, 0x00, - 0x00, 0x00, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, - 0x65, 0x72, 0x00, 0x00, 0x00, 0x11, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x2d, 0x65, - 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x00, - 0x00, 0x00, 0x07, 0x75, 0x70, 0x67, 0x72, 0x61, - 0x64, 0x65, 0x00, 0x00, 0x00, 0x0a, 0x75, 0x73, - 0x65, 0x72, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, - 0x00, 0x00, 0x00, 0x04, 0x76, 0x61, 0x72, 0x79, - 0x00, 0x00, 0x00, 0x03, 0x76, 0x69, 0x61, 0x00, - 0x00, 0x00, 0x07, 0x77, 0x61, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x00, 0x00, 0x00, 0x10, 0x77, 0x77, - 0x77, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x00, 0x00, - 0x00, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x00, 0x00, 0x00, 0x03, 0x67, 0x65, 0x74, 0x00, - 0x00, 0x00, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x00, 0x00, 0x00, 0x06, 0x32, 0x30, 0x30, - 0x20, 0x4f, 0x4b, 0x00, 0x00, 0x00, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x00, 0x00, - 0x00, 0x08, 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, - 0x2e, 0x31, 0x00, 0x00, 0x00, 0x03, 0x75, 0x72, - 0x6c, 0x00, 0x00, 0x00, 0x06, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x00, 0x00, 0x00, 0x0a, 0x73, - 0x65, 0x74, 0x2d, 0x63, 0x6f, 0x6f, 0x6b, 0x69, - 0x65, 0x00, 0x00, 0x00, 0x0a, 0x6b, 0x65, 0x65, - 0x70, 0x2d, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x00, - 0x00, 0x00, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, - 0x6e, 0x31, 0x30, 0x30, 0x31, 0x30, 0x31, 0x32, - 0x30, 0x31, 0x32, 0x30, 0x32, 0x32, 0x30, 0x35, - 0x32, 0x30, 0x36, 0x33, 0x30, 0x30, 0x33, 0x30, - 0x32, 0x33, 0x30, 0x33, 0x33, 0x30, 0x34, 0x33, - 0x30, 0x35, 0x33, 0x30, 0x36, 0x33, 0x30, 0x37, - 0x34, 0x30, 0x32, 0x34, 0x30, 0x35, 0x34, 0x30, - 0x36, 0x34, 0x30, 0x37, 0x34, 0x30, 0x38, 0x34, - 0x30, 0x39, 0x34, 0x31, 0x30, 0x34, 0x31, 0x31, - 0x34, 0x31, 0x32, 0x34, 0x31, 0x33, 0x34, 0x31, - 0x34, 0x34, 0x31, 0x35, 0x34, 0x31, 0x36, 0x34, - 0x31, 0x37, 0x35, 0x30, 0x32, 0x35, 0x30, 0x34, - 0x35, 0x30, 0x35, 0x32, 0x30, 0x33, 0x20, 0x4e, - 0x6f, 0x6e, 0x2d, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x61, 0x74, 0x69, 0x76, 0x65, - 0x20, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x30, 0x34, 0x20, - 0x4e, 0x6f, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x33, 0x30, 0x31, 0x20, 0x4d, 0x6f, - 0x76, 0x65, 0x64, 0x20, 0x50, 0x65, 0x72, 0x6d, - 0x61, 0x6e, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x34, - 0x30, 0x30, 0x20, 0x42, 0x61, 0x64, 0x20, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x34, 0x30, - 0x31, 0x20, 0x55, 0x6e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x34, 0x30, - 0x33, 0x20, 0x46, 0x6f, 0x72, 0x62, 0x69, 0x64, - 0x64, 0x65, 0x6e, 0x34, 0x30, 0x34, 0x20, 0x4e, - 0x6f, 0x74, 0x20, 0x46, 0x6f, 0x75, 0x6e, 0x64, - 0x35, 0x30, 0x30, 0x20, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x20, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x35, 0x30, 0x31, 0x20, 0x4e, 0x6f, 0x74, - 0x20, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x65, 0x64, 0x35, 0x30, 0x33, 0x20, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, - 0x55, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, - 0x62, 0x6c, 0x65, 0x4a, 0x61, 0x6e, 0x20, 0x46, - 0x65, 0x62, 0x20, 0x4d, 0x61, 0x72, 0x20, 0x41, - 0x70, 0x72, 0x20, 0x4d, 0x61, 0x79, 0x20, 0x4a, - 0x75, 0x6e, 0x20, 0x4a, 0x75, 0x6c, 0x20, 0x41, - 0x75, 0x67, 0x20, 0x53, 0x65, 0x70, 0x74, 0x20, - 0x4f, 0x63, 0x74, 0x20, 0x4e, 0x6f, 0x76, 0x20, - 0x44, 0x65, 0x63, 0x20, 0x30, 0x30, 0x3a, 0x30, - 0x30, 0x3a, 0x30, 0x30, 0x20, 0x4d, 0x6f, 0x6e, - 0x2c, 0x20, 0x54, 0x75, 0x65, 0x2c, 0x20, 0x57, - 0x65, 0x64, 0x2c, 0x20, 0x54, 0x68, 0x75, 0x2c, - 0x20, 0x46, 0x72, 0x69, 0x2c, 0x20, 0x53, 0x61, - 0x74, 0x2c, 0x20, 0x53, 0x75, 0x6e, 0x2c, 0x20, - 0x47, 0x4d, 0x54, 0x63, 0x68, 0x75, 0x6e, 0x6b, - 0x65, 0x64, 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, - 0x68, 0x74, 0x6d, 0x6c, 0x2c, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x2f, 0x70, 0x6e, 0x67, 0x2c, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x6a, 0x70, 0x67, - 0x2c, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x2f, 0x67, - 0x69, 0x66, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, - 0x6d, 0x6c, 0x2c, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x78, - 0x68, 0x74, 0x6d, 0x6c, 0x2b, 0x78, 0x6d, 0x6c, - 0x2c, 0x74, 0x65, 0x78, 0x74, 0x2f, 0x70, 0x6c, - 0x61, 0x69, 0x6e, 0x2c, 0x74, 0x65, 0x78, 0x74, - 0x2f, 0x6a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x2c, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x6d, 0x61, 0x78, 0x2d, 0x61, 0x67, 0x65, - 0x3d, 0x67, 0x7a, 0x69, 0x70, 0x2c, 0x64, 0x65, - 0x66, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x73, 0x64, - 0x63, 0x68, 0x63, 0x68, 0x61, 0x72, 0x73, 0x65, - 0x74, 0x3d, 0x75, 0x74, 0x66, 0x2d, 0x38, 0x63, - 0x68, 0x61, 0x72, 0x73, 0x65, 0x74, 0x3d, 0x69, - 0x73, 0x6f, 0x2d, 0x38, 0x38, 0x35, 0x39, 0x2d, - 0x31, 0x2c, 0x75, 0x74, 0x66, 0x2d, 0x2c, 0x2a, - 0x2c, 0x65, 0x6e, 0x71, 0x3d, 0x30, 0x2e -]); diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/framer.js b/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/framer.js deleted file mode 100644 index 5dd1593..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/framer.js +++ /dev/null @@ -1,335 +0,0 @@ -var framer = exports; - -var spdy = require('../../../spdy'), - Buffer = require('buffer').Buffer, - protocol = require('./'); - -// -// ### function Framer (deflate, inflate) -// #### @deflate {zlib.Deflate} Deflate stream -// #### @inflate {zlib.Inflate} Inflate stream -// Framer constructor -// -function Framer(deflate, inflate) { - this.version = 3; - this.deflate = deflate; - this.inflate = inflate; -} -exports.Framer = Framer; - -// -// ### function execute (header, body, callback) -// #### @header {Object} Frame headers -// #### @body {Buffer} Frame's body -// #### @callback {Function} Continuation callback -// Parse frame (decompress data and create streams) -// -Framer.prototype.execute = function execute(header, body, callback) { - // SYN_STREAM or SYN_REPLY - if (header.type === 0x01 || header.type === 0x02) { - var frame = protocol.parseSynHead(header.type, header.flags, body); - - body = body.slice(frame._offset); - - this.inflate(body, function(err, chunks, length) { - if (err) return callback(err); - - var pairs = new Buffer(length); - for (var i = 0, offset = 0; i < chunks.length; i++) { - chunks[i].copy(pairs, offset); - offset += chunks[i].length; - } - - frame.headers = protocol.parseHeaders(pairs); - frame.url = frame.headers.path || ''; - - callback(null, frame); - }); - // RST_STREAM - } else if (header.type === 0x03) { - callback(null, protocol.parseRst(body)); - // SETTINGS - } else if (header.type === 0x04) { - callback(null, protocol.parseSettings(body)); - } else if (header.type === 0x05) { - callback(null, { type: 'NOOP' }); - // PING - } else if (header.type === 0x06) { - callback(null, { type: 'PING', pingId: body }); - // GOAWAY - } else if (header.type === 0x07) { - callback(null, protocol.parseGoaway(body)); - } else if (header.type === 0x09) { - callback(null, protocol.parseWindowUpdate(body)); - } else { - callback(null, { type: 'unknown: ' + header.type, body: body }); - } -}; - -// -// internal, converts object into spdy dictionary -// -function headersToDict(headers, preprocess) { - function stringify(value) { - if (value !== undefined) { - if (Array.isArray(value)) { - return value.join('\x00'); - } else if (typeof value === 'string') { - return value; - } else { - return value.toString(); - } - } else { - return ''; - } - } - - // Lower case of all headers keys - var loweredHeaders = {}; - Object.keys(headers || {}).map(function(key) { - loweredHeaders[key.toLowerCase()] = headers[key]; - }); - - // Allow outer code to add custom headers or remove something - if (preprocess) preprocess(loweredHeaders); - - // Transform object into kv pairs - var len = 4, - pairs = Object.keys(loweredHeaders).filter(function(key) { - var lkey = key.toLowerCase(); - return lkey !== 'connection' && lkey !== 'keep-alive' && - lkey !== 'proxy-connection' && lkey !== 'transfer-encoding'; - }).map(function(key) { - var klen = Buffer.byteLength(key), - value = stringify(loweredHeaders[key]), - vlen = Buffer.byteLength(value); - - len += 8 + klen + vlen; - return [klen, key, vlen, value]; - }), - result = new Buffer(len); - - result.writeUInt32BE(pairs.length, 0, true); - - var offset = 4; - pairs.forEach(function(pair) { - // Write key length - result.writeUInt32BE(pair[0], offset, true); - // Write key - result.write(pair[1], offset + 4); - - offset += pair[0] + 4; - - // Write value length - result.writeUInt32BE(pair[2], offset, true); - // Write value - result.write(pair[3], offset + 4); - - offset += pair[2] + 4; - }); - - return result; -}; - -Framer.prototype._synFrame = function _synFrame(type, id, assoc, priority, dict, - callback) { - // Compress headers - this.deflate(dict, function (err, chunks, size) { - if (err) return callback(err); - - var offset = type === 'SYN_STREAM' ? 18 : 12, - total = (type === 'SYN_STREAM' ? 10 : 4) + size, - frame = new Buffer(offset + size);; - - frame.writeUInt16BE(0x8003, 0, true); // Control + Version - frame.writeUInt16BE(type === 'SYN_STREAM' ? 1 : 2, 2, true); // type - frame.writeUInt32BE(total & 0x00ffffff, 4, true); // No flag support - frame.writeUInt32BE(id & 0x7fffffff, 8, true); // Stream-ID - - if (type === 'SYN_STREAM') { - frame[4] = 2; - frame.writeUInt32BE(assoc & 0x7fffffff, 12, true); // Stream-ID - } - - frame.writeUInt8(priority & 0x7, 16, true); // Priority - - for (var i = 0; i < chunks.length; i++) { - chunks[i].copy(frame, offset); - offset += chunks[i].length; - } - - callback(null, frame); - }); -}; - -// -// ### function replyFrame (id, code, reason, headers, callback) -// #### @id {Number} Stream ID -// #### @code {Number} HTTP Status Code -// #### @reason {String} (optional) -// #### @headers {Object|Array} (optional) HTTP headers -// #### @callback {Function} Continuation function -// Sends SYN_REPLY frame -// -Framer.prototype.replyFrame = function replyFrame(id, code, reason, headers, - callback) { - var dict = headersToDict(headers, function(headers) { - headers[':status'] = code + ' ' + reason; - headers[':version'] = 'HTTP/1.1'; - }); - - this._synFrame('SYN_REPLY', id, null, 0, dict, callback); -}; - -// -// ### function streamFrame (id, assoc, headers, callback) -// #### @id {Number} stream id -// #### @assoc {Number} associated stream id -// #### @meta {Object} meta headers ( method, scheme, url, version ) -// #### @headers {Object} stream headers -// #### @callback {Function} continuation callback -// Create SYN_STREAM frame -// (needed for server push and testing) -// -Framer.prototype.streamFrame = function streamFrame(id, assoc, meta, headers, - callback) { - var dict = headersToDict(headers, function(headers) { - headers[':status'] = 200; - headers[':version'] = meta.version || 'HTTP/1.1'; - headers[':path'] = meta.path; - headers[':scheme'] = meta.scheme || 'https'; - headers[':host'] = meta.host; - }); - - this._synFrame('SYN_STREAM', id, assoc, meta.priority, dict, callback); -}; - -// -// ### function dataFrame (id, fin, data) -// #### @id {Number} Stream id -// #### @fin {Bool} Is this data frame last frame -// #### @data {Buffer} Response data -// Sends DATA frame -// -Framer.prototype.dataFrame = function dataFrame(id, fin, data) { - if (!fin && !data.length) return []; - - var frame = new Buffer(8 + data.length); - - frame.writeUInt32BE(id & 0x7fffffff, 0, true); - frame.writeUInt32BE(data.length & 0x00ffffff, 4, true); - frame.writeUInt8(fin ? 0x01 : 0x0, 4, true); - - if (data.length) data.copy(frame, 8); - - return frame; -}; - -// -// ### function pingFrame (id) -// #### @id {Buffer} Ping ID -// Sends PING frame -// -Framer.prototype.pingFrame = function pingFrame(id) { - var header = new Buffer(12); - - header.writeUInt32BE(0x80030006, 0, true); // Version and type - header.writeUInt32BE(0x00000004, 4, true); // Length - id.copy(header, 8, 0, 4); // ID - - return header; -}; - -// -// ### function rstFrame (id, code) -// #### @id {Number} Stream ID -// #### @code {NUmber} RST Code -// Sends PING frame -// -Framer.prototype.rstFrame = function rstFrame(id, code) { - var header; - - if (!(header = Framer.rstCache[code])) { - header = new Buffer(16); - - header.writeUInt32BE(0x80030003, 0, true); // Version and type - header.writeUInt32BE(0x00000008, 4, true); // Length - header.writeUInt32BE(id & 0x7fffffff, 8, true); // Stream ID - header.writeUInt32BE(code, 12, true); // Status Code - - Framer.rstCache[code] = header; - } - - return header; -}; -Framer.rstCache = {}; - -// -// ### function settingsFrame (options) -// #### @options {Object} settings frame options -// Sends SETTINGS frame with MAX_CONCURRENT_STREAMS and initial window -// -Framer.prototype.settingsFrame = function settingsFrame(options) { - var settings, - key = options.maxStreams + ':' + options.windowSize; - - if (!(settings = Framer.settingsCache[key])) { - settings = new Buffer(28); - - settings.writeUInt32BE(0x80030004, 0, true); // Version and type - settings.writeUInt32BE((4 + 8 * 2) & 0x00FFFFFF, 4, true); // length - settings.writeUInt32BE(0x00000002, 8, true); // Count of entries - - settings.writeUInt32BE(0x01000004, 12, true); // Entry ID and Persist flag - settings.writeUInt32BE(options.maxStreams & 0x7fffffff, 16, true); - - settings.writeUInt32BE(0x01000007, 20, true); // Entry ID and Persist flag - settings.writeUInt32BE(options.windowSize & 0x7fffffff, 24, true); - - Framer.settingsCache[key] = settings; - } - - return settings; -}; -Framer.settingsCache = {}; - -// -// ### function windowSizeFrame (size) -// #### @size {Number} data transfer window size -// Sends SETTINGS frame with window size -// -Framer.prototype.windowSizeFrame = function windowSizeFrame(size) { - var settings; - - if (!(settings = Framer.windowSizeCache[size])) { - settings = new Buffer(20); - - settings.writeUInt32BE(0x80030004, 0, true); // Version and type - settings.writeUInt32BE((4 + 8) & 0x00FFFFFF, 4, true); // length - settings.writeUInt32BE(0x00000001, 8, true); // Count of entries - - settings.writeUInt32BE(0x01000007, 12, true); // Entry ID and Persist flag - settings.writeUInt32BE(size & 0x7fffffff, 16, true); // Window Size (KB) - - Framer.windowSizeCache[size] = settings; - } - - return settings; -}; -Framer.windowSizeCache = {}; - -// -// ### function windowUpdateFrame (id) -// #### @id {Buffer} WindowUpdate ID -// Sends WINDOW_UPDATE frame -// -Framer.prototype.windowUpdateFrame = function windowUpdateFrame(id, delta) { - var header = new Buffer(16); - - header.writeUInt32BE(0x80030009, 0, true); // Version and type - header.writeUInt32BE(0x00000008, 4, true); // Length - header.writeUInt32BE(id & 0x7fffffff, 8, true); // ID - header.writeUInt32BE(delta & 0x7fffffff, 12, true); // delta - - return header; -}; diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/index.js b/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/index.js deleted file mode 100644 index 43bdafa..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var v3; - -try { - v3 = require('./protocol.node'); -} catch (e) { - v3 = require('./protocol.js'); -} -module.exports = v3; - -v3.Framer = require('./framer').Framer; - -v3.dictionary = require('./dictionary').dictionary; diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/protocol.js b/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/protocol.js deleted file mode 100644 index ab54a8b..0000000 --- a/node_modules/restify/node_modules/spdy/lib/spdy/protocol/v3/protocol.js +++ /dev/null @@ -1,109 +0,0 @@ -var protocol = exports; - -// -// ### function parseSynHead (type, flags, data) -// #### @type {Number} Frame type -// #### @flags {Number} Frame flags -// #### @data {Buffer} input data -// Returns parsed syn_* frame's head -// -protocol.parseSynHead = function parseSynHead(type, flags, data) { - var stream = type === 0x01; - - return { - type: stream ? 'SYN_STREAM' : 'SYN_REPLY', - id: data.readUInt32BE(0, true) & 0x7fffffff, - version: 3, - associated: stream ? data.readUInt32BE(4, true) & 0x7fffffff : 0, - priority: stream ? data[8] >> 5 : 0, - fin: (flags & 0x01) === 0x01, - unidir: (flags & 0x02) === 0x02, - _offset: stream ? 10 : 6 - }; -}; - -// -// ### function parseHeaders (pairs) -// #### @pairs {Buffer} header pairs -// Returns hashmap of parsed headers -// -protocol.parseHeaders = function parseHeaders(pairs) { - var count = pairs.readUInt32BE(0, true), - headers = {}; - - pairs = pairs.slice(4); - - function readString() { - var len = pairs.readUInt32BE(0, true), - value = pairs.slice(4, 4 + len); - - pairs = pairs.slice(4 + len); - - return value.toString(); - } - - while(count > 0) { - headers[readString().replace(/^:/, '')] = readString(); - count--; - } - - return headers; -}; - -// -// ### function parsesRst frame -protocol.parseRst = function parseRst(data) { - return { - type: 'RST_STREAM', - id: data.readUInt32BE(0, true) & 0x7fffffff, - status: data.readUInt32BE(4, true) - }; -}; - -protocol.parseSettings = function parseSettings(data) { - var settings = {}, - number = data.readUInt32BE(0, true), - idMap = { - 1: 'upload_bandwidth', - 2: 'download_bandwidth', - 3: 'round_trip_time', - 4: 'max_concurrent_streams', - 5: 'current_cwnd', - 6: 'download_retrans_rate', - 7: 'initial_window_size', - 8: 'client_certificate_vector_size' - }; - - for (var i=0; i options.maxStreams) { - stream.once('error', function onerror() {}); - // REFUSED_STREAM - stream._rstCode = 3; - stream.destroy(true); - } else { - self.emit('stream', stream); - - stream._init(); - } - } else { - if (frame.id) { - // Load created one - stream = self.streams[frame.id]; - - // Fail if not found - if (stream === undefined) { - if (frame.type === 'RST_STREAM') return; - self.write(self._framer.rstFrame(frame.id, 2)); - return; - } - } - - // Emit 'data' event - if (frame.type === 'DATA') { - if (frame.data.length > 0){ - if (stream._closedBy.client) { - stream._rstCode = 2; - stream.emit('error', 'Writing to half-closed stream'); - } else { - stream._recv(frame.data); - } - } - // Destroy stream if we was asked to do this - } else if (frame.type === 'RST_STREAM') { - stream._rstCode = 0; - if (frame.status === 5) { - // If client "cancels" connection - close stream and - // all associated push streams without error - stream.pushes.forEach(function(stream) { - stream.close(); - }); - stream.close(); - } else { - // Emit error on destroy - stream.destroy(new Error('Received rst: ' + frame.status)); - } - // Respond with same PING - } else if (frame.type === 'PING') { - self.write(self._framer.pingFrame(frame.pingId)); - } else if (frame.type === 'SETTINGS') { - self._setDefaultWindow(frame.settings); - } else if (frame.type === 'GOAWAY') { - self._goaway = frame.lastId; - } else if (frame.type === 'WINDOW_UPDATE') { - stream._drainSink(frame.delta); - } else { - console.error('Unknown type: ', frame.type); - } - } - - // Handle half-closed - if (frame.fin) { - // Don't allow to close stream twice - if (stream._closedBy.client) { - stream._rstCode = 2; - stream.emit('error', 'Already half-closed'); - } else { - stream._closedBy.client = true; - - // Emulate last chunked fragment - if (stream._forceChunked) { - stream._recv(last_frag, true); - } - - stream._handleClose(); - } - } - }); - - this.parser.on('version', function onversion(version) { - if (!pair) { - pair = pool.get('spdy/' + version); - self._deflate = pair.deflate; - self._inflate = pair.inflate; - } - }); - - this.parser.on('framer', function onframer(framer) { - // Generate custom settings frame and send - self.write(framer.settingsFrame(options)); - }); - - // Propagate parser errors - this.parser.on('error', function onParserError(err) { - self.emit('error', err); - }); - - socket.pipe(this.parser); - - // 2 minutes socket timeout - socket.setTimeout(2 * 60 * 1000); - socket.once('timeout', function ontimeout() { - socket.destroy(); - }); - - // Allow high-level api to catch socket errors - socket.on('error', function onSocketError(e) { - self.emit('error', e); - }); - - socket.once('close', function onclose() { - self._closed = true; - if (pair) pool.put(pair); - }); - - if (legacy) { - socket.on('drain', function ondrain() { - self.emit('drain'); - }); - } -} -util.inherits(Connection, process.EventEmitter); -exports.Connection = Connection; - -// -// ### function write (data, encoding) -// #### @data {String|Buffer} data -// #### @encoding {String} (optional) encoding -// Writes data to socket -// -Connection.prototype.write = function write(data, encoding) { - if (this.socket.writable) { - return this.socket.write(data, encoding); - } -}; - -// -// ### function _setDefaultWindow (settings) -// #### @settings {Object} -// Update the default transfer window -- in the connection and in the -// active streams -// -Connection.prototype._setDefaultWindow = function _setDefaultWindow(settings) { - if (!settings) return; - if (!settings.initial_window_size || - settings.initial_window_size.persisted) { - return; - } - - this.sinkSize = settings.initial_window_size.value; - - Object.keys(this.streams).forEach(function(id) { - this.streams[id]._updateSinkSize(settings.initial_window_size.value); - }, this); -}; - -// -// ### function Stream (connection, frame) -// #### @connection {Connection} SPDY Connection -// #### @frame {Object} SYN_STREAM data -// Abstract stream @constructor -// -function Stream(connection, frame) { - DuplexStream.call(this); - - this.connection = connection; - this.socket = connection.socket; - this.encrypted = connection.encrypted; - this._framer = connection._framer; - this._initialized = false; - - // Should chunked encoding be forced - this._forceChunked = false; - - this.ondata = this.onend = null; - - // RST_STREAM code if any - this._rstCode = 1; - this._destroyed = false; - - this._closedBy = { - client: false, - server: false - }; - - // Lock data - this._locked = false; - this._lockBuffer = []; - - // Store id - this.id = frame.id; - this.version = frame.version; - - // Store priority - this.priority = frame.priority; - - // Array of push streams associated to that one - this.pushes = []; - - // How much data can be sent TO client before next WINDOW_UPDATE - this._sinkSize = connection.sinkSize; - this._initialSinkSize = connection.sinkSize; - - // When data needs to be send, but window is too small for it - it'll be - // queued in this buffer - this._sinkBuffer = []; - - // How much data can be sent BY client before next WINDOW_UPDATE - this._initialWindowSize = connection.windowSize; - this._windowSize = connection.windowSize; - - // Create compression streams - this._deflate = connection._deflate; - this._inflate = connection._inflate; - - // Store headers - this.headers = frame.headers; - this.url = frame.url; - - this._frame = frame; - - if (legacy) { - this.readable = this.writable = true; - } - - // Call .onend() - this.once('end', function() { - var self = this; - process.nextTick(function() { - if (self.onend) self.onend(); - }); - }); - - // Handle half-close - this.once('finish', function() { - this._writeData(true, []); - this._closedBy.server = true; - if (this._sinkBuffer.length !== 0) return; - this._handleClose(); - }); -}; -util.inherits(Stream, DuplexStream); -exports.Stream = Stream; - -if (legacy) { - Stream.prototype.pause = function pause() {}; - Stream.prototype.resume = function resume() {}; -} - -// -// ### function _isGoaway () -// Returns true if any writes to that stream should be ignored -// -Stream.prototype._isGoaway = function _isGoaway() { - return this.connection._goaway && this.id > this.connection._goaway; -}; + // Instantiate http server if `ssl: false` + if (!base && options && options.plain && options.ssl === false) + return exports.create(require('http').Server, options, requestListener); -// -// ### function init () -// Initialize stream, internal -// -Stream.prototype._init = function init() { - var headers = this.headers, - req = [headers.method + ' ' + this.url + ' ' + headers.version]; - - Object.keys(headers).forEach(function (key) { - if (key !== 'method' && key !== 'url' && key !== 'version' && - key !== 'scheme') { - req.push(key + ': ' + headers[key]); - } - }); - - // Force chunked encoding - if (!headers['content-length'] && !headers['transfer-encoding']) { - req.push('Transfer-Encoding: chunked'); - this._forceChunked = true; - } - - // Add '\r\n\r\n' - req.push('', ''); - - req = new Buffer(req.join('\r\n')); - - this._recv(req, true); - this._initialized = true; -}; - -// -// ### function lock (callback) -// #### @callback {Function} continuation callback -// Acquire lock -// -Stream.prototype._lock = function lock(callback) { - if (!callback) return; - - if (this._locked) { - this._lockBuffer.push(callback); - } else { - this._locked = true; - callback.call(this, null); - } -}; - -// -// ### function unlock () -// Release lock and call all buffered callbacks -// -Stream.prototype._unlock = function unlock() { - if (this._locked) { - this._locked = false; - this._lock(this._lockBuffer.shift()); - } -}; - -// -// ### function setTimeout () -// TODO: use timers.enroll, timers.active, timers.unenroll -// -Stream.prototype.setTimeout = function setTimeout(time) {}; - -// -// ### function _handleClose () -// Close stream if it was closed by both server and client -// -Stream.prototype._handleClose = function _handleClose() { - if (this._closedBy.client && this._closedBy.server) { - this.close(); - } -}; - -// -// ### function close () -// Destroys stream -// -Stream.prototype.close = function close() { - this.destroy(); -}; - -// -// ### function destroy (error) -// #### @error {Error} (optional) error -// Destroys stream -// -Stream.prototype.destroy = function destroy(error) { - if (this._destroyed) return; - this._destroyed = true; - - delete this.connection.streams[this.id]; - if (this.id % 2 === 1) { - this.connection.streamsCount--; - } - - if (error) { - if (this._rstCode) { - this.connection.write(this._framer.rstFrame(this.id, this._rstCode)); - } - } - - if (legacy) { - this.emit('end'); - } else { - this.push(null); - } - - if (error) this.emit('error', error); - - var self = this; - process.nextTick(function() { - self.emit('close', !!error); - }); -}; - -Stream.prototype._drainSink = function _drainSink(size) { - var oldBuffer = this._sinkBuffer; - this._sinkBuffer = []; - - this._sinkSize += size; - - for (var i = 0; i < oldBuffer.length; i++) { - this._writeData(oldBuffer[i][0], oldBuffer[i][1], oldBuffer[i][2]); - } - - // Handle half-close - if (this._sinkBuffer.length === 0 && this._closedBy.server) { - this._handleClose(); - } - - if (legacy) this.emit('drain'); -}; - -// -// ### function _writeData (fin, buffer, cb) -// #### @fin {Boolean} -// #### @buffer {Buffer} -// #### @cb {Function} **optional** -// Internal function -// -Stream.prototype._writeData = function _writeData(fin, buffer, cb) { - if (this._framer.version === 3) { - // Window was exhausted, queue data - if (this._sinkSize <= 0) { - this._sinkBuffer.push([fin, buffer, cb]); - return false; - } - - var len = Math.min(this._sinkSize, buffer.length); - this._sinkSize -= len; - - // Only partial write is possible, queue rest for later - if (len < buffer.length) { - this._sinkBuffer.push([fin, buffer.slice(len)]); - buffer = buffer.slice(0, len); - fin = false; - } - } - - this._lock(function() { - var stream = this, - frame = this._framer.dataFrame(this.id, fin, buffer); - - stream.connection.scheduler.schedule(stream, frame); - stream.connection.scheduler.tick(); - - if (fin) this.close(); - - this._unlock(); - - if (cb) cb(); - }); -}; - -// -// ### function write (data, encoding) -// #### @data {Buffer|String} data -// #### @encoding {String} data encoding -// Writes data to connection -// -Stream.prototype._write = function write(data, encoding, cb) { - // Do not send data to new connections after GOAWAY - if (this._isGoaway()) { - if (cb) cb(); - return; - } - - return this._writeData(false, data, cb); -}; - -if (legacy) { - Stream.prototype.write = function write(data, encoding, cb) { - if (!Buffer.isBuffer(data)) { - this._write(new Buffer(data, encoding), null, cb); - } else { - this._write(data, encoding, cb); - } - }; - - // - // ### function end (data) - // #### @data {Buffer|String} (optional) data to write before ending stream - // #### @encoding {String} (optional) string encoding - // Send FIN data frame - // - Stream.prototype.end = function end(data, encoding) { - // Do not send data to new connections after GOAWAY - if (this._isGoaway()) return; - - if (data) this.write(data, encoding); - this.emit('finish'); - }; -} - -// -// ### function _recv (data) -// #### @data {Buffer} buffer to receive -// #### @chunked {Boolean} -// (internal) -// -Stream.prototype._recv = function _recv(data, chunked) { - // Update window if exhausted - if (!chunked && this._framer.version >= 3 && this._initialized) { - this._windowSize -= data.length; - - if (this._windowSize <= 0) { - var delta = this._initialWindowSize - this._windowSize; - this._windowSize += delta; - this.connection.write(this._framer.windowUpdateFrame(this.id, delta)); - } - } - - // Emulate chunked encoding - if (this._forceChunked && !chunked) { - // Zero-chunks are treated as end, do not emit them - if (data.length === 0) return; - - this._recv(new Buffer(data.length.toString(16)), true); - this._recv(crlf, true); - this._recv(data, true); - this._recv(crlf, true); - return; - } - - if (legacy) { - var self = this; - process.nextTick(function() { - self.emit('data', data); - if (self.ondata) { - self.ondata(data, 0, data.length); - } - }); - } else { - // Right now, http module expects socket to be working in streams1 mode. - if (this.ondata) { - this.ondata(data, 0, data.length); - } else { - this.push(data); - } - } -}; - -// -// ### function _read (bytes, cb) -// #### @bytes {Number} number of bytes to read -// Streams2 API -// -Stream.prototype._read = function read(bytes) { - // NOP -}; - -// -// ### function _updateSinkSize (size) -// #### @size {Integer} -// Update the internal data transfer window -// -Stream.prototype._updateSinkSize = function _updateSinkSize(size) { - var diff = size - this._initialSinkSize; - - this._initialSinkSize = size; - this._drainSink(diff); -}; - -// -// `net` compatibility layer -// (Copy pasted from lib/tls.js from node.js) -// -Stream.prototype.address = function address() { - return this.socket && this.socket.address(); + return new server(options, requestListener); }; - -Stream.prototype.__defineGetter__('remoteAddress', function remoteAddress() { - return this.socket && this.socket.remoteAddress; -}); - -Stream.prototype.__defineGetter__('remotePort', function remotePort() { - return this.socket && this.socket.remotePort; -}); diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/utils.js b/node_modules/restify/node_modules/spdy/lib/spdy/utils.js index d5ef4a6..7be30bf 100644 --- a/node_modules/restify/node_modules/spdy/lib/spdy/utils.js +++ b/node_modules/restify/node_modules/spdy/lib/spdy/utils.js @@ -1,39 +1,57 @@ var spdy = require('../spdy'), utils = exports; -var zlib = require('zlib'), +var stream = require('stream'), + zlib = require('zlib'), Buffer = require('buffer').Buffer; +// Export streams related stuff +utils.isLegacy = !stream.Duplex; +if (utils.isLegacy) + utils.DuplexStream = stream; +else + utils.DuplexStream = stream.Duplex; + // -// ### function createDeflate () +// ### function createDeflate (version, compression) +// #### @version {Number} SPDY version +// #### @compression {Boolean} whether to enable compression // Creates deflate stream with SPDY dictionary // -utils.createDeflate = function createDeflate(version) { +utils.createDeflate = function createDeflate(version, compression) { var deflate = zlib.createDeflate({ - dictionary: spdy.protocol[version].dictionary, - windowBits: 11 + dictionary: spdy.protocol.dictionary[version], + flush: zlib.Z_SYNC_FLUSH, + windowBits: 11, + level: compression ? zlib.Z_DEFAULT_COMPRESSION : zlib.Z_NO_COMPRESSION }); // Define lock information early deflate.locked = false; - deflate.lockBuffer = []; + deflate.lockQueue = []; + if (spdy.utils.isLegacy) + deflate._flush = zlib.Z_SYNC_FLUSH; return deflate; }; // -// ### function createInflate () +// ### function createInflate (version) +// #### @version {Number} SPDY version // Creates inflate stream with SPDY dictionary // utils.createInflate = function createInflate(version) { var inflate = zlib.createInflate({ - dictionary: spdy.protocol[version].dictionary, + dictionary: spdy.protocol.dictionary[version], + flush: zlib.Z_SYNC_FLUSH, windowBits: 15 }); // Define lock information early inflate.locked = false; - inflate.lockBuffer = []; + inflate.lockQueue = []; + if (spdy.utils.isLegacy) + inflate._flush = zlib.Z_SYNC_FLUSH; return inflate; }; @@ -45,14 +63,14 @@ utils.createInflate = function createInflate(version) { // utils.resetZlibStream = function resetZlibStream(stream, callback) { if (stream.locked) { - stream.lockBuffer.push(function() { + stream.lockQueue.push(function() { resetZlibStream(stream, callback); }); return; } stream.reset(); - stream.lockBuffer = []; + stream.lockQueue = []; callback(null); }; @@ -66,12 +84,11 @@ var delta = 0; // Compress/decompress data and pass it to callback // utils.zstream = function zstream(stream, buffer, callback) { - var flush = stream._flush, - chunks = [], + var chunks = [], total = 0; if (stream.locked) { - stream.lockBuffer.push(function() { + stream.lockQueue.push(function() { zstream(stream, buffer, callback); }); return; @@ -83,23 +100,26 @@ utils.zstream = function zstream(stream, buffer, callback) { total += chunk.length; } stream.on('data', collect); - stream.write(buffer); - stream.once('error', function(err) { - stream.removeAllListeners('data'); - callback(err); - }); + stream.write(buffer, done); - stream.flush(function() { + function done() { stream.removeAllListeners('data'); stream.removeAllListeners('error'); - stream._flush = flush; - callback(null, chunks, total); + if (callback) + callback(null, chunks, total); stream.locked = false; - var deferred = stream.lockBuffer.shift(); - if (deferred) deferred(); + var deferred = stream.lockQueue.shift(); + if (deferred) + deferred(); + }; + + stream.once('error', function(err) { + stream.removeAllListeners('data'); + callback(err); + callback = null; }); }; @@ -113,3 +133,8 @@ utils.zwrap = function zwrap(stream) { utils.zstream(stream, data, callback); }; }; + +if (typeof setImmediate === 'undefined') + utils.nextTick = process.nextTick.bind(process); +else + utils.nextTick = setImmediate; diff --git a/node_modules/restify/node_modules/spdy/lib/spdy/zlib-pool.js b/node_modules/restify/node_modules/spdy/lib/spdy/zlib-pool.js index 368a86a..5e05973 100644 --- a/node_modules/restify/node_modules/spdy/lib/spdy/zlib-pool.js +++ b/node_modules/restify/node_modules/spdy/lib/spdy/zlib-pool.js @@ -2,22 +2,26 @@ var zlibpool = exports, spdy = require('../spdy'); // -// ### function Pool () +// ### function Pool (compression) +// #### @compression {Boolean} whether to enable compression // Zlib streams pool // -function Pool() { +function Pool(compression) { + this.compression = compression; this.pool = { 'spdy/2': [], - 'spdy/3': [] + 'spdy/3': [], + 'spdy/3.1': [] }; } // -// ### function create () +// ### function create (compression) +// #### @compression {Boolean} whether to enable compression // Returns instance of Pool // -zlibpool.create = function create() { - return new Pool(); +zlibpool.create = function create(compression) { + return new Pool(compression); }; var x = 0; @@ -33,7 +37,7 @@ Pool.prototype.get = function get(version, callback) { return { version: version, - deflate: spdy.utils.createDeflate(id), + deflate: spdy.utils.createDeflate(id, this.compression), inflate: spdy.utils.createInflate(id) }; } @@ -51,8 +55,7 @@ Pool.prototype.put = function put(pair) { spdy.utils.resetZlibStream(pair.deflate, done); function done() { - if (--waiting === 0) { + if (--waiting === 0) self.pool[pair.version].push(pair); - } } }; diff --git a/node_modules/restify/node_modules/spdy/package.json b/node_modules/restify/node_modules/spdy/package.json index c025014..d4d7f31 100644 --- a/node_modules/restify/node_modules/spdy/package.json +++ b/node_modules/restify/node_modules/spdy/package.json @@ -1,7 +1,8 @@ { "name": "spdy", - "version": "1.8.2", + "version": "1.29.1", "description": "Implementation of the SPDY protocol on node.js.", + "license": "MIT", "keywords": [ "spdy" ], @@ -54,8 +55,12 @@ ], "main": "./lib/spdy", "optionalDependencies": {}, - "readme": "# SPDY Server for node.js [![Build Status](https://secure.travis-ci.org/indutny/node-spdy.png)](http://travis-ci.org/indutny/node-spdy)\n\n\n\"Flattr\n\nWith this module you can create [SPDY](http://www.chromium.org/spdy) servers\nin node.js with natural http module interface and fallback to regular https\n(for browsers that doesn't support SPDY yet).\n\n## Usage\n\n```javascript\nvar spdy = require('spdy'),\n fs = require('fs');\n\nvar options = {\n key: fs.readFileSync(__dirname + '/keys/spdy-key.pem'),\n cert: fs.readFileSync(__dirname + '/keys/spdy-cert.pem'),\n ca: fs.readFileSync(__dirname + '/keys/spdy-csr.pem'),\n\n // SPDY-specific options\n windowSize: 1024, // Server's window size\n};\n\nvar server = spdy.createServer(options, function(req, res) {\n res.writeHead(200);\n res.end('hello world!');\n});\n\nserver.listen(443);\n```\n\nAnd by popular demand - usage with\n[express](https://github.com/visionmedia/express):\n\n```javascript\nvar spdy = require('spdy'),\n express = require('express'),\n fs = require('fs');\n\nvar options = { /* the same as above */ };\n\nvar app = express();\n\napp.use(/* your favorite middleware */);\n\nvar server = spdy.createServer(options, app);\n\nserver.listen(443);\n```\n\n## API\n\nAPI is compatible with `http` and `https` module, but you can use another\nfunction as base class for SPDYServer.\n\n```javascript\nspdy.createServer(\n [base class constructor, i.e. https.Server],\n { /* keys and options */ }, // <- the only one required argument\n [request listener]\n).listen([port], [host], [callback]);\n```\n\nRequest listener will receive two arguments: `request` and `response`. They're\nboth instances of `http`'s `IncomingMessage` and `OutgoingMessage`. But three\ncustom properties are added to both of them: `streamID`, `isSpdy`,\n`spdyVersion`. The first one indicates on which spdy stream are sitting request\nand response. Second is always true and can be checked to ensure that incoming\nrequest wasn't received by HTTPS fallback and last one is a number representing\nused SPDY protocol version (2 or 3 for now).\n\n### Push streams\n\nIt is possible to initiate 'push' streams to send content to clients _before_\nthe client requests it.\n\n```javascript\nspdy.createServer(options, function(req, res) {\n var headers = { 'content-type': 'application/javascript' };\n res.push('/main.js', headers, function(err, stream) {\n if (err) return;\n\n stream.end('alert(\"hello from push stream!\");');\n });\n\n res.end('');\n}).listen(443);\n```\n\nPush is accomplished via the `push()` method invoked on the current response\nobject (this works for express.js response objects as well). The format of the\n`push()` method is:\n\n`.push('full or relative url', { ... headers ... }, optional priority, callback)`\n\nYou can use either full ( `http://host/path` ) or relative ( `/path` ) urls with\n`.push()`. `headers` are the same as for regular response object. `callback`\nwill receive two arguments: `err` (if any error is happened) and `stream`\n(stream object have API compatible with a\n[net.Socket](http://nodejs.org/docs/latest/api/net.html#net.Socket) ).\n\n### Options\n\nAll options supported by\n[tls](http://nodejs.org/docs/latest/api/tls.html#tls.createServer) are working\nwith node-spdy. In addition, `maxStreams` options is available. it allows you\ncontrolling [maximum concurrent streams][http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2#TOC-SETTINGS]\nprotocol option (if client will start more streams than that limit, RST_STREAM\nwill be sent for each additional stream).\n\nAdditional options:\n\n* `plain` - if defined, server will accept only plain (non-encrypted)\n connections.\n\n#### Contributors\n\n* [Fedor Indutny](https://github.com/indutny)\n* [Chris Strom](https://github.com/eee-c)\n* [François de Metz](https://github.com/francois2metz)\n* [Ilya Grigorik](https://github.com/igrigorik)\n* [Roberto Peon](https://github.com/grmocg)\n* [Tatsuhiro Tsujikawa](https://github.com/tatsuhiro-t)\n* [Jesse Cravens](https://github.com/jessecravens)\n\n#### LICENSE\n\nThis software is licensed under the MIT License.\n\nCopyright Fedor Indutny, 2012.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n", + "readme": "# SPDY Server for node.js [![Build Status](https://secure.travis-ci.org/indutny/node-spdy.png)](http://travis-ci.org/indutny/node-spdy)\n\n\n\"Flattr\n\nWith this module you can create [SPDY](http://www.chromium.org/spdy) servers\nin node.js with natural http module interface and fallback to regular https\n(for browsers that don't support SPDY yet).\n\n## Usage\n\nServer:\n```javascript\nvar spdy = require('spdy'),\n fs = require('fs');\n\nvar options = {\n key: fs.readFileSync(__dirname + '/keys/spdy-key.pem'),\n cert: fs.readFileSync(__dirname + '/keys/spdy-cert.pem'),\n ca: fs.readFileSync(__dirname + '/keys/spdy-ca.pem'),\n\n // **optional** SPDY-specific options\n windowSize: 1024 * 1024, // Server's window size\n\n // **optional** if true - server will send 3.1 frames on 3.0 *plain* spdy\n autoSpdy31: false\n};\n\nvar server = spdy.createServer(options, function(req, res) {\n res.writeHead(200);\n res.end('hello world!');\n});\n\nserver.listen(443);\n```\n\nClient:\n```javascript\nvar spdy = require('spdy');\nvar http = require('http');\n\nvar agent = spdy.createAgent({\n host: 'www.google.com',\n port: 443,\n\n // Optional SPDY options\n spdy: {\n plain: false or true,\n ssl: false or true,\n version: 3 // Force SPDY version\n }\n});\n\nhttp.get({\n host: 'www.google.com',\n agent: agent\n}, function(response) {\n console.log('yikes');\n // Here it goes like with any other node.js HTTP request\n // ...\n // And once we're done - we may close TCP connection to server\n // NOTE: All non-closed requests will die!\n agent.close();\n}).end();\n```\n\nAnd by popular demand - usage with\n[express](https://github.com/visionmedia/express):\n\n```javascript\nvar spdy = require('spdy'),\n express = require('express'),\n fs = require('fs');\n\nvar options = { /* the same as above */ };\n\nvar app = express();\n\napp.use(/* your favorite middleware */);\n\nvar server = spdy.createServer(options, app);\n\nserver.listen(443);\n```\n\n## API\n\nAPI is compatible with `http` and `https` module, but you can use another\nfunction as base class for SPDYServer.\n\n```javascript\nspdy.createServer(\n [base class constructor, i.e. https.Server],\n { /* keys and options */ }, // <- the only one required argument\n [request listener]\n).listen([port], [host], [callback]);\n```\n\nRequest listener will receive two arguments: `request` and `response`. They're\nboth instances of `http`'s `IncomingMessage` and `OutgoingMessage`. But three\ncustom properties are added to both of them: `streamID`, `isSpdy`,\n`spdyVersion`. The first one indicates on which spdy stream are sitting request\nand response. Second is always true and can be checked to ensure that incoming\nrequest wasn't received by HTTPS fallback and last one is a number representing\nused SPDY protocol version (2 or 3 for now).\n\n### Push streams\n\nIt is possible to initiate 'push' streams to send content to clients _before_\nthe client requests it.\n\n```javascript\nspdy.createServer(options, function(req, res) {\n var headers = { 'content-type': 'application/javascript' };\n var stream = res.push('/main.js', headers);\n stream.on('acknowledge', function() {\n });\n stream.on('error', function() {\n });\n stream.end('alert(\"hello from push stream!\");');\n\n res.end('');\n}).listen(443);\n```\n\nPush is accomplished via the `push()` method invoked on the current response\nobject (this works for express.js response objects as well). The format of the\n`push()` method is:\n\n`.push('full or relative url', { ... headers ... }, optional priority, callback)`\n\nYou can use either full ( `http://host/path` ) or relative ( `/path` ) urls with\n`.push()`. `headers` are the same as for regular response object. `callback`\nwill receive two arguments: `err` (if any error is happened) and `stream`\n(stream object have API compatible with a\n[net.Socket](http://nodejs.org/docs/latest/api/net.html#net.Socket) ).\n\nClient usage:\n```javascript\nvar agent = spdy.createAgent({ /* ... */ });\nagent.on('push', function(stream) {\n stream.on('error', function(err) {\n // Handle error\n });\n // Read data from stream\n // ...\n // stream.associated points to associated client-initiated stream\n});\n```\n\nNOTE: You're responsible for the `stream` object once given it in `.push()`\ncallback. Hence ignoring `error` events on it might result in uncaught\nexceptions and crash your program.\n\n### Trailing headers\n\nServer usage:\n```javascript\nfunction (req, res) {\n // Send trailing headers to client\n res.addTrailers({ header1: 'value1', header2: 'value2' });\n\n // On client's trailing headers\n req.on('trailers', function(headers) {\n // ...\n });\n}\n```\n\nClient usage:\n```javascript\nvar req = http.request({ agent: spdyAgent, /* ... */ }).function (res) {\n // On server's trailing headers\n res.on('trailers', function(headers) {\n // ...\n });\n});\nreq.write('stuff');\nreq.addTrailers({ /* ... */ });\nreq.end();\n```\n\n### Options\n\nAll options supported by\n[tls](http://nodejs.org/docs/latest/api/tls.html#tls.createServer) are working\nwith node-spdy. In addition, `maxStreams` options is available. it allows you\ncontrolling [maximum concurrent streams](http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2#TOC-SETTINGS)\nprotocol option (if client will start more streams than that limit, RST_STREAM\nwill be sent for each additional stream).\n\nAdditional options:\n\n* `plain` - if defined, server will ignore NPN and ALPN data and choose whether\n to use spdy or plain http by looking at first data packet.\n* `ssl` - if `false` and `options.plain` is `true`, `http.Server` will be used\n as a `base` class for created server.\n* `maxChunk` - if set and non-falsy, limits number of bytes sent in one DATA\n chunk. Setting it to non-zero value is recommended if you care about\n interleaving of outgoing data from multiple different streams.\n (defaults to 8192)\n\n#### Contributors\n\n* [Fedor Indutny](https://github.com/indutny)\n* [Chris Strom](https://github.com/eee-c)\n* [François de Metz](https://github.com/francois2metz)\n* [Ilya Grigorik](https://github.com/igrigorik)\n* [Roberto Peon](https://github.com/grmocg)\n* [Tatsuhiro Tsujikawa](https://github.com/tatsuhiro-t)\n* [Jesse Cravens](https://github.com/jessecravens)\n\n#### LICENSE\n\nThis software is licensed under the MIT License.\n\nCopyright Fedor Indutny, 2014.\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to permit\npersons to whom the Software is furnished to do so, subject to the\nfollowing conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\nNO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\nDAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\nUSE OR OTHER DEALINGS IN THE SOFTWARE.\n", "readmeFilename": "README.md", - "_id": "spdy@1.8.2", - "_from": "spdy@1.8.2" + "_id": "spdy@1.29.1", + "dist": { + "shasum": "73c0692c110211539fee4d8d2693bcc913454bf8" + }, + "_from": "spdy@^1.26.5", + "_resolved": "https://registry.npmjs.org/spdy/-/spdy-1.29.1.tgz" } diff --git a/node_modules/restify/node_modules/spdy/test/benchmarks/syn.js b/node_modules/restify/node_modules/spdy/test/benchmarks/syn.js index f6b21d1..864b450 100644 --- a/node_modules/restify/node_modules/spdy/test/benchmarks/syn.js +++ b/node_modules/restify/node_modules/spdy/test/benchmarks/syn.js @@ -17,7 +17,10 @@ frames.createSynStream(host, url, function(syn_stream) { }); function request(port, host, data, callback) { - var socket = tls.connect(port, host, {NPNProtocols: ['spdy/2']}, function() { + var socket = tls.connect(port, host, { + NPNProtocols: ['spdy/2'], + ALPNProtocols: ['spdy/2'] + }, function() { socket.write(data); socket.once('data', function() { socket.destroy(); diff --git a/node_modules/restify/node_modules/spdy/test/unit/framer-test.js b/node_modules/restify/node_modules/spdy/test/unit/framer-test.js deleted file mode 100644 index 5468076..0000000 --- a/node_modules/restify/node_modules/spdy/test/unit/framer-test.js +++ /dev/null @@ -1,181 +0,0 @@ -var assert = require('assert'), - spdy = require('../../'), - Buffer = require('buffer').Buffer, - Stream = require('stream').Stream; - -suite('A Framer of SPDY module', function() { - var inflate, - deflate, - framer; - - setup(function() { - inflate = spdy.utils.zwrap(spdy.utils.createInflate(2)); - deflate = spdy.utils.zwrap(spdy.utils.createDeflate(2)); - framer = new spdy.protocol[2].Framer(deflate, inflate); - }); - - /* - deflate.on('data', function(b) {console.log(b)}); - deflate.write(new Buffer([ - 0x00, 0x02, // Number of name+value - 0, 0x04, // Name length - 0x68, 0x6f, 0x73, 0x74, // 'host' - 0, 0x09, // Value length - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, // 'localhost' - 0, 0x06, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, // 'custom', - 0, 0x1, - 0x31 // '1' - ])); - deflate.flush(); - */ - - suite('frame parsing', function() { - test('given a SYN_STREAM should return correct frame', function(done) { - var body = new Buffer([ - 0x00, 0x00, 0x00, 0x01, // Stream ID - 0x00, 0x00, 0x00, 0x00, // Associated Stream ID - 0x00, 0x00, // Priority + Unused - 0x78, 0xbb, 0xdf, 0xa2, 0x51, 0xb2, // Deflated Name/Value pairs - 0x62, 0x60, 0x62, 0x60, 0x01, 0xe5, 0x12, - 0x06, 0x4e, 0x50, 0x50, 0xe6, 0x80, 0x99, - 0x6c, 0xc9, 0xa5, 0xc5, 0x25, 0xf9, 0xb9, - 0x0c, 0x8c, 0x86, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff - ]); - framer.execute({ - control: true, - type: 1, - length: body.length - }, body, function(err, frame) { - assert.ok(!err); - assert.equal(frame.type, 'SYN_STREAM'); - assert.equal(frame.id, 1); - assert.equal(frame.associated, 0); - assert.equal(frame.headers.host, 'localhost'); - assert.equal(frame.headers.custom, '1'); - done(); - }); - }); - - test('given a SYN_REPLY should return correct frame', function(done) { - var body = new Buffer([ - 0x00, 0x00, 0x00, 0x01, // Stream ID - 0x00, 0x00, // Unused - 0x78, 0xbb, 0xdf, 0xa2, 0x51, 0xb2, // Deflated Name/Value pairs - 0x62, 0x60, 0x62, 0x60, 0x01, 0xe5, 0x12, - 0x06, 0x4e, 0x50, 0x50, 0xe6, 0x80, 0x99, - 0x6c, 0xc9, 0xa5, 0xc5, 0x25, 0xf9, 0xb9, - 0x0c, 0x8c, 0x86, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff - ]); - framer.execute({ - control: true, - type: 2, - length: body.length - }, body, function(err, frame) { - assert.ok(!err); - assert.equal(frame.type, 'SYN_REPLY'); - assert.equal(frame.id, 1); - assert.equal(frame.headers.host, 'localhost'); - assert.equal(frame.headers.custom, '1'); - done(); - }); - }); - - test('given a RST_STREAM should return correct frame', function(done) { - var body = new Buffer([0, 0, 0, 1, 0, 0, 0, 2]); - framer.execute({ - control: true, - type: 3, - length: body.length - }, body, function(err, frame) { - assert.ok(!err); - assert.equal(frame.type, 'RST_STREAM'); - assert.equal(frame.id, 1); - assert.equal(frame.status, 2); - done(); - }); - }); - - test('given a NOOP frame should return correct frame', function(done) { - framer.execute({ - control: true, - type: 5, - length: 0 - }, new Buffer(0), function(err, frame) { - assert.ok(!err); - assert.equal(frame.type, 'NOOP'); - done(); - }); - }); - - test('given a PING frame should return correct frame', function(done) { - framer.execute({ - control: true, - type: 6, - length: 0 - }, new Buffer(0), function(err, frame) { - assert.ok(!err); - assert.equal(frame.type, 'PING'); - done(); - }); - }); - - test('given a GOAWAY frame should return correct frame', function(done) { - var body = new Buffer([0, 0, 0, 1]); - framer.execute({ - control: true, - type: 7, - length: body.length - }, body, function(err, frame) { - assert.ok(!err); - assert.equal(frame.type, 'GOAWAY'); - assert.equal(frame.lastId, 1); - done(); - }); - }); - }); - - suite('frame generation', function() { - test('.replyFrame() should generate correct frame', function(done) { - framer.replyFrame(1, 200, 'ok', {}, function(err, chunks) { - assert.equal(err, null); - assert.ok(chunks.length > 1); - done(); - }); - }); - - test('.streamFrame() should generate correct frame', function(done) { - framer.streamFrame(2, 1, { url : '/' }, {}, function(err, chunks) { - assert.equal(err, null); - assert.ok(chunks.length > 1); - done(); - }); - }); - - test('.dataFrame() w/o fin should generate correct frame', function() { - var frame = framer.dataFrame(1, false, new Buffer(123)); - assert.equal(frame[4], 0); - assert.ok(frame.length > 8); - }); - - test('.dataFrame() with fin should generate correct frame', function() { - var frame = framer.dataFrame(1, true, new Buffer(123)); - assert.equal(frame[4], 1); - assert.ok(frame.length > 8); - }); - - test('.pingFrame() should generate correct frame', function() { - var frame = framer.pingFrame(new Buffer([0, 1, 2, 3])); - assert.ok(frame.length > 0); - }); - - test('.rstFrame() should generate correct frame', function() { - var frame = framer.rstFrame(1, 2); - assert.ok(frame.length > 0); - - // Verify that cache works - var frame = framer.rstFrame(1, 2); - assert.ok(frame.length > 0); - }); - }); -}); diff --git a/node_modules/restify/node_modules/spdy/test/unit/parser-test.js b/node_modules/restify/node_modules/spdy/test/unit/parser-test.js deleted file mode 100644 index 12f0899..0000000 --- a/node_modules/restify/node_modules/spdy/test/unit/parser-test.js +++ /dev/null @@ -1,102 +0,0 @@ -var assert = require('assert'), - spdy = require('../../'), - Buffer = require('buffer').Buffer; - -suite('A Parser of SPDY module', function() { - var parser; - - [2,3].forEach(function(version) { - suite('version ' + version, function() { - setup(function() { - var deflate = spdy.utils.createDeflate(version), - inflate = spdy.utils.createInflate(version); - - parser = new spdy.parser.create({ - socket: { - setNoDelay: function() {} - }, - write: function() {} - }, deflate, inflate); - - parser.createFramer(version); - }); - - test('should wait for headers initially', function() { - assert.equal(parser.waiting, 8); - }); - - test('should update buffered property once given < 8 bytes', function() { - parser.write(new Buffer(5)); - assert.equal(parser.buffered, 5); - }); - - test('given SYN_STREAM header should start waiting for body', function() { - parser.write(new Buffer([ - 0x80, 0x02, 0x00, 0x01, // Control frame, version, type (SYN_STREAM) - 0x00, 0x00, 0x12, 0x34 - ])); - - assert.equal(parser.waiting, 0x1234); - assert.equal(parser.state.type, 'frame-body'); - assert.ok(parser.state.header.control); - assert.equal(parser.state.header.flags, 0); - assert.equal(parser.state.header.length, 0x1234); - }); - - test('given DATA header should start waiting for body', function() { - parser.write(new Buffer([ - 0x00, 0x00, 0x00, 0x01, // Data frame, stream ID - 0x00, 0x00, 0x12, 0x34 - ])); - - assert.equal(parser.waiting, 0x1234); - assert.equal(parser.state.type, 'frame-body'); - assert.ok(!parser.state.header.control); - assert.equal(parser.state.header.id, 1); - assert.equal(parser.state.header.flags, 0); - assert.equal(parser.state.header.length, 0x1234); - }); - - test('given chunked header should not fail', function() { - parser.write(new Buffer([ - 0x80, 0x02, 0x00, 0x01 // Control frame, version, type (SYN_STREAM) - ])); - assert.equal(parser.buffered, 4); - - parser.write(new Buffer([ - 0x00, 0x00, 0x12, 0x34 - ])); - assert.equal(parser.buffered, 0); - - assert.equal(parser.waiting, 0x1234); - assert.equal(parser.state.type, 'frame-body'); - assert.ok(parser.state.header.control); - assert.equal(parser.state.header.flags, 0); - assert.equal(parser.state.header.length, 0x1234); - }); - - test('given header and body should emit `frame`', function(done) { - parser.on('frame', function(frame) { - assert.ok(frame.type === 'DATA'); - assert.equal(frame.id, 1); - assert.equal(frame.data.length, 4); - assert.equal(frame.data[0], 0x01); - assert.equal(frame.data[1], 0x02); - assert.equal(frame.data[2], 0x03); - assert.equal(frame.data[3], 0x04); - done(); - }); - - parser.write(new Buffer([ - 0x00, 0x00, 0x00, 0x01, // Data frame, stream ID - 0x00, 0x00, 0x00, 0x04, - 0x01, 0x02, 0x03, 0x04 // Body - ])); - - // Waits for next frame - assert.equal(parser.waiting, 8); - assert.equal(parser.state.type, 'frame-head'); - }); - }); - }); -}); diff --git a/node_modules/restify/node_modules/spdy/test/unit/server-test.js b/node_modules/restify/node_modules/spdy/test/unit/server-test.js deleted file mode 100644 index d478195..0000000 --- a/node_modules/restify/node_modules/spdy/test/unit/server-test.js +++ /dev/null @@ -1,147 +0,0 @@ -var assert = require('assert'), - spdy = require('../../'), - keys = require('../fixtures/keys'), - https = require('https'), - tls = require('tls'),request - Buffer = require('buffer').Buffer; - -suite('A SPDY Server', function() { - var server; - setup(function(done) { - server = spdy.createServer(keys, function(req, res) { - res.end('ok'); - }); - - server.listen(8081, done); - }); - - teardown(function(done) { - server.once('close', done); - server.close(); - }); - - test('should respond on regular https requests', function(done) { - https.request({ - host: 'localhost', - port: 8081, - path: '/', - method: 'GET', - agent: false, - rejectUnauthorized: false - }, function(res) { - assert.equal(res.statusCode, 200); - done(); - }).end(); - }); - - test('should respond on spdy requests', function(done) { - var socket = tls.connect( - 8081, - 'localhost', - { NPNProtocols: ['spdy/2'], rejectUnauthorized: false }, - function() { - var deflate = spdy.utils.createDeflate(2), - chunks = [], - length = 0; - - deflate.on('data', function(chunk) { - chunks.push(chunk); - length += chunk.length; - }); - - // Deflate headers - deflate.write(new Buffer([ - 0x00, 0x04, // method, url, version = 3 fields - 0x00, 0x06, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, // method - 0x00, 0x03, - 0x47, 0x45, 0x54, // get - 0x00, 0x03, - 0x75, 0x72, 0x6c, // url - 0x00, 0x01, - 0x2f, // '/' - 0x00, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, // version - 0x00, 0x08, - 0x48, 0x54, 0x54, 0x50, 0x2f, 0x31, 0x2e, 0x31, // HTTP/1.1 - 0x00, 0x04, - 0x68, 0x6f, 0x73, 0x74, // host - 0x00, 0x09, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74 //localhost - ])); - - deflate.flush(function() { - // StreamID + Associated StreamID - length += 10; - - // Headers - socket.write(new Buffer([ - 0x80, 0x02, 0x00, 0x01, // Control, Version, SYN_STREAM - 0x00, 0x00, 0x00, length, // Flags, length (1 byte in this case) - 0x00, 0x00, 0x00, 0x01, // StreamID - 0x00, 0x00, 0x00, 0x00, // Associated StreamID - 0x00, 0x00 // Priority + Unused - ])); - - // Write compressed headers - chunks.forEach(function(chunk) { - socket.write(chunk); - }); - }); - - var response = new Buffer(85), - offset = 0; - - socket.on('data', function(chunk) { - assert.ok(offset + chunk.length <= 85); - - chunk.copy(response, offset); - offset += chunk.length; - - if (offset === 85) { - var frames = []; - - offset = 0; - while (offset < response.length) { - var len = (response.readUInt32BE(offset + 4) & 0x00ffffff) + 8; - frames.push(response.slice(offset, offset + len)); - - offset += len; - } - - // SYN_STREAM frame - assert.ok(frames.some(function(frame) { - return frame[0] === 0x80 && // Control frame - frame[1] === 0x02 && // Version - frame.readUInt16BE(2) === 0x0002 && // SYN_STREAM - frame.readUInt32BE(8) === 0x0001; // StreamID - })); - - // Data frames - assert.ok(frames.some(function(frame) { - return frame[0] === 0x00 && // Data frame - frame.readUInt32BE(0) === 0x0001 && // StreamID - frame.slice(8).toString() === 'ok'; - })); - - socket.destroy(); - } - }); - - socket.on('close', function() { - done(); - }); - } - ); - - socket.on('error', function(err) { - console.error('Socket error: ' + err); - }); - - server.on('request', function(req, res) { - assert.equal(req.url, '/'); - assert.equal(req.method, 'GET'); - res.end('ok'); - }); - }); -}); diff --git a/node_modules/restify/node_modules/spdy/v8.log b/node_modules/restify/node_modules/spdy/v8.log deleted file mode 100644 index 662a051..0000000 --- a/node_modules/restify/node_modules/spdy/v8.log +++ /dev/null @@ -1,16610 +0,0 @@ -shared-library,"/Users/indutny/.node/0.8.16/bin/node",0x100001740,0x1003942bd -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon",0x7fff93388fd0,0x7fff93388fd0 -shared-library,"/usr/lib/libSystem.B.dylib",0x7fff88a899eb,0x7fff88a89b7e -shared-library,"/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices",0x7fff93d8ffc0,0x7fff93d8ffc0 -shared-library,"/usr/lib/libstdc++.6.dylib",0x7fff8dd934b0,0x7fff8ddd35c7 -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/CommonPanels.framework/Versions/A/CommonPanels",0x7fff903ee148,0x7fff903f0882 -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Help.framework/Versions/A/Help",0x7fff8b580e08,0x7fff8b582e8a -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox",0x7fff8a795f30,0x7fff8a9f66df -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/ImageCapture.framework/Versions/A/ImageCapture",0x7fff883a2a62,0x7fff883adcf0 -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Ink.framework/Versions/A/Ink",0x7fff897100e0,0x7fff89784e3c -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/OpenScripting.framework/Versions/A/OpenScripting",0x7fff92c785cc,0x7fff92c8b7ab -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/Print.framework/Versions/A/Print",0x7fff8c0914cf,0x7fff8c092210 -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SecurityHI.framework/Versions/A/SecurityHI",0x7fff93e12ac2,0x7fff93e13f62 -shared-library,"/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/SpeechRecognition.framework/Versions/A/SpeechRecognition",0x7fff906000a2,0x7fff9060653c -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices",0x7fff88142fb0,0x7fff88142fb0 -shared-library,"/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation",0x7fff8e0d8a90,0x7fff8e3255a2 -shared-library,"/usr/lib/libobjc.A.dylib",0x7fff8db1b000,0x7fff8db3c124 -shared-library,"/System/Library/Frameworks/CoreText.framework/Versions/A/CoreText",0x7fff8e9c94c0,0x7fff8ea6d11a -shared-library,"/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation",0x7fff8e5c6b10,0x7fff8e740da1 -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics",0x7fff93e15d60,0x7fff9434f641 -shared-library,"/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO",0x7fff949ae4f0,0x7fff94a87690 -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/ATS",0x7fff92bcff00,0x7fff92c31e8e -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ColorSync.framework/Versions/A/ColorSync",0x7fff94bfaa5c,0x7fff94c58bad -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/HIServices.framework/Versions/A/HIServices",0x7fff937a6620,0x7fff937e6b42 -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/LangAnalysis.framework/Versions/A/LangAnalysis",0x7fff880555f0,0x7fff8806314b -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/PrintCore.framework/Versions/A/PrintCore",0x7fff8aacb830,0x7fff8ab09053 -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/QD.framework/Versions/A/QD",0x7fff936af630,0x7fff936df4af -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/SpeechSynthesis.framework/Versions/A/SpeechSynthesis",0x7fff8add9c30,0x7fff8ade89b3 -shared-library,"/usr/lib/libz.1.dylib",0x7fff92cdbee0,0x7fff92ce6892 -shared-library,"/usr/lib/libbsm.0.dylib",0x7fff91616308,0x7fff91624c73 -shared-library,"/usr/lib/libicucore.A.dylib",0x7fff928b7ba8,0x7fff92a2252b -shared-library,"/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit",0x7fff8924c550,0x7fff8929e350 -shared-library,"/System/Library/Frameworks/IOSurface.framework/Versions/A/IOSurface",0x7fff928b081e,0x7fff928b2fb8 -shared-library,"/System/Library/Frameworks/Security.framework/Versions/A/Security",0x7fff8ffab770,0x7fff90162df1 -shared-library,"/usr/lib/system/libcache.dylib",0x7fff91a23320,0x7fff91a25cc7 -shared-library,"/usr/lib/system/libcommonCrypto.dylib",0x7fff883506d8,0x7fff8835a13f -shared-library,"/usr/lib/system/libcompiler_rt.dylib",0x7fff8839cac0,0x7fff883a054b -shared-library,"/usr/lib/system/libcopyfile.dylib",0x7fff9389b060,0x7fff938a05f4 -shared-library,"/usr/lib/system/libdispatch.dylib",0x7fff911c4490,0x7fff911d2534 -shared-library,"/usr/lib/system/libdnsinfo.dylib",0x7fff928b5b14,0x7fff928b6820 -shared-library,"/usr/lib/system/libdyld.dylib",0x7fff947b3798,0x7fff947b57e9 -shared-library,"/usr/lib/system/libkeymgr.dylib",0x7fff947b792c,0x7fff947b7cae -shared-library,"/usr/lib/system/liblaunch.dylib",0x7fff88a35c7c,0x7fff88a3bc2c -shared-library,"/usr/lib/system/libmacho.dylib",0x7fff8dc9b448,0x7fff8dc9fc35 -shared-library,"/usr/lib/system/libquarantine.dylib",0x7fff8e98319b,0x7fff8e98442c -shared-library,"/usr/lib/system/libremovefile.dylib",0x7fff89856734,0x7fff898578f4 -shared-library,"/usr/lib/system/libsystem_blocks.dylib",0x7fff93387304,0x7fff93387ad9 -shared-library,"/usr/lib/system/libsystem_c.dylib",0x7fff911d9cc0,0x7fff9127c50c -shared-library,"/usr/lib/system/libsystem_dnssd.dylib",0x7fff94b7dd60,0x7fff94b83479 -shared-library,"/usr/lib/system/libsystem_info.dylib",0x7fff93981260,0x7fff939a7fbb -shared-library,"/usr/lib/system/libsystem_kernel.dylib",0x7fff9198cba4,0x7fff9199f52f -shared-library,"/usr/lib/system/libsystem_m.dylib",0x7fff90f80240,0x7fff90f91156 -shared-library,"/usr/lib/system/libsystem_network.dylib",0x7fff8dc8bdc0,0x7fff8dc954a1 -shared-library,"/usr/lib/system/libsystem_notify.dylib",0x7fff9368b3f0,0x7fff93693bd9 -shared-library,"/usr/lib/system/libsystem_sandbox.dylib",0x7fff8c1ad7d4,0x7fff8c1ae62d -shared-library,"/usr/lib/system/libunc.dylib",0x7fff904fa5f1,0x7fff904fb950 -shared-library,"/usr/lib/system/libunwind.dylib",0x7fff8ddfcb84,0x7fff8de01606 -shared-library,"/usr/lib/system/libxpc.dylib",0x7fff8ea9c960,0x7fff8eab1d06 -shared-library,"/usr/lib/system/libcorecrypto.dylib",0x7fff8ad89c20,0x7fff8adbc517 -shared-library,"/usr/lib/libauto.dylib",0x7fff9175a350,0x7fff91798750 -shared-library,"/usr/lib/libc++abi.dylib",0x7fff8ec26240,0x7fff8ec3b3e8 -shared-library,"/usr/lib/libc++.1.dylib",0x7fff8ef9e5a0,0x7fff8efdffd0 -shared-library,"/usr/lib/system/libkxld.dylib",0x7fff9221906c,0x7fff92222fc4 -shared-library,"/usr/lib/libDiagnosticMessagesClient.dylib",0x7fff92e4df6a,0x7fff92e4e802 -shared-library,"/System/Library/Frameworks/CFNetwork.framework/Versions/A/CFNetwork",0x7fff9060b980,0x7fff907284cd -shared-library,"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore",0x7fff8b24ddc0,0x7fff8b32e751 -shared-library,"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata",0x7fff92228700,0x7fff922850cb -shared-library,"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices",0x7fff8a6916c0,0x7fff8a705597 -shared-library,"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit",0x7fff92121ad8,0x7fff92175dcc -shared-library,"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/AE.framework/Versions/A/AE",0x7fff9494e860,0x7fff94998ad5 -shared-library,"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/LaunchServices",0x7fff94acbd08,0x7fff94b55c2b -shared-library,"/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/DictionaryServices.framework/Versions/A/DictionaryServices",0x7fff880238b8,0x7fff88045bee -shared-library,"/System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration",0x7fff919d0b10,0x7fff91a0def6 -shared-library,"/usr/lib/libsqlite3.dylib",0x7fff923b8880,0x7fff924a24c0 -shared-library,"/usr/lib/libxml2.2.dylib",0x7fff88ec8150,0x7fff88f8c67f -shared-library,"/usr/lib/libxar.1.dylib",0x7fff93a5cfb8,0x7fff93a68804 -shared-library,"/usr/lib/libpam.2.dylib",0x7fff88975780,0x7fff88978548 -shared-library,"/usr/lib/libOpenScriptingUtil.dylib",0x7fff8e9c7d6c,0x7fff8e9c7ece -shared-library,"/usr/lib/libbz2.1.0.dylib",0x7fff92c95bdc,0x7fff92ca186c -shared-library,"/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration",0x7fff93c49320,0x7fff93c4ce2e -shared-library,"/System/Library/Frameworks/NetFS.framework/Versions/A/NetFS",0x7fff910c5ba0,0x7fff910caefe -shared-library,"/System/Library/PrivateFrameworks/NetAuth.framework/Versions/A/NetAuth",0x7fff8ba24030,0x7fff8ba2d821 -shared-library,"/System/Library/PrivateFrameworks/DataDetectorsCore.framework/Versions/A/DataDetectorsCore",0x7fff93a6cfa0,0x7fff93ab5a81 -shared-library,"/System/Library/PrivateFrameworks/TCC.framework/Versions/A/TCC",0x7fff93d8b6b0,0x7fff93d8dc79 -shared-library,"/usr/lib/liblangid.dylib",0x7fff8db19157,0x7fff8db19a32 -shared-library,"/usr/lib/libCRFSuite.dylib",0x7fff930ce490,0x7fff930e6a48 -shared-library,"/System/Library/PrivateFrameworks/GenerationalStorage.framework/Versions/A/GenerationalStorage",0x7fff8ca872f0,0x7fff8ca9832f -shared-library,"/System/Library/Frameworks/OpenDirectory.framework/Versions/A/Frameworks/CFOpenDirectory.framework/Versions/A/CFOpenDirectory",0x7fff93697180,0x7fff936a4b8a -shared-library,"/usr/lib/libxslt.1.dylib",0x7fff93de6e64,0x7fff93e0698f -shared-library,"/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate",0x7fff90f73000,0x7fff90f73000 -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontParser.dylib",0x7fff8f3ffa64,0x7fff8f460830 -shared-library,"/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ATS.framework/Versions/A/Resources/libFontRegistry.dylib",0x7fff8aeec900,0x7fff8af1e2f8 -shared-library,"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vImage.framework/Versions/A/vImage",0x7fff88745650,0x7fff8885618f -shared-library,"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/vecLib",0x7fff91986000,0x7fff91986000 -shared-library,"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvDSP.dylib",0x7fff880a3660,0x7fff88101ddf -shared-library,"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libvMisc.dylib",0x7fff8899a880,0x7fff88a10304 -shared-library,"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libLAPACK.dylib",0x7fff8f0080c8,0x7fff8f3db1bd -shared-library,"/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib",0x7fff917a7490,0x7fff919065ab -shared-library,"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJPEG.dylib",0x7fff92e553bc,0x7fff92e73bed -shared-library,"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libTIFF.dylib",0x7fff8814f810,0x7fff8817ef60 -shared-library,"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib",0x7fff93d90ea0,0x7fff93da92be -shared-library,"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libGIF.dylib",0x7fff8aac58b4,0x7fff8aac90aa -shared-library,"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libJP2.dylib",0x7fff881a5cd8,0x7fff8825298f -shared-library,"/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libRadiance.dylib",0x7fff92c514ed,0x7fff92c538c0 -shared-library,"/usr/lib/libcups.2.dylib",0x7fff9045dfb8,0x7fff90491a6b -shared-library,"/System/Library/Frameworks/Kerberos.framework/Versions/A/Kerberos",0x7fff882ef839,0x7fff88301f40 -shared-library,"/System/Library/Frameworks/GSS.framework/Versions/A/GSS",0x7fff88068ad0,0x7fff88093ef8 -shared-library,"/usr/lib/libresolv.9.dylib",0x7fff919b1434,0x7fff919ca9cb -shared-library,"/usr/lib/libiconv.2.dylib",0x7fff910ce290,0x7fff910e29c0 -shared-library,"/System/Library/PrivateFrameworks/Heimdal.framework/Versions/A/Heimdal",0x7fff92b4d380,0x7fff92ba655e -shared-library,"/System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent",0x7fff88a3f477,0x7fff88a40328 -shared-library,"/System/Library/Frameworks/OpenDirectory.framework/Versions/A/OpenDirectory",0x7fff91986e5c,0x7fff919893e4 -shared-library,"/System/Library/PrivateFrameworks/CommonAuth.framework/Versions/A/CommonAuth",0x7fff93c3d224,0x7fff93c451de -shared-library,"/System/Library/PrivateFrameworks/CoreUI.framework/Versions/A/CoreUI",0x7fff90faf260,0x7fff91038d3c -shared-library,"/System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore",0x7fff8b090da8,0x7fff8b1d0dcd -shared-library,"/System/Library/PrivateFrameworks/DesktopServicesPriv.framework/Versions/A/DesktopServicesPriv",0x7fff8e477780,0x7fff8e537cc7 -shared-library,"/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox",0x7fff8eac2c00,0x7fff8ebb28e2 -shared-library,"/System/Library/PrivateFrameworks/FamilyControls.framework/Versions/A/FamilyControls",0x7fff936f09dc,0x7fff93709b2f -shared-library,"/System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/A/MultitouchSupport",0x7fff9507fa60,0x7fff9508ec1f -shared-library,"/System/Library/PrivateFrameworks/Bom.framework/Versions/A/Bom",0x7fff8b9086c8,0x7fff8b93ccae -shared-library,"/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL",0x7fff93721f00,0x7fff9372d774 -shared-library,"/System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo",0x7fff936601e8,0x7fff93678c9c -shared-library,"/System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/CoreImage.framework/Versions/A/CoreImage",0x7fff8ec4d0d0,0x7fff8edf23a8 -shared-library,"/System/Library/Frameworks/QuartzCore.framework/Versions/A/Frameworks/ScalableUserInterface.framework/Versions/A/ScalableUserInterface",0x7fff8dc34d00,0x7fff8dc73ced -shared-library,"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLU.dylib",0x7fff94ba1d4c,0x7fff94bddcfa -shared-library,"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGFXShared.dylib",0x7fff919a9598,0x7fff919ae29b -shared-library,"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib",0x7fff8898298a,0x7fff8898d7fc -shared-library,"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGLImage.dylib",0x7fff8835ebb0,0x7fff88398eb6 -shared-library,"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCVMSPluginSupport.dylib",0x7fff9042b906,0x7fff9042d1c0 -shared-library,"/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libCoreVMClient.dylib",0x7fff92e4ff74,0x7fff92e526a1 -shared-library,"/System/Library/PrivateFrameworks/CrashReporterSupport.framework/Versions/A/CrashReporterSupport",0x7fff8af83afc,0x7fff8af8c05c -shared-library,"/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL",0x7fff8ef430ec,0x7fff8ef7bb15 -shared-library,"/System/Library/PrivateFrameworks/FaceCoreLight.framework/Versions/A/FaceCoreLight",0x7fff91a2cb40,0x7fff91a6f142 -shared-library,"/System/Library/PrivateFrameworks/AppleFSCompression.framework/Versions/A/AppleFSCompression",0x7fff8e7b0b90,0x7fff8e7b94c3 -shared-library,"/System/Library/PrivateFrameworks/Ubiquity.framework/Versions/A/Ubiquity",0x7fff88312664,0x7fff88327f2e -shared-library,"/System/Library/Frameworks/ServiceManagement.framework/Versions/A/ServiceManagement",0x7fff88144624,0x7fff8814b62f -shared-library,"/System/Library/PrivateFrameworks/ChunkingLibrary.framework/Versions/A/ChunkingLibrary",0x7fff92ca44b0,0x7fff92cb94ca -shared-library,"/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio",0x7fff8caad1c0,0x7fff8caf0428 -shared-library,"/System/Library/Frameworks/vecLib.framework/Versions/A/vecLib",0x7fff936ef000,0x7fff936ef000 -shared-library,"/System/Library/Frameworks/SecurityFoundation.framework/Versions/A/SecurityFoundation",0x7fff905815cc,0x7fff905b6c5b -shared-library,"/System/Library/PrivateFrameworks/CommerceKit.framework/Versions/A/Frameworks/CommerceCore.framework/Versions/A/CommerceCore",0x7fff938a3310,0x7fff938a8058 -shared-library,"/System/Library/Frameworks/CoreData.framework/Versions/A/CoreData",0x7fff8dea2540,0x7fff8e043800 -profiler,"begin",1 -code-creation,Stub,0x1e4e34306000,204,"CompareICStub" -code-creation,Stub,0x1e4e343060e0,794,"CEntryStub" -code-creation,Stub,0x1e4e34306400,168,"StoreBufferOverflowStub" -code-creation,Stub,0x1e4e343064c0,716,"RecordWriteStub" -code-creation,Stub,0x1e4e343067a0,173,"CompareICStub" -code-creation,Stub,0x1e4e34306860,232,"FastCloneShallowArrayStub" -code-creation,Stub,0x1e4e34306960,214,"CompareICStub" -code-creation,Stub,0x1e4e34306a40,1638,"RecordWriteStub" -code-creation,Stub,0x1e4e343070c0,138,"ToBooleanStub" -code-creation,Stub,0x1e4e34307160,139,"ToNumberStub" -code-creation,Stub,0x1e4e34307200,122,"ToBooleanStub" -code-creation,Stub,0x1e4e34307280,1638,"RecordWriteStub" -code-creation,Stub,0x1e4e34307900,260,"NumberToStringStub" -code-creation,Stub,0x1e4e34307a20,972,"StringDictionaryLookupStub" -code-creation,Stub,0x1e4e34307e00,204,"CompareICStub" -code-creation,Stub,0x1e4e34307ee0,146,"BinaryOpStub" -code-creation,Stub,0x1e4e34307f80,1690,"StringAddStub" -code-creation,Stub,0x1e4e34308620,1644,"RecordWriteStub" -code-creation,Stub,0x1e4e34308ca0,302,"BinaryOpStub" -code-creation,Stub,0x1e4e34308de0,173,"CompareICStub" -code-creation,Stub,0x1e4e34308ea0,388,"StoreBufferOverflowStub" -code-creation,Stub,0x1e4e34309040,1674,"RecordWriteStub" -code-creation,Stub,0x1e4e343096e0,244,"CallFunctionStub" -code-creation,Builtin,0x1e4e343097e0,260,"A builtin from the snapshot" -code-creation,Stub,0x1e4e34309900,244,"CallFunctionStub" -code-creation,Stub,0x1e4e34309a00,1458,"StringAddStub" -code-creation,Stub,0x1e4e34309fc0,146,"BinaryOpStub" -code-creation,Stub,0x1e4e3430a060,146,"BinaryOpStub" -code-creation,Stub,0x1e4e3430a100,173,"CompareICStub" -code-creation,Stub,0x1e4e3430a1c0,1698,"RecordWriteStub" -code-creation,Stub,0x1e4e3430a880,204,"KeyedLoadElementStub" -code-creation,Builtin,0x1e4e3430a960,120,"A builtin from the snapshot" -code-creation,Stub,0x1e4e3430a9e0,228,"FastNewContextStub" -code-creation,Stub,0x1e4e3430aae0,173,"CompareICStub" -code-creation,Stub,0x1e4e3430aba0,113,"InterruptStub" -code-creation,Stub,0x1e4e3430ac20,511,"ArgumentsAccessStub" -code-creation,Stub,0x1e4e3430ae20,972,"StringDictionaryLookupStub" -code-creation,Stub,0x1e4e3430b200,113,"StackCheckStub" -code-creation,Stub,0x1e4e3430b280,268,"FastCloneShallowArrayStub" -code-creation,Stub,0x1e4e3430b3a0,173,"CompareICStub" -code-creation,Stub,0x1e4e3430b460,258,"FastCloneShallowObjectStub" -code-creation,Stub,0x1e4e3430b580,165,"ToBooleanStub" -code-creation,Stub,0x1e4e3430b640,302,"BinaryOpStub" -code-creation,Stub,0x1e4e3430b780,1145,"CEntryStub" -code-creation,Stub,0x1e4e3430bc00,1657,"RecordWriteStub" -code-creation,Stub,0x1e4e3430c280,151,"ToBooleanStub" -code-creation,Stub,0x1e4e3430c320,187,"CompareICStub" -code-creation,Stub,0x1e4e3430c3e0,232,"FastCloneShallowArrayStub" -code-creation,Stub,0x1e4e3430c4e0,565,"CompareStub" -code-creation,Stub,0x1e4e3430c720,243,"FastNewContextStub" -code-creation,Stub,0x1e4e3430c820,1644,"RecordWriteStub" -code-creation,Stub,0x1e4e3430cea0,1644,"RecordWriteStub" -code-creation,Stub,0x1e4e3430d520,244,"CallFunctionStub" -code-creation,Stub,0x1e4e3430d620,173,"CompareICStub" -code-creation,Stub,0x1e4e3430d6e0,722,"RecordWriteStub" -code-creation,Stub,0x1e4e3430d9c0,203,"BinaryOpStub" -code-creation,Stub,0x1e4e3430daa0,1687,"StringAddStub" -code-creation,Stub,0x1e4e3430e140,260,"FastCloneShallowArrayStub" -code-creation,Stub,0x1e4e3430e260,242,"FastCloneShallowObjectStub" -code-creation,Stub,0x1e4e3430e360,1653,"RecordWriteStub" -code-creation,Stub,0x1e4e3430e9e0,272,"StringCompareStub" -code-creation,Stub,0x1e4e3430eb00,1656,"RecordWriteStub" -code-creation,Stub,0x1e4e3430f180,1674,"RecordWriteStub" -code-creation,Stub,0x1e4e3430f820,1497,"StringAddStub" -code-creation,Stub,0x1e4e3430fe00,146,"BinaryOpStub" -code-creation,Stub,0x1e4e3430fea0,146,"BinaryOpStub" -code-creation,Stub,0x1e4e3430ff40,146,"BinaryOpStub" -code-creation,Stub,0x1e4e3430ffe0,253,"FastNewClosureStub" -code-creation,Stub,0x1e4e343100e0,991,"StringDictionaryLookupStub" -code-creation,Stub,0x1e4e343104c0,1641,"RecordWriteStub" -code-creation,Stub,0x1e4e34310b40,1695,"RecordWriteStub" -code-creation,Stub,0x1e4e343111e0,383,"JSEntryStub" -code-creation,Stub,0x1e4e34311360,383,"JSEntryStub" -code-creation,Stub,0x1e4e343114e0,712,"RecordWriteStub" -code-creation,Stub,0x1e4e343117c0,302,"BinaryOpStub" -code-creation,Stub,0x1e4e34311900,196,"CallConstructStub" -code-creation,Stub,0x1e4e343119e0,217,"ArgumentsAccessStub" -code-creation,Stub,0x1e4e34311ac0,204,"BinaryOpStub" -code-creation,CallIC,0x1e4e34311ba0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34311ca0,243,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34311da0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34311ea0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34311fa0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343120a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343121a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343122a0,244,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343123a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343124a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343125a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343126a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343127a0,241,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343128a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343129a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34312aa0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34312ba0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34312ca0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34312da0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34312ea0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34312fa0,243,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343130a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343131a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343132a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343133a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343134a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343135a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343136a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343137a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343138a0,244,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343139a0,244,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34313aa0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34313ba0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34313ca0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34313da0,244,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34313ea0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34313fa0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343140a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343141a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343142a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343143a0,244,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343144a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343145a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343146a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343147a0,255,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343148a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e343149a0,246,"A call IC from the snapshot" -code-creation,CallIC,0x1e4e34314aa0,246,"A call IC from the snapshot" -code-creation,Builtin,0x1e4e34314ba0,183,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34314c60,181,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34314f60,160,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34315000,577,"A builtin from the snapshot" -code-creation,LoadIC,0x1e4e34315400,120,"A load IC from the snapshot" -code-creation,KeyedLoadIC,0x1e4e34315840,120,"A keyed load IC from the snapshot" -code-creation,KeyedStoreIC,0x1e4e34316400,121,"A keyed store IC from the snapshot" -code-creation,StoreIC,0x1e4e34318060,121,"A store IC from the snapshot" -code-creation,Builtin,0x1e4e34323b20,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34323ba0,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34323c20,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34323ca0,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34323d20,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34323da0,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34323e20,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34323ea0,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34323f20,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34323fa0,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324020,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e343240a0,120,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324120,120,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e343241a0,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324220,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e343242a0,115,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324320,648,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e343245c0,554,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324800,206,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e343248e0,177,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e343249a0,160,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324a40,224,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324b20,224,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324c00,189,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324cc0,120,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324d40,120,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324dc0,120,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324e40,121,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324ec0,121,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324f40,121,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34324fc0,121,"A builtin from the snapshot" -code-creation,LoadIC,0x1e4e34325040,120,"A load IC from the snapshot" -code-creation,LoadIC,0x1e4e343250c0,353,"A load IC from the snapshot" -code-creation,LoadIC,0x1e4e34325240,128,"A load IC from the snapshot" -code-creation,LoadIC,0x1e4e343252c0,131,"A load IC from the snapshot" -code-creation,LoadIC,0x1e4e34325360,178,"A load IC from the snapshot" -code-creation,LoadIC,0x1e4e34325420,168,"A load IC from the snapshot" -code-creation,LoadIC,0x1e4e343254e0,330,"A load IC from the snapshot" -code-creation,KeyedLoadIC,0x1e4e34325640,120,"A keyed load IC from the snapshot" -code-creation,KeyedLoadIC,0x1e4e343256c0,1018,"A keyed load IC from the snapshot" -code-creation,KeyedLoadIC,0x1e4e34325ac0,739,"A keyed load IC from the snapshot" -code-creation,KeyedLoadIC,0x1e4e34325dc0,188,"A keyed load IC from the snapshot" -code-creation,KeyedLoadIC,0x1e4e34325e80,307,"A keyed load IC from the snapshot" -code-creation,StoreIC,0x1e4e34325fc0,212,"A store IC from the snapshot" -code-creation,StoreIC,0x1e4e343260a0,424,"A store IC from the snapshot" -code-creation,StoreIC,0x1e4e34326260,351,"A store IC from the snapshot" -code-creation,StoreIC,0x1e4e343263c0,125,"A store IC from the snapshot" -code-creation,StoreIC,0x1e4e34326440,121,"A store IC from the snapshot" -code-creation,StoreIC,0x1e4e343264c0,212,"A store IC from the snapshot" -code-creation,StoreIC,0x1e4e343265a0,424,"A store IC from the snapshot" -code-creation,StoreIC,0x1e4e34326760,351,"A store IC from the snapshot" -code-creation,StoreIC,0x1e4e343268c0,125,"A store IC from the snapshot" -code-creation,KeyedStoreIC,0x1e4e34326940,1351,"A keyed store IC from the snapshot" -code-creation,KeyedStoreIC,0x1e4e34326ea0,121,"A keyed store IC from the snapshot" -code-creation,KeyedStoreIC,0x1e4e34326f20,1351,"A keyed store IC from the snapshot" -code-creation,KeyedStoreIC,0x1e4e34327480,401,"A keyed store IC from the snapshot" -code-creation,Builtin,0x1e4e34327620,476,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34327800,483,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34327a00,483,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34327c00,492,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34327e00,831,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34328140,831,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34328480,816,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e343287c0,501,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e343289c0,930,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34328d80,179,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34328e40,181,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34328f00,215,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34328fe0,217,"A builtin from the snapshot" -code-creation,LoadIC,0x1e4e343290c0,181,"A load IC from the snapshot" -code-creation,KeyedLoadIC,0x1e4e34329180,181,"A keyed load IC from the snapshot" -code-creation,StoreIC,0x1e4e34329240,183,"A store IC from the snapshot" -code-creation,KeyedStoreIC,0x1e4e34329300,183,"A keyed store IC from the snapshot" -code-creation,Builtin,0x1e4e343293c0,97,"A builtin from the snapshot" -code-creation,Builtin,0x1e4e34329440,137,"A builtin from the snapshot" -code-creation,Script,0x1e4e34314d20,552,"native regexp.js",0xe66230ec50, -code-creation,LazyCompile,0x1e4e34315260,388,"RegExpConstructor native regexp.js:86",0xe66230fed0, -code-creation,LazyCompile,0x1e4e34315480,280,"RegExpMakeCaptureGetter native regexp.js:363",0xe6623106e8, -code-creation,LazyCompile,0x1e4e343155a0,668," native regexp.js:364",0xe6623107a0, -code-creation,LazyCompile,0x1e4e343158c0,2304,"SetUpRegExp native regexp.js:403",0xe6623108e8, -code-creation,LazyCompile,0x1e4e343161c0,292,"SetUpRegExp.a native regexp.js:422",0xe6623109a0, -code-creation,LazyCompile,0x1e4e34316300,256,"SetUpRegExp.c native regexp.js:426",0xe662310ab8, -code-creation,LazyCompile,0x1e4e34316480,204,"SetUpRegExp.h native regexp.js:447",0xe662310bd0, -code-creation,LazyCompile,0x1e4e34316560,296,"SetUpRegExp.i native regexp.js:448",0xe662310ce0, -code-creation,LazyCompile,0x1e4e343166a0,196,"SetUpRegExp.k native regexp.js:457",0xe662310df8, -code-creation,Script,0x1e4e34316780,336,"native array.js",0xe662310fb8, -code-creation,LazyCompile,0x1e4e343168e0,2544,"SetUpArray native array.js:1469",0xe662315768, -code-creation,LazyCompile,0x1e4e343172e0,340,"SetUpArray.b native array.js:1482",0xe662315820, -code-creation,Script,0x1e4e34317440,1040,"native date.js",0xe6623159a8, -code-creation,LazyCompile,0x1e4e34317860,2032,"SetUpDate native date.js:809",0xe66231a238, -code-creation,LazyCompile,0x1e4e343180e0,1708," native date.js:145",0xe66231a350, -code-creation,Script,0x1e4e343187a0,2632,"native messages.js",0xe66231a6c0, -code-creation,LazyCompile,0x1e4e34319200,360,"MakeGenericError native messages.js:109",0xe66231d590, -code-creation,LazyCompile,0x1e4e34319380,248,"MakeRangeError native messages.js:311",0xe66231d918, -code-creation,LazyCompile,0x1e4e34319480,468,"DefineOneShotAccessor native messages.js:759",0xe66231e5e8, -code-creation,LazyCompile,0x1e4e34319660,404,"DefineOneShotAccessor.h native messages.js:765",0xe66231e6a0, -code-creation,LazyCompile,0x1e4e34319800,324,"DefineOneShotAccessor.i native messages.js:773",0xe66231e7b0, -code-creation,LazyCompile,0x1e4e34319960,556,"captureStackTrace native messages.js:1100",0xe66231f630, -code-creation,LazyCompile,0x1e4e34319ba0,228," native messages.js:1109",0xe66231f6e8, -code-creation,LazyCompile,0x1e4e34319ca0,544,"SetUpError native messages.js:1115",0xe66231f830, -code-creation,LazyCompile,0x1e4e34319ec0,916,"SetUpError.a native messages.js:1118",0xe66231f8e8, -code-creation,LazyCompile,0x1e4e3431a260,196,"SetUpError.d native messages.js:1134",0xe66231f9a0, -code-creation,LazyCompile,0x1e4e3431a340,640,"SetUpError.a native messages.js:1144",0xe66231fa88, -code-creation,LazyCompile,0x1e4e3431a5c0,280,"SetUpError.a native messages.js:1155",0xe66231fb40, -code-creation,LazyCompile,0x1e4e3431a340,640,"Error",0xe66231fcc0, -code-creation,LazyCompile,0x1e4e3431a340,640,"TypeError",0xe66231fd58, -code-creation,LazyCompile,0x1e4e3431a340,640,"RangeError",0xe66231fdf0, -code-creation,LazyCompile,0x1e4e3431a340,640,"SyntaxError",0xe66231fe88, -code-creation,LazyCompile,0x1e4e3431a340,640,"ReferenceError",0xe66231ff20, -code-creation,LazyCompile,0x1e4e3431a340,640,"EvalError",0xe66231ffb8, -code-creation,LazyCompile,0x1e4e3431a340,640,"URIError",0xe662320050, -code-creation,LazyCompile,0x1e4e3431a6e0,264," native messages.js:126",0xe6623202e8, -code-creation,Script,0x1e4e3431a800,352,"native apinatives.js",0xe662320470, -code-creation,Script,0x1e4e3431a960,980,"native string.js",0xe6623208a0, -code-creation,LazyCompile,0x1e4e3431ad40,1616,"SetUpString native string.js:940",0xe662324618, -code-creation,LazyCompile,0x1e4e3431b3a0,472," native string.js:36",0xe662324700, -code-creation,Script,0x1e4e3431b580,2568,"native v8natives.js",0xe662324a50, -code-creation,LazyCompile,0x1e4e3431bfa0,668,"InstallFunctions native v8natives.js:48",0xe662324fc8, -code-creation,LazyCompile,0x1e4e3431c240,980,"SetUpLockedPrototype native v8natives.js:67",0xe6623285d0, -code-creation,LazyCompile,0x1e4e3431c620,672,"SetUpGlobal native v8natives.js:177",0xe6623289f0, -code-creation,LazyCompile,0x1e4e3431c8c0,552,"hasOwnProperty native v8natives.js:249",0xe662328ca0, -code-creation,LazyCompile,0x1e4e3431cb00,1140,"SetUpObject native v8natives.js:1286",0xe66232a720, -code-creation,LazyCompile,0x1e4e3431cf80,364,"SetUpBoolean native v8natives.js:1351",0xe66232a938, -code-creation,LazyCompile,0x1e4e3431d100,1256,"SetUpNumber native v8natives.js:1489",0xe66232aee0, -code-creation,LazyCompile,0x1e4e3431d600,1120,"NewFunction native v8natives.js:1640",0xe66232b190, -code-creation,LazyCompile,0x1e4e3431da60,364,"SetUpFunction native v8natives.js:1668",0xe66232b2d8, -code-creation,LazyCompile,0x1e4e3431dbe0,380," native v8natives.js:205",0xe66232b3c0, -code-creation,LazyCompile,0x1e4e3431dd60,436," native v8natives.js:1271",0xe66232c240, -code-creation,LazyCompile,0x1e4e3431df20,420," native v8natives.js:1366",0xe66232c330, -code-creation,Script,0x1e4e3431e0e0,832,"native runtime.js",0xe66232c460, -code-creation,LazyCompile,0x1e4e3431e420,1884,"EQUALS native runtime.js:54",0xe66232c878, -code-creation,LazyCompile,0x1e4e3431eb80,428,"STRICT_EQUALS native runtime.js:100",0xe66232ded8, -code-creation,LazyCompile,0x1e4e3431ed40,1040,"COMPARE native runtime.js:120",0xe66232dfc8, -code-creation,LazyCompile,0x1e4e3431f160,696,"ADD native runtime.js:163",0xe66232e0e0, -code-creation,LazyCompile,0x1e4e3431f420,688,"STRING_ADD_LEFT native runtime.js:183",0xe66232e1e0, -code-creation,LazyCompile,0x1e4e3431f6e0,700,"STRING_ADD_RIGHT native runtime.js:198",0xe66232e2d0, -code-creation,LazyCompile,0x1e4e3431f9a0,356,"SUB native runtime.js:214",0xe66232e3c8, -code-creation,LazyCompile,0x1e4e3431fb20,356,"MUL native runtime.js:222",0xe66232e4c0, -code-creation,LazyCompile,0x1e4e3431fca0,356,"DIV native runtime.js:230",0xe66232e5b8, -code-creation,LazyCompile,0x1e4e3431fe20,356,"MOD native runtime.js:238",0xe66232e6b0, -code-creation,LazyCompile,0x1e4e3431ffa0,356,"BIT_OR native runtime.js:252",0xe66232e7a8, -code-creation,LazyCompile,0x1e4e34320120,464,"BIT_AND native runtime.js:260",0xe66232e8a0, -code-creation,LazyCompile,0x1e4e34320300,356,"BIT_XOR native runtime.js:282",0xe66232e998, -code-creation,LazyCompile,0x1e4e34320480,292,"UNARY_MINUS native runtime.js:290",0xe66232ea90, -code-creation,LazyCompile,0x1e4e343205c0,292,"BIT_NOT native runtime.js:297",0xe66232eb80, -code-creation,LazyCompile,0x1e4e34320700,356,"SHL native runtime.js:304",0xe66232ec70, -code-creation,LazyCompile,0x1e4e34320880,464,"SAR native runtime.js:312",0xe66232ed68, -code-creation,LazyCompile,0x1e4e34320a60,356,"SHR native runtime.js:334",0xe66232ee60, -code-creation,LazyCompile,0x1e4e34320be0,280,"DELETE native runtime.js:348",0xe66232ef58, -code-creation,LazyCompile,0x1e4e34320d00,536,"IN native runtime.js:354",0xe66232f050, -code-creation,LazyCompile,0x1e4e34320f20,844,"INSTANCE_OF native runtime.js:367",0xe66232f180, -code-creation,LazyCompile,0x1e4e34321280,284,"FILTER_KEY native runtime.js:398",0xe66232f2f8, -code-creation,LazyCompile,0x1e4e343213a0,496,"CALL_NON_FUNCTION native runtime.js:405",0xe66232f3f0, -code-creation,LazyCompile,0x1e4e343215a0,496,"CALL_NON_FUNCTION_AS_CONSTRUCTOR native runtime.js:414",0xe66232f520, -code-creation,LazyCompile,0x1e4e343217a0,340,"CALL_FUNCTION_PROXY native runtime.js:423",0xe66232f650, -code-creation,LazyCompile,0x1e4e34321900,312,"CALL_FUNCTION_PROXY_AS_CONSTRUCTOR native runtime.js:431",0xe66232f758, -code-creation,LazyCompile,0x1e4e34321a40,1240,"APPLY_PREPARE native runtime.js:438",0xe66232f858, -code-creation,LazyCompile,0x1e4e34321f20,284,"APPLY_OVERFLOW native runtime.js:476",0xe66232f9d0, -code-creation,LazyCompile,0x1e4e34322040,228,"TO_OBJECT native runtime.js:482",0xe66232fae0, -code-creation,LazyCompile,0x1e4e34322140,228,"TO_NUMBER native runtime.js:488",0xe66232fbc8, -code-creation,LazyCompile,0x1e4e34322240,228,"TO_STRING native runtime.js:494",0xe66232fcb0, -code-creation,LazyCompile,0x1e4e34322340,536,"ToPrimitive native runtime.js:506",0xe66232fd98, -code-creation,LazyCompile,0x1e4e34322560,496,"ToBoolean native runtime.js:517",0xe66232fe90, -code-creation,LazyCompile,0x1e4e34322760,540,"ToNumber native runtime.js:527",0xe66232ff80, -code-creation,LazyCompile,0x1e4e34322980,492,"ToString native runtime.js:550",0xe662330108, -code-creation,Script,0x1e4e34322b80,644,"native math.js",0xe662330788, -code-creation,LazyCompile,0x1e4e34322e20,196,"MathConstructor native math.js:37",0xe6623309c0, -code-creation,LazyCompile,0x1e4e34322f00,1556,"SetUpMath native math.js:223",0xe662331ef0, -code-creation,Script,0x1e4e34323520,344,"native uri.js",0xe662332010, -code-creation,LazyCompile,0x1e4e34323680,476,"SetUpUri native uri.js:410",0xe662333aa8, -code-creation,Script,0x1e4e34323860,340,"native json.js",0xe662333bc8, -code-creation,LazyCompile,0x1e4e343239c0,348,"SetUpJSON native json.js:340",0xe662334e08, -code-creation,LazyCompile,0x1e4e34323b20,115,"",0xe6623367a0, -code-creation,LazyCompile,0x1e4e34323b20,115,"",0xe662336838, -code-creation,LazyCompile,0x1e4e34328140,831,"Array",0xe6623368d0, -code-creation,LazyCompile,0x1e4e34323ea0,115,"unshift",0xe662336968, -code-creation,LazyCompile,0x1e4e34323f20,115,"slice",0xe662336a00, -code-creation,LazyCompile,0x1e4e34323da0,115,"pop",0xe662336a98, -code-creation,LazyCompile,0x1e4e34323fa0,115,"splice",0xe662336b30, -code-creation,LazyCompile,0x1e4e34324020,115,"concat",0xe662336bc8, -code-creation,LazyCompile,0x1e4e34323e20,115,"shift",0xe662336c60, -code-creation,LazyCompile,0x1e4e34323d20,115,"push",0xe662336cf8, -code-creation,LazyCompile,0x1e4e3431df20,420,"Number",0xe662336d90, -code-creation,LazyCompile,0x1e4e34327e00,831,"InternalArray",0xe662336e28, -code-creation,LazyCompile,0x1e4e34323b20,115,"OpaqueReference",0xe662336ec0, -code-creation,LazyCompile,0x1e4e34323b20,115,"JSON",0xe662336f58, -code-creation,LazyCompile,0x1e4e34315260,388,"RegExp",0xe662337018, -code-creation,LazyCompile,0x1e4e3431b3a0,472,"String",0xe6623370b0, -code-creation,LazyCompile,0x1e4e343180e0,1708,"Date",0xe662337148, -code-creation,LazyCompile,0x1e4e3431a6e0,264,"Script",0xe6623371e0, -code-creation,LazyCompile,0x1e4e3431d600,1120,"Function",0xe662337278, -code-creation,LazyCompile,0x1e4e3431dbe0,380,"Boolean",0xe662337310, -code-creation,LazyCompile,0x1e4e34323b20,115,"",0xe6623373a8, -code-creation,LazyCompile,0x1e4e34323b20,115,"",0xe662337440, -code-creation,LazyCompile,0x1e4e3431dd60,436,"Object",0xe6623374d8, -code-creation,LazyCompile,0x1e4e34327c00,492,"apply",0xe662337570, -code-creation,LazyCompile,0x1e4e34327a00,483,"call",0xe662337608, -code-creation,LazyCompile,0x1e4e34323ba0,115,"Empty",0xe6623376a0, -code-creation,LazyCompile,0x1e4e34323b20,115,"Arguments",0xe6623377b0, -code-creation,LazyCompile,0x1e4e343242a0,115,"ThrowTypeError",0xe662337848, -code-creation,LazyCompile,0x1e4e343241a0,115,"",0xe6623378e0, -code-creation,LazyCompile,0x1e4e34324220,115,"",0xe662337978, -code-creation,LazyCompile,0x1e4e34323b20,115,"",0xe662337a10, -tick,0x100288551,0x7fff5fbfea40,0,0x7fff5fbfec10,2 -code-creation,Stub,0x1e4e343294e0,255,"CallConstructStub_Recording" -code-creation,LazyCompile,0x1e4e343295e0,668,"Instantiate native apinatives.js:44",0xe6623206a8,~ -code-creation,Stub,0x1e4e34329880,184,"CompareICStub" -code-creation,Stub,0x1e4e34329940,143,"BinaryOpStub_BIT_AND_Alloc_Uninitialized" -code-creation,LazyCompile,0x1e4e343299e0,1200,"InstantiateFunction native apinatives.js:65",0xe662320740, -code-creation,Stub,0x1e4e34329ea0,257,"KeyedStoreElementStub" -code-creation,KeyedStoreIC,0x1e4e34329fc0,130,"" -code-creation,KeyedStoreIC,0x1e4e34329fc0,130,"args_count: 0" -code-creation,Stub,0x1e4e3432a060,276,"BinaryOpStub_BIT_AND_Alloc_SMI" -code-creation,Stub,0x1e4e3432a180,138,"ToBooleanStub_Smi" -code-creation,LazyCompile,0x1e4e3432a220,876,"ConfigureTemplateInstance native apinatives.js:105",0xe6623207d8, -code-creation,KeyedLoadIC,0x1e4e3432a5a0,130,"" -code-creation,KeyedLoadIC,0x1e4e3432a5a0,130,"args_count: 0" -code-creation,CallIC,0x1e4e3432a640,190,"InstantiateFunction" -code-creation,LoadIC,0x1e4e3432a700,147,"kApiFunctionCache" -code-creation,LoadIC,0x1e4e3432a700,147,"kApiFunctionCache" -tick,0x10024bcbd,0x7fff5fbff190,0,0x1e4e00000001,0,0x1e4e34329bf7,0x1e4e34329744 -code-creation,CallIC,0x1e4e3432a7a0,190,"ConfigureTemplateInstance" -code-creation,Stub,0x1e4e3432a860,173,"ToBooleanStub_UndefinedSpecObject" -code-creation,KeyedLoadIC,0x1e4e3432a920,130,"" -code-creation,KeyedLoadIC,0x1e4e3432a920,130,"args_count: 0" -code-creation,CallIC,0x1e4e3432a9c0,190,"Instantiate" -tick,0x7fff636cfd93,0x7fff5fbff788,0,0x0,4 -tick,0x10028b020,0x7fff5fbfd070,0,0x0,2 -code-creation,Script,0x1e4e3432aa80,240,"node.js",0xe66235abf0,~ -code-creation,Stub,0x1e4e3432ab80,250,"FastNewContextStub" -code-creation,Stub,0x1e4e3432ac80,238,"FastCloneShallowObjectStub" -code-creation,Function,0x1e4e3432ad80,220," node.js:65",0xe66235ae30,~ -code-creation,Stub,0x1e4e3432ae60,317,"CallFunctionStub_Args1_Recording" -tick,0x10018a6ad,0x7fff5fbfe408,0,0x7fff5fbfea68,2 -code-creation,Function,0x1e4e3432afa0,424," node.js:95",0xe66235af20,~ -code-creation,Function,0x1e4e3432b160,208," node.js:136",0xe66235b008,~ -code-creation,Function,0x1e4e3432b240,260," node.js:146",0xe66235b0f8,~ -code-creation,Function,0x1e4e3432b360,268," node.js:150",0xe66235b200,~ -code-creation,Function,0x1e4e3432b480,2680,"startup node.js:30",0xe66235b350,~ -code-creation,Stub,0x1e4e3432bf00,1645,"RecordWriteStub" -code-creation,Function,0x1e4e3432c580,936,"evalScript node.js:262",0xe66235b498,~ -code-creation,Function,0x1e4e3432c940,340,"errnoException node.js:286",0xe66235b5b8,~ -code-creation,Function,0x1e4e3432caa0,1176,"createWritableStdioStream node.js:296",0xe66235b720,~ -code-creation,Function,0x1e4e3432cf40,320,"NativeModule node.js:558",0xe66235b810,~ -code-creation,Function,0x1e4e3432d080,480,"startup.globalVariables node.js:158",0xe66235b8f8,~ -code-creation,Function,0x1e4e3432d260,292,"startup.globalTimeouts.global.setTimeout node.js:167",0xe66235b9f0,~ -code-creation,Function,0x1e4e3432d3a0,292,"startup.globalTimeouts.global.setInterval node.js:172",0xe66235bae8,~ -code-creation,Function,0x1e4e3432d4e0,292,"startup.globalTimeouts.global.clearTimeout node.js:177",0xe66235bbe0,~ -code-creation,Function,0x1e4e3432d620,292,"startup.globalTimeouts.global.clearInterval node.js:182",0xe66235bcd8,~ -code-creation,Function,0x1e4e3432d760,496,"startup.globalTimeouts node.js:166",0xe66235bdc0,~ -code-creation,Function,0x1e4e3432d960,220,"startup.globalConsole node.js:189",0xe66235bea8,~ -code-creation,Function,0x1e4e3432da40,252,"startup.globalConsole node.js:188",0xe66235bf90,~ -code-creation,Function,0x1e4e3432db40,304,"startup.lazyConstants node.js:197",0xe66235c078,~ -code-creation,Function,0x1e4e3432dc80,300,"startup.processAssert.process.assert node.js:209",0xe66235c190,~ -code-creation,Function,0x1e4e3432ddc0,304,"startup.processAssert node.js:205",0xe66235c278,~ -code-creation,Function,0x1e4e3432df00,308," node.js:222",0xe66235c370,~ -code-creation,Function,0x1e4e3432e040,712,"startup.processConfig node.js:214",0xe66235c460,~ -code-creation,Stub,0x1e4e3432e320,226,"FastNewContextStub" -code-creation,Stub,0x1e4e3432e420,311,"CallFunctionStub_Args0_Recording" -code-creation,Function,0x1e4e3432e560,864,"startup.processNextTick.process._tickCallback node.js:233",0xe66235c580,~ -code-creation,Function,0x1e4e3432e8c0,376,"startup.processNextTick.process.nextTick node.js:254",0xe66235c678,~ -code-creation,Function,0x1e4e3432ea40,464,"startup.processNextTick node.js:229",0xe66235c780,~ -code-creation,Stub,0x1e4e3432ec20,230,"FastNewContextStub" -code-creation,Function,0x1e4e3432ed20,312,"startup.processStdio.process.__defineGetter__.stdout.destroy.stdout.destroySoon node.js:358",0xe66235c890,~ -code-creation,Function,0x1e4e3432ee60,208,"startup.processStdio.process.__defineGetter__.stderr.destroy.stderr.destroySoon.er node.js:363",0xe66235c978,~ -code-creation,Function,0x1e4e3432ef40,508," node.js:355",0xe66235ca80,~ -code-creation,Function,0x1e4e3432f140,312,"startup.processStdio.process.__defineGetter__.stderr.destroy.stderr.destroySoon node.js:373",0xe66235cb90,~ -code-creation,Function,0x1e4e3432f280,420," node.js:370",0xe66235cc98,~ -code-creation,CallInitialize,0x1e4e3432f440,241,"args_count: 3" -code-creation,Function,0x1e4e3432f540,248,"startup.processStdio.process.__defineGetter__.stdin.pipe node.js:418",0xe66235cd90,~ -code-creation,Function,0x1e4e3432f640,1296,"startup.processStdio.process.openStdin node.js:380",0xe66235cf00,~ -code-creation,Function,0x1e4e3432fb60,252,"startup.processStdio.process.openStdin node.js:426",0xe66235cfe8,~ -code-creation,Function,0x1e4e3432fc60,452,"startup.processStdio node.js:352",0xe66235d100,~ -code-creation,Function,0x1e4e3432fe40,364,"startup.processKillAndExit.process.exit node.js:433",0xe66235d1f0,~ -code-creation,Stub,0x1e4e3432ffc0,317,"CallFunctionStub_Args2_Recording" -tick,0x7fff9125a801,0x7fff5fbfda30,0,0x7fff5fbfda60,2 -code-creation,Function,0x1e4e34330100,640,"startup.processKillAndExit.process.kill node.js:441",0xe66235d320,~ -code-creation,Function,0x1e4e34330380,312,"startup.processKillAndExit node.js:432",0xe66235d408,~ -code-creation,Function,0x1e4e343304c0,328,"isSignal node.js:475",0xe66235d4f8,~ -code-creation,Function,0x1e4e34330620,220,"startup.processSignalHandlers.process.on.process.addListener.w.callback node.js:486",0xe66235d5e0,~ -code-creation,Function,0x1e4e34330700,852,"startup.processSignalHandlers.process.on.process.addListener node.js:480",0xe66235d748,~ -code-creation,Function,0x1e4e34330a60,632,"startup.processSignalHandlers.process.removeListener node.js:498",0xe66235d8a0,~ -code-creation,Function,0x1e4e34330ce0,732,"startup.processSignalHandlers node.js:464",0xe66235d9c8,~ -code-creation,Function,0x1e4e34330fc0,632,"startup.processChannel node.js:513",0xe66235daf0,~ -code-creation,Function,0x1e4e34331240,620,"startup.resolveArgv0 node.js:535",0xe66235dbf8,~ -code-creation,Function,0x1e4e343314c0,624,"NativeModule.require node.js:568",0xe66235dd28,~ -code-creation,Function,0x1e4e34331740,216,"NativeModule.getCached node.js:592",0xe66235de18,~ -code-creation,Function,0x1e4e34331820,228,"NativeModule.exists node.js:596",0xe66235df08,~ -code-creation,Function,0x1e4e34331920,216,"NativeModule.getSource node.js:600",0xe66235dff8,~ -code-creation,Function,0x1e4e34331a00,268,"NativeModule.wrap node.js:604",0xe66235e0e8,~ -code-creation,Stub,0x1e4e34331b20,317,"CallFunctionStub_Args3_Recording" -code-creation,Stub,0x1e4e34331c60,317,"CallFunctionStub_Args4_Recording" -code-creation,Function,0x1e4e34331da0,484,"NativeModule.compile node.js:613",0xe66235e210,~ -code-creation,Function,0x1e4e34331fa0,236,"NativeModule.cache node.js:623",0xe66235e2f8,~ -code-creation,LazyCompile,0x1e4e343320a0,2228," node.js:27",0xe66235ab00,~ -code-creation,Stub,0x1e4e34332960,177,"ToBooleanStub_UndefinedString" -code-creation,CallPreMonomorphic,0x1e4e34332a20,238,"args_count: 0" -code-creation,KeyedLoadIC,0x1e4e34332b20,130,"" -code-creation,KeyedLoadIC,0x1e4e34332b20,130,"args_count: 0" -code-creation,Stub,0x1e4e34332bc0,201,"BinaryOpStub_ADD_OverwriteLeft_BothStrings" -tick,0x1001313a6,0x7fff5fbfcd00,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e3432b528,0x1e4e34332907 -code-creation,Script,0x1e4e34332ca0,240,"events.js",0xe66235fb88,~ -code-creation,Stub,0x1e4e34332da0,242,"FastNewContextStub" -code-creation,Stub,0x1e4e34332ea0,364,"InstanceofStub" -code-creation,Function,0x1e4e34333020,672,"EventEmitter events.js:25",0xe66235fd70,~ -code-creation,Function,0x1e4e343332c0,288,"EventEmitter.setMaxListeners events.js:46",0xe66235fe60,~ -code-creation,Function,0x1e4e343333e0,3060,"EventEmitter.emit events.js:54",0xe66235ffe8,~ -code-creation,Function,0x1e4e34333fe0,1512,"EventEmitter.addListener events.js:138",0xe662360128,~ -code-creation,Function,0x1e4e343345e0,272,"g events.js:190",0xe662360218,~ -code-creation,Function,0x1e4e34334700,620,"EventEmitter.once events.js:184",0xe662360370,~ -code-creation,Function,0x1e4e34334980,1300,"EventEmitter.removeListener events.js:201",0xe6623604b8,~ -code-creation,Function,0x1e4e34334ea0,536,"EventEmitter.removeAllListeners events.js:235",0xe6623605c0,~ -code-creation,Function,0x1e4e343350c0,636,"EventEmitter.listeners events.js:246",0xe6623606d0,~ -code-creation,LazyCompile,0x1e4e34335340,1124," events.js:1",0xe66235fa98,~ -code-creation,StoreIC,0x1e4e343357c0,185,"loaded" -code-creation,StoreIC,0x1e4e343357c0,185,"loaded" -code-creation,StoreIC,0x1e4e34335880,185,"value" -code-creation,StoreIC,0x1e4e34335880,185,"value" -code-creation,StoreIC,0x1e4e34335940,185,"constructor" -code-creation,StoreIC,0x1e4e34335940,185,"constructor" -code-creation,LazyCompile,0x1e4e34335a00,568,"create native v8natives.js:1038",0xe66232a000,~ -code-creation,LazyCompile,0x1e4e34335c40,940,"defineProperties native v8natives.js:1102",0xe66232a1c8,~ -code-creation,LazyCompile,0x1e4e34336000,692,"ToObject native runtime.js:567",0xe662330290,~ -tick,0x7fff636cf2b3,0x7fff5fbfe560,0,0x7fff5fbff1c0,2,0x1e4e34335d73,0x1e4e34335bea,0x1e4e3432b605,0x1e4e34332907 -code-creation,LazyCompile,0x1e4e343362c0,768,"GetOwnEnumerablePropertyNames native v8natives.js:1090",0xe66232a130,~ -code-creation,KeyedLoadIC,0x1e4e343365c0,130,"" -code-creation,KeyedLoadIC,0x1e4e343365c0,130,"args_count: 0" -code-creation,LazyCompile,0x1e4e34336660,1940,"ToPropertyDescriptor native v8natives.js:420",0xe662329550,~ -code-creation,LazyCompile,0x1e4e34336e00,528,"PropertyDescriptor native v8natives.js:482",0xe662329680,~ -code-creation,CallIC,0x1e4e34337020,189,"ToString" -code-creation,LazyCompile,0x1e4e343370e0,248,"$Array.enumerable_ native v8natives.js:516",0xe66232b570,~ -code-creation,StoreIC,0x1e4e343371e0,185,"value_" -code-creation,StoreIC,0x1e4e343371e0,185,"value_" -code-creation,StoreIC,0x1e4e343372a0,185,"hasValue_" -code-creation,StoreIC,0x1e4e343372a0,185,"hasValue_" -code-creation,LazyCompile,0x1e4e34337360,276,"IsInconsistentDescriptor native v8natives.js:367",0xe662329388,~ -code-creation,LazyCompile,0x1e4e34337480,340,"IsAccessorDescriptor native v8natives.js:347",0xe6623291c0,~ -code-creation,LazyCompile,0x1e4e343375e0,216,"$Array.set_ native v8natives.js:563",0xe66232bfa0,~ -code-creation,LazyCompile,0x1e4e343376c0,216," native v8natives.js:573",0xe66232c1a8,~ -code-creation,LazyCompile,0x1e4e343377a0,436,"DefineOwnProperty native v8natives.js:924",0xe662329d08,~ -code-creation,Stub,0x1e4e34337960,143,"BinaryOpStub_BIT_OR_Alloc_Uninitialized" -code-creation,LazyCompile,0x1e4e34337a00,4988,"DefineObjectProperty native v8natives.js:695",0xe662329bd8,~ -code-creation,LazyCompile,0x1e4e34338d80,644,"ConvertDescriptorArrayToDescriptor native v8natives.js:581",0xe662329718,~ -tick,0x10012f5cd,0x7fff5fbfec98,0,0x7fff5fbfefa8,2,0x1e4e34338839,0x1e4e3433793b,0x1e4e34335ee6,0x1e4e34335bea,0x1e4e3432b605,0x1e4e34332907 -code-creation,LazyCompile,0x1e4e34339020,216,"$Array.writable_ native v8natives.js:533",0xe66232b938,~ -code-creation,Stub,0x1e4e34339100,284,"BinaryOpStub_BIT_OR_Alloc_SMI" -code-creation,LazyCompile,0x1e4e34339220,216,"$Array.get_ native v8natives.js:550",0xe66232bd00,~ -code-creation,LazyCompile,0x1e4e34339300,340,"IsDataDescriptor native v8natives.js:354",0xe662329258,~ -code-creation,LazyCompile,0x1e4e34339460,216,"$Array.enumerable_ native v8natives.js:523",0xe66232b708,~ -code-creation,LazyCompile,0x1e4e34339540,216,"$Array.configurable_ native v8natives.js:543",0xe66232bb90,~ -code-creation,LoadIC,0x1e4e34339620,134,"hasValue_" -code-creation,LoadIC,0x1e4e34339620,134,"hasValue_" -code-creation,LazyCompile,0x1e4e343396c0,216,"$Array.enumerable_ native v8natives.js:520",0xe66232b670,~ -code-creation,CallIC,0x1e4e343397a0,157,"getCached" -code-creation,LoadIC,0x1e4e34339840,138,"_cache" -code-creation,LoadIC,0x1e4e34339840,138,"_cache" -code-creation,CallIC,0x1e4e343398e0,157,"exists" -code-creation,LoadIC,0x1e4e34339980,138,"_source" -code-creation,LoadIC,0x1e4e34339980,138,"_source" -code-creation,Stub,0x1e4e34339a20,1168,"StringDictionaryLookupStub" -code-creation,CallIC,0x1e4e34339ec0,559,"hasOwnProperty" -code-creation,LoadIC,0x1e4e3433a100,138,"moduleLoadList" -code-creation,LoadIC,0x1e4e3433a100,138,"moduleLoadList" -code-creation,Stub,0x1e4e3433a1a0,1596,"RecordWriteStub" -code-creation,Stub,0x1e4e3433a7e0,698,"RecordWriteStub" -code-creation,CallIC,0x1e4e3433aaa0,655,"push" -code-creation,Stub,0x1e4e3433ad40,734,"RecordWriteStub" -code-creation,StoreIC,0x1e4e3433b020,328,"filename" -code-creation,StoreIC,0x1e4e3433b020,328,"filename" -code-creation,StoreIC,0x1e4e3433b180,328,"id" -code-creation,StoreIC,0x1e4e3433b180,328,"id" -code-creation,StoreIC,0x1e4e3433b2e0,328,"exports" -code-creation,StoreIC,0x1e4e3433b2e0,328,"exports" -code-creation,StoreIC,0x1e4e3433b440,328,"loaded" -code-creation,StoreIC,0x1e4e3433b440,328,"loaded" -code-creation,CallMiss,0x1e4e3433b5a0,238,"args_count: 0" -code-creation,CallIC,0x1e4e3433b6a0,185,"compile" -code-creation,LoadIC,0x1e4e3433b760,134,"id" -code-creation,LoadIC,0x1e4e3433b760,134,"id" -code-creation,CallIC,0x1e4e3433b800,157,"getSource" -code-creation,CallIC,0x1e4e3433b8a0,157,"wrap" -code-creation,LoadIC,0x1e4e3433b940,138,"wrapper" -code-creation,LoadIC,0x1e4e3433b940,138,"wrapper" -code-creation,LoadIC,0x1e4e3433b9e0,134,"filename" -code-creation,LoadIC,0x1e4e3433b9e0,134,"filename" -tick,0x100289fad,0x7fff5fbfcbd8,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -tick,0x10026dcab,0x7fff5fbfd4e0,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,Script,0x1e4e3433ba80,240,"buffer.js",0xe6623618e0,~ -code-creation,LoadIC,0x1e4e3433bb80,134,"exports" -code-creation,LoadIC,0x1e4e3433bb80,134,"exports" -code-creation,LoadIC,0x1e4e3433bc20,140,"require" -code-creation,LoadIC,0x1e4e3433bc20,140,"require" -tick,0x100283b22,0x7fff5fbfddd0,0,0x7fff5fbfde80,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,Stub,0x1e4e3433bcc0,363,"FastNewContextStub" -code-creation,Function,0x1e4e3433be40,320,"toHex buffer.js:32",0xe662361a38,~ -code-creation,Function,0x1e4e3433bf80,296,"coerce buffer.js:193",0xe662361b28,~ -code-creation,Stub,0x1e4e3433c0c0,143,"BinaryOpStub_BIT_AND_OverwriteLeft_Uninitialized" -code-creation,CallInitialize,0x1e4e3433c160,241,"args_count: 4" -code-creation,Function,0x1e4e3433c260,2224,"Buffer buffer.js:204",0xe662361cd8,~ -code-creation,Function,0x1e4e3433cb20,508,"isArrayIsh buffer.js:268",0xe662361dc8,~ -code-creation,Function,0x1e4e3433cd20,324,"allocPool buffer.js:280",0xe662361ed0,~ -code-creation,Stub,0x1e4e3433ce80,143,"BinaryOpStub_SHL_Alloc_Uninitialized" -code-creation,Stub,0x1e4e3433cf20,143,"BinaryOpStub_BIT_OR_OverwriteRight_Uninitialized" -code-creation,Function,0x1e4e3433cfc0,752,"readUInt16 buffer.js:599",0xe662361fe0,~ -code-creation,Stub,0x1e4e3433d2c0,143,"BinaryOpStub_SHR_OverwriteLeft_Uninitialized" -code-creation,Function,0x1e4e3433d360,996,"readUInt32 buffer.js:633",0xe6623620f0,~ -code-creation,Stub,0x1e4e3433d760,143,"BinaryOpStub_MUL_OverwriteLeft_Uninitialized" -code-creation,Function,0x1e4e3433d800,736,"readInt16 buffer.js:736",0xe662362228,~ -code-creation,Function,0x1e4e3433dae0,740,"readInt32 buffer.js:767",0xe662362360,~ -code-creation,CallInitialize,0x1e4e3433dde0,241,"args_count: 5" -code-creation,Function,0x1e4e3433dee0,512,"readFloat buffer.js:798",0xe662362488,~ -code-creation,Function,0x1e4e3433e0e0,516,"readDouble buffer.js:819",0xe6623625b0,~ -code-creation,Function,0x1e4e3433e300,580,"verifuint buffer.js:850",0xe6623626a8,~ -code-creation,Function,0x1e4e3433e560,1004,"writeUInt16 buffer.js:881",0xe6623627d8,~ -code-creation,Stub,0x1e4e3433e960,143,"BinaryOpStub_SHR_Alloc_Uninitialized" -code-creation,Function,0x1e4e3433ea00,1256,"writeUInt32 buffer.js:915",0xe662362908,~ -code-creation,Function,0x1e4e3433ef00,580,"verifsint buffer.js:994",0xe662362a08,~ -code-creation,Function,0x1e4e3433f160,452,"verifIEEE754 buffer.js:1005",0xe662362b08,~ -tick,0x10014a0a2,0x7fff5fbfec28,0,0xffffffff,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,Stub,0x1e4e3433f340,317,"CallFunctionStub_Args5_Recording" -code-creation,Function,0x1e4e3433f480,996,"writeInt16 buffer.js:1037",0xe662362c58,~ -code-creation,Function,0x1e4e3433f880,1004,"writeInt32 buffer.js:1069",0xe662362da8,~ -code-creation,CallInitialize,0x1e4e3433fc80,241,"args_count: 6" -code-creation,Function,0x1e4e3433fd80,912,"writeFloat buffer.js:1101",0xe662362ee8,~ -code-creation,Function,0x1e4e34340120,920,"writeDouble buffer.js:1130",0xe662363028,~ -code-creation,Function,0x1e4e343404c0,672,"SlowBuffer.hexSlice buffer.js:38",0xe662363158,~ -code-creation,Function,0x1e4e34340760,1124,"SlowBuffer.toString buffer.js:53",0xe662363278,~ -code-creation,Stub,0x1e4e34340be0,143,"BinaryOpStub_MOD_Alloc_Uninitialized" -code-creation,Stub,0x1e4e34340c80,143,"BinaryOpStub_DIV_Alloc_Uninitialized" -code-creation,Function,0x1e4e34340d20,1080,"SlowBuffer.hexWrite buffer.js:92",0xe6623633c8,~ -code-creation,Function,0x1e4e34341160,1280,"SlowBuffer.write buffer.js:122",0xe662363500,~ -code-creation,Function,0x1e4e34341660,576,"SlowBuffer.slice buffer.js:179",0xe662363638,~ -code-creation,Function,0x1e4e343418a0,268,"isBuffer buffer.js:287",0xe662363738,~ -code-creation,Function,0x1e4e343419c0,808,"inspect buffer.js:293",0xe662363870,~ -code-creation,Function,0x1e4e34341d00,444,"get buffer.js:310",0xe662363990,~ -code-creation,Function,0x1e4e34341ec0,448,"set buffer.js:316",0xe662363ab8,~ -code-creation,Function,0x1e4e34342080,1656,"Buffer.write buffer.js:323",0xe662363bf8,~ -code-creation,Function,0x1e4e34342700,1456,"Buffer.toString buffer.js:392",0xe662363d18,~ -code-creation,Function,0x1e4e34342cc0,1212,"fill buffer.js:444",0xe662363e78,~ -code-creation,Function,0x1e4e34343180,1152,"Buffer.concat buffer.js:476",0xe662363fd0,~ -code-creation,Function,0x1e4e34343600,1428,"Buffer.copy buffer.js:509",0xe662364130,~ -code-creation,Function,0x1e4e34343ba0,620,"Buffer.slice buffer.js:550",0xe662364268,~ -code-creation,Function,0x1e4e34343e20,224,"Buffer.utf8Slice buffer.js:561",0xe662364360,~ -code-creation,Function,0x1e4e34343f00,224,"Buffer.binarySlice buffer.js:565",0xe662364458,~ -code-creation,Function,0x1e4e34343fe0,224,"Buffer.asciiSlice buffer.js:569",0xe662364550,~ -code-creation,Function,0x1e4e343440c0,224,"Buffer.utf8Write buffer.js:573",0xe662364648,~ -code-creation,Function,0x1e4e343441a0,224,"Buffer.binaryWrite buffer.js:577",0xe662364740,~ -code-creation,Function,0x1e4e34344280,224,"Buffer.asciiWrite buffer.js:581",0xe662364838,~ -code-creation,Function,0x1e4e34344360,500,"Buffer.readUInt8 buffer.js:585",0xe662364938,~ -code-creation,Function,0x1e4e34344560,248,"Buffer.readUInt16LE buffer.js:625",0xe662364a50,~ -code-creation,Function,0x1e4e34344660,248,"Buffer.readUInt16BE buffer.js:629",0xe662364b68,~ -code-creation,Function,0x1e4e34344760,248,"Buffer.readUInt32LE buffer.js:662",0xe662364c80,~ -code-creation,Function,0x1e4e34344860,248,"Buffer.readUInt32BE buffer.js:666",0xe662364d98,~ -code-creation,Function,0x1e4e34344960,612,"Buffer.readInt8 buffer.js:716",0xe662364ea0,~ -code-creation,Function,0x1e4e34344be0,248,"Buffer.readInt16LE buffer.js:759",0xe662364fb8,~ -code-creation,Function,0x1e4e34344ce0,248,"Buffer.readInt16BE buffer.js:763",0xe6623650d0,~ -code-creation,Function,0x1e4e34344de0,248,"Buffer.readInt32LE buffer.js:790",0xe6623651e8,~ -code-creation,Function,0x1e4e34344ee0,248,"Buffer.readInt32BE buffer.js:794",0xe662365300,~ -code-creation,Function,0x1e4e34344fe0,248,"Buffer.readFloatLE buffer.js:811",0xe662365418,~ -code-creation,Function,0x1e4e343450e0,248,"Buffer.readFloatBE buffer.js:815",0xe662365530,~ -code-creation,Function,0x1e4e343451e0,248,"Buffer.readDoubleLE buffer.js:832",0xe662365648,~ -code-creation,Function,0x1e4e343452e0,248,"Buffer.readDoubleBE buffer.js:836",0xe662365760,~ -code-creation,Function,0x1e4e343453e0,724,"Buffer.writeUInt8 buffer.js:862",0xe662365888,~ -code-creation,Function,0x1e4e343456c0,248,"Buffer.writeUInt16LE buffer.js:907",0xe6623659a8,~ -code-creation,Function,0x1e4e343457c0,248,"Buffer.writeUInt16BE buffer.js:911",0xe662365ac8,~ -code-creation,Function,0x1e4e343458c0,252,"Buffer.writeUInt32LE buffer.js:945",0xe662365be8,~ -code-creation,Function,0x1e4e343459c0,252,"Buffer.writeUInt32BE buffer.js:949",0xe662365d08,~ -code-creation,Function,0x1e4e34345ac0,856,"Buffer.writeInt8 buffer.js:1014",0xe662365e30,~ -code-creation,Function,0x1e4e34345e20,248,"Buffer.writeInt16LE buffer.js:1061",0xe662365f50,~ -code-creation,Function,0x1e4e34345f20,248,"Buffer.writeInt16BE buffer.js:1065",0xe662366070,~ -code-creation,Function,0x1e4e34346020,248,"Buffer.writeInt32LE buffer.js:1093",0xe662366190,~ -code-creation,Function,0x1e4e34346120,248,"Buffer.writeInt32BE buffer.js:1097",0xe6623662b0,~ -tick,0x10033f4c0,0x7fff5fbfe7e8,0,0x100189f88,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,Function,0x1e4e34346220,248,"Buffer.writeFloatLE buffer.js:1122",0xe6623663d0,~ -code-creation,Function,0x1e4e34346320,248,"Buffer.writeFloatBE buffer.js:1126",0xe6623664f0,~ -code-creation,Function,0x1e4e34346420,248,"Buffer.writeDoubleLE buffer.js:1151",0xe662366610,~ -code-creation,Function,0x1e4e34346520,248,"Buffer.writeDoubleBE buffer.js:1155",0xe662366730,~ -code-creation,LazyCompile,0x1e4e34346620,6104," buffer.js:1",0xe6623617f0,~ -code-creation,CallIC,0x1e4e34347e00,203,"Instantiate" -tick,0x10010d3a0,0x7fff5fbff298,1,0x1000162b8,4,0x1e4e34331eac,0x1e4e343316ef,0x1e4e34346c83,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,Script,0x1e4e34347ee0,240,"assert.js",0xe662368310,~ -code-creation,Stub,0x1e4e34347fe0,265,"FastNewContextStub" -code-creation,Function,0x1e4e34348100,560,"replacer assert.js:56",0xe6623685b0,~ -code-creation,Function,0x1e4e34348340,340,"truncate assert.js:69",0xe6623686a8,~ -code-creation,Stub,0x1e4e343484a0,270,"FastCloneShallowObjectStub" -code-creation,Function,0x1e4e343485c0,392,"fail assert.js:101",0xe6623687d8,~ -code-creation,Function,0x1e4e34348760,296,"ok assert.js:121",0xe6623688f0,~ -code-creation,Function,0x1e4e343488a0,1816,"_deepEqual assert.js:152",0xe662368a10,~ -code-creation,Function,0x1e4e34348fc0,308,"isUndefinedOrNull assert.js:197",0xe662368b00,~ -code-creation,Function,0x1e4e34349100,304,"isArguments assert.js:201",0xe662368bf0,~ -code-creation,Function,0x1e4e34349240,1624,"objEquiv assert.js:205",0xe662368d90, -code-creation,Function,0x1e4e343498a0,508,"expectedException assert.js:275",0xe662368e88,~ -tick,0x1003401f0,0x7fff5fbfe2d8,0,0x1003402ac,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34346c83,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,Function,0x1e4e34349aa0,1040,"_throws assert.js:291",0xe662369010, -code-creation,Function,0x1e4e34349ec0,548,"AssertionError assert.js:40",0xe662369118,~ -code-creation,Stub,0x1e4e3434a100,532,"FastCloneShallowArrayStub" -code-creation,Stub,0x1e4e3434a320,330,"StoreArrayLiteralElementStub" -code-creation,Function,0x1e4e3434a480,896,"assert.AssertionError.toString assert.js:77",0xe662369230,~ -code-creation,Function,0x1e4e3434a800,340,"equal assert.js:130",0xe662369360,~ -code-creation,Function,0x1e4e3434a960,340,"notEqual assert.js:137",0xe662369490,~ -code-creation,Function,0x1e4e3434aac0,364,"deepEqual assert.js:146",0xe6623695d0,~ -code-creation,Function,0x1e4e3434ac40,364,"notDeepEqual assert.js:251",0xe662369710,~ -code-creation,Function,0x1e4e3434adc0,340,"strictEqual assert.js:260",0xe662369840,~ -code-creation,Function,0x1e4e3434af20,340,"notStrictEqual assert.js:269",0xe662369970,~ -code-creation,Function,0x1e4e3434b080,484,"assert.throws assert.js:325",0xe662369aa8,~ -code-creation,Function,0x1e4e3434b280,484,"assert.doesNotThrow assert.js:330",0xe662369be0,~ -code-creation,Function,0x1e4e3434b480,220,"assert.ifError assert.js:334",0xe662369cd0,~ -code-creation,LazyCompile,0x1e4e3434b560,1888," assert.js:1",0xe662368220,~ -code-creation,Script,0x1e4e3434bcc0,240,"util.js",0xe66236a968,~ -tick,0x10019bf37,0x7fff5fbfd6b0,0,0x102039738,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3434b85c,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34346c83,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,Function,0x1e4e3434bdc0,440,"inspect util.js:119",0xe66236b420,~ -code-creation,Function,0x1e4e3434bf80,384,"stylizeWithColor util.js:161",0xe66236b520,~ -code-creation,Function,0x1e4e3434c100,188,"stylizeNoColor util.js:173",0xe66236b618,~ -code-creation,Function,0x1e4e3434c1c0,208," util.js:181",0xe66236b710,~ -code-creation,Function,0x1e4e3434c2a0,328,"arrayToHash util.js:178",0xe66236b810,~ -code-creation,Stub,0x1e4e3434c400,232,"FastNewContextStub" -code-creation,Stub,0x1e4e3434c500,317,"CallFunctionStub_Args6_Recording" -code-creation,Function,0x1e4e3434c640,264," util.js:278",0xe66236b920,~ -code-creation,Function,0x1e4e3434c760,3516,"formatValue util.js:189",0xe66236bb98,~ -code-creation,Function,0x1e4e3434d520,1508,"formatPrimitive util.js:289",0xe66236bc98,~ -code-creation,Function,0x1e4e3434db20,292,"formatError util.js:313",0xe66236bd88,~ -code-creation,Function,0x1e4e3434dc60,544," util.js:328",0xe66236be98,~ -code-creation,Function,0x1e4e3434de80,1028,"formatArray util.js:318",0xe66236c038,~ -code-creation,Function,0x1e4e3434e2a0,208," util.js:364",0xe66236c128,~ -code-creation,Function,0x1e4e3434e380,208,"str util.js:368",0xe66236c218,~ -code-creation,Function,0x1e4e3434e460,3044,"formatProperty util.js:338",0xe66236c388,~ -code-creation,Function,0x1e4e3434f060,460," util.js:399",0xe66236c480,~ -tick,0x7fff9199e6fe,0x7fff5fbfddf8,0,0x7fff9125a857,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3434b85c,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34346c83,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,Function,0x1e4e3434f240,676,"reduceToSingleString util.js:397",0xe66236c598,~ -code-creation,Function,0x1e4e3434f500,452,"isArray util.js:420",0xe66236c6a8,~ -code-creation,Function,0x1e4e3434f6e0,384,"isRegExp util.js:427",0xe66236c7b8,~ -code-creation,Function,0x1e4e3434f860,384,"isDate util.js:433",0xe66236c8c8,~ -code-creation,Function,0x1e4e3434f9e0,384,"isError util.js:439",0xe66236c9d8,~ -code-creation,Function,0x1e4e3434fb60,256,"objectToString util.js:445",0xe66236cac8,~ -code-creation,Function,0x1e4e3434fc60,324,"pad util.js:457",0xe66236cbb8,~ -code-creation,Stub,0x1e4e3434fdc0,514,"FastCloneShallowArrayStub" -code-creation,Function,0x1e4e3434ffe0,736,"timestamp util.js:466",0xe66236cd00,~ -code-creation,Function,0x1e4e343502c0,260,"hasOwnProperty util.js:560",0xe66236cdf8,~ -code-creation,Function,0x1e4e343503e0,820," util.js:35",0xe66236cee8,~ -code-creation,Function,0x1e4e34350720,1660,"exports.format util.js:23",0xe66236d068,~ -code-creation,Function,0x1e4e34350da0,468,"deprecated util.js:66",0xe66236d158,~ -code-creation,Function,0x1e4e34350f80,488,"exports.deprecate util.js:60",0xe66236d288,~ -code-creation,Function,0x1e4e34351180,492,"exports.print util.js:82",0xe66236d388,~ -code-creation,Function,0x1e4e34351380,512,"exports.puts util.js:89",0xe66236d488,~ -code-creation,Function,0x1e4e34351580,280,"exports.debug util.js:96",0xe66236d578,~ -code-creation,Function,0x1e4e343516a0,576,"exports.error util.js:101",0xe66236d690,~ -code-creation,Function,0x1e4e343518e0,480," util.js:450",0xe66236d7b0,~ -code-creation,Function,0x1e4e34351ac0,300,"exports.log util.js:475",0xe66236d8c0,~ -code-creation,Function,0x1e4e34351c00,300," util.js:480",0xe66236d9d0,~ -code-creation,Function,0x1e4e34351d40,344,"call util.js:488",0xe66236daf0,~ -code-creation,Function,0x1e4e34351ea0,280,"exports.pump util.js:495",0xe66236dbe0,~ -code-creation,Function,0x1e4e34351fc0,208,"exports.pump util.js:499",0xe66236dcc8,~ -code-creation,Function,0x1e4e343520a0,208,"exports.pump util.js:503",0xe66236ddb0,~ -code-creation,Function,0x1e4e34352180,224,"exports.pump util.js:507",0xe66236deb8,~ -code-creation,Function,0x1e4e34352260,252,"exports.pump util.js:511",0xe66236dfc8,~ -code-creation,Function,0x1e4e34352360,252,"exports.pump util.js:516",0xe66236e0d8,~ -code-creation,Function,0x1e4e34352460,808,"exports.pump util.js:485",0xe66236e228,~ -code-creation,Stub,0x1e4e343527a0,262,"FastCloneShallowObjectStub" -code-creation,Function,0x1e4e343528c0,400,"exports.inherits util.js:536",0xe66236e320,~ -code-creation,Function,0x1e4e34352a60,532,"exports._extend util.js:548",0xe66236e428,~ -code-creation,LazyCompile,0x1e4e34352c80,3188," util.js:1",0xe66236a878,~ -code-creation,LazyCompile,0x1e4e34353900,2112,"DoConstructRegExp native regexp.js:35",0xe66230ee68,~ -code-creation,LazyCompile,0x1e4e34354140,1636,"charAt native string.js:66",0xe662322d28,~ -code-creation,Stub,0x1e4e343547c0,211,"CompareICStub" -code-creation,LoadIC,0x1e4e343548a0,157,"process" -code-creation,LoadIC,0x1e4e343548a0,157,"process" -code-creation,LoadIC,0x1e4e34354940,220,"" -code-creation,LoadIC,0x1e4e34354940,220,"" -code-creation,CallIC,0x1e4e34354a20,185,"cache" -code-creation,StoreIC,0x1e4e34354ae0,185,"exports" -code-creation,StoreIC,0x1e4e34354ae0,185,"exports" -tick,0x100186530,0x7fff5fbff1a0,0,0x1e4e34325041,0,0x1e4e3435295e,0x1e4e3434b99f,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34346c83,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,StoreIC,0x1e4e34354ba0,185,"value" -code-creation,StoreIC,0x1e4e34354ba0,185,"value" -code-creation,LoadIC,0x1e4e34354c60,147,"$Object" -code-creation,LoadIC,0x1e4e34354c60,147,"$Object" -code-creation,CallIC,0x1e4e34354d00,190,"ObjectDefineProperties" -code-creation,CallIC,0x1e4e34354dc0,190,"ToObject" -code-creation,CallIC,0x1e4e34354e80,190,"GetOwnEnumerablePropertyNames" -code-creation,LoadIC,0x1e4e34354f40,147,"InternalArray" -code-creation,LoadIC,0x1e4e34354f40,147,"InternalArray" -code-creation,CallIC,0x1e4e34354fe0,655,"push" -code-creation,KeyedLoadIC,0x1e4e34355280,154,"constructor" -code-creation,KeyedLoadIC,0x1e4e34355280,154,"constructor" -code-creation,CallIC,0x1e4e34355320,190,"ToPropertyDescriptor" -code-creation,LoadIC,0x1e4e343553e0,147,"PropertyDescriptor" -code-creation,LoadIC,0x1e4e343553e0,147,"PropertyDescriptor" -code-creation,StoreIC,0x1e4e34355480,300,"value_" -code-creation,StoreIC,0x1e4e34355480,300,"value_" -code-creation,StoreIC,0x1e4e343555c0,300,"hasValue_" -code-creation,StoreIC,0x1e4e343555c0,300,"hasValue_" -code-creation,StoreIC,0x1e4e34355700,300,"writable_" -code-creation,StoreIC,0x1e4e34355700,300,"writable_" -code-creation,StoreIC,0x1e4e34355840,300,"hasWritable_" -code-creation,StoreIC,0x1e4e34355840,300,"hasWritable_" -code-creation,StoreIC,0x1e4e34355980,300,"enumerable_" -code-creation,StoreIC,0x1e4e34355980,300,"enumerable_" -code-creation,StoreIC,0x1e4e34355ac0,300,"hasEnumerable_" -code-creation,StoreIC,0x1e4e34355ac0,300,"hasEnumerable_" -code-creation,StoreIC,0x1e4e34355c00,300,"configurable_" -code-creation,StoreIC,0x1e4e34355c00,300,"configurable_" -code-creation,StoreIC,0x1e4e34355d40,300,"hasConfigurable_" -code-creation,StoreIC,0x1e4e34355d40,300,"hasConfigurable_" -code-creation,StoreIC,0x1e4e34355e80,300,"get_" -code-creation,StoreIC,0x1e4e34355e80,300,"get_" -code-creation,StoreIC,0x1e4e34355fc0,300,"hasGetter_" -code-creation,StoreIC,0x1e4e34355fc0,300,"hasGetter_" -code-creation,StoreIC,0x1e4e34356100,300,"set_" -code-creation,StoreIC,0x1e4e34356100,300,"set_" -code-creation,StoreIC,0x1e4e34356240,300,"hasSetter_" -code-creation,StoreIC,0x1e4e34356240,300,"hasSetter_" -code-creation,LazyCompile,0x1e4e34356380,248,"$Array.writable_ native v8natives.js:526",0xe66232b7a0,~ -code-creation,StoreIC,0x1e4e34356480,185,"enumerable_" -code-creation,StoreIC,0x1e4e34356480,185,"enumerable_" -code-creation,StoreIC,0x1e4e34356540,185,"hasEnumerable_" -code-creation,StoreIC,0x1e4e34356540,185,"hasEnumerable_" -code-creation,LazyCompile,0x1e4e34356600,248,"$Array.get_ native v8natives.js:546",0xe66232bc28,~ -code-creation,StoreIC,0x1e4e34356700,185,"configurable_" -code-creation,StoreIC,0x1e4e34356700,185,"configurable_" -code-creation,StoreIC,0x1e4e343567c0,185,"hasConfigurable_" -code-creation,StoreIC,0x1e4e343567c0,185,"hasConfigurable_" -code-creation,LoadIC,0x1e4e34356880,134,"value" -code-creation,LoadIC,0x1e4e34356880,134,"value" -code-creation,CallIC,0x1e4e34356920,235,"setValue" -code-creation,LazyCompile,0x1e4e34356a20,248,"$Array.configurable_ native v8natives.js:536",0xe66232b9d0,~ -code-creation,StoreIC,0x1e4e34356b20,185,"writable_" -code-creation,StoreIC,0x1e4e34356b20,185,"writable_" -code-creation,StoreIC,0x1e4e34356be0,185,"hasWritable_" -code-creation,StoreIC,0x1e4e34356be0,185,"hasWritable_" -code-creation,CallIC,0x1e4e34356ca0,190,"IsInconsistentDescriptor" -code-creation,CallIC,0x1e4e34356d60,190,"IsAccessorDescriptor" -code-creation,CallIC,0x1e4e34356e20,232,"hasGetter" -code-creation,LoadIC,0x1e4e34356f20,134,"hasGetter_" -code-creation,LoadIC,0x1e4e34356f20,134,"hasGetter_" -code-creation,CallIC,0x1e4e34356fc0,235,"hasSetter" -code-creation,LoadIC,0x1e4e343570c0,134,"hasSetter_" -code-creation,LoadIC,0x1e4e343570c0,134,"hasSetter_" -code-creation,CallMiss,0x1e4e34357160,243,"args_count: 4" -code-creation,CallIC,0x1e4e34357260,190,"DefineOwnProperty" -code-creation,CallIC,0x1e4e34357320,190,"DefineObjectProperty" -code-creation,CallIC,0x1e4e343573e0,190,"ToString" -code-creation,CallIC,0x1e4e343574a0,190,"ConvertDescriptorArrayToDescriptor" -code-creation,CallIC,0x1e4e34357560,232,"hasEnumerable" -code-creation,LoadIC,0x1e4e34357660,134,"hasEnumerable_" -code-creation,LoadIC,0x1e4e34357660,134,"hasEnumerable_" -code-creation,LazyCompile,0x1e4e34357700,216,"$Array.writable_ native v8natives.js:530",0xe66232b8a0,~ -code-creation,CallIC,0x1e4e343577e0,235,"hasConfigurable" -code-creation,LoadIC,0x1e4e343578e0,134,"hasConfigurable_" -code-creation,LoadIC,0x1e4e343578e0,134,"hasConfigurable_" -code-creation,LazyCompile,0x1e4e34357980,216,"$Array.get_ native v8natives.js:553",0xe66232bd98,~ -code-creation,CallIC,0x1e4e34357a60,190,"IsDataDescriptor" -code-creation,CallIC,0x1e4e34357b20,235,"hasValue" -code-creation,CallIC,0x1e4e34357c20,232,"hasWritable" -code-creation,LoadIC,0x1e4e34357d20,134,"hasWritable_" -code-creation,LoadIC,0x1e4e34357d20,134,"hasWritable_" -code-creation,LazyCompile,0x1e4e34357dc0,216,"$Array.configurable_ native v8natives.js:540",0xe66232baf8,~ -code-creation,CallIC,0x1e4e34357ea0,232,"getValue" -code-creation,LoadIC,0x1e4e34357fa0,134,"value_" -code-creation,LoadIC,0x1e4e34357fa0,134,"value_" -tick,0x10024af7d,0x7fff5fbff2f0,0,0x2e9dafd0e1c9,0,0x1e4e34347ac0,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432d1f6,0x1e4e3432b64a,0x1e4e34332907 -code-creation,LazyCompile,0x1e4e34358040,812,"__defineGetter__ native v8natives.js:281",0xe662328ec8,~ -code-creation,LazyCompile,0x1e4e34358380,248,"$Array.set_ native v8natives.js:556",0xe66232be30,~ -code-creation,StoreIC,0x1e4e34358480,185,"get_" -code-creation,StoreIC,0x1e4e34358480,185,"get_" -code-creation,StoreIC,0x1e4e34358540,185,"hasGetter_" -code-creation,StoreIC,0x1e4e34358540,185,"hasGetter_" -code-creation,CallIC,0x1e4e34358600,235,"isEnumerable" -code-creation,LoadIC,0x1e4e34358700,134,"enumerable_" -code-creation,LoadIC,0x1e4e34358700,134,"enumerable_" -code-creation,CallIC,0x1e4e343587a0,232,"isConfigurable" -code-creation,LoadIC,0x1e4e343588a0,134,"configurable_" -code-creation,LoadIC,0x1e4e343588a0,134,"configurable_" -code-creation,LazyCompile,0x1e4e34358940,360,"IsGenericDescriptor native v8natives.js:361",0xe6623292f0,~ -code-creation,LazyCompile,0x1e4e34358ac0,216,"$Array.set_ native v8natives.js:560",0xe66232bf08,~ -code-creation,LazyCompile,0x1e4e34358ba0,1188,"split native string.js:554",0xe662323610,~ -code-creation,Stub,0x1e4e34359060,240,"CompareICStub" -code-creation,LazyCompile,0x1e4e34359160,1424,"join native array.js:410",0xe662314af0,~ -code-creation,Stub,0x1e4e34359700,313,"BinaryOpStub_SHR_Alloc_SMI" -code-creation,LazyCompile,0x1e4e34359840,4012,"Join native array.js:119",0xe662314598, -code-creation,LazyCompile,0x1e4e3435a800,448,"UseSparseVariant native array.js:111",0xe662314500,~ -code-creation,Stub,0x1e4e3435a9c0,201,"CompareICStub" -code-creation,Stub,0x1e4e3435aaa0,257,"KeyedStoreElementStub" -code-creation,KeyedStoreIC,0x1e4e3435abc0,130,"" -code-creation,KeyedStoreIC,0x1e4e3435abc0,130,"args_count: 0" -code-creation,Stub,0x1e4e3435ac60,299,"BinaryOpStub_SUB_Alloc_SMI" -code-creation,LazyCompile,0x1e4e3435ada0,320,"ToUint32 native runtime.js:586",0xe6623303c0,~ -code-creation,CallMiss,0x1e4e3435aee0,243,"args_count: 3" -code-creation,CallIC,0x1e4e3435afe0,190,"DoConstructRegExp" -code-creation,LoadIC,0x1e4e3435b0a0,147,"StringCharAt" -code-creation,LoadIC,0x1e4e3435b0a0,147,"StringCharAt" -tick,0x100282200,0x7fff5fbfe8a0,0,0x7fff5fbfeb00,2,0x1e4e3432e267,0x1e4e3432b6b2,0x1e4e34332907 -code-creation,LazyCompile,0x1e4e3435b140,2436,"replace native string.js:221",0xe6623231e8,~ -code-creation,LazyCompile,0x1e4e3435bae0,560,"parse native json.js:55",0xe662334948,~ -code-creation,LazyCompile,0x1e4e3435bd20,1436,"Revive native json.js:30",0xe662333d40,~ -code-creation,KeyedLoadIC,0x1e4e3435c2c0,158,"target_defaults" -code-creation,KeyedLoadIC,0x1e4e3435c2c0,158,"target_defaults" -code-creation,LoadIC,0x1e4e3435c360,147,"ObjectHasOwnProperty" -code-creation,LoadIC,0x1e4e3435c360,147,"ObjectHasOwnProperty" -code-creation,CallIC,0x1e4e3435c400,190,"Revive" -code-creation,KeyedLoadIC,0x1e4e3435c4c0,158,"cflags" -code-creation,KeyedLoadIC,0x1e4e3435c4c0,158,"cflags" -code-creation,KeyedStoreIC,0x1e4e3435c560,208,"cflags" -code-creation,KeyedStoreIC,0x1e4e3435c560,208,"cflags" -code-creation,KeyedStoreIC,0x1e4e3435c640,208,"default_configuration" -code-creation,KeyedStoreIC,0x1e4e3435c640,208,"default_configuration" -code-creation,CallIC,0x1e4e3435c720,238,"setGet" -code-creation,CallIC,0x1e4e3435c820,235,"setEnumerable" -code-creation,CallIC,0x1e4e3435c920,235,"setConfigurable" -code-creation,CallIC,0x1e4e3435ca20,190,"IsGenericDescriptor" -code-creation,CallIC,0x1e4e3435cae0,235,"getGet" -code-creation,LoadIC,0x1e4e3435cbe0,134,"get_" -code-creation,LoadIC,0x1e4e3435cbe0,134,"get_" -code-creation,Stub,0x1e4e3435cc80,370,"CompareICStub" -code-creation,LazyCompile,0x1e4e3435ce00,896,"indexOf native string.js:118",0xe662322ef0,~ -tick,0x7fff9199e6fe,0x7fff5fbff1a8,0,0x7fff9125a857,2,0x1e4e34331375,0x1e4e3432b74e,0x1e4e34332907 -code-creation,Stub,0x1e4e3435d180,370,"CompareICStub" -code-creation,Stub,0x1e4e3435d300,166,"ToBooleanStub_String" -code-creation,LoadIC,0x1e4e3435d3c0,138,"moduleLoadList" -code-creation,LoadIC,0x1e4e3435d3c0,138,"moduleLoadList" -code-creation,Script,0x1e4e3435d460,240,"path.js",0xe6623713c8,~ -code-creation,Stub,0x1e4e3435d560,246,"FastNewContextStub" -tick,0x100318f60,0x7fff5fbfec40,0,0x7fff5fbfec80,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432b929,0x1e4e34332907 -code-creation,Function,0x1e4e3435d660,924,"normalizeArray path.js:31",0xe662371640,~ -code-creation,Function,0x1e4e3435da00,696,"splitPath path.js:70",0xe662371768,~ -code-creation,Function,0x1e4e3435dcc0,212,"f path.js:150",0xe662371858,~ -code-creation,Function,0x1e4e3435dda0,2420,"exports.resolve path.js:85",0xe6623719c0,~ -code-creation,Function,0x1e4e3435e720,212," path.js:171",0xe662371ab0,~ -code-creation,Function,0x1e4e3435e800,1552,"exports.normalize path.js:162",0xe662371bf0,~ -code-creation,Function,0x1e4e3435ee20,272,"f path.js:190",0xe662371ce0,~ -code-creation,Function,0x1e4e3435ef40,948,"exports.join path.js:189",0xe662371de8,~ -code-creation,Function,0x1e4e3435f300,876,"trim path.js:221",0xe662371ee8,~ -code-creation,Function,0x1e4e3435f680,1344,"exports.relative path.js:213",0xe662372070,~ -code-creation,Function,0x1e4e3435fbc0,524,"splitPath path.js:272",0xe662372168,~ -code-creation,Function,0x1e4e3435fde0,212," path.js:299",0xe662372258,~ -code-creation,Function,0x1e4e3435fec0,1124,"exports.resolve path.js:279",0xe662372388,~ -code-creation,Function,0x1e4e34360340,212," path.js:313",0xe662372478,~ -code-creation,Function,0x1e4e34360420,704,"exports.normalize path.js:308",0xe662372598,~ -code-creation,Function,0x1e4e343606e0,272,"exports.join path.js:331",0xe662372690,~ -code-creation,Function,0x1e4e34360800,384,"exports.join path.js:329",0xe662372788,~ -code-creation,Function,0x1e4e34360980,876,"trim path.js:343",0xe662372888,~ -code-creation,Function,0x1e4e34360d00,1204,"exports.relative path.js:339",0xe6623729e8,~ -code-creation,Function,0x1e4e343611c0,420,"exports.dirname path.js:384",0xe662372b10,~ -code-creation,Function,0x1e4e34361380,440,"exports.basename path.js:403",0xe662372c30,~ -code-creation,Function,0x1e4e34361540,240,"exports.extname path.js:413",0xe662372d40,~ -code-creation,Function,0x1e4e34361640,260," path.js:418",0xe662372e58,~ -code-creation,Function,0x1e4e34361760,260," path.js:423",0xe662372f68,~ -code-creation,Function,0x1e4e34361880,884,"exports._makeLong path.js:429",0xe662373060,~ -code-creation,Function,0x1e4e34361c00,188,"exports._makeLong path.js:450",0xe662373150,~ -code-creation,LazyCompile,0x1e4e34361cc0,2624," path.js:1",0xe6623712d8,~ -code-creation,LoadIC,0x1e4e34362700,157,"process" -code-creation,LoadIC,0x1e4e34362700,157,"process" -code-creation,LoadIC,0x1e4e343627a0,220,"" -code-creation,LoadIC,0x1e4e343627a0,220,"" -code-creation,KeyedLoadIC,0x1e4e34362880,130,"" -code-creation,KeyedLoadIC,0x1e4e34362880,130,"args_count: 0" -code-creation,CallIC,0x1e4e34362920,781,"charAt" -tick,0x100321e02,0x7fff5fbfea90,0,0x10104493b,2,0x1e4e34360216,0x1e4e3432b97f,0x1e4e34332907 -code-creation,LazyCompile,0x1e4e34362c40,1932,"filter native array.js:1011",0xe662315178,~ -code-creation,Stub,0x1e4e343633e0,446,"KeyedStoreElementStub" -code-creation,KeyedStoreIC,0x1e4e343635a0,130,"" -code-creation,KeyedStoreIC,0x1e4e343635a0,130,"args_count: 0" -code-creation,KeyedStoreIC,0x1e4e34363640,130,"" -code-creation,KeyedStoreIC,0x1e4e34363640,130,"args_count: 0" -code-creation,Script,0x1e4e343636e0,240,"module.js",0xe662373bb0,~ -tick,0x1002629d9,0x7fff5fbfdd10,0,0xaabee805f21,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432ba5e,0x1e4e34332907 -code-creation,Stub,0x1e4e343637e0,307,"FastNewContextStub" -code-creation,Function,0x1e4e34363920,260,"hasOwnProperty module.js:32",0xe662374058,~ -code-creation,Function,0x1e4e34363a40,476,"Module module.js:37",0xe662374150,~ -code-creation,Function,0x1e4e34363c20,372,"statPath module.js:88",0xe662374260, -code-creation,Function,0x1e4e34363da0,824,"readPackage module.js:99",0xe6623743b0, -code-creation,Function,0x1e4e343640e0,592,"tryPackage module.js:122",0xe662374508,~ -code-creation,Function,0x1e4e34364340,400,"tryFile module.js:138",0xe662374628,~ -code-creation,Function,0x1e4e343644e0,520,"tryExtensions module.js:148",0xe662374758,~ -code-creation,Function,0x1e4e34364700,284,"stripBOM module.js:453",0xe662374848,~ -code-creation,Function,0x1e4e34364820,184,"Module._debug module.js:65",0xe662374930,~ -code-creation,Function,0x1e4e343648e0,224,"Module._debug module.js:67",0xe662374a20,~ -code-creation,Function,0x1e4e343649c0,1316,"Module._findPath module.js:160",0xe662374ba0,~ -code-creation,Function,0x1e4e34364f00,1360,"Module._nodeModulePaths module.js:207",0xe662374cc0,~ -code-creation,Function,0x1e4e34365460,2188,"Module._resolveLookupPaths module.js:231",0xe662374e08,~ -code-creation,Function,0x1e4e34365d00,1312,"Module._load module.js:275",0xe662374f98, -code-creation,Function,0x1e4e34366220,692,"Module._resolveFilename module.js:323",0xe6623750e8,~ -code-creation,KeyedCallInitialize,0x1e4e343664e0,194,"args_count: 2" -code-creation,Function,0x1e4e343665c0,780,"Module.load module.js:346",0xe662375210,~ -code-creation,Function,0x1e4e343668e0,220,"Module.require module.js:361",0xe662375300,~ -code-creation,Function,0x1e4e343669c0,212,"require module.js:377",0xe6623753f0,~ -code-creation,Function,0x1e4e34366aa0,224,"Module._compile.require.resolve module.js:381",0xe6623754e0,~ -code-creation,Function,0x1e4e34366b80,292,"Module._compile.Object.defineProperty.get module.js:385",0xe6623755e8,~ -code-creation,Function,0x1e4e34366cc0,276,"Module._compile.require.registerExtension module.js:395",0xe6623756f0,~ -tick,0x100300e91,0x7fff5fbfe130,0,0x7fff5fbfe210,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e3432ba5e,0x1e4e34332907 -code-creation,Stub,0x1e4e34366de0,550,"FastCloneShallowArrayStub" -code-creation,Function,0x1e4e34367020,2972,"Module._compile module.js:372",0xe6623758a0,~ -code-creation,Function,0x1e4e34367bc0,332,"Module._extensions..js module.js:465",0xe6623759c0,~ -code-creation,Function,0x1e4e34367d20,556,"Module._extensions..json module.js:472",0xe662375af8, -code-creation,Function,0x1e4e34367f60,244,"Module._extensions..node module.js:484",0xe662375bf0,~ -code-creation,Function,0x1e4e34368060,280,"Module.runMain module.js:490",0xe662375cd8,~ -code-creation,Function,0x1e4e34368180,1052,"Module._initPaths module.js:495",0xe662375dd0,~ -code-creation,Function,0x1e4e343685a0,236,"Module.requireRepl module.js:515",0xe662375eb8,~ -code-creation,LazyCompile,0x1e4e343686a0,3672," module.js:1",0xe662373ac0,~ -code-creation,KeyedLoadIC,0x1e4e34369500,158,"assert" -code-creation,KeyedLoadIC,0x1e4e34369500,158,"assert" -code-creation,Stub,0x1e4e343695a0,466,"CompareStub_GT" -code-creation,Stub,0x1e4e34369780,286,"CompareICStub" -code-creation,KeyedLoadIC,0x1e4e343698a0,158,"path" -code-creation,KeyedLoadIC,0x1e4e343698a0,158,"path" -code-creation,CallPreMonomorphic,0x1e4e34369940,241,"args_count: 5" -code-creation,LoadIC,0x1e4e34369a40,134,"length" -code-creation,LoadIC,0x1e4e34369a40,134,"length" -code-creation,CallIC,0x1e4e34369ae0,218,"split" -code-creation,CallIC,0x1e4e34369bc0,200,"filter" -code-creation,CallIC,0x1e4e34369ca0,190,"ToUint32" -code-creation,LoadIC,0x1e4e34369d60,147,"$Array" -code-creation,LoadIC,0x1e4e34369d60,147,"$Array" -code-creation,CallMiss,0x1e4e34369e00,241,"args_count: 2" -code-creation,CallIC,0x1e4e34369f00,192,"splice" -code-creation,CallIC,0x1e4e34369fc0,187,"join" -code-creation,LoadIC,0x1e4e3436a080,147,"ConvertToString" -code-creation,LoadIC,0x1e4e3436a080,147,"ConvertToString" -code-creation,CallIC,0x1e4e3436a120,190,"Join" -code-creation,LoadIC,0x1e4e3436a1e0,147,"visited_arrays" -code-creation,LoadIC,0x1e4e3436a1e0,147,"visited_arrays" -code-creation,CallIC,0x1e4e3436a280,190,"UseSparseVariant" -code-creation,StoreIC,0x1e4e3436a340,189,"globalPaths" -code-creation,StoreIC,0x1e4e3436a340,189,"globalPaths" -code-creation,StoreIC,0x1e4e3436a400,185,"callback" -code-creation,StoreIC,0x1e4e3436a400,185,"callback" -code-creation,CallPreMonomorphic,0x1e4e3436a4c0,241,"args_count: 3" -code-creation,Stub,0x1e4e3436a5c0,142,"ToBooleanStub_Null" -code-creation,Stub,0x1e4e3436a660,755,"SubStringStub" -code-creation,LazyCompile,0x1e4e3436a960,1596,"substring native string.js:658",0xe662323740,~ -code-creation,LazyCompile,0x1e4e3436afa0,2300,"stringify native json.js:307",0xe662334d70,~ -tick,0x10028b306,0x7fff5fbfd818,0,0x10028ad3b,2,0x1e4e3436b0df,0x1e4e3436638c,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3436b8a0,2064,"BasicJSONSerialize native json.js:273",0xe662334cd8,~ -code-creation,CallIC,0x1e4e3436c0c0,190,"BasicJSONSerialize" -code-creation,LazyCompile,0x1e4e3436c180,2704,"BasicSerializeArray native json.js:181",0xe662334ba8,~ -code-creation,LazyCompile,0x1e4e3436cc20,504,"keys native v8natives.js:333",0xe662329128,~ -code-creation,LazyCompile,0x1e4e3436ce20,1140,"slice native string.js:510",0xe662323578,~ -code-creation,Stub,0x1e4e3436d2a0,201,"CompareICStub" -code-creation,LazyCompile,0x1e4e3436d380,784,"SubString native string.js:205",0xe662323150,~ -code-creation,StoreIC,0x1e4e3436d6a0,185,"request" -code-creation,StoreIC,0x1e4e3436d6a0,185,"request" -code-creation,StoreIC,0x1e4e3436d760,185,"paths" -code-creation,StoreIC,0x1e4e3436d760,185,"paths" -code-creation,LoadIC,0x1e4e3436d820,164,"" -code-creation,LoadIC,0x1e4e3436d820,164,"" -code-creation,LazyCompile,0x1e4e3436d8e0,1264,"BasicSerializeObject native json.js:244",0xe662334c40,~ -code-creation,KeyedLoadIC,0x1e4e3436dde0,154,"paths" -code-creation,KeyedLoadIC,0x1e4e3436dde0,154,"paths" -code-creation,LoadIC,0x1e4e3436de80,194,"" -code-creation,LoadIC,0x1e4e3436de80,194,"" -code-creation,CallIC,0x1e4e3436df60,190,"BasicSerializeArray" -tick,0x100289fac,0x7fff5fbfc470,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e343643d8,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -tick,0x1002e8941,0x7fff5fbfcb10,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e343643d8,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e3436e020,240,"fs.js",0xe662376f20,~ -tick,0x100282077,0x7fff5fbfde00,0,0x100000001,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343643d8,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -tick,0x1002e695f,0x7fff5fbfdb20,0,0x5b,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343643d8,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Stub,0x1e4e3436e120,440,"FastNewContextStub" -code-creation,Stub,0x1e4e3436e2e0,132,"UnaryOpStub_BIT_NOT_Alloc_Uninitialized" -code-creation,Stub,0x1e4e3436e380,143,"BinaryOpStub_BIT_OR_OverwriteLeft_Uninitialized" -code-creation,Function,0x1e4e3436e420,1624,"stringToFlags fs.js:242",0xe662377280,~ -code-creation,Function,0x1e4e3436ea80,184," fs.js:293",0xe662377368,~ -code-creation,Function,0x1e4e3436eb40,244," fs.js:296",0xe662377458,~ -code-creation,Function,0x1e4e3436ec40,340,"makeCallback fs.js:290",0xe662377558,~ -code-creation,Function,0x1e4e3436eda0,432,"modeNum fs.js:313",0xe662377670,~ -code-creation,Function,0x1e4e3436ef60,584,"preprocessSymlinkDestination fs.js:535",0xe662377768,~ -code-creation,Function,0x1e4e3436f1c0,420,"toUnixTimestamp fs.js:678",0xe662377878,~ -code-creation,Function,0x1e4e3436f380,252," fs.js:724",0xe662377980,~ -code-creation,Function,0x1e4e3436f480,744," fs.js:722",0xe662377aa8,~ -code-creation,Function,0x1e4e3436f780,792,"writeAll fs.js:717",0xe662377c30,~ -code-creation,Function,0x1e4e3436faa0,340,"errnoException fs.js:802",0xe662377d50,~ -code-creation,Function,0x1e4e3436fc00,404,"_handle.onchange fs.js:821",0xe662377e70,~ -tick,0x7fff911dbcfc,0x7fff5fbfe5e8,0,0x7fff911f2886,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343643d8,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e3436fda0,520,"FSWatcher fs.js:813",0xe662377f90,~ -code-creation,Function,0x1e4e3436ffc0,460,"_handle.onchange fs.js:883",0xe662378090,~ -code-creation,Function,0x1e4e343701a0,220,"_handle.onstop fs.js:892",0xe662378178,~ -code-creation,Function,0x1e4e34370280,568,"StatWatcher fs.js:873",0xe6623782a0,~ -code-creation,Function,0x1e4e343704c0,304,"inStatWatchers fs.js:910",0xe662378390,~ -code-creation,Function,0x1e4e34370600,316,"allocNewPool fs.js:1210",0xe662378498,~ -code-creation,Function,0x1e4e34370740,292,"SyncWriteStream fs.js:1623",0xe662378588,~ -code-creation,Function,0x1e4e34370880,280,"fs.Stats._checkModeProperty fs.js:57",0xe662378678,~ -code-creation,Function,0x1e4e343709a0,232,"fs.Stats.isDirectory fs.js:61",0xe662378760,~ -code-creation,Function,0x1e4e34370aa0,232,"fs.Stats.isFile fs.js:65",0xe662378848,~ -code-creation,Function,0x1e4e34370ba0,232,"fs.Stats.isBlockDevice fs.js:69",0xe662378930,~ -code-creation,Function,0x1e4e34370ca0,232,"fs.Stats.isCharacterDevice fs.js:73",0xe662378a18,~ -code-creation,Function,0x1e4e34370da0,232,"fs.Stats.isSymbolicLink fs.js:77",0xe662378b00,~ -code-creation,Function,0x1e4e34370ea0,232,"fs.Stats.isFIFO fs.js:81",0xe662378be8,~ -code-creation,Function,0x1e4e34370fa0,232,"fs.Stats.isSocket fs.js:85",0xe662378cd0,~ -code-creation,Function,0x1e4e343710a0,292,"fs.exists fs.js:90",0xe662378de8,~ -code-creation,Function,0x1e4e343711e0,324,"fs.exists fs.js:89",0xe662378ef0,~ -code-creation,Function,0x1e4e34371340,376,"fs.existsSync fs.js:95",0xe662378ff8, -code-creation,Stub,0x1e4e343714c0,272,"FastNewContextStub" -code-creation,Function,0x1e4e343715e0,488,"read fs.js:135",0xe662379100,~ -code-creation,Function,0x1e4e343717e0,236," fs.js:146",0xe662379210,~ -code-creation,Function,0x1e4e343718e0,776,"afterRead fs.js:144",0xe662379368,~ -code-creation,Function,0x1e4e34371c00,636,"fs.readFile fs.js:167",0xe662379478,~ -code-creation,Function,0x1e4e34371e80,232,"close fs.js:166",0xe662379560,~ -code-creation,Function,0x1e4e34371f80,184,"fs.readFile.callback fs.js:107",0xe662379648,~ -code-creation,Function,0x1e4e34372040,648," fs.js:120",0xe662379790,~ -code-creation,Function,0x1e4e343722e0,388," fs.js:116",0xe6623798a8,~ -code-creation,Function,0x1e4e34372480,1024,"fs.readFile fs.js:104",0xe662379a68,~ -code-creation,Function,0x1e4e34372880,1900,"fs.readFileSync fs.js:181",0xe662379bf0, -code-creation,Function,0x1e4e34373000,256,"fs.close fs.js:305",0xe662379d08,~ -code-creation,Function,0x1e4e34373100,212,"fs.closeSync fs.js:309",0xe662379df8,~ -code-creation,Function,0x1e4e343731e0,820,"fs.open fs.js:326",0xe662379f88,~ -code-creation,Function,0x1e4e34373520,356,"fs.openSync fs.js:336",0xe66237a0b8,~ -code-creation,Function,0x1e4e343736a0,280,"wrapper fs.js:360",0xe66237a1d0,~ -code-creation,Function,0x1e4e343737c0,368,"fs.read.callback fs.js:351",0xe66237a2f0,~ -code-creation,Function,0x1e4e34373940,1208,"fs.read fs.js:341",0xe66237a4b8,~ -code-creation,Function,0x1e4e34373e00,1232,"fs.readSync fs.js:368",0xe66237a660,~ -code-creation,Function,0x1e4e343742e0,280,"wrapper fs.js:410",0xe66237a778,~ -code-creation,Function,0x1e4e34374400,244,"fs.write fs.js:403",0xe66237a880,~ -code-creation,Function,0x1e4e34374500,1260,"fs.write fs.js:390",0xe66237aa28,~ -code-creation,Function,0x1e4e34374a00,984,"fs.writeSync fs.js:418",0xe66237abb0,~ -code-creation,Function,0x1e4e34374de0,320,"fs.rename fs.js:432",0xe66237acd0,~ -code-creation,Function,0x1e4e34374f20,272,"fs.renameSync fs.js:438",0xe66237adc8,~ -code-creation,Function,0x1e4e34375040,260,"fs.truncate fs.js:443",0xe66237aee8,~ -code-creation,Function,0x1e4e34375160,216,"fs.truncateSync fs.js:447",0xe66237afe0,~ -code-creation,Function,0x1e4e34375240,288,"fs.rmdir fs.js:451",0xe66237b0f8,~ -code-creation,Function,0x1e4e34375360,240,"fs.rmdirSync fs.js:455",0xe66237b1e8,~ -code-creation,Function,0x1e4e34375460,256,"fs.fdatasync fs.js:459",0xe66237b300,~ -code-creation,Function,0x1e4e34375560,212,"fs.fdatasyncSync fs.js:463",0xe66237b3f0,~ -code-creation,Function,0x1e4e34375640,256,"fs.fsync fs.js:467",0xe66237b508,~ -code-creation,Function,0x1e4e34375740,212,"fs.fsyncSync fs.js:471",0xe66237b5f8,~ -code-creation,Function,0x1e4e34375820,408,"fs.mkdir fs.js:475",0xe66237b728,~ -code-creation,Function,0x1e4e343759c0,300,"fs.mkdirSync fs.js:482",0xe66237b840,~ -code-creation,Function,0x1e4e34375b00,268,"fs.sendfile fs.js:487",0xe66237b970,~ -code-creation,Function,0x1e4e34375c20,220,"fs.sendfileSync fs.js:491",0xe66237ba78,~ -code-creation,Function,0x1e4e34375d00,288,"fs.readdir fs.js:495",0xe66237bb90,~ -code-creation,Function,0x1e4e34375e20,240,"fs.readdirSync fs.js:499",0xe66237bc80,~ -code-creation,Function,0x1e4e34375f20,256,"fs.fstat fs.js:503",0xe66237bd98,~ -code-creation,Function,0x1e4e34376020,288,"fs.lstat fs.js:507",0xe66237beb0,~ -code-creation,Function,0x1e4e34376140,288,"fs.stat fs.js:511",0xe66237bfc8,~ -tick,0x100318200,0x7fff5fbfe508,0,0x10033fcbf,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343643d8,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e34376260,212,"fs.fstatSync fs.js:515",0xe66237c0b8,~ -code-creation,Function,0x1e4e34376340,240,"fs.lstatSync fs.js:519",0xe66237c1a8,~ -code-creation,Function,0x1e4e34376440,240,"fs.statSync fs.js:523",0xe66237c298,~ -code-creation,Function,0x1e4e34376540,288,"fs.readlink fs.js:527",0xe66237c3b0,~ -code-creation,Function,0x1e4e34376660,240,"fs.readlinkSync fs.js:531",0xe66237c4a0,~ -code-creation,Function,0x1e4e34376760,784,"fs.symlink fs.js:548",0xe66237c628,~ -code-creation,Function,0x1e4e34376a80,372,"fs.symlinkSync fs.js:558",0xe66237c748,~ -code-creation,Function,0x1e4e34376c00,320,"fs.link fs.js:566",0xe66237c868,~ -code-creation,Function,0x1e4e34376d40,272,"fs.linkSync fs.js:572",0xe66237c960,~ -code-creation,Function,0x1e4e34376e60,288,"fs.unlink fs.js:577",0xe66237ca78,~ -code-creation,Function,0x1e4e34376f80,240,"fs.unlinkSync fs.js:581",0xe66237cb68,~ -code-creation,Function,0x1e4e34377080,304,"fs.fchmod fs.js:585",0xe66237cc98,~ -code-creation,Function,0x1e4e343771c0,260,"fs.fchmodSync fs.js:589",0xe66237cdb0,~ -code-creation,Function,0x1e4e343772e0,184,"fs.lchmod.callback fs.js:595",0xe66237ce98,~ -code-creation,Function,0x1e4e343773a0,260,"fs.lchmod fs.js:604",0xe66237cfa8,~ -code-creation,Function,0x1e4e343774c0,304,"fs.lchmod fs.js:603",0xe66237d0a8,~ -code-creation,Function,0x1e4e34377600,384,"fs.lchmod fs.js:596",0xe66237d1d0,~ -code-creation,Function,0x1e4e34377780,512,"fs.lchmod fs.js:594",0xe66237d2f0,~ -code-creation,Function,0x1e4e34377980,648,"fs.lchmodSync fs.js:611",0xe66237d428, -code-creation,Function,0x1e4e34377c20,332,"fs.chmod fs.js:633",0xe66237d558,~ -code-creation,Function,0x1e4e34377d80,288,"fs.chmodSync fs.js:639",0xe66237d670,~ -code-creation,Function,0x1e4e34377ea0,184,"fs.lchown.callback fs.js:645",0xe66237d758,~ -code-creation,Function,0x1e4e34377f60,304,"fs.lchown fs.js:646",0xe66237d870,~ -code-creation,Function,0x1e4e343780a0,568,"fs.lchown fs.js:644",0xe66237d9a8,~ -code-creation,Function,0x1e4e343782e0,312,"fs.lchownSync fs.js:655",0xe66237dab0,~ -code-creation,Function,0x1e4e34378420,264,"fs.fchown fs.js:661",0xe66237dbd8,~ -code-creation,Function,0x1e4e34378540,220,"fs.fchownSync fs.js:665",0xe66237dcd8,~ -code-creation,Function,0x1e4e34378620,292,"fs.chown fs.js:669",0xe66237de00,~ -code-creation,Function,0x1e4e34378760,248,"fs.chownSync fs.js:673",0xe66237df00,~ -code-creation,Function,0x1e4e34378860,380,"fs.utimes fs.js:692",0xe66237e048,~ -code-creation,Function,0x1e4e343789e0,348,"fs.utimesSync fs.js:699",0xe66237e178,~ -code-creation,Function,0x1e4e34378b40,364,"fs.futimes fs.js:705",0xe66237e2c0,~ -code-creation,Function,0x1e4e34378cc0,320,"fs.futimesSync fs.js:711",0xe66237e3f0,~ -code-creation,Function,0x1e4e34378e00,512,"fs.writeFile fs.js:744",0xe66237e530,~ -code-creation,Function,0x1e4e34379000,816,"fs.writeFile fs.js:740",0xe66237e698,~ -code-creation,Function,0x1e4e34379340,864,"fs.writeFileSync fs.js:755",0xe66237e7e8, -code-creation,Function,0x1e4e343796a0,500,"fs.appendFile fs.js:776",0xe66237e928,~ -code-creation,Function,0x1e4e343798a0,816,"fs.appendFile fs.js:771",0xe66237ea90,~ -code-creation,Function,0x1e4e34379be0,924,"fs.appendFileSync fs.js:783",0xe66237ebe8, -code-creation,Function,0x1e4e34379f80,416,"FSWatcher.start fs.js:832",0xe66237ed08,~ -code-creation,Function,0x1e4e3437a120,220,"FSWatcher.close fs.js:841",0xe66237edf0,~ -code-creation,Function,0x1e4e3437a200,684,"fs.watch fs.js:845",0xe66237ef30,~ -code-creation,Function,0x1e4e3437a4c0,260,"StatWatcher.start fs.js:899",0xe66237f030,~ -code-creation,Function,0x1e4e3437a5e0,220,"StatWatcher.stop fs.js:904",0xe66237f118,~ -tick,0x7fff911f26d7,0x7fff5fbfe3e0,0,0x7fff5fbfe420,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343643d8,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e3437a6c0,824,"fs.watchFile fs.js:916",0xe66237f278,~ -code-creation,Function,0x1e4e3437aa00,556,"fs.unwatchFile fs.js:949",0xe66237f398,~ -code-creation,Function,0x1e4e3437ac40,632,"start fs.js:1010",0xe66237f488,~ -code-creation,Function,0x1e4e3437aec0,2424,"realpathSync fs.js:987",0xe66237f660,~ -code-creation,Stub,0x1e4e3437b840,293,"FastNewContextStub" -code-creation,Function,0x1e4e3437b980,328,"fs.realpath.cache.(anonymous function) fs.js:1122",0xe66237f780,~ -code-creation,Function,0x1e4e3437bae0,688,"start fs.js:1112",0xe66237f870,~ -code-creation,Function,0x1e4e3437bda0,1168,"LOOP fs.js:1134",0xe66237f990,~ -code-creation,Function,0x1e4e3437c240,284,"fs.realpath.cache.(anonymous function) fs.js:1184",0xe66237faa8,~ -code-creation,Function,0x1e4e3437c360,308," fs.js:1181",0xe66237fbb8,~ -code-creation,Function,0x1e4e3437c4a0,856,"gotStat fs.js:1162",0xe66237fcf0,~ -code-creation,Function,0x1e4e3437c800,384,"gotTarget fs.js:1191",0xe66237fe28,~ -code-creation,Function,0x1e4e3437c980,344,"gotResolvedLink fs.js:1199",0xe66237ff38,~ -code-creation,Function,0x1e4e3437cae0,1484,"realpath fs.js:1084",0xe662380158,~ -code-creation,Function,0x1e4e3437d0c0,224,"fs.createReadStream fs.js:1217",0xe662380270,~ -code-creation,Function,0x1e4e3437d1a0,208,"fs.ReadStream.fs.open.self.readable fs.js:1266",0xe662380358,~ -code-creation,Function,0x1e4e3437d280,380,"fs.ReadStream fs.js:1272",0xe662380450,~ -code-creation,Function,0x1e4e3437d400,1812,"fs.ReadStream fs.js:1221",0xe6623805a8,~ -code-creation,Function,0x1e4e3437db20,308,"ReadStream.setEncoding fs.js:1288",0xe6623806d0,~ -code-creation,Function,0x1e4e3437dc60,292," fs.js:1321",0xe6623807b8,~ -code-creation,Function,0x1e4e3437dda0,752,"afterRead fs.js:1318",0xe6623808c8,~ -code-creation,Stub,0x1e4e3437e0a0,132,"UnaryOpStub_BIT_NOT_Overwrite_Uninitialized" -code-creation,Function,0x1e4e3437e140,1384,"ReadStream._read fs.js:1294",0xe662380a10,~ -code-creation,Function,0x1e4e3437e6c0,380,"ReadStream._emitData fs.js:1363",0xe662380b08,~ -code-creation,Function,0x1e4e3437e840,436,"ReadStream.destroy fs.js:1383",0xe662380c28,~ -code-creation,Function,0x1e4e3437ea00,248,"close fs.js:1382",0xe662380d10,~ -code-creation,Function,0x1e4e3437eb00,236,"ReadStream.destroy.readable fs.js:1377",0xe662380e18,~ -code-creation,Function,0x1e4e3437ec00,616,"ReadStream.destroy fs.js:1373",0xe662380f50,~ -code-creation,Function,0x1e4e3437ee80,212,"ReadStream.pause fs.js:1403",0xe662381038,~ -code-creation,Function,0x1e4e3437ef60,440,"ReadStream.resume fs.js:1408",0xe662381128,~ -code-creation,Function,0x1e4e3437f120,224,"fs.createWriteStream fs.js:1425",0xe662381240,~ -code-creation,Function,0x1e4e3437f200,1648,"fs.WriteStream fs.js:1429",0xe662381388,~ -code-creation,Function,0x1e4e3437f880,332,"emit fs.js:1497",0xe662381490,~ -code-creation,Function,0x1e4e3437f9e0,1156,"WriteStream.flush fs.js:1491",0xe6623815e0,~ -code-creation,Function,0x1e4e3437fe80,812,"WriteStream.flush fs.js:1476",0xe662381700,~ -code-creation,Stub,0x1e4e343801c0,568,"FastCloneShallowArrayStub" -code-creation,Function,0x1e4e34380400,1272,"WriteStream.write fs.js:1544",0xe662381848,~ -code-creation,Function,0x1e4e34380900,1008,"WriteStream.end fs.js:1574",0xe662381980,~ -code-creation,Function,0x1e4e34380d00,436,"WriteStream.destroy fs.js:1598",0xe662381aa0,~ -code-creation,Function,0x1e4e34380ec0,248,"close fs.js:1597",0xe662381b88,~ -code-creation,Function,0x1e4e34380fc0,236,"WriteStream.destroy.writable fs.js:1592",0xe662381c90,~ -code-creation,Function,0x1e4e343810c0,616,"WriteStream.destroy fs.js:1588",0xe662381dc8,~ -code-creation,Function,0x1e4e34381340,672,"SyncWriteStream.write fs.js:1638",0xe662381f08,~ -code-creation,Function,0x1e4e343815e0,256,"SyncWriteStream.end fs.js:1668",0xe662382008,~ -code-creation,Function,0x1e4e343816e0,304,"SyncWriteStream.destroy fs.js:1676",0xe6623820f0,~ -code-creation,LazyCompile,0x1e4e34381820,12132," fs.js:1",0xe662376e30,~ -tick,0x100265af8,0x7fff5fbfec20,0,0x1e4e34381880,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343643d8,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343847a0,240,"stream.js",0x140cf2105168,~ -code-creation,Function,0x1e4e343848a0,228,"Stream stream.js:25",0x140cf2105298,~ -code-creation,Stub,0x1e4e343849a0,254,"FastNewContextStub" -tick,0x100295110,0x7fff5fbfd738,0,0x100131c61,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34381df2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343643d8,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e34384aa0,356,"ondata stream.js:36",0x140cf2105388,~ -code-creation,Function,0x1e4e34384c20,280,"ondrain stream.js:46",0x140cf2105470,~ -code-creation,Function,0x1e4e34384d40,312,"onend stream.js:62",0x140cf2105558,~ -code-creation,Function,0x1e4e34384e80,384,"onclose stream.js:70",0x140cf2105640,~ -code-creation,Function,0x1e4e34385000,328,"onerror stream.js:78",0x140cf2105750,~ -code-creation,Function,0x1e4e34385160,612,"cleanup stream.js:89",0x140cf2105838,~ -code-creation,Function,0x1e4e343853e0,1324,"Stream.pipe stream.js:33",0x140cf21059c0,~ -code-creation,LazyCompile,0x1e4e34385920,552," stream.js:1",0x140cf2105078,~ -code-creation,LoadIC,0x1e4e34385b60,157,"Object" -code-creation,LoadIC,0x1e4e34385b60,157,"Object" -code-creation,CallIC,0x1e4e34385c00,157,"create" -code-creation,LoadIC,0x1e4e34385ca0,134,"enumerable" -code-creation,LoadIC,0x1e4e34385ca0,134,"enumerable" -code-creation,CallIC,0x1e4e34385d40,190,"ToBoolean" -code-creation,LoadIC,0x1e4e34385e00,134,"configurable" -code-creation,LoadIC,0x1e4e34385e00,134,"configurable" -code-creation,LoadIC,0x1e4e34385ea0,134,"writable" -code-creation,LoadIC,0x1e4e34385ea0,134,"writable" -code-creation,CallIC,0x1e4e34385f40,238,"setWritable" -code-creation,CallIC,0x1e4e34386040,235,"isWritable" -code-creation,LoadIC,0x1e4e34386140,134,"writable_" -code-creation,LoadIC,0x1e4e34386140,134,"writable_" -code-creation,StoreIC,0x1e4e343861e0,185,"value" -code-creation,StoreIC,0x1e4e343861e0,185,"value" -code-creation,LazyCompile,0x1e4e343862a0,1028,"defineProperty native v8natives.js:1050",0xe66232a098,~ -code-creation,LoadIC,0x1e4e343866c0,134,"enumerable" -code-creation,LoadIC,0x1e4e343866c0,134,"enumerable" -code-creation,LoadIC,0x1e4e34386760,134,"value" -code-creation,LoadIC,0x1e4e34386760,134,"value" -code-creation,StoreIC,0x1e4e34386800,256,"super_" -code-creation,StoreIC,0x1e4e34386800,256,"super_" -tick,0x7fff9199e03e,0x7fff5fbff058,1,0x100010d2a,4,0x1e4e343764e6,0x1e4e34363d28,0x1e4e34364407,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34386900,276,"CreateDate native apinatives.js:33",0xe662320598,~ -code-creation,LazyCompile,0x1e4e34386a20,428,"setTime native date.js:506",0xe662319490,~ -code-creation,LoadIC,0x1e4e34386be0,147,"$Date" -code-creation,LoadIC,0x1e4e34386be0,147,"$Date" -code-creation,CallIC,0x1e4e34386c80,187,"setTime" -code-creation,CallIC,0x1e4e34386d40,190,"ToNumber" -code-creation,Stub,0x1e4e34386e00,1001,"RegExpExecStub" -code-creation,LazyCompile,0x1e4e34387200,1032,"exec native regexp.js:171",0xe662310228,~ -code-creation,RegExp,0x1e4e34387620,846,"^[\\/]*" -code-creation,StoreIC,0x1e4e34387980,150,"lastMatchInfoOverride" -code-creation,StoreIC,0x1e4e34387980,150,"lastMatchInfoOverride" -code-creation,Stub,0x1e4e34387a20,296,"RegExpConstructResultStub" -code-creation,LazyCompile,0x1e4e34387b60,1948,"BuildResultFromMatchInfo native regexp.js:130",0xe6623100f8,~ -code-creation,KeyedStoreIC,0x1e4e34388300,130,"" -code-creation,KeyedStoreIC,0x1e4e34388300,130,"args_count: 0" -code-creation,KeyedLoadIC,0x1e4e343883a0,130,"" -code-creation,KeyedLoadIC,0x1e4e343883a0,130,"args_count: 0" -code-creation,StoreIC,0x1e4e34388440,185,"lastIndex" -code-creation,StoreIC,0x1e4e34388440,185,"lastIndex" -code-creation,LoadIC,0x1e4e34388500,134,"lastIndex" -code-creation,LoadIC,0x1e4e34388500,134,"lastIndex" -code-creation,LoadIC,0x1e4e343885a0,134,"global" -code-creation,LoadIC,0x1e4e343885a0,134,"global" -code-creation,LoadIC,0x1e4e34388640,147,"lastMatchInfo" -code-creation,LoadIC,0x1e4e34388640,147,"lastMatchInfo" -code-creation,RegExp,0x1e4e343886e0,1134,"(.*?)(?:[\\/]+|$)" -code-creation,CallIC,0x1e4e34388b60,190,"BuildResultFromMatchInfo" -code-creation,LoadIC,0x1e4e34388c20,138,"mode" -code-creation,LoadIC,0x1e4e34388c20,138,"mode" -tick,0x7fff911f2ce1,0x7fff5fbfef60,0,0x1ffffffff,0,0x1e4e3437b1b7,0x1e4e3436447a,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436812e,0x1e4e3432e78a -code-creation,CallIC,0x1e4e34388cc0,187,"exec" -code-creation,LoadIC,0x1e4e34388d80,140,"hasOwnProperty" -code-creation,LoadIC,0x1e4e34388d80,140,"hasOwnProperty" -code-creation,CallIC,0x1e4e34388e20,192,"call" -code-creation,CallIC,0x1e4e34388ee0,157,"lstatSync" -code-creation,CallIC,0x1e4e34388f80,157,"_makeLong" -code-creation,CallIC,0x1e4e34389020,462,"lstat" -code-creation,CallIC,0x1e4e34389200,185,"isSymbolicLink" -code-creation,CallIC,0x1e4e343892c0,185,"_checkModeProperty" -code-creation,StoreIC,0x1e4e34389380,185,"id" -code-creation,StoreIC,0x1e4e34389380,185,"id" -code-creation,StoreIC,0x1e4e34389440,185,"filename" -code-creation,StoreIC,0x1e4e34389440,185,"filename" -code-creation,RegExp,0x1e4e34389500,2788,"^(\\/?)([\\s\\S]+\\/(?!$)|\\/)?((?:\\.{1\,2}$|[\\s\\S]+?)?(\\.[^.\\/]*)?)$" -code-creation,LazyCompile,0x1e4e3438a000,3140,"StringSplitOnRegExp native string.js:591",0xe6623236a8,~ -code-creation,LazyCompile,0x1e4e3438ac60,304,"DoRegExpExec native regexp.js:123",0xe662310060,~ -code-creation,CallIC,0x1e4e3438ada0,190,"DoRegExpExec" -code-creation,LazyCompile,0x1e4e3438ae60,780,"ArrayConcat native array.js:471",0xe662314cb8,~ -code-creation,CallIC,0x1e4e3438b180,192,"slice" -code-creation,CallIC,0x1e4e3438b240,192,"concat" -code-creation,Stub,0x1e4e3438b300,968,"StringDictionaryLookupStub" -code-creation,KeyedCallMegamorphic,0x1e4e3438b6e0,1463,"args_count: 2" -code-creation,LazyCompile,0x1e4e3438bca0,292,"ceil native math.js:79",0xe662331738,~ -tick,0x100192a4b,0x7fff5fbff020,0,0x102023b38,2,0x1e4e3433c026,0x1e4e3433c57a,0x1e4e34372ae1,0x1e4e34367c79,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,StoreIC,0x1e4e3438bde0,189,"used" -code-creation,StoreIC,0x1e4e3438bde0,189,"used" -code-creation,Stub,0x1e4e3438bea0,276,"BinaryOpStub_BIT_AND_OverwriteLeft_SMI" -code-creation,LazyCompile,0x1e4e3438bfc0,248,"isArray native array.js:1463",0xe6623156d0,~ -code-creation,CallPreMonomorphic,0x1e4e3438c0c0,241,"args_count: 4" -code-creation,LazyCompile,0x1e4e3438c1c0,488,"toLowerCase native string.js:739",0xe662323870,~ -code-creation,LazyCompile,0x1e4e3438c3c0,1328,"charCodeAt native string.js:80",0xe662322dc0,~ -code-creation,LoadIC,0x1e4e3438c900,147,"lastMatchInfoOverride" -code-creation,LoadIC,0x1e4e3438c900,147,"lastMatchInfoOverride" -code-creation,RegExp,0x1e4e3438c9a0,895,"^\\#\\!.*" -code-creation,StoreIC,0x1e4e3438cd20,185,"get" -code-creation,StoreIC,0x1e4e3438cd20,185,"get" -code-creation,CallIC,0x1e4e3438cde0,205,"substring" -code-creation,Script,0x1e4e3438cec0,240,"/Users/indutny/Code/indutny/node-spdy/examples/hello_world/app.js",0x140cf21084c0,~ -code-creation,Stub,0x1e4e3438cfc0,254,"FastCloneShallowObjectStub" -code-creation,LazyCompile,0x1e4e3438d0c0,596," /Users/indutny/Code/indutny/node-spdy/examples/hello_world/app.js:1",0x140cf21083d0,~ -code-creation,Stub,0x1e4e3438d320,173,"ToBooleanStub_NullSpecObject" -code-creation,CallIC,0x1e4e3438d3e0,157,"_resolveFilename" -code-creation,LoadIC,0x1e4e3438d480,138,"_cache" -code-creation,LoadIC,0x1e4e3438d480,138,"_cache" -code-creation,CallIC,0x1e4e3438d520,185,"require" -code-creation,CallIC,0x1e4e3438d5e0,170,"_load" -code-creation,LoadIC,0x1e4e3438d6a0,134,"id" -code-creation,LoadIC,0x1e4e3438d6a0,134,"id" -code-creation,CallIC,0x1e4e3438d740,157,"_resolveLookupPaths" -tick,0x10012ff40,0x7fff5fbfe820,0,0x1010438ce,2,0x1e4e34365a05,0x1e4e34366323,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3438d7e0,2396,"test native regexp.js:220",0xe6623102c0,~ -code-creation,RegExp,0x1e4e3438e140,939,"^index\\.\\w+?$" -code-creation,CallIC,0x1e4e3438e500,462,"cwd" -code-creation,LoadIC,0x1e4e3438e6e0,157,"JSON" -code-creation,LoadIC,0x1e4e3438e6e0,157,"JSON" -code-creation,CallIC,0x1e4e3438e780,170,"stringify" -code-creation,CallIC,0x1e4e3438e840,248,"pop" -code-creation,CallIC,0x1e4e3438e940,157,"_findPath" -code-creation,LoadIC,0x1e4e3438e9e0,138,"_extensions" -code-creation,LoadIC,0x1e4e3438e9e0,138,"_extensions" -code-creation,CallIC,0x1e4e3438ea80,157,"keys" -code-creation,CallIC,0x1e4e3438eb20,218,"slice" -code-creation,CallIC,0x1e4e3438ec00,190,"SubString" -code-creation,CallIC,0x1e4e3438ecc0,190,"BasicSerializeObject" -code-creation,KeyedLoadIC,0x1e4e3438ed80,154,"request" -code-creation,KeyedLoadIC,0x1e4e3438ed80,154,"request" -code-creation,LoadIC,0x1e4e3438ee20,138,"_pathCache" -code-creation,LoadIC,0x1e4e3438ee20,138,"_pathCache" -code-creation,CallIC,0x1e4e3438eec0,167,"resolve" -code-creation,CallMiss,0x1e4e3438ef80,241,"args_count: 3" -code-creation,CallIC,0x1e4e3438f080,157,"openSync" -code-creation,CallIC,0x1e4e3438f120,462,"open" -code-creation,CallIC,0x1e4e3438f300,157,"fstatSync" -code-creation,CallIC,0x1e4e3438f3a0,462,"fstat" -code-creation,LoadIC,0x1e4e3438f580,138,"size" -code-creation,LoadIC,0x1e4e3438f580,138,"size" -code-creation,LoadIC,0x1e4e3438f620,157,"Buffer" -code-creation,LoadIC,0x1e4e3438f620,157,"Buffer" -code-creation,LoadIC,0x1e4e3438f6c0,157,"Math" -code-creation,LoadIC,0x1e4e3438f6c0,157,"Math" -code-creation,CallIC,0x1e4e3438f760,157,"ceil" -code-creation,StoreIC,0x1e4e3438f800,328,"length" -code-creation,StoreIC,0x1e4e3438f800,328,"length" -code-creation,LoadIC,0x1e4e3438f960,134,"length" -code-creation,LoadIC,0x1e4e3438f960,134,"length" -code-creation,LoadIC,0x1e4e3438fa00,138,"poolSize" -code-creation,LoadIC,0x1e4e3438fa00,138,"poolSize" -code-creation,StoreIC,0x1e4e3438faa0,328,"parent" -code-creation,StoreIC,0x1e4e3438faa0,328,"parent" -code-creation,LoadIC,0x1e4e3438fc00,138,"used" -code-creation,LoadIC,0x1e4e3438fc00,138,"used" -code-creation,StoreIC,0x1e4e3438fca0,328,"offset" -code-creation,StoreIC,0x1e4e3438fca0,328,"offset" -code-creation,LoadIC,0x1e4e3438fe00,134,"length" -code-creation,LoadIC,0x1e4e3438fe00,134,"length" -code-creation,LoadIC,0x1e4e3438fea0,157,"Array" -code-creation,LoadIC,0x1e4e3438fea0,157,"Array" -code-creation,CallIC,0x1e4e3438ff40,157,"isArray" -code-creation,CallIC,0x1e4e3438ffe0,157,"isBuffer" -code-creation,LoadIC,0x1e4e34390080,134,"parent" -code-creation,LoadIC,0x1e4e34390080,134,"parent" -code-creation,LoadIC,0x1e4e34390120,134,"offset" -code-creation,LoadIC,0x1e4e34390120,134,"offset" -code-creation,CallMiss,0x1e4e343901c0,241,"args_count: 4" -code-creation,CallIC,0x1e4e343902c0,462,"makeFastBuffer" -code-creation,CallIC,0x1e4e343904a0,170,"readSync" -code-creation,CallMiss,0x1e4e34390560,241,"args_count: 5" -code-creation,CallIC,0x1e4e34390660,462,"read" -code-creation,CallIC,0x1e4e34390840,157,"closeSync" -code-creation,CallIC,0x1e4e343908e0,462,"close" -code-creation,CallIC,0x1e4e34390ac0,198,"toString" -code-creation,CallIC,0x1e4e34390ba0,190,"String" -code-creation,CallIC,0x1e4e34390c60,205,"toLowerCase" -code-creation,LoadIC,0x1e4e34390d40,134,"length" -code-creation,LoadIC,0x1e4e34390d40,134,"length" -code-creation,LoadIC,0x1e4e34390de0,134,"offset" -code-creation,LoadIC,0x1e4e34390de0,134,"offset" -code-creation,LoadIC,0x1e4e34390e80,134,"parent" -code-creation,LoadIC,0x1e4e34390e80,134,"parent" -code-creation,CallIC,0x1e4e34390f20,490,"utf8Slice" -code-creation,CallIC,0x1e4e34391120,157,"require" -code-creation,CallIC,0x1e4e343911c0,157,"statSync" -code-creation,CallIC,0x1e4e34391260,462,"stat" -tick,0x7fff9199e6fe,0x7fff5fbfec58,0,0x7fff9125a857,0,0x1e4e343643d8,0x1e4e3436425d,0x1e4e34364d6c,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,CallIC,0x1e4e34391440,185,"isDirectory" -code-creation,LoadIC,0x1e4e34391500,138,"_realpathCache" -code-creation,LoadIC,0x1e4e34391500,138,"_realpathCache" -code-creation,CallIC,0x1e4e343915a0,157,"realpathSync" -code-creation,CallIC,0x1e4e34391640,167,"resolve" -code-creation,StoreIC,0x1e4e34391700,328,"id" -code-creation,StoreIC,0x1e4e34391700,328,"id" -code-creation,StoreIC,0x1e4e34391860,328,"exports" -code-creation,StoreIC,0x1e4e34391860,328,"exports" -code-creation,StoreIC,0x1e4e343919c0,328,"parent" -code-creation,StoreIC,0x1e4e343919c0,328,"parent" -code-creation,StoreIC,0x1e4e34391b20,328,"filename" -code-creation,StoreIC,0x1e4e34391b20,328,"filename" -code-creation,StoreIC,0x1e4e34391c80,328,"loaded" -code-creation,StoreIC,0x1e4e34391c80,328,"loaded" -code-creation,StoreIC,0x1e4e34391de0,328,"children" -code-creation,StoreIC,0x1e4e34391de0,328,"children" -code-creation,Stub,0x1e4e34391f40,159,"ToBooleanStub_UndefinedBool" -code-creation,CallIC,0x1e4e34391fe0,185,"load" -code-creation,LoadIC,0x1e4e343920a0,134,"id" -code-creation,LoadIC,0x1e4e343920a0,134,"id" -code-creation,LoadIC,0x1e4e34392140,134,"loaded" -code-creation,LoadIC,0x1e4e34392140,134,"loaded" -code-creation,CallIC,0x1e4e343921e0,157,"dirname" -code-creation,CallIC,0x1e4e34392280,157,"_nodeModulePaths" -code-creation,LoadIC,0x1e4e34392320,138,"platform" -code-creation,LoadIC,0x1e4e34392320,138,"platform" -code-creation,CallIC,0x1e4e343923c0,190,"StringSplitOnRegExp" -code-creation,StoreIC,0x1e4e34392480,328,"paths" -code-creation,StoreIC,0x1e4e34392480,328,"paths" -code-creation,CallIC,0x1e4e343925e0,157,"extname" -code-creation,CallIC,0x1e4e34392680,157,"readFileSync" -code-creation,LoadIC,0x1e4e34392720,138,"length" -code-creation,LoadIC,0x1e4e34392720,138,"length" -code-creation,CallIC,0x1e4e343927c0,576,"charCodeAt" -code-creation,CallIC,0x1e4e34392a00,185,"_compile" -code-creation,CallIC,0x1e4e34392ac0,205,"replace" -code-creation,CallIC,0x1e4e34392ba0,157,"defineProperty" -code-creation,LoadIC,0x1e4e34392c40,134,"get" -code-creation,LoadIC,0x1e4e34392c40,134,"get" -code-creation,LoadIC,0x1e4e34392ce0,138,"mainModule" -code-creation,LoadIC,0x1e4e34392ce0,138,"mainModule" -code-creation,LoadIC,0x1e4e34392d80,138,"_contextLoad" -code-creation,LoadIC,0x1e4e34392d80,138,"_contextLoad" -code-creation,CallIC,0x1e4e34392e20,157,"wrap" -tick,0x1002e87f8,0x7fff5fbfd0d0,1,0x1000162b8,2,0x1e4e34367947,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e34392ec0,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy.js",0x140cf2108d58,~ -code-creation,LoadIC,0x1e4e34392fc0,157,"global" -code-creation,LoadIC,0x1e4e34392fc0,157,"global" -code-creation,LoadIC,0x1e4e34393060,292,"" -code-creation,LoadIC,0x1e4e34393060,292,"v8debug" -code-creation,LoadIC,0x1e4e343931a0,134,"exports" -code-creation,LoadIC,0x1e4e343931a0,134,"exports" -code-creation,CallIC,0x1e4e34393240,187,"apply" -code-creation,LazyCompile,0x1e4e34393300,1144," /Users/indutny/Code/indutny/node-spdy/lib/spdy.js:1",0x140cf2108c68, -code-creation,LoadIC,0x1e4e34393780,134,"filename" -code-creation,LoadIC,0x1e4e34393780,134,"filename" -code-creation,CallIC,0x1e4e34393820,170,"basename" -code-creation,CallIC,0x1e4e343938e0,187,"test" -code-creation,LoadIC,0x1e4e343939a0,134,"source" -code-creation,LoadIC,0x1e4e343939a0,134,"source" -code-creation,Stub,0x1e4e34393a40,146,"ToBooleanStub_UndefinedSmi" -code-creation,Stub,0x1e4e34393ae0,182,"ToBooleanStub_BoolSpecObject" -code-creation,Stub,0x1e4e34393ba0,186,"ToBooleanStub_BoolString" -code-creation,LoadIC,0x1e4e34393c60,134,"children" -code-creation,LoadIC,0x1e4e34393c60,134,"children" -code-creation,StoreIC,0x1e4e34393d00,256,"resolve" -code-creation,StoreIC,0x1e4e34393d00,256,"resolve" -code-creation,Script,0x1e4e34393e00,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js",0x140cf2109450,~ -code-creation,Function,0x1e4e34393f00,428,"createDeflate /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:11",0x140cf2109680,~ -code-creation,Function,0x1e4e343940c0,428,"createInflate /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:28",0x140cf2109788,~ -tick,0x7fff912629f4,0x7fff5fbfdc90,0,0x0,2,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343933aa,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e34394280,236,"utils.resetZlibStream.stream.lockBuffer /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:48",0x140cf2109890,~ -code-creation,Function,0x1e4e34394380,580,"resetZlibStream /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:46",0x140cf21099d8,~ -code-creation,Function,0x1e4e343945e0,300,"collect /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:81",0x140cf2109ac8,~ -code-creation,Function,0x1e4e34394720,240,"utils.zstream.stream.locked /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:74",0x140cf2109bd0,~ -code-creation,Function,0x1e4e34394820,264,"utils.zstream.stream.flush.stream._flush /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:88",0x140cf2109ce0,~ -code-creation,Function,0x1e4e34394940,488,"utils.zstream /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:93",0x140cf2109e00,~ -code-creation,Function,0x1e4e34394b40,952,"zstream /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:68",0x140cf2109f78,~ -code-creation,Function,0x1e4e34394f00,220,"utils.zwrap /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:112",0x140cf210a070,~ -code-creation,Function,0x1e4e34394fe0,300,"zwrap /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:111",0x140cf210a180,~ -code-creation,LazyCompile,0x1e4e34395120,868," /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:1",0x140cf2109360,~ -code-creation,LoadIC,0x1e4e343954a0,138,"moduleLoadList" -code-creation,LoadIC,0x1e4e343954a0,138,"moduleLoadList" -tick,0x1002e7cf1,0x7fff5fbfc380,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34395273,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343933aa,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e34395540,240,"zlib.js",0x140cf210a598,~ -code-creation,Stub,0x1e4e34395640,279,"FastNewContextStub" -code-creation,Function,0x1e4e34395760,312,"onError zlib.js:141",0x140cf210a810,~ -code-creation,Function,0x1e4e343958a0,300,"onData zlib.js:147",0x140cf210a900,~ -code-creation,Function,0x1e4e343959e0,288,"onEnd zlib.js:152",0x140cf210aa08,~ -code-creation,Function,0x1e4e34395b00,760,"zlibBuffer zlib.js:137",0x140cf210ab70,~ -code-creation,Function,0x1e4e34395e00,312,"Deflate zlib.js:168",0x140cf210ac80,~ -code-creation,Function,0x1e4e34395f40,312,"Inflate zlib.js:173",0x140cf210ad90,~ -code-creation,Function,0x1e4e34396080,312,"Gzip zlib.js:181",0x140cf210aea0,~ -code-creation,Function,0x1e4e343961c0,320,"Gunzip zlib.js:186",0x140cf210afb0,~ -code-creation,Function,0x1e4e34396300,320,"DeflateRaw zlib.js:194",0x140cf210b0c0,~ -code-creation,Function,0x1e4e34396440,312,"InflateRaw zlib.js:199",0x140cf210b1d0,~ -code-creation,Function,0x1e4e34396580,312,"Unzip zlib.js:206",0x140cf210b2e0,~ -code-creation,Function,0x1e4e343966c0,492,"_binding.onerror zlib.js:275",0x140cf210b400,~ -code-creation,Function,0x1e4e343968c0,3136,"Zlib zlib.js:217",0x140cf210b598,~ -code-creation,Function,0x1e4e34397500,468," zlib.js:49",0x140cf210b688,~ -code-creation,Function,0x1e4e343976e0,252," zlib.js:66",0x140cf210b778,~ -code-creation,Function,0x1e4e343977e0,220,"exports.createDeflate zlib.js:78",0x140cf210b888,~ -code-creation,Function,0x1e4e343978c0,220,"exports.createInflate zlib.js:82",0x140cf210b998,~ -code-creation,Function,0x1e4e343979a0,220,"exports.createDeflateRaw zlib.js:86",0x140cf210baa8,~ -code-creation,Function,0x1e4e34397a80,220,"exports.createInflateRaw zlib.js:90",0x140cf210bbb8,~ -code-creation,Function,0x1e4e34397b60,220,"exports.createGzip zlib.js:94",0x140cf210bcc8,~ -code-creation,Function,0x1e4e34397c40,220,"exports.createGunzip zlib.js:98",0x140cf210bdd8,~ -code-creation,Function,0x1e4e34397d20,220,"exports.createUnzip zlib.js:102",0x140cf210bee8,~ -code-creation,Function,0x1e4e34397e00,256,"exports.deflate zlib.js:109",0x140cf210c010,~ -code-creation,Function,0x1e4e34397f00,256,"exports.gzip zlib.js:113",0x140cf210c138,~ -code-creation,Function,0x1e4e34398000,260,"exports.deflateRaw zlib.js:117",0x140cf210c260,~ -code-creation,Function,0x1e4e34398120,256,"exports.unzip zlib.js:121",0x140cf210c388,~ -code-creation,Function,0x1e4e34398220,256,"exports.inflate zlib.js:125",0x140cf210c4b0,~ -tick,0x10031b148,0x7fff5fbfda80,0,0x0,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34395273,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343933aa,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e34398320,260,"exports.gunzip zlib.js:129",0x140cf210c5d8,~ -code-creation,Function,0x1e4e34398440,256,"exports.inflateRaw zlib.js:133",0x140cf210c700,~ -code-creation,Function,0x1e4e34398540,1552,"write zlib.js:303",0x140cf210c878,~ -code-creation,Function,0x1e4e34398b60,256,"reset zlib.js:334",0x140cf210c970,~ -code-creation,Function,0x1e4e34398c60,284,"flush zlib.js:338",0x140cf210ca70,~ -code-creation,Function,0x1e4e34398d80,284," zlib.js:348",0x140cf210cb78,~ -code-creation,Function,0x1e4e34398ea0,504,"end zlib.js:343",0x140cf210cca8,~ -code-creation,CallInitialize,0x1e4e343990a0,241,"args_count: 7" -code-creation,Function,0x1e4e343991a0,1464,"callback zlib.js:395",0x140cf210ce00,~ -code-creation,Function,0x1e4e34399760,1452,"Zlib._process zlib.js:356",0x140cf210cf60,~ -code-creation,Function,0x1e4e34399d20,244,"Zlib.pause zlib.js:444",0x140cf210d048,~ -code-creation,Function,0x1e4e34399e20,232,"Zlib.resume zlib.js:449",0x140cf210d130,~ -code-creation,Function,0x1e4e34399f20,304,"Zlib.destroy zlib.js:454",0x140cf210d218,~ -code-creation,LazyCompile,0x1e4e3439a060,4272," zlib.js:1",0x140cf210a4a8,~ -code-creation,LazyCompile,0x1e4e3439b120,1656,"forEach native array.js:1062",0xe662315210,~ -code-creation,LazyCompile,0x1e4e3439b7a0,796,"match native string.js:182",0xe6623230b8,~ -code-creation,LazyCompile,0x1e4e3439bac0,340,"RegExpExecNoTests native regexp.js:160",0xe662310190,~ -code-creation,RegExp,0x1e4e3439bc20,736,"^Z" -code-creation,CallIC,0x1e4e3439bf00,205,"match" -code-creation,CallIC,0x1e4e3439bfe0,190,"RegExpExecNoTests" -code-creation,StoreIC,0x1e4e3439c0a0,185,"Z_OK" -code-creation,StoreIC,0x1e4e3439c0a0,185,"Z_OK" -code-creation,StoreIC,0x1e4e3439c160,185,"Z_STREAM_END" -code-creation,StoreIC,0x1e4e3439c160,185,"Z_STREAM_END" -code-creation,StoreIC,0x1e4e3439c220,185,"Z_NEED_DICT" -code-creation,StoreIC,0x1e4e3439c220,185,"Z_NEED_DICT" -code-creation,StoreIC,0x1e4e3439c2e0,185,"Z_ERRNO" -code-creation,StoreIC,0x1e4e3439c2e0,185,"Z_ERRNO" -code-creation,StoreIC,0x1e4e3439c3a0,185,"Z_STREAM_ERROR" -code-creation,StoreIC,0x1e4e3439c3a0,185,"Z_STREAM_ERROR" -code-creation,StoreIC,0x1e4e3439c460,185,"Z_DATA_ERROR" -code-creation,StoreIC,0x1e4e3439c460,185,"Z_DATA_ERROR" -code-creation,StoreIC,0x1e4e3439c520,185,"Z_MEM_ERROR" -code-creation,StoreIC,0x1e4e3439c520,185,"Z_MEM_ERROR" -code-creation,StoreIC,0x1e4e3439c5e0,185,"Z_BUF_ERROR" -code-creation,StoreIC,0x1e4e3439c5e0,185,"Z_BUF_ERROR" -code-creation,StoreIC,0x1e4e3439c6a0,185,"Z_VERSION_ERROR" -code-creation,StoreIC,0x1e4e3439c6a0,185,"Z_VERSION_ERROR" -code-creation,KeyedStoreIC,0x1e4e3439c760,130,"" -code-creation,KeyedStoreIC,0x1e4e3439c760,130,"args_count: 0" -code-creation,KeyedLoadIC,0x1e4e3439c800,154,"Z_STREAM_END" -code-creation,KeyedLoadIC,0x1e4e3439c800,154,"Z_STREAM_END" -tick,0x7fff911f299a,0x7fff5fbfe680,0,0x7fff79226264,0,0x1e4e34397789,0x1e4e3439b688,0x1e4e3439a8d6,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34395273,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343933aa,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,KeyedLoadIC,0x1e4e3439c8a0,154,"Z_NEED_DICT" -code-creation,KeyedLoadIC,0x1e4e3439c8a0,154,"Z_NEED_DICT" -code-creation,StoreIC,0x1e4e3439c940,185,"loaded" -code-creation,StoreIC,0x1e4e3439c940,185,"loaded" -code-creation,LoadIC,0x1e4e3439ca00,147,"kAddMessageAccessorsMarker" -code-creation,LoadIC,0x1e4e3439ca00,147,"kAddMessageAccessorsMarker" -code-creation,CallIC,0x1e4e3439caa0,190,"captureStackTrace" -code-creation,LoadIC,0x1e4e3439cb60,147,"$Error" -code-creation,LoadIC,0x1e4e3439cb60,147,"$Error" -code-creation,LoadIC,0x1e4e3439cc00,138,"stackTraceLimit" -code-creation,LoadIC,0x1e4e3439cc00,138,"stackTraceLimit" -code-creation,CallIC,0x1e4e3439cca0,190,"DefineOneShotAccessor" -code-creation,Stub,0x1e4e3439cd60,197,"ToBooleanStub_UndefinedBoolString" -tick,0x1001a97f8,0x7fff5fbfe8a0,0,0x0,1 -tick,0x1002031e2,0x7fff5fbfed60,0,0x102023a70,0,0x1e4e34364e49,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343934da,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3439ce40,212," path.js:299",0xe662372258,~ -code-creation,LazyCompile,0x1e4e3439cf20,258," path.js:299",0xe662372258,* -tick,0x100254620,0x7fff5fbfec90,0,0x162355501,0,0x1e4e34363372,0x1e4e34360216,0x1e4e34364f93,0x1e4e34366798,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393459,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e3439d040,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/generic.js",0x140cf214f200,~ -code-creation,LazyCompile,0x1e4e3439d140,244," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/generic.js:1",0x140cf214f110,~ -code-creation,Script,0x1e4e3439d240,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/index.js",0x140cf214fb70,~ -tick,0x7fff9199e6fe,0x7fff5fbfe778,1,0x1000162b8,2,0x1e4e34367947,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393541,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3439d340,580," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/index.js:1",0x140cf214fa80, -code-creation,LazyCompile,0x1e4e3439d5a0,258," path.js:299",0xe662372258,* -code-creation,LoadIC,0x1e4e3439d6c0,157,"Error" -code-creation,LoadIC,0x1e4e3439d6c0,157,"Error" -code-creation,LazyCompile,0x1e4e3439d760,1948,"BuildResultFromMatchInfo native regexp.js:130",0xe6623100f8,~ -tick,0x100221724,0x7fff5fbfe100,0,0x100cceda0,2,0x1e4e343875f2,0x1e4e3437b1b7,0x1e4e3436447a,0x1e4e34364cca,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3439d409,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393541,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Stub,0x1e4e3439df00,2537,"RecordWriteStub" -code-creation,Stub,0x1e4e3439e900,2518,"RecordWriteStub" -code-creation,Stub,0x1e4e3439f2e0,2513,"RecordWriteStub" -code-creation,Stub,0x1e4e3439fcc0,2546,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e343a06c0,2975,"BuildResultFromMatchInfo native regexp.js:130",0xe6623100f8,* -code-creation,Script,0x1e4e343a1260,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/protocol.js",0x140cf2151940,~ -code-creation,LazyCompile,0x1e4e343a1360,440," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/protocol.js:1",0x140cf2151850,~ -code-creation,StoreIC,0x1e4e343a1520,185,"exports" -code-creation,StoreIC,0x1e4e343a1520,185,"exports" -tick,0x100011303,0x7fff5fbfe970,0,0x7fff5fbfe9c0,0,0x1e4e343762e9,0x1e4e34372a2b,0x1e4e34367c79,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3439d4c5,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393541,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,CallMegamorphic,0x1e4e343a15e0,814,"args_count: 2" -code-creation,Script,0x1e4e343a1920,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js",0x140cf2152488,~ -code-creation,Function,0x1e4e343a1a20,252,"Framer /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:13",0x140cf21526d8,~ -code-creation,Function,0x1e4e343a1b20,448,"stringify /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:72",0x140cf21527c8,~ -code-creation,Function,0x1e4e343a1ce0,236," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:88",0x140cf21528b8,~ -tick,0x1001347d1,0x7fff5fbfcf90,0,0x7fff5fbfd140,2,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3439d4c5,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393541,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343a1de0,516," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:97",0x140cf21529b0,~ -code-creation,Function,0x1e4e343a2000,544," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:101",0x140cf2152ad8,~ -code-creation,Function,0x1e4e343a2220,600," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:114",0x140cf2152bc8,~ -code-creation,Function,0x1e4e343a2480,1068,"headersToDict /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:71",0x140cf2152d58,~ -code-creation,Function,0x1e4e343a28c0,800,"Framer.execute.callback.type /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:35",0x140cf2152eb0,~ -code-creation,Function,0x1e4e343a2be0,1552,"execute /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:28",0x140cf2153050,~ -code-creation,Function,0x1e4e343a3200,1316,"Framer._synFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:136",0x140cf21531b0,~ -code-creation,Function,0x1e4e343a3740,536,"_synFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:133",0x140cf2153328,~ -code-creation,Function,0x1e4e343a3960,268," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:175",0x140cf2153418,~ -code-creation,Function,0x1e4e343a3a80,460,"replyFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:173",0x140cf2153580,~ -code-creation,Function,0x1e4e343a3c60,280," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:195",0x140cf2153670,~ -code-creation,Function,0x1e4e343a3d80,416,"streamFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:193",0x140cf21537c8,~ -code-creation,Function,0x1e4e343a3f20,660,"dataFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:211",0x140cf2153900,~ -code-creation,Function,0x1e4e343a41c0,416,"pingFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:230",0x140cf2153a28,~ -code-creation,Function,0x1e4e343a4360,572,"rstFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:246",0x140cf2153b58,~ -code-creation,Function,0x1e4e343a45a0,664,"settingsFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:269",0x140cf2153c80,~ -code-creation,LazyCompile,0x1e4e343a4840,1408," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/framer.js:1",0x140cf2152398,~ -code-creation,RegExp,0x1e4e343a4dc0,853,"^[\\/]*" -code-creation,RegExp,0x1e4e343a5120,1162,"(.*?)(?:[\\/]+|$)" -code-creation,RegExp,0x1e4e343a55c0,2819,"^(\\/?)([\\s\\S]+\\/(?!$)|\\/)?((?:\\.{1\,2}$|[\\s\\S]+?)?(\\.[^.\\/]*)?)$" -tick,0x1001a81e3,0x7fff5fbfe998,0,0x11,0,0x1e4e343599a4,0x1e4e343596d7,0x1e4e34365342,0x1e4e34366798,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3439d519,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393541,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343a60e0,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/dictionary.js",0x140cf2154618,~ -code-creation,LazyCompile,0x1e4e343a61e0,304," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v2/dictionary.js:1",0x140cf2154528,~ -code-creation,StoreIC,0x1e4e343a6320,360,"used" -code-creation,StoreIC,0x1e4e343a6320,360,"used" -code-creation,Stub,0x1e4e343a64a0,169,"ToBooleanStub_SmiString" -code-creation,LazyCompile,0x1e4e343a6560,544,"isFinite native v8natives.js:103",0xe662328790,~ -code-creation,LazyCompile,0x1e4e343a6780,588,"NonNumberToNumber native runtime.js:538",0xe662330070,~ -code-creation,Stub,0x1e4e343a69e0,518,"CompareStub_EQ" -code-creation,Stub,0x1e4e343a6c00,240,"CompareICStub" -code-creation,StoreIC,0x1e4e343a6d00,185,"length" -code-creation,StoreIC,0x1e4e343a6d00,185,"length" -code-creation,CallMegamorphic,0x1e4e343a6dc0,814,"args_count: 4" -code-creation,KeyedStoreIC,0x1e4e343a7100,130,"" -code-creation,KeyedStoreIC,0x1e4e343a7100,130,"args_count: 0" -code-creation,LazyCompile,0x1e4e343a71a0,276,"CreateDate native apinatives.js:33",0xe662320598,~ -tick,0x10022b802,0x7fff5fbfe440,0,0x60,2,0x1e4e343764e6,0x1e4e34363d28,0x1e4e34364407,0x1e4e343645cb,0x1e4e34364dd8,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393594,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e343a72c0,349,"CreateDate native apinatives.js:33",0xe662320598,* -code-creation,LazyCompile,0x1e4e343a7420,428,"setTime native date.js:506",0xe662319490,~ -code-creation,LazyCompile,0x1e4e343a75e0,512,"setTime native date.js:506",0xe662319490,* -code-creation,LoadIC,0x1e4e343a77e0,138,"poolSize" -code-creation,LoadIC,0x1e4e343a77e0,138,"poolSize" -code-creation,CallMegamorphic,0x1e4e343a7880,814,"args_count: 1" -code-creation,CallIC,0x1e4e343a7bc0,462,"makeFastBuffer" -code-creation,Script,0x1e4e343a7da0,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/index.js",0x140cf21554d8,~ -code-creation,LazyCompile,0x1e4e343a7ea0,580," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/index.js:1",0x140cf21553e8, -tick,0x100250740,0x7fff5fbfdfb0,0,0x101009410,3,0x1e4e343764e6,0x1e4e34363d28,0x1e4e34364407,0x1e4e343645cb,0x1e4e34364dd8,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343a7fca,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393594,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e343a8100,258," path.js:299",0xe662372258,* -code-creation,LazyCompile,0x1e4e343a8220,216,"NativeModule.getCached node.js:592",0xe66235de18,~ -code-creation,LazyCompile,0x1e4e343a8300,262,"NativeModule.getCached node.js:592",0xe66235de18,* -code-creation,KeyedLoadIC,0x1e4e343a8420,158,"fs" -code-creation,KeyedLoadIC,0x1e4e343a8420,158,"fs" -code-creation,CallIC,0x1e4e343a84c0,157,"isBuffer" -code-creation,Script,0x1e4e343a8560,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js",0x140cf21565b0,~ -code-creation,LazyCompile,0x1e4e343a8660,560," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:1",0x140cf21564c0,~ -tick,0x1e4e3430adcd,0x7fff5fbfeb40,0,0x1e4e3435ff3c,0,0x1e4e34364f93,0x1e4e34366798,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343a8025,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393594,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,CallIC,0x1e4e343a88a0,490,"utf8Slice" -code-creation,Script,0x1e4e343a8aa0,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js",0x140cf2157438,~ -code-creation,Function,0x1e4e343a8ba0,252,"Framer /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:13",0x140cf2157668,~ -code-creation,Function,0x1e4e343a8ca0,448,"stringify /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:73",0x140cf2157758,~ -code-creation,Function,0x1e4e343a8e60,236," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:89",0x140cf2157848,~ -tick,0x7fff9199e6fe,0x7fff5fbfd8f8,0,0x7fff9125a857,2,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343a8025,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393594,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343a8f60,516," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:98",0x140cf2157940,~ -code-creation,Function,0x1e4e343a9180,544," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:102",0x140cf2157a68,~ -code-creation,Function,0x1e4e343a93a0,608," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:115",0x140cf2157b58,~ -code-creation,Function,0x1e4e343a9600,1072,"headersToDict /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:72",0x140cf2157ce8,~ -code-creation,Function,0x1e4e343a9a40,800,"Framer.execute.callback.type /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:34",0x140cf2157e40,~ -code-creation,Function,0x1e4e343a9d60,1692,"execute /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:27",0x140cf2157ff0,~ -code-creation,Function,0x1e4e343aa400,1320,"Framer._synFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:137",0x140cf2158150,~ -code-creation,Function,0x1e4e343aa940,536,"_synFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:134",0x140cf21582c8,~ -code-creation,Function,0x1e4e343aab60,268," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:176",0x140cf21583b8,~ -code-creation,Function,0x1e4e343aac80,460,"replyFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:174",0x140cf2158520,~ -code-creation,Function,0x1e4e343aae60,448," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:196",0x140cf2158610,~ -code-creation,Function,0x1e4e343ab020,416,"streamFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:194",0x140cf2158768,~ -code-creation,Function,0x1e4e343ab1c0,660,"dataFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:214",0x140cf21588a0,~ -code-creation,Function,0x1e4e343ab460,416,"pingFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:233",0x140cf21589c8,~ -code-creation,Function,0x1e4e343ab600,572,"rstFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:249",0x140cf2158af8,~ -code-creation,Function,0x1e4e343ab840,864,"settingsFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:272",0x140cf2158c28,~ -code-creation,Function,0x1e4e343abba0,632,"windowSizeFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:301",0x140cf2158d50,~ -code-creation,Function,0x1e4e343abe20,504,"windowUpdateFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:326",0x140cf2158e80,~ -code-creation,LazyCompile,0x1e4e343ac020,1624," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:1",0x140cf2157348,~ -code-creation,KeyedLoadIC,0x1e4e343ac680,158,"buffer" -code-creation,KeyedLoadIC,0x1e4e343ac680,158,"buffer" -code-creation,StoreIC,0x1e4e343ac720,256,"rstCache" -code-creation,StoreIC,0x1e4e343ac720,256,"rstCache" -code-creation,StoreIC,0x1e4e343ac820,334,"settingsCache" -code-creation,StoreIC,0x1e4e343ac820,334,"settingsCache" -tick,0x1e4e34311240,0x7fff5fbfeab8,0,0x10017128d,0,0x1e4e3436532b,0x1e4e34366798,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343a8079,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393594,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343ac980,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/dictionary.js",0x140cf215c4c8,~ -code-creation,LazyCompile,0x1e4e343aca80,284," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/dictionary.js:1",0x140cf215c3d8,~ -code-creation,Stub,0x1e4e343acba0,204,"KeyedLoadElementStub" -code-creation,KeyedLoadIC,0x1e4e343acc80,130,"" -code-creation,KeyedLoadIC,0x1e4e343acc80,130,"args_count: 0" -code-creation,Stub,0x1e4e343acd20,263,"KeyedStoreElementStub" -code-creation,KeyedStoreIC,0x1e4e343ace40,130,"" -code-creation,KeyedStoreIC,0x1e4e343ace40,130,"args_count: 0" -code-creation,StoreIC,0x1e4e343acee0,226,"dictionary" -code-creation,StoreIC,0x1e4e343acee0,226,"dictionary" -tick,0x1001a0724,0x7fff5fbfea60,0,0x11e9a5f00000,0,0x1e4e343632c3,0x1e4e34360216,0x1e4e34364c8b,0x1e4e34366416,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343935d0,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343acfe0,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js",0x140cf215f778,~ -code-creation,Function,0x1e4e343ad0e0,592,"Parser /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:21",0x140cf215f950,~ -code-creation,Function,0x1e4e343ad340,252,"create /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:48",0x140cf215fa70,~ -code-creation,Function,0x1e4e343ad440,216,"destroy /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:56",0x140cf215fb68,~ -code-creation,Function,0x1e4e343ad520,184,"Parser._write.cb /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:68",0x140cf215fc50,~ -code-creation,Function,0x1e4e343ad5e0,304,"Parser._write /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:134",0x140cf215fd38,~ -code-creation,Function,0x1e4e343ad720,588,"Parser._write /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:118",0x140cf215fe60,~ -code-creation,Function,0x1e4e343ad980,2100,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:66",0x140cf215ffe8,~ -code-creation,Function,0x1e4e343ae1c0,252,"end /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:161",0x140cf21600e0,~ -code-creation,Function,0x1e4e343ae2c0,768,"createFramer /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:171",0x140cf2160210,~ -code-creation,Function,0x1e4e343ae5c0,384,"onFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:226",0x140cf2160338,~ -code-creation,Function,0x1e4e343ae740,1364,"execute /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:198",0x140cf21604b8,~ -code-creation,LazyCompile,0x1e4e343aeca0,1492," /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:1",0x140cf215f688,~ -tick,0x1002c2c2f,0x7fff5fbfead0,0,0x11e9a5fd89d8,0,0x1e4e3436baef,0x1e4e3436b0df,0x1e4e3436638c,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343aeda7,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343935d0,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343af280,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js",0x140cf2160d38,~ -code-creation,Function,0x1e4e343af380,700,"exports._renderHeaders /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:10",0x140cf2160fb8,~ -code-creation,Function,0x1e4e343af640,252,"exports.writeHead /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:79",0x140cf21610b0,~ -code-creation,Function,0x1e4e343af740,352,"exports.writeHead /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:71",0x140cf21611a8,~ -code-creation,Function,0x1e4e343af8a0,1444,"exports.writeHead /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:30",0x140cf21612f8,~ -code-creation,Function,0x1e4e343afe60,184,"exports.push.callback /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:105",0x140cf21613e0,~ -code-creation,Function,0x1e4e343aff20,716,"exports.push /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:127",0x140cf2161520,~ -code-creation,Function,0x1e4e343b0200,1160,"exports.push /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:107",0x140cf2161640,~ -code-creation,Function,0x1e4e343b06a0,948,"push /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:95",0x140cf21617b8,~ -code-creation,LazyCompile,0x1e4e343b0a60,684," /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:1",0x140cf2160c48,~ -tick,0x7fff911daaf5,0x7fff5fbfdec0,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -tick,0x100262867,0x7fff5fbfc080,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343b0d20,240,"http.js",0x140cf2182100,~ -tick,0x1002e814d,0x7fff5fbfd770,0,0x7fff5fbfd7b0,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -tick,0x10026d8d3,0x7fff5fbfb680,0,0x7fff5fbfb700,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Stub,0x1e4e343b0e20,524,"FastNewContextStub" -code-creation,Function,0x1e4e343b1040,432,"parserOnHeaders http.js:45",0x140cf2182888,~ -code-creation,Function,0x1e4e343b1200,1484,"parserOnHeadersComplete http.js:59",0x140cf21829d8,~ -code-creation,Function,0x1e4e343b17e0,456,"parserOnBody http.js:117",0x140cf2182ae8,~ -code-creation,Function,0x1e4e343b19c0,1076,"parserOnMessageComplete http.js:127",0x140cf2182c00,~ -code-creation,Function,0x1e4e343b1e00,260," http.js:256",0x140cf2182ce8,~ -code-creation,Function,0x1e4e343b1f20,424,"utcDate http.js:252",0x140cf2182df8,~ -code-creation,Function,0x1e4e343b20e0,672,"IncomingMessage http.js:265",0x140cf2182ee8,~ -code-creation,Function,0x1e4e343b2380,564,"OutgoingMessage http.js:432",0x140cf2182fd0,~ -code-creation,Function,0x1e4e343b25c0,556,"ServerResponse http.js:887",0x140cf21830c0,~ -code-creation,Function,0x1e4e343b2800,232,"onServerResponseClose http.js:906",0x140cf21831a8,~ -code-creation,Function,0x1e4e343b2900,628," http.js:1033",0x140cf21832b8,~ -code-creation,Function,0x1e4e343b2b80,688,"Agent http.js:1025",0x140cf21833b8,~ -code-creation,Function,0x1e4e343b2e40,276," http.js:1235",0x140cf21834a0,~ -code-creation,Function,0x1e4e343b2f60,3432,"ClientRequest http.js:1145",0x140cf2183620,~ -code-creation,Function,0x1e4e343b3ce0,284,"createHangUpError http.js:1263",0x140cf2183730,~ -code-creation,Function,0x1e4e343b3e00,600,"freeParser http.js:1276",0x140cf2183828,~ -code-creation,Function,0x1e4e343b4060,312," http.js:1306",0x140cf2183910,~ -code-creation,Function,0x1e4e343b41a0,852,"socketCloseListener http.js:1296",0x140cf2183a60,~ -code-creation,Function,0x1e4e343b4500,568,"socketErrorListener http.js:1324",0x140cf2183b98,~ -code-creation,Function,0x1e4e343b4740,496,"socketOnEnd http.js:1344",0x140cf2183cc8,~ -code-creation,Function,0x1e4e343b4940,1396,"socketOnData http.js:1362",0x140cf2183e58,~ -tick,0x7fff9199e6fe,0x7fff5fbfe148,0,0x7fff9125a857,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343b4ec0,1208,"parserOnIncomingClient http.js:1411",0x140cf2183fb0,~ -code-creation,Function,0x1e4e343b5380,764,"responseOnEnd http.js:1471",0x140cf21840f0,~ -code-creation,Function,0x1e4e343b5680,268,"ondrain http.js:1617",0x140cf21841d8,~ -code-creation,Function,0x1e4e343b57a0,268,"httpSocketSetup http.js:1622",0x140cf21842c8,~ -code-creation,Function,0x1e4e343b58c0,472,"Server http.js:1628",0x140cf21843d8,~ -code-creation,Function,0x1e4e343b5aa0,380,"abortIncoming http.js:1659",0x140cf21844c8,~ -code-creation,Function,0x1e4e343b5c20,328,"serverSocketCloseListener http.js:1668",0x140cf21845f0,~ -code-creation,Function,0x1e4e343b5d80,208," http.js:1681",0x140cf21846d8,~ -code-creation,Function,0x1e4e343b5e60,224," http.js:1699",0x140cf21847c8,~ -code-creation,Function,0x1e4e343b5f40,968,"socket.ondata http.js:1703",0x140cf2184920,~ -code-creation,Function,0x1e4e343b6320,780,"socket.onend http.js:1732",0x140cf2184a40,~ -code-creation,Function,0x1e4e343b6640,588,"parser.onIncoming.res._expect_continue http.js:1775",0x140cf2184b50,~ -code-creation,Function,0x1e4e343b68a0,1204,"parser.onIncoming http.js:1758",0x140cf2184c98,~ -code-creation,Function,0x1e4e343b6d60,1456,"connectionListener http.js:1654",0x140cf2184e28,~ -code-creation,Function,0x1e4e343b7320,564,"Client http.js:1816",0x140cf2184f50,~ -code-creation,Function,0x1e4e343b7560,236,"debug http.js:35",0x140cf2185040,~ -code-creation,Function,0x1e4e343b7660,184,"debug http.js:37",0x140cf2185128,~ -code-creation,Function,0x1e4e343b7720,440," http.js:160",0x140cf2185238,~ -code-creation,Function,0x1e4e343b78e0,224,"IncomingMessage.destroy http.js:299",0x140cf2185328,~ -code-creation,Function,0x1e4e343b79c0,308,"IncomingMessage.setEncoding http.js:304",0x140cf2185450,~ -code-creation,Function,0x1e4e343b7b00,252,"IncomingMessage.pause http.js:310",0x140cf2185538,~ -code-creation,Function,0x1e4e343b7c00,308,"IncomingMessage.resume http.js:316",0x140cf2185620,~ -code-creation,Function,0x1e4e343b7d40,848,"IncomingMessage._emitPending http.js:329",0x140cf2185750,~ -code-creation,Function,0x1e4e343b80a0,480,"IncomingMessage._emitPending http.js:326",0x140cf2185880,~ -code-creation,Function,0x1e4e343b8280,380,"IncomingMessage._emitData http.js:352",0x140cf2185978,~ -code-creation,Function,0x1e4e343b8400,280,"IncomingMessage._emitEnd http.js:364",0x140cf2185a60,~ -code-creation,Function,0x1e4e343b8520,1368,"IncomingMessage._addHeaderLine http.js:380",0x140cf2185b60,~ -code-creation,Function,0x1e4e343b8a80,224,"OutgoingMessage.destroy http.js:457",0x140cf2185c50,~ -code-creation,Function,0x1e4e343b8b60,480,"OutgoingMessage._send http.js:463",0x140cf2185d48,~ -code-creation,Function,0x1e4e343b8d40,844,"OutgoingMessage._writeRaw http.js:480",0x140cf2185e50,~ -code-creation,Function,0x1e4e343b90a0,892,"OutgoingMessage._buffer http.js:508",0x140cf2185f60,~ -code-creation,Function,0x1e4e343b9420,1088,"store http.js:548",0x140cf2186058,~ -code-creation,Function,0x1e4e343b9860,2604,"OutgoingMessage._storeHeader http.js:535",0x140cf2186250,~ -code-creation,Function,0x1e4e343ba2a0,860,"OutgoingMessage.setHeader http.js:639",0x140cf21863a8,~ -tick,0x10014fdd3,0x7fff5fbfe1f0,0,0x100000001,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343ba600,508,"OutgoingMessage.getHeader http.js:656",0x140cf21864d8,~ -code-creation,Function,0x1e4e343ba800,684,"OutgoingMessage.removeHeader http.js:668",0x140cf2186618,~ -code-creation,Function,0x1e4e343baac0,756,"OutgoingMessage._renderHeaders http.js:685",0x140cf2186748,~ -code-creation,Function,0x1e4e343badc0,1152,"OutgoingMessage.write http.js:703",0x140cf2186890,~ -code-creation,Function,0x1e4e343bb240,816,"OutgoingMessage.addTrailers http.js:742",0x140cf21869b8,~ -code-creation,Function,0x1e4e343bb580,1896,"OutgoingMessage.end http.js:762",0x140cf2186af8,~ -code-creation,Function,0x1e4e343bbd00,420,"OutgoingMessage._finish http.js:829",0x140cf2186c10,~ -code-creation,Function,0x1e4e343bbec0,656,"OutgoingMessage._flush http.js:841",0x140cf2186d10,~ -code-creation,Function,0x1e4e343bc160,404,"ServerResponse.assignSocket http.js:910",0x140cf2186e20,~ -code-creation,Function,0x1e4e343bc300,412,"ServerResponse.detachSocket http.js:919",0x140cf2186f30,~ -code-creation,Function,0x1e4e343bc4a0,292,"ServerResponse.writeContinue http.js:926",0x140cf2187018,~ -code-creation,Function,0x1e4e343bc5e0,224,"ServerResponse._implicitHeader http.js:931",0x140cf2187100,~ -code-creation,Function,0x1e4e343bc6c0,1892,"ServerResponse.writeHead http.js:935",0x140cf2187258,~ -code-creation,Function,0x1e4e343bce40,248,"ServerResponse.writeHeader http.js:1008",0x140cf2187348,~ -code-creation,Function,0x1e4e343bcf40,704,"Agent.addRequest http.js:1061",0x140cf2187458,~ -code-creation,Function,0x1e4e343bd200,244,"Agent.createSocket.onFree http.js:1100",0x140cf2187540,~ -code-creation,Function,0x1e4e343bd300,236,"Agent.createSocket.onClose http.js:1104",0x140cf2187630,~ -code-creation,Function,0x1e4e343bd400,368,"Agent.createSocket.onRemove http.js:1111",0x140cf2187718,~ -code-creation,Function,0x1e4e343bd580,1632,"Agent.createSocket http.js:1080",0x140cf21878c8,~ -code-creation,Function,0x1e4e343bdbe0,732,"Agent.removeSocket http.js:1123",0x140cf21879e8,~ -code-creation,Function,0x1e4e343bdec0,312,"ClientRequest._implicitHeader http.js:1245",0x140cf2187ad0,~ -code-creation,Function,0x1e4e343be000,320,"ClientRequest.abort http.js:1250",0x140cf2187bb8,~ -code-creation,Function,0x1e4e343be140,888,"ClientRequest.onSocket http.js:1497",0x140cf2187cc8,~ -code-creation,Function,0x1e4e343be4c0,364,"ClientRequest.onSocket http.js:1494",0x140cf2187dd8,~ -code-creation,Function,0x1e4e343be640,352,"ClientRequest._deferToConnect.onSocket http.js:1544",0x140cf2187ee0,~ -code-creation,Function,0x1e4e343be7a0,480,"ClientRequest._deferToConnect.onSocket http.js:1537",0x140cf2187fe8,~ -code-creation,Function,0x1e4e343be980,556,"ClientRequest._deferToConnect http.js:1530",0x140cf2188150,~ -code-creation,Function,0x1e4e343bebc0,220,"emitTimeout http.js:1563",0x140cf2188238,~ -code-creation,Function,0x1e4e343beca0,216,"ClientRequest.setTimeout http.js:1576",0x140cf2188320,~ -code-creation,Function,0x1e4e343bed80,216,"ClientRequest.setTimeout http.js:1582",0x140cf2188410,~ -code-creation,Function,0x1e4e343bee60,860,"ClientRequest.setTimeout http.js:1559",0x140cf2188538,~ -code-creation,Function,0x1e4e343bf1c0,240,"ClientRequest.setNoDelay http.js:1587",0x140cf2188628,~ -code-creation,Function,0x1e4e343bf2c0,240,"ClientRequest.setSocketKeepAlive http.js:1590",0x140cf2188718,~ -code-creation,Function,0x1e4e343bf3c0,208,"ClientRequest.clearTimeout http.js:1594",0x140cf2188808,~ -code-creation,Function,0x1e4e343bf4a0,528,"exports.request http.js:1598",0x140cf2188930,~ -code-creation,Function,0x1e4e343bf6c0,248,"exports.get http.js:1610",0x140cf2188a30,~ -code-creation,Function,0x1e4e343bf7c0,220,"exports.createServer http.js:1649",0x140cf2188b40,~ -code-creation,Function,0x1e4e343bf8a0,224,"Client.request http.js:1842",0x140cf2188c30,~ -code-creation,Function,0x1e4e343bf980,220,"Client.request http.js:1849",0x140cf2188d18,~ -code-creation,Function,0x1e4e343bfa60,236,"Client.request http.js:1848",0x140cf2188e08,~ -code-creation,Function,0x1e4e343bfb60,720,"Client.request http.js:1827",0x140cf2188f48,~ -code-creation,Function,0x1e4e343bfe40,224," http.js:1859",0x140cf2189060,~ -code-creation,LazyCompile,0x1e4e343bff20,10768," http.js:1",0x140cf2182010,~ -tick,0x1002e93df,0x7fff5fbfc880,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e343c078c,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -tick,0x1001987a0,0x7fff5fbfb330,0,0x0,1 -code-creation,Script,0x1e4e343c2940,240,"net.js",0x140cf21be730,~ -tick,0x100275e8e,0x7fff5fbfcf90,0,0x1006037a0,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c078c,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Stub,0x1e4e343c2a40,405,"FastNewContextStub" -code-creation,Function,0x1e4e343c2be0,184,"noop net.js:30",0x140cf21beac0,~ -code-creation,Function,0x1e4e343c2ca0,284,"createPipe net.js:33",0x140cf21bebd0,~ -code-creation,Function,0x1e4e343c2dc0,284,"createTCP net.js:39",0x140cf21bece0,~ -code-creation,Function,0x1e4e343c2ee0,360,"isPipeName net.js:60",0x140cf21bedf0,~ -code-creation,Function,0x1e4e343c3060,900,"normalizeConnectArgs net.js:90",0x140cf21bef10,~ -code-creation,Function,0x1e4e343c3400,464,"initSocketHandle net.js:114",0x140cf21bf000,~ -code-creation,Function,0x1e4e343c35e0,936,"Socket net.js:131",0x140cf21bf130,~ -code-creation,Function,0x1e4e343c39a0,508,"afterShutdown net.js:287",0x140cf21bf238,~ -code-creation,Function,0x1e4e343c3ba0,1564,"onread net.js:377",0x140cf21bf388,~ -code-creation,Function,0x1e4e343c41c0,772,"afterWrite net.js:585",0x140cf21bf4b0,~ -code-creation,Function,0x1e4e343c44e0,944,"connect net.js:614",0x140cf21bf600,~ -code-creation,Stub,0x1e4e343c48a0,143,"BinaryOpStub_BIT_AND_OverwriteRight_Uninitialized" -tick,0x1003401b1,0x7fff5fbfd800,0,0x7fff5fbfd830,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c078c,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343c4940,1388,"afterConnect net.js:719",0x140cf21bf778,~ -code-creation,Function,0x1e4e343c4ec0,340,"errnoException net.js:766",0x140cf21bf898,~ -code-creation,Function,0x1e4e343c5020,256,"Object.defineProperty.get net.js:803",0x140cf21bf980,~ -code-creation,Function,0x1e4e343c5120,212,"Object.defineProperty.set net.js:809",0x140cf21bfa70,~ -code-creation,Function,0x1e4e343c5200,1048,"Server net.js:779",0x140cf21bfb98,~ -code-creation,Function,0x1e4e343c5620,268,"toNumber net.js:823",0x140cf21bfc88,~ -code-creation,Function,0x1e4e343c5740,264," net.js:932",0x140cf21bfd78,~ -code-creation,Function,0x1e4e343c5860,832,"listen net.js:928",0x140cf21bff10,~ -code-creation,Function,0x1e4e343c5ba0,908,"onconnection net.js:1011",0x140cf21c0058,~ -code-creation,Function,0x1e4e343c5f40,236,"debug net.js:54",0x140cf21c0148,~ -code-creation,Function,0x1e4e343c6040,184,"debug net.js:56",0x140cf21c0230,~ -code-creation,Function,0x1e4e343c6100,264,"exports.createServer net.js:65",0x140cf21c0340,~ -code-creation,Function,0x1e4e343c6220,372,"exports.connect.exports.createConnection net.js:82",0x140cf21c0470,~ -code-creation,Function,0x1e4e343c63a0,344,"Socket.listen net.js:163",0x140cf21c0588,~ -code-creation,Function,0x1e4e343c6500,552,"Socket.setTimeout net.js:170",0x140cf21c0680,~ -code-creation,Function,0x1e4e343c6740,272,"Socket._onTimeout net.js:186",0x140cf21c0788,~ -code-creation,Function,0x1e4e343c6860,404,"Socket.setNoDelay net.js:192",0x140cf21c0878,~ -code-creation,Function,0x1e4e343c6a00,340,"Socket.setKeepAlive net.js:199",0x140cf21c0970,~ -code-creation,Function,0x1e4e343c6b60,320,"Socket.address net.js:205",0x140cf21c0a58,~ -code-creation,Function,0x1e4e343c6ca0,516,"Object.defineProperty.get net.js:214",0x140cf21c0b40,~ -code-creation,Function,0x1e4e343c6ec0,280,"Object.defineProperty.get net.js:231",0x140cf21c0c28,~ -code-creation,Function,0x1e4e343c6fe0,320,"Socket.pause net.js:239",0x140cf21c0d10,~ -code-creation,Function,0x1e4e343c7120,320,"Socket.resume net.js:247",0x140cf21c0df8,~ -code-creation,Function,0x1e4e343c7260,880,"Socket.end net.js:255",0x140cf21c0f18,~ -code-creation,Function,0x1e4e343c75e0,344,"Socket.destroySoon net.js:305",0x140cf21c1000,~ -code-creation,Function,0x1e4e343c7740,260,"Socket._connectQueueCleanUp net.js:315",0x140cf21c10f0,~ -code-creation,Function,0x1e4e343c7860,224,"Socket._destroy.self.errorEmitted net.js:328",0x140cf21c11d8,~ -code-creation,Function,0x1e4e343c7940,400,"fireErrorCallbacks net.js:325",0x140cf21c12e0,~ -code-creation,Function,0x1e4e343c7ae0,272,"Socket._destroy.destroyed net.js:357",0x140cf21c13c8,~ -code-creation,Function,0x1e4e343c7c00,1156,"Socket._destroy net.js:322",0x140cf21c1548,~ -code-creation,Function,0x1e4e343c80a0,208,"Socket.destroy net.js:372",0x140cf21c1638,~ -code-creation,Function,0x1e4e343c8180,308,"Socket.setEncoding net.js:431",0x140cf21c1760,~ -code-creation,Function,0x1e4e343c82c0,496,"Socket._getpeername net.js:437",0x140cf21c1848,~ -code-creation,Function,0x1e4e343c84c0,220," net.js:452",0x140cf21c1930,~ -code-creation,Function,0x1e4e343c85a0,220," net.js:457",0x140cf21c1a18,~ -code-creation,Function,0x1e4e343c8680,1552,"Socket.write net.js:465",0x140cf21c1b68,~ -code-creation,Function,0x1e4e343c8ca0,1396,"Socket._write net.js:515",0x140cf21c1cb0,~ -code-creation,Function,0x1e4e343c9220,480," net.js:571",0x140cf21c1da8,~ -code-creation,Function,0x1e4e343c9400,368," net.js:566",0x140cf21c1ea8,~ -code-creation,Function,0x1e4e343c9580,252,"Socket.connect.require.lookup.addressType net.js:698",0x140cf21c1f90,~ -code-creation,Function,0x1e4e343c9680,672,"Socket.connect net.js:687",0x140cf21c20c0,~ -tick,0x10012fa3b,0x7fff5fbfdc18,0,0x323ae980,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c078c,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343c9920,1568,"Socket.connect net.js:651",0x140cf21c22a8,~ -code-creation,Function,0x1e4e343c9f40,1484,"exports._createServerHandle net.js:827",0x140cf21c2448,~ -code-creation,Function,0x1e4e343ca520,224,"Server._listen2.self._handle.onconnection net.js:894",0x140cf21c2530,~ -code-creation,Function,0x1e4e343ca600,224,"Server._listen2._connectionKey net.js:913",0x140cf21c2618,~ -code-creation,Function,0x1e4e343ca6e0,220,"Server._listen2 net.js:922",0x140cf21c2700,~ -code-creation,Function,0x1e4e343ca7c0,1236,"Server._listen2 net.js:884",0x140cf21c2888,~ -code-creation,Function,0x1e4e343caca0,380,"Server.listen net.js:990",0x140cf21c29a8,~ -code-creation,Function,0x1e4e343cae20,2276,"Server.listen net.js:942",0x140cf21c2ba8,~ -code-creation,Function,0x1e4e343cb720,388,"Server.address net.js:1001",0x140cf21c2c90,~ -code-creation,Function,0x1e4e343cb8c0,288,"Server.close net.js:1059",0x140cf21c2d80,~ -code-creation,Function,0x1e4e343cb9e0,536,"Server.close net.js:1044",0x140cf21c2e90,~ -code-creation,Function,0x1e4e343cbc00,220,"Server._emitCloseIfDrained net.js:1073",0x140cf21c2f78,~ -code-creation,Function,0x1e4e343cbce0,396,"Server._emitCloseIfDrained net.js:1068",0x140cf21c3070,~ -code-creation,Function,0x1e4e343cbe80,260," net.js:1079",0x140cf21c3168,~ -code-creation,Function,0x1e4e343cbfa0,332,"Server._setupSlave net.js:1084",0x140cf21c3258,~ -code-creation,Function,0x1e4e343cc100,256,"exports.isIPv4 net.js:1098",0x140cf21c3348,~ -code-creation,Function,0x1e4e343cc200,260,"exports.isIPv6 net.js:1103",0x140cf21c3438,~ -code-creation,Function,0x1e4e343cc320,656,"exports._setSimultaneousAccepts net.js:1111",0x140cf21c3528,~ -code-creation,Function,0x1e4e343cc5c0,184,"exports._setSimultaneousAccepts net.js:1127",0x140cf21c3618,~ -code-creation,LazyCompile,0x1e4e343cc680,6348," net.js:1",0x140cf21be640,~ -code-creation,Script,0x1e4e343cdf60,240,"timers.js",0x140cf21c3b10,~ -code-creation,Stub,0x1e4e343ce060,261,"FastNewContextStub" -code-creation,Function,0x1e4e343ce180,1756,"list.ontimeout timers.js:71",0x140cf21c3d10, -tick,0x7fff9199e6fe,0x7fff5fbfd618,0,0x7fff9125a857,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343cccfa,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c078c,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343ce860,880,"insert timers.js:53",0x140cf21c3e68,~ -code-creation,Function,0x1e4e343cebe0,296,"debug timers.js:31",0x140cf21c3f78,~ -code-creation,Function,0x1e4e343ced20,184,"debug timers.js:33",0x140cf21c4060,~ -code-creation,Function,0x1e4e343cede0,516,"exports.unenroll timers.js:122",0x140cf21c4188,~ -code-creation,Function,0x1e4e343cf000,312,"exports.enroll timers.js:139",0x140cf21c42a0,~ -code-creation,Function,0x1e4e343cf140,476,"exports.active timers.js:151",0x140cf21c43d0,~ -code-creation,Function,0x1e4e343cf320,220,"exports.setTimeout.timer._onTimeout timers.js:196",0x140cf21c44b8,~ -code-creation,Function,0x1e4e343cf400,1156,"exports.setTimeout timers.js:170",0x140cf21c45f8,~ -code-creation,Function,0x1e4e343cf8a0,412,"exports.clearTimeout timers.js:209",0x140cf21c46e8,~ -code-creation,Function,0x1e4e343cfa40,220,"exports.setInterval.timer.ontimeout timers.js:233",0x140cf21c47d0,~ -code-creation,Function,0x1e4e343cfb20,984,"exports.setInterval timers.js:221",0x140cf21c4930,~ -code-creation,Function,0x1e4e343cff00,272,"exports.clearInterval timers.js:242",0x140cf21c4a20,~ -code-creation,LazyCompile,0x1e4e343d0020,1892," timers.js:1",0x140cf21c3a20,~ -code-creation,Script,0x1e4e343d07a0,240,"_linklist.js",0x140cf21c5800,~ -code-creation,Function,0x1e4e343d08a0,228,"init _linklist.js:22",0x140cf21c5938,~ -code-creation,Function,0x1e4e343d09a0,272,"peek _linklist.js:30",0x140cf21c5a28,~ -code-creation,Function,0x1e4e343d0ac0,260,"shift _linklist.js:38",0x140cf21c5b40,~ -code-creation,Function,0x1e4e343d0be0,420,"remove _linklist.js:47",0x140cf21c5c30,~ -code-creation,Function,0x1e4e343d0da0,352,"append _linklist.js:63",0x140cf21c5d48,~ -code-creation,Function,0x1e4e343d0f00,248,"isEmpty _linklist.js:73",0x140cf21c5e38,~ -code-creation,LazyCompile,0x1e4e343d1000,504," _linklist.js:1",0x140cf21c5710,~ -tick,0x7fff9199e282,0x7fff5fbfe248,1,0x10000884b,4,0x1e4e343cce1d,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c078c,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LoadIC,0x1e4e343d1200,224,"" -code-creation,LoadIC,0x1e4e343d1200,224,"" -tick,0x100260b13,0x7fff5fbfc660,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e343c086e,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343d12e0,240,"url.js",0x140cf21c8898,~ -tick,0x1002e8818,0x7fff5fbfd7d0,0,0x7fff5fbfd880,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c086e,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343d13e0,7752,"urlParse url.js:92",0x140cf21c8f00,~ -code-creation,Function,0x1e4e343d3240,2484,"urlFormat url.js:315",0x140cf21c9048,~ -code-creation,Function,0x1e4e343d3c00,276,"urlResolve url.js:371",0x140cf21c9170,~ -code-creation,Function,0x1e4e343d3d20,9208,"urlResolveObject url.js:375",0x140cf21c9390,~ -code-creation,Function,0x1e4e343d6120,500,"parseHost url.js:613",0x140cf21c9490,~ -code-creation,LazyCompile,0x1e4e343d6320,2896," url.js:1",0x140cf21c87a8,~ -tick,0x1002e7ba0,0x7fff5fbfb418,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e343d6534,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c086e,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343d6e80,240,"punycode.js",0x140cf21c99c8,~ -code-creation,Function,0x1e4e343d6f80,244,"error punycode.js:60",0x140cf21c9c60,~ -code-creation,Function,0x1e4e343d7080,400,"map punycode.js:72",0x140cf21c9d80,~ -code-creation,Function,0x1e4e343d7220,296,"mapDomain punycode.js:89",0x140cf21c9ea0,~ -code-creation,Stub,0x1e4e343d7360,143,"BinaryOpStub_SHL_OverwriteLeft_Uninitialized" -code-creation,Function,0x1e4e343d7400,1140,"ucs2decode punycode.js:107",0x140cf21c9fd8,~ -code-creation,Function,0x1e4e343d7880,612,"k punycode.js:136",0x140cf21ca110,~ -code-creation,Function,0x1e4e343d7b00,280,"ucs2encode punycode.js:135",0x140cf21ca220,~ -code-creation,Function,0x1e4e343d7c20,460,"basicToDigit punycode.js:160",0x140cf21ca310,~ -code-creation,Stub,0x1e4e343d7e00,143,"BinaryOpStub_SUB_OverwriteLeft_Uninitialized" -code-creation,Function,0x1e4e343d7ea0,348,"digitToBasic punycode.js:181",0x140cf21ca408,~ -code-creation,Stub,0x1e4e343d8000,143,"BinaryOpStub_SAR_OverwriteLeft_Uninitialized" -code-creation,Stub,0x1e4e343d80a0,143,"BinaryOpStub_DIV_OverwriteLeft_Uninitialized" -code-creation,Function,0x1e4e343d8140,836,"adapt punycode.js:192",0x140cf21ca560,~ -code-creation,Stub,0x1e4e343d84a0,143,"BinaryOpStub_SUB_OverwriteRight_Uninitialized" -tick,0x1003185eb,0x7fff5fbfd4a0,0,0x10201b1a8,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343d6534,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c086e,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343d8540,432,"encodeBasic punycode.js:211",0x140cf21ca658,~ -code-creation,Function,0x1e4e343d8700,2968,"decode punycode.js:223",0x140cf21ca898,~ -code-creation,Function,0x1e4e343d92a0,3324,"encode punycode.js:325",0x140cf21caac8,~ -code-creation,Function,0x1e4e343d9fa0,332,"punycode.version punycode.js:443",0x140cf21cabd8,~ -code-creation,Function,0x1e4e343da100,248,"toUnicode punycode.js:442",0x140cf21cace8,~ -code-creation,Function,0x1e4e343da200,304,"punycode.version punycode.js:459",0x140cf21cadf8,~ -code-creation,Function,0x1e4e343da340,248,"toASCII punycode.js:458",0x140cf21caf08,~ -code-creation,Function,0x1e4e343da440,4152," punycode.js:2",0x140cf21cb1f0,~ -code-creation,LazyCompile,0x1e4e343db480,432," punycode.js:1",0x140cf21c98d8,~ -code-creation,StoreIC,0x1e4e343db640,185,"decode" -code-creation,StoreIC,0x1e4e343db640,185,"decode" -code-creation,StoreIC,0x1e4e343db700,185,"encode" -code-creation,StoreIC,0x1e4e343db700,185,"encode" -code-creation,StoreIC,0x1e4e343db7c0,185,"ucs2" -code-creation,StoreIC,0x1e4e343db7c0,185,"ucs2" -code-creation,StoreIC,0x1e4e343db880,185,"decode" -code-creation,StoreIC,0x1e4e343db880,185,"decode" -code-creation,StoreIC,0x1e4e343db940,185,"encode" -code-creation,StoreIC,0x1e4e343db940,185,"encode" -code-creation,StoreIC,0x1e4e343dba00,185,"toASCII" -code-creation,StoreIC,0x1e4e343dba00,185,"toASCII" -code-creation,StoreIC,0x1e4e343dbac0,185,"toUnicode" -code-creation,StoreIC,0x1e4e343dbac0,185,"toUnicode" -code-creation,Stub,0x1e4e343dbb80,224,"CompareICStub" -code-creation,Script,0x1e4e343dbc60,240,"querystring.js",0x140cf21cb528,~ -code-creation,Function,0x1e4e343dbd60,260,"hasOwnProperty querystring.js:31",0x140cf21cb6a8,~ -code-creation,Function,0x1e4e343dbe80,208,"charCode querystring.js:36",0x140cf21cb798,~ -tick,0x7fff91213309,0x7fff5fbfdd70,0,0xffffffffffffffff,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343d6deb,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c086e,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343dbf60,3892,"QueryString.unescapeBuffer querystring.js:42",0x140cf21cba60,~ -code-creation,Function,0x1e4e343dcea0,236,"QueryString.unescape querystring.js:108",0x140cf21cbb58,~ -code-creation,Function,0x1e4e343dcfa0,208,"QueryString.escape querystring.js:113",0x140cf21cbc48,~ -code-creation,Function,0x1e4e343dd080,460,"stringifyPrimitive querystring.js:117",0x140cf21cbd38,~ -code-creation,Function,0x1e4e343dd260,276,"QueryString.stringify.QueryString.encode querystring.js:145",0x140cf21cbe48,~ -code-creation,Function,0x1e4e343dd380,620,"QueryString.stringify.QueryString.encode querystring.js:142",0x140cf21cbf78,~ -code-creation,Function,0x1e4e343dd600,1056,"QueryString.stringify.QueryString.encode querystring.js:134",0x140cf21cc0e0,~ -code-creation,Function,0x1e4e343dda20,1972,"QueryString.parse.QueryString.decode querystring.js:161",0x140cf21cc278, -code-creation,LazyCompile,0x1e4e343de1e0,880," querystring.js:1",0x140cf21cb438,~ -code-creation,Script,0x1e4e343de560,240,"freelist.js",0x140cf21ccd20,~ -code-creation,LazyCompile,0x1e4e343de660,428," freelist.js:1",0x140cf21ccc30,~ -code-creation,LazyCompile,0x1e4e343de820,296,"exports.FreeList freelist.js:23",0x140cf21cce20,~ -code-creation,StoreIC,0x1e4e343de960,185,"_events" -code-creation,StoreIC,0x1e4e343de960,185,"_events" -tick,0x10027c9d1,0x7fff5fbfe5b0,0,0x7fff5fbfe620,0,0x1e4e34333479,0x1e4e343341a7,0x1e4e343b2db6,0x1e4e343c2347,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343b0b70,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e34393615,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e343dea20,304,"DoRegExpExec native regexp.js:123",0xe662310060,~ -code-creation,LazyCompile,0x1e4e343deb60,248,"DoRegExpExec native regexp.js:123",0xe662310060,* -code-creation,Script,0x1e4e343dec60,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js",0x140cf21cead0,~ -code-creation,Function,0x1e4e343ded60,296,"Scheduler /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:8",0x140cf21cf0e8,~ -code-creation,Function,0x1e4e343deea0,252,"create /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:18",0x140cf21cf208,~ -code-creation,Function,0x1e4e343defa0,284,"schedule /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:28",0x140cf21cf310,~ -code-creation,Function,0x1e4e343df0c0,748,"Scheduler.tick._tickListener /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:39",0x140cf21cf410,~ -code-creation,Function,0x1e4e343df3c0,624,"tick /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:36",0x140cf21cf518,~ -code-creation,LazyCompile,0x1e4e343df640,512," /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:1",0x140cf21ce9e0,~ -tick,0x1002680dc,0x7fff5fbfeaf0,0,0x9be4f4c059,0,0x1e4e343632c3,0x1e4e34360216,0x1e4e34365a84,0x1e4e34366323,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3439369f,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e343df840,258," path.js:299",0xe662372258,* -code-creation,LazyCompile,0x1e4e343df960,780,"ArrayConcat native array.js:471",0xe662314cb8,~ -code-creation,Stub,0x1e4e343dfc80,2516,"RecordWriteStub" -code-creation,Stub,0x1e4e343e0660,2540,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e343e1060,1248,"ArrayConcat native array.js:471",0xe662314cb8,* -code-creation,Script,0x1e4e343e1540,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/zlib-pool.js",0x140cf21d0430,~ -code-creation,Function,0x1e4e343e1640,244,"Pool /Users/indutny/Code/indutny/node-spdy/lib/spdy/zlib-pool.js:8",0x140cf21d0650,~ -code-creation,Function,0x1e4e343e1740,244,"create /Users/indutny/Code/indutny/node-spdy/lib/spdy/zlib-pool.js:19",0x140cf21d0768,~ -code-creation,Function,0x1e4e343e1840,600,"get /Users/indutny/Code/indutny/node-spdy/lib/spdy/zlib-pool.js:28",0x140cf21d0878,~ -code-creation,Function,0x1e4e343e1aa0,380,"done /Users/indutny/Code/indutny/node-spdy/lib/spdy/zlib-pool.js:53",0x140cf21d0960,~ -code-creation,Function,0x1e4e343e1c20,564,"put /Users/indutny/Code/indutny/node-spdy/lib/spdy/zlib-pool.js:46",0x140cf21d0a98,~ -code-creation,LazyCompile,0x1e4e343e1e60,624," /Users/indutny/Code/indutny/node-spdy/lib/spdy/zlib-pool.js:1",0x140cf21d0340,~ -code-creation,StoreIC,0x1e4e343e20e0,226,"create" -code-creation,StoreIC,0x1e4e343e20e0,226,"create" -tick,0x1e4e343938b0,0x7fff5fbfeea8,0,0x1e4e343659f1,0,0x1e4e34366323,0x1e4e34365e1c,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -tick,0x100133e93,0x7fff5fbfe5c0,1,0x1000162b8,2,0x1e4e34367947,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343e21e0,240,"/Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js",0x140cf21d12e8,~ -code-creation,Function,0x1e4e343e22e0,240,"Server /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:27",0x140cf21d1648,~ -code-creation,Function,0x1e4e343e23e0,212," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:37",0x140cf21d1738,~ -code-creation,Function,0x1e4e343e24c0,416,"instantiate /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:20",0x140cf21d1840,~ -code-creation,Function,0x1e4e343e2660,216,"onerror /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:337",0x140cf21d1938,~ -code-creation,Function,0x1e4e343e2740,204,"parser.on.self._goaway /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:375",0x140cf21d1a28,~ -code-creation,Function,0x1e4e343e2820,2460," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:324",0x140cf21d1b50,~ -code-creation,Function,0x1e4e343e31c0,432,"onversion /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:410",0x140cf21d1c50,~ -code-creation,Function,0x1e4e343e3380,272,"onframer /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:418",0x140cf21d1d50,~ -code-creation,Function,0x1e4e343e34a0,256,"onParserError /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:424",0x140cf21d1e50,~ -code-creation,Function,0x1e4e343e35a0,240,"ontimeout /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:432",0x140cf21d1f48,~ -code-creation,Function,0x1e4e343e36a0,256,"onSocketError /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:437",0x140cf21d2048,~ -code-creation,Function,0x1e4e343e37a0,300,"onclose /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:441",0x140cf21d2140,~ -code-creation,Function,0x1e4e343e38e0,252,"ondrain /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:447",0x140cf21d2238,~ -code-creation,Function,0x1e4e343e39e0,1676,"Connection /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:289",0x140cf21d2388,~ -code-creation,Function,0x1e4e343e4080,244," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:556",0x140cf21d2470,~ -code-creation,Function,0x1e4e343e4180,312," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:554",0x140cf21d2568,~ -code-creation,Function,0x1e4e343e42c0,392," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:562",0x140cf21d2650,~ -tick,0x7fff9199e6fe,0x7fff5fbfdbd8,0,0x7fff9125a857,2,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343e4460,1340,"Stream /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:493",0x140cf21d2748,~ -code-creation,Function,0x1e4e343e49a0,888,"_init /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:55",0x140cf21d2860,~ -code-creation,Function,0x1e4e343e4d20,184,"ondata /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:115",0x140cf21d2948,~ -code-creation,Function,0x1e4e343e4de0,1124,"restore /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:131",0x140cf21d2a40,~ -code-creation,Function,0x1e4e343e5260,424,"onFirstByte /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:149",0x140cf21d2b50,~ -code-creation,Function,0x1e4e343e5420,696,"onReadable /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:168",0x140cf21d2c60,~ -code-creation,Function,0x1e4e343e56e0,632,"emit /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:119",0x140cf21d2d90,~ -code-creation,Function,0x1e4e343e5960,868,"proto._wrap /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:109",0x140cf21d2ef0,~ -code-creation,Function,0x1e4e343e5ce0,836,"_wrap /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:88",0x140cf21d3018,~ -code-creation,Function,0x1e4e343e6040,260,"onfinish /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:225",0x140cf21d3110,~ -code-creation,Function,0x1e4e343e6160,584,"onconnect /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:220",0x140cf21d3228,~ -code-creation,Function,0x1e4e343e63c0,260,"onfinish /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:243",0x140cf21d3320,~ -code-creation,Function,0x1e4e343e64e0,796,"onrequest /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:232",0x140cf21d3438,~ -code-creation,Function,0x1e4e343e6800,396,"onerror /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:250",0x140cf21d3538,~ -code-creation,Function,0x1e4e343e69a0,1120,"_onConnection /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:204",0x140cf21d3688,~ -code-creation,Function,0x1e4e343e6e00,400,"create /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:267",0x140cf21d37d0,~ -code-creation,Function,0x1e4e343e6fa0,312,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:461",0x140cf21d38d8,~ -code-creation,Function,0x1e4e343e70e0,272,"Connection._setDefaultWindow /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:482",0x140cf21d39c8,~ -code-creation,Function,0x1e4e343e7200,576,"_setDefaultWindow /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:473",0x140cf21d3ad8,~ -code-creation,Function,0x1e4e343e7440,216,"pause /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:573",0x140cf21d3bd0,~ -code-creation,Function,0x1e4e343e7520,216,"resume /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:574",0x140cf21d3cc8,~ -code-creation,Function,0x1e4e343e7600,372,"_isGoaway /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:581",0x140cf21d3dc0,~ -code-creation,Function,0x1e4e343e7780,436," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,~ -code-creation,Function,0x1e4e343e7940,876,"init /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:589",0x140cf21d3fe8,~ -code-creation,Function,0x1e4e343e7cc0,396,"lock /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:614",0x140cf21d40e8,~ -code-creation,Function,0x1e4e343e7e60,340,"unlock /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:629",0x140cf21d41e0,~ -code-creation,Function,0x1e4e343e7fc0,216,"setTimeout /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:640",0x140cf21d42e0,~ -code-creation,Function,0x1e4e343e80a0,336,"_handleClose /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:646",0x140cf21d43d8,~ -code-creation,Function,0x1e4e343e8200,240,"close /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:656",0x140cf21d44d0,~ -code-creation,Function,0x1e4e343e8300,252,"Stream.destroy /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:689",0x140cf21d45b8,~ -code-creation,Function,0x1e4e343e8400,1028,"destroy /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:665",0x140cf21d46d8,~ -code-creation,Function,0x1e4e343e8820,812,"_drainSink /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:694",0x140cf21d47e8,~ -code-creation,Function,0x1e4e343e8b60,516,"Stream._writeData /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:738",0x140cf21d4900,~ -code-creation,Function,0x1e4e343e8d80,1280,"_writeData /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:719",0x140cf21d4a48,~ -code-creation,Function,0x1e4e343e9280,364,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:759",0x140cf21d4b78,~ -code-creation,Function,0x1e4e343e9400,372,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:770",0x140cf21d4ca8,~ -code-creation,Function,0x1e4e343e9580,348,"end /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:784",0x140cf21d4db0,~ -code-creation,Function,0x1e4e343e96e0,320,"Stream._recv /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:812",0x140cf21d4e98,~ -code-creation,Function,0x1e4e343e9820,976,"_recv /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:798",0x140cf21d4fc0,~ -code-creation,Function,0x1e4e343e9c00,216,"read /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:833",0x140cf21d50c0,~ -code-creation,Function,0x1e4e343e9ce0,300,"_updateSinkSize /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:842",0x140cf21d51c8,~ -code-creation,Function,0x1e4e343e9e20,304,"address /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:853",0x140cf21d52c0,~ -code-creation,Function,0x1e4e343e9f60,296,"remoteAddress /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:857",0x140cf21d53b8,~ -code-creation,Function,0x1e4e343ea0a0,296,"remotePort /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:861",0x140cf21d54b0,~ -code-creation,LazyCompile,0x1e4e343ea1e0,3684," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:1",0x140cf21d11f8,~ -tick,0x100262fb1,0x7fff5fbfe350,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343ea441,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343eb060,240,"https.js",0x140cf21d5888,~ -code-creation,Function,0x1e4e343eb160,564,"Server https.js:27",0x140cf21d5a28,~ -code-creation,Function,0x1e4e343eb3a0,836,"createConnection https.js:55",0x140cf21d5b20,~ -code-creation,Function,0x1e4e343eb700,256,"Agent https.js:79",0x140cf21d5c10,~ -code-creation,Function,0x1e4e343eb800,220,"exports.createServer https.js:48",0x140cf21d5d28,~ -code-creation,Function,0x1e4e343eb8e0,740,"exports.request https.js:91",0x140cf21d5e50,~ -code-creation,Function,0x1e4e343ebbe0,248,"exports.get https.js:108",0x140cf21d5f50,~ -code-creation,LazyCompile,0x1e4e343ebce0,1364," https.js:1",0x140cf21d5798,~ -tick,0x10028c8ea,0x7fff5fbfc430,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e343ebe7b,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343ea441,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343ec240,240,"tls.js",0x140cf21d6608,~ -tick,0x100283514,0x7fff5fbfd4a0,0,0x7fff5fbfe000,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343ebe7b,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343ea441,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Stub,0x1e4e343ec340,377,"FastNewContextStub" -code-creation,Function,0x1e4e343ec4c0,248," tls.js:63",0x140cf21d6aa0,~ -code-creation,Function,0x1e4e343ec5c0,320," tls.js:67",0x140cf21d6ba0,~ -code-creation,Function,0x1e4e343ec700,528,"convertNPNProtocols tls.js:60",0x140cf21d6cc8,~ -code-creation,Function,0x1e4e343ec920,312," tls.js:104",0x140cf21d6dc0,~ -code-creation,Function,0x1e4e343eca60,2128,"regexpify tls.js:87",0x140cf21d6ee0,~ -code-creation,Function,0x1e4e343ed2c0,1212," tls.js:123",0x140cf21d6fd8,~ -code-creation,Function,0x1e4e343ed780,232," tls.js:138",0x140cf21d70c8,~ -tick,0x1002eb471,0x7fff5fbfd5d0,0,0x7fff5fbfd620,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343ebe7b,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343ea441,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343ed880,240," tls.js:147",0x140cf21d71d8,~ -code-creation,Function,0x1e4e343ed980,240," tls.js:152",0x140cf21d72e8,~ -code-creation,Function,0x1e4e343eda80,212," tls.js:169",0x140cf21d73d8,~ -code-creation,Function,0x1e4e343edb60,2216,"checkServerIdentity tls.js:85",0x140cf21d7570,~ -code-creation,Function,0x1e4e343ee420,204,"SlabBuffer tls.js:180",0x140cf21d7658,~ -code-creation,Function,0x1e4e343ee500,484,"CryptoStream tls.js:216",0x140cf21d7748,~ -code-creation,Function,0x1e4e343ee700,972,"parseCertString tls.js:328",0x140cf21d7870,~ -code-creation,Function,0x1e4e343eeae0,216,"CleartextStream tls.js:632",0x140cf21d7960,~ -code-creation,Function,0x1e4e343eebc0,216,"EncryptedStream tls.js:673",0x140cf21d7a50,~ -code-creation,Function,0x1e4e343eeca0,272,"timeout tls.js:707",0x140cf21d7b48,~ -code-creation,Function,0x1e4e343eedc0,340," tls.js:716",0x140cf21d7c58,~ -code-creation,Function,0x1e4e343eef20,716,"onhandshakestart tls.js:701",0x140cf21d7d80,~ -code-creation,Function,0x1e4e343ef200,240,"onhandshakedone tls.js:724",0x140cf21d7e88,~ -code-creation,Function,0x1e4e343ef300,288," tls.js:801",0x140cf21d7f70,~ -code-creation,Function,0x1e4e343ef420,1972,"SecurePair tls.js:734",0x140cf21d80e0,~ -code-creation,Function,0x1e4e343efbe0,1020," tls.js:1091",0x140cf21d81d0,~ -code-creation,Function,0x1e4e343effe0,224," tls.js:1118",0x140cf21d82c0,~ -code-creation,Function,0x1e4e343f00c0,856," tls.js:1076",0x140cf21d8418,~ -code-creation,Function,0x1e4e343f0420,1388,"Server tls.js:1043",0x140cf21d8558,~ -code-creation,Function,0x1e4e343f09a0,788,"normalizeConnectArgs tls.js:1217",0x140cf21d8660,~ -code-creation,Function,0x1e4e343f0cc0,260,"onerror tls.js:1316",0x140cf21d8750,~ -code-creation,Function,0x1e4e343f0de0,312,"onclose tls.js:1322",0x140cf21d8838,~ -code-creation,Function,0x1e4e343f0f20,220,"ontimeout tls.js:1328",0x140cf21d8920,~ -code-creation,Function,0x1e4e343f1000,868,"pipe tls.js:1306",0x140cf21d8a68,~ -code-creation,Function,0x1e4e343f1380,236,"debug tls.js:45",0x140cf21d8b58,~ -code-creation,Function,0x1e4e343f1480,184,"debug tls.js:47",0x140cf21d8c40,~ -code-creation,Function,0x1e4e343f1540,396,"create tls.js:185",0x140cf21d8d58,~ -code-creation,Function,0x1e4e343f16e0,648,"use tls.js:193",0x140cf21d8e88,~ -code-creation,Function,0x1e4e343f1980,1736,"CryptoStream.write tls.js:233",0x140cf21d9000,~ -code-creation,Function,0x1e4e343f2060,372,"CryptoStream.pause tls.js:292",0x140cf21d9108,~ -code-creation,Function,0x1e4e343f21e0,408,"CryptoStream.resume tls.js:298",0x140cf21d9210,~ -code-creation,Function,0x1e4e343f2380,260,"CryptoStream.setTimeout tls.js:305",0x140cf21d9308,~ -code-creation,Function,0x1e4e343f24a0,260,"CryptoStream.setNoDelay tls.js:310",0x140cf21d93f8,~ -code-creation,Function,0x1e4e343f25c0,260,"CryptoStream.setKeepAlive tls.js:315",0x140cf21d94f0,~ -code-creation,Function,0x1e4e343f26e0,308,"CryptoStream.setEncoding tls.js:320",0x140cf21d9618,~ -code-creation,Function,0x1e4e343f2820,564,"CryptoStream.getPeerCertificate tls.js:350",0x140cf21d9738,~ -code-creation,Function,0x1e4e343f2a60,300,"CryptoStream.getSession tls.js:364",0x140cf21d9820,~ -code-creation,Function,0x1e4e343f2ba0,300,"CryptoStream.isSessionReused tls.js:372",0x140cf21d9908,~ -code-creation,Function,0x1e4e343f2ce0,304,"CryptoStream.getCipher tls.js:380",0x140cf21d99f8,~ -code-creation,Function,0x1e4e343f2e20,504,"CryptoStream.end tls.js:389",0x140cf21d9ae8,~ -code-creation,Function,0x1e4e343f3020,264,"CryptoStream.destroySoon tls.js:409",0x140cf21d9bd8,~ -code-creation,Function,0x1e4e343f3140,284,"CryptoStream.destroy tls.js:418",0x140cf21d9cc8,~ -code-creation,Function,0x1e4e343f3260,520,"CryptoStream._done tls.js:424",0x140cf21d9db0,~ -code-creation,Function,0x1e4e343f3480,516,"Object.defineProperty.get tls.js:442",0x140cf21d9e98,~ -code-creation,Function,0x1e4e343f36a0,2200,"CryptoStream._push tls.js:470",0x140cf21d9ff0,~ -code-creation,Function,0x1e4e343f3f40,220,"CryptoStream._pull._needDrain tls.js:622",0x140cf21da0d8,~ -code-creation,Function,0x1e4e343f4020,3272,"CryptoStream._pull tls.js:545",0x140cf21da298,~ -code-creation,Function,0x1e4e343f4d00,296,"CleartextStream._internallyPendingBytes tls.js:638",0x140cf21da380,~ -code-creation,Function,0x1e4e343f4e40,364,"CleartextStream._puller tls.js:647",0x140cf21da490,~ -code-creation,Function,0x1e4e343f4fc0,364,"CleartextStream._pusher tls.js:653",0x140cf21da5b0,~ -tick,0x7fff9199e6fe,0x7fff5fbfdf68,0,0x7fff9125a857,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343ebe7b,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343ea441,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343f5140,268,"CleartextStream.address tls.js:659",0x140cf21da698,~ -code-creation,Function,0x1e4e343f5260,264," tls.js:663",0x140cf21da780,~ -code-creation,Function,0x1e4e343f5380,264," tls.js:668",0x140cf21da868,~ -code-creation,Function,0x1e4e343f54a0,296,"EncryptedStream._internallyPendingBytes tls.js:679",0x140cf21da950,~ -code-creation,Function,0x1e4e343f55e0,320,"EncryptedStream._puller tls.js:688",0x140cf21daa60,~ -code-creation,Function,0x1e4e343f5720,364,"EncryptedStream._pusher tls.js:694",0x140cf21dab80,~ -code-creation,Function,0x1e4e343f58a0,244,"exports.createSecurePair tls.js:813",0x140cf21dacb0,~ -code-creation,Function,0x1e4e343f59a0,1268,"SecurePair.cycle tls.js:854",0x140cf21dadf8,~ -code-creation,Function,0x1e4e343f5ea0,668,"SecurePair.maybeInitFinished tls.js:900",0x140cf21daf00,~ -code-creation,Function,0x1e4e343f6140,344,"SecurePair.destroy tls.js:935",0x140cf21dafe8,~ -code-creation,Function,0x1e4e343f62a0,816,"SecurePair.destroy tls.js:917",0x140cf21db0e0,~ -code-creation,Function,0x1e4e343f65e0,936,"SecurePair.error tls.js:944",0x140cf21db1f8,~ -code-creation,Function,0x1e4e343f69a0,224,"exports.createServer tls.js:1130",0x140cf21db310,~ -code-creation,Function,0x1e4e343f6a80,1712,"Server.setOptions tls.js:1135",0x140cf21db428,~ -code-creation,Function,0x1e4e343f7140,1060,"Server.addContext tls.js:1177",0x140cf21db548,~ -code-creation,Function,0x1e4e343f7580,328,"Server.SNICallback tls.js:1192",0x140cf21db638,~ -code-creation,Function,0x1e4e343f76e0,312,"Server.SNICallback tls.js:1189",0x140cf21db748,~ -code-creation,Function,0x1e4e343f7820,800,"exports.connect.cleartext._controlReleased tls.js:1267",0x140cf21db870,~ -code-creation,Function,0x1e4e343f7b40,224,"exports.connect.cleartext._controlReleased tls.js:1297",0x140cf21db960,~ -code-creation,Function,0x1e4e343f7c20,1748,"exports.connect tls.js:1231",0x140cf21dbb10,~ -code-creation,LazyCompile,0x1e4e343f8300,6872," tls.js:1",0x140cf21d6518, -code-creation,Script,0x1e4e343f9de0,240,"crypto.js",0x140cf21dbff0,~ -tick,0x100131463,0x7fff5fbfdae0,0,0x7fff5fbfdb30,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343f87a3,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343ebe7b,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343ea441,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e343f9ee0,616,"Credentials crypto.js:44",0x140cf21dc190,~ -code-creation,Function,0x1e4e343fa160,2004,"exports.createCredentials crypto.js:71",0x140cf21dc2c0,~ -code-creation,Function,0x1e4e343fa940,220,"exports.createHash crypto.js:131",0x140cf21dc3d0,~ -code-creation,Function,0x1e4e343faa20,236,"exports.createHmac crypto.js:137",0x140cf21dc4e8,~ -code-creation,Function,0x1e4e343fab20,236,"exports.createCipher crypto.js:143",0x140cf21dc600,~ -code-creation,Function,0x1e4e343fac20,240,"exports.createCipheriv crypto.js:148",0x140cf21dc720,~ -code-creation,Function,0x1e4e343fad20,236,"exports.createDecipher crypto.js:154",0x140cf21dc838,~ -code-creation,Function,0x1e4e343fae20,240,"exports.createDecipheriv crypto.js:159",0x140cf21dc958,~ -code-creation,Function,0x1e4e343faf20,236,"exports.createSign crypto.js:165",0x140cf21dca68,~ -code-creation,Function,0x1e4e343fb020,236,"exports.createVerify crypto.js:170",0x140cf21dcb78,~ -code-creation,Function,0x1e4e343fb120,340,"exports.createDiffieHellman crypto.js:175",0x140cf21dccb0,~ -code-creation,Function,0x1e4e343fb280,220,"exports.getDiffieHellman crypto.js:185",0x140cf21dcdc0,~ -code-creation,LazyCompile,0x1e4e343fb360,2292," crypto.js:1",0x140cf21dbf00, -tick,0x1000badb1,0x7fff5fbfe1f0,1,0x10000884b,4,0x1e4e343fb4e5,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343f87a3,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343ebe7b,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343ea441,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -tick,0x10017f9c3,0x7fff5fbfdd20,1,0x10000884b,0,0x1e4e34329bf7,0x1e4e34329744,0x1e4e3432a464,0x1e4e3432980c,0x1e4e34329ce6,0x1e4e34329744,0x1e4e343fb4e5,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343f87a3,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343ebe7b,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343ea441,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e343fbc60,240,"constants.js",0x140cf21e4e58,~ -code-creation,LazyCompile,0x1e4e343fbd60,252," constants.js:1",0x140cf21e4d68,~ -code-creation,CallIC,0x1e4e343fbe60,192,"call" -code-creation,LoadIC,0x1e4e343fbf20,164,"" -code-creation,LoadIC,0x1e4e343fbf20,164,"" -code-creation,LoadIC,0x1e4e343fbfe0,250,"" -code-creation,LoadIC,0x1e4e343fbfe0,250,"" -code-creation,LoadIC,0x1e4e343fc0e0,250,"" -code-creation,LoadIC,0x1e4e343fc0e0,250,"" -code-creation,LoadIC,0x1e4e343fc1e0,134,"options" -code-creation,LoadIC,0x1e4e343fc1e0,134,"options" -code-creation,LoadIC,0x1e4e343fc280,164,"" -code-creation,LoadIC,0x1e4e343fc280,164,"" -code-creation,LoadIC,0x1e4e343fc340,138,"defaultMaxSockets" -code-creation,LoadIC,0x1e4e343fc340,138,"defaultMaxSockets" -code-creation,CallIC,0x1e4e343fc3e0,243,"on" -code-creation,LoadIC,0x1e4e343fc4e0,134,"_events" -code-creation,LoadIC,0x1e4e343fc4e0,134,"_events" -code-creation,StoreIC,0x1e4e343fc580,185,"_events" -code-creation,StoreIC,0x1e4e343fc580,185,"_events" -code-creation,LoadIC,0x1e4e343fc640,194,"" -code-creation,LoadIC,0x1e4e343fc640,194,"" -code-creation,CallIC,0x1e4e343fc720,253,"emit" -code-creation,KeyedLoadIC,0x1e4e343fc820,158,"free" -code-creation,KeyedLoadIC,0x1e4e343fc820,158,"free" -code-creation,LoadIC,0x1e4e343fc8c0,140,"createConnection" -code-creation,LoadIC,0x1e4e343fc8c0,140,"createConnection" -tick,0x7fff9199e6fe,0x7fff5fbfe708,0,0x7fff9125a857,0,0x1e4e343b2dda,0x1e4e343eb79d,0x1e4e343ec0fd,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34366020,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343ea441,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e343936e4,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436696f,0x1e4e34366a49,0x1e4e3438d199,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,KeyedLoadIC,0x1e4e343fc960,160,"_wrap" -code-creation,KeyedLoadIC,0x1e4e343fc960,160,"_wrap" -code-creation,KeyedLoadIC,0x1e4e343fca00,160,"_onConnection" -code-creation,KeyedLoadIC,0x1e4e343fca00,160,"_onConnection" -code-creation,StoreIC,0x1e4e343fcaa0,185,"key" -code-creation,StoreIC,0x1e4e343fcaa0,185,"key" -code-creation,StoreIC,0x1e4e343fcb60,185,"cert" -code-creation,StoreIC,0x1e4e343fcb60,185,"cert" -code-creation,StoreIC,0x1e4e343fcc20,185,"ca" -code-creation,StoreIC,0x1e4e343fcc20,185,"ca" -code-creation,LazyCompile,0x1e4e343fcce0,1980,"reduce native array.js:1356",0xe6623155a0,~ -code-creation,CallIC,0x1e4e343fd4a0,462,"byteLength" -code-creation,KeyedStoreIC,0x1e4e343fd680,130,"" -code-creation,KeyedStoreIC,0x1e4e343fd680,130,"args_count: 0" -code-creation,CallIC,0x1e4e343fd720,190,"isFinite" -code-creation,CallIC,0x1e4e343fd7e0,190,"NonNumberToNumber" -code-creation,LoadIC,0x1e4e343fd8a0,147,"$NaN" -code-creation,LoadIC,0x1e4e343fd8a0,147,"$NaN" -code-creation,LoadIC,0x1e4e343fd940,147,"undefined" -code-creation,LoadIC,0x1e4e343fd940,147,"undefined" -code-creation,CallIC,0x1e4e343fd9e0,492,"utf8Write" -code-creation,LoadIC,0x1e4e343fdbe0,138,"_charsWritten" -code-creation,LoadIC,0x1e4e343fdbe0,138,"_charsWritten" -code-creation,StoreIC,0x1e4e343fdc80,189,"_charsWritten" -code-creation,StoreIC,0x1e4e343fdc80,189,"_charsWritten" -code-creation,CallIC,0x1e4e343fdd40,200,"write" -code-creation,Stub,0x1e4e343fde20,340,"ArgumentsAccessStub_NewStrict" -code-creation,Function,0x1e4e343fdf80,1236,"b native v8natives.js:1582",0x140cf21e6748,~ -code-creation,Stub,0x1e4e343fe460,241,"FastNewClosureStub" -code-creation,LazyCompile,0x1e4e343fe560,1008,"bind native v8natives.js:1578",0xe66232b0f8,~ -tick,0x1e4e3430b401,0x7fff5fbff0b8,0,0x7fff5fbff0f8,0,0x1e4e343f6fb5,0x1e4e343f06a8,0x1e4e343eb32c,0x1e4e343e4c3f,0x1e4e343e236f,0x1e4e343e6f4a,0x1e4e3438d2a6,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,StoreIC,0x1e4e343fe960,185,"pfx" -code-creation,StoreIC,0x1e4e343fe960,185,"pfx" -code-creation,StoreIC,0x1e4e343fea20,185,"key" -code-creation,StoreIC,0x1e4e343fea20,185,"key" -code-creation,StoreIC,0x1e4e343feae0,185,"passphrase" -code-creation,StoreIC,0x1e4e343feae0,185,"passphrase" -code-creation,StoreIC,0x1e4e343feba0,185,"cert" -code-creation,StoreIC,0x1e4e343feba0,185,"cert" -code-creation,StoreIC,0x1e4e343fec60,185,"ca" -code-creation,StoreIC,0x1e4e343fec60,185,"ca" -code-creation,StoreIC,0x1e4e343fed20,185,"ciphers" -code-creation,StoreIC,0x1e4e343fed20,185,"ciphers" -code-creation,StoreIC,0x1e4e343fede0,185,"secureProtocol" -code-creation,StoreIC,0x1e4e343fede0,185,"secureProtocol" -code-creation,StoreIC,0x1e4e343feea0,185,"secureOptions" -code-creation,StoreIC,0x1e4e343feea0,185,"secureOptions" -tick,0x10023e3b5,0x7fff5fbfea40,0,0x0,1 -tick,0x10012f9e7,0x7fff5fbfe9d8,0,0x0,1 -tick,0x1001fb071,0x7fff5fbfe990,0,0x0,1 -tick,0x10023c344,0x7fff5fbfe810,0,0x0,1 -tick,0x1002fef29,0x7fff5fbfe930,0,0x0,1 -code-creation,StoreIC,0x1e4e343fe960,185,"crl" -code-creation,StoreIC,0x1e4e343fe960,185,"crl" -code-creation,StoreIC,0x1e4e343fea20,185,"sessionIdContext" -code-creation,StoreIC,0x1e4e343fea20,185,"sessionIdContext" -tick,0x7fff9199dfee,0x7fff5fbfeaf8,1,0x10002b4d0,4,0x1e4e343fa0fa,0x1e4e343fa255,0x1e4e343f08ae,0x1e4e343eb32c,0x1e4e343e4c3f,0x1e4e343e236f,0x1e4e343e6f4a,0x1e4e3438d2a6,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,KeyedLoadIC,0x1e4e343feae0,130,"" -code-creation,KeyedLoadIC,0x1e4e343feae0,130,"args_count: 0" -code-creation,StoreIC,0x1e4e343feb80,185,"_events" -code-creation,StoreIC,0x1e4e343feb80,185,"_events" -code-creation,StoreIC,0x1e4e343fec40,185,"get" -code-creation,StoreIC,0x1e4e343fec40,185,"get" -code-creation,StoreIC,0x1e4e343fed00,185,"set" -code-creation,StoreIC,0x1e4e343fed00,185,"set" -code-creation,StoreIC,0x1e4e343fedc0,185,"enumerable_" -code-creation,StoreIC,0x1e4e343fedc0,185,"enumerable_" -code-creation,StoreIC,0x1e4e343fee80,185,"hasEnumerable_" -code-creation,StoreIC,0x1e4e343fee80,185,"hasEnumerable_" -code-creation,CallIC,0x1e4e343fef40,189,"ToString" -code-creation,StoreIC,0x1e4e343e20e0,185,"configurable_" -code-creation,StoreIC,0x1e4e343e20e0,185,"configurable_" -code-creation,StoreIC,0x1e4e343df840,185,"hasConfigurable_" -code-creation,StoreIC,0x1e4e343df840,185,"hasConfigurable_" -code-creation,StoreIC,0x1e4e343df900,185,"get_" -code-creation,StoreIC,0x1e4e343df900,185,"get_" -code-creation,StoreIC,0x1e4e343df9c0,185,"hasGetter_" -code-creation,StoreIC,0x1e4e343df9c0,185,"hasGetter_" -code-creation,LazyCompile,0x1e4e343dfa80,248," native v8natives.js:566",0xe66232c038,~ -code-creation,StoreIC,0x1e4e343dfb80,185,"set_" -code-creation,StoreIC,0x1e4e343dfb80,185,"set_" -code-creation,StoreIC,0x1e4e343de960,185,"hasSetter_" -code-creation,StoreIC,0x1e4e343de960,185,"hasSetter_" -code-creation,CallIC,0x1e4e343dea20,235,"hasValue" -code-creation,LoadIC,0x1e4e343db640,134,"hasValue_" -code-creation,LoadIC,0x1e4e343db640,134,"hasValue_" -code-creation,CallIC,0x1e4e343db6e0,232,"hasWritable" -code-creation,LoadIC,0x1e4e343db7e0,134,"hasWritable_" -code-creation,LoadIC,0x1e4e343db7e0,134,"hasWritable_" -code-creation,CallIC,0x1e4e343db880,232,"hasGetter" -code-creation,LoadIC,0x1e4e343db980,134,"hasGetter_" -code-creation,LoadIC,0x1e4e343db980,134,"hasGetter_" -code-creation,LazyCompile,0x1e4e343dba20,216," native v8natives.js:570",0xe66232c110,~ -code-creation,LoadIC,0x1e4e343dbb00,134,"_events" -code-creation,LoadIC,0x1e4e343dbb00,134,"_events" -code-creation,LoadIC,0x1e4e343ace40,194,"" -tick,0x7fff9199e6fe,0x7fff5fbfec98,0,0x7fff9125a857,0,0x1e4e3433414b,0x1e4e343f0978,0x1e4e343eb32c,0x1e4e343e4c3f,0x1e4e343e236f,0x1e4e343e6f4a,0x1e4e3438d2a6,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,LoadIC,0x1e4e343ace40,194,"" -code-creation,CallIC,0x1e4e343fd4a0,317,"emit" -code-creation,KeyedLoadIC,0x1e4e343fd5e0,160,"secureConnection" -code-creation,KeyedLoadIC,0x1e4e343fd5e0,160,"secureConnection" -code-creation,LoadIC,0x1e4e343fd680,134,"_events" -code-creation,LoadIC,0x1e4e343fd680,134,"_events" -code-creation,CallMegamorphic,0x1e4e343fd720,814,"args_count: 3" -code-creation,KeyedLoadIC,0x1e4e343fda60,160,"request" -code-creation,KeyedLoadIC,0x1e4e343fda60,160,"request" -code-creation,KeyedLoadIC,0x1e4e343fdb00,130,"" -code-creation,KeyedLoadIC,0x1e4e343fdb00,130,"args_count: 0" -code-creation,KeyedStoreIC,0x1e4e343fdba0,208,"secureConnection" -code-creation,KeyedStoreIC,0x1e4e343fdba0,208,"secureConnection" -code-creation,LoadIC,0x1e4e343fdc80,194,"" -code-creation,LoadIC,0x1e4e343fdc80,194,"" -code-creation,CallIC,0x1e4e343fbe60,317,"emit" -code-creation,Stub,0x1e4e343fbfa0,150,"ToBooleanStub_UndefinedNull" -code-creation,CallIC,0x1e4e343fc040,190,"Number" -code-creation,CallIC,0x1e4e343fc100,190,"ToNumber" -code-creation,Stub,0x1e4e343fc1c0,466,"CompareStub_GE" -code-creation,LoadIC,0x1e4e343fc3a0,147,"$NaN" -code-creation,LoadIC,0x1e4e343fc3a0,147,"$NaN" -code-creation,KeyedStoreIC,0x1e4e343fc440,130,"" -code-creation,KeyedStoreIC,0x1e4e343fc440,130,"args_count: 0" -code-creation,KeyedLoadIC,0x1e4e343fc4e0,130,"" -code-creation,KeyedLoadIC,0x1e4e343fc4e0,130,"args_count: 0" -code-creation,CallIC,0x1e4e343fc580,190,"InstantiateFunction" -code-creation,LoadIC,0x1e4e343fc640,147,"kApiFunctionCache" -code-creation,LoadIC,0x1e4e343fc640,147,"kApiFunctionCache" -code-creation,KeyedLoadIC,0x1e4e343fc6e0,130,"" -code-creation,KeyedLoadIC,0x1e4e343fc6e0,130,"args_count: 0" -code-creation,CallIC,0x1e4e343fc780,190,"Instantiate" -code-creation,CallIC,0x1e4e343fc840,190,"ConfigureTemplateInstance" -code-creation,StoreIC,0x1e4e343fc900,330,"filename" -code-creation,StoreIC,0x1e4e343fc900,330,"filename" -code-creation,StoreIC,0x1e4e343fca60,330,"id" -code-creation,StoreIC,0x1e4e343fca60,330,"id" -code-creation,StoreIC,0x1e4e3439d5a0,330,"exports" -code-creation,StoreIC,0x1e4e3439d5a0,330,"exports" -code-creation,StoreIC,0x1e4e3439d700,330,"loaded" -code-creation,StoreIC,0x1e4e3439d700,330,"loaded" -tick,0x1002e891b,0x7fff5fbfcbf0,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e343c5a61,0x1e4e343cb641,0x1e4e3438d2cc,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e3439d860,240,"cluster.js",0x37ec2ed23158,~ -code-creation,Function,0x1e4e3439d960,328,"isObject cluster.js:28",0x37ec2ed235a0,~ -code-creation,Function,0x1e4e3439dac0,212,"Cluster cluster.js:44",0x37ec2ed23688,~ -code-creation,Function,0x1e4e3439dba0,796,"eachWorker cluster.js:75",0x37ec2ed237b0,~ -code-creation,Function,0x1e4e3439bf00,228,"ProgressTracker cluster.js:85",0x37ec2ed238a8,~ -code-creation,Function,0x1e4e3439c000,444,"isInternalMessage cluster.js:122",0x37ec2ed239b8,~ -code-creation,Function,0x1e4e3439c1c0,344,"internalMessage cluster.js:129",0x37ec2ed23ab0,~ -code-creation,Function,0x1e4e3439c320,612,"handleResponse cluster.js:139",0x37ec2ed23bf8,~ -code-creation,Function,0x1e4e3439c5a0,316,"respond cluster.js:168",0x37ec2ed23d10,~ -code-creation,KeyedCallInitialize,0x1e4e3439c6e0,194,"args_count: 3" -code-creation,Function,0x1e4e3439c7c0,792,"handleMessage cluster.js:161",0x37ec2ed23e80,~ -code-creation,Function,0x1e4e3439cae0,284,"toDecInt cluster.js:253",0x37ec2ed23f70,~ -code-creation,Function,0x1e4e3439cc00,228," cluster.js:303",0x37ec2ed24058,~ -code-creation,Function,0x1e4e34391fe0,340," cluster.js:310",0x37ec2ed24170,~ -code-creation,Function,0x1e4e34392140,328," cluster.js:315",0x37ec2ed24278,~ -code-creation,Function,0x1e4e343922a0,1872,"Worker cluster.js:259",0x37ec2ed243d8,~ -code-creation,Function,0x1e4e34392a00,380,"prepareExit cluster.js:329",0x37ec2ed244d0,~ -tick,0x10012f0d5,0x7fff5fbfe478,0,0x7fff5fbfe5b0,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c5a61,0x1e4e343cb641,0x1e4e3438d2cc,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e34390660,960,"sendInternalMessage cluster.js:344",0x37ec2ed24630,~ -code-creation,Function,0x1e4e34390a20,384,"debug cluster.js:34",0x37ec2ed24728,~ -code-creation,Function,0x1e4e34390ba0,184,"debug cluster.js:40",0x37ec2ed24810,~ -code-creation,Function,0x1e4e34390c60,252,"ProgressTracker.done cluster.js:89",0x37ec2ed248f8,~ -code-creation,Function,0x1e4e34390d60,260,"ProgressTracker.check cluster.js:93",0x37ec2ed249e0,~ -code-creation,Function,0x1e4e34390e80,992,"cluster.setupMaster cluster.js:97",0x37ec2ed24af0,~ -code-creation,Function,0x1e4e34391260,400,"messageHandler.online cluster.js:188",0x37ec2ed24c08,~ -code-creation,Function,0x1e4e34391400,624,"messageHandler.queryServer cluster.js:196",0x37ec2ed24d40,~ -code-creation,Function,0x1e4e34391680,656,"messageHandler.listening cluster.js:218",0x37ec2ed24e38,~ -code-creation,Function,0x1e4e34391920,212,"messageHandler.suicide cluster.js:238",0x37ec2ed24f30,~ -code-creation,Function,0x1e4e34391a00,204,"messageHandler.disconnect cluster.js:248",0x37ec2ed25028,~ -code-creation,Function,0x1e4e34391ae0,280,"Worker.send cluster.js:370",0x37ec2ed25118,~ -code-creation,Function,0x1e4e34391c00,224,"Worker.destroy.sendInternalMessage.cmd cluster.js:386",0x37ec2ed25200,~ -code-creation,Function,0x1e4e34391ce0,224,"Worker.destroy cluster.js:399",0x37ec2ed252e8,~ -code-creation,Function,0x1e4e34391dc0,224,"Worker.destroy cluster.js:404",0x37ec2ed253d0,~ -code-creation,Function,0x1e4e3438f080,800,"Worker.destroy cluster.js:377",0x37ec2ed254e8,~ -code-creation,Function,0x1e4e3438f3a0,288,"Worker.disconnect cluster.js:417",0x37ec2ed255f0,~ -code-creation,Function,0x1e4e3438f4c0,224," cluster.js:432",0x37ec2ed256d8,~ -code-creation,Function,0x1e4e3438f5a0,876,"Worker.disconnect cluster.js:443",0x37ec2ed257f0,~ -code-creation,Function,0x1e4e3438f920,560,"Worker.disconnect cluster.js:425",0x37ec2ed25930,~ -code-creation,Function,0x1e4e3438fb60,336,"cluster.fork cluster.js:467",0x37ec2ed25a50,~ -code-creation,Function,0x1e4e3438fcc0,776," cluster.js:484",0x37ec2ed25b70,~ -code-creation,Function,0x1e4e3438ffe0,288,"cluster.disconnect cluster.js:495",0x37ec2ed25c60,~ -code-creation,Function,0x1e4e3438e500,604,"cluster.disconnect cluster.js:478",0x37ec2ed25db8,~ -code-creation,Function,0x1e4e3438e760,288,"cluster._setupWorker.worker.state cluster.js:512",0x37ec2ed25ea0,~ -code-creation,Function,0x1e4e3438e880,488,"cluster._setupWorker cluster.js:505",0x37ec2ed25fc8,~ -code-creation,Function,0x1e4e3438ea80,440,"cluster._getServer.message.cmd cluster.js:533",0x37ec2ed260d0,~ -code-creation,Function,0x1e4e3438ec40,228,"cluster._getServer cluster.js:554",0x37ec2ed261e8,~ -code-creation,Function,0x1e4e34388b60,1040,"cluster._getServer cluster.js:524",0x37ec2ed26390,~ -code-creation,LazyCompile,0x1e4e34506000,4780," cluster.js:1",0x37ec2ed23068,~ -code-creation,CallIC,0x1e4e345072c0,157,"getCached" -code-creation,CallIC,0x1e4e34507360,157,"exists" -code-creation,LoadIC,0x1e4e34507400,138,"_source" -code-creation,LoadIC,0x1e4e34507400,138,"_source" -code-creation,CallIC,0x1e4e345074a0,559,"hasOwnProperty" -code-creation,LoadIC,0x1e4e345076e0,138,"moduleLoadList" -code-creation,LoadIC,0x1e4e345076e0,138,"moduleLoadList" -code-creation,CallIC,0x1e4e34507780,655,"push" -code-creation,CallIC,0x1e4e34507a20,187,"compile" -code-creation,LoadIC,0x1e4e34507ae0,134,"id" -code-creation,LoadIC,0x1e4e34507ae0,134,"id" -code-creation,CallIC,0x1e4e34507b80,157,"getSource" -code-creation,CallIC,0x1e4e34507c20,157,"wrap" -code-creation,LoadIC,0x1e4e34507cc0,138,"wrapper" -code-creation,LoadIC,0x1e4e34507cc0,138,"wrapper" -code-creation,LoadIC,0x1e4e34507d60,134,"filename" -code-creation,LoadIC,0x1e4e34507d60,134,"filename" -tick,0x10028c997,0x7fff5fbfc3f0,1,0x1000162b8,2,0x1e4e34331eac,0x1e4e343316ef,0x1e4e34506422,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c5a61,0x1e4e343cb641,0x1e4e3438d2cc,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Script,0x1e4e34507e00,240,"child_process.js",0x37ec2ed270b8,~ -code-creation,LoadIC,0x1e4e34507f00,134,"exports" -code-creation,LoadIC,0x1e4e34507f00,134,"exports" -code-creation,LoadIC,0x1e4e34507fa0,140,"require" -code-creation,LoadIC,0x1e4e34507fa0,140,"require" -tick,0x100143e2c,0x7fff5fbfd430,0,0x102025460,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34506422,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c5a61,0x1e4e343cb641,0x1e4e3438d2cc,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Stub,0x1e4e34508040,335,"FastNewContextStub" -code-creation,Function,0x1e4e345081a0,356,"Object.defineProperty.get child_process.js:34",0x37ec2ed27a30,~ -code-creation,Function,0x1e4e34508320,364,"handleWrapGetter child_process.js:30",0x37ec2ed27b48,~ -code-creation,Function,0x1e4e345084a0,240,"createPipe child_process.js:58",0x37ec2ed27c58,~ -code-creation,Function,0x1e4e345085a0,460,"createSocket child_process.js:62",0x37ec2ed27d78,~ -code-creation,Function,0x1e4e34508780,208," child_process.js:171",0x37ec2ed27e60,~ -code-creation,Function,0x1e4e34508860,356," child_process.js:175",0x37ec2ed27f50,~ -code-creation,Function,0x1e4e345089e0,496,"SocketListSend child_process.js:162",0x37ec2ed28058,~ -code-creation,Function,0x1e4e34508be0,368,"removeMe child_process.js:222",0x37ec2ed28150,~ -code-creation,Function,0x1e4e34508d60,504," child_process.js:214",0x37ec2ed28240,~ -code-creation,Function,0x1e4e34508f60,428,"SocketListReceive child_process.js:205",0x37ec2ed28348,~ -code-creation,Function,0x1e4e34509120,400,"getSocketList child_process.js:252",0x37ec2ed28480,~ -code-creation,Function,0x1e4e345092c0,528,"handleMessage child_process.js:262",0x37ec2ed28580,~ -code-creation,Function,0x1e4e345094e0,1020,"channel.onread child_process.js:282",0x37ec2ed286d8,~ -code-creation,Function,0x1e4e345098e0,264," child_process.js:325",0x37ec2ed287e8,~ -code-creation,Function,0x1e4e34509a00,584," child_process.js:313",0x37ec2ed288f8,~ -code-creation,Function,0x1e4e34509c60,1864,"target.send child_process.js:330",0x37ec2ed28a78,~ -code-creation,Function,0x1e4e3450a3c0,352,"finish child_process.js:401",0x37ec2ed28b60,~ -code-creation,Function,0x1e4e3450a520,648,"target.disconnect child_process.js:390",0x37ec2ed28c90,~ -code-creation,Function,0x1e4e3450a7c0,796,"setupChannel child_process.js:277",0x37ec2ed28db8,~ -code-creation,Function,0x1e4e3450aae0,184,"nop child_process.js:424",0x37ec2ed28ea0,~ -code-creation,Function,0x1e4e3450aba0,384,"maybeClose child_process.js:634",0x37ec2ed28f90,~ -code-creation,Function,0x1e4e3450ad20,544,"_handle.onexit child_process.js:658",0x37ec2ed290a8,~ -code-creation,Function,0x1e4e3450af40,584,"ChildProcess child_process.js:643",0x37ec2ed291c0,~ -code-creation,Function,0x1e4e3450b1a0,496,"getHandleWrapType child_process.js:686",0x37ec2ed292b0,~ -code-creation,Function,0x1e4e3450b3a0,404,"errnoException child_process.js:839",0x37ec2ed293e0,~ -code-creation,Function,0x1e4e3450b540,252," child_process.js:41",0x37ec2ed294c8,~ -code-creation,Function,0x1e4e3450b640,252," child_process.js:45",0x37ec2ed295b0,~ -code-creation,Function,0x1e4e3450b740,252," child_process.js:49",0x37ec2ed29698,~ -code-creation,Function,0x1e4e3450b840,252," child_process.js:53",0x37ec2ed29780,~ -code-creation,Function,0x1e4e3450b940,188,"handleConversion.net.Native.send child_process.js:84",0x37ec2ed29878,~ -code-creation,Function,0x1e4e3450ba00,224,"handleConversion.net.Native.got child_process.js:88",0x37ec2ed29998,~ -tick,0x7fff9199e6fe,0x7fff5fbfe0b8,0,0x7fff9125a857,2,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34506422,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c5a61,0x1e4e343cb641,0x1e4e3438d2cc,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,Function,0x1e4e3450bae0,204,"handleConversion.net.Server.send child_process.js:96",0x37ec2ed29a90,~ -code-creation,Function,0x1e4e3450bbc0,228,"handleConversion.net.Server.got child_process.js:104",0x37ec2ed29b98,~ -code-creation,Function,0x1e4e3450bcc0,404,"handleConversion.net.Server.got child_process.js:100",0x37ec2ed29ce0,~ -code-creation,Function,0x1e4e3450be60,184,"handleConversion.net.Socket.send.handle.onread child_process.js:136",0x37ec2ed29dc8,~ -code-creation,Function,0x1e4e3450bf20,692,"handleConversion.net.Socket.send child_process.js:111",0x37ec2ed29ef8,~ -code-creation,Function,0x1e4e3450c1e0,568,"handleConversion.net.Socket.got child_process.js:142",0x37ec2ed2a048,~ -code-creation,Function,0x1e4e3450c420,224,"SocketListSend.add child_process.js:182",0x37ec2ed2a138,~ -code-creation,Function,0x1e4e3450c500,204,"SocketListSend.flush child_process.js:190",0x37ec2ed2a228,~ -code-creation,Function,0x1e4e3450c5e0,296,"SocketListSend.flush child_process.js:186",0x37ec2ed2a318,~ -code-creation,Function,0x1e4e3450c720,380,"SocketListSend.update child_process.js:195",0x37ec2ed2a400,~ -code-creation,Function,0x1e4e3450c8a0,388,"SocketListReceive.flush child_process.js:231",0x37ec2ed2a4e8,~ -code-creation,Function,0x1e4e3450ca40,312,"SocketListReceive.add child_process.js:246",0x37ec2ed2a5d0,~ -code-creation,Function,0x1e4e3450cb80,408,"SocketListReceive.add child_process.js:242",0x37ec2ed2a6e0,~ -code-creation,Function,0x1e4e3450cd20,968,"exports.fork child_process.js:426",0x37ec2ed2a820,~ -code-creation,Function,0x1e4e3450d100,340,"exports._forkChild child_process.js:451",0x37ec2ed2a948,~ -code-creation,Stub,0x1e4e3450d260,264,"FastCloneShallowArrayStub" -code-creation,Function,0x1e4e3450d380,892,"exports.exec child_process.js:459",0x37ec2ed2aa70,~ -code-creation,Function,0x1e4e3450d700,924,"exithandler child_process.js:524",0x37ec2ed2abc0,~ -code-creation,Function,0x1e4e3450daa0,368,"errorhandler child_process.js:548",0x37ec2ed2acd0,~ -code-creation,Function,0x1e4e3450dc20,592,"kill child_process.js:555",0x37ec2ed2adf0, -code-creation,Stub,0x1e4e3450de80,278,"FastCloneShallowObjectStub" -code-creation,Function,0x1e4e3450dfa0,292," child_process.js:569",0x37ec2ed2aef8,~ -code-creation,Function,0x1e4e3450e0e0,492," child_process.js:578",0x37ec2ed2b018,~ -code-creation,Function,0x1e4e3450e2e0,492,"exports.execFile child_process.js:586",0x37ec2ed2b138,~ -code-creation,Function,0x1e4e3450e4e0,2120,"exports.execFile child_process.js:485",0x37ec2ed2b328,~ -code-creation,Function,0x1e4e3450ed40,244," child_process.js:613",0x37ec2ed2b418,~ -code-creation,Function,0x1e4e3450ee40,1796,"exports.spawn child_process.js:601",0x37ec2ed2b568,~ -code-creation,Function,0x1e4e3450f560,348,"ChildProcess.spawn.stdio.reduce.stdio child_process.js:725",0x37ec2ed2b658,~ -code-creation,Function,0x1e4e3450f6c0,220,"ChildProcess.spawn.stdio.reduce.stdio child_process.js:727",0x37ec2ed2b748,~ -code-creation,Function,0x1e4e3450f7a0,264,"cleanup child_process.js:724",0x37ec2ed2b830,~ -code-creation,Function,0x1e4e3450f8c0,2208," child_process.js:723",0x37ec2ed2ba10,~ -code-creation,Function,0x1e4e34510160,284,"ChildProcess.spawn._handle child_process.js:786",0x37ec2ed2bb00,~ -code-creation,Function,0x1e4e34510280,232,"ChildProcess.spawn.stdin child_process.js:814",0x37ec2ed2bc08,~ -code-creation,Function,0x1e4e34510380,696,"ChildProcess.spawn.stdin child_process.js:799",0x37ec2ed2bd20,~ -code-creation,Function,0x1e4e34510640,292," child_process.js:828",0x37ec2ed2be10,~ -code-creation,Function,0x1e4e34510780,2508,"ChildProcess.spawn child_process.js:696",0x37ec2ed2bf90,~ -code-creation,Function,0x1e4e34511160,1156,"ChildProcess.kill child_process.js:854",0x37ec2ed2c0d0,~ -code-creation,Function,0x1e4e34511600,256,"ChildProcess.ref child_process.js:895",0x37ec2ed2c1b8,~ -code-creation,Function,0x1e4e34511700,256,"ChildProcess.unref child_process.js:900",0x37ec2ed2c2a0,~ -code-creation,LazyCompile,0x1e4e34511800,3708," child_process.js:1",0x37ec2ed26fc8,~ -code-creation,CallIC,0x1e4e34512680,203,"Instantiate" -code-creation,StoreIC,0x1e4e34512760,185,"get" -code-creation,StoreIC,0x1e4e34512760,185,"get" -code-creation,CallIC,0x1e4e34512820,190,"ToString" -code-creation,CallIC,0x1e4e345128e0,190,"ToPropertyDescriptor" -code-creation,LoadIC,0x1e4e345129a0,147,"PropertyDescriptor" -code-creation,LoadIC,0x1e4e345129a0,147,"PropertyDescriptor" -tick,0x1001ff6c0,0x7fff5fbfed18,0,0x1001ff37c,0,0x1e4e34336e96,0x1e4e343367c6,0x1e4e3438661e,0x1e4e34508441,0x1e4e34511e90,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34506422,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c5a61,0x1e4e343cb641,0x1e4e3438d2cc,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,StoreIC,0x1e4e34512a40,300,"value_" -code-creation,StoreIC,0x1e4e34512a40,300,"value_" -code-creation,StoreIC,0x1e4e34512b80,300,"hasValue_" -code-creation,StoreIC,0x1e4e34512b80,300,"hasValue_" -code-creation,StoreIC,0x1e4e34512cc0,300,"writable_" -code-creation,StoreIC,0x1e4e34512cc0,300,"writable_" -code-creation,StoreIC,0x1e4e34512e00,300,"hasWritable_" -code-creation,StoreIC,0x1e4e34512e00,300,"hasWritable_" -code-creation,StoreIC,0x1e4e34512f40,300,"enumerable_" -code-creation,StoreIC,0x1e4e34512f40,300,"enumerable_" -code-creation,StoreIC,0x1e4e34513080,300,"hasEnumerable_" -code-creation,StoreIC,0x1e4e34513080,300,"hasEnumerable_" -code-creation,StoreIC,0x1e4e345131c0,300,"configurable_" -code-creation,StoreIC,0x1e4e345131c0,300,"configurable_" -code-creation,StoreIC,0x1e4e34513300,300,"hasConfigurable_" -code-creation,StoreIC,0x1e4e34513300,300,"hasConfigurable_" -code-creation,StoreIC,0x1e4e34513440,300,"get_" -code-creation,StoreIC,0x1e4e34513440,300,"get_" -code-creation,StoreIC,0x1e4e34513580,300,"hasGetter_" -code-creation,StoreIC,0x1e4e34513580,300,"hasGetter_" -code-creation,StoreIC,0x1e4e345136c0,300,"set_" -code-creation,StoreIC,0x1e4e345136c0,300,"set_" -code-creation,StoreIC,0x1e4e34513800,300,"hasSetter_" -code-creation,StoreIC,0x1e4e34513800,300,"hasSetter_" -code-creation,LoadIC,0x1e4e34513940,134,"get" -code-creation,LoadIC,0x1e4e34513940,134,"get" -code-creation,CallIC,0x1e4e345139e0,238,"setGet" -code-creation,CallIC,0x1e4e34513ae0,190,"IsInconsistentDescriptor" -code-creation,CallIC,0x1e4e34513ba0,190,"IsAccessorDescriptor" -code-creation,CallIC,0x1e4e34513c60,190,"IsDataDescriptor" -code-creation,CallIC,0x1e4e34513d20,190,"DefineOwnProperty" -code-creation,CallIC,0x1e4e34513de0,190,"DefineObjectProperty" -code-creation,CallIC,0x1e4e34513ea0,190,"ToObject" -code-creation,CallIC,0x1e4e34513f60,190,"ConvertDescriptorArrayToDescriptor" -code-creation,CallIC,0x1e4e34514020,232,"hasEnumerable" -code-creation,LoadIC,0x1e4e34514120,134,"hasEnumerable_" -code-creation,LoadIC,0x1e4e34514120,134,"hasEnumerable_" -code-creation,CallIC,0x1e4e345141c0,235,"hasConfigurable" -code-creation,LoadIC,0x1e4e345142c0,134,"hasConfigurable_" -code-creation,LoadIC,0x1e4e345142c0,134,"hasConfigurable_" -code-creation,CallIC,0x1e4e34514360,190,"IsGenericDescriptor" -code-creation,CallIC,0x1e4e34514420,235,"getGet" -code-creation,LoadIC,0x1e4e34514520,134,"get_" -code-creation,LoadIC,0x1e4e34514520,134,"get_" -code-creation,CallIC,0x1e4e345145c0,235,"hasSetter" -code-creation,LoadIC,0x1e4e345146c0,134,"hasSetter_" -code-creation,LoadIC,0x1e4e345146c0,134,"hasSetter_" -code-creation,LoadIC,0x1e4e34514760,157,"Object" -code-creation,LoadIC,0x1e4e34514760,157,"Object" -code-creation,CallIC,0x1e4e34514800,157,"defineProperty" -code-creation,LazyCompile,0x1e4e345148a0,216,"$Array.set_ native v8natives.js:563",0xe66232bfa0,~ -code-creation,LazyCompile,0x1e4e34514980,230,"$Array.set_ native v8natives.js:563",0xe66232bfa0,* -code-creation,StoreIC,0x1e4e34514a80,185,"send" -code-creation,StoreIC,0x1e4e34514a80,185,"send" -code-creation,StoreIC,0x1e4e34514b40,185,"got" -code-creation,StoreIC,0x1e4e34514b40,185,"got" -code-creation,StoreIC,0x1e4e34514c00,185,"send" -code-creation,StoreIC,0x1e4e34514c00,185,"send" -code-creation,StoreIC,0x1e4e34514cc0,185,"got" -code-creation,StoreIC,0x1e4e34514cc0,185,"got" -code-creation,StoreIC,0x1e4e34514d80,256,"super_" -code-creation,StoreIC,0x1e4e34514d80,256,"super_" -code-creation,StoreIC,0x1e4e34514e80,185,"value" -code-creation,StoreIC,0x1e4e34514e80,185,"value" -code-creation,StoreIC,0x1e4e34514f40,185,"constructor" -code-creation,StoreIC,0x1e4e34514f40,185,"constructor" -code-creation,KeyedLoadIC,0x1e4e34515000,130,"" -code-creation,KeyedLoadIC,0x1e4e34515000,130,"args_count: 0" -code-creation,LoadIC,0x1e4e345150a0,134,"enumerable" -code-creation,LoadIC,0x1e4e345150a0,134,"enumerable" -code-creation,CallIC,0x1e4e34515140,190,"ToBoolean" -code-creation,CallIC,0x1e4e34515200,235,"setEnumerable" -code-creation,LoadIC,0x1e4e34515300,134,"configurable" -code-creation,LoadIC,0x1e4e34515300,134,"configurable" -code-creation,CallIC,0x1e4e345153a0,235,"setConfigurable" -code-creation,StoreIC,0x1e4e345154a0,185,"value_" -code-creation,StoreIC,0x1e4e345154a0,185,"value_" -code-creation,StoreIC,0x1e4e34515560,185,"hasValue_" -code-creation,StoreIC,0x1e4e34515560,185,"hasValue_" -code-creation,StoreIC,0x1e4e34515620,185,"writable_" -code-creation,StoreIC,0x1e4e34515620,185,"writable_" -code-creation,StoreIC,0x1e4e345156e0,185,"hasWritable_" -code-creation,StoreIC,0x1e4e345156e0,185,"hasWritable_" -code-creation,CallIC,0x1e4e345157a0,235,"isEnumerable" -code-creation,LoadIC,0x1e4e345158a0,134,"enumerable_" -code-creation,LoadIC,0x1e4e345158a0,134,"enumerable_" -code-creation,CallIC,0x1e4e34515940,232,"isConfigurable" -code-creation,LoadIC,0x1e4e34515a40,134,"configurable_" -code-creation,LoadIC,0x1e4e34515a40,134,"configurable_" -code-creation,CallIC,0x1e4e34515ae0,157,"create" -code-creation,LoadIC,0x1e4e34515b80,147,"$Object" -code-creation,LoadIC,0x1e4e34515b80,147,"$Object" -code-creation,CallIC,0x1e4e34515c20,190,"ObjectDefineProperties" -tick,0x100249346,0x7fff5fbfed00,0,0x101009410,0,0x1e4e34335bea,0x1e4e343529f7,0x1e4e345122a9,0x1e4e34331f18,0x1e4e343316ef,0x1e4e34506422,0x1e4e34331f18,0x1e4e343316ef,0x1e4e343c5a61,0x1e4e343cb641,0x1e4e3438d2cc,0x1e4e34367b9d,0x1e4e34367cc2,0x1e4e34366862,0x1e4e343661d4,0x1e4e3436812e,0x1e4e3432e78a -code-creation,CallIC,0x1e4e34515ce0,190,"GetOwnEnumerablePropertyNames" -code-creation,LoadIC,0x1e4e34515da0,147,"InternalArray" -code-creation,LoadIC,0x1e4e34515da0,147,"InternalArray" -code-creation,CallIC,0x1e4e34515e40,655,"push" -code-creation,KeyedLoadIC,0x1e4e345160e0,154,"constructor" -code-creation,KeyedLoadIC,0x1e4e345160e0,154,"constructor" -code-creation,LoadIC,0x1e4e34516180,134,"value" -code-creation,LoadIC,0x1e4e34516180,134,"value" -code-creation,CallIC,0x1e4e34516220,235,"setValue" -code-creation,LoadIC,0x1e4e34516320,134,"writable" -code-creation,LoadIC,0x1e4e34516320,134,"writable" -code-creation,CallIC,0x1e4e345163c0,238,"setWritable" -code-creation,CallIC,0x1e4e345164c0,235,"isWritable" -code-creation,LoadIC,0x1e4e345165c0,134,"writable_" -code-creation,LoadIC,0x1e4e345165c0,134,"writable_" -code-creation,CallIC,0x1e4e34516660,232,"getValue" -code-creation,LoadIC,0x1e4e34516760,134,"value_" -code-creation,LoadIC,0x1e4e34516760,134,"value_" -code-creation,StoreIC,0x1e4e34516800,185,"loaded" -code-creation,StoreIC,0x1e4e34516800,185,"loaded" -code-creation,LoadIC,0x1e4e345168c0,164,"" -code-creation,LoadIC,0x1e4e345168c0,164,"" -code-creation,LoadIC,0x1e4e34516980,222,"" -code-creation,LoadIC,0x1e4e34516980,222,"" -code-creation,LoadIC,0x1e4e34516a60,222,"" -code-creation,LoadIC,0x1e4e34516a60,222,"" -code-creation,StoreIC,0x1e4e34516b40,185,"exports" -code-creation,StoreIC,0x1e4e34516b40,185,"exports" -code-creation,CallIC,0x1e4e34516c00,187,"cache" -code-creation,LoadIC,0x1e4e34516cc0,138,"_cache" -code-creation,LoadIC,0x1e4e34516cc0,138,"_cache" -code-creation,StoreIC,0x1e4e34516d60,189,"_handle" -code-creation,StoreIC,0x1e4e34516d60,189,"_handle" -code-creation,LazyCompile,0x1e4e34516e20,516,"NonStringToString native runtime.js:558",0xe6623301f8,~ -code-creation,Stub,0x1e4e34517040,200,"BinaryOpStub_ADD_OverwriteLeft_Strings" -code-creation,CallIC,0x1e4e34517120,189,"ToPrimitive" -code-creation,StoreIC,0x1e4e345171e0,185,"callback" -code-creation,StoreIC,0x1e4e345171e0,185,"callback" -code-creation,StoreIC,0x1e4e345172a0,185,"loaded" -code-creation,StoreIC,0x1e4e345172a0,185,"loaded" -code-creation,LoadIC,0x1e4e34517360,134,"_events" -code-creation,LoadIC,0x1e4e34517360,134,"_events" -code-creation,LoadIC,0x1e4e34517400,164,"" -code-creation,LoadIC,0x1e4e34517400,164,"" -code-creation,CallIC,0x1e4e345174c0,192,"splice" -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -code-creation,StoreIC,0x1e4e34517580,185,"handle" -code-creation,StoreIC,0x1e4e34517580,185,"handle" -code-creation,StoreIC,0x1e4e34517640,185,"allowHalfOpen" -code-creation,StoreIC,0x1e4e34517640,185,"allowHalfOpen" -code-creation,LoadIC,0x1e4e34517700,254,"" -code-creation,LoadIC,0x1e4e34517700,254,"" -code-creation,LoadIC,0x1e4e34517800,254,"" -code-creation,LoadIC,0x1e4e34517800,254,"" -code-creation,StoreIC,0x1e4e34517900,189,"_connections" -code-creation,StoreIC,0x1e4e34517900,189,"_connections" -code-creation,LoadIC,0x1e4e345179c0,164,"" -code-creation,LoadIC,0x1e4e345179c0,164,"" -code-creation,StoreIC,0x1e4e34517a80,328,"context" -code-creation,StoreIC,0x1e4e34517a80,328,"context" -code-creation,StoreIC,0x1e4e34517be0,185,"NPNProtocols" -code-creation,StoreIC,0x1e4e34517be0,185,"NPNProtocols" -code-creation,StoreIC,0x1e4e34517ca0,185,"SNICallback" -code-creation,StoreIC,0x1e4e34517ca0,185,"SNICallback" -code-creation,LoadIC,0x1e4e34517d60,224,"" -code-creation,LoadIC,0x1e4e34517d60,224,"" -code-creation,LoadIC,0x1e4e34517e40,224,"" -code-creation,LoadIC,0x1e4e34517e40,224,"" -code-creation,LoadIC,0x1e4e34517f20,140,"EventEmitter" -code-creation,LoadIC,0x1e4e34517f20,140,"EventEmitter" -code-creation,CallIC,0x1e4e34517fc0,192,"call" -code-creation,LoadIC,0x1e4e34518080,284,"" -code-creation,LoadIC,0x1e4e34518080,284,"" -code-creation,LoadIC,0x1e4e345181a0,284,"" -code-creation,LoadIC,0x1e4e345181a0,284,"" -code-creation,CallIC,0x1e4e345182c0,192,"call" -code-creation,LoadIC,0x1e4e34518380,284,"" -code-creation,LoadIC,0x1e4e34518380,284,"" -code-creation,LoadIC,0x1e4e345184a0,284,"" -code-creation,LoadIC,0x1e4e345184a0,284,"" -code-creation,LoadIC,0x1e4e345185c0,224,"" -code-creation,LoadIC,0x1e4e345185c0,224,"" -tick,0x1002da671,0x7fff5fbfeb90,0,0x7fff5fbfebb0,0,0x1e4e3432e9f0,0x1e4e343efbc0,0x1e4e343f0294,0x1e4e343339a7,0x1e4e343c5ef9 -code-creation,CallIC,0x1e4e345186a0,462,"_needTickCallback" -code-creation,LoadIC,0x1e4e34518880,134,"_events" -code-creation,LoadIC,0x1e4e34518880,134,"_events" -code-creation,StoreIC,0x1e4e34518920,185,"_events" -code-creation,StoreIC,0x1e4e34518920,185,"_events" -code-creation,CallIC,0x1e4e345189e0,287,"emit" -code-creation,LoadIC,0x1e4e34518b00,134,"_events" -code-creation,LoadIC,0x1e4e34518b00,134,"_events" -code-creation,StoreIC,0x1e4e34518ba0,185,"_events" -code-creation,StoreIC,0x1e4e34518ba0,185,"_events" -code-creation,CallIC,0x1e4e34518c60,257,"emit" -code-creation,KeyedLoadIC,0x1e4e34518d80,163,"end" -code-creation,KeyedLoadIC,0x1e4e34518d80,163,"end" -code-creation,Stub,0x1e4e34518e40,184,"ToBooleanStub_UndefinedNullSpecObject" -code-creation,KeyedLoadIC,0x1e4e34518f00,163,"close" -code-creation,KeyedLoadIC,0x1e4e34518f00,163,"close" -code-creation,KeyedLoadIC,0x1e4e34518fc0,158,"close" -code-creation,KeyedLoadIC,0x1e4e34518fc0,158,"close" -code-creation,LoadIC,0x1e4e34519060,194,"" -code-creation,LoadIC,0x1e4e34519060,194,"" -code-creation,LoadIC,0x1e4e34519140,134,"_maxListeners" -code-creation,LoadIC,0x1e4e34519140,134,"_maxListeners" -code-creation,CallIC,0x1e4e345191e0,247,"on" -code-creation,CallIC,0x1e4e345192e0,277,"on" -code-creation,LoadIC,0x1e4e34519400,284,"" -code-creation,LoadIC,0x1e4e34519400,284,"" -code-creation,KeyedLoadIC,0x1e4e34519520,163,"end" -code-creation,KeyedLoadIC,0x1e4e34519520,163,"end" -code-creation,KeyedLoadIC,0x1e4e345195e0,158,"end" -code-creation,KeyedLoadIC,0x1e4e345195e0,158,"end" -code-creation,LoadIC,0x1e4e34519680,134,"_maxListeners" -code-creation,LoadIC,0x1e4e34519680,134,"_maxListeners" -code-creation,KeyedLoadIC,0x1e4e34519720,158,"close" -code-creation,KeyedLoadIC,0x1e4e34519720,158,"close" -code-creation,KeyedLoadIC,0x1e4e345197c0,158,"end" -code-creation,KeyedLoadIC,0x1e4e345197c0,158,"end" -code-creation,CallIC,0x1e4e34519860,287,"emit" -code-creation,LoadIC,0x1e4e34519980,134,"_events" -code-creation,LoadIC,0x1e4e34519980,134,"_events" -code-creation,StoreIC,0x1e4e34519a20,185,"_events" -code-creation,StoreIC,0x1e4e34519a20,185,"_events" -code-creation,CallIC,0x1e4e34519ae0,227,"emit" -code-creation,LoadIC,0x1e4e34519be0,134,"callback" -code-creation,LoadIC,0x1e4e34519be0,134,"callback" -code-creation,Stub,0x1e4e34519c80,320,"BinaryOpStub_MUL_Alloc_SMI" -code-creation,StoreIC,0x1e4e34519dc0,185,"_idleTimeout" -code-creation,StoreIC,0x1e4e34519dc0,185,"_idleTimeout" -code-creation,StoreIC,0x1e4e34519e80,185,"_idleTimeout" -code-creation,StoreIC,0x1e4e34519e80,185,"_idleTimeout" -code-creation,StoreIC,0x1e4e34519f40,189,"_idlePrev" -code-creation,StoreIC,0x1e4e34519f40,189,"_idlePrev" -code-creation,StoreIC,0x1e4e3451a000,189,"_idleNext" -code-creation,StoreIC,0x1e4e3451a000,189,"_idleNext" -code-creation,StoreIC,0x1e4e3451a0c0,189,"_idlePrev" -code-creation,StoreIC,0x1e4e3451a0c0,189,"_idlePrev" -code-creation,StoreIC,0x1e4e3451a180,189,"_idleNext" -code-creation,StoreIC,0x1e4e3451a180,189,"_idleNext" -code-creation,Stub,0x1e4e3451a240,206,"CompareICStub" -code-creation,StoreIC,0x1e4e3451a320,189,"timer" -code-creation,StoreIC,0x1e4e3451a320,189,"timer" -code-creation,StoreIC,0x1e4e3451a3e0,191,"cycleEncryptedPullLock" -code-creation,StoreIC,0x1e4e3451a3e0,191,"cycleEncryptedPullLock" -code-creation,LoadIC,0x1e4e3451a4a0,134,"_pending" -code-creation,LoadIC,0x1e4e3451a4a0,134,"_pending" -code-creation,LoadIC,0x1e4e3451a540,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e3451a540,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e3451a5e0,134,"_needDrain" -code-creation,LoadIC,0x1e4e3451a5e0,134,"_needDrain" -code-creation,StoreIC,0x1e4e3451a680,191,"cycleCleartextPullLock" -code-creation,StoreIC,0x1e4e3451a680,191,"cycleCleartextPullLock" -code-creation,Stub,0x1e4e3451a740,206,"CompareICStub" -code-creation,StoreIC,0x1e4e3451a820,191,"cycleCleartextPushLock" -code-creation,StoreIC,0x1e4e3451a820,191,"cycleCleartextPushLock" -code-creation,LoadIC,0x1e4e3451a8e0,134,"pair" -code-creation,LoadIC,0x1e4e3451a8e0,134,"pair" -code-creation,LoadIC,0x1e4e3451a980,137,"encrypted" -tick,0x7fff9199e6fe,0x7fff5fbff088,0,0x7fff9125a857,0,0x1e4e343f3740,0x1e4e343f5dc4,0x1e4e343ef3d5,0x1e4e3432e78a -code-creation,LoadIC,0x1e4e3451a980,137,"encrypted" -code-creation,LoadIC,0x1e4e3451aa20,134,"_paused" -code-creation,LoadIC,0x1e4e3451aa20,134,"_paused" -code-creation,LoadIC,0x1e4e3451aac0,138,"_buffer" -code-creation,LoadIC,0x1e4e3451aac0,138,"_buffer" -code-creation,LoadIC,0x1e4e3451ab60,134,"offset" -code-creation,LoadIC,0x1e4e3451ab60,134,"offset" -code-creation,LoadIC,0x1e4e3451ac00,170,"_pusher" -code-creation,LoadIC,0x1e4e3451ac00,170,"_pusher" -code-creation,CallIC,0x1e4e3451acc0,187,"use" -code-creation,LoadIC,0x1e4e3451ad80,134,"remaining" -code-creation,LoadIC,0x1e4e3451ad80,134,"remaining" -code-creation,LoadIC,0x1e4e3451ae20,134,"pool" -code-creation,LoadIC,0x1e4e3451ae20,134,"pool" -code-creation,CallIC,0x1e4e3451aec0,192,"call" -code-creation,LoadIC,0x1e4e3451af80,134,"ssl" -code-creation,LoadIC,0x1e4e3451af80,134,"ssl" -code-creation,LoadIC,0x1e4e3451b020,194,"" -code-creation,LoadIC,0x1e4e3451b020,194,"" -code-creation,CallIC,0x1e4e3451b100,187,"maybeInitFinished" -code-creation,LoadIC,0x1e4e3451b1c0,134,"_secureEstablished" -code-creation,LoadIC,0x1e4e3451b1c0,134,"_secureEstablished" -code-creation,CallIC,0x1e4e3451b260,492,"isInitFinished" -code-creation,LoadIC,0x1e4e3451b460,134,"isFull" -code-creation,LoadIC,0x1e4e3451b460,134,"isFull" -code-creation,CallIC,0x1e4e3451b500,187,"_internallyPendingBytes" -code-creation,StoreIC,0x1e4e3451b5c0,191,"cycleEncryptedPushLock" -code-creation,StoreIC,0x1e4e3451b5c0,191,"cycleEncryptedPushLock" -code-creation,Stub,0x1e4e3451b680,224,"CompareICStub" -code-creation,LoadIC,0x1e4e3451b760,254,"" -code-creation,LoadIC,0x1e4e3451b760,254,"" -code-creation,StoreIC,0x1e4e3451b860,330,"length" -code-creation,StoreIC,0x1e4e3451b860,330,"length" -code-creation,StoreIC,0x1e4e3451b9c0,330,"parent" -code-creation,StoreIC,0x1e4e3451b9c0,330,"parent" -code-creation,StoreIC,0x1e4e3451bb20,330,"offset" -code-creation,StoreIC,0x1e4e3451bb20,330,"offset" -code-creation,KeyedLoadIC,0x1e4e3451bc80,163,"data" -code-creation,KeyedLoadIC,0x1e4e3451bc80,163,"data" -code-creation,LoadIC,0x1e4e3451bd40,134,"domain" -code-creation,LoadIC,0x1e4e3451bd40,134,"domain" -code-creation,LoadIC,0x1e4e3451bde0,134,"length" -code-creation,LoadIC,0x1e4e3451bde0,134,"length" -code-creation,CallIC,0x1e4e3451be80,192,"call" -code-creation,StoreIC,0x1e4e3451bf40,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e3451bf40,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e3451c000,191,"_writeCalled" -code-creation,StoreIC,0x1e4e3451c000,191,"_writeCalled" -code-creation,LoadIC,0x1e4e3451c0c0,134,"_doneFlag" -code-creation,LoadIC,0x1e4e3451c0c0,134,"_doneFlag" -code-creation,LoadIC,0x1e4e3451c160,137,"cycleEncryptedPullLock" -code-creation,LoadIC,0x1e4e3451c160,137,"cycleEncryptedPullLock" -code-creation,StoreIC,0x1e4e3451c200,191,"cycleEncryptedPullLock" -code-creation,StoreIC,0x1e4e3451c200,191,"cycleEncryptedPullLock" -code-creation,CallIC,0x1e4e3451c2c0,217,"_pull" -code-creation,LoadIC,0x1e4e3451c3a0,134,"_pending" -code-creation,LoadIC,0x1e4e3451c3a0,134,"_pending" -code-creation,LoadIC,0x1e4e3451c440,134,"_needDrain" -code-creation,LoadIC,0x1e4e3451c440,134,"_needDrain" -code-creation,LoadIC,0x1e4e3451c4e0,137,"cycleCleartextPullLock" -code-creation,LoadIC,0x1e4e3451c4e0,137,"cycleCleartextPullLock" -code-creation,StoreIC,0x1e4e3451c580,191,"cycleCleartextPullLock" -code-creation,StoreIC,0x1e4e3451c580,191,"cycleCleartextPullLock" -code-creation,LoadIC,0x1e4e3451c640,137,"cleartext" -code-creation,LoadIC,0x1e4e3451c640,137,"cleartext" -code-creation,CallIC,0x1e4e3451c6e0,217,"_pull" -code-creation,LoadIC,0x1e4e3451c7c0,137,"cycleCleartextPushLock" -code-creation,LoadIC,0x1e4e3451c7c0,137,"cycleCleartextPushLock" -code-creation,StoreIC,0x1e4e3451c860,191,"cycleCleartextPushLock" -code-creation,StoreIC,0x1e4e3451c860,191,"cycleCleartextPushLock" -code-creation,CallIC,0x1e4e3451c920,217,"_push" -code-creation,LoadIC,0x1e4e3451ca00,134,"pair" -code-creation,LoadIC,0x1e4e3451ca00,134,"pair" -code-creation,LoadIC,0x1e4e3451caa0,134,"_paused" -code-creation,LoadIC,0x1e4e3451caa0,134,"_paused" -code-creation,LoadIC,0x1e4e3451cb40,138,"_buffer" -code-creation,LoadIC,0x1e4e3451cb40,138,"_buffer" -code-creation,LoadIC,0x1e4e3451cbe0,170,"_pusher" -code-creation,LoadIC,0x1e4e3451cbe0,170,"_pusher" -code-creation,CallIC,0x1e4e3451cca0,492,"clearOut" -tick,0x10018d3d0,0x7fff5fbfdc38,1,0x10002d456,2,0x1e4e343f77c5,0x1e4e343fe1ca,0x1e4e343f5117,0x1e4e343f1858,0x1e4e343f383a,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -code-creation,LazyCompile,0x1e4e3451cea0,1728,"some native array.js:1105",0xe6623152a8,~ -code-creation,CallMegamorphic,0x1e4e3451d560,811,"args_count: 0" -code-creation,CallIC,0x1e4e3451d8a0,492,"clearPending" -code-creation,LoadIC,0x1e4e3451daa0,284,"" -code-creation,LoadIC,0x1e4e3451daa0,284,"" -code-creation,LoadIC,0x1e4e3451dbc0,137,"cycleEncryptedPushLock" -code-creation,LoadIC,0x1e4e3451dbc0,137,"cycleEncryptedPushLock" -code-creation,CallIC,0x1e4e3451dc60,217,"_push" -code-creation,LoadIC,0x1e4e3451dd40,134,"writable" -code-creation,LoadIC,0x1e4e3451dd40,134,"writable" -code-creation,CallIC,0x1e4e3451dde0,492,"encOut" -code-creation,StoreIC,0x1e4e3451dfe0,185,"offset" -code-creation,StoreIC,0x1e4e3451dfe0,185,"offset" -code-creation,StoreIC,0x1e4e3451e0a0,185,"remaining" -code-creation,StoreIC,0x1e4e3451e0a0,185,"remaining" -code-creation,CallIC,0x1e4e3451e160,157,"isBuffer" -code-creation,LoadIC,0x1e4e3451e200,157,"Math" -code-creation,LoadIC,0x1e4e3451e200,157,"Math" -code-creation,CallIC,0x1e4e3451e2a0,157,"ceil" -code-creation,LoadIC,0x1e4e3451e340,224,"" -code-creation,LoadIC,0x1e4e3451e340,224,"" -code-creation,LoadIC,0x1e4e3451e420,134,"parent" -code-creation,LoadIC,0x1e4e3451e420,134,"parent" -code-creation,LoadIC,0x1e4e3451e4c0,134,"offset" -code-creation,LoadIC,0x1e4e3451e4c0,134,"offset" -code-creation,LoadIC,0x1e4e3451e560,134,"length" -code-creation,LoadIC,0x1e4e3451e560,134,"length" -code-creation,CallIC,0x1e4e3451e600,462,"makeFastBuffer" -code-creation,KeyedLoadIC,0x1e4e3451e7e0,163,"data" -code-creation,KeyedLoadIC,0x1e4e3451e7e0,163,"data" -code-creation,LoadIC,0x1e4e3451e8a0,134,"domain" -code-creation,LoadIC,0x1e4e3451e8a0,134,"domain" -code-creation,LoadIC,0x1e4e3451e940,134,"writable" -code-creation,LoadIC,0x1e4e3451e940,134,"writable" -code-creation,CallIC,0x1e4e3451e9e0,200,"write" -code-creation,StoreIC,0x1e4e3451eac0,185,"_pendingWriteReqs" -code-creation,StoreIC,0x1e4e3451eac0,185,"_pendingWriteReqs" -code-creation,StoreIC,0x1e4e3451eb80,185,"_bytesDispatched" -code-creation,StoreIC,0x1e4e3451eb80,185,"_bytesDispatched" -code-creation,CallIC,0x1e4e3451ec40,492,"encPending" -code-creation,LoadIC,0x1e4e3451ee40,137,"_writeCalled" -code-creation,LoadIC,0x1e4e3451ee40,137,"_writeCalled" -code-creation,StoreIC,0x1e4e3451eee0,185,"_needDrain" -code-creation,StoreIC,0x1e4e3451eee0,185,"_needDrain" -code-creation,StoreIC,0x1e4e3451efa0,185,"bytesRead" -code-creation,StoreIC,0x1e4e3451efa0,185,"bytesRead" -code-creation,StoreIC,0x1e4e3451f060,185,"_paused" -code-creation,StoreIC,0x1e4e3451f060,185,"_paused" -code-creation,LoadIC,0x1e4e3451f120,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e3451f120,138,"_pendingBytes" -code-creation,CallIC,0x1e4e3451f1c0,187,"_internallyPendingBytes" -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -code-creation,LoadIC,0x1e4e3451f280,138,"owner" -code-creation,LoadIC,0x1e4e3451f280,138,"owner" -code-creation,LoadIC,0x1e4e3451f320,134,"_handle" -code-creation,LoadIC,0x1e4e3451f320,134,"_handle" -code-creation,CallIC,0x1e4e3451f3c0,157,"active" -code-creation,LoadIC,0x1e4e3451f460,143,"data" -code-creation,LoadIC,0x1e4e3451f460,143,"data" -code-creation,CallIC,0x1e4e3451f500,187,"slice" -code-creation,LoadIC,0x1e4e3451f5c0,147,"undefined" -code-creation,LoadIC,0x1e4e3451f5c0,147,"undefined" -code-creation,LoadIC,0x1e4e3451f660,138,"length" -code-creation,LoadIC,0x1e4e3451f660,138,"length" -code-creation,CallIC,0x1e4e3451f700,257,"emit" -code-creation,LoadIC,0x1e4e3451f820,134,"length" -code-creation,LoadIC,0x1e4e3451f820,134,"length" -code-creation,LoadIC,0x1e4e3451f8c0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3451f8c0,134,"_pendingCallbacks" -code-creation,CallIC,0x1e4e3451f960,197,"cycle" -code-creation,CallIC,0x1e4e3451fa40,189,"shift" -code-creation,CallIC,0x1e4e3451fb00,187,"_puller" -code-creation,CallIC,0x1e4e3451fbc0,492,"encIn" -tick,0x10009af88,0x7fff5fbfe8b0,0,0x1,0,0x1e4e343f5117,0x1e4e343f1858,0x1e4e343f383a,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -tick,0x1000fdf95,0x7fff5fbfe798,0,0x4,0,0x1e4e343f5117,0x1e4e343f1858,0x1e4e343f383a,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -tick,0x10009611f,0x7fff5fbfe7c0,0,0x10,0,0x1e4e343f5117,0x1e4e343f1858,0x1e4e343f383a,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -tick,0x1000feae4,0x7fff5fbfe638,0,0x100a142d0,0,0x1e4e343f5117,0x1e4e343f1858,0x1e4e343f383a,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -tick,0x1000fedf1,0x7fff5fbfe698,0,0x102805d00,0,0x1e4e343f5117,0x1e4e343f1858,0x1e4e343f383a,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -code-creation,StoreIC,0x1e4e3451fdc0,185,"npnProtocol" -code-creation,StoreIC,0x1e4e3451fdc0,185,"npnProtocol" -code-creation,StoreIC,0x1e4e3451fe80,185,"servername" -code-creation,StoreIC,0x1e4e3451fe80,185,"servername" -code-creation,StoreIC,0x1e4e3451ff40,185,"_secureEstablished" -code-creation,StoreIC,0x1e4e3451ff40,185,"_secureEstablished" -code-creation,LoadIC,0x1e4e34520000,134,"_events" -code-creation,LoadIC,0x1e4e34520000,134,"_events" -code-creation,LoadIC,0x1e4e345200a0,134,"domain" -code-creation,LoadIC,0x1e4e345200a0,134,"domain" -code-creation,StoreIC,0x1e4e34520140,189,"authorized" -code-creation,StoreIC,0x1e4e34520140,189,"authorized" -code-creation,StoreIC,0x1e4e34520200,189,"_controlReleased" -code-creation,StoreIC,0x1e4e34520200,189,"_controlReleased" -code-creation,LoadIC,0x1e4e345202c0,134,"domain" -code-creation,LoadIC,0x1e4e345202c0,134,"domain" -code-creation,StoreIC,0x1e4e34520360,150,"lastMatchInfoOverride" -code-creation,StoreIC,0x1e4e34520360,150,"lastMatchInfoOverride" -code-creation,LoadIC,0x1e4e34520400,224,"" -code-creation,LoadIC,0x1e4e34520400,224,"" -code-creation,LoadIC,0x1e4e345204e0,224,"" -code-creation,LoadIC,0x1e4e345204e0,224,"" -code-creation,LoadIC,0x1e4e345205c0,254,"" -code-creation,LoadIC,0x1e4e345205c0,254,"" -code-creation,LoadIC,0x1e4e345206c0,254,"" -code-creation,LoadIC,0x1e4e345206c0,254,"" -code-creation,StoreIC,0x1e4e345207c0,185,"connection" -code-creation,StoreIC,0x1e4e345207c0,185,"connection" -code-creation,LoadIC,0x1e4e34520880,134,"_events" -code-creation,LoadIC,0x1e4e34520880,134,"_events" -code-creation,StoreIC,0x1e4e34520920,185,"_events" -code-creation,StoreIC,0x1e4e34520920,185,"_events" -code-creation,CallIC,0x1e4e345209e0,257,"emit" -code-creation,LoadIC,0x1e4e34520b00,134,"_events" -code-creation,LoadIC,0x1e4e34520b00,134,"_events" -code-creation,StoreIC,0x1e4e34520ba0,185,"_events" -code-creation,StoreIC,0x1e4e34520ba0,185,"_events" -code-creation,CallIC,0x1e4e34520c60,287,"emit" -code-creation,LoadIC,0x1e4e34520d80,254,"" -code-creation,LoadIC,0x1e4e34520d80,254,"" -code-creation,LoadIC,0x1e4e34520e80,134,"_maxListeners" -code-creation,LoadIC,0x1e4e34520e80,134,"_maxListeners" -code-creation,LoadIC,0x1e4e34520f20,134,"_maxListeners" -code-creation,LoadIC,0x1e4e34520f20,134,"_maxListeners" -code-creation,LazyCompile,0x1e4e34520fc0,392,"isNaN native v8natives.js:96",0xe6623286f8,~ -tick,0x100306908,0x7fff5fbfe820,0,0x300,0,0x1e4e343c65d4,0x1e4e343f243c,0x1e4e343e3f30,0x1e4e343e6d1c,0x1e4e343fe1ca,0x1e4e343339e2,0x1e4e343efd96,0x1e4e3433397a,0x1e4e343f60f2,0x1e4e343f3978,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e34521160,138,"_idleTimeout" -code-creation,LoadIC,0x1e4e34521160,138,"_idleTimeout" -code-creation,Stub,0x1e4e34521200,307,"KeyedLoadElementStub" -code-creation,KeyedLoadIC,0x1e4e34521340,152,"" -code-creation,KeyedLoadMegamorphicIC,0x1e4e34521340,152,"args_count: 0" -code-creation,LoadIC,0x1e4e345213e0,157,"Date" -code-creation,LoadIC,0x1e4e345213e0,157,"Date" -code-creation,StoreIC,0x1e4e34521480,189,"_idleTimeout" -code-creation,StoreIC,0x1e4e34521480,189,"_idleTimeout" -code-creation,CallIC,0x1e4e34521540,492,"start" -code-creation,CallIC,0x1e4e34521740,157,"init" -code-creation,StoreIC,0x1e4e345217e0,256,"_idleNext" -code-creation,StoreIC,0x1e4e345217e0,256,"_idleNext" -code-creation,StoreIC,0x1e4e345218e0,334,"_idlePrev" -code-creation,StoreIC,0x1e4e345218e0,334,"_idlePrev" -code-creation,Stub,0x1e4e34521a40,118,"KeyedStoreElementStub" -code-creation,KeyedStoreIC,0x1e4e34521ac0,148,"" -code-creation,KeyedStoreMegamorphicIC,0x1e4e34521ac0,148,"args_count: 0" -code-creation,CallIC,0x1e4e34521b60,157,"append" -code-creation,LoadIC,0x1e4e34521c00,138,"_idleNext" -code-creation,LoadIC,0x1e4e34521c00,138,"_idleNext" -code-creation,LoadIC,0x1e4e34521ca0,138,"_idlePrev" -code-creation,LoadIC,0x1e4e34521ca0,138,"_idlePrev" -code-creation,StoreIC,0x1e4e34521d40,189,"_idlePrev" -code-creation,StoreIC,0x1e4e34521d40,189,"_idlePrev" -code-creation,StoreIC,0x1e4e34521e00,189,"_idleNext" -code-creation,StoreIC,0x1e4e34521e00,189,"_idleNext" -code-creation,LoadIC,0x1e4e34521ec0,138,"_idleNext" -code-creation,LoadIC,0x1e4e34521ec0,138,"_idleNext" -code-creation,StoreIC,0x1e4e34521f60,189,"_idlePrev" -code-creation,StoreIC,0x1e4e34521f60,189,"_idlePrev" -code-creation,StoreIC,0x1e4e34522020,189,"_idleNext" -code-creation,StoreIC,0x1e4e34522020,189,"_idleNext" -code-creation,CallIC,0x1e4e345220e0,157,"isEmpty" -code-creation,LoadIC,0x1e4e34522180,143,"listener" -code-creation,LoadIC,0x1e4e34522180,143,"listener" -code-creation,CallIC,0x1e4e34522220,277,"on" -code-creation,LoadIC,0x1e4e34522340,138,"listener" -code-creation,LoadIC,0x1e4e34522340,138,"listener" -code-creation,LoadIC,0x1e4e345223e0,134,"_events" -code-creation,LoadIC,0x1e4e345223e0,134,"_events" -code-creation,StoreIC,0x1e4e34522480,185,"_events" -code-creation,StoreIC,0x1e4e34522480,185,"_events" -code-creation,CallIC,0x1e4e34522540,227,"emit" -code-creation,LoadIC,0x1e4e34522640,138,"_buffer" -code-creation,LoadIC,0x1e4e34522640,138,"_buffer" -code-creation,CallIC,0x1e4e345226e0,187,"_internallyPendingBytes" -code-creation,LoadIC,0x1e4e345227a0,134,"pair" -code-creation,LoadIC,0x1e4e345227a0,134,"pair" -code-creation,LoadIC,0x1e4e34522840,284,"" -code-creation,LoadIC,0x1e4e34522840,284,"" -code-creation,CallIC,0x1e4e34522960,187,"slice" -code-creation,LoadIC,0x1e4e34522a20,134,"parent" -code-creation,LoadIC,0x1e4e34522a20,134,"parent" -code-creation,LoadIC,0x1e4e34522ac0,134,"offset" -code-creation,LoadIC,0x1e4e34522ac0,134,"offset" -code-creation,LoadIC,0x1e4e34522b60,134,"writable" -code-creation,LoadIC,0x1e4e34522b60,134,"writable" -code-creation,CallIC,0x1e4e34522c00,200,"write" -code-creation,LoadIC,0x1e4e34522ce0,157,"Buffer" -code-creation,LoadIC,0x1e4e34522ce0,157,"Buffer" -code-creation,LoadIC,0x1e4e34522d80,254,"" -code-creation,LoadIC,0x1e4e34522d80,254,"" -code-creation,CallIC,0x1e4e34522e80,187,"_write" -code-creation,LoadIC,0x1e4e34522f40,138,"_idleTimeout" -code-creation,LoadIC,0x1e4e34522f40,138,"_idleTimeout" -code-creation,StoreIC,0x1e4e34522fe0,189,"_idleStart" -code-creation,StoreIC,0x1e4e34522fe0,189,"_idleStart" -code-creation,LoadIC,0x1e4e345230a0,134,"_handle" -code-creation,LoadIC,0x1e4e345230a0,134,"_handle" -code-creation,CallIC,0x1e4e34523140,490,"writeBuffer" -code-creation,StoreIC,0x1e4e34523340,304,"cb" -code-creation,StoreIC,0x1e4e34523340,304,"cb" -code-creation,LoadIC,0x1e4e34523480,134,"_pendingWriteReqs" -code-creation,LoadIC,0x1e4e34523480,134,"_pendingWriteReqs" -code-creation,StoreIC,0x1e4e34523520,185,"_pendingWriteReqs" -code-creation,StoreIC,0x1e4e34523520,185,"_pendingWriteReqs" -code-creation,LoadIC,0x1e4e345235e0,134,"_bytesDispatched" -code-creation,LoadIC,0x1e4e345235e0,134,"_bytesDispatched" -code-creation,LoadIC,0x1e4e34523680,138,"bytes" -code-creation,LoadIC,0x1e4e34523680,138,"bytes" -code-creation,StoreIC,0x1e4e34523720,185,"_bytesDispatched" -code-creation,StoreIC,0x1e4e34523720,185,"_bytesDispatched" -code-creation,LoadIC,0x1e4e345237e0,138,"writeQueueSize" -code-creation,LoadIC,0x1e4e345237e0,138,"writeQueueSize" -code-creation,LoadIC,0x1e4e34523880,134,"_pending" -code-creation,LoadIC,0x1e4e34523880,134,"_pending" -code-creation,LoadIC,0x1e4e34523920,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e34523920,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345239c0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345239c0,134,"_needDrain" -code-creation,LoadIC,0x1e4e34523a60,134,"_paused" -code-creation,LoadIC,0x1e4e34523a60,134,"_paused" -code-creation,LoadIC,0x1e4e34523b00,170,"_pusher" -code-creation,LoadIC,0x1e4e34523b00,170,"_pusher" -code-creation,LoadIC,0x1e4e34523bc0,134,"domain" -code-creation,LoadIC,0x1e4e34523bc0,134,"domain" -code-creation,LoadIC,0x1e4e34523c60,134,"bytesRead" -code-creation,LoadIC,0x1e4e34523c60,134,"bytesRead" -tick,0x7fff9125fd1e,0x7fff5fbfeee8,0,0xaabee82a199,0,0x1e4e343c3e50 -code-creation,StoreIC,0x1e4e34523d00,185,"bytesRead" -code-creation,StoreIC,0x1e4e34523d00,185,"bytesRead" -code-creation,LoadIC,0x1e4e34523dc0,134,"destroyed" -code-creation,LoadIC,0x1e4e34523dc0,134,"destroyed" -code-creation,CallIC,0x1e4e34523e60,257,"emit" -code-creation,LoadIC,0x1e4e34523f80,134,"_events" -code-creation,LoadIC,0x1e4e34523f80,134,"_events" -code-creation,LoadIC,0x1e4e34524020,134,"readable" -code-creation,LoadIC,0x1e4e34524020,134,"readable" -code-creation,LoadIC,0x1e4e345240c0,200,"resume" -code-creation,LoadIC,0x1e4e345240c0,200,"resume" -code-creation,CallIC,0x1e4e345241a0,217,"resume" -code-creation,CallIC,0x1e4e34524280,217,"_pull" -code-creation,CallIC,0x1e4e34524360,217,"_push" -code-creation,LoadIC,0x1e4e34524440,138,"cb" -code-creation,LoadIC,0x1e4e34524440,138,"cb" -code-creation,LoadIC,0x1e4e345244e0,134,"_flags" -code-creation,LoadIC,0x1e4e345244e0,134,"_flags" -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x1e4e34521c80,0x7fff5fbff290,0,0x1e4e343d0c64,0,0x1e4e343d0e35,0x1e4e343cf2d1,0x1e4e343c3ccb -code-creation,CallIC,0x1e4e34524580,217,"write" -code-creation,LoadIC,0x1e4e34524660,134,"domain" -code-creation,LoadIC,0x1e4e34524660,134,"domain" -code-creation,LoadIC,0x1e4e34524700,134,"writable" -code-creation,LoadIC,0x1e4e34524700,134,"writable" -code-creation,CallIC,0x1e4e345247a0,200,"write" -code-creation,StoreIC,0x1e4e34524880,185,"buffered" -code-creation,StoreIC,0x1e4e34524880,185,"buffered" -code-creation,StoreIC,0x1e4e34524940,185,"drained" -code-creation,StoreIC,0x1e4e34524940,185,"drained" -code-creation,StoreIC,0x1e4e34524a00,189,"used" -code-creation,StoreIC,0x1e4e34524a00,189,"used" -code-creation,KeyedStoreIC,0x1e4e34524ac0,130,"" -code-creation,KeyedStoreIC,0x1e4e34524ac0,130,"args_count: 0" -code-creation,StoreIC,0x1e4e34524b60,185,"buffer" -code-creation,StoreIC,0x1e4e34524b60,185,"buffer" -code-creation,StoreIC,0x1e4e34524c20,185,"paused" -code-creation,StoreIC,0x1e4e34524c20,185,"paused" -tick,0x100340140,0x7fff5fbfe6a8,0,0x100342ab0,2,0x1e4e343ae8e0,0x1e4e343ae198,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343f3e61,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -code-creation,LazyCompile,0x1e4e34524ce0,716,"parseHeader /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/generic.js:6",0x140cf214f350,~ -code-creation,Stub,0x1e4e34524fc0,205,"KeyedLoadElementStub" -code-creation,KeyedLoadIC,0x1e4e345250a0,130,"" -code-creation,KeyedLoadIC,0x1e4e345250a0,130,"args_count: 0" -code-creation,StoreIC,0x1e4e34525140,185,"control" -code-creation,StoreIC,0x1e4e34525140,185,"control" -code-creation,CallIC,0x1e4e34525200,157,"ok" -code-creation,StoreIC,0x1e4e345252a0,185,"flags" -code-creation,StoreIC,0x1e4e345252a0,185,"flags" -code-creation,Stub,0x1e4e34525360,296,"BinaryOpStub_SHL_Alloc_SMI" -code-creation,Stub,0x1e4e345254a0,284,"BinaryOpStub_BIT_OR_OverwriteRight_SMI" -code-creation,Stub,0x1e4e345255c0,313,"BinaryOpStub_SHR_OverwriteLeft_SMI" -code-creation,Stub,0x1e4e34525700,299,"BinaryOpStub_ADD_OverwriteRight_SMI" -code-creation,StoreIC,0x1e4e34525840,185,"length" -code-creation,StoreIC,0x1e4e34525840,185,"length" -code-creation,StoreIC,0x1e4e34525900,185,"version" -code-creation,StoreIC,0x1e4e34525900,185,"version" -code-creation,StoreIC,0x1e4e345259c0,185,"type" -code-creation,StoreIC,0x1e4e345259c0,185,"type" -code-creation,KeyedLoadIC,0x1e4e34525a80,130,"" -code-creation,KeyedLoadIC,0x1e4e34525a80,130,"args_count: 0" -code-creation,LoadIC,0x1e4e34525b20,134,"domain" -code-creation,LoadIC,0x1e4e34525b20,134,"domain" -code-creation,StoreIC,0x1e4e34525bc0,185,"version" -code-creation,StoreIC,0x1e4e34525bc0,185,"version" -code-creation,StoreIC,0x1e4e34525c80,185,"dictionary" -code-creation,StoreIC,0x1e4e34525c80,185,"dictionary" -code-creation,LoadIC,0x1e4e34525d40,284,"" -code-creation,LoadIC,0x1e4e34525d40,284,"" -code-creation,LoadIC,0x1e4e34525e60,284,"" -code-creation,LoadIC,0x1e4e34525e60,284,"" -code-creation,LoadIC,0x1e4e34525f80,134,"length" -code-creation,LoadIC,0x1e4e34525f80,134,"length" -code-creation,LoadIC,0x1e4e34526020,138,"poolSize" -code-creation,LoadIC,0x1e4e34526020,138,"poolSize" -code-creation,LoadIC,0x1e4e345260c0,157,"Array" -code-creation,LoadIC,0x1e4e345260c0,157,"Array" -code-creation,CallIC,0x1e4e34526160,157,"isArray" -code-creation,StoreIC,0x1e4e34526200,185,"deflate" -code-creation,StoreIC,0x1e4e34526200,185,"deflate" -code-creation,LoadIC,0x1e4e345262c0,284,"" -code-creation,LoadIC,0x1e4e345262c0,284,"" -tick,0x7fff9199e6fe,0x7fff5fbfe8c8,0,0x7fff9125a857,0,0x1e4e343331ff,0x1e4e3438493a,0x1e4e34396954,0x1e4e34396069,0x1e4e34397953,0x1e4e343941ca,0x1e4e343e1a6c,0x1e4e343e3296,0x1e4e343339a7,0x1e4e343ae3a4,0x1e4e343ae962,0x1e4e343ae198,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343f3e61,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e345263e0,284,"" -code-creation,LoadIC,0x1e4e345263e0,284,"" -code-creation,LoadIC,0x1e4e34526500,164,"" -code-creation,LoadIC,0x1e4e34526500,164,"" -code-creation,LoadIC,0x1e4e345265c0,134,"windowBits" -code-creation,LoadIC,0x1e4e345265c0,134,"windowBits" -code-creation,LoadIC,0x1e4e34526660,134,"dictionary" -code-creation,LoadIC,0x1e4e34526660,134,"dictionary" -code-creation,LoadIC,0x1e4e34526700,138,"_binding" -code-creation,LoadIC,0x1e4e34526700,138,"_binding" -code-creation,CallIC,0x1e4e345267a0,492,"init" -code-creation,LoadIC,0x1e4e345269a0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e345269a0,138,"_chunkSize" -code-creation,StoreIC,0x1e4e34526a40,185,"inflate" -code-creation,StoreIC,0x1e4e34526a40,185,"inflate" -code-creation,StoreIC,0x1e4e34526b00,185,"_deflate" -code-creation,StoreIC,0x1e4e34526b00,185,"_deflate" -code-creation,StoreIC,0x1e4e34526bc0,185,"_inflate" -code-creation,StoreIC,0x1e4e34526bc0,185,"_inflate" -code-creation,StoreIC,0x1e4e34526c80,185,"version" -code-creation,StoreIC,0x1e4e34526c80,185,"version" -code-creation,StoreIC,0x1e4e34526d40,185,"deflate" -code-creation,StoreIC,0x1e4e34526d40,185,"deflate" -code-creation,StoreIC,0x1e4e34526e00,185,"inflate" -code-creation,StoreIC,0x1e4e34526e00,185,"inflate" -code-creation,StoreIC,0x1e4e34526ec0,185,"framer" -code-creation,StoreIC,0x1e4e34526ec0,185,"framer" -code-creation,StoreIC,0x1e4e34526f80,185,"_framer" -code-creation,StoreIC,0x1e4e34526f80,185,"_framer" -code-creation,CallIC,0x1e4e34527040,189,"NonStringToString" -code-creation,LoadIC,0x1e4e34527100,138,"length" -code-creation,LoadIC,0x1e4e34527100,138,"length" -code-creation,LoadIC,0x1e4e345271a0,138,"used" -code-creation,LoadIC,0x1e4e345271a0,138,"used" -code-creation,Stub,0x1e4e34527240,481,"BinaryOpStub_SHR_Alloc_HeapNumbers" -code-creation,KeyedStoreIC,0x1e4e34527440,130,"" -code-creation,KeyedStoreIC,0x1e4e34527440,130,"args_count: 0" -code-creation,Stub,0x1e4e345274e0,392,"BinaryOpStub_BIT_AND_Alloc_HeapNumbers" -code-creation,LoadIC,0x1e4e34527680,134,"writable" -code-creation,LoadIC,0x1e4e34527680,134,"writable" -code-creation,LoadIC,0x1e4e34527720,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e34527720,134,"_pendingCallbacks" -code-creation,StoreIC,0x1e4e345277c0,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345277c0,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e34527880,185,"_needDrain" -code-creation,StoreIC,0x1e4e34527880,185,"_needDrain" -code-creation,StoreIC,0x1e4e34527940,185,"type" -code-creation,StoreIC,0x1e4e34527940,185,"type" -code-creation,StoreIC,0x1e4e34527a00,185,"waiting" -code-creation,StoreIC,0x1e4e34527a00,185,"waiting" -code-creation,LoadIC,0x1e4e34527ac0,134,"paused" -code-creation,LoadIC,0x1e4e34527ac0,134,"paused" -code-creation,LoadIC,0x1e4e34527b60,134,"buffered" -code-creation,LoadIC,0x1e4e34527b60,134,"buffered" -code-creation,LoadIC,0x1e4e34527c00,134,"waiting" -code-creation,LoadIC,0x1e4e34527c00,134,"waiting" -code-creation,LoadIC,0x1e4e34527ca0,134,"buffer" -code-creation,LoadIC,0x1e4e34527ca0,134,"buffer" -code-creation,CallIC,0x1e4e34527d40,187,"copy" -code-creation,CallIC,0x1e4e34527e00,492,"copy" -code-creation,CallIC,0x1e4e34528000,200,"slice" -code-creation,CallIC,0x1e4e345280e0,192,"slice" -code-creation,LoadIC,0x1e4e345281a0,134,"state" -code-creation,LoadIC,0x1e4e345281a0,134,"state" -code-creation,CallIC,0x1e4e34528240,187,"execute" -code-creation,LoadIC,0x1e4e34528300,134,"type" -code-creation,LoadIC,0x1e4e34528300,134,"type" -tick,0x10024c1c1,0x7fff5fbfeca0,0,0x7fff5fbfed10,0,0x1e4e343ae198,0x1e4e343ad8f4,0x1e4e343ae9c7,0x1e4e343ae198,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343f3e61,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -code-creation,LazyCompile,0x1e4e345283a0,836,"parseSynHead /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:10",0x140cf21568d0,~ -code-creation,StoreIC,0x1e4e34528700,185,"type" -code-creation,StoreIC,0x1e4e34528700,185,"type" -code-creation,StoreIC,0x1e4e345287c0,185,"id" -code-creation,StoreIC,0x1e4e345287c0,185,"id" -code-creation,StoreIC,0x1e4e34528880,185,"associated" -code-creation,StoreIC,0x1e4e34528880,185,"associated" -code-creation,StoreIC,0x1e4e34528940,185,"priority" -code-creation,StoreIC,0x1e4e34528940,185,"priority" -code-creation,StoreIC,0x1e4e34528a00,185,"fin" -code-creation,StoreIC,0x1e4e34528a00,185,"fin" -code-creation,StoreIC,0x1e4e34528ac0,185,"unidir" -code-creation,StoreIC,0x1e4e34528ac0,185,"unidir" -code-creation,StoreIC,0x1e4e34528b80,185,"_offset" -code-creation,StoreIC,0x1e4e34528b80,185,"_offset" -code-creation,LoadIC,0x1e4e34528c40,224,"" -code-creation,LoadIC,0x1e4e34528c40,224,"" -code-creation,StoreIC,0x1e4e34528d20,189,"locked" -code-creation,StoreIC,0x1e4e34528d20,189,"locked" -code-creation,LoadIC,0x1e4e34528de0,134,"_events" -code-creation,LoadIC,0x1e4e34528de0,134,"_events" -code-creation,StoreIC,0x1e4e34528e80,185,"_events" -code-creation,StoreIC,0x1e4e34528e80,185,"_events" -code-creation,CallIC,0x1e4e34528f40,287,"emit" -code-creation,CallPreMonomorphic,0x1e4e34529060,241,"args_count: 7" -code-creation,StoreIC,0x1e4e34529160,185,"_processing" -code-creation,StoreIC,0x1e4e34529160,185,"_processing" -code-creation,StoreIC,0x1e4e34529220,256,"listener" -code-creation,StoreIC,0x1e4e34529220,256,"listener" -code-creation,StoreIC,0x1e4e34529320,185,"_flush" -code-creation,StoreIC,0x1e4e34529320,185,"_flush" -code-creation,LoadIC,0x1e4e345293e0,284,"" -code-creation,LoadIC,0x1e4e345293e0,284,"" -code-creation,LoadIC,0x1e4e34529500,134,"_ended" -code-creation,LoadIC,0x1e4e34529500,134,"_ended" -code-creation,LoadIC,0x1e4e345295a0,134,"length" -code-creation,LoadIC,0x1e4e345295a0,134,"length" -code-creation,LoadIC,0x1e4e34529640,134,"_queue" -code-creation,LoadIC,0x1e4e34529640,134,"_queue" -code-creation,CallIC,0x1e4e345296e0,217,"_process" -code-creation,LoadIC,0x1e4e345297c0,134,"_processing" -code-creation,LoadIC,0x1e4e345297c0,134,"_processing" -code-creation,StoreIC,0x1e4e34529860,189,"_offset" -code-creation,StoreIC,0x1e4e34529860,189,"_offset" -code-creation,LoadIC,0x1e4e34529920,134,"domain" -code-creation,LoadIC,0x1e4e34529920,134,"domain" -code-creation,CallIC,0x1e4e345299c0,248,"pop" -code-creation,LoadIC,0x1e4e34529ac0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e34529ac0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e34529b60,138,"_offset" -code-creation,LoadIC,0x1e4e34529b60,138,"_offset" -code-creation,LoadIC,0x1e4e34529c00,138,"_binding" -code-creation,LoadIC,0x1e4e34529c00,138,"_binding" -code-creation,LoadIC,0x1e4e34529ca0,134,"_flush" -code-creation,LoadIC,0x1e4e34529ca0,134,"_flush" -code-creation,LoadIC,0x1e4e34529d40,138,"_buffer" -code-creation,LoadIC,0x1e4e34529d40,138,"_buffer" -code-creation,CallMiss,0x1e4e34529de0,241,"args_count: 7" -code-creation,CallIC,0x1e4e34529ee0,492,"write" -code-creation,StoreIC,0x1e4e3452a0e0,189,"buffer" -code-creation,StoreIC,0x1e4e3452a0e0,189,"buffer" -code-creation,KeyedLoadIC,0x1e4e3452a1a0,158,"data" -code-creation,KeyedLoadIC,0x1e4e3452a1a0,158,"data" -code-creation,KeyedStoreIC,0x1e4e3452a240,208,"data" -code-creation,KeyedStoreIC,0x1e4e3452a240,208,"data" -code-creation,KeyedLoadIC,0x1e4e3452a320,163,"error" -code-creation,KeyedLoadIC,0x1e4e3452a320,163,"error" -code-creation,Function,0x1e4e3452a3e0,416,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,~ -code-creation,LazyCompile,0x1e4e3452a580,980,"parseHeaders /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:30",0x140cf2156968,~ -tick,0x1e4e34342761,0x7fff5fbfedf8,0,0x7fff5fbfee40,0,0x1e4e3452a536,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,CallIC,0x1e4e3452a960,190,"DoConstructRegExp" -code-creation,RegExp,0x1e4e3452aa20,736,"^:" -code-creation,CallIC,0x1e4e3452ad00,187,"readUInt32BE" -code-creation,CallIC,0x1e4e3452adc0,197,"toString" -code-creation,CallIC,0x1e4e3452aea0,190,"String" -code-creation,CallIC,0x1e4e3452af60,205,"toLowerCase" -code-creation,CallIC,0x1e4e3452b040,492,"utf8Slice" -code-creation,CallIC,0x1e4e3452b240,205,"replace" -code-creation,LoadIC,0x1e4e3452b320,147,"lastMatchInfoOverride" -code-creation,LoadIC,0x1e4e3452b320,147,"lastMatchInfoOverride" -code-creation,LoadIC,0x1e4e3452b3c0,147,"lastMatchInfo" -code-creation,LoadIC,0x1e4e3452b3c0,147,"lastMatchInfo" -code-creation,StoreIC,0x1e4e3452b460,185,"streamsCount" -code-creation,StoreIC,0x1e4e3452b460,185,"streamsCount" -code-creation,LoadIC,0x1e4e3452b520,254,"" -code-creation,LoadIC,0x1e4e3452b520,254,"" -code-creation,LoadIC,0x1e4e3452b620,254,"" -code-creation,LoadIC,0x1e4e3452b620,254,"" -code-creation,CallIC,0x1e4e3452b720,247,"on" -code-creation,LoadIC,0x1e4e3452b820,134,"_events" -code-creation,LoadIC,0x1e4e3452b820,134,"_events" -code-creation,StoreIC,0x1e4e3452b8c0,185,"_events" -code-creation,StoreIC,0x1e4e3452b8c0,185,"_events" -code-creation,CallIC,0x1e4e3452b980,257,"emit" -code-creation,LoadIC,0x1e4e3452baa0,134,"domain" -code-creation,LoadIC,0x1e4e3452baa0,134,"domain" -code-creation,LazyCompile,0x1e4e3452bb40,344,"exports.FreeList.alloc freelist.js:31",0x140cf21cceb8,~ -code-creation,CallIC,0x1e4e3452bca0,189,"ToUint32" -code-creation,LoadIC,0x1e4e3452bd60,134,"_events" -code-creation,LoadIC,0x1e4e3452bd60,134,"_events" -code-creation,CallIC,0x1e4e3452be00,257,"emit" -code-creation,StoreIC,0x1e4e3452bf20,185,"ondata" -code-creation,StoreIC,0x1e4e3452bf20,185,"ondata" -code-creation,StoreIC,0x1e4e3452bfe0,185,"onend" -code-creation,StoreIC,0x1e4e3452bfe0,185,"onend" -code-creation,KeyedStoreIC,0x1e4e3452c0a0,130,"" -code-creation,KeyedStoreIC,0x1e4e3452c0a0,130,"args_count: 0" -code-creation,StoreIC,0x1e4e3452c140,189,"_charsWritten" -code-creation,StoreIC,0x1e4e3452c140,189,"_charsWritten" -code-creation,StoreIC,0x1e4e3452c200,185,"length" -code-creation,StoreIC,0x1e4e3452c200,185,"length" -code-creation,StoreIC,0x1e4e3452c2c0,185,"_initialized" -code-creation,StoreIC,0x1e4e3452c2c0,185,"_initialized" -code-creation,StoreIC,0x1e4e3452c380,185,"client" -code-creation,StoreIC,0x1e4e3452c380,185,"client" -code-creation,CallIC,0x1e4e3452c440,187,"_write" -code-creation,LoadIC,0x1e4e3452c500,138,"protocol" -code-creation,LoadIC,0x1e4e3452c500,138,"protocol" -code-creation,LoadIC,0x1e4e3452c5a0,138,"generic" -code-creation,LoadIC,0x1e4e3452c5a0,138,"generic" -code-creation,CallIC,0x1e4e3452c640,157,"parseHeader" -code-creation,CallIC,0x1e4e3452c6e0,200,"readUInt8" -code-creation,CallIC,0x1e4e3452c7c0,200,"readUInt32BE" -code-creation,LoadIC,0x1e4e3452c8a0,134,"control" -code-creation,LoadIC,0x1e4e3452c8a0,134,"control" -code-creation,CallIC,0x1e4e3452c940,200,"readUInt16BE" -code-creation,StoreIC,0x1e4e3452ca20,189,"header" -code-creation,StoreIC,0x1e4e3452ca20,189,"header" -code-creation,LoadIC,0x1e4e3452cae0,134,"framer" -code-creation,LoadIC,0x1e4e3452cae0,134,"framer" -code-creation,LoadIC,0x1e4e3452cb80,134,"length" -code-creation,LoadIC,0x1e4e3452cb80,134,"length" -tick,0x7fff9199e6fe,0x7fff5fbfe908,0,0x7fff9125a857,0,0x1e4e343ae8f4,0x1e4e343ae198,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e3452cc20,138,"header" -code-creation,LoadIC,0x1e4e3452cc20,138,"header" -code-creation,CallIC,0x1e4e3452ccc0,187,"execute" -code-creation,LoadIC,0x1e4e3452cd80,134,"type" -code-creation,LoadIC,0x1e4e3452cd80,134,"type" -code-creation,LoadIC,0x1e4e3452ce20,134,"flags" -code-creation,LoadIC,0x1e4e3452ce20,134,"flags" -code-creation,CallIC,0x1e4e3452cec0,205,"parseSynHead" -code-creation,LoadIC,0x1e4e3452cfa0,134,"_offset" -code-creation,LoadIC,0x1e4e3452cfa0,134,"_offset" -code-creation,CallIC,0x1e4e3452d040,201,"inflate" -code-creation,CallIC,0x1e4e3452d120,157,"zstream" -code-creation,LoadIC,0x1e4e3452d1c0,138,"locked" -code-creation,LoadIC,0x1e4e3452d1c0,138,"locked" -code-creation,CallIC,0x1e4e3452d260,277,"on" -code-creation,CallIC,0x1e4e3452d380,230,"write" -code-creation,CallMegamorphic,0x1e4e3452d480,814,"args_count: 7" -code-creation,StoreIC,0x1e4e3452d7c0,189,"buffer" -code-creation,StoreIC,0x1e4e3452d7c0,189,"buffer" -code-creation,StoreIC,0x1e4e3452d880,189,"callback" -code-creation,StoreIC,0x1e4e3452d880,189,"callback" -code-creation,CallIC,0x1e4e3452d940,277,"once" -code-creation,CallIC,0x1e4e3452da60,217,"flush" -code-creation,CallIC,0x1e4e3452db40,257,"emit" -code-creation,LazyCompile,0x1e4e3452dc60,184,"debug tls.js:47",0x140cf21d8c40,~ -tick,0x1001ed9f1,0x7fff5fbfe990,0,0x7fff5fbfe9f0,2,0x1e4e343f5061,0x1e4e343f1858,0x1e4e343f383a,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e343339a7,0x1e4e343c3e38 -code-creation,LazyCompile,0x1e4e3452dd20,166,"debug tls.js:47",0x140cf21d8c40,* -code-creation,CallIC,0x1e4e3452dde0,287,"emit" -code-creation,Stub,0x1e4e3452df00,224,"CompareICStub" -code-creation,StoreIC,0x1e4e3452dfe0,185,"_paused" -code-creation,StoreIC,0x1e4e3452dfe0,185,"_paused" -code-creation,LoadIC,0x1e4e3452e0a0,170,"pause" -code-creation,LoadIC,0x1e4e3452e0a0,170,"pause" -code-creation,CallIC,0x1e4e3452e160,187,"pause" -code-creation,LoadIC,0x1e4e3452e220,134,"domain" -code-creation,LoadIC,0x1e4e3452e220,134,"domain" -code-creation,LoadIC,0x1e4e3452e2c0,134,"bytesRead" -code-creation,LoadIC,0x1e4e3452e2c0,134,"bytesRead" -code-creation,StoreIC,0x1e4e3452e360,185,"bytesRead" -code-creation,StoreIC,0x1e4e3452e360,185,"bytesRead" -code-creation,LoadIC,0x1e4e3452e420,254,"" -code-creation,LoadIC,0x1e4e3452e420,254,"" -code-creation,LoadIC,0x1e4e3452e520,254,"" -tick,0x100252bfe,0x7fff5fbff090,1,0x100013f1a,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LoadIC,0x1e4e3452e520,254,"" -code-creation,LoadIC,0x1e4e3452e620,254,"" -code-creation,LoadIC,0x1e4e3452e620,254,"" -code-creation,StoreIC,0x1e4e3452e720,189,"incoming" -code-creation,StoreIC,0x1e4e3452e720,189,"incoming" -code-creation,StoreIC,0x1e4e3452e7e0,185,"httpVersion" -code-creation,StoreIC,0x1e4e3452e7e0,185,"httpVersion" -code-creation,StoreIC,0x1e4e3452e8a0,185,"url" -code-creation,StoreIC,0x1e4e3452e8a0,185,"url" -code-creation,LazyCompile,0x1e4e3452e960,1616,"min native math.js:152",0xe662331ac8,~ -code-creation,LoadIC,0x1e4e3452efc0,138,"incoming" -code-creation,LoadIC,0x1e4e3452efc0,138,"incoming" -code-creation,CallIC,0x1e4e3452f060,187,"_addHeaderLine" -code-creation,LoadIC,0x1e4e3452f120,134,"complete" -code-creation,LoadIC,0x1e4e3452f120,134,"complete" -code-creation,LoadIC,0x1e4e3452f1c0,134,"headers" -code-creation,LoadIC,0x1e4e3452f1c0,134,"headers" -code-creation,CallIC,0x1e4e3452f260,205,"slice" -code-creation,CallIC,0x1e4e3452f340,190,"SubString" -code-creation,StoreIC,0x1e4e3452f400,191,"method" -code-creation,StoreIC,0x1e4e3452f400,191,"method" -code-creation,LoadIC,0x1e4e3452f4c0,284,"" -code-creation,LoadIC,0x1e4e3452f4c0,284,"" -code-creation,LoadIC,0x1e4e3452f5e0,284,"" -code-creation,LoadIC,0x1e4e3452f5e0,284,"" -code-creation,StoreIC,0x1e4e3452f700,185,"sendDate" -code-creation,StoreIC,0x1e4e3452f700,185,"sendDate" -code-creation,StoreIC,0x1e4e3452f7c0,185,"shouldKeepAlive" -code-creation,StoreIC,0x1e4e3452f7c0,185,"shouldKeepAlive" -code-creation,LoadIC,0x1e4e3452f880,134,"_events" -code-creation,LoadIC,0x1e4e3452f880,134,"_events" -code-creation,CallIC,0x1e4e3452f920,257,"emit" -code-creation,LoadIC,0x1e4e3452fa40,134,"_maxListeners" -code-creation,LoadIC,0x1e4e3452fa40,134,"_maxListeners" -code-creation,LoadIC,0x1e4e3452fae0,134,"_events" -code-creation,LoadIC,0x1e4e3452fae0,134,"_events" -code-creation,StoreIC,0x1e4e3452fb80,185,"_events" -code-creation,StoreIC,0x1e4e3452fb80,185,"_events" -code-creation,CallIC,0x1e4e3452fc40,287,"emit" -code-creation,CallIC,0x1e4e3452fd60,192,"call" -code-creation,StoreIC,0x1e4e3452fe20,185,"useChunkedEncodingByDefault" -code-creation,StoreIC,0x1e4e3452fe20,185,"useChunkedEncodingByDefault" -code-creation,CallIC,0x1e4e3452fee0,277,"on" -code-creation,LoadIC,0x1e4e34530000,134,"_events" -code-creation,LoadIC,0x1e4e34530000,134,"_events" -code-creation,CallIC,0x1e4e345300a0,287,"emit" -code-creation,LoadIC,0x1e4e345301c0,134,"_maxListeners" -code-creation,LoadIC,0x1e4e345301c0,134,"_maxListeners" -code-creation,LazyCompile,0x1e4e34530260,280," /Users/indutny/Code/indutny/node-spdy/examples/hello_world/app.js:10",0x140cf2108600,~ -code-creation,KeyedLoadIC,0x1e4e34530380,130,"" -code-creation,KeyedLoadIC,0x1e4e34530380,130,"args_count: 0" -code-creation,StoreIC,0x1e4e34530420,185,"_locked" -code-creation,StoreIC,0x1e4e34530420,185,"_locked" -tick,0x1002608ef,0x7fff5fbfea20,1,0x100013f1a,0,0x1e4e343a97a2,0x1e4e343aadc0,0x1e4e343af856,0x1e4e343e7e3b,0x1e4e343afe29,0x1e4e3453030c,0x1e4e343339e2,0x1e4e343e67b4,0x1e4e343339e2,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e345304e0,1808,"map native array.js:1190",0xe6623153d8,~ -code-creation,KeyedStoreIC,0x1e4e34530c00,130,"" -code-creation,KeyedStoreIC,0x1e4e34530c00,130,"args_count: 0" -code-creation,LoadIC,0x1e4e34530ca0,147,"$Array" -code-creation,LoadIC,0x1e4e34530ca0,147,"$Array" -code-creation,CallIC,0x1e4e34530d40,462,"byteLength" -code-creation,CallIC,0x1e4e34530f20,190,"isFinite" -code-creation,CallIC,0x1e4e34530fe0,190,"NonNumberToNumber" -code-creation,CallIC,0x1e4e345310a0,492,"utf8Write" -code-creation,LoadIC,0x1e4e345312a0,138,"_charsWritten" -code-creation,LoadIC,0x1e4e345312a0,138,"_charsWritten" -code-creation,CallIC,0x1e4e34531340,187,"writeUInt32BE" -code-creation,CallIC,0x1e4e34531400,200,"write" -code-creation,CallPreMonomorphic,0x1e4e345314e0,241,"args_count: 6" -code-creation,LoadIC,0x1e4e345315e0,134,"_flush" -code-creation,LoadIC,0x1e4e345315e0,134,"_flush" -code-creation,LoadIC,0x1e4e34531680,138,"locked" -code-creation,LoadIC,0x1e4e34531680,138,"locked" -code-creation,StoreIC,0x1e4e34531720,189,"locked" -code-creation,StoreIC,0x1e4e34531720,189,"locked" -code-creation,LoadIC,0x1e4e345317e0,134,"_events" -code-creation,LoadIC,0x1e4e345317e0,134,"_events" -code-creation,StoreIC,0x1e4e34531880,185,"_events" -code-creation,StoreIC,0x1e4e34531880,185,"_events" -code-creation,CallIC,0x1e4e34531940,287,"emit" -code-creation,LoadIC,0x1e4e34531a60,284,"" -code-creation,LoadIC,0x1e4e34531a60,284,"" -code-creation,LoadIC,0x1e4e34531b80,134,"_ended" -code-creation,LoadIC,0x1e4e34531b80,134,"_ended" -code-creation,LoadIC,0x1e4e34531c20,134,"_queue" -code-creation,LoadIC,0x1e4e34531c20,134,"_queue" -code-creation,LoadIC,0x1e4e34531cc0,134,"_processing" -code-creation,LoadIC,0x1e4e34531cc0,134,"_processing" -code-creation,LoadIC,0x1e4e34531d60,138,"_chunkSize" -code-creation,LoadIC,0x1e4e34531d60,138,"_chunkSize" -code-creation,LoadIC,0x1e4e34531e00,138,"_offset" -code-creation,LoadIC,0x1e4e34531e00,138,"_offset" -code-creation,LoadIC,0x1e4e34531ea0,138,"_binding" -code-creation,LoadIC,0x1e4e34531ea0,138,"_binding" -code-creation,LoadIC,0x1e4e34531f40,138,"_buffer" -code-creation,LoadIC,0x1e4e34531f40,138,"_buffer" -code-creation,CallIC,0x1e4e34531fe0,492,"write" -code-creation,StoreIC,0x1e4e345321e0,185,"_processing" -code-creation,StoreIC,0x1e4e345321e0,185,"_processing" -code-creation,CallIC,0x1e4e345322a0,277,"on" -code-creation,StoreIC,0x1e4e345323c0,185,"_flush" -code-creation,StoreIC,0x1e4e345323c0,185,"_flush" -code-creation,CallIC,0x1e4e34532480,217,"_process" -code-creation,LoadIC,0x1e4e34532560,138,"_headerSent" -code-creation,LoadIC,0x1e4e34532560,138,"_headerSent" -code-creation,LoadIC,0x1e4e34532600,138,"statusCode" -code-creation,LoadIC,0x1e4e34532600,138,"statusCode" -code-creation,CallIC,0x1e4e345326a0,157,"writeHead" -code-creation,Stub,0x1e4e34532740,224,"CompareICStub" -code-creation,CallIC,0x1e4e34532820,462,"byteLength" -code-creation,CallIC,0x1e4e34532a00,200,"write" -code-creation,LoadIC,0x1e4e34532ae0,134,"connection" -code-creation,LoadIC,0x1e4e34532ae0,134,"connection" -code-creation,LoadIC,0x1e4e34532b80,134,"_goaway" -code-creation,LoadIC,0x1e4e34532b80,134,"_goaway" -code-creation,StoreIC,0x1e4e34532c20,191,"_sinkSize" -code-creation,StoreIC,0x1e4e34532c20,191,"_sinkSize" -code-creation,LoadIC,0x1e4e34532ce0,134,"_locked" -code-creation,LoadIC,0x1e4e34532ce0,134,"_locked" -code-creation,CallIC,0x1e4e34532d80,217,"_writeRaw" -code-creation,StoreIC,0x1e4e34532e60,189,"finished" -code-creation,StoreIC,0x1e4e34532e60,189,"finished" -code-creation,LoadIC,0x1e4e34532f20,134,"_events" -code-creation,LoadIC,0x1e4e34532f20,134,"_events" -code-creation,Stub,0x1e4e34532fc0,224,"CompareICStub" -code-creation,Stub,0x1e4e345330a0,224,"CompareICStub" -code-creation,Stub,0x1e4e34533180,224,"CompareICStub" -code-creation,StoreIC,0x1e4e34533260,191,"_httpMessage" -code-creation,StoreIC,0x1e4e34533260,191,"_httpMessage" -code-creation,StoreIC,0x1e4e34533320,189,"connection" -code-creation,StoreIC,0x1e4e34533320,189,"connection" -tick,0x10022b668,0x7fff5fbfe960,1,0x100013f1a,0,0x1e4e343bc447,0x1e4e343b67b1,0x1e4e34333e7a,0x1e4e343bbe5c,0x1e4e343bbccd,0x1e4e3453032e,0x1e4e343339e2,0x1e4e343e67b4,0x1e4e343339e2,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,StoreIC,0x1e4e345333e0,189,"socket" -code-creation,StoreIC,0x1e4e345333e0,189,"socket" -code-creation,CallIC,0x1e4e345334a0,187,"apply" -code-creation,KeyedLoadIC,0x1e4e34533560,158,"finish" -code-creation,KeyedLoadIC,0x1e4e34533560,158,"finish" -code-creation,LoadIC,0x1e4e34533600,134,"domain" -code-creation,LoadIC,0x1e4e34533600,134,"domain" -code-creation,CallIC,0x1e4e345336a0,247,"removeListener" -code-creation,KeyedLoadIC,0x1e4e345337a0,163,"finish" -code-creation,KeyedLoadIC,0x1e4e345337a0,163,"finish" -code-creation,Stub,0x1e4e34533860,224,"CompareICStub" -code-creation,CallIC,0x1e4e34533940,187,"apply" -code-creation,LoadIC,0x1e4e34533a00,134,"_framer" -code-creation,LoadIC,0x1e4e34533a00,134,"_framer" -code-creation,LoadIC,0x1e4e34533aa0,134,"version" -code-creation,LoadIC,0x1e4e34533aa0,134,"version" -code-creation,LoadIC,0x1e4e34533b40,137,"_sinkSize" -code-creation,LoadIC,0x1e4e34533b40,137,"_sinkSize" -code-creation,CallIC,0x1e4e34533be0,157,"min" -code-creation,CallIC,0x1e4e34533c80,187,"_lock" -code-creation,LoadIC,0x1e4e34533d40,137,"_lockBuffer" -code-creation,LoadIC,0x1e4e34533d40,137,"_lockBuffer" -code-creation,StoreIC,0x1e4e34533de0,185,"server" -code-creation,StoreIC,0x1e4e34533de0,185,"server" -code-creation,LoadIC,0x1e4e34533ea0,134,"_closedBy" -code-creation,LoadIC,0x1e4e34533ea0,134,"_closedBy" -code-creation,LoadIC,0x1e4e34533f40,134,"client" -code-creation,LoadIC,0x1e4e34533f40,134,"client" -code-creation,LoadIC,0x1e4e34533fe0,134,"server" -code-creation,LoadIC,0x1e4e34533fe0,134,"server" -code-creation,StoreIC,0x1e4e34534080,185,"_destroyed" -code-creation,StoreIC,0x1e4e34534080,185,"_destroyed" -code-creation,CallIC,0x1e4e34534140,189,"ToObject" -code-creation,Stub,0x1e4e34534200,367,"BinaryOpStub_MOD_Alloc_SMI" -code-creation,CallIC,0x1e4e34534380,192,"call" -code-creation,StoreIC,0x1e4e34534440,185,"complete" -code-creation,StoreIC,0x1e4e34534440,185,"complete" -code-creation,StoreIC,0x1e4e34534500,189,"_headers" -code-creation,StoreIC,0x1e4e34534500,189,"_headers" -code-creation,StoreIC,0x1e4e345345c0,189,"_url" -code-creation,StoreIC,0x1e4e345345c0,189,"_url" -code-creation,StoreIC,0x1e4e34534680,185,"readable" -code-creation,StoreIC,0x1e4e34534680,185,"readable" -code-creation,LoadIC,0x1e4e34534740,134,"_events" -code-creation,LoadIC,0x1e4e34534740,134,"_events" -code-creation,StoreIC,0x1e4e345347e0,185,"_endEmitted" -code-creation,StoreIC,0x1e4e345347e0,185,"_endEmitted" -code-creation,CallIC,0x1e4e345348a0,187,"_isGoaway" -code-creation,CallIC,0x1e4e34534960,257,"emit" -code-creation,CallIC,0x1e4e34534a80,189,"slice" -code-creation,KeyedLoadIC,0x1e4e34534b40,152,"" -code-creation,KeyedLoadMegamorphicIC,0x1e4e34534b40,152,"args_count: 0" -code-creation,StoreIC,0x1e4e34534be0,185,"onend" -code-creation,StoreIC,0x1e4e34534be0,185,"onend" -code-creation,StoreIC,0x1e4e34534ca0,185,"ondata" -code-creation,StoreIC,0x1e4e34534ca0,185,"ondata" -code-creation,StoreIC,0x1e4e34534d60,191,"parser" -code-creation,StoreIC,0x1e4e34534d60,191,"parser" -code-creation,StoreIC,0x1e4e34534e20,189,"socket" -code-creation,StoreIC,0x1e4e34534e20,189,"socket" -code-creation,StoreIC,0x1e4e34534ee0,189,"incoming" -code-creation,StoreIC,0x1e4e34534ee0,189,"incoming" -code-creation,LazyCompile,0x1e4e34534fa0,312,"exports.FreeList.free freelist.js:38",0x140cf21ccf50,~ -code-creation,CallIC,0x1e4e345350e0,287,"emit" -code-creation,CallIC,0x1e4e34535200,492,"write" -code-creation,StoreIC,0x1e4e34535400,189,"_offset" -code-creation,StoreIC,0x1e4e34535400,189,"_offset" -code-creation,LoadIC,0x1e4e345354c0,134,"domain" -code-creation,LoadIC,0x1e4e345354c0,134,"domain" -code-creation,CallIC,0x1e4e34535560,492,"write" -code-creation,StoreIC,0x1e4e34535760,189,"buffer" -code-creation,StoreIC,0x1e4e34535760,189,"buffer" -tick,0x1002505e6,0x7fff5fbfebe0,0,0x101009410,0,0x1e4e34399ce7,0x1e4e34399744 -code-creation,CallIC,0x1e4e34535820,277,"removeAllListeners" -code-creation,CallIC,0x1e4e34535940,200,"copy" -code-creation,CallIC,0x1e4e34535a20,157,"parseHeaders" -code-creation,StoreIC,0x1e4e34535ac0,226,"headers" -code-creation,StoreIC,0x1e4e34535ac0,226,"headers" -code-creation,LoadIC,0x1e4e34535bc0,138,"headers" -code-creation,LoadIC,0x1e4e34535bc0,138,"headers" -code-creation,StoreIC,0x1e4e34535c60,304,"url" -code-creation,StoreIC,0x1e4e34535c60,304,"url" -code-creation,CallIC,0x1e4e34535da0,257,"emit" -code-creation,LoadIC,0x1e4e34535ec0,134,"type" -code-creation,LoadIC,0x1e4e34535ec0,134,"type" -code-creation,LoadIC,0x1e4e34535f60,134,"streamsCount" -code-creation,LoadIC,0x1e4e34535f60,134,"streamsCount" -code-creation,LoadIC,0x1e4e34536000,134,"streams" -code-creation,LoadIC,0x1e4e34536000,134,"streams" -code-creation,LoadIC,0x1e4e345360a0,134,"id" -code-creation,LoadIC,0x1e4e345360a0,134,"id" -code-creation,StoreIC,0x1e4e34536140,390,"domain" -code-creation,StoreIC,0x1e4e34536140,390,"domain" -code-creation,StoreIC,0x1e4e345362e0,390,"_events" -code-creation,StoreIC,0x1e4e345362e0,390,"_events" -code-creation,StoreIC,0x1e4e34536480,390,"_maxListeners" -code-creation,StoreIC,0x1e4e34536480,390,"_maxListeners" -code-creation,StoreIC,0x1e4e34536620,390,"connection" -code-creation,StoreIC,0x1e4e34536620,390,"connection" -code-creation,LoadIC,0x1e4e345367c0,137,"socket" -code-creation,LoadIC,0x1e4e345367c0,137,"socket" -code-creation,StoreIC,0x1e4e34536860,390,"socket" -code-creation,StoreIC,0x1e4e34536860,390,"socket" -code-creation,LoadIC,0x1e4e34536a00,134,"encrypted" -code-creation,LoadIC,0x1e4e34536a00,134,"encrypted" -code-creation,StoreIC,0x1e4e34536aa0,390,"encrypted" -code-creation,StoreIC,0x1e4e34536aa0,390,"encrypted" -code-creation,LoadIC,0x1e4e34536c40,134,"_framer" -code-creation,LoadIC,0x1e4e34536c40,134,"_framer" -code-creation,StoreIC,0x1e4e34536ce0,390,"_framer" -code-creation,StoreIC,0x1e4e34536ce0,390,"_framer" -code-creation,StoreIC,0x1e4e34536e80,390,"_initialized" -code-creation,StoreIC,0x1e4e34536e80,390,"_initialized" -code-creation,StoreIC,0x1e4e34537020,390,"onend" -code-creation,StoreIC,0x1e4e34537020,390,"onend" -code-creation,StoreIC,0x1e4e345371c0,390,"ondata" -code-creation,StoreIC,0x1e4e345371c0,390,"ondata" -code-creation,StoreIC,0x1e4e34537360,390,"_rstCode" -code-creation,StoreIC,0x1e4e34537360,390,"_rstCode" -code-creation,StoreIC,0x1e4e34537500,390,"_destroyed" -code-creation,StoreIC,0x1e4e34537500,390,"_destroyed" -code-creation,StoreIC,0x1e4e345376a0,390,"_closedBy" -code-creation,StoreIC,0x1e4e345376a0,390,"_closedBy" -code-creation,StoreIC,0x1e4e34537840,390,"_locked" -code-creation,StoreIC,0x1e4e34537840,390,"_locked" -code-creation,StoreIC,0x1e4e345379e0,396,"_lockBuffer" -code-creation,StoreIC,0x1e4e345379e0,396,"_lockBuffer" -code-creation,StoreIC,0x1e4e34537b80,396,"id" -code-creation,StoreIC,0x1e4e34537b80,396,"id" -code-creation,LoadIC,0x1e4e34537d20,134,"version" -code-creation,LoadIC,0x1e4e34537d20,134,"version" -code-creation,StoreIC,0x1e4e34537dc0,396,"version" -code-creation,StoreIC,0x1e4e34537dc0,396,"version" -code-creation,LoadIC,0x1e4e34537f60,134,"priority" -code-creation,LoadIC,0x1e4e34537f60,134,"priority" -code-creation,StoreIC,0x1e4e34538000,396,"priority" -code-creation,StoreIC,0x1e4e34538000,396,"priority" -code-creation,StoreIC,0x1e4e345381a0,396,"pushes" -code-creation,StoreIC,0x1e4e345381a0,396,"pushes" -code-creation,LoadIC,0x1e4e34538340,137,"sinkSize" -code-creation,LoadIC,0x1e4e34538340,137,"sinkSize" -code-creation,StoreIC,0x1e4e345383e0,396,"_sinkSize" -code-creation,StoreIC,0x1e4e345383e0,396,"_sinkSize" -code-creation,StoreIC,0x1e4e34538580,396,"_initialSinkSize" -code-creation,StoreIC,0x1e4e34538580,396,"_initialSinkSize" -code-creation,StoreIC,0x1e4e34538720,396,"_sinkBuffer" -code-creation,StoreIC,0x1e4e34538720,396,"_sinkBuffer" -code-creation,LoadIC,0x1e4e345388c0,134,"windowSize" -code-creation,LoadIC,0x1e4e345388c0,134,"windowSize" -code-creation,StoreIC,0x1e4e34538960,396,"_initialWindowSize" -code-creation,StoreIC,0x1e4e34538960,396,"_initialWindowSize" -code-creation,StoreIC,0x1e4e34538b00,396,"_windowSize" -code-creation,StoreIC,0x1e4e34538b00,396,"_windowSize" -code-creation,LoadIC,0x1e4e34538ca0,134,"_deflate" -code-creation,LoadIC,0x1e4e34538ca0,134,"_deflate" -code-creation,StoreIC,0x1e4e34538d40,396,"_deflate" -code-creation,StoreIC,0x1e4e34538d40,396,"_deflate" -code-creation,LoadIC,0x1e4e34538ee0,134,"_inflate" -code-creation,LoadIC,0x1e4e34538ee0,134,"_inflate" -code-creation,StoreIC,0x1e4e34538f80,396,"_inflate" -code-creation,StoreIC,0x1e4e34538f80,396,"_inflate" -code-creation,LoadIC,0x1e4e34539120,138,"headers" -code-creation,LoadIC,0x1e4e34539120,138,"headers" -code-creation,StoreIC,0x1e4e345391c0,396,"headers" -code-creation,StoreIC,0x1e4e345391c0,396,"headers" -code-creation,LoadIC,0x1e4e34539360,138,"url" -code-creation,LoadIC,0x1e4e34539360,138,"url" -code-creation,StoreIC,0x1e4e34539400,396,"url" -code-creation,StoreIC,0x1e4e34539400,396,"url" -code-creation,StoreIC,0x1e4e345395a0,396,"_frame" -code-creation,StoreIC,0x1e4e345395a0,396,"_frame" -code-creation,StoreIC,0x1e4e34539740,396,"writable" -code-creation,StoreIC,0x1e4e34539740,396,"writable" -code-creation,StoreIC,0x1e4e345398e0,396,"readable" -code-creation,StoreIC,0x1e4e345398e0,396,"readable" -code-creation,CallIC,0x1e4e34539a80,247,"once" -code-creation,LoadIC,0x1e4e34539b80,138,"maxStreams" -code-creation,LoadIC,0x1e4e34539b80,138,"maxStreams" -code-creation,CallIC,0x1e4e34539c20,227,"emit" -code-creation,CallIC,0x1e4e34539d20,247,"removeListener" -code-creation,CallIC,0x1e4e34539e20,187,"setTimeout" -code-creation,CallIC,0x1e4e34539ee0,187,"alloc" -code-creation,LoadIC,0x1e4e34539fa0,134,"list" -code-creation,LoadIC,0x1e4e34539fa0,134,"list" -code-creation,LoadIC,0x1e4e3453a040,138,"REQUEST" -code-creation,LoadIC,0x1e4e3453a040,138,"REQUEST" -code-creation,CallIC,0x1e4e3453a0e0,492,"reinitialize" -tick,0x7fff911daa29,0x7fff5fbfe1a0,0,0x7fff5fbfe200,0,0x1e4e343b70b6,0x1e4e343339a7,0x1e4e343e2ab8,0x1e4e343339a7,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3453a2e0,396,"parser" -code-creation,StoreIC,0x1e4e3453a2e0,396,"parser" -code-creation,LoadIC,0x1e4e3453a480,224,"" -code-creation,LoadIC,0x1e4e3453a480,224,"" -code-creation,StoreIC,0x1e4e3453a560,189,"maxHeaderPairs" -code-creation,StoreIC,0x1e4e3453a560,189,"maxHeaderPairs" -code-creation,CallIC,0x1e4e3453a620,247,"addListener" -code-creation,StoreIC,0x1e4e3453a720,189,"onIncoming" -code-creation,StoreIC,0x1e4e3453a720,189,"onIncoming" -code-creation,CallIC,0x1e4e3453a7e0,187,"_init" -code-creation,LoadIC,0x1e4e3453a8a0,137,"headers" -code-creation,LoadIC,0x1e4e3453a8a0,137,"headers" -code-creation,LoadIC,0x1e4e3453a940,137,"url" -code-creation,LoadIC,0x1e4e3453a940,137,"url" -code-creation,CallIC,0x1e4e3453a9e0,157,"keys" -code-creation,CallIC,0x1e4e3453aa80,200,"forEach" -code-creation,CallIC,0x1e4e3453ab60,182,"push" -code-creation,CallIC,0x1e4e3453ac20,187,"join" -code-creation,LoadIC,0x1e4e3453ace0,147,"ConvertToString" -code-creation,LoadIC,0x1e4e3453ace0,147,"ConvertToString" -code-creation,CallIC,0x1e4e3453ad80,190,"Join" -code-creation,LoadIC,0x1e4e3453ae40,147,"visited_arrays" -code-creation,LoadIC,0x1e4e3453ae40,147,"visited_arrays" -code-creation,CallIC,0x1e4e3453aee0,190,"UseSparseVariant" -code-creation,CallIC,0x1e4e3453afa0,187,"_recv" -code-creation,LoadIC,0x1e4e3453b060,134,"_framer" -code-creation,LoadIC,0x1e4e3453b060,134,"_framer" -code-creation,LoadIC,0x1e4e3453b100,134,"_initialized" -code-creation,LoadIC,0x1e4e3453b100,134,"_initialized" -code-creation,LoadIC,0x1e4e3453b1a0,157,"process" -code-creation,LoadIC,0x1e4e3453b1a0,157,"process" -code-creation,CallIC,0x1e4e3453b240,157,"nextTick" -code-creation,LoadIC,0x1e4e3453b2e0,134,"fin" -code-creation,LoadIC,0x1e4e3453b2e0,134,"fin" -code-creation,LoadIC,0x1e4e3453b380,134,"_closedBy" -code-creation,LoadIC,0x1e4e3453b380,134,"_closedBy" -code-creation,CallIC,0x1e4e3453b420,187,"_handleClose" -code-creation,LoadIC,0x1e4e3453b4e0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3453b4e0,138,"lockBuffer" -code-creation,CallIC,0x1e4e3453b580,287,"emit" -code-creation,CallIC,0x1e4e3453b6a0,230,"write" -code-creation,CallIC,0x1e4e3453b7a0,187,"_puller" -code-creation,CallIC,0x1e4e3453b860,492,"clearIn" -code-creation,LoadIC,0x1e4e3453ba60,134,"writable" -code-creation,LoadIC,0x1e4e3453ba60,134,"writable" -code-creation,CallIC,0x1e4e3453bb00,200,"write" -code-creation,LoadIC,0x1e4e3453bbe0,138,"_idleTimeout" -code-creation,LoadIC,0x1e4e3453bbe0,138,"_idleTimeout" -code-creation,StoreIC,0x1e4e3453bc80,189,"_idleStart" -code-creation,StoreIC,0x1e4e3453bc80,189,"_idleStart" -code-creation,LoadIC,0x1e4e3453bd40,138,"_idleNext" -code-creation,LoadIC,0x1e4e3453bd40,138,"_idleNext" -code-creation,LoadIC,0x1e4e3453bde0,138,"_idlePrev" -code-creation,LoadIC,0x1e4e3453bde0,138,"_idlePrev" -code-creation,StoreIC,0x1e4e3453be80,189,"_idleNext" -code-creation,StoreIC,0x1e4e3453be80,189,"_idleNext" -code-creation,StoreIC,0x1e4e3453bf40,189,"_idlePrev" -code-creation,StoreIC,0x1e4e3453bf40,189,"_idlePrev" -code-creation,LoadIC,0x1e4e3453c000,134,"_handle" -code-creation,LoadIC,0x1e4e3453c000,134,"_handle" -code-creation,LoadIC,0x1e4e3453c0a0,134,"_pendingWriteReqs" -code-creation,LoadIC,0x1e4e3453c0a0,134,"_pendingWriteReqs" -code-creation,StoreIC,0x1e4e3453c140,185,"_pendingWriteReqs" -code-creation,StoreIC,0x1e4e3453c140,185,"_pendingWriteReqs" -code-creation,LoadIC,0x1e4e3453c200,134,"_bytesDispatched" -code-creation,LoadIC,0x1e4e3453c200,134,"_bytesDispatched" -code-creation,StoreIC,0x1e4e3453c2a0,185,"_bytesDispatched" -code-creation,StoreIC,0x1e4e3453c2a0,185,"_bytesDispatched" -code-creation,LazyCompile,0x1e4e3453c360,296,"ok assert.js:121",0xe6623688f0,~ -tick,0x1003660b0,0x7fff5fbfe3e0,0,0x10280b2f0,2,0x1e4e343f194a,0x1e4e343f383a,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,Stub,0x1e4e3453c4a0,244,"CallFunctionStub_Args5" -code-creation,LazyCompile,0x1e4e3453c5a0,381,"ok assert.js:121",0xe6623688f0,* -code-creation,StoreIC,0x1e4e3453c720,185,"_tickListener" -code-creation,StoreIC,0x1e4e3453c720,185,"_tickListener" -code-creation,CallIC,0x1e4e3453c7e0,247,"on" -code-creation,LoadIC,0x1e4e3453c8e0,137,"id" -code-creation,LoadIC,0x1e4e3453c8e0,137,"id" -code-creation,CallIC,0x1e4e3453c980,187,"dataFrame" -code-creation,CallIC,0x1e4e3453ca40,187,"writeUInt8" -code-creation,LoadIC,0x1e4e3453cb00,137,"scheduler" -code-creation,LoadIC,0x1e4e3453cb00,137,"scheduler" -code-creation,CallIC,0x1e4e3453cba0,187,"schedule" -code-creation,LoadIC,0x1e4e3453cc60,134,"priorities" -code-creation,LoadIC,0x1e4e3453cc60,134,"priorities" -code-creation,LoadIC,0x1e4e3453cd00,137,"priority" -code-creation,LoadIC,0x1e4e3453cd00,137,"priority" -code-creation,CallIC,0x1e4e3453cda0,187,"tick" -code-creation,LoadIC,0x1e4e3453ce60,134,"_tickListener" -code-creation,LoadIC,0x1e4e3453ce60,134,"_tickListener" -code-creation,CallIC,0x1e4e3453cf00,197,"destroy" -code-creation,LoadIC,0x1e4e3453cfe0,134,"_destroyed" -code-creation,LoadIC,0x1e4e3453cfe0,134,"_destroyed" -code-creation,CallIC,0x1e4e3453d080,187,"_unlock" -code-creation,LoadIC,0x1e4e3453d140,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3453d140,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3453d1e0,134,"destroyed" -code-creation,LoadIC,0x1e4e3453d1e0,134,"destroyed" -code-creation,LoadIC,0x1e4e3453d280,134,"_events" -code-creation,LoadIC,0x1e4e3453d280,134,"_events" -code-creation,LoadIC,0x1e4e3453d320,134,"_flags" -code-creation,LoadIC,0x1e4e3453d320,134,"_flags" -code-creation,CallIC,0x1e4e3453d3c0,257,"emit" -code-creation,LoadIC,0x1e4e3453d4e0,134,"ondata" -code-creation,LoadIC,0x1e4e3453d4e0,134,"ondata" -code-creation,CallIC,0x1e4e3453d580,201,"ondata" -code-creation,CallIC,0x1e4e3453d660,492,"execute" -code-creation,LoadIC,0x1e4e3453d860,138,"headers" -code-creation,LoadIC,0x1e4e3453d860,138,"headers" -code-creation,LoadIC,0x1e4e3453d900,138,"url" -code-creation,LoadIC,0x1e4e3453d900,138,"url" -code-creation,LoadIC,0x1e4e3453d9a0,138,"socket" -code-creation,LoadIC,0x1e4e3453d9a0,138,"socket" -code-creation,StoreIC,0x1e4e3453da40,390,"domain" -code-creation,StoreIC,0x1e4e3453da40,390,"domain" -code-creation,StoreIC,0x1e4e3453dbe0,390,"_events" -code-creation,StoreIC,0x1e4e3453dbe0,390,"_events" -code-creation,StoreIC,0x1e4e3453dd80,390,"_maxListeners" -code-creation,StoreIC,0x1e4e3453dd80,390,"_maxListeners" -code-creation,StoreIC,0x1e4e3453df20,390,"socket" -code-creation,StoreIC,0x1e4e3453df20,390,"socket" -code-creation,StoreIC,0x1e4e3453e0c0,390,"connection" -code-creation,StoreIC,0x1e4e3453e0c0,390,"connection" -code-creation,StoreIC,0x1e4e3453e260,390,"httpVersion" -code-creation,StoreIC,0x1e4e3453e260,390,"httpVersion" -code-creation,StoreIC,0x1e4e3453e400,390,"complete" -code-creation,StoreIC,0x1e4e3453e400,390,"complete" -code-creation,StoreIC,0x1e4e3453e5a0,390,"headers" -code-creation,StoreIC,0x1e4e3453e5a0,390,"headers" -code-creation,StoreIC,0x1e4e3453e740,390,"trailers" -code-creation,StoreIC,0x1e4e3453e740,390,"trailers" -code-creation,StoreIC,0x1e4e3453e8e0,390,"readable" -code-creation,StoreIC,0x1e4e3453e8e0,390,"readable" -code-creation,StoreIC,0x1e4e3453ea80,390,"_paused" -code-creation,StoreIC,0x1e4e3453ea80,390,"_paused" -code-creation,StoreIC,0x1e4e3453ec20,390,"_pendings" -code-creation,StoreIC,0x1e4e3453ec20,390,"_pendings" -code-creation,StoreIC,0x1e4e3453edc0,390,"_endEmitted" -code-creation,StoreIC,0x1e4e3453edc0,390,"_endEmitted" -code-creation,StoreIC,0x1e4e3453ef60,390,"url" -code-creation,StoreIC,0x1e4e3453ef60,390,"url" -code-creation,StoreIC,0x1e4e3453f100,396,"method" -code-creation,StoreIC,0x1e4e3453f100,396,"method" -code-creation,StoreIC,0x1e4e3453f2a0,396,"statusCode" -code-creation,StoreIC,0x1e4e3453f2a0,396,"statusCode" -code-creation,LoadIC,0x1e4e3453f440,134,"socket" -code-creation,LoadIC,0x1e4e3453f440,134,"socket" -code-creation,StoreIC,0x1e4e3453f4e0,396,"client" -code-creation,StoreIC,0x1e4e3453f4e0,396,"client" -code-creation,LoadIC,0x1e4e3453f680,138,"incoming" -code-creation,LoadIC,0x1e4e3453f680,138,"incoming" -code-creation,LoadIC,0x1e4e3453f720,138,"versionMajor" -code-creation,LoadIC,0x1e4e3453f720,138,"versionMajor" -code-creation,StoreIC,0x1e4e3453f7c0,396,"httpVersionMajor" -code-creation,StoreIC,0x1e4e3453f7c0,396,"httpVersionMajor" -code-creation,LoadIC,0x1e4e3453f960,138,"versionMinor" -code-creation,LoadIC,0x1e4e3453f960,138,"versionMinor" -code-creation,StoreIC,0x1e4e3453fa00,396,"httpVersionMinor" -code-creation,StoreIC,0x1e4e3453fa00,396,"httpVersionMinor" -code-creation,LoadIC,0x1e4e3453fba0,138,"maxHeaderPairs" -code-creation,LoadIC,0x1e4e3453fba0,138,"maxHeaderPairs" -code-creation,LoadIC,0x1e4e3453fc40,138,"method" -code-creation,LoadIC,0x1e4e3453fc40,138,"method" -code-creation,LoadIC,0x1e4e3453fce0,138,"upgrade" -code-creation,LoadIC,0x1e4e3453fce0,138,"upgrade" -code-creation,StoreIC,0x1e4e3453fd80,396,"upgrade" -code-creation,StoreIC,0x1e4e3453fd80,396,"upgrade" -code-creation,LoadIC,0x1e4e3453ff20,138,"shouldKeepAlive" -code-creation,LoadIC,0x1e4e3453ff20,138,"shouldKeepAlive" -code-creation,CallIC,0x1e4e3453ffc0,205,"onIncoming" -code-creation,CallIC,0x1e4e345400a0,192,"call" -tick,0x100253c3e,0x7fff5fbfed98,1,0x100013f1a,0,0x1e4e343b2409,0x1e4e343b264c,0x1e4e343b699a,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,StoreIC,0x1e4e34540160,420,"domain" -code-creation,StoreIC,0x1e4e34540160,420,"domain" -code-creation,StoreIC,0x1e4e34540320,420,"_events" -code-creation,StoreIC,0x1e4e34540320,420,"_events" -code-creation,StoreIC,0x1e4e345404e0,420,"_maxListeners" -code-creation,StoreIC,0x1e4e345404e0,420,"_maxListeners" -code-creation,StoreIC,0x1e4e345406a0,420,"output" -code-creation,StoreIC,0x1e4e345406a0,420,"output" -code-creation,StoreIC,0x1e4e34540860,420,"outputEncodings" -code-creation,StoreIC,0x1e4e34540860,420,"outputEncodings" -code-creation,StoreIC,0x1e4e34540a20,420,"writable" -code-creation,StoreIC,0x1e4e34540a20,420,"writable" -code-creation,StoreIC,0x1e4e34540be0,420,"_last" -code-creation,StoreIC,0x1e4e34540be0,420,"_last" -code-creation,StoreIC,0x1e4e34540da0,420,"chunkedEncoding" -code-creation,StoreIC,0x1e4e34540da0,420,"chunkedEncoding" -code-creation,StoreIC,0x1e4e34540f60,420,"shouldKeepAlive" -code-creation,StoreIC,0x1e4e34540f60,420,"shouldKeepAlive" -code-creation,StoreIC,0x1e4e34541120,420,"useChunkedEncodingByDefault" -code-creation,StoreIC,0x1e4e34541120,420,"useChunkedEncodingByDefault" -code-creation,StoreIC,0x1e4e345412e0,420,"sendDate" -code-creation,StoreIC,0x1e4e345412e0,420,"sendDate" -code-creation,StoreIC,0x1e4e345414a0,420,"_hasBody" -code-creation,StoreIC,0x1e4e345414a0,420,"_hasBody" -code-creation,StoreIC,0x1e4e34541660,346,"_trailer" -code-creation,StoreIC,0x1e4e34541660,346,"_trailer" -code-creation,StoreIC,0x1e4e345417c0,424,"finished" -code-creation,StoreIC,0x1e4e345417c0,424,"finished" -code-creation,LoadIC,0x1e4e34541980,137,"method" -code-creation,LoadIC,0x1e4e34541980,137,"method" -code-creation,LoadIC,0x1e4e34541a20,137,"httpVersionMajor" -code-creation,LoadIC,0x1e4e34541a20,137,"httpVersionMajor" -code-creation,LoadIC,0x1e4e34541ac0,137,"httpVersionMinor" -code-creation,LoadIC,0x1e4e34541ac0,137,"httpVersionMinor" -code-creation,LoadIC,0x1e4e34541b60,254,"" -code-creation,LoadIC,0x1e4e34541b60,254,"" -code-creation,CallIC,0x1e4e34541c60,187,"assignSocket" -code-creation,StoreIC,0x1e4e34541d20,396,"_httpMessage" -code-creation,StoreIC,0x1e4e34541d20,396,"_httpMessage" -code-creation,CallIC,0x1e4e34541ec0,247,"on" -code-creation,StoreIC,0x1e4e34541fc0,424,"socket" -code-creation,StoreIC,0x1e4e34541fc0,424,"socket" -code-creation,StoreIC,0x1e4e34542180,346,"connection" -code-creation,StoreIC,0x1e4e34542180,346,"connection" -code-creation,CallIC,0x1e4e345422e0,217,"_flush" -code-creation,LoadIC,0x1e4e345423c0,138,"socket" -code-creation,LoadIC,0x1e4e345423c0,138,"socket" -code-creation,LoadIC,0x1e4e34542460,134,"output" -code-creation,LoadIC,0x1e4e34542460,134,"output" -code-creation,LoadIC,0x1e4e34542500,138,"finished" -code-creation,LoadIC,0x1e4e34542500,138,"finished" -code-creation,CallIC,0x1e4e345425a0,277,"on" -code-creation,LoadIC,0x1e4e345426c0,134,"headers" -code-creation,LoadIC,0x1e4e345426c0,134,"headers" -code-creation,LoadIC,0x1e4e34542760,138,"response" -code-creation,LoadIC,0x1e4e34542760,138,"response" -code-creation,LoadIC,0x1e4e34542800,140,"_renderHeaders" -code-creation,LoadIC,0x1e4e34542800,140,"_renderHeaders" -code-creation,LoadIC,0x1e4e345428a0,140,"writeHead" -code-creation,LoadIC,0x1e4e345428a0,140,"writeHead" -code-creation,LoadIC,0x1e4e34542940,140,"push" -code-creation,LoadIC,0x1e4e34542940,140,"push" -code-creation,LoadIC,0x1e4e345429e0,134,"socket" -code-creation,LoadIC,0x1e4e345429e0,134,"socket" -code-creation,StoreIC,0x1e4e34542a80,396,"streamID" -code-creation,StoreIC,0x1e4e34542a80,396,"streamID" -code-creation,StoreIC,0x1e4e34542c20,424,"streamID" -code-creation,StoreIC,0x1e4e34542c20,424,"streamID" -code-creation,LoadIC,0x1e4e34542de0,134,"socket" -code-creation,LoadIC,0x1e4e34542de0,134,"socket" -code-creation,LoadIC,0x1e4e34542e80,137,"version" -code-creation,LoadIC,0x1e4e34542e80,137,"version" -code-creation,StoreIC,0x1e4e34542f20,396,"spdyVersion" -code-creation,StoreIC,0x1e4e34542f20,396,"spdyVersion" -code-creation,StoreIC,0x1e4e345430c0,424,"spdyVersion" -code-creation,StoreIC,0x1e4e345430c0,424,"spdyVersion" -code-creation,StoreIC,0x1e4e34543280,316,"isSpdy" -code-creation,StoreIC,0x1e4e34543280,316,"isSpdy" -code-creation,StoreIC,0x1e4e345433c0,346,"isSpdy" -code-creation,StoreIC,0x1e4e345433c0,346,"isSpdy" -code-creation,CallIC,0x1e4e34543520,277,"once" -code-creation,CallIC,0x1e4e34543640,317,"emit" -code-creation,CallIC,0x1e4e34543780,170,"writeHead" -code-creation,LoadIC,0x1e4e34543840,284,"" -code-creation,LoadIC,0x1e4e34543840,284,"" -code-creation,StoreIC,0x1e4e34543960,424,"_headerSent" -code-creation,StoreIC,0x1e4e34543960,424,"_headerSent" -code-creation,LoadIC,0x1e4e34543b20,138,"STATUS_CODES" -code-creation,LoadIC,0x1e4e34543b20,138,"STATUS_CODES" -code-creation,StoreIC,0x1e4e34543bc0,304,"statusCode" -code-creation,StoreIC,0x1e4e34543bc0,304,"statusCode" -code-creation,LoadIC,0x1e4e34543d00,284,"" -code-creation,LoadIC,0x1e4e34543d00,284,"" -code-creation,StoreIC,0x1e4e34543e20,346,"_header" -code-creation,StoreIC,0x1e4e34543e20,346,"_header" -code-creation,LoadIC,0x1e4e34543f80,138,"socket" -code-creation,LoadIC,0x1e4e34543f80,138,"socket" -code-creation,CallIC,0x1e4e34544020,187,"replyFrame" -code-creation,CallIC,0x1e4e345440e0,200,"map" -code-creation,CallIC,0x1e4e345441c0,200,"filter" -code-creation,CallIC,0x1e4e345442a0,190,"ToUint32" -code-creation,CallMiss,0x1e4e34544360,241,"args_count: 6" -code-creation,CallIC,0x1e4e34544460,187,"_synFrame" -code-creation,CallIC,0x1e4e34544520,201,"deflate" -code-creation,CallIC,0x1e4e34544600,230,"write" -code-creation,CallIC,0x1e4e34544700,492,"write" -code-creation,StoreIC,0x1e4e34544900,189,"buffer" -code-creation,StoreIC,0x1e4e34544900,189,"buffer" -tick,0x10022b2c1,0x7fff5fbfe870,1,0x100013f1a,0,0x1e4e34399ccd,0x1e4e34398b06,0x1e4e34394e85,0x1e4e34394f93,0x1e4e343aab0d,0x1e4e343aae01,0x1e4e343af856,0x1e4e343e7e3b,0x1e4e343afe29,0x1e4e3453030c,0x1e4e343339e2,0x1e4e343e67b4,0x1e4e343339e2,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,StoreIC,0x1e4e345449c0,189,"callback" -code-creation,StoreIC,0x1e4e345449c0,189,"callback" -code-creation,CallIC,0x1e4e34544a80,277,"once" -code-creation,CallIC,0x1e4e34544ba0,217,"flush" -code-creation,CallIC,0x1e4e34544c80,230,"end" -code-creation,LoadIC,0x1e4e34544d80,138,"finished" -code-creation,LoadIC,0x1e4e34544d80,138,"finished" -code-creation,LoadIC,0x1e4e34544e20,138,"_header" -code-creation,LoadIC,0x1e4e34544e20,138,"_header" -code-creation,CallIC,0x1e4e34544ec0,187,"_implicitHeader" -code-creation,LoadIC,0x1e4e34544f80,134,"_hasBody" -code-creation,LoadIC,0x1e4e34544f80,134,"_hasBody" -code-creation,CallIC,0x1e4e34545020,217,"write" -code-creation,LoadIC,0x1e4e34545100,134,"chunkedEncoding" -code-creation,LoadIC,0x1e4e34545100,134,"chunkedEncoding" -code-creation,CallIC,0x1e4e345451a0,217,"_send" -code-creation,LoadIC,0x1e4e34545280,138,"connection" -code-creation,LoadIC,0x1e4e34545280,138,"connection" -code-creation,LoadIC,0x1e4e34545320,137,"_httpMessage" -code-creation,LoadIC,0x1e4e34545320,137,"_httpMessage" -code-creation,LoadIC,0x1e4e345453c0,137,"writable" -code-creation,LoadIC,0x1e4e345453c0,137,"writable" -code-creation,LoadIC,0x1e4e34545460,134,"output" -code-creation,LoadIC,0x1e4e34545460,134,"output" -code-creation,CallIC,0x1e4e34545500,200,"write" -code-creation,CallIC,0x1e4e345455e0,187,"_write" -code-creation,CallIC,0x1e4e345456a0,187,"_writeData" -code-creation,CallIC,0x1e4e34545760,230,"_send" -code-creation,CallIC,0x1e4e34545860,217,"_finish" -code-creation,CallIC,0x1e4e34545940,287,"emit" -code-creation,LoadIC,0x1e4e34545a60,134,"domain" -code-creation,LoadIC,0x1e4e34545a60,134,"domain" -code-creation,CallIC,0x1e4e34545b00,187,"detachSocket" -code-creation,LoadIC,0x1e4e34545bc0,134,"_last" -code-creation,LoadIC,0x1e4e34545bc0,134,"_last" -code-creation,LoadIC,0x1e4e34545c60,134,"connection" -code-creation,LoadIC,0x1e4e34545c60,134,"connection" -code-creation,CallIC,0x1e4e34545d00,197,"end" -code-creation,CallIC,0x1e4e34545de0,200,"_writeData" -code-creation,LoadIC,0x1e4e34545ec0,137,"_sinkBuffer" -code-creation,LoadIC,0x1e4e34545ec0,137,"_sinkBuffer" -code-creation,CallIC,0x1e4e34545f60,187,"_handleClose" -code-creation,CallIC,0x1e4e34546020,187,"close" -code-creation,LoadIC,0x1e4e345460e0,138,"_headers" -code-creation,LoadIC,0x1e4e345460e0,138,"_headers" -code-creation,StoreIC,0x1e4e34546180,189,"_headers" -code-creation,StoreIC,0x1e4e34546180,189,"_headers" -code-creation,StoreIC,0x1e4e34546240,189,"_url" -code-creation,StoreIC,0x1e4e34546240,189,"_url" -code-creation,LoadIC,0x1e4e34546300,137,"upgrade" -code-creation,LoadIC,0x1e4e34546300,137,"upgrade" -code-creation,LoadIC,0x1e4e345463a0,134,"_paused" -code-creation,LoadIC,0x1e4e345463a0,134,"_paused" -code-creation,LoadIC,0x1e4e34546440,134,"_pendings" -code-creation,LoadIC,0x1e4e34546440,134,"_pendings" -code-creation,CallIC,0x1e4e345464e0,187,"_emitEnd" -code-creation,LoadIC,0x1e4e345465a0,134,"_endEmitted" -code-creation,LoadIC,0x1e4e345465a0,134,"_endEmitted" -code-creation,CallIC,0x1e4e34546640,257,"emit" -code-creation,LoadIC,0x1e4e34546760,137,"readable" -code-creation,LoadIC,0x1e4e34546760,137,"readable" -code-creation,CallIC,0x1e4e34546800,187,"resume" -code-creation,LoadIC,0x1e4e345468c0,157,"Error" -code-creation,LoadIC,0x1e4e345468c0,157,"Error" -code-creation,LoadIC,0x1e4e34546960,134,"onend" -code-creation,LoadIC,0x1e4e34546960,134,"onend" -code-creation,CallIC,0x1e4e34546a00,198,"onend" -code-creation,CallIC,0x1e4e34546ae0,492,"finish" -code-creation,CallIC,0x1e4e34546ce0,257,"emit" -code-creation,Stub,0x1e4e34546e00,325,"ElementsTransitionAndStoreStub" -code-creation,KeyedStoreIC,0x1e4e34546f60,159,"" -code-creation,KeyedStoreMegamorphicIC,0x1e4e34546f60,159,"args_count: 0" -code-creation,CallIC,0x1e4e34547000,187,"free" -code-creation,LoadIC,0x1e4e345470c0,134,"max" -code-creation,LoadIC,0x1e4e345470c0,134,"max" -code-creation,LazyCompile,0x1e4e34547160,296,"coerce buffer.js:193",0xe662361b28,~ -code-creation,LazyCompile,0x1e4e345472a0,405,"coerce buffer.js:193",0xe662361b28,* -tick,0x1002608cc,0x7fff5fbfe910,0,0xcc6ac0600000015,0,0x1e4e343330ae,0x1e4e3438493a,0x1e4e343e44e9,0x1e4e343e29c9,0x1e4e343339a7,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,CallIC,0x1e4e34547440,277,"removeAllListeners" -code-creation,CallIC,0x1e4e34547560,187,"writeUInt16BE" -code-creation,CallIC,0x1e4e34547620,200,"write" -code-creation,CallIC,0x1e4e34547700,187,"_write" -code-creation,CallIC,0x1e4e345477c0,492,"copy" -code-creation,LoadIC,0x1e4e345479c0,140,"constructor" -code-creation,LoadIC,0x1e4e345479c0,140,"constructor" -code-creation,StoreIC,0x1e4e34547a60,256,"_headers" -code-creation,StoreIC,0x1e4e34547a60,256,"_headers" -code-creation,StoreIC,0x1e4e34547b60,334,"_url" -code-creation,StoreIC,0x1e4e34547b60,334,"_url" -code-creation,StoreIC,0x1e4e34547cc0,334,"socket" -code-creation,StoreIC,0x1e4e34547cc0,334,"socket" -code-creation,StoreIC,0x1e4e34547e20,256,"incoming" -code-creation,StoreIC,0x1e4e34547e20,256,"incoming" -code-creation,StoreIC,0x1e4e34547f20,334,"maxHeaderPairs" -code-creation,StoreIC,0x1e4e34547f20,334,"maxHeaderPairs" -code-creation,CallIC,0x1e4e34548080,257,"emit" -code-creation,LazyCompile,0x1e4e345481a0,268,"isBuffer buffer.js:287",0xe662363738,~ -code-creation,LazyCompile,0x1e4e345482c0,234,"isBuffer buffer.js:287",0xe662363738,* -code-creation,CallIC,0x1e4e345483c0,277,"removeListener" -code-creation,LoadIC,0x1e4e345484e0,138,"socket" -code-creation,LoadIC,0x1e4e345484e0,138,"socket" -code-creation,StoreIC,0x1e4e34548580,189,"incoming" -code-creation,StoreIC,0x1e4e34548580,189,"incoming" -code-creation,LoadIC,0x1e4e34548640,138,"incoming" -code-creation,LoadIC,0x1e4e34548640,138,"incoming" -code-creation,LoadIC,0x1e4e345486e0,138,"maxHeaderPairs" -code-creation,LoadIC,0x1e4e345486e0,138,"maxHeaderPairs" -tick,0x10025057f,0x7fff5fbfecd0,1,0x100013f1a,0,0x1e4e34334362,0x1e4e343bc267,0x1e4e343b6a9d,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LoadIC,0x1e4e34548780,138,"_headers" -code-creation,LoadIC,0x1e4e34548780,138,"_headers" -code-creation,StoreIC,0x1e4e34548820,189,"_headers" -code-creation,StoreIC,0x1e4e34548820,189,"_headers" -code-creation,StoreIC,0x1e4e345488e0,189,"_url" -code-creation,StoreIC,0x1e4e345488e0,189,"_url" -code-creation,StoreIC,0x1e4e345489a0,189,"onIncoming" -code-creation,StoreIC,0x1e4e345489a0,189,"onIncoming" -code-creation,StoreIC,0x1e4e34548a60,189,"socket" -code-creation,StoreIC,0x1e4e34548a60,189,"socket" -code-creation,LazyCompile,0x1e4e34548b20,2224,"Buffer buffer.js:204",0xe662361cd8,~ -code-creation,Function,0x1e4e345493e0,508,"isArrayIsh buffer.js:268",0xe662361dc8,~ -tick,0x100377ad0,0x7fff5fbfe4c8,0,0x10022230d,2,0x1e4e34343dc6,0x1e4e34399383 -code-creation,Stub,0x1e4e345495e0,1140,"RecordWriteStub" -code-creation,Stub,0x1e4e34549a60,2483,"RecordWriteStub" -code-creation,Stub,0x1e4e3454a420,238,"CallFunctionStub_Args0" -code-creation,Stub,0x1e4e3454a520,1146,"RecordWriteStub" -code-creation,Stub,0x1e4e3454a9a0,2500,"RecordWriteStub" -code-creation,Stub,0x1e4e3454b380,1140,"RecordWriteStub" -code-creation,Stub,0x1e4e3454b800,2488,"RecordWriteStub" -code-creation,Stub,0x1e4e3454c1c0,1164,"RecordWriteStub" -code-creation,Stub,0x1e4e3454c660,2542,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e3454d060,6855,"Buffer buffer.js:204",0xe662361cd8,* -tick,0x1000df544,0x7fff5fbfe860,0,0x100a14770,0,0x1e4e343f4f61,0x1e4e343f4659,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3454eb40,292,"ceil native math.js:79",0xe662331738,~ -code-creation,LazyCompile,0x1e4e3454ec80,361,"ceil native math.js:79",0xe662331738,* -code-creation,CallIC,0x1e4e3454ee00,492,"reinitialize" -code-creation,StoreIC,0x1e4e3454f000,189,"maxHeaderPairs" -code-creation,StoreIC,0x1e4e3454f000,189,"maxHeaderPairs" -code-creation,CallIC,0x1e4e3454f0c0,492,"execute" -code-creation,CallIC,0x1e4e3454f2c0,205,"onIncoming" -tick,0x1002e5158,0x7fff5fbfe970,1,0x100013f1a,0,0x1e4e34320ee7,0x1e4e34530a5a,0x1e4e343a98d8,0x1e4e343aadc0,0x1e4e343af856,0x1e4e343e7e3b,0x1e4e343afe29,0x1e4e3453030c,0x1e4e343339e2,0x1e4e343e67b4,0x1e4e343339e2,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3454f3a0,3060,"EventEmitter.emit events.js:54",0xe66235ffe8,~ -tick,0x1003171c4,0x7fff5fbfeaa0,0,0x5800000028,2,0x1e4e343e96cb,0x1e4e343b650b,0x1e4e343e412b,0x1e4e3432e78a -code-creation,Stub,0x1e4e3454ffa0,2542,"RecordWriteStub" -code-creation,Stub,0x1e4e345509a0,2498,"RecordWriteStub" -code-creation,Stub,0x1e4e34551380,369,"InstanceofStub_INLINE" -code-creation,LazyCompile,0x1e4e34551500,7306,"EventEmitter.emit events.js:54",0xe66235ffe8,* -code-creation,CallIC,0x1e4e345531a0,492,"finish" -code-creation,LazyCompile,0x1e4e345533a0,248,"Buffer.readUInt32BE buffer.js:666",0xe662364d98,~ -code-creation,LazyCompile,0x1e4e345534a0,270,"Buffer.readUInt32BE buffer.js:666",0xe662364d98,* -tick,0x100225e30,0x7fff5fbfe488,0,0x100220827,2,0x1e4e3452a47a,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345535c0,416,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,~ -code-creation,Stub,0x1e4e34553760,2542,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e34554160,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -code-creation,LazyCompile,0x1e4e34554540,488,"toLowerCase native string.js:739",0xe662323870,~ -tick,0x10024b700,0x7fff5fbfe3d8,0,0x10024b0f3,2,0x1e4e343427bb,0x1e4e345543de,0x1e4e3452a85a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34554740,726,"toLowerCase native string.js:739",0xe662323870,* -code-creation,CallIC,0x1e4e34554a20,492,"reinitialize" -code-creation,StoreIC,0x1e4e34554c20,334,"onIncoming" -code-creation,StoreIC,0x1e4e34554c20,334,"onIncoming" -code-creation,StoreIC,0x1e4e34554d80,364,"used" -code-creation,StoreIC,0x1e4e34554d80,364,"used" -code-creation,LazyCompile,0x1e4e34554f00,248,"isArray native array.js:1463",0xe6623156d0,~ -code-creation,LazyCompile,0x1e4e34555000,222,"isArray native array.js:1463",0xe6623156d0,* -tick,0x100393081,0x7fff5fbfeae0,0,0x7fff5fbfeb20,0,0x1e4e343210fa,0x1e4e3454dadf,0x1e4e343adcfb,0x1e4e343ad8f4,0x1e4e343ae9c7,0x1e4e343ae198,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345550e0,620,"Buffer.slice buffer.js:550",0xe662364268,~ -code-creation,LazyCompile,0x1e4e34555360,1034,"Buffer.slice buffer.js:550",0xe662364268,* -tick,0x10011b914,0x7fff5fbff310,0,0x101009400,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34555780,252,"Buffer.writeUInt32BE buffer.js:949",0xe662365d08,~ -code-creation,LazyCompile,0x1e4e34555880,278,"Buffer.writeUInt32BE buffer.js:949",0xe662365d08,* -tick,0x7fff911dbd0c,0x7fff5fbfec58,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345559a0,544,"isFinite native v8natives.js:103",0xe662328790,~ -code-creation,LazyCompile,0x1e4e34555bc0,672,"isFinite native v8natives.js:103",0xe662328790,* -tick,0x7fff9199e6fe,0x7fff5fbfe718,0,0x7fff9125a857,2,0x1e4e34342135,0x1e4e343a9553,0x1e4e3439b688,0x1e4e343a99dd,0x1e4e343aadc0,0x1e4e343af856,0x1e4e343e7e3b,0x1e4e343afe29,0x1e4e3453030c,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34555e60,588,"NonNumberToNumber native runtime.js:538",0xe662330070,~ -code-creation,LazyCompile,0x1e4e343a6780,588,"NonNumberToNumber native runtime.js:538",0xe662330070, -code-creation,LazyCompile,0x1e4e345560c0,436," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,~ -code-creation,LazyCompile,0x1e4e34556280,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -code-creation,LazyCompile,0x1e4e34556500,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -tick,0x1e4e34529466,0x7fff5fbfee18,0,0x1e4e343998b6,0,0x1e4e34398b06,0x1e4e34394e85,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345568e0,996,"readUInt32 buffer.js:633",0xe6623620f0,~ -code-creation,LazyCompile,0x1e4e34556ce0,1986,"readUInt32 buffer.js:633",0xe6623620f0,* -tick,0x1001446c3,0x7fff5fbfec70,0,0x1df0,0,0x1e4e343f41d8,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c163,0x7fff5fbfec40,0,0x7fff5fbfec80,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345574c0,1456,"Buffer.toString buffer.js:392",0xe662363d18,~ -tick,0x10021fbe6,0x7fff5fbfe400,0,0x0,2,0x1e4e3452a536,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34557a80,2555,"Buffer.toString buffer.js:392",0xe662363d18,* -tick,0x100175d10,0x7fff5fbff2f8,0,0x10011d4b9,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34558480,396,"lock /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:614",0x140cf21d40e8,~ -code-creation,LazyCompile,0x1e4e34558620,589,"lock /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:614",0x140cf21d40e8,* -code-creation,LazyCompile,0x1e4e34558880,380,"abortIncoming http.js:1659",0x140cf21844c8,~ -code-creation,LazyCompile,0x1e4e34558a00,400,"abortIncoming http.js:1659",0x140cf21844c8,* -tick,0x10025dccc,0x7fff5fbfea60,0,0x2e9dafd05949,0,0x1e4e34363372,0x1e4e343a9899,0x1e4e343aadc0,0x1e4e343af856,0x1e4e345587aa,0x1e4e343afe29,0x1e4e3453030c,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34558ba0,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -code-creation,LazyCompile,0x1e4e34558f80,1512,"EventEmitter.addListener events.js:138",0xe662360128,~ -tick,0x1001b4189,0x7fff5fbfd860,0,0x1,2,0x1e4e3433491d,0x1e4e343e4907,0x1e4e343e29c9,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,Stub,0x1e4e34559580,2513,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e34559f60,5108,"EventEmitter.addListener events.js:138",0xe662360128,* -code-creation,KeyedStoreIC,0x1e4e3455b360,245,"end" -code-creation,KeyedStoreIC,0x1e4e3455b360,245,"end" -code-creation,KeyedStoreIC,0x1e4e3455b460,323,"finish" -code-creation,KeyedStoreIC,0x1e4e3455b460,323,"finish" -code-creation,KeyedLoadIC,0x1e4e3455b5c0,158,"finish" -code-creation,KeyedLoadIC,0x1e4e3455b5c0,158,"finish" -code-creation,KeyedLoadIC,0x1e4e3455b660,160,"drain" -code-creation,KeyedLoadIC,0x1e4e3455b660,160,"drain" -code-creation,KeyedLoadIC,0x1e4e3455b700,158,"error" -code-creation,KeyedLoadIC,0x1e4e3455b700,158,"error" -code-creation,KeyedLoadIC,0x1e4e3455b7a0,158,"data" -code-creation,KeyedLoadIC,0x1e4e3455b7a0,158,"data" -code-creation,LazyCompile,0x1e4e3455b840,184,"debug http.js:37",0x140cf2185128,~ -code-creation,LazyCompile,0x1e4e3455b900,166,"debug http.js:37",0x140cf2185128,* -tick,0x1001b2df7,0x7fff5fbfe560,0,0x1003f6b98,2,0x1e4e343b6f9c,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,KeyedStoreIC,0x1e4e3455b9c0,208,"close" -code-creation,KeyedStoreIC,0x1e4e3455b9c0,208,"close" -code-creation,KeyedLoadIC,0x1e4e3455baa0,158,"finish" -code-creation,KeyedLoadIC,0x1e4e3455baa0,158,"finish" -code-creation,KeyedStoreIC,0x1e4e3455bb40,208,"finish" -code-creation,KeyedStoreIC,0x1e4e3455bb40,208,"finish" -tick,0x1001fcbd7,0x7fff5fbfedc0,0,0x7fff5fbfee78,0,0x1e4e3455acf2,0x1e4e3433491d,0x1e4e343e6785,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,KeyedLoadIC,0x1e4e3455bc20,158,"close" -code-creation,KeyedLoadIC,0x1e4e3455bc20,158,"close" -code-creation,LazyCompile,0x1e4e3455bcc0,1300,"EventEmitter.removeListener events.js:201",0xe6623604b8,~ -code-creation,LazyCompile,0x1e4e3455c1e0,2530,"EventEmitter.removeListener events.js:201",0xe6623604b8,* -tick,0x1002c0051,0x7fff5fbff0a0,0,0x7fff5fbff0c8,0,0x1e4e34320ed1,0x1e4e343b8a12,0x1e4e343b159b,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x10011b611,0x7fff5fbfebe0,0,0x7fff5fbfec40,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3455cbe0,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -code-creation,LazyCompile,0x1e4e3455ce60,1256,"writeUInt32 buffer.js:915",0xe662362908,~ -code-creation,LazyCompile,0x1e4e3455d360,2072,"writeUInt32 buffer.js:915",0xe662362908,* -tick,0x10011c0a3,0x7fff5fbff290,0,0x0,4 -code-creation,LazyCompile,0x1e4e3455db80,536,"EventEmitter.removeAllListeners events.js:235",0xe6623605c0,~ -code-creation,Stub,0x1e4e3455dda0,2483,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e3455e760,1203,"EventEmitter.removeAllListeners events.js:235",0xe6623605c0,* -code-creation,KeyedStoreIC,0x1e4e3455ec20,208,"error" -code-creation,KeyedStoreIC,0x1e4e3455ec20,208,"error" -code-creation,LazyCompile,0x1e4e3455ed00,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -tick,0x1002523de,0x7fff5fbfedb0,0,0x11e9a5f00000,3,0x1e4e343f5877,0x1e4e343f1858,0x1e4e343f383a,0x1e4e343f5dc4,0x1e4e343f2330,0x1e4e34384cf0,0x1e4e34552902,0x1e4e343c43f9 -code-creation,LazyCompile,0x1e4e3455f0e0,504,"keys native v8natives.js:333",0xe662329128,~ -code-creation,LazyCompile,0x1e4e3455f2e0,922,"keys native v8natives.js:333",0xe662329128,* -code-creation,LazyCompile,0x1e4e3455f680,372,"_isGoaway /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:581",0x140cf21d3dc0,~ -code-creation,LazyCompile,0x1e4e3455f800,519,"_isGoaway /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:581",0x140cf21d3dc0,* -code-creation,LazyCompile,0x1e4e3455fa20,320,"ToUint32 native runtime.js:586",0xe6623303c0,~ -tick,0x10021fc2c,0x7fff5fbfdf90,0,0x10000002e,2,0x1e4e34321c5c,0x1e4e343346a6,0x1e4e34552947,0x1e4e343e96cb,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e343bbe5c,0x1e4e343bbccd,0x1e4e3453032e,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3455fb60,414,"ToUint32 native runtime.js:586",0xe6623303c0,* -code-creation,KeyedLoadIC,0x1e4e3455fd00,158,"data" -code-creation,KeyedLoadIC,0x1e4e3455fd00,158,"data" -code-creation,KeyedStoreIC,0x1e4e3455fda0,208,"data" -code-creation,KeyedStoreIC,0x1e4e3455fda0,208,"data" -tick,0x1e4e34522b40,0x7fff5fbfee48,0,0x1e4e34343b29,0,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3455fe80,364,"EncryptedStream._pusher tls.js:694",0x140cf21dab80,~ -code-creation,LazyCompile,0x1e4e34560000,462,"EncryptedStream._pusher tls.js:694",0x140cf21dab80,* -tick,0x100170cf1,0x7fff5fbff160,0,0x0,3 -code-creation,LazyCompile,0x1e4e345601e0,228,"Stream stream.js:25",0x140cf2105298,~ -code-creation,LazyCompile,0x1e4e345602e0,378,"Stream stream.js:25",0x140cf2105298,* -tick,0x7fff911daa28,0x7fff5fbfec08,0,0x10000b124,0,0x1e4e34343b7c,0x1e4e343ab438,0x1e4e343e8c22,0x1e4e345587aa,0x1e4e343e7f6c,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34560460,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -code-creation,LazyCompile,0x1e4e34560840,376,"startup.processNextTick.process.nextTick node.js:254",0xe66235c678,~ -code-creation,LazyCompile,0x1e4e345609c0,637,"startup.processNextTick.process.nextTick node.js:254",0xe66235c678,* -tick,0x1002233b8,0x7fff5fbfe3b0,0,0x57fffffff,2,0x1e4e343e9b28,0x1e4e343e7c45,0x1e4e343e2ace,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100014d7c,0x7fff5fbff3a8,0,0x1000145ca,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,Function,0x1e4e34560c40,252," /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:79",0x37ec2ed825b0,~ -code-creation,Function,0x1e4e34560d40,352," /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:71",0x37ec2ed826a8,~ -code-creation,LazyCompile,0x1e4e34560ea0,1444,"exports.writeHead /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:30",0x140cf21612f8,~ -tick,0x100367c36,0x7fff5fbfe4b0,0,0x100000009,2,0x1e4e3453030c,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,Stub,0x1e4e34561460,2490,"RecordWriteStub" -code-creation,Stub,0x1e4e34561e20,1148,"RecordWriteStub" -code-creation,Stub,0x1e4e345622a0,2504,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e34562c80,3140,"exports.writeHead /Users/indutny/Code/indutny/node-spdy/lib/spdy/response.js:30",0x140cf21612f8,* -code-creation,LazyCompile,0x1e4e345638e0,1656,"Buffer.write buffer.js:323",0xe662363bf8,~ -tick,0x7fff9123b0df,0x7fff5fbfe030,0,0x100000000,2,0x1e4e3454dc3c,0x1e4e343e94e6,0x1e4e343b903c,0x1e4e343b8cf3,0x1e4e343bb1de,0x1e4e343bbb1d,0x1e4e3453032e,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,Stub,0x1e4e34563f60,2518,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e34564940,3417,"Buffer.write buffer.js:323",0xe662363bf8,* -code-creation,LazyCompile,0x1e4e345656a0,400,"abortIncoming http.js:1659",0x140cf21844c8,* -tick,0x7fff911ee1e8,0x7fff5fbfefe8,0,0x7fff911f2cf3,0,0x1e4e34322a3d,0x1e4e34320eb8,0x1e4e343b8a12,0x1e4e343b159b,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34565840,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -code-creation,LazyCompile,0x1e4e34565ac0,2200,"CryptoStream._push tls.js:470",0x140cf21d9ff0,~ -code-creation,Function,0x1e4e34566360,648,"use tls.js:193",0x140cf21d8e88,~ -code-creation,Function,0x1e4e34566600,668,"SecurePair.maybeInitFinished tls.js:900",0x140cf21daf00,~ -code-creation,Function,0x1e4e345668a0,296,"EncryptedStream._internallyPendingBytes tls.js:679",0x140cf21da950,~ -code-creation,Function,0x1e4e345669e0,296,"CleartextStream._internallyPendingBytes tls.js:638",0x140cf21da380,~ -tick,0x100307ad6,0x7fff5fbfe150,0,0x102023c60,2,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100364100,0x7fff5fbfe4a8,0,0x1003535c3,2,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34566b20,10531,"CryptoStream._push tls.js:470",0x140cf21d9ff0,* -code-creation,Function,0x1e4e34569460,220," tls.js:622",0x37ec2ed88030,~ -code-creation,LazyCompile,0x1e4e34569540,3272,"CryptoStream._pull tls.js:545",0x140cf21da298,~ -tick,0x1001e9220,0x7fff5fbfe678,0,0x1001eec82,2,0x1e4e343f5b93,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3456a220,6660,"CryptoStream._pull tls.js:545",0x140cf21da298,* -tick,0x10028db1e,0x7fff5fbfda50,0,0x1006037a0,2,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3456bc40,340,"unlock /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:629",0x140cf21d41e0,~ -code-creation,LazyCompile,0x1e4e3456bda0,856,"unlock /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:629",0x140cf21d41e0,* -code-creation,Function,0x1e4e3456c100,1464,"callback zlib.js:395",0x37ec2ed8adf0,~ -code-creation,LazyCompile,0x1e4e3456c6c0,1452,"Zlib._process zlib.js:356",0x140cf210cf60,~ -tick,0x10021fa9a,0x7fff5fbfe530,0,0x101a11da0,2,0x1e4e34399744 -code-creation,Stub,0x1e4e3456cc80,2518,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e3456d660,4704,"Zlib._process zlib.js:356",0x140cf210cf60,* -code-creation,LazyCompile,0x1e4e3456e8c0,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -tick,0x1e4e3439972b,0x7fff5fbfef88,0,0x11e9a5ef5e91,0 -tick,0x1001a8a6c,0x7fff5fbfe9f0,0,0x0,1 -tick,0x1002631ff,0x7fff5fbfe610,0,0x1006039a0,0,0x1e4e343a8f05,0x1e4e34530abe,0x1e4e343a97c8,0x1e4e343aadc0,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3453030c,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x1e4e34306152,0x7fff5fbfed10,0,0x1e4e343060e1,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34394e66,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3456eca0,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -tick,0x1e4e34525265,0x7fff5fbfec78,0,0x1e4e3433d0a4,0,0x1e4e3434470a,0x1e4e34524ec8,0x1e4e343ae8e0,0x1e4e343ae198,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34548889,0x7fff5fbff378,0,0x1e4e343b3eb1,0,0x1e4e343b5cf2,0x1e4e345522ca,0x1e4e343e83b2,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3456f080,500,"Buffer.readUInt8 buffer.js:585",0xe662364938,~ -code-creation,LazyCompile,0x1e4e3456f280,1005,"Buffer.readUInt8 buffer.js:585",0xe662364938,* -code-creation,LazyCompile,0x1e4e3456f680,248,"Buffer.readUInt16BE buffer.js:629",0xe662364b68,~ -code-creation,Function,0x1e4e3456f780,752,"readUInt16 buffer.js:599",0xe662361fe0,~ -tick,0x1002238e0,0x7fff5fbfe390,0,0x7fff5fbfe3d0,2,0x1e4e34524ec8,0x1e4e343ae8e0,0x1e4e343ae198,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3456fa80,1491,"Buffer.readUInt16BE buffer.js:629",0xe662364b68,* -code-creation,Function,0x1e4e34570060,272,"g events.js:190",0x37ec2ed8e3c0,~ -code-creation,LazyCompile,0x1e4e34570180,620,"EventEmitter.once events.js:184",0xe662360370,~ -code-creation,Stub,0x1e4e34570400,2537,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e34570e00,1429,"EventEmitter.once events.js:184",0xe662360370,* -tick,0x1e4e343100b5,0x7fff5fbfebc8,0,0x1e4e34394c6c,0,0x1e4e34394f93,0x1e4e343aab0d,0x1e4e343aae01,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3453030c,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e345713a0,1656,"forEach native array.js:1062",0xe662315210,~ -code-creation,LazyCompile,0x1e4e34571a20,2564,"forEach native array.js:1062",0xe662315210,* -code-creation,LazyCompile,0x1e4e34572440,336,"_handleClose /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:646",0x140cf21d43d8,~ -code-creation,Function,0x1e4e345725a0,240,"close /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:656",0x140cf21d44d0,~ -code-creation,LazyCompile,0x1e4e345726a0,646,"_handleClose /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:646",0x140cf21d43d8,* -tick,0x1e4e343b62c4,0x7fff5fbff550,0,0xe662304121,0,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34572940,224,"ServerResponse._implicitHeader http.js:931",0x140cf2187100,~ -code-creation,LazyCompile,0x1e4e34572a20,268,"ServerResponse._implicitHeader http.js:931",0x140cf2187100,* -code-creation,LazyCompile,0x1e4e34572b40,480,"OutgoingMessage._send http.js:463",0x140cf2185d48,~ -code-creation,LazyCompile,0x1e4e34572d20,814,"OutgoingMessage._send http.js:463",0x140cf2185d48,* -code-creation,LazyCompile,0x1e4e34573060,348,"end /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:784",0x140cf21d4db0,~ -code-creation,LazyCompile,0x1e4e345731c0,873,"end /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:784",0x140cf21d4db0,* -code-creation,LazyCompile,0x1e4e34573540,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -code-creation,LazyCompile,0x1e4e345737c0,220,"utils.zwrap /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:112",0x140cf210a070,~ -code-creation,LazyCompile,0x1e4e345738a0,290,"utils.zwrap /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:112",0x140cf210a070,* -tick,0x1e4e343262cc,0x7fff5fbfed40,0,0x1e4e343f5bb4,0,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,Function,0x1e4e345739e0,184,"cb /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:68",0x37ec2ed90e80,~ -code-creation,Function,0x1e4e34573aa0,304," /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:134",0x37ec2ed90f68,~ -code-creation,Function,0x1e4e34573be0,588," /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:118",0x37ec2ed91090,~ -code-creation,LazyCompile,0x1e4e34573e40,2100,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:66",0x140cf215ffe8,~ -tick,0x100367993,0x7fff5fbfe4b0,0,0x0,2,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,Stub,0x1e4e34574680,2542,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e34575080,3707,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:66",0x140cf215ffe8,* -code-creation,LazyCompile,0x1e4e34575f00,284,"flush zlib.js:338",0x140cf210ca70,~ -code-creation,LazyCompile,0x1e4e34576020,965,"flush zlib.js:338",0x140cf210ca70,* -code-creation,LazyCompile,0x1e4e34576400,476,"exports.active timers.js:151",0x140cf21c43d0,~ -code-creation,LazyCompile,0x1e4e345765e0,1608,"exports.active timers.js:151",0x140cf21c43d0,* -tick,0x100143dc4,0x7fff5fbfebb0,0,0x2e1f0a1e,0,0x1e4e34394afe,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34576c40,248,"isEmpty _linklist.js:73",0x140cf21c5e38,~ -code-creation,LazyCompile,0x1e4e34576d40,334,"isEmpty _linklist.js:73",0x140cf21c5e38,* -code-creation,LazyCompile,0x1e4e34576ea0,352,"append _linklist.js:63",0x140cf21c5d48,~ -code-creation,Function,0x1e4e34577000,420,"remove _linklist.js:47",0x140cf21c5c30,~ -code-creation,Stub,0x1e4e345771c0,2546,"RecordWriteStub" -code-creation,Stub,0x1e4e34577bc0,2496,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e34578580,2407,"append _linklist.js:63",0x140cf21c5d48,* -tick,0x1002607f2,0x7fff5fbfef40,0,0x2fecab700000000a,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34578f00,1808,"map native array.js:1190",0xe6623153d8,~ -code-creation,LazyCompile,0x1e4e34579620,2964,"map native array.js:1190",0xe6623153d8,* -code-creation,LazyCompile,0x1e4e3457a1c0,844,"OutgoingMessage._writeRaw http.js:480",0x140cf2185e50,~ -tick,0x1001b187b,0x7fff5fbfe260,0,0x103058720,2,0x1e4e34572f86,0x1e4e343bbbd0,0x1e4e3453032e,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3457a520,1448,"OutgoingMessage._writeRaw http.js:480",0x140cf2185e50,* -code-creation,LazyCompile,0x1e4e3457aae0,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -tick,0x7fff911daad2,0x7fff5fbfea70,0,0x7fff5fbfeaf0,2,0x1e4e343b5d1b,0x1e4e345522ca,0x1e4e343e83b2,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3457aec0,400,"abortIncoming http.js:1659",0x140cf21844c8,* -code-creation,LazyCompile,0x1e4e3457b060,248,"Buffer.writeUInt16BE buffer.js:911",0xe662365ac8,~ -code-creation,LazyCompile,0x1e4e3457b160,274,"Buffer.writeUInt16BE buffer.js:911",0xe662365ac8,* -code-creation,LazyCompile,0x1e4e3457b280,284,"schedule /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:28",0x140cf21cf310,~ -code-creation,LazyCompile,0x1e4e3457b3a0,538,"schedule /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:28",0x140cf21cf310,* -tick,0x7fff9120f5ed,0x7fff5fbfea20,0,0x102063e00,0,0x1e4e343e8c62,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3457b5c0,334,"close /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:656",0x140cf21d44d0,* -tick,0x1e4e345553c1,0x7fff5fbfee30,0,0x7fff5fbfee78,0,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10015ddf1,0x7fff5fbfeb50,0,0x7fff5fbfeb70,0,0x1e4e34571eed,0x1e4e343a99dd,0x1e4e343aadc0,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3453030c,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3457b720,1368,"IncomingMessage._addHeaderLine http.js:380",0x140cf2185b60,~ -code-creation,LazyCompile,0x1e4e3457bc80,1943,"IncomingMessage._addHeaderLine http.js:380",0x140cf2185b60,* -tick,0x100289bed,0x7fff5fbfe040,0,0x102809228,2,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3457c420,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -code-creation,LazyCompile,0x1e4e3457c800,1428,"Buffer.copy buffer.js:509",0xe662364130,~ -tick,0x1001f7399,0x7fff5fbfe420,0,0x1001c7311,2,0x1e4e343ab438,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3457cda0,2441,"Buffer.copy buffer.js:509",0xe662364130,* -tick,0x1e4e3431b53f,0x7fff5fbfed90,0,0xaabee8169e1,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3457d740,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -code-creation,StoreIC,0x1e4e3457d9c0,189,"_buffer" -code-creation,StoreIC,0x1e4e3457d9c0,189,"_buffer" -tick,0x1002492c0,0x7fff5fbfe9d0,0,0x101009410,3,0x1e4e34568839,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430adcd,0x7fff5fbfe798,0,0x1e4e34334657,0,0x1e4e34552947,0x1e4e343e8717,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e343bbe5c,0x1e4e343bbccd,0x1e4e3453032e,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3457da80,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -tick,0x7fff9199e0e6,0x7fff5fbfeba8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34394e85,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100118d26,0x7fff5fbfebc8,0,0x10100a770,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3452a85a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f84,0x7fff5fbfeb00,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3457de60,400,"abortIncoming http.js:1659",0x140cf21844c8,* -tick,0x10019edc8,0x7fff5fbfeab0,0,0x0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3452a85a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3457e000,448,"UseSparseVariant native array.js:111",0xe662314500,~ -code-creation,LazyCompile,0x1e4e3457e1c0,556,"UseSparseVariant native array.js:111",0xe662314500,* -code-creation,LazyCompile,0x1e4e3457e400,963,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460,* -tick,0x1003946ea,0x7fff5fbfe9e8,0,0x10019bf04,0,0x1e4e3455f4b2,0x1e4e343a9873,0x1e4e343aadc0,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3453030c,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LoadIC,0x1e4e3457e7e0,134,"readable" -code-creation,LoadIC,0x1e4e3457e7e0,134,"readable" -code-creation,LoadIC,0x1e4e3457e880,200,"resume" -code-creation,LoadIC,0x1e4e3457e880,200,"resume" -code-creation,CallIC,0x1e4e3457e960,247,"removeListener" -code-creation,StoreIC,0x1e4e3457ea60,185,"priorities" -code-creation,StoreIC,0x1e4e3457ea60,185,"priorities" -code-creation,LoadIC,0x1e4e3457eb20,134,"connection" -code-creation,LoadIC,0x1e4e3457eb20,134,"connection" -tick,0x7fff911dad68,0x7fff5fbfefb0,0,0x7fff5fbfefe0,0,0x1e4e343f4f61,0x1e4e343f4659,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff9199f4aa,0x7fff5fbfed78,0,0x100051044,0,0x1e4e343c8e4e,0x1e4e343c8c7e,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e34567e91,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3457ebc0,364,"CleartextStream._pusher tls.js:653",0x140cf21da5b0,~ -code-creation,LazyCompile,0x1e4e3457ed40,502,"CleartextStream._pusher tls.js:653",0x140cf21da5b0,* -tick,0x7fff9199f4aa,0x7fff5fbfed78,0,0x100051044,0,0x1e4e343c8e4e,0x1e4e343c8c7e,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e34567e91,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3457ef40,1197,"SecurePair.maybeInitFinished tls.js:900",0x140cf21daf00,* -code-creation,LazyCompile,0x1e4e3457f400,356,"ondata stream.js:36",0x140cf2105388,~ -tick,0x1001e75f1,0x7fff5fbfdc00,0,0x10100a798,2,0x1e4e3455287e,0x1e4e34567e91,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e343e708d,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3457f580,1275,"ondata stream.js:36",0x140cf2105388,* -code-creation,LazyCompile,0x1e4e3457fa80,312,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:461",0x140cf21d38d8,~ -code-creation,LazyCompile,0x1e4e3457fbc0,490,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:461",0x140cf21d38d8,* -code-creation,LazyCompile,0x1e4e3457fdc0,364,"CleartextStream._puller tls.js:647",0x140cf21da490,~ -tick,0x7fff9199e6fe,0x7fff5fbfec18,0,0x7fff9125a857,2,0x1e4e343f4659,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3457ff40,604,"CleartextStream._puller tls.js:647",0x140cf21da490,* -tick,0x100251f1b,0x7fff5fbfec50,0,0x200000000,3,0x1e4e343c8e4e,0x1e4e343c8c7e,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10024afc9,0x7fff5fbfee20,0,0x2e9dafd13ad1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10021fbe6,0x7fff5fbfe710,0,0x340,2,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e345801a0,6916,"CryptoStream._pull tls.js:545",0x140cf21da298,* -tick,0x7fff9120c538,0x7fff5fbfed80,0,0x100000022,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x100128158,0x7fff5fbfee60,0,0x4052800000000000,0,0x1e4e343c8e4e,0x1e4e343c8c7e,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff911f408d,0x7fff5fbfeee0,0,0x11e900000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1003009ca,0x7fff5fbfee20,0,0x0,1 -tick,0x10006f7ac,0x7fff5fbff038,0,0x10006385c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff9120c292,0x7fff5fbfeda0,0,0x83d000000017f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1e4e34311b43,0x7fff5fbff288,0,0x1e4e343f1d72,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x100063a6f,0x7fff5fbfefe0,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1001ff2fb,0x7fff5fbfee00,0,0x5fbfee30,0,0x1e4e343c912b,0x1e4e343c8c7e,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1000f91ef,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e343f5c4e,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -code-creation,LoadIC,0x1e4e34581cc0,138,"readable" -code-creation,LoadIC,0x1e4e34581cc0,138,"readable" -code-creation,LoadIC,0x1e4e34581d60,170,"resume" -code-creation,LoadIC,0x1e4e34581d60,170,"resume" -code-creation,CallIC,0x1e4e34581e20,187,"resume" -code-creation,StoreIC,0x1e4e34581ee0,189,"_paused" -code-creation,StoreIC,0x1e4e34581ee0,189,"_paused" -tick,0x10011c0a6,0x7fff5fbff5c0,0,0x0,4 -code-creation,CallIC,0x1e4e34581fa0,257,"emit" -tick,0x7fff911dab12,0x7fff5fbfed60,0,0x7fff5fbfeda0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e343f5d09,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e345820c0,137,"parser" -code-creation,LoadIC,0x1e4e345820c0,137,"parser" -code-creation,LoadIC,0x1e4e34582160,134,"drained" -code-creation,LoadIC,0x1e4e34582160,134,"drained" -code-creation,CallIC,0x1e4e34582200,247,"once" -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -code-creation,LazyCompile,0x1e4e34582300,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -code-creation,LazyCompile,0x1e4e34582580,1552,"write zlib.js:303",0x140cf210c878,~ -code-creation,LazyCompile,0x1e4e34398540,1552,"write zlib.js:303",0x140cf210c878, -tick,0x7fff9127d976,0x7fff5fbfeae8,0,0x7fff91258843,2,0x1e4e34394e85,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34332fb8,0x7fff5fbfec88,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,Function,0x1e4e34582ba0,300,"collect /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:81",0x140cf21ffb90,~ -code-creation,Function,0x1e4e34582ce0,240," /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:74",0x140cf21ffc98,~ -code-creation,Function,0x1e4e34582de0,264," /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:88",0x140cf21ffda8,~ -code-creation,Function,0x1e4e34582f00,488," /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:93",0x140cf21ffec8,~ -code-creation,LazyCompile,0x1e4e34583100,952,"zstream /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:68",0x140cf2109f78,~ -code-creation,LazyCompile,0x1e4e345834c0,3374,"zstream /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:68",0x140cf2109f78,* -code-creation,LazyCompile,0x1e4e3452a3e0,416,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x37ec2ed6f460, -tick,0x1e4e3454d56a,0x7fff5fbfed90,0,0x7fff5fbfee10,0,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452a846,0x7fff5fbfee80,0,0xe662335941,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfec60,0,0x101009410,0,0x1e4e3452a869,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dc50,0x7fff5fbfecd0,0,0x102023a88,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3452a737,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34584200,1932,"filter native array.js:1011",0xe662315178,~ -tick,0x7fff911db26f,0x7fff5fbfe2a0,0,0x7fff911db23b,2,0x1e4e343a9899,0x1e4e343aadc0,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3453030c,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e345849a0,3222,"filter native array.js:1011",0xe662315178,* -code-creation,LazyCompile,0x1e4e34585640,784,"SubString native string.js:205",0xe662323150,~ -code-creation,LazyCompile,0x1e4e34585960,804,"SubString native string.js:205",0xe662323150,* -tick,0x100249240,0x7fff5fbff158,0,0x0,3 -code-creation,LazyCompile,0x1e4e34585ca0,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -tick,0x100201b21,0x7fff5fbfedf0,0,0x37ec2ede6749,0,0x1e4e34570fec,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfeb58,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3452a85a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbbd1,0x7fff5fbff168,0,0x7fff911dbb89,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e343c4367 -code-creation,LazyCompile,0x1e4e34585f20,1140,"slice native string.js:510",0xe662323578,~ -tick,0x100221327,0x7fff5fbfe720,0,0x7fff5fbfe770,2,0x1e4e3457bf37,0x1e4e343b159b,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e345863a0,1808,"slice native string.js:510",0xe662323578,* -code-creation,LazyCompile,0x1e4e34586ac0,400,"abortIncoming http.js:1659",0x140cf21844c8,* -code-creation,Function,0x1e4e34586c60,416,"readString /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:36",0x3d2797070f8,~ -tick,0x7fff9199e6fe,0x7fff5fbfe468,0,0x7fff9125a857,2,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34586e00,980,"parseHeaders /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:30",0x140cf2156968,~ -code-creation,LazyCompile,0x1e4e345871e0,1304,"parseHeaders /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:30",0x140cf2156968,* -tick,0x1e4e343262c9,0x7fff5fbfef88,0,0x1e4e343996f0,0 -code-creation,LazyCompile,0x1e4e34587700,672,"EventEmitter events.js:25",0xe66235fd70,~ -tick,0x10021fdd6,0x7fff5fbfe660,0,0x5,2,0x1e4e345603e5,0x1e4e343b2169,0x1e4e343b138a,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e345879a0,3215,"EventEmitter events.js:25",0xe66235fd70,* -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -code-creation,LazyCompile,0x1e4e34588640,268,"httpSocketSetup http.js:1622",0x140cf21842c8,~ -code-creation,LazyCompile,0x1e4e34588760,593,"httpSocketSetup http.js:1622",0x140cf21842c8,* -code-creation,LazyCompile,0x1e4e345889c0,216,"setTimeout /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:640",0x140cf21d42e0,~ -code-creation,LazyCompile,0x1e4e34588aa0,166,"setTimeout /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:640",0x140cf21d42e0,* -code-creation,LazyCompile,0x1e4e34588b60,344,"exports.FreeList.alloc freelist.js:31",0x140cf21cceb8,~ -code-creation,LazyCompile,0x1e4e34588cc0,756,"exports.FreeList.alloc freelist.js:31",0x140cf21cceb8,* -tick,0x1001a0786,0x7fff5fbfebd0,0,0x0,0,0x1e4e3455f4b2,0x1e4e343e7b53,0x1e4e343e2ace,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34588fc0,556,"ServerResponse http.js:887",0x140cf21830c0,~ -code-creation,LazyCompile,0x1e4e34589200,1000,"ServerResponse http.js:887",0x140cf21830c0,* -code-creation,LazyCompile,0x1e4e34589600,564,"OutgoingMessage http.js:432",0x140cf2182fd0,~ -tick,0x1003546e8,0x7fff5fbfe6f0,0,0x5fbfe720,2,0x1e4e345892e0,0x1e4e343b699a,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34589840,3367,"OutgoingMessage http.js:432",0x140cf2182fd0,* -code-creation,LazyCompile,0x1e4e3458a580,404,"ServerResponse.assignSocket http.js:910",0x140cf2186e20,~ -code-creation,Stub,0x1e4e3458a720,1144,"RecordWriteStub" -code-creation,Stub,0x1e4e3458aba0,2496,"RecordWriteStub" -code-creation,Stub,0x1e4e3458b560,1164,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e3458ba00,1382,"ServerResponse.assignSocket http.js:910",0x140cf2186e20,* -code-creation,LazyCompile,0x1e4e3458bf80,280," /Users/indutny/Code/indutny/node-spdy/examples/hello_world/app.js:10",0x140cf2108600,~ -code-creation,LazyCompile,0x1e4e3458c0a0,504," /Users/indutny/Code/indutny/node-spdy/examples/hello_world/app.js:10",0x140cf2108600,* -code-creation,Function,0x1e4e3458c2a0,268," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:176",0x3d27970a050,~ -code-creation,LazyCompile,0x1e4e3458c3c0,460,"replyFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:174",0x140cf2158520,~ -code-creation,LazyCompile,0x1e4e3458c5a0,619,"replyFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:174",0x140cf2158520,* -code-creation,Function,0x1e4e3458c820,1320," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:137",0x3d27970a4b0,~ -code-creation,LazyCompile,0x1e4e3458cd60,536,"_synFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:134",0x140cf21582c8,~ -code-creation,LazyCompile,0x1e4e3458cf80,540,"_synFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:134",0x140cf21582c8,* -code-creation,LazyCompile,0x1e4e3458d1a0,372,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:770",0x140cf21d4ca8,~ -tick,0x7fff9199e6fe,0x7fff5fbfe6e8,0,0x7fff9125a857,2,0x1e4e3457a977,0x1e4e34572f86,0x1e4e343bb1de,0x1e4e343bbb1d,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e343b1772,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,Function,0x1e4e3458d320,364,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:759",0x140cf21d4b78,~ -code-creation,LazyCompile,0x1e4e3458d4a0,1074,"write /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:770",0x140cf21d4ca8,* -code-creation,LazyCompile,0x1e4e3458d8e0,420,"OutgoingMessage._finish http.js:829",0x140cf2186c10,~ -code-creation,LazyCompile,0x1e4e3458daa0,722,"OutgoingMessage._finish http.js:829",0x140cf2186c10,* -code-creation,LazyCompile,0x1e4e3458dd80,412,"ServerResponse.detachSocket http.js:919",0x140cf2186f30,~ -code-creation,LazyCompile,0x1e4e3458df20,817,"ServerResponse.detachSocket http.js:919",0x140cf2186f30,* -code-creation,LazyCompile,0x1e4e3458e260,280,"IncomingMessage._emitEnd http.js:364",0x140cf2185a60,~ -code-creation,LazyCompile,0x1e4e3458e380,472,"IncomingMessage._emitEnd http.js:364",0x140cf2185a60,* -code-creation,LazyCompile,0x1e4e3458e560,216,"resume /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:574",0x140cf21d3cc8,~ -code-creation,LazyCompile,0x1e4e3458e640,166,"resume /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:574",0x140cf21d3cc8,* -tick,0x1e4e34547065,0x7fff5fbff368,0,0x1e4e343b3fcf,0,0x1e4e343b5cf2,0x1e4e345522ca,0x1e4e343e83b2,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3458e700,312,"exports.FreeList.free freelist.js:38",0x140cf21ccf50,~ -code-creation,LazyCompile,0x1e4e3458e840,472,"exports.FreeList.free freelist.js:38",0x140cf21ccf50,* -tick,0x1e4e3452c373,0x7fff5fbfed38,0,0x1e4e343e7c66,0,0x1e4e343e2ace,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3458ea20,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -tick,0x100145a0f,0x7fff5fbfec70,0,0x800000000,0,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002afb86,0x7fff5fbfeb60,0,0x5f2,0,0x1e4e3435b51c,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3458eca0,1484,"parserOnHeadersComplete http.js:59",0x140cf21829d8,~ -tick,0x1001b2840,0x7fff5fbfeb20,0,0x1003f6c06,2,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,Stub,0x1e4e3458f280,2483,"RecordWriteStub" -code-creation,Stub,0x1e4e3458fc40,1144,"RecordWriteStub" -code-creation,Stub,0x1e4e345900c0,2496,"RecordWriteStub" -code-creation,Stub,0x1e4e34590a80,2496,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e34591440,4680,"parserOnHeadersComplete http.js:59",0x140cf21829d8,* -tick,0x1e4e343210f2,0x7fff5fbfeba8,0,0xe662304121,0,0x1e4e34548360,0x1e4e3458d568,0x1e4e3457a977,0x1e4e34572f86,0x1e4e343bb1de,0x1e4e343bbb1d,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e345926a0,656,"OutgoingMessage._flush http.js:841",0x140cf2186d10,~ -code-creation,LazyCompile,0x1e4e34592940,1073,"OutgoingMessage._flush http.js:841",0x140cf2186d10,* -code-creation,LazyCompile,0x1e4e34592d80,1076,"parserOnMessageComplete http.js:127",0x140cf2182c00,~ -tick,0x100225480,0x7fff5fbfe820,0,0x100ce3598,2,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e345931c0,2435,"parserOnMessageComplete http.js:127",0x140cf2182c00,* -code-creation,LazyCompile,0x1e4e34593b60,400,"abortIncoming http.js:1659",0x140cf21844c8,* -tick,0x100253b30,0x7fff5fbfe970,0,0x101009410,0,0x1e4e3455a80b,0x1e4e343b71da,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001213d8,0x7fff5fbff550,0,0x0,4 -tick,0x1001a1316,0x7fff5fbfeb00,0,0x223800000000,0,0x1e4e3452848d,0x1e4e343a9ee4,0x1e4e343aec82,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae9c7,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34593d00,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -tick,0x7fff9124d9e1,0x7fff5fbfe208,0,0x7fff912618f5,2,0x1e4e34571fff,0x1e4e343e7b79,0x1e4e343e2ace,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011453d,0x7fff5fbff538,0,0x0,4 -tick,0x1001aa763,0x7fff5fbfe840,0,0x0,1 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e3453a0a8,0x7fff5fbfec20,0,0x1e4e343b70a6,0,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011c18a,0x7fff5fbff330,0,0xd9c9ff15a96f5556,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x1e4e34332f05,0x7fff5fbfeb00,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e343f5dc4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34593f80,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -tick,0x1e4e34531149,0x7fff5fbfea78,0,0x7fff5fbfeaa8,0,0x1e4e3454dc3c,0x1e4e343e7bf4,0x1e4e343e2ace,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34594200,1268,"SecurePair.cycle tls.js:854",0x140cf21dadf8,~ -tick,0x1001eb7a4,0x7fff5fbfe720,0,0x7fff5fbfe810,2,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e34594700,2111,"SecurePair.cycle tls.js:854",0x140cf21dadf8,* -tick,0x10010d3a0,0x7fff5fbfeb88,0,0x10000c17f,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100179d9f,0x7fff5fbfeb70,0,0x3,0,0x1e4e343a98c8,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34594f40,400,"abortIncoming http.js:1659",0x140cf21844c8,* -tick,0x1e4e3430b2e5,0x7fff5fbfee10,0,0x1e4e34398a60,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3452127e,0x7fff5fbfea18,0,0x1e4e345767d8,0,0x1e4e343c8d30,0x1e4e343c8c7e,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100275a7e,0x7fff5fbfe880,0,0x7fff5fbfe900,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e343a99dd,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x1001ee6a0,0x7fff5fbfe258,0,0x1001ef0e7,2,0x1e4e34571fff,0x1e4e343e7b79,0x1e4e343e2ace,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345950e0,635," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0,* -tick,0x100044017,0x7fff5fbff410,0,0x0,4 -code-creation,CallIC,0x1e4e34595360,257,"emit" -code-creation,CallIC,0x1e4e34595480,217,"resume" -tick,0x7fff9199f4aa,0x7fff5fbfed68,0,0x100051044,0,0x1e4e343c8e4e,0x1e4e343c8c7e,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff9199f4aa,0x7fff5fbfed68,0,0x100051044,0,0x1e4e343c8e4e,0x1e4e343c8c7e,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff91210815,0x7fff5fbfed00,0,0x7fff5fbfedb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34595560,1552,"Socket.write net.js:465",0x140cf21c1b68,~ -tick,0x10037a880,0x7fff5fbfe430,0,0x7fff5fbfe588,2,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -code-creation,Stub,0x1e4e34595b80,2483,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e34596540,2848,"Socket.write net.js:465",0x140cf21c1b68,* -code-creation,LazyCompile,0x1e4e34597060,1396,"Socket._write net.js:515",0x140cf21c1cb0,~ -code-creation,LazyCompile,0x1e4e345975e0,2688,"Socket._write net.js:515",0x140cf21c1cb0,* -tick,0x10010d3e6,0x7fff5fbfeff0,0,0x8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1000c49d4,0x7fff5fbfee10,0,0x1000c5e5f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff9199f4aa,0x7fff5fbfed08,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10024afe0,0x7fff5fbfee10,0,0x2e9dafd23ac1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1e4e34524400,0x7fff5fbff218,0,0x1e4e34594a7d,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1e4e343262c9,0x7fff5fbff298,0,0x1e4e343f1e29,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff9120c497,0x7fff5fbfed70,0,0x103200202,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10024afd3,0x7fff5fbfea70,0,0x2e9dafd05104,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff9120616c,0x7fff5fbfee18,0,0x7fff91206c07,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1e4e3432556e,0x7fff5fbff298,0,0x1e4e343f1b7a,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1e4e3451df3c,0x7fff5fbff0b0,0,0x7fff5fbff108,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34598060,772,"afterWrite net.js:585",0x140cf21bf4b0,~ -tick,0x10037a67a,0x7fff5fbfe990,0,0x7fff5fbfe9bf,2 -code-creation,LazyCompile,0x1e4e34598380,2369,"afterWrite net.js:585",0x140cf21bf4b0,* -tick,0x7fff911daad8,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,KeyedLoadIC,0x1e4e34598ce0,158,"drain" -code-creation,KeyedLoadIC,0x1e4e34598ce0,158,"drain" -tick,0x1002bf2e7,0x7fff5fbfe7e0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345547ae,0x7fff5fbfed98,0,0x1e4e34557bb0,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,Function,0x1e4e34598d80,384,"onFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:226",0x3d27973f750,~ -code-creation,LazyCompile,0x1e4e34598f00,1364,"execute /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:198",0x140cf21604b8,~ -code-creation,LazyCompile,0x1e4e34599460,2539,"execute /Users/indutny/Code/indutny/node-spdy/lib/spdy/parser.js:198",0x140cf21604b8,* -tick,0x10011b898,0x7fff5fbfe8d0,0,0x102019b80,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430a8e0,0x7fff5fbfeaf8,0,0x1e4e343a952f,0,0x1e4e34571fff,0x1e4e343a99dd,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e34599e60,290,"utils.zwrap /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:112",0x140cf210a070,* -code-creation,Function,0x1e4e34599fa0,516," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:738",0x3d279740bb0,~ -code-creation,LazyCompile,0x1e4e3459a1c0,1280,"_writeData /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:719",0x140cf21d4a48,~ -tick,0x1001d7a7f,0x7fff5fbfdf30,0,0x0,2,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e34572f86,0x1e4e343bb1de,0x1e4e343bbb1d,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3459a6c0,2208,"_writeData /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:719",0x140cf21d4a48,* -code-creation,LazyCompile,0x1e4e3459af60,400,"abortIncoming http.js:1659",0x140cf21844c8,* -tick,0x10010d3e6,0x7fff5fbfeb50,0,0x100014454,0,0x1e4e343b70b6,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e343e7780,436," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x140cf21d3eb0, -tick,0x100151631,0x7fff5fbfda20,0,0x7fff5fbfdaa0,2,0x1e4e3457b6a6,0x1e4e343e8cc4,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,Function,0x1e4e3459b100,252," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:689",0x3d279741bf8,~ -code-creation,LazyCompile,0x1e4e3459b200,1028,"destroy /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:665",0x140cf21d46d8,~ -code-creation,LazyCompile,0x1e4e3459b620,1841,"destroy /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:665",0x140cf21d46d8,* -tick,0x1001a8a8c,0x7fff5fbfe9a0,0,0x0,1 -tick,0x100261bb0,0x7fff5fbfeb00,0,0x7fff5fbfeb30,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100293f2e,0x7fff5fbfea00,0,0x2e9dafd056a9,2,0x1e4e3457b225,0x1e4e343aa5fb,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3459bd60,1004,"writeUInt16 buffer.js:881",0xe6623627d8,~ -code-creation,LazyCompile,0x1e4e3459c160,1573,"writeUInt16 buffer.js:881",0xe6623627d8,* -code-creation,LazyCompile,0x1e4e3459c7a0,660,"dataFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:214",0x140cf21588a0,~ -code-creation,LazyCompile,0x1e4e3459ca40,1633,"dataFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:214",0x140cf21588a0,* -tick,0x1e4e34315061,0x7fff5fbfedc0,0,0x7fff5fbfee10,0,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002bf2d0,0x7fff5fbfea90,0,0x101009400,0,0x1e4e3455a80b,0x1e4e34588925,0x1e4e343b6fcf,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34554cbc,0x7fff5fbfec20,0,0x9be4f273f9,0,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff8ddd3325,0x7fff5fbff3e8,0,0x7fff8ddd33db,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3459d0c0,400,"abortIncoming http.js:1659",0x140cf21844c8,* -tick,0x100117c07,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d1d,0x7fff5fbff2c8,0,0x0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x7fff911dbd12,0x7fff5fbff0d8,0,0x0,0 -tick,0x10012ec00,0x7fff5fbfebb0,0,0x7fff5fbfebd0,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456f402,0x7fff5fbfecc0,0,0x140cf21a8751,0,0x1e4e34524da6,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34533c74,0x7fff5fbfebc0,0,0x1e4e343e9061,0,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e34572f86,0x1e4e343bb1de,0x1e4e343bbb1d,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x1001737be,0x7fff5fbfed00,0,0x7fff00000001,0,0x1e4e3431b547,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253af7,0x7fff5fbfeae0,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3432959b,0x7fff5fbfed98,0,0x1e4e343ab323,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608bc,0x7fff5fbfef10,0,0x1e53d4e700000027,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3459d260,400,"abortIncoming http.js:1659",0x140cf21844c8,* -tick,0x10012ebf7,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011c0a3,0x7fff5fbff290,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100038f00,0x7fff5fbff3c0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x100046a63,0x7fff5fbfed10,0,0x100639558,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1001a0741,0x7fff5fbfebf0,0,0x7fff5fbfec40,0,0x1e4e3455f4b2,0x1e4e343e7b53,0x1e4e343e2ace,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100279be0,0x7fff5fbfe608,0,0x10027558d,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332fa7,0x7fff5fbfec68,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026b430,0x7fff5fbfea30,0,0x7fff5fbfead0,0,0x1e4e3455f4b2,0x1e4e343a9873,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x100253b67,0x7fff5fbff0c0,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e3459d400,400,"abortIncoming http.js:1659",0x140cf21844c8,* -tick,0x100117b90,0x7fff5fbff1c0,0,0x0,4 -tick,0x100255025,0x7fff5fbfe5f0,0,0x11e9a5d2e9d9,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e34572f86,0x1e4e343bb1de,0x1e4e343bbb1d,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,Function,0x1e4e3459d5a0,748,"_tickListener /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:39",0x3d279777a08,~ -code-creation,LazyCompile,0x1e4e3459d8a0,624,"tick /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:36",0x140cf21cf518,~ -code-creation,LazyCompile,0x1e4e3459db20,882,"tick /Users/indutny/Code/indutny/node-spdy/lib/spdy/scheduler.js:36",0x140cf21cf518,* -tick,0x10024af69,0x7fff5fbfe9b8,0,0x11e9a5d3a6e1,0,0x1e4e3455a74d,0x1e4e343b7285,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f3cd2,0x7fff5fbfef50,0,0x7fff5fbfef60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10000b195,0x7fff5fbfee10,0,0x7fff5fbfee80,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff9199f4aa,0x7fff5fbfed08,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x7fff911db013,0x7fff5fbfec38,0,0x1000c6821,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x100051054,0x7fff5fbfed10,0,0xaabee816aa1,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10011ff67,0x7fff5fbfeec0,0,0x7fff5fbfefe8,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1000df23e,0x7fff5fbfec38,0,0xcc5c7903237b4c37,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10019cd44,0x7fff5fbfef30,0,0x1003d3d67,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x100176007,0x7fff5fbfef88,0,0x0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10010d44e,0x7fff5fbff020,0,0x10002d7a6,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10011c081,0x7fff5fbff060,0,0x7fff5fbff0a0,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1000f93b3,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x1000bd2f2,0x7fff5fbfee50,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x10011a1ce,0x7fff5fbfefc0,0,0x102023a70,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3432e78a -tick,0x100395206,0x7fff5fbfec28,0,0x100051ee8,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34325595,0x7fff5fbfebd8,0,0x1e4e34551c75,0,0x1e4e3455a43d,0x1e4e345710e0,0x1e4e3459dd67,0x1e4e343e8c98,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019e700,0x7fff5fbfec48,0,0x100175d7e,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b30,0x7fff5fbfe680,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x1001451c7,0x7fff5fbfea90,0,0x101009400,0,0x1e4e3455c886,0x1e4e3458e112,0x1e4e343b67b1,0x1e4e345522ca,0x1e4e3458dcc5,0x1e4e343bbccd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x1e4e3430c7ed,0x7fff5fbfef48,0,0x1e4e34570e70,0,0x1e4e343e6785,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -code-creation,LazyCompile,0x1e4e343b5aa0,380,"abortIncoming http.js:1659",0x140cf21844c8, -tick,0x1e4e34311310,0x7fff5fbff058,0,0x0,0 -tick,0x1e4e3451c5e9,0x7fff5fbfed30,0,0x1e4e345949e5,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002618f1,0x7fff5fbfe8d0,0,0x7fff5fbfe910,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e343a97c8,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x1e4e3454a4a4,0x7fff5fbfee60,0,0x1e4e34587592,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431b405,0x7fff5fbfed90,0,0x1e4e34557b9c,0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daa49,0x7fff5fbfec00,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34583eea,0x7fff5fbfeec0,0,0x37ec2edd43f1,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34324651,0x7fff5fbfeb90,0,0x140cf21cc719,0,0x1e4e343b77cb,0x1e4e34588e95,0x1e4e343b704c,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100117b70,0x7fff5fbfe9a8,0,0x10000b1a2,0,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e34572f86,0x1e4e343bb1de,0x1e4e343bbb1d,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x100118068,0x7fff5fbfeb70,1,0x10000af1c,4,0x1e4e3457d1a3,0x1e4e343ab438,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34321001,0x7fff5fbfed48,0,0xe662304121,0,0x1e4e3454dadf,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9c5e,0x7fff5fbfeca0,0,0x7fff5fbfecd0,0,0x1e4e3435b51c,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024eec4,0x7fff5fbfeb60,0,0x11e9a5cd28c9,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343150f9,0x7fff5fbfebe0,0,0x140cf2132349,0,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e34572f86,0x1e4e343bb1de,0x1e4e343bbb1d,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x100038f00,0x7fff5fbff3c0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x1001a8d7c,0x7fff5fbfedb0,0,0x0,1 -tick,0x10024edf7,0x7fff5fbfed90,0,0x37ec2ed9f041,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3432e78a -tick,0x1002be791,0x7fff5fbfec70,0,0x140cf21607e9,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343269ad,0x7fff5fbfed68,0,0x1e4e343e29d0,0,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011d351,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010cb19,0x7fff5fbfed20,0,0x1,0,0x1e4e3454e2fc,0x1e4e3439950b -tick,0x10015de10,0x7fff5fbfedd0,0,0x1005ff800,2 -code-creation,LazyCompile,0x1e4e3459dea0,864,"startup.processNextTick.process._tickCallback node.js:233",0xe66235c580,~ -code-creation,LazyCompile,0x1e4e3459e200,1432,"startup.processNextTick.process._tickCallback node.js:233",0xe66235c580,* -tick,0x1e4e34555d1e,0x7fff5fbfe9a8,0,0xaabee804139,0,0x1e4e34564a8c,0x1e4e343a947e,0x1e4e34571fff,0x1e4e343a99dd,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be642,0x7fff5fbfe7f0,0,0x102023aa8,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10018e941,0x7fff5fbff280,0,0x0,4 -tick,0x7fff911edebb,0x7fff5fbfeb90,0,0x7fff5fbfec10,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10010ca31,0x7fff5fbfeae0,0,0x7fff5fbfeb40,0,0x1e4e3454e2fc,0x1e4e343e7bf4,0x1e4e343e2ace,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551cbf,0x7fff5fbfec70,0,0x101009400,0,0x1e4e3458dcc5,0x1e4e343bbccd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b103f,0x7fff5fbfe830,0,0x7fff5fbfe8d0,0,0x1e4e343e435a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e3458dcc5,0x1e4e343bbccd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfe8c0,0,0x263e5f570000000a,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34529a25,0x7fff5fbfef18,0,0x1e4e3456dbeb,0,0x1e4e34399744 -tick,0x1000c5bd8,0x7fff5fbfee30,0,0x10060d3b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001709b3,0x7fff5fbfeda0,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c5f6,0x7fff5fbfed00,0,0x103020174,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a2a74,0x7fff5fbfec90,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de0a5,0x7fff5fbfed60,0,0x1000c1d36,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10026089a,0x7fff5fbfedb0,0,0x7fff5fbfedf0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000fa4c0,0x7fff5fbfeb80,0,0x100a137f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010e871,0x7fff5fbff030,0,0x7fff5fbff090,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfed78,0,0x7fff911f4105,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd2e9,0x7fff5fbfed20,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9127cc08,0x7fff5fbfedd8,0,0x7fff911f418d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f973d,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100315091,0x7fff5fbfeed0,0,0x7fff5fbfef00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3451e759,0x7fff5fbfebf0,0,0x7fff5fbfec50,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002491a0,0x7fff5fbfea68,0,0x1002be632,0,0x1e4e3455c3de,0x1e4e34588883,0x1e4e343b6fcf,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100176007,0x7fff5fbfeab8,0,0x0,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100255035,0x7fff5fbfec10,0,0x11e9a4d0bbd9,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343079f0,0x7fff5fbfe7f8,0,0x1e4e34322a85,0,0x1e4e34320c96,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e3458dcc5,0x1e4e343bbccd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34554965,0x7fff5fbfeaa8,0,0x101009498,0,0x1e4e343a8ee9,0x1e4e34579c64,0x1e4e343a97c8,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e343e67b4,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100039cf7,0x7fff5fbfeb70,0,0x7fff5fbfebb0,0,0x1e4e343b70b6,0x1e4e3455287e,0x1e4e343e2ab8,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027a901,0x7fff5fbfec20,0,0x11e9a4d52a69,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912107dd,0x7fff5fbff250,0,0x0,4 -tick,0x10011477b,0x7fff5fbff1c0,0,0x0,4 -tick,0x10028dd40,0x7fff5fbfd630,0,0x10061b910,2,0x1e4e343e7bd6,0x1e4e343e2ace,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3459e7a0,1424,"join native array.js:410",0xe662314af0,~ -code-creation,LazyCompile,0x1e4e34359160,1424,"join native array.js:410",0xe662314af0, -code-creation,LazyCompile,0x1e4e3459ed40,716,"parseHeader /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/generic.js:6",0x140cf214f350,~ -tick,0x1001e1000,0x7fff5fbfe220,0,0x5fbfe298,2,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3459f020,1882,"parseHeader /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/generic.js:6",0x140cf214f350,* -code-creation,Function,0x1e4e3459f780,800," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:34",0x3d2797ab660,~ -code-creation,LazyCompile,0x1e4e3459faa0,1692,"execute /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:27",0x140cf2157ff0,~ -code-creation,LazyCompile,0x1e4e345a0140,2604,"execute /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:27",0x140cf2157ff0,* -code-creation,LazyCompile,0x1e4e345a0b80,836,"parseSynHead /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:10",0x140cf21568d0,~ -tick,0x1001eda25,0x7fff5fbfe490,0,0x7fff5fbfe4f0,2,0x1e4e345a07d8,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,Stub,0x1e4e345a0ee0,2550,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e345a18e0,1624,"parseSynHead /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/protocol.js:10",0x140cf21568d0,* -code-creation,Function,0x1e4e345a1f40,216,"onerror /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:337",0x3d2797ad128,~ -code-creation,Function,0x1e4e345a2020,204," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:375",0x3d2797ad218,~ -code-creation,LazyCompile,0x1e4e345a2100,2460," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:324",0x140cf21d1b50,~ -tick,0x100366942,0x7fff5fbfe470,0,0x7fff5fbfe4e0,2,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345a2aa0,4928," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:324",0x140cf21d1b50,* -code-creation,Function,0x1e4e345a3de0,244," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:556",0x3d2797af7e8,~ -code-creation,Function,0x1e4e345a3ee0,312," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:554",0x3d2797af8e0,~ -code-creation,Function,0x1e4e345a4020,392," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:562",0x3d2797af9c8,~ -code-creation,LazyCompile,0x1e4e345a41c0,1340,"Stream /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:493",0x140cf21d2748,~ -code-creation,Stub,0x1e4e345a4700,1150,"RecordWriteStub" -code-creation,Stub,0x1e4e345a4b80,2508,"RecordWriteStub" -code-creation,Stub,0x1e4e345a5560,2508,"RecordWriteStub" -tick,0x100149e9a,0x7fff5fbfe130,0,0x102024960,2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,Stub,0x1e4e345a5f40,1168,"RecordWriteStub" -code-creation,Stub,0x1e4e345a63e0,1144,"RecordWriteStub" -code-creation,Stub,0x1e4e345a6860,1146,"RecordWriteStub" -code-creation,Stub,0x1e4e345a6ce0,2495,"RecordWriteStub" -code-creation,Stub,0x1e4e345a76a0,2500,"RecordWriteStub" -code-creation,Stub,0x1e4e345a8080,1140,"RecordWriteStub" -code-creation,Stub,0x1e4e345a8500,2483,"RecordWriteStub" -code-creation,Stub,0x1e4e345a8ec0,2488,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e345a9880,9398,"Stream /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:493",0x140cf21d2748,* -code-creation,KeyedStoreIC,0x1e4e345abd40,130,"" -code-creation,KeyedStoreIC,0x1e4e345abd40,130,"args_count: 0" -code-creation,Function,0x1e4e345abde0,380,"abortIncoming http.js:1659",0x3d2797b0f58,~ -code-creation,Function,0x1e4e345abf60,328,"serverSocketCloseListener http.js:1668",0x3d2797b1080,~ -code-creation,Function,0x1e4e345ac0c0,208," http.js:1681",0x3d2797b1168,~ -code-creation,Function,0x1e4e345ac1a0,224," http.js:1699",0x3d2797b1258,~ -code-creation,Function,0x1e4e345ac280,968,"socket.ondata http.js:1703",0x3d2797b13b0,~ -code-creation,Function,0x1e4e345ac660,780,"socket.onend http.js:1732",0x3d2797b14d0,~ -code-creation,Function,0x1e4e345ac980,588,"parser.onIncoming.res._expect_continue http.js:1775",0x3d2797b15e0,~ -code-creation,Function,0x1e4e345acbe0,1204,"parser.onIncoming http.js:1758",0x3d2797b1728,~ -code-creation,LazyCompile,0x1e4e345ad0a0,1456,"connectionListener http.js:1654",0x140cf2184e28,~ -tick,0x100366512,0x7fff5fbfe2b0,0,0x7fff5fbfe590,2,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,Stub,0x1e4e345ad660,1134,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e345adae0,4486,"connectionListener http.js:1654",0x140cf2184e28,* -code-creation,Function,0x1e4e345aec80,436," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:593",0x3d2797b2728,~ -code-creation,LazyCompile,0x1e4e345aee40,876,"init /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:589",0x140cf21d3fe8,~ -code-creation,Stub,0x1e4e345af1c0,2476,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e345afb80,1792,"init /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:589",0x140cf21d3fe8,* -code-creation,Function,0x1e4e345b0280,320," /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:812",0x3d2797b2ff8,~ -code-creation,LazyCompile,0x1e4e345b03c0,976,"_recv /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:798",0x140cf21d4fc0,~ -tick,0x10036c485,0x7fff5fbfe370,0,0x10281d120,2,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345b07a0,1980,"_recv /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:798",0x140cf21d4fc0,* -tick,0x10024edc5,0x7fff5fbfeb80,0,0x37ec2edbf979,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ed81,0x7fff5fbff040,0,0x1e0134551c75,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LazyCompile,0x1e4e345b0f60,672,"IncomingMessage http.js:265",0x140cf2182ee8,~ -tick,0x100309749,0x7fff5fbfebc8,0,0x2e9dafd12139,2,0x1e4e345916d7,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,Stub,0x1e4e345b1200,1140,"RecordWriteStub" -code-creation,Stub,0x1e4e345b1680,1144,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e345b1b00,4279,"IncomingMessage http.js:265",0x140cf2182ee8,* -code-creation,Function,0x1e4e345b2bc0,260,"onfinish /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:243",0x3d2797b4858,~ -code-creation,LazyCompile,0x1e4e345b2ce0,796,"onrequest /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:232",0x140cf21d3438,~ -code-creation,Stub,0x1e4e345b3000,2483,"RecordWriteStub" -code-creation,Stub,0x1e4e345b39c0,2512,"RecordWriteStub" -code-creation,LazyCompile,0x1e4e345b43a0,2774,"onrequest /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:232",0x140cf21d3438,* -tick,0x1002e6b31,0x7fff5fbfcfa0,0,0x5b,2,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,Function,0x1e4e345b4e80,448,"stringify /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:73",0x3d2797b5318,~ -code-creation,Function,0x1e4e345b5040,236," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:89",0x3d2797b5408,~ -code-creation,Function,0x1e4e345b5140,516," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:98",0x3d2797b5500,~ -code-creation,Function,0x1e4e345b5360,544," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:102",0x3d2797b5628,~ -code-creation,Function,0x1e4e345b5580,608," /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:115",0x3d2797b5718,~ -code-creation,LazyCompile,0x1e4e345b57e0,1072,"headersToDict /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:72",0x140cf2157ce8,~ -code-creation,LazyCompile,0x1e4e345b5c20,2054,"headersToDict /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:72",0x140cf2157ce8,* -tick,0x1001a47a5,0x7fff5fbfe188,0,0x7fff5fbfea70,2,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LazyCompile,0x1e4e345b6440,1896,"OutgoingMessage.end http.js:762",0x140cf2186af8,~ -tick,0x100353d30,0x7fff5fbfe538,0,0x1003535b7,2,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LazyCompile,0x1e4e345b6bc0,4676,"OutgoingMessage.end http.js:762",0x140cf2186af8,* -code-creation,LazyCompile,0x1e4e345b7e20,1152,"OutgoingMessage.write http.js:703",0x140cf2186890,~ -code-creation,LazyCompile,0x1e4e345b82a0,2480,"OutgoingMessage.write http.js:703",0x140cf2186890,* -tick,0x10026d8ac,0x7fff5fbfca20,0,0x7fff5fbfcaa0,2,0x1e4e343e436a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LazyCompile,0x1e4e345b8c60,2196,"_writeData /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:719",0x140cf21d4a48,* -tick,0x1e4e3430c2e5,0x7fff5fbff568,0,0x1e4e343b64ed,0,0x1e4e343e412b,0x1e4e3459e4aa -code-creation,LazyCompile,0x1e4e345b9500,600,"freeParser http.js:1276",0x140cf2183828,~ -code-creation,LazyCompile,0x1e4e345b9760,1643,"freeParser http.js:1276",0x140cf2183828,* -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34571005,0x7fff5fbfee78,0,0x11e9a4dcdd99,0,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100254685,0x7fff5fbfea40,0,0x162355501,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025470e,0x7fff5fbfe910,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343258a8,0x7fff5fbfef00,0,0x1e4e34551d37,0,0x1e4e3455a43d,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3456be81,0x7fff5fbfedc0,0,0x140cf21cf689,0,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345b9de0,1633,"dataFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:214",0x140cf21588a0,* -tick,0x1e4e3454d181,0x7fff5fbfeba0,0,0x10061dce0,0,0x1e4e343ab323,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a7841,0x7fff5fbfec60,0,0x7fff5fbfece0,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3435cd03,0x7fff5fbfeb48,0,0x1e4e343e7832,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87ce,0x7fff5fbfed80,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34399383 -tick,0x1002608ef,0x7fff5fbfee30,0,0x224a48af00000003,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454223a,0x7fff5fbff090,0,0x9be4f22e49,0,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019bd8d,0x7fff5fbfecf0,0,0x1002c3a80,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3ef,0x7fff5fbfeb00,0,0x15,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455f469,0x7fff5fbfebc8,0,0xaabee819c11,0,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfe8c8,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001711bb,0x7fff5fbff0e0,0,0x0,0 -tick,0x10010cb19,0x7fff5fbfe9a0,0,0x7fff5fbfea90,0,0x1e4e343a9270,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001500ac,0x7fff5fbfec40,0,0x7fff5fbfec90,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x100338d20,0x7fff5fbfe690,0,0x0,1 -tick,0x100243df1,0x7fff5fbfe760,0,0x0,1 -tick,0x10023e01d,0x7fff5fbfe738,0,0x0,1 -tick,0x10023a025,0x7fff5fbfe600,0,0x0,1 -tick,0x10023c344,0x7fff5fbfe710,0,0x0,1 -tick,0x10023a0b9,0x7fff5fbfe6b0,0,0x0,1 -tick,0x10023c672,0x7fff5fbfe4f0,0,0x0,1 -tick,0x1002fee9b,0x7fff5fbfe630,0,0x0,1 -tick,0x1002358f2,0x7fff5fbfe570,0,0x0,1 -tick,0x1002359b1,0x7fff5fbfe570,0,0x0,1 -tick,0x100200d3b,0x7fff5fbfeb40,0,0x101009400,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345b7e20,194,"" -code-creation,LoadIC,0x1e4e345b7e20,194,"" -code-creation,KeyedLoadIC,0x1e4e345b7f00,130,"" -code-creation,KeyedLoadIC,0x1e4e345b7f00,130,"args_count: 0" -code-creation,StoreIC,0x1e4e345b7fa0,189,"_idleStart" -code-creation,StoreIC,0x1e4e345b7fa0,189,"_idleStart" -code-creation,StoreIC,0x1e4e345b8060,185,"_pendingWriteReqs" -code-creation,StoreIC,0x1e4e345b8060,185,"_pendingWriteReqs" -code-creation,StoreIC,0x1e4e345b8120,185,"_bytesDispatched" -code-creation,StoreIC,0x1e4e345b8120,185,"_bytesDispatched" -code-creation,LoadIC,0x1e4e345b81e0,138,"_buffer" -code-creation,LoadIC,0x1e4e345b81e0,138,"_buffer" -code-creation,LoadIC,0x1e4e345b6440,170,"_pusher" -code-creation,LoadIC,0x1e4e345b6440,170,"_pusher" -code-creation,CallIC,0x1e4e345b6500,492,"encOut" -code-creation,StoreIC,0x1e4e345b6700,185,"_needDrain" -code-creation,StoreIC,0x1e4e345b6700,185,"_needDrain" -code-creation,CallIC,0x1e4e345b67c0,462,"makeFastBuffer" -code-creation,KeyedStoreIC,0x1e4e345b69a0,130,"" -code-creation,KeyedStoreIC,0x1e4e345b69a0,130,"args_count: 0" -code-creation,LoadIC,0x1e4e345b6a40,134,"_framer" -code-creation,LoadIC,0x1e4e345b6a40,134,"_framer" -code-creation,LoadIC,0x1e4e345b6ae0,137,"id" -code-creation,LoadIC,0x1e4e345b6ae0,137,"id" -code-creation,CallIC,0x1e4e345b2bc0,187,"dataFrame" -code-creation,CallIC,0x1e4e345b2c80,187,"writeUInt32BE" -code-creation,CallIC,0x1e4e345b2d40,187,"writeUInt8" -code-creation,LoadIC,0x1e4e345b2e00,134,"connection" -code-creation,LoadIC,0x1e4e345b2e00,134,"connection" -code-creation,LoadIC,0x1e4e345b2ea0,137,"scheduler" -code-creation,LoadIC,0x1e4e345b2ea0,137,"scheduler" -code-creation,CallIC,0x1e4e345b2f40,187,"schedule" -code-creation,CallIC,0x1e4e345b8c60,655,"push" -code-creation,CallIC,0x1e4e345b8f00,187,"tick" -code-creation,CallIC,0x1e4e345b8fc0,187,"_unlock" -code-creation,StoreIC,0x1e4e345b9080,189,"locked" -code-creation,StoreIC,0x1e4e345b9080,189,"locked" -code-creation,KeyedStoreIC,0x1e4e345b9140,208,"data" -code-creation,KeyedStoreIC,0x1e4e345b9140,208,"data" -code-creation,StoreIC,0x1e4e345b9220,256,"listener" -code-creation,StoreIC,0x1e4e345b9220,256,"listener" -code-creation,LoadIC,0x1e4e345b9320,134,"_events" -code-creation,LoadIC,0x1e4e345b9320,134,"_events" -code-creation,KeyedLoadIC,0x1e4e345b93c0,158,"error" -code-creation,KeyedLoadIC,0x1e4e345b93c0,158,"error" -code-creation,KeyedStoreIC,0x1e4e345b9460,208,"error" -code-creation,KeyedStoreIC,0x1e4e345b9460,208,"error" -code-creation,LoadIC,0x1e4e345b9540,284,"" -code-creation,LoadIC,0x1e4e345b9540,284,"" -code-creation,LoadIC,0x1e4e345b9660,134,"_ended" -code-creation,LoadIC,0x1e4e345b9660,134,"_ended" -code-creation,LoadIC,0x1e4e345b0f60,134,"length" -code-creation,LoadIC,0x1e4e345b0f60,134,"length" -code-creation,LoadIC,0x1e4e345b1000,134,"_queue" -code-creation,LoadIC,0x1e4e345b1000,134,"_queue" -code-creation,CallIC,0x1e4e345b10a0,217,"_process" -code-creation,StoreIC,0x1e4e345b0280,189,"_offset" -code-creation,StoreIC,0x1e4e345b0280,189,"_offset" -code-creation,LoadIC,0x1e4e345b0340,134,"_events" -code-creation,LoadIC,0x1e4e345b0340,134,"_events" -code-creation,KeyedLoadIC,0x1e4e345b03e0,158,"data" -code-creation,KeyedLoadIC,0x1e4e345b03e0,158,"data" -code-creation,LoadIC,0x1e4e345b0480,134,"domain" -code-creation,LoadIC,0x1e4e345b0480,134,"domain" -code-creation,StoreIC,0x1e4e345b0520,185,"_processing" -code-creation,StoreIC,0x1e4e345b0520,185,"_processing" -code-creation,CallIC,0x1e4e345b05e0,217,"_process" -code-creation,CallIC,0x1e4e345b4e80,248,"pop" -code-creation,CallIC,0x1e4e345b4f80,492,"write" -code-creation,LoadIC,0x1e4e345b5180,138,"_offset" -code-creation,LoadIC,0x1e4e345b5180,138,"_offset" -code-creation,LoadIC,0x1e4e345b5220,138,"_chunkSize" -code-creation,LoadIC,0x1e4e345b5220,138,"_chunkSize" -code-creation,StoreIC,0x1e4e345b52c0,185,"_processing" -code-creation,StoreIC,0x1e4e345b52c0,185,"_processing" -code-creation,LoadIC,0x1e4e345b5380,284,"" -code-creation,LoadIC,0x1e4e345b5380,284,"" -tick,0x1003038e4,0x7fff5fbfed10,0,0x7fff5fbfef88,0,0x1e4e3439922e -code-creation,LoadIC,0x1e4e345b54a0,138,"_offset" -code-creation,LoadIC,0x1e4e345b54a0,138,"_offset" -code-creation,LoadIC,0x1e4e345b5540,138,"_chunkSize" -code-creation,LoadIC,0x1e4e345b5540,138,"_chunkSize" -code-creation,KeyedStoreIC,0x1e4e345b55e0,208,"data" -code-creation,KeyedStoreIC,0x1e4e345b55e0,208,"data" -code-creation,KeyedLoadIC,0x1e4e345b56c0,158,"error" -code-creation,KeyedLoadIC,0x1e4e345b56c0,158,"error" -code-creation,KeyedStoreIC,0x1e4e345b5760,208,"error" -code-creation,KeyedStoreIC,0x1e4e345b5760,208,"error" -code-creation,StoreIC,0x1e4e345b5840,185,"_flush" -code-creation,StoreIC,0x1e4e345b5840,185,"_flush" -code-creation,KeyedLoadIC,0x1e4e345b5900,130,"" -code-creation,KeyedLoadIC,0x1e4e345b5900,130,"args_count: 0" -code-creation,CallIC,0x1e4e345b59a0,187,"readUInt32BE" -code-creation,CallIC,0x1e4e345b5a60,187,"slice" -code-creation,CallIC,0x1e4e345b5b20,200,"slice" -code-creation,CallIC,0x1e4e345aec80,197,"toString" -code-creation,CallIC,0x1e4e345aed60,205,"toLowerCase" -code-creation,CallIC,0x1e4e345aee40,492,"utf8Slice" -code-creation,CallIC,0x1e4e345af040,205,"replace" -code-creation,LoadIC,0x1e4e345af120,147,"lastMatchInfoOverride" -code-creation,LoadIC,0x1e4e345af120,147,"lastMatchInfoOverride" -code-creation,LoadIC,0x1e4e345a0b80,147,"lastMatchInfo" -code-creation,LoadIC,0x1e4e345a0b80,147,"lastMatchInfo" -code-creation,StoreIC,0x1e4e345a0c20,226,"headers" -code-creation,StoreIC,0x1e4e345a0c20,226,"headers" -code-creation,StoreIC,0x1e4e345a0d20,304,"url" -code-creation,StoreIC,0x1e4e345a0d20,304,"url" -code-creation,LoadIC,0x1e4e3459dea0,134,"_events" -code-creation,LoadIC,0x1e4e3459dea0,134,"_events" -code-creation,KeyedLoadIC,0x1e4e3459df40,160,"frame" -code-creation,KeyedLoadIC,0x1e4e3459df40,160,"frame" -code-creation,StoreIC,0x1e4e3459dfe0,390,"_events" -code-creation,StoreIC,0x1e4e3459dfe0,390,"_events" -code-creation,StoreIC,0x1e4e345abd40,390,"_maxListeners" -code-creation,StoreIC,0x1e4e345abd40,390,"_maxListeners" -code-creation,LoadIC,0x1e4e345abee0,134,"_events" -code-creation,LoadIC,0x1e4e345abee0,134,"_events" -code-creation,KeyedLoadIC,0x1e4e345abf80,158,"end" -code-creation,KeyedLoadIC,0x1e4e345abf80,158,"end" -code-creation,CallIC,0x1e4e345ac020,247,"on" -code-creation,CallIC,0x1e4e345ac120,257,"emit" -code-creation,KeyedStoreIC,0x1e4e345ac240,130,"" -code-creation,KeyedStoreIC,0x1e4e345ac240,130,"args_count: 0" -code-creation,LoadIC,0x1e4e345ac2e0,134,"_events" -code-creation,LoadIC,0x1e4e345ac2e0,134,"_events" -code-creation,KeyedStoreIC,0x1e4e345ac380,130,"" -code-creation,KeyedStoreIC,0x1e4e345ac380,130,"args_count: 0" -code-creation,StoreIC,0x1e4e345ac420,185,"type" -code-creation,StoreIC,0x1e4e345ac420,185,"type" -code-creation,StoreIC,0x1e4e345ac4e0,185,"paused" -code-creation,StoreIC,0x1e4e345ac4e0,185,"paused" -code-creation,StoreIC,0x1e4e345ac5a0,185,"waiting" -code-creation,StoreIC,0x1e4e345ac5a0,185,"waiting" -code-creation,LoadIC,0x1e4e345ac660,134,"waiting" -code-creation,LoadIC,0x1e4e345ac660,134,"waiting" -code-creation,LoadIC,0x1e4e345ac700,134,"buffered" -code-creation,LoadIC,0x1e4e345ac700,134,"buffered" -code-creation,LoadIC,0x1e4e345ac7a0,147,"undefined" -code-creation,LoadIC,0x1e4e345ac7a0,147,"undefined" -code-creation,CallIC,0x1e4e345ac840,187,"_write" -code-creation,StoreIC,0x1e4e345ac900,189,"locked" -code-creation,StoreIC,0x1e4e345ac900,189,"locked" -code-creation,LoadIC,0x1e4e345ac9c0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345ac9c0,138,"lockBuffer" -code-creation,CallIC,0x1e4e345aca60,189,"shift" -code-creation,LoadIC,0x1e4e345acb20,134,"_ended" -code-creation,LoadIC,0x1e4e345acb20,134,"_ended" -code-creation,LoadIC,0x1e4e345acbc0,157,"Buffer" -code-creation,LoadIC,0x1e4e345acbc0,157,"Buffer" -code-creation,CallIC,0x1e4e345acc60,157,"isBuffer" -code-creation,LoadIC,0x1e4e345acd00,134,"_queue" -code-creation,LoadIC,0x1e4e345acd00,134,"_queue" -tick,0x7fff9199e0e6,0x7fff5fbfeb18,1,0x100018380,4,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,CallIC,0x1e4e345acda0,287,"emit" -code-creation,LoadIC,0x1e4e345acec0,138,"_buffer" -code-creation,LoadIC,0x1e4e345acec0,138,"_buffer" -code-creation,StoreIC,0x1e4e345acf60,189,"_offset" -code-creation,StoreIC,0x1e4e345acf60,189,"_offset" -code-creation,CallIC,0x1e4e345ad020,287,"emit" -code-creation,LoadIC,0x1e4e345ad140,134,"domain" -code-creation,LoadIC,0x1e4e345ad140,134,"domain" -code-creation,LoadIC,0x1e4e345ad1e0,134,"length" -code-creation,LoadIC,0x1e4e345ad1e0,134,"length" -code-creation,CallIC,0x1e4e345ad280,277,"removeAllListeners" -code-creation,KeyedLoadIC,0x1e4e345ad3a0,158,"data" -code-creation,KeyedLoadIC,0x1e4e345ad3a0,158,"data" -code-creation,StoreIC,0x1e4e345ad440,185,"_flush" -code-creation,StoreIC,0x1e4e345ad440,185,"_flush" -code-creation,StoreIC,0x1e4e345ad500,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345ad500,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e3459bd60,191,"_writeCalled" -code-creation,StoreIC,0x1e4e3459bd60,191,"_writeCalled" -code-creation,StoreIC,0x1e4e3459be20,191,"cycleEncryptedPullLock" -code-creation,StoreIC,0x1e4e3459be20,191,"cycleEncryptedPullLock" -code-creation,StoreIC,0x1e4e3459bee0,191,"cycleCleartextPullLock" -code-creation,StoreIC,0x1e4e3459bee0,191,"cycleCleartextPullLock" -code-creation,LoadIC,0x1e4e3459bfa0,170,"_pusher" -code-creation,LoadIC,0x1e4e3459bfa0,170,"_pusher" -code-creation,StoreIC,0x1e4e3459c060,191,"cycleCleartextPushLock" -code-creation,StoreIC,0x1e4e3459c060,191,"cycleCleartextPushLock" -code-creation,CallIC,0x1e4e345a3de0,287,"emit" -code-creation,LoadIC,0x1e4e345a3f00,134,"domain" -code-creation,LoadIC,0x1e4e345a3f00,134,"domain" -code-creation,LoadIC,0x1e4e345a3fa0,134,"writable" -code-creation,LoadIC,0x1e4e345a3fa0,134,"writable" -code-creation,CallIC,0x1e4e345a4040,187,"_write" -code-creation,CallIC,0x1e4e345a4100,492,"writeBuffer" -code-creation,LoadIC,0x1e4e345a4300,134,"_pendingWriteReqs" -code-creation,LoadIC,0x1e4e345a4300,134,"_pendingWriteReqs" -code-creation,LoadIC,0x1e4e345a43a0,134,"_bytesDispatched" -code-creation,LoadIC,0x1e4e345a43a0,134,"_bytesDispatched" -code-creation,CallIC,0x1e4e345a4440,492,"encPending" -code-creation,LoadIC,0x1e4e345a4640,134,"_needDrain" -code-creation,LoadIC,0x1e4e345a4640,134,"_needDrain" -code-creation,LoadIC,0x1e4e34598ce0,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e34598ce0,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e34598d80,134,"pair" -code-creation,LoadIC,0x1e4e34598d80,134,"pair" -code-creation,LoadIC,0x1e4e34598e20,137,"cleartext" -code-creation,LoadIC,0x1e4e34598e20,137,"cleartext" -code-creation,LoadIC,0x1e4e34598ec0,137,"encrypted" -code-creation,LoadIC,0x1e4e34598ec0,137,"encrypted" -code-creation,LoadIC,0x1e4e34598f60,134,"_paused" -code-creation,LoadIC,0x1e4e34598f60,134,"_paused" -code-creation,CallIC,0x1e4e34599000,200,"copy" -code-creation,CallIC,0x1e4e345990e0,187,"close" -code-creation,LoadIC,0x1e4e345991a0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345991a0,138,"lockBuffer" -code-creation,CallIC,0x1e4e34599240,492,"write" -code-creation,LoadIC,0x1e4e34598060,138,"_buffer" -code-creation,LoadIC,0x1e4e34598060,138,"_buffer" -code-creation,CallIC,0x1e4e34598100,157,"parseHeaders" -code-creation,LoadIC,0x1e4e345981a0,138,"headers" -code-creation,LoadIC,0x1e4e345981a0,138,"headers" -code-creation,CallIC,0x1e4e34598240,257,"emit" -code-creation,LoadIC,0x1e4e345a1f40,254,"" -code-creation,LoadIC,0x1e4e345a1f40,254,"" -tick,0x1e4e345a2b49,0x7fff5fbfecf0,0,0x7fff5fbfee70,0,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345a2040,164,"" -code-creation,LoadIC,0x1e4e345a2040,164,"" -code-creation,LoadIC,0x1e4e345a2100,254,"" -code-creation,LoadIC,0x1e4e345a2100,254,"" -code-creation,LoadIC,0x1e4e345a2200,254,"" -code-creation,LoadIC,0x1e4e345a2200,254,"" -code-creation,LoadIC,0x1e4e345a2300,224,"" -code-creation,LoadIC,0x1e4e345a2300,224,"" -code-creation,CallIC,0x1e4e345a23e0,182,"push" -code-creation,LoadIC,0x1e4e345a24a0,147,"ConvertToString" -code-creation,LoadIC,0x1e4e345a24a0,147,"ConvertToString" -code-creation,CallIC,0x1e4e345a2540,190,"Join" -code-creation,LoadIC,0x1e4e345a2600,147,"visited_arrays" -code-creation,LoadIC,0x1e4e345a2600,147,"visited_arrays" -code-creation,CallIC,0x1e4e345a26a0,190,"UseSparseVariant" -code-creation,LoadIC,0x1e4e345a2760,147,"InternalArray" -code-creation,LoadIC,0x1e4e345a2760,147,"InternalArray" -code-creation,CallIC,0x1e4e345a2800,462,"byteLength" -code-creation,LoadIC,0x1e4e345a29e0,147,"$NaN" -code-creation,LoadIC,0x1e4e345a29e0,147,"$NaN" -code-creation,CallIC,0x1e4e3459f780,492,"utf8Write" -code-creation,LoadIC,0x1e4e3459f980,224,"" -code-creation,LoadIC,0x1e4e3459f980,224,"" -code-creation,CallIC,0x1e4e3459fa60,462,"_needTickCallback" -code-creation,CallIC,0x1e4e3459fc40,205,"parseSynHead" -code-creation,CallIC,0x1e4e3459fd20,201,"inflate" -code-creation,CallIC,0x1e4e3459fe00,230,"write" -code-creation,CallIC,0x1e4e3459ff00,187,"writeUInt16BE" -code-creation,CallIC,0x1e4e3459ffc0,200,"write" -code-creation,LoadIC,0x1e4e345a00a0,134,"writable" -code-creation,LoadIC,0x1e4e345a00a0,134,"writable" -code-creation,LoadIC,0x1e4e34597060,134,"_pending" -code-creation,LoadIC,0x1e4e34597060,134,"_pending" -code-creation,LoadIC,0x1e4e34597100,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e34597100,134,"_pendingCallbacks" -code-creation,CallIC,0x1e4e345971a0,197,"cycle" -code-creation,CallIC,0x1e4e34597280,217,"_pull" -code-creation,CallIC,0x1e4e34597360,492,"clearIn" -code-creation,CallIC,0x1e4e34592d80,217,"_push" -code-creation,CallIC,0x1e4e34592e60,492,"clearOut" -code-creation,CallIC,0x1e4e3459e7a0,492,"clearPending" -code-creation,CallIC,0x1e4e3459e9a0,287,"emit" -code-creation,CallIC,0x1e4e3459eac0,277,"removeAllListeners" -tick,0x7fff911dbcfc,0x7fff5fbfeb48,0,0x7fff911f2886,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,LoadIC,0x1e4e3459ebe0,134,"_events" -code-creation,LoadIC,0x1e4e3459ebe0,134,"_events" -code-creation,LoadIC,0x1e4e3459ec80,134,"domain" -code-creation,LoadIC,0x1e4e3459ec80,134,"domain" -code-creation,StoreIC,0x1e4e3459ed20,185,"_paused" -code-creation,StoreIC,0x1e4e3459ed20,185,"_paused" -code-creation,LoadIC,0x1e4e3459ede0,254,"" -code-creation,LoadIC,0x1e4e3459ede0,254,"" -code-creation,StoreIC,0x1e4e3459c7a0,390,"_events" -code-creation,StoreIC,0x1e4e3459c7a0,390,"_events" -code-creation,LoadIC,0x1e4e3459c940,254,"" -code-creation,LoadIC,0x1e4e3459c940,254,"" -code-creation,CallIC,0x1e4e3459ca40,205,"slice" -code-creation,CallIC,0x1e4e3459cb20,189,"ToString" -code-creation,LoadIC,0x1e4e3459cbe0,284,"" -code-creation,LoadIC,0x1e4e3459cbe0,284,"" -code-creation,StoreIC,0x1e4e3459cd00,420,"_events" -code-creation,StoreIC,0x1e4e3459cd00,420,"_events" -code-creation,LoadIC,0x1e4e3459cec0,284,"" -code-creation,LoadIC,0x1e4e3459cec0,284,"" -code-creation,StoreIC,0x1e4e3459cfe0,346,"_trailer" -code-creation,StoreIC,0x1e4e3459cfe0,346,"_trailer" -code-creation,StoreIC,0x1e4e3459d140,185,"shouldKeepAlive" -code-creation,StoreIC,0x1e4e3459d140,185,"shouldKeepAlive" -code-creation,LoadIC,0x1e4e3459d200,134,"_events" -code-creation,LoadIC,0x1e4e3459d200,134,"_events" -code-creation,CallIC,0x1e4e3459d2a0,257,"emit" -code-creation,KeyedStoreIC,0x1e4e3459d3c0,208,"close" -code-creation,KeyedStoreIC,0x1e4e3459d3c0,208,"close" -code-creation,StoreIC,0x1e4e3459d4a0,346,"connection" -code-creation,StoreIC,0x1e4e3459d4a0,346,"connection" -code-creation,LoadIC,0x1e4e3459d600,134,"_events" -code-creation,LoadIC,0x1e4e3459d600,134,"_events" -code-creation,StoreIC,0x1e4e3459d6a0,185,"_events" -code-creation,StoreIC,0x1e4e3459d6a0,185,"_events" -code-creation,CallIC,0x1e4e3459d760,287,"emit" -code-creation,StoreIC,0x1e4e3459d880,316,"isSpdy" -code-creation,StoreIC,0x1e4e3459d880,316,"isSpdy" -code-creation,StoreIC,0x1e4e3459d9c0,346,"isSpdy" -code-creation,StoreIC,0x1e4e3459d9c0,346,"isSpdy" -code-creation,LoadIC,0x1e4e3459eee0,134,"_events" -code-creation,LoadIC,0x1e4e3459eee0,134,"_events" -code-creation,CallIC,0x1e4e34599fa0,287,"emit" -code-creation,KeyedLoadIC,0x1e4e3459a0c0,163,"finish" -code-creation,KeyedLoadIC,0x1e4e3459a0c0,163,"finish" -code-creation,KeyedLoadIC,0x1e4e3459a180,158,"finish" -code-creation,KeyedLoadIC,0x1e4e3459a180,158,"finish" -code-creation,LoadIC,0x1e4e3459a220,194,"" -code-creation,LoadIC,0x1e4e3459a220,194,"" -code-creation,LoadIC,0x1e4e3459a300,134,"_events" -code-creation,LoadIC,0x1e4e3459a300,134,"_events" -code-creation,LoadIC,0x1e4e3459a3a0,134,"domain" -code-creation,LoadIC,0x1e4e3459a3a0,134,"domain" -code-creation,StoreIC,0x1e4e3459a440,346,"_header" -code-creation,StoreIC,0x1e4e3459a440,346,"_header" -code-creation,KeyedStoreIC,0x1e4e3459a5a0,130,"" -code-creation,KeyedStoreIC,0x1e4e3459a5a0,130,"args_count: 0" -code-creation,CallIC,0x1e4e3459a640,462,"byteLength" -code-creation,LoadIC,0x1e4e3459a820,157,"Array" -code-creation,LoadIC,0x1e4e3459a820,157,"Array" -code-creation,CallIC,0x1e4e3459a8c0,157,"isArray" -code-creation,CallIC,0x1e4e3459a960,200,"write" -code-creation,StoreIC,0x1e4e3459aa40,191,"_sinkSize" -code-creation,StoreIC,0x1e4e3459aa40,191,"_sinkSize" -code-creation,CallIC,0x1e4e3459ab00,189,"ToPrimitive" -code-creation,LoadIC,0x1e4e3459abc0,134,"_events" -code-creation,LoadIC,0x1e4e3459abc0,134,"_events" -code-creation,Stub,0x1e4e3459ac60,224,"CompareICStub" -code-creation,LoadIC,0x1e4e3459ad40,194,"" -code-creation,LoadIC,0x1e4e3459ad40,194,"" -code-creation,LoadIC,0x1e4e3459ae20,134,"domain" -code-creation,LoadIC,0x1e4e3459ae20,134,"domain" -code-creation,CallIC,0x1e4e3459aec0,247,"removeListener" -code-creation,KeyedLoadIC,0x1e4e3459afc0,158,"finish" -tick,0x7fff91255ad8,0x7fff5fbfe480,1,0x100013f1a,0,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,KeyedLoadIC,0x1e4e3459afc0,158,"finish" -code-creation,CallIC,0x1e4e3459b060,187,"apply" -code-creation,LoadIC,0x1e4e3459b120,134,"length" -code-creation,LoadIC,0x1e4e3459b120,134,"length" -code-creation,CallIC,0x1e4e3459b1c0,189,"ToUint32" -code-creation,LoadIC,0x1e4e3459b280,134,"version" -code-creation,LoadIC,0x1e4e3459b280,134,"version" -code-creation,LoadIC,0x1e4e3459b320,137,"_sinkSize" -code-creation,LoadIC,0x1e4e3459b320,137,"_sinkSize" -code-creation,LoadIC,0x1e4e3459b3c0,157,"Math" -code-creation,LoadIC,0x1e4e3459b3c0,157,"Math" -code-creation,CallIC,0x1e4e3459b460,157,"min" -code-creation,CallIC,0x1e4e3459b500,187,"_lock" -code-creation,StoreIC,0x1e4e34593060,185,"server" -code-creation,StoreIC,0x1e4e34593060,185,"server" -code-creation,CallIC,0x1e4e345926a0,189,"ToObject" -code-creation,LoadIC,0x1e4e34592760,134,"_events" -code-creation,LoadIC,0x1e4e34592760,134,"_events" -code-creation,LoadIC,0x1e4e34592800,164,"" -code-creation,LoadIC,0x1e4e34592800,164,"" -code-creation,CallIC,0x1e4e34594f40,257,"emit" -code-creation,LoadIC,0x1e4e34595060,134,"ondata" -code-creation,LoadIC,0x1e4e34595060,134,"ondata" -code-creation,CallIC,0x1e4e34595100,201,"ondata" -code-creation,CallIC,0x1e4e345951e0,492,"execute" -code-creation,CallIC,0x1e4e345953e0,205,"onIncoming" -code-creation,LoadIC,0x1e4e345954c0,254,"" -code-creation,LoadIC,0x1e4e345954c0,254,"" -code-creation,CallIC,0x1e4e345955c0,187,"assignSocket" -code-creation,KeyedLoadIC,0x1e4e34595680,158,"close" -code-creation,KeyedLoadIC,0x1e4e34595680,158,"close" -code-creation,CallIC,0x1e4e34595720,277,"on" -code-creation,LoadIC,0x1e4e34595840,134,"headers" -code-creation,LoadIC,0x1e4e34595840,134,"headers" -code-creation,CallIC,0x1e4e345958e0,227,"emit" -code-creation,LoadIC,0x1e4e345959e0,284,"" -code-creation,LoadIC,0x1e4e345959e0,284,"" -code-creation,CallIC,0x1e4e3458e700,187,"replyFrame" -code-creation,CallIC,0x1e4e3458e260,201,"deflate" -code-creation,LoadIC,0x1e4e3458dd80,134,"domain" -code-creation,LoadIC,0x1e4e3458dd80,134,"domain" -code-creation,CallIC,0x1e4e3458de20,187,"detachSocket" -code-creation,LoadIC,0x1e4e3458d8e0,134,"_last" -code-creation,LoadIC,0x1e4e3458d8e0,134,"_last" -code-creation,LoadIC,0x1e4e3458d980,134,"connection" -code-creation,LoadIC,0x1e4e3458d980,134,"connection" -code-creation,CallIC,0x1e4e3458d1a0,197,"end" -code-creation,CallIC,0x1e4e3458d280,200,"_writeData" -code-creation,LoadIC,0x1e4e3458d360,134,"_closedBy" -code-creation,LoadIC,0x1e4e3458d360,134,"_closedBy" -code-creation,LoadIC,0x1e4e3458d400,137,"_sinkBuffer" -code-creation,LoadIC,0x1e4e3458d400,137,"_sinkBuffer" -code-creation,CallIC,0x1e4e3458c820,187,"_handleClose" -code-creation,LoadIC,0x1e4e3458c8e0,157,"process" -code-creation,LoadIC,0x1e4e3458c8e0,157,"process" -code-creation,CallIC,0x1e4e3458c980,157,"nextTick" -code-creation,LoadIC,0x1e4e3458ca20,157,"Error" -code-creation,LoadIC,0x1e4e3458ca20,157,"Error" -code-creation,LoadIC,0x1e4e3458cac0,138,"incoming" -code-creation,LoadIC,0x1e4e3458cac0,138,"incoming" -code-creation,LoadIC,0x1e4e3458cb60,137,"upgrade" -code-creation,LoadIC,0x1e4e3458cb60,137,"upgrade" -code-creation,CallIC,0x1e4e3458cc00,277,"removeListener" -tick,0x100254850,0x7fff5fbfe8b0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3458cd20,138,"incoming" -code-creation,LoadIC,0x1e4e3458cd20,138,"incoming" -code-creation,StoreIC,0x1e4e3458cdc0,185,"drained" -code-creation,StoreIC,0x1e4e3458cdc0,185,"drained" -code-creation,LoadIC,0x1e4e3458ce80,134,"readable" -code-creation,LoadIC,0x1e4e3458ce80,134,"readable" -code-creation,LoadIC,0x1e4e3458c2a0,200,"resume" -code-creation,LoadIC,0x1e4e3458c2a0,200,"resume" -code-creation,CallIC,0x1e4e3458c380,217,"resume" -code-creation,StoreIC,0x1e4e3458c460,185,"_paused" -code-creation,StoreIC,0x1e4e3458c460,185,"_paused" -code-creation,CallIC,0x1e4e34593b60,247,"removeListener" -code-creation,StoreIC,0x1e4e34593c60,185,"_tickListener" -code-creation,StoreIC,0x1e4e34593c60,185,"_tickListener" -code-creation,StoreIC,0x1e4e34593d20,185,"priorities" -code-creation,StoreIC,0x1e4e34593d20,185,"priorities" -code-creation,LoadIC,0x1e4e34593de0,134,"connection" -code-creation,LoadIC,0x1e4e34593de0,134,"connection" -tick,0x10024af66,0x7fff5fbfecf8,0,0x3d279737719,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002593c2,0x7fff5fbfed30,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002019ed,0x7fff5fbfee50,0,0x102023a68,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000def0f,0x7fff5fbfec88,0,0x645c2c8c96e64ea3,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd121,0x7fff5fbfee40,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001203d3,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011b819,0x7fff5fbfed60,0,0x7fff5fbfed80,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91210815,0x7fff5fbfecf0,0,0x7fff5fbfeda0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c6953,0x7fff5fbfec78,0,0x100a12080,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fe29,0x7fff5fbfec88,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345212aa,0x7fff5fbfeea0,0,0x1e4e345767d8,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e34593e80,134,"onend" -code-creation,LoadIC,0x1e4e34593e80,134,"onend" -code-creation,CallIC,0x1e4e34593f20,198,"onend" -code-creation,CallIC,0x1e4e34594000,492,"finish" -tick,0x7fff9199e6fe,0x7fff5fbff0d8,0,0x7fff9125a857,0,0x1e4e343b63aa,0x1e4e343e412b,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e34594200,137,"writable" -code-creation,LoadIC,0x1e4e34594200,137,"writable" -code-creation,CallIC,0x1e4e345942a0,257,"emit" -code-creation,LoadIC,0x1e4e345943c0,134,"readable" -code-creation,LoadIC,0x1e4e345943c0,134,"readable" -code-creation,LoadIC,0x1e4e34594460,200,"resume" -code-creation,LoadIC,0x1e4e34594460,200,"resume" -code-creation,LoadIC,0x1e4e34594540,134,"pair" -code-creation,LoadIC,0x1e4e34594540,134,"pair" -code-creation,Stub,0x1e4e345945e0,224,"CompareICStub" -code-creation,LoadIC,0x1e4e3458bf80,134,"writable" -code-creation,LoadIC,0x1e4e3458bf80,134,"writable" -code-creation,LoadIC,0x1e4e3458a580,134,"_pending" -code-creation,LoadIC,0x1e4e3458a580,134,"_pending" -code-creation,LoadIC,0x1e4e3458a620,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3458a620,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e34589600,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e34589600,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e345896a0,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345896a0,189,"_pendingBytes" -tick,0x100262d05,0x7fff5fbfe998,0,0x10026319c,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e34589760,134,"_events" -code-creation,LoadIC,0x1e4e34589760,134,"_events" -code-creation,LoadIC,0x1e4e34588fc0,134,"domain" -code-creation,LoadIC,0x1e4e34588fc0,134,"domain" -code-creation,LoadIC,0x1e4e34589060,134,"writable" -code-creation,LoadIC,0x1e4e34589060,134,"writable" -code-creation,CallIC,0x1e4e34589100,200,"write" -code-creation,LoadIC,0x1e4e34588b60,134,"_needDrain" -code-creation,LoadIC,0x1e4e34588b60,134,"_needDrain" -code-creation,StoreIC,0x1e4e34588c00,185,"_needDrain" -code-creation,StoreIC,0x1e4e34588c00,185,"_needDrain" -code-creation,StoreIC,0x1e4e34588640,185,"bytesRead" -code-creation,StoreIC,0x1e4e34588640,185,"bytesRead" -code-creation,CallIC,0x1e4e3458ea20,257,"emit" -tick,0x100179171,0x7fff5fbfea20,0,0x7fff5fbfea50,3,0x1e4e3454e2fc,0x1e4e343ab323,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3458eb40,364,"used" -code-creation,StoreIC,0x1e4e3458eb40,364,"used" -tick,0x1e4e34576081,0x7fff5fbfeea0,0,0x7fff5fbfeef0,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100170950,0x7fff5fbfe8e0,0,0x9,3,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a078a,0x7fff5fbfeb20,0,0x0,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff90f806fc,0x7fff5fbfec18,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,CallIC,0x1e4e3458ecc0,217,"resume" -tick,0x100179171,0x7fff5fbfe930,0,0x7fff5fbfe960,3,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3458eda0,138,"poolSize" -code-creation,LoadIC,0x1e4e3458eda0,138,"poolSize" -tick,0x1e4e345addfc,0x7fff5fbfeb68,0,0x9be4f29cb9,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3ef,0x7fff5fbfeae0,0,0x0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457b401,0x7fff5fbfedd8,0,0x7fff5fbfee20,0,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a5ea,0x7fff5fbfedf8,0,0x2e9dafd19839,0,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,CallIC,0x1e4e3458ee40,492,"execute" -code-creation,CallIC,0x1e4e3458f040,205,"onIncoming" -tick,0x100122a21,0x7fff5fbfe8c0,0,0x7fff5fbfe920,0,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e34581cc0,492,"finish" -tick,0x100391a5c,0x7fff5fbfed70,0,0x7fff5fbfeda0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34399383 -tick,0x100170940,0x7fff5fbfea88,0,0x100253f6c,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343251fd,0x7fff5fbfeee8,0,0x1e4e343a9cdb,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b195,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x10012116c,0x7fff5fbff510,0,0x0,4 -tick,0x1e4e343b680a,0x7fff5fbfeba8,0,0x11e9a5e88b59,0,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b2147,0x7fff5fbff0a0,0,0x11e9a5edfff9,0 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454ed06,0x7fff5fbfec80,0,0x11e9a5ef9d11,0,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a2442,0x7fff5fbfe7a0,0,0x11e9a5d00000,0,0x1e4e3455a80b,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34563fc2,0x7fff5fbfedc8,0,0x1e4e3456e4a8,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3432556e,0x7fff5fbfef80,0,0x1e4e34399439,0 -code-creation,StoreIC,0x1e4e34581ec0,189,"_buffer" -code-creation,StoreIC,0x1e4e34581ec0,189,"_buffer" -code-creation,StoreIC,0x1e4e34581f80,189,"callback" -code-creation,StoreIC,0x1e4e34581f80,189,"callback" -code-creation,StoreIC,0x1e4e34582040,189,"buffer" -code-creation,StoreIC,0x1e4e34582040,189,"buffer" -tick,0x1e4e34576780,0x7fff5fbfe9c8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315061,0x7fff5fbfeb88,0,0x7fff5fbfebe8,0,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455a7e0,0x7fff5fbfedf8,0,0x2e9dafd19839,0,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345ad248,0x7fff5fbfee40,0,0x1e4e34394688,0,0x1e4e3455287e,0x1e4e343993e2 -tick,0x10011fb50,0x7fff5fbfecc8,0,0x10012011f,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x10019326f,0x7fff5fbfeb30,0,0x7fff5fbfebe7,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34552139,0x7fff5fbfec30,0,0x7fff5fbfec88,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4b1,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3456becb,0x7fff5fbfee68,0,0x11e9a5d49691,0,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432aeca,0x7fff5fbff0c8,0,0x1e4e343b6a14,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e34582100,134,"drained" -code-creation,LoadIC,0x1e4e34582100,134,"drained" -code-creation,CallIC,0x1e4e345821a0,257,"emit" -code-creation,LoadIC,0x1e4e345822c0,134,"priorities" -code-creation,LoadIC,0x1e4e345822c0,134,"priorities" -tick,0x10024c240,0x7fff5fbfedf0,0,0x2e9dafd23ac1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912154c7,0x7fff5fbfed40,0,0x7fff5fbfed60,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdeb,0x7fff5fbfece8,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b89a,0x7fff5fbfef60,0,0x4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019d00c,0x7fff5fbfed78,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b7e88,0x7fff5fbff188,0,0x1e4e34580811,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d49c,0x7fff5fbff038,0,0x10002d5ec,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df07e,0x7fff5fbfec28,0,0xcc5c7903157a14f7,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325862,0x7fff5fbff3e8,0,0x1e4e34551d37,0,0x1e4e34573444,0x1e4e343b650b,0x1e4e343e412b,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e34582360,138,"owner" -code-creation,LoadIC,0x1e4e34582360,138,"owner" -code-creation,LoadIC,0x1e4e34582400,134,"_handle" -code-creation,LoadIC,0x1e4e34582400,134,"_handle" -code-creation,CallIC,0x1e4e345824a0,157,"active" -code-creation,LoadIC,0x1e4e34582540,254,"" -code-creation,LoadIC,0x1e4e34582540,254,"" -code-creation,LoadIC,0x1e4e34582640,140,"data" -code-creation,LoadIC,0x1e4e34582640,140,"data" -code-creation,CallIC,0x1e4e345826e0,187,"slice" -code-creation,LoadIC,0x1e4e345827a0,138,"length" -code-creation,LoadIC,0x1e4e345827a0,138,"length" -code-creation,CallIC,0x1e4e34582840,257,"emit" -code-creation,LoadIC,0x1e4e34582960,134,"ssl" -code-creation,LoadIC,0x1e4e34582960,134,"ssl" -code-creation,CallIC,0x1e4e34582a00,492,"encIn" -tick,0x1000f9922,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001203f6,0x7fff5fbfef30,0,0x7fff5fbfef50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e34582c00,134,"_paused" -code-creation,LoadIC,0x1e4e34582c00,134,"_paused" -code-creation,LoadIC,0x1e4e34582ca0,134,"bytesRead" -code-creation,LoadIC,0x1e4e34582ca0,134,"bytesRead" -code-creation,KeyedLoadIC,0x1e4e34582d40,158,"drain" -code-creation,KeyedLoadIC,0x1e4e34582d40,158,"drain" -code-creation,LoadIC,0x1e4e34582de0,134,"_maxListeners" -tick,0x7fff9199e6fe,0x7fff5fbfe888,0,0x7fff9125a857,0,0x1e4e3455ad90,0x1e4e345710e0,0x1e4e3459dd67,0x1e4e343e8c98,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e34582de0,134,"_maxListeners" -tick,0x1000bd050,0x7fff5fbfe9c0,0,0x7fff5fbfe9d0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024edf7,0x7fff5fbfe7c0,0,0x37ec2edcf291,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343098ce,0x7fff5fbfec78,0,0x100000000,0,0x1e4e3458063c,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8e34,0x7fff5fbfeb38,0,0x1e4e343e78eb,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8144,0x7fff5fbfe730,0,0x0,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343aabc1,0x7fff5fbfebf0,0,0x7fff5fbfec38,0,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10010d3db,0x7fff5fbfe930,0,0x101009440,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10007558f,0x7fff5fbfea30,0,0x14,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be6b6,0x7fff5fbfec00,0,0x102023a88,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10010e871,0x7fff5fbff2c0,0,0x0,4 -tick,0x1e4e34315061,0x7fff5fbfeed8,0,0x7fff5fbfef20,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002491ca,0x7fff5fbfeed0,0,0x0,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daac1,0x7fff5fbfefb0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbff030,0,0x0,1 -tick,0x1001a850a,0x7fff5fbfeab0,0,0x101009410,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34552400,0x7fff5fbfee80,0,0x37ec2ed77cd9,0,0x1e4e343993e2 -tick,0x100166091,0x7fff5fbff020,0,0x7fff5fbff0a0,0,0x1e4e343b696c,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be742,0x7fff5fbfea00,0,0x3,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455f861,0x7fff5fbfed48,0,0x7fff5fbfedc8,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345a19f8,0x7fff5fbfeb58,0,0x1020259f0,0,0x1e4e345a07d8,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430db9d,0x7fff5fbfebc0,0,0x1e4e343aabea,0,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000debc6,0x7fff5fbfe7a8,0,0xdad29f8e2fb77517,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e147,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253ae0,0x7fff5fbff418,0,0x0,3 -tick,0x100208281,0x7fff5fbfec90,0,0x7fff5fbfedb0,0,0x1e4e3435b51c,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100261907,0x7fff5fbfee80,0,0x11e9a4e1d9f1,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002523cd,0x7fff5fbfead0,0,0x2e9dafd14a21,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100392841,0x7fff5fbfeb70,0,0x7fff5fbfeb90,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34560b02,0x7fff5fbfebc0,0,0xaabee809b19,0,0x1e4e345b0d6e,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f15,0x7fff5fbfeb88,0,0x1e4e3454d0f5,0,0x1e4e343ab323,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -code-creation,LoadIC,0x1e4e34582e80,138,"_binding" -code-creation,LoadIC,0x1e4e34582e80,138,"_binding" -code-creation,LoadIC,0x1e4e34582f20,134,"_flush" -code-creation,LoadIC,0x1e4e34582f20,134,"_flush" -tick,0x100150091,0x7fff5fbfe870,0,0x7fff5fbfe8c0,3,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100379b20,0x7fff5fbfe008,0,0x1003535c3,2,0x1e4e343e436a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LazyCompile,0x1e4e3453c720,2342,"_writeData /Users/indutny/Code/indutny/node-spdy/lib/spdy/server.js:719",0x3d27976a6b0,* -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100395422,0x7fff5fbff368,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100293b61,0x7fff5fbfeaf0,0,0x7fff5fbfebe0,2,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3453d060,1558,"dataFrame /Users/indutny/Code/indutny/node-spdy/lib/spdy/protocol/v3/framer.js:214",0xe66235a9f0,* -tick,0x7fff9127cbc6,0x7fff5fbfec58,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253f51,0x7fff5fbfe8a0,0,0x7fff5fbfe8e0,3,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000a01d0,0x7fff5fbfec20,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f2330,0x1e4e34384cf0,0x1e4e34552902,0x1e4e34598721 -tick,0x7fff9120616c,0x7fff5fbfee08,0,0x7fff91206c07,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253ae0,0x7fff5fbfeb98,0,0x10024b001,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be6b9,0x7fff5fbfef60,0,0x102023a70,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b6a,0x7fff5fbfedc0,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3459bf82,0x7fff5fbff210,0,0x1e4e345949e5,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de6ad,0x7fff5fbfec88,0,0xe47c610dc2023640,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309840,0x7fff5fbff150,0,0x1e4e34567976,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfed80,0,0x263e5f5700000015,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdcc,0x7fff5fbfec80,0,0x7fff5fbfecc0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3453d680,217,"write" -tick,0x1000f987a,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100118d4a,0x7fff5fbfea70,0,0x102023a88,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325862,0x7fff5fbfeb80,0,0x1e4e3455a74d,0,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002492a8,0x7fff5fbfe8d0,0,0x101009410,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34557afc,0x7fff5fbfeda8,0,0x11e9a4d46f51,0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34557bbf,0x7fff5fbfeda8,0,0x11e9a4d81589,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100315091,0x7fff5fbff320,0,0x7fff5fbff350,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbd0c,0x7fff5fbff318,0,0x10011c15d,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10002d4e6,0x7fff5fbfeb60,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9127cbc6,0x7fff5fbfeb38,0,0x100145b4e,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a7866,0x7fff5fbfeee0,0,0x101009410,0,0x1e4e34551d37,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100265eba,0x7fff5fbfeaa0,0,0xe662300000,0,0x1e4e343599a4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a2445,0x7fff5fbfec70,0,0x1e4e345aff56,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309eed,0x7fff5fbfeb30,0,0x1e4e343e78c2,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8277,0x7fff5fbfe9e0,0,0x101009410,0,0x1e4e345ae6cd,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523e1,0x7fff5fbfe790,0,0x11e9a4c00000,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3453d760,256,"_headers" -code-creation,StoreIC,0x1e4e3453d760,256,"_headers" -code-creation,StoreIC,0x1e4e3453d860,334,"_url" -code-creation,StoreIC,0x1e4e3453d860,334,"_url" -code-creation,StoreIC,0x1e4e3453d9c0,256,"incoming" -code-creation,StoreIC,0x1e4e3453d9c0,256,"incoming" -tick,0x10019ca61,0x7fff5fbfe6a0,0,0x102023b18,0,0x1e4e34322a85,0x1e4e34320c96,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b8cc5,0x7fff5fbfeb48,0,0x1e4e34583fda,0,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100063b07,0x7fff5fbfea80,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34331b8a,0x7fff5fbfef28,0,0x1e4e34394a55,0,0x1e4e34399727 -tick,0x100394df2,0x7fff5fbff268,0,0x100171132,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325896,0x7fff5fbfeea8,0,0x1e4e3455a74d,0,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455e8c2,0x7fff5fbfef20,0,0x11e9a4cd1941,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x1002524ff,0x7fff5fbfec68,0,0x1002be86c,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100189850,0x7fff5fbfef68,0,0x1002e5078,0,0x1e4e343181dd,0x1e4e34576997,0x1e4e345984df -tick,0x1e4e3431004a,0x7fff5fbfec00,0,0x1e4e345b5fab,0,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100197a2c,0x7fff5fbfe840,0,0x0,1 -tick,0x10004a14f,0x7fff5fbff850,0,0x0,4 -tick,0x10012ef11,0x7fff5fbfe910,0,0x7fff5fbfe950,0,0x1e4e3455a74d,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345553c1,0x7fff5fbfec68,0,0x7fff5fbfeca8,0,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343262cc,0x7fff5fbfef50,0,0x1e4e34394a7d,0,0x1e4e34399727 -tick,0x7fff911dbd0e,0x7fff5fbfeb38,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d40,0x7fff5fbff290,0,0x7fff5fbff2d0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34309894,0x7fff5fbfebf0,0,0x7fff5fbfec38,0 -tick,0x1e4e343a78f1,0x7fff5fbfef40,0,0x1e4e343949d6,0,0x1e4e34399727 -tick,0x10024ee87,0x7fff5fbfe810,0,0x37ec2edcf5f1,0,0x1e4e3455a80b,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f9230,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34576883,0x7fff5fbfeea8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd0c,0x7fff5fbfefb8,0,0x10011c15d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005bb0d,0x7fff5fbfee60,0,0x101900c80,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100251001,0x7fff5fbfeba0,0,0x7fff5fbfec30,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91210801,0x7fff5fbfed10,0,0x7fff5fbfedc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be534,0x7fff5fbfef30,0,0x101009410,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3f19,0x7fff5fbfee10,0,0x10280ebe8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523e1,0x7fff5fbfee10,0,0x2e9dafd13ad1,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b7f,0x7fff5fbfedc0,0,0x101009410,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f93b6,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100171290,0x7fff5fbff480,0,0x0,0 -tick,0x1000bd2a3,0x7fff5fbfec00,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001878fe,0x7fff5fbfeab0,0,0x18a0,0,0x1e4e343986a3,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3457b473,0x7fff5fbfedc0,0,0x3d279765af1,0,0x1e4e343e8c62,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34575836,0x7fff5fbfecc8,0,0x0,0,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e3453dac0,138,"REQUEST" -code-creation,LoadIC,0x1e4e3453dac0,138,"REQUEST" -tick,0x10026b621,0x7fff5fbfe9e0,0,0x18,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10030f640,0x7fff5fbff2e8,0,0x102023b08,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100215900,0x7fff5fbfebe8,0,0x100209689,0,0x1e4e3435b51c,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b1d5,0x7fff5fbfebb0,0,0x1020259f0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f324e,0x7fff5fbfeb10,0,0x972c,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100218e7a,0x7fff5fbfeb80,0,0x1,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c30d,0x7fff5fbfeb48,0,0x101009410,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435ccfd,0x7fff5fbff0a8,0,0x1e4e3457be9f,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be939,0x7fff5fbfea90,0,0x7fff5fbfeb10,0,0x1e4e343e78d4,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a78f1,0x7fff5fbfef40,0,0x1e4e343949d6,0,0x1e4e34399727 -tick,0x1002608e4,0x7fff5fbfeba0,0,0x122a8dcc0000000e,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3457d1ca,0x7fff5fbfee30,0,0xbf,0,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001bba9,0x7fff5fbfe920,0,0x7fff5fbfe990,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b5bca,0x7fff5fbfee20,0,0x1e4e3452a4e7,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459907c,0x7fff5fbfeed8,0,0x1e4e343a9b8e,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3455506e,0x7fff5fbfec30,0,0x1e4e3454da72,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325540,0x7fff5fbfeaf0,0,0x1e4e3455ac31,0,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001481d,0x7fff5fbff350,0,0x9,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100251e4a,0x7fff5fbfe758,0,0x0,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454dd9e,0x7fff5fbfeab0,0,0x9be4f23001,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbfeb10,0,0x7fff5fbfeb50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000defff,0x7fff5fbfe748,0,0xcc5c7903612b9c77,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311314,0x7fff5fbff058,0,0x0,0 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024aff6,0x7fff5fbfee00,0,0x2e9dafd05169,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566cb0,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfef10,0,0x7fff5fbfef40,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c1d45,0x7fff5fbfed00,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34594b93,0x7fff5fbff218,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfeb50,0,0x2e9dafd0aae1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100392841,0x7fff5fbfedb0,0,0x7fff5fbfedd0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001446cf,0x7fff5fbff100,0,0x7fff5fbff158,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213268,0x7fff5fbfec20,0,0xfffffffffffffff0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfebf0,0,0x2e9dafd0e469,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10031824a,0x7fff5fbfebb0,0,0x170c00000000,2,0x1e4e34552902,0x1e4e34598721 -code-creation,LazyCompile,0x1e4e3453db60,280,"ondrain stream.js:46",0x37ec2edc4410,~ -code-creation,LazyCompile,0x1e4e3453dc80,768,"ondrain stream.js:46",0x37ec2edc4410,* -code-creation,LazyCompile,0x1e4e3453df80,408,"CryptoStream.resume tls.js:298",0x3d27976ed80,~ -code-creation,LazyCompile,0x1e4e3453e120,769,"CryptoStream.resume tls.js:298",0x3d27976ed80,* -tick,0x7fff912107dd,0x7fff5fbfeb10,0,0x7fff5fbfebc0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100039cfe,0x7fff5fbfea40,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170940,0x7fff5fbfea48,0,0x100253f6c,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8d9c,0x7fff5fbfe9c0,0,0x0,1 -tick,0x100196ffb,0x7fff5fbfea40,0,0x0,1 -tick,0x10011b7e0,0x7fff5fbfeb68,0,0x100000000,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34328664,0x7fff5fbfeba0,0,0x1e4e34359c80,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431196e,0x7fff5fbfec78,0,0x1e4e345affdf,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551c9b,0x7fff5fbfee60,0,0x11e9a4fb4af1,0,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100191271,0x7fff5fbff310,0,0x7fff5fbff350,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10002d8de,0x7fff5fbfeb60,0,0xa00000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfe690,0,0xcc6ac0600000031,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002ca40,0x7fff5fbfeb50,0,0x7fff5fbfebb0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459e800,0x7fff5fbfec78,0,0x1e4e3456877b,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a919,0x7fff5fbff020,0,0x2e9dafd16c09,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011fbe3,0x7fff5fbfec20,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002491fb,0x7fff5fbfe9b0,0,0xe662367291,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a0c9d,0x7fff5fbfeef0,0,0x1e4e343a9cb0,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x100279c04,0x7fff5fbfe820,0,0x2,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019be80,0x7fff5fbfea38,0,0x100173bc6,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100219ab1,0x7fff5fbff1c0,0,0x0,4 -tick,0x1e4e34320f8f,0x7fff5fbfeb10,0,0x7fff5fbfebe0,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251e41,0x7fff5fbff4c0,0,0x0,3 -tick,0x1e4e34565249,0x7fff5fbfe9b8,0,0x10000c2be,0,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002523cd,0x7fff5fbfefe0,0,0x0,3 -tick,0x100039cfe,0x7fff5fbfea40,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3436a625,0x7fff5fbfeee8,0,0x1e4e343a9ac2,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100179171,0x7fff5fbfeb40,0,0x7fff5fbfeb70,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345932f8,0x7fff5fbff150,0,0x101009410,0 -tick,0x1003946ea,0x7fff5fbfefe8,0,0x10019bd74,0,0x1e4e3455497b,0x1e4e3457bd81,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34327a7a,0x7fff5fbff138,0,0x1e4e34567081,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912136be,0x7fff5fbfecf0,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019cf3f,0x7fff5fbfef60,0,0x5a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100190834,0x7fff5fbfed50,0,0x10300a140,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34592e3e,0x7fff5fbff208,0,0x1e4e34594a7d,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002607ee,0x7fff5fbfee00,0,0x263e5f5700000003,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100249346,0x7fff5fbfec10,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c5b1,0x7fff5fbfede0,0,0x5ba90000000065,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fe47,0x7fff5fbfed48,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34315235,0x7fff5fbff308,0,0x1e4e34576997,0,0x1e4e345984df -tick,0x1000f9745,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100117f01,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c05a,0x7fff5fbff300,0,0x0,4 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x7fff9120c4be,0x7fff5fbff260,0,0x0,4 -tick,0x100218e46,0x7fff5fbfeb80,0,0x1,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a810,0x7fff5fbff020,0,0x2e9dafd16c09,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000c062,0x7fff5fbfe950,0,0x101009400,0,0x1e4e3454d2d8,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001445ea,0x7fff5fbfeea0,0,0x7fff5fbfeef0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x1e4e34594842,0x7fff5fbfed38,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912137f5,0x7fff5fbfe7c0,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10006f66b,0x7fff5fbfeb70,0,0x7fff5fbfebd0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34570e92,0x7fff5fbfee78,0,0x11e9a4caf129,0,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001a8144,0x7fff5fbfe830,0,0x0,0,0x1e4e3455497b,0x1e4e34564c92,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3434c467,0x7fff5fbfebf0,0,0x1e4e3458cff0,0,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff90f806f5,0x7fff5fbfec18,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a959a,0x7fff5fbfea70,0,0x0,1 -tick,0x1001987b5,0x7fff5fbfea40,0,0x0,1 -tick,0x7fff911da168,0x7fff5fbfeb78,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100277528,0x7fff5fbfde38,0,0x11e9a5f9a5a9,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b6876,0x7fff5fbfed48,0,0x1e4e3454e2fc,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f308a,0x7fff5fbfeb40,0,0x7fff5fbfeb70,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100262ced,0x7fff5fbfde60,0,0x7fff5fbfe147,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10027a500,0x7fff5fbfe980,0,0x101009410,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f00,0x7fff5fbfeca0,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff9120617c,0x7fff5fbfe8b0,0,0x1009ca000,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457a937,0x7fff5fbfec58,0,0x37ec2edd4381,0,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34567717,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024edb0,0x7fff5fbfeb58,0,0x10024ec76,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfeee8,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121478b,0x7fff5fbfecd0,0,0x7fff79220180,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10001a2ba,0x7fff5fbfedf8,0,0x0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011d4b9,0x7fff5fbfefb0,0,0x102019d00,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b50,0x7fff5fbfeb60,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fd79,0x7fff5fbfedd8,0,0x7fff9120c41a,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b6a,0x7fff5fbfef30,0,0x101009410,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a810a,0x7fff5fbfeef0,0,0x0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002522c7,0x7fff5fbfec58,0,0x102023a70,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100219abf,0x7fff5fbff7c0,0,0x0,4 -tick,0x1000f97e1,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff90f81015,0x7fff5fbff1d8,0,0x1002cd8f4,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e345984df -tick,0x10026190a,0x7fff5fbfea90,0,0x2e9dafd14161,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253bcb,0x7fff5fbfe940,0,0x101009410,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34324102,0x7fff5fbfeb68,0,0x0,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100038efd,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343b5fe4,0x7fff5fbff540,0,0xe662304121,0,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026325e,0x7fff5fbfea00,0,0x101009400,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000638f2,0x7fff5fbfeae0,0,0x7fff5fbfeb10,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430aa4a,0x7fff5fbfedb0,0,0x1e4e3459db90,0,0x1e4e343e8c98,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002772f1,0x7fff5fbfe1b0,0,0x7fff5fbfe610,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100038ee5,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001736c1,0x7fff5fbff370,0,0x7fff5fbff398,0,0x1e4e343b5be9,0x1e4e343b5d1b,0x1e4e345522ca,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x1e4e343061a8,0x7fff5fbfec78,0,0x1e4e3454ed8b,0,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100252ce5,0x7fff5fbff100,0,0x2d90905c00000009,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343e78bc,0x7fff5fbfeb40,0,0x11e9a5c12111,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100172c61,0x7fff5fbfe840,0,0x7fff5fbfe8c0,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10014482b,0x7fff5fbfed30,0,0x7fff5fbfed80,0,0x1e4e3456bed2,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455f8ab,0x7fff5fbfed28,0,0x1e4e343060e1,0,0x1e4e34563578,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1002beae9,0x7fff5fbfea48,0,0x1002be700,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026bd50,0x7fff5fbfea40,0,0x2800000008,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100053af7,0x7fff5fbfedc0,0,0x7fff5fbfee00,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34599300,0x7fff5fbfeec0,0,0x1e4e3456e144,0,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10026b580,0x7fff5fbfe9e0,0,0x18,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430db27,0x7fff5fbff108,0,0x1e4e34591ad9,0 -tick,0x10027a891,0x7fff5fbfef70,0,0x7fff5fbfefa0,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100051f1b,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8d7c,0x7fff5fbfecf0,0,0x0,1 -tick,0x7fff911dab0c,0x7fff5fbfec60,0,0x0,1 -tick,0x1002523a8,0x7fff5fbfed40,0,0x7fff5fbfeee8,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912086be,0x7fff5fbfee38,0,0x7fff912061b3,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002c87ce,0x7fff5fbfef50,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000a02aa,0x7fff5fbfee50,0,0x7fff5fbfee80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100071a10,0x7fff5fbfefe0,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34311b29,0x7fff5fbff278,0,0x1e4e343f1d72,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325595,0x7fff5fbff288,0,0x1e4e343f1e91,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8d18,0x7fff5fbff278,0,0x1e4e343f1db9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c13b1,0x7fff5fbfef60,0,0x7fff5fbfefb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912154c7,0x7fff5fbfed40,0,0x7fff5fbfed60,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be568,0x7fff5fbff500,0,0x0,3 -tick,0x1000c8088,0x7fff5fbfec78,0,0x1000c49bc,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002608d7,0x7fff5fbfe8a0,0,0x263e5f5700000015,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ad573,0x7fff5fbfeca8,0,0x1e4e345809c0,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001709b9,0x7fff5fbfeb40,0,0x9,3,0x1e4e3454e2fc,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c13b1,0x7fff5fbfead0,0,0x7fff5fbfeb30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be510,0x7fff5fbfec68,0,0x1002beadf,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10025af9a,0x7fff5fbfe890,0,0x7fff5fbfe8b8,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024bba8,0x7fff5fbfe9c0,0,0x101009400,0,0x1e4e34579e65,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000c8308,0x7fff5fbfe860,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001446cf,0x7fff5fbfeea0,0,0x7fff5fbfeef0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x1e4e34311332,0x7fff5fbff090,0,0x0,0 -tick,0x1e4e345ad2fc,0x7fff5fbfef40,0,0x1e4e343949d6,0,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3455509d,0x7fff5fbfe8e8,0,0xe662347fc9,0,0x1e4e3455c4cc,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100256814,0x7fff5fbfea70,0,0x100a0e9b8,0,0x1e4e34320e97,0x1e4e34571f56,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100279860,0x7fff5fbfe688,0,0x10016a1f5,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100144303,0x7fff5fbfeda0,0,0x7fff00000000,0,0x1e4e34394669,0x1e4e3455287e,0x1e4e343993e2 -tick,0x1e4e343aa461,0x7fff5fbfef20,0,0x7fff5fbfef70,0,0x1e4e34399727 -tick,0x1001fcf25,0x7fff5fbfeba0,0,0x7fff5fbfec01,0,0x1e4e3453d1f0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3453c6c8,0x7fff5fbfec78,0,0x10000af1c,0,0x1e4e3456f3b4,0x1e4e3459f1d2,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10016dfa1,0x7fff5fbfeb10,0,0x7fff5fbfeb50,0,0x1e4e34359a6e,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf4cc,0x7fff5fbfef90,0,0x7fff5fbff060,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34587b76,0x7fff5fbfefc8,0,0x1002bf37e,0,0x1e4e345603e5,0x1e4e3458991c,0x1e4e345892e0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e10e,0x7fff5fbfed28,0,0x7fff911f31d7,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9120c7c8,0x7fff5fbfe8e0,0,0x101902650,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100053b08,0x7fff5fbfec60,0,0x101815740,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3456db66,0x7fff5fbfef28,0,0xe662304101,0,0x1e4e34399744 -tick,0x1e4e345b4f32,0x7fff5fbfef18,0,0x1e4e3456dbeb,0,0x1e4e34399744 -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfed80,0,0x263e5f5700000003,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be511,0x7fff5fbfef60,0,0x7fff5fbfefb0,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121479b,0x7fff5fbfeca0,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34332fa7,0x7fff5fbfefd0,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa49,0x7fff5fbfefb0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024926f,0x7fff5fbfee20,0,0x7fff5fbfee60,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9f94,0x7fff5fbfee90,0,0x20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024ed49,0x7fff5fbfeaf0,0,0x7f015fbfeba0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be511,0x7fff5fbfef40,0,0x7fff5fbfef90,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000a01c1,0x7fff5fbfecb0,0,0x7fff5fbfef40,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1003943e4,0x7fff5fbfee08,0,0x10001a96d,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5e60,0x7fff5fbfed90,0,0x7fff5fbfee30,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001446d2,0x7fff5fbfed40,0,0x0,0,0x1e4e3456dbd3,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345abda9,0x7fff5fbfebe0,0,0x1e4e34588236,0,0x1e4e345603e5,0x1e4e345a995d,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dc33,0x7fff5fbfecb0,0,0x102023a88,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431b405,0x7fff5fbfed90,0,0x1e4e34557b9c,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345525cf,0x7fff5fbfee80,0,0x7fff5fbfeee0,0,0x1e4e343993e2 -tick,0x7fff911dbd12,0x7fff5fbfef88,0,0x10011d4e9,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1e4e34592705,0x7fff5fbfe8c8,0,0x1e4e34320c78,0,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3d6,0x7fff5fbfef10,0,0x1019008b0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x7fff911dbd0c,0x7fff5fbff0d8,0,0x0,0 -tick,0x1002fedd1,0x7fff5fbfeab0,0,0x7fff5fbfeb10,0,0x1e4e34588ee2,0x1e4e345adfba,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b1105,0x7fff5fbfef80,0,0x1e4e34399744,0 -tick,0x10019b245,0x7fff5fbfeb40,0,0xaabee804101,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100250ce6,0x7fff5fbfe848,0,0x9be4f9dcf1,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432e3d3,0x7fff5fbff0d8,0,0x1e4e343b690c,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a2a74,0x7fff5fbfe620,0,0x0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34331bf6,0x7fff5fbfef28,0,0x1e4e34394a55,0,0x1e4e34399727 -tick,0x10016e02c,0x7fff5fbfeae0,0,0x0,0,0x1e4e34359a6e,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afbe,0x7fff5fbfe8b0,0,0x2e9dafd14da1,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34588d6a,0x7fff5fbfeb50,0,0x3d279763d01,0,0x1e4e345adfba,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306141,0x7fff5fbfe9f0,0,0x7fff5fbfea50,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430f885,0x7fff5fbff090,0,0x1e4e3431f688,0,0x1e4e343b69fe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100170941,0x7fff5fbfe870,0,0x7fff5fbfe8a0,3,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c3c6a,0x7fff5fbff010,0,0x1,0,0x1e4e3455497b,0x1e4e3457bd81,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3435d62b,0x7fff5fbfef18,0,0x1e4e3456d6d0,0,0x1e4e34399744 -tick,0x1e4e34556d41,0x7fff5fbfedf8,0,0x7fff5fbfee48,0,0x1e4e34587323,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000145f2,0x7fff5fbff3a8,0,0x1000395ca,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34548321,0x7fff5fbfee18,0,0x7fff5fbfee60,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34560ace,0x7fff5fbfebc0,0,0xaabee809b19,0,0x1e4e345b0d6e,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e345548f2,0x7fff5fbff080,0,0x3d2797968d1,0 -tick,0x1000a02b3,0x7fff5fbfee38,0,0x103016458,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10026080b,0x7fff5fbfe9e0,0,0x2ad95d0d0000000a,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100063c03,0x7fff5fbfef60,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120340,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c23c,0x7fff5fbfee70,0,0x2e9dafd13ad1,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f4210,0x7fff5fbfef20,0,0x5,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fcef,0x7fff5fbfef50,0,0x7fff5fbfef80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df517,0x7fff5fbfed40,0,0x101904c30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343252b0,0x7fff5fbff380,0,0x1e4e343df280,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10014567f,0x7fff5fbff4f0,0,0x8,0,0x1e4e3459e580 -tick,0x1000f9883,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34587241,0x7fff5fbfeed0,0,0x7fff5fbfef20,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x10011fcb8,0x7fff5fbfeb70,0,0x7fff5fbfebc0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d41b,0x7fff5fbfec98,0,0x11e9a490c279,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345757e6,0x7fff5fbfede8,0,0x0,0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455d647,0x7fff5fbfeb30,0,0x7fff5fbfeb90,0,0x1e4e34555948,0x1e4e345b6181,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345852b1,0x7fff5fbfeb10,0,0x7fff5fbfeb90,0,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10014483f,0x7fff5fbfecd0,0,0x7fff5fbfecf8,0,0x1e4e3456bed2,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff8ddd3688,0x7fff5fbfe8f8,0,0x7fff8ddd3347,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b330,0x7fff5fbfe930,0,0x101009410,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430c5d0,0x7fff5fbfedf8,0,0x1e4e3435b389,0,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100232b9c,0x7fff5fbfed90,0,0x800000000,0,0x1e4e3456bed2,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b611,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e3458843d,0x7fff5fbff038,0,0x10024ed90,0 -tick,0x1002bf239,0x7fff5fbff210,0,0x1,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100179181,0x7fff5fbfeb00,0,0xfffffffffffffff8,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001709c0,0x7fff5fbfea48,0,0x100253f6c,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f9392,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34583697,0x7fff5fbfeb10,0,0x96a00000000,0,0x1e4e34573968,0x1e4e345a08d4,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x10019cd44,0x7fff5fbfec20,0,0x10284888d,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432512f,0x7fff5fbfeee8,0,0x1e4e343a9cdb,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x100038f41,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343b6b0a,0x7fff5fbff0d8,0,0x11e9a4871869,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100145a71,0x7fff5fbfed20,0,0xe662304121,0,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x100215a19,0x7fff5fbfebc0,0,0x0,0,0x1e4e3435b51c,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100275e65,0x7fff5fbfea80,0,0xaabee804101,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a21,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1002608ec,0x7fff5fbfe8a0,0,0x263e5f5700000015,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100046be7,0x7fff5fbff360,0,0x0,4 -tick,0x7fff9120fdb3,0x7fff5fbfebc0,0,0x7fff5fbfec00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10004854d,0x7fff5fbfecd0,0,0x0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309896,0x7fff5fbff168,0,0x800000000,0,0x1e4e34580365,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9388,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1003009ca,0x7fff5fbfef20,0,0x0,1 -tick,0x1001aa4f3,0x7fff5fbfeef0,0,0x0,1 -tick,0x1001987b5,0x7fff5fbfef10,0,0x0,1 -tick,0x1e4e3456703e,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c6217,0x7fff5fbfee70,0,0x1019049e0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cd1,0x7fff5fbfee08,0,0x100051ee8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de19d,0x7fff5fbfed60,0,0x1000c1d36,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b9c8,0x7fff5fbfef90,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34327a7a,0x7fff5fbff138,0,0x1e4e34567081,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c3441,0x7fff5fbfee00,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000058a2,0x7fff5fbff5d0,0,0x0,4 -tick,0x1002492bc,0x7fff5fbfed40,0,0x101009410,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911f28a0,0x7fff5fbfeb50,0,0x10099b0f0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34321001,0x7fff5fbfec00,0,0xe662304121,0,0x1e4e3454dadf,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026096b,0x7fff5fbfebb0,0,0x0,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34592e20,0x7fff5fbfed28,0,0x1e4e34594a7d,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100039271,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10016630b,0x7fff5fbfea40,0,0x7fff5fbfea60,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10002ca3c,0x7fff5fbfeb58,0,0x10002d8e3,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100118d21,0x7fff5fbfec90,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100117b71,0x7fff5fbfeb50,0,0x7fff5fbfeb70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a7917,0x7fff5fbfef40,0,0x1e4e343949d6,0,0x1e4e34399727 -tick,0x1e4e34398b14,0x7fff5fbfee38,0,0x37ec2ed77c29,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002bf1d7,0x7fff5fbfe780,0,0x0,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100394ae6,0x7fff5fbfe848,0,0x10027558d,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100172261,0x7fff5fbfeae0,0,0x7fff5fbfeb10,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34555c20,0x7fff5fbfe9f8,0,0x1e4e34564a8c,0,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b0081,0x7fff5fbfeb50,0,0x7fff5fbfebe0,0,0x1e4e3435b51c,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b541a,0x7fff5fbfef88,0,0x1e4e3439922e,0 -tick,0x10027a891,0x7fff5fbfec60,0,0x7fff5fbfec90,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452d4f1,0x7fff5fbfeee0,0,0x1e4e3456e144,0,0x1e4e34399744 -tick,0x7fff911dbd0c,0x7fff5fbff318,0,0x10011c15d,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bfb5e,0x7fff5fbfeae0,0,0x1002bfb30,0,0x1e4e34579b39,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002d000f,0x7fff5fbfeab0,0,0x1e4e343a8f05,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100261925,0x7fff5fbfea90,0,0x2e9dafd14161,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024f02e,0x7fff5fbfeb60,0,0x11e9a5df8021,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311824,0x7fff5fbfea90,0,0x1e4e343a929f,0,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff90f80724,0x7fff5fbfebe8,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025507f,0x7fff5fbfec10,0,0x11e9a5c36ad1,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345934e7,0x7fff5fbff150,0,0x101009410,0 -tick,0x1e4e34560087,0x7fff5fbff120,0,0x37ec2ed118d1,0,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343252b0,0x7fff5fbff380,0,0x1e4e343df280,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd20d,0x7fff5fbfee50,0,0x7fff5fbfef10,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100259a56,0x7fff5fbfed70,0,0x1019040e0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608e7,0x7fff5fbfeda0,0,0x263e5f5700000015,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000ded19,0x7fff5fbfec88,0,0x67a80d63164a2bad,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100117b71,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fcd7,0x7fff5fbfed20,0,0x10099e400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dadb0,0x7fff5fbfed00,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345687fc,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002491a0,0x7fff5fbff4f8,0,0x0,3 -tick,0x7fff911daa4d,0x7fff5fbfee30,0,0x7fff5fbfef20,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100014978,0x7fff5fbff360,0,0x102023a68,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100046a49,0x7fff5fbfec30,0,0x7fff5fbfec70,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10026f2d4,0x7fff5fbfea20,0,0x11e9a5cc7f30,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001221b5,0x7fff5fbfe7d0,0,0x79,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da171,0x7fff5fbfe9e8,0,0x100218e51,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3453e440,1736,"CryptoStream.write tls.js:233",0x3d27976eb70,~ -code-creation,LazyCompile,0x1e4e343f1980,1736,"CryptoStream.write tls.js:233",0x3d27976eb70, -tick,0x1001711bb,0x7fff5fbff0e0,0,0x0,0 -tick,0x100253bb3,0x7fff5fbfee70,0,0x101009410,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253c40,0x7fff5fbfefa0,0,0x7fff5fbfefd0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011fc0a,0x7fff5fbfe8d0,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001459ab,0x7fff5fbfed30,0,0x1e4e345b67c1,0,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x100275541,0x7fff5fbfe840,0,0x7fff5fbfe880,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011d351,0x7fff5fbfeaf0,0,0x7fff5fbfeb30,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430aa9e,0x7fff5fbfeca0,0,0x1e4e34580210,0,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f308a,0x7fff5fbfeb40,0,0x7fff5fbfeb70,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345570fc,0x7fff5fbfed98,0,0x11e9a5b6f621,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452a569,0x7fff5fbfee38,0,0x500000000,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309849,0x7fff5fbfee88,0,0x1e4e3455a43d,0,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfe948,0,0x7fff911f2886,0,0x1e4e343a9133,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a2a74,0x7fff5fbfe7b0,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ccc1,0x7fff5fbfea60,0,0x1003d3d67,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315212,0x7fff5fbff0a0,0,0x11e9a5bc9bf9,0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325595,0x7fff5fbfedf0,0,0x1e4e343989f6,0,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10024924a,0x7fff5fbff138,0,0x0,3 -tick,0x1e4e3432556e,0x7fff5fbfee30,0,0x1e4e343986dc,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34315115,0x7fff5fbfe988,0,0xe66234f301,0,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315100,0x7fff5fbfed60,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251e46,0x7fff5fbfe7c8,0,0x102023a88,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025124f,0x7fff5fbfed60,0,0x7fff5fbfedb0,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3435d627,0x7fff5fbfef18,0,0x1e4e3456d6d0,0,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100315091,0x7fff5fbfea70,0,0x7fff5fbfeaa0,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010e871,0x7fff5fbff2c0,0,0x0,4 -tick,0x10019b22a,0x7fff5fbfee20,0,0xaabee804101,0,0x1e4e34570fec,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a8155,0x7fff5fbfe960,0,0x0,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000fa345,0x7fff5fbfeb80,0,0x100a137f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10000b195,0x7fff5fbff030,0,0x7fff5fbff090,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024911b,0x7fff5fbfeed8,0,0x37ec2edd4631,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b825c,0x7fff5fbff160,0,0x1e4e34566eed,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa57,0x7fff5fbfeda0,0,0x7fff5fbfedc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000a01c1,0x7fff5fbfecb0,0,0x7fff5fbfef40,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34594cbb,0x7fff5fbff218,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001445cd,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3459724e,0x7fff5fbff280,0,0x1e4e343f1e7a,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100171397,0x7fff5fbff480,0,0x0,0 -tick,0x1000f97e4,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34309dc8,0x7fff5fbfed88,0,0x1e4e343f1adb,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a34,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454da76,0x7fff5fbfec48,0,0x7fff5fbfec20,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbff0d8,0,0x0,3 -tick,0x1002cd6f1,0x7fff5fbfef50,0,0x7fff5fbfef78,0,0x1e4e3439925d -tick,0x100254cf0,0x7fff5fbfec98,0,0x100251f20,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019b22a,0x7fff5fbfef20,0,0xaabee804101,0,0x1e4e3458a2db,0x1e4e345892e0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010e973,0x7fff5fbfe8b0,0,0x102019080,0,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038c7b,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3456503f,0x7fff5fbfea10,0,0x102023a88,0,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432eccb,0x7fff5fbfec40,0,0x1e4e345994d0,0,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435d61b,0x7fff5fbfedc0,0,0x1e4e3456d6d0,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000ded8a,0x7fff5fbfe7a8,0,0x2d29f7fb78d0321,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019bd85,0x7fff5fbfecf0,0,0x1002c3a80,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f93a8,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027a891,0x7fff5fbfea80,0,0x7fff5fbfeb00,0,0x1e4e343e78d4,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002d000b,0x7fff5fbfeab0,0,0x1e4e343a8f05,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100261a25,0x7fff5fbfed40,0,0x11e9a5836ea1,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454ecf3,0x7fff5fbfec90,0,0xe662340051,0 -tick,0x7fff9120c264,0x7fff5fbff260,0,0x0,4 -tick,0x1e4e3431009d,0x7fff5fbfedc0,0,0x1e4e3456d6ec,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002c0e7c,0x7fff5fbfeba0,0,0x102023a88,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34394abe,0x7fff5fbfef58,0,0x11e9a58363c9,0,0x1e4e34399727 -tick,0x1e4e3454d56a,0x7fff5fbfed90,0,0x7fff5fbfee10,0,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001864f0,0x7fff5fbfea40,0,0x7fff5fbfeb58,0,0x1e4e3431b547,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10003934c,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100277b81,0x7fff5fbfea90,0,0x11e9a58dbf59,0,0x1e4e34579e65,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430b345,0x7fff5fbfee10,0,0x1e4e34398a60,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000c5b92,0x7fff5fbfe970,0,0x7fff5fbfe9a0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a9861,0x7fff5fbfe9d0,0,0x0,1 -tick,0x1001a993b,0x7fff5fbfe960,0,0x0,1 -tick,0x1001aa393,0x7fff5fbfe960,0,0x0,1 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024933b,0x7fff5fbfedf0,0,0x101009410,0,0x1e4e34551d37,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253c38,0x7fff5fbfebd0,0,0x37ec2eddee79,0,0x1e4e3455a80b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001a8277,0x7fff5fbfe9e0,0,0x101009410,0,0x1e4e345ae6cd,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10023bb0f,0x7fff5fbfeaa0,0,0x10100a338,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100260810,0x7fff5fbfeda0,0,0x263e5f5700000003,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c13e,0x7fff5fbfedc0,0,0x100a150b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be706,0x7fff5fbff008,0,0x7fff5fbff050,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34555485,0x7fff5fbff120,0,0xa8aa5,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019ece1,0x7fff5fbff0f0,0,0x7fff5fbff150,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10022d1f1,0x7fff5fbfefc0,0,0x7fff5fbfeff0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfef98,0,0x10011c1f9,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b30,0x7fff5fbfeb60,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91208503,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002d53c,0x7fff5fbff040,0,0x103800000,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001447fa,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000a02e4,0x7fff5fbfed60,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f98c0,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34551d7e,0x7fff5fbfea70,0,0x48,0,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b50,0x7fff5fbfefb0,0,0x0,3 -code-creation,LazyCompile,0x1e4e3453eb20,324,"allocPool buffer.js:280",0xe662361ed0,~ -code-creation,LazyCompile,0x1e4e3453ec80,566,"allocPool buffer.js:280",0xe662361ed0,* -tick,0x7fff911dad5f,0x7fff5fbfe950,0,0x7fff5fbfe970,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345558e1,0x7fff5fbfed78,0,0x7fff5fbfedd0,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120fdcc,0x7fff5fbfe7a0,0,0x7fff5fbfe7e0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100044cfa,0x7fff5fbfed88,0,0x1000467cd,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100038ee9,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002061ee,0x7fff5fbfe720,0,0x3d279700000,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000f9277,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100205974,0x7fff5fbfeda0,0,0x7fff5fbfede8,0,0x1e4e34583721,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10026f225,0x7fff5fbfea20,0,0x11e9a4d12fd8,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bcda9,0x7fff5fbfe900,0,0x7fff5fbfe920,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff90f81038,0x7fff5fbfe848,0,0x1002c93c3,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309849,0x7fff5fbfef70,0,0x1e4e343993e2,0 -tick,0x100256639,0x7fff5fbfefb0,0,0x0,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10023b7b3,0x7fff5fbfe6b0,0,0x2,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002039a8,0x7fff5fbfefe0,0,0x11e9a4d7dcc9,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3458a3d1,0x7fff5fbff030,0,0x11e9a4d9bf29,0,0x1e4e345892e0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430d10b,0x7fff5fbfef70,0,0xe662304181,0 -tick,0x10019ecf9,0x7fff5fbfeec0,0,0x7fff5fbfef20,0,0x1e4e34394aa3,0x1e4e34399727 -tick,0x100251f31,0x7fff5fbfeca0,0,0x7fff00000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd0c,0x7fff5fbfeb78,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343262c9,0x7fff5fbfef88,0,0x1e4e343996f0,0 -tick,0x1002761b7,0x7fff5fbfe9d0,0,0x220285,0,0x1e4e34570fec,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002d8d5,0x7fff5fbfeb60,0,0xa00000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8cdc,0x7fff5fbfeb48,0,0x1e4e34583fda,0,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100206d5d,0x7fff5fbfe6a0,0,0x100602a50,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002490f5,0x7fff5fbfe740,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34580200,0x7fff5fbfed28,0,0x1e4e3459490b,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfe8a8,0,0x100121af7,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012f7f0,0x7fff5fbfec38,0,0x1002761b3,0,0x1e4e343985b3,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34570485,0x7fff5fbfef28,0,0x1e4e34570fce,0,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120c059,0x7fff5fbfeda8,0,0x7fff912068f8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432556e,0x7fff5fbff160,0,0x1e4e34566fc0,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100205974,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e343f1de3,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254d3f,0x7fff5fbfebb0,0,0x11e9a4ca9479,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfefc8,0,0x10011d48c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580707,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024af85,0x7fff5fbfee00,0,0x2e9dafd23ac1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000630f3,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009fea7,0x7fff5fbfeec8,0,0x10005b882,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000fa2c6,0x7fff5fbfeb80,0,0x7fff5fbfec10,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121478b,0x7fff5fbfed20,0,0x5fbfed50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbff420,0,0x0,3 -tick,0x7fff91213287,0x7fff5fbfeb40,0,0xffffffffffffffc0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e343a9c3d,0x7fff5fbfeef0,0,0x0,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911ee21c,0x7fff5fbff310,0,0x0,4 -tick,0x1e4e345b2c6e,0x7fff5fbfedd8,0,0x1e4e343e8c22,0,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315061,0x7fff5fbfeed8,0,0x7fff5fbfef20,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34399735,0x7fff5fbfef88,0,0x37ec2edd43f1,0 -tick,0x1002324bf,0x7fff5fbfea30,0,0x0,1 -tick,0x100235e8e,0x7fff5fbfe860,0,0x0,1 -tick,0x100246894,0x7fff5fbfe890,0,0x0,1 -code-creation,StoreIC,0x1e4e345b9320,189,"locked" -code-creation,StoreIC,0x1e4e345b9320,189,"locked" -code-creation,LoadIC,0x1e4e345b93e0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b93e0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b9480,134,"_events" -code-creation,LoadIC,0x1e4e345b9480,134,"_events" -code-creation,LoadIC,0x1e4e345b9520,284,"" -code-creation,LoadIC,0x1e4e345b9520,284,"" -code-creation,LoadIC,0x1e4e345b9640,134,"_ended" -code-creation,LoadIC,0x1e4e345b9640,134,"_ended" -code-creation,LoadIC,0x1e4e345b9080,134,"length" -code-creation,LoadIC,0x1e4e345b9080,134,"length" -code-creation,LoadIC,0x1e4e345b9120,134,"_queue" -code-creation,LoadIC,0x1e4e345b9120,134,"_queue" -code-creation,CallIC,0x1e4e345b55e0,217,"_process" -code-creation,CallIC,0x1e4e345b56c0,492,"write" -code-creation,LoadIC,0x1e4e3457e400,284,"" -code-creation,LoadIC,0x1e4e3457e400,284,"" -code-creation,LoadIC,0x1e4e3457e520,138,"_buffer" -code-creation,LoadIC,0x1e4e3457e520,138,"_buffer" -tick,0x7fff9199e6fe,0x7fff5fbfebe8,0,0x7fff9125a857,0,0x1e4e34399339 -code-creation,LoadIC,0x1e4e3457e5c0,138,"_offset" -code-creation,LoadIC,0x1e4e3457e5c0,138,"_offset" -code-creation,StoreIC,0x1e4e3457e660,189,"_offset" -code-creation,StoreIC,0x1e4e3457e660,189,"_offset" -code-creation,CallIC,0x1e4e3457e720,287,"emit" -code-creation,LoadIC,0x1e4e3457e840,134,"_events" -code-creation,LoadIC,0x1e4e3457e840,134,"_events" -code-creation,LoadIC,0x1e4e3457e8e0,134,"domain" -code-creation,LoadIC,0x1e4e3457e8e0,134,"domain" -code-creation,LoadIC,0x1e4e3457e980,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457e980,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457ea20,185,"_processing" -code-creation,StoreIC,0x1e4e3457ea20,185,"_processing" -code-creation,CallIC,0x1e4e3457eae0,217,"_process" -code-creation,CallIC,0x1e4e3457d740,492,"write" -code-creation,LoadIC,0x1e4e3457d940,138,"_offset" -code-creation,LoadIC,0x1e4e3457d940,138,"_offset" -code-creation,LoadIC,0x1e4e3457d9e0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457d9e0,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457da80,185,"_processing" -code-creation,StoreIC,0x1e4e3457da80,185,"_processing" -code-creation,LoadIC,0x1e4e3457db40,134,"_events" -code-creation,LoadIC,0x1e4e3457db40,134,"_events" -code-creation,LoadIC,0x1e4e3457dbe0,134,"domain" -code-creation,LoadIC,0x1e4e3457dbe0,134,"domain" -code-creation,LoadIC,0x1e4e3457dc80,170,"_pusher" -code-creation,LoadIC,0x1e4e3457dc80,170,"_pusher" -code-creation,LoadIC,0x1e4e3457dd40,170,"_pusher" -code-creation,LoadIC,0x1e4e3457dd40,170,"_pusher" -code-creation,LoadIC,0x1e4e3457de00,134,"_events" -code-creation,LoadIC,0x1e4e3457de00,134,"_events" -code-creation,CallIC,0x1e4e3457dea0,492,"execute" -code-creation,LoadIC,0x1e4e3457e0a0,254,"" -code-creation,LoadIC,0x1e4e3457e0a0,254,"" -code-creation,StoreIC,0x1e4e3457c420,390,"_events" -code-creation,StoreIC,0x1e4e3457c420,390,"_events" -code-creation,LoadIC,0x1e4e3457c5c0,254,"" -code-creation,LoadIC,0x1e4e3457c5c0,254,"" -code-creation,CallIC,0x1e4e3457c6c0,205,"onIncoming" -code-creation,LoadIC,0x1e4e3457c7a0,284,"" -code-creation,LoadIC,0x1e4e3457c7a0,284,"" -code-creation,StoreIC,0x1e4e3457c8c0,420,"_events" -code-creation,StoreIC,0x1e4e3457c8c0,420,"_events" -code-creation,LoadIC,0x1e4e3457ca80,284,"" -code-creation,LoadIC,0x1e4e3457ca80,284,"" -code-creation,LoadIC,0x1e4e3457cba0,134,"_events" -code-creation,LoadIC,0x1e4e3457cba0,134,"_events" -code-creation,CallIC,0x1e4e3457cc40,257,"emit" -code-creation,LoadIC,0x1e4e3457ebc0,134,"_events" -code-creation,LoadIC,0x1e4e3457ebc0,134,"_events" -code-creation,CallIC,0x1e4e345739e0,287,"emit" -code-creation,LoadIC,0x1e4e34573b00,134,"_events" -code-creation,LoadIC,0x1e4e34573b00,134,"_events" -code-creation,CallIC,0x1e4e34573ba0,287,"emit" -code-creation,LoadIC,0x1e4e34573cc0,134,"_events" -code-creation,LoadIC,0x1e4e34573cc0,134,"_events" -code-creation,LoadIC,0x1e4e34573d60,134,"domain" -code-creation,LoadIC,0x1e4e34573d60,134,"domain" -code-creation,LoadIC,0x1e4e34573e00,134,"length" -code-creation,LoadIC,0x1e4e34573e00,134,"length" -code-creation,LoadIC,0x1e4e34573ea0,134,"_events" -code-creation,LoadIC,0x1e4e34573ea0,134,"_events" -code-creation,LoadIC,0x1e4e34573f40,134,"domain" -code-creation,LoadIC,0x1e4e34573f40,134,"domain" -code-creation,CallIC,0x1e4e34573fe0,277,"removeListener" -code-creation,LoadIC,0x1e4e34574100,134,"domain" -code-creation,LoadIC,0x1e4e34574100,134,"domain" -code-creation,CallIC,0x1e4e345741a0,247,"removeListener" -code-creation,LoadIC,0x1e4e345742a0,134,"_events" -code-creation,LoadIC,0x1e4e345742a0,134,"_events" -code-creation,LoadIC,0x1e4e34574340,138,"incoming" -code-creation,LoadIC,0x1e4e34574340,138,"incoming" -tick,0x100269fcb,0x7fff5fbff270,0,0x10305ed67,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34587d19,0x7fff5fbff038,0,0x10024ed90,0 -code-creation,CallIC,0x1e4e345743e0,492,"finish" -code-creation,CallIC,0x1e4e3456e8c0,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3456e9e0,185,"_flush" -code-creation,StoreIC,0x1e4e3456e9e0,185,"_flush" -code-creation,LoadIC,0x1e4e3456eaa0,134,"_events" -code-creation,LoadIC,0x1e4e3456eaa0,134,"_events" -code-creation,LoadIC,0x1e4e3456eb40,254,"" -code-creation,LoadIC,0x1e4e3456eb40,254,"" -code-creation,StoreIC,0x1e4e3456ec40,390,"_events" -code-creation,StoreIC,0x1e4e3456ec40,390,"_events" -code-creation,LoadIC,0x1e4e3456ede0,254,"" -code-creation,LoadIC,0x1e4e3456ede0,254,"" -code-creation,LoadIC,0x1e4e3456eee0,134,"_events" -code-creation,LoadIC,0x1e4e3456eee0,134,"_events" -code-creation,CallIC,0x1e4e3456ef80,257,"emit" -code-creation,StoreIC,0x1e4e3456f0a0,189,"locked" -code-creation,StoreIC,0x1e4e3456f0a0,189,"locked" -code-creation,LoadIC,0x1e4e3456f160,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3456f160,138,"lockBuffer" -code-creation,CallIC,0x1e4e3456c100,287,"emit" -code-creation,LoadIC,0x1e4e3456c220,134,"_ended" -code-creation,LoadIC,0x1e4e3456c220,134,"_ended" -code-creation,LoadIC,0x1e4e3456c2c0,134,"_queue" -code-creation,LoadIC,0x1e4e3456c2c0,134,"_queue" -code-creation,LoadIC,0x1e4e3456c360,138,"_buffer" -code-creation,LoadIC,0x1e4e3456c360,138,"_buffer" -code-creation,StoreIC,0x1e4e3456c400,189,"_offset" -code-creation,StoreIC,0x1e4e3456c400,189,"_offset" -code-creation,CallIC,0x1e4e3456c4c0,287,"emit" -code-creation,LoadIC,0x1e4e3456c5e0,134,"domain" -code-creation,LoadIC,0x1e4e3456c5e0,134,"domain" -code-creation,CallIC,0x1e4e3456c680,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3456c7a0,185,"_flush" -code-creation,StoreIC,0x1e4e3456c7a0,185,"_flush" -code-creation,LoadIC,0x1e4e3456c860,134,"pair" -code-creation,LoadIC,0x1e4e3456c860,134,"pair" -code-creation,LoadIC,0x1e4e3456c900,134,"writable" -code-creation,LoadIC,0x1e4e3456c900,134,"writable" -code-creation,LoadIC,0x1e4e3456c9a0,134,"_pending" -code-creation,LoadIC,0x1e4e3456c9a0,134,"_pending" -code-creation,LoadIC,0x1e4e3456ca40,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3456ca40,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3456cae0,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e3456cae0,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e3456cb80,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e3456cb80,189,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b5180,134,"domain" -code-creation,LoadIC,0x1e4e345b5180,134,"domain" -code-creation,LoadIC,0x1e4e345b5220,134,"_needDrain" -tick,0x7fff911dadc1,0x7fff5fbfe6f0,0,0x7fff5fbfe8a0,0,0x1e4e343f1e91,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345b5220,134,"_needDrain" -tick,0x1001fcf7a,0x7fff5fbfeba0,0,0x7fff5fbfec01,0,0x1e4e3453d1f0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325625,0x7fff5fbfecf0,0,0x1e4e3453d1f0,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10004415f,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911dbd0c,0x7fff5fbfeca8,0,0x10011d48c,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002622f5,0x7fff5fbfea90,0,0x2e9dafd14161,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,CallIC,0x1e4e34569460,492,"execute" -code-creation,CallIC,0x1e4e34569660,205,"onIncoming" -code-creation,LoadIC,0x1e4e34569740,138,"incoming" -code-creation,LoadIC,0x1e4e34569740,138,"incoming" -tick,0x1e4e345aedc5,0x7fff5fbff0a0,0,0x1e4e3457bd81,0 -tick,0x1002523a1,0x7fff5fbfedf0,0,0x7fff5fbfee30,0,0x1e4e34551d37,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e345697e0,492,"finish" -code-creation,LazyCompile,0x1e4e345699e0,692,"ToObject native runtime.js:567",0xe662330290,~ -code-creation,LazyCompile,0x1e4e34336000,692,"ToObject native runtime.js:567",0xe662330290, -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3456c640,0x7fff5fbfee78,0,0x1e4e3455246b,0,0x1e4e343993e2 -tick,0x1e4e345805c1,0x7fff5fbfecb0,0,0x7fff5fbfed10,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f9209,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100172310,0x7fff5fbfead0,0,0x102023a90,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b611,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e3457ce52,0x7fff5fbfee30,0,0x3d2797f6031,0,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x100038f36,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34552059,0x7fff5fbff498,0,0xe6623608b1,0,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x7fff9199e10e,0x7fff5fbfed28,0,0x7fff911f31d7,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100254d8c,0x7fff5fbfec10,0,0x11e9a5ebe101,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e34569ca0,134,"readable" -code-creation,LoadIC,0x1e4e34569ca0,134,"readable" -code-creation,LoadIC,0x1e4e34569d40,200,"resume" -code-creation,LoadIC,0x1e4e34569d40,200,"resume" -code-creation,CallIC,0x1e4e34569e20,217,"resume" -code-creation,CallIC,0x1e4e34569f00,247,"removeListener" -tick,0x100071a0a,0x7fff5fbff000,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfef90,0,0x7fff5fbfefc0,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c54f,0x7fff5fbfed20,0,0xadb0000000003b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff8ddd3325,0x7fff5fbfedf8,0,0x7fff8ddd33db,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfef90,0,0x7fff5fbfefc0,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c6810,0x7fff5fbfec30,0,0x7fff5fbfecd8,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430a8e0,0x7fff5fbff380,0,0x1e4e343df271,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f931c,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000def0f,0x7fff5fbfec28,0,0xcc5c7903848bca37,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd0ca,0x7fff5fbfed70,0,0xd9c9ff15a96f5556,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34594268,0x7fff5fbff570,0,0x1e4e343b64e7,0,0x1e4e343e412b,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456a000,134,"writable" -code-creation,LoadIC,0x1e4e3456a000,134,"writable" -code-creation,CallIC,0x1e4e3456a0a0,217,"write" -code-creation,LoadIC,0x1e4e3456a180,134,"pair" -code-creation,LoadIC,0x1e4e3456a180,134,"pair" -code-creation,LoadIC,0x1e4e3456a220,134,"_pending" -code-creation,LoadIC,0x1e4e3456a220,134,"_pending" -code-creation,LoadIC,0x1e4e3456a2c0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3456a2c0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3456a360,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e3456a360,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e3456a400,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e3456a400,189,"_pendingBytes" -tick,0x1000f970f,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e3456a4c0,134,"_events" -code-creation,LoadIC,0x1e4e3456a4c0,134,"_events" -code-creation,LoadIC,0x1e4e3456a560,134,"domain" -code-creation,LoadIC,0x1e4e3456a560,134,"domain" -code-creation,LoadIC,0x1e4e3456a600,134,"writable" -code-creation,LoadIC,0x1e4e3456a600,134,"writable" -code-creation,CallIC,0x1e4e3456a6a0,200,"write" -code-creation,LoadIC,0x1e4e3456a780,134,"_needDrain" -code-creation,LoadIC,0x1e4e3456a780,134,"_needDrain" -code-creation,CallIC,0x1e4e3456a820,257,"emit" -tick,0x1e4e34398b0a,0x7fff5fbfee38,0,0x37ec2ed77c29,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100005835,0x7fff5fbff1d0,0,0x0,4 -tick,0x100253b6a,0x7fff5fbfeae0,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343098d6,0x7fff5fbff008,0,0x1e4e343248c1,0 -tick,0x7fff9199e10e,0x7fff5fbfed28,0,0x7fff911f31d7,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3439921f,0x7fff5fbfef90,0,0xe662304121,0 -tick,0x1e4e34564b1f,0x7fff5fbfe9b8,0,0x10000c2be,0,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024ef74,0x7fff5fbfefb0,0,0x5,0,0x1e4e3458be04,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100219ab1,0x7fff5fbff1c0,0,0x0,4 -tick,0x10010d3e6,0x7fff5fbff2a0,0,0x0,4 -tick,0x1e4e34333004,0x7fff5fbfed78,0,0x1e4e3454dadf,0,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f4144,0x7fff5fbfe6b0,0,0x3b71005fbfe6f0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459bf49,0x7fff5fbfed30,0,0x1e4e345949e5,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345785e1,0x7fff5fbff2f0,0,0x7fff5fbff348,0,0x1e4e345984df -tick,0x100193417,0x7fff5fbfeab0,0,0x7fff5fbfeb67,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34306140,0x7fff5fbfed48,0,0x1e4e3454ed8b,0,0x1e4e3454d436,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x100279be0,0x7fff5fbfe808,0,0x10027558d,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c8843,0x7fff5fbfec28,0,0x1002c87b0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b50,0x7fff5fbfe620,0,0x101009410,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010ca30,0x7fff5fbff4a8,0,0x1000143d9,0,0x1e4e343b63aa,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911dad59,0x7fff5fbfeb20,0,0x7fff5fbfebe0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000df3bf,0x7fff5fbfe748,0,0xcc5c7903882c93b7,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343e8d2f,0x7fff5fbfed50,0,0x11e9a5c76641,0,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024eec4,0x7fff5fbfef40,0,0x100000000,0,0x1e4e3458a2db,0x1e4e345892e0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100232d5a,0x7fff5fbff0b0,0,0x7fff5fbff0f0,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008e771,0x7fff5fbfefb8,0,0x10008da93,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbf9d,0x7fff5fbfed58,0,0x7fff9120c12c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c298,0x7fff5fbfec40,0,0x9e3c97b82b78be7c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de641,0x7fff5fbfec88,0,0x26bc47c56adedc0f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa4d,0x7fff5fbfefc0,0,0x7fff5fbff000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345949d6,0x7fff5fbff218,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912137b6,0x7fff5fbfed30,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001446c3,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253c0d,0x7fff5fbfeb60,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c264,0x7fff5fbff570,0,0x0,4 -tick,0x1000643ae,0x7fff5fbfee40,0,0x102019d00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1003951c4,0x7fff5fbfeb48,0,0x10015de2b,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a428,0x7fff5fbfee30,0,0xaabee819c11,0,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100260f90,0x7fff5fbfe7c8,0,0x100122184,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002761d1,0x7fff5fbfebd0,0,0x7fff5fbfec60,0,0x1e4e3455a80b,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343098be,0x7fff5fbfee90,0,0xe662304121,0,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x100315091,0x7fff5fbfe8a0,0,0x7fff5fbfe8d0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100218e4c,0x7fff5fbfe970,0,0x1,0,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024fb9f,0x7fff5fbfe2a0,0,0x11e9a5a25cb1,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff912086ca,0x7fff5fbfebe8,0,0x7fff912064ae,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002bf4cc,0x7fff5fbfee40,0,0x1e4e34394688,0,0x1e4e3455eb2b,0x1e4e343949fb,0x1e4e34399727 -tick,0x7fff9120683e,0x7fff5fbfe828,0,0x101902e60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bcda9,0x7fff5fbfe920,0,0x7fff5fbfe940,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b26fe,0x7fff5fbff0a0,0,0x11e9a5a97669,0 -tick,0x1e4e345634ec,0x7fff5fbfed60,0,0x101009400,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10000a5e1,0x7fff5fbfed20,0,0x7fff5fbfed60,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34555413,0x7fff5fbfedb8,0,0x3d2797f6031,0,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ed60,0x7fff5fbfea90,0,0x0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170941,0x7fff5fbfea80,0,0x7fff5fbfeab0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431b405,0x7fff5fbfed90,0,0x1e4e34557b9c,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251e4c,0x7fff5fbfed60,0,0x7fff5fbfee68,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d1f1,0x7fff5fbfe980,0,0x7fff5fbfe9b0,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34595828,0x7fff5fbff0c8,0,0x1e4e343b6ad4,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000bd20d,0x7fff5fbfed90,0,0x7fff5fbfee20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34311b2d,0x7fff5fbff278,0,0x1e4e343f1d72,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c61dd,0x7fff5fbfed40,0,0x7fff5fbfed60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfedd8,0,0x10012825a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34306162,0x7fff5fbff260,0,0x1e4e343060e1,0,0x1e4e343f1c43,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be574,0x7fff5fbff170,0,0x102023a68,0,0x1e4e343f1c43,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad61,0x7fff5fbfed30,0,0x7fff5fbfed60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34521268,0x7fff5fbfeea0,0,0x1e4e345767d8,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa28,0x7fff5fbfee38,0,0x1000bd305,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100169f2c,0x7fff5fbff118,0,0x11e9a59e1829,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d3a0,0x7fff5fbfeef8,0,0x10002cc21,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff91213484,0x7fff5fbfe7b0,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454a492,0x7fff5fbfee60,0,0x1e4e3458747a,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343e8bc1,0x7fff5fbfee20,0,0x7fff5fbfee50,0,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002ce4bf,0x7fff5fbfeb90,0,0x1002ce470,0,0x1e4e343599a4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343dfce2,0x7fff5fbfeb70,0,0x1e4e345ae2ce,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34579af2,0x7fff5fbfeb30,0,0x102023b48,0,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daab5,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430c384,0x7fff5fbfed68,0,0x1e4e3431b444,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345874f2,0x7fff5fbfee70,0,0x11e9a58bad99,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34554902,0x7fff5fbfed78,0,0xe66234d299,0,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019b245,0x7fff5fbfeb00,0,0xaabee804101,0,0x1e4e34570fec,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfeab0,0,0x17a3df600000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a98c8,0x7fff5fbfe6a0,0,0x0,1 -tick,0x1001a951a,0x7fff5fbfe710,0,0x0,1 -tick,0x10011babb,0x7fff5fbff2d0,0,0x10104b290,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019ca08,0x7fff5fbfe6a0,0,0x102023b18,0,0x1e4e34322a85,0x1e4e34320c96,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,StoreIC,0x1e4e3456a940,189,"_buffer" -code-creation,StoreIC,0x1e4e3456a940,189,"_buffer" -code-creation,Stub,0x1e4e3456aa00,513,"BinaryOpStub_SUB_Alloc_Generic" -code-creation,LoadIC,0x1e4e3456ac20,138,"_binding" -code-creation,LoadIC,0x1e4e3456ac20,138,"_binding" -code-creation,LoadIC,0x1e4e3456acc0,134,"_flush" -code-creation,LoadIC,0x1e4e3456acc0,134,"_flush" -tick,0x7fff9199e6fe,0x7fff5fbfeb18,0,0x7fff9125a857,0,0x1e4e34399604 -code-creation,StoreIC,0x1e4e3456ad60,189,"callback" -code-creation,StoreIC,0x1e4e3456ad60,189,"callback" -code-creation,StoreIC,0x1e4e3456ae20,189,"buffer" -code-creation,StoreIC,0x1e4e3456ae20,189,"buffer" -tick,0x100262d01,0x7fff5fbfebd0,0,0x0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332fdf,0x7fff5fbfed80,0,0x1e4e3454d0f5,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3ef,0x7fff5fbfeba0,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ac4bc,0x7fff5fbfeeb0,0,0x1e4e343ae6f4,0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012e9e9,0x7fff5fbfe7c0,0,0x7fff5fbfe820,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012ef20,0x7fff5fbff100,0,0x0,3 -tick,0x100252d4c,0x7fff5fbff100,0,0x2d90905c00000009,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9127cb7e,0x7fff5fbff3e8,0,0x100014faf,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b8cdc,0x7fff5fbfeda8,0,0x1e4e3457b4d7,0,0x1e4e343e8c62,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dbc1,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002491a1,0x7fff5fbfeed0,0,0x7fff5fbfef40,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1d51,0x7fff5fbff278,0,0x9be4f4fee9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566ece,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001267db,0x7fff5fbfeda0,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343262c9,0x7fff5fbff288,0,0x1e4e343f1e29,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c787,0x7fff5fbfed20,0,0xc8d40000000051,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006f56e,0x7fff5fbff038,0,0x10002d5b9,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f92ec,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dab07,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3454dff9,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001794bd,0x7fff5fbfec88,0,0x7fff5fbfedf8,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff9121383d,0x7fff5fbfe700,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024911d,0x7fff5fbfe9a0,0,0x7fff5fbfea10,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbcfc,0x7fff5fbfe7d8,0,0x7fff911f4105,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3456aee0,189,"_buffer" -code-creation,StoreIC,0x1e4e3456aee0,189,"_buffer" -code-creation,StoreIC,0x1e4e3456afa0,189,"callback" -code-creation,StoreIC,0x1e4e3456afa0,189,"callback" -code-creation,StoreIC,0x1e4e3456b060,189,"buffer" -code-creation,StoreIC,0x1e4e3456b060,189,"buffer" -tick,0x1002608ef,0x7fff5fbfe8a0,0,0x263e5f570000000a,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100038cb8,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430f8ae,0x7fff5fbff090,0,0x1e4e3431f688,0,0x1e4e343b69fe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34321001,0x7fff5fbff530,0,0xe662304121,0,0x1e4e343b63ce,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x1e4e3430aa4d,0x7fff5fbfedb0,0,0x1e4e3459db90,0,0x1e4e343e8c98,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001787d7,0x7fff5fbfeb00,0,0x11e9a4c28329,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430c5bf,0x7fff5fbfedf8,0,0x1e4e3435b389,0,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455506e,0x7fff5fbfed80,0,0x1e4e3454da72,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002622f5,0x7fff5fbfeb70,0,0x1,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100144f78,0x7fff5fbfed70,0,0x1e4e00000001,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019127d,0x7fff5fbff2e8,0,0x101009400,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100251ea5,0x7fff5fbfece0,0,0x3d279764be9,0,0x1e4e3455ab16,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000b9860,0x7fff5fbfe7d0,0,0x7fff5fbfea60,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024aff6,0x7fff5fbfe8f0,0,0x2e9dafd05169,0,0x1e4e3455a74d,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8101,0x7fff5fbfeae0,0,0x7fff5fbfeb20,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b50,0x7fff5fbfe8b0,0,0x101009410,0,0x1e4e3455a74d,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ee93,0x7fff5fbfeb88,0,0x0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34588196,0x7fff5fbfefc8,0,0x1002bf37e,0,0x1e4e345603e5,0x1e4e3458991c,0x1e4e345892e0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100277aaf,0x7fff5fbfea80,0,0x2e9dafd056a9,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011fbee,0x7fff5fbfee80,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206831,0x7fff5fbfee58,0,0x1000c8301,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbfefd0,0,0x7fff5fbff010,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdb3,0x7fff5fbfedd0,0,0x7fff5fbfee80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1d02,0x7fff5fbff278,0,0x37ec2ed9cca9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120855f,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566b81,0x7fff5fbff200,0,0x7fff5fbff240,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005baf0,0x7fff5fbfefa0,0,0x101900c80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100128149,0x7fff5fbfede0,0,0x4056800000000000,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c4a82,0x7fff5fbfedd0,0,0x7fff5fbfedf0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd2a3,0x7fff5fbfec00,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10024af60,0x7fff5fbfe8e8,0,0x1002be86c,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343361de,0x7fff5fbfe8b0,0,0xe662350169,0,0x1e4e34320c78,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daa40,0x7fff5fbfe950,0,0x7fff5fbfe980,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345807d3,0x7fff5fbfecb0,0,0x0,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002fcfd,0x7fff5fbfe7a0,0,0x7fff5fbfe7d0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f4210,0x7fff5fbfea40,0,0x5,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b195,0x7fff5fbfeb70,0,0x7fff5fbfebd0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100044155,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e343a1645,0x7fff5fbfeb90,0,0x1e4e34334687,0,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253ae1,0x7fff5fbff3a0,0,0x7fff5fbff3d0,0,0x1e4e34551d37,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x1001787d7,0x7fff5fbfeac0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b50,0x7fff5fbfe870,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b611,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dc91,0x7fff5fbfecb0,0,0x102023a88,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfec30,0,0x101009410,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daa49,0x7fff5fbfec00,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026f1c7,0x7fff5fbfea20,0,0x11e9a4aec3c8,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34320d6e,0x7fff5fbfeb18,0,0x1e4e34579bae,0,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100250e70,0x7fff5fbfee10,0,0xd9c9ff15a96f5556,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254d12,0x7fff5fbfed00,0,0x9be4f28db9,0,0x1e4e345b4543,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343098e1,0x7fff5fbfeca8,0,0x1e4e34580a7c,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002524f6,0x7fff5fbfe7d0,0,0x0,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100039020,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c808e,0x7fff5fbfed68,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523ea,0x7fff5fbfebe0,0,0xe662300000,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9290,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfea60,0,0x2e9dafd05104,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd17c,0x7fff5fbfee70,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454dee2,0x7fff5fbfefd8,0,0x5a00000000,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010e871,0x7fff5fbff0b0,0,0x7fff5fbff0f0,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34597205,0x7fff5fbff280,0,0x1e4e343f1e7a,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100248ff1,0x7fff5fbfec50,0,0x7fff5fbfecc0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024924d,0x7fff5fbff228,0,0x9be4f28db9,0,0x1e4e34551d37,0x1e4e34573444,0x1e4e343b650b,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x7fff9120ff52,0x7fff5fbfea68,0,0x7,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911dadc1,0x7fff5fbfeb20,0,0x7fff5fbfebe0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100218e41,0x7fff5fbfe980,0,0x7fff5fbfe9b0,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100120022,0x7fff5fbfea60,0,0x10306e300,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff911f27d6,0x7fff5fbfeb50,0,0x10099b0f0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100175d60,0x7fff5fbfec50,0,0x101009400,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000a717,0x7fff5fbfece0,0,0x7fff5fbfed00,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306182,0x7fff5fbfeae0,0,0x1e4e343060e1,0,0x1e4e345587d1,0x1e4e3453cca7,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34315222,0x7fff5fbfeb60,0,0x11e9a48e5c19,0,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1003009c4,0x7fff5fbfe980,0,0x0,1 -tick,0x1001a9b43,0x7fff5fbfe950,0,0x0,1 -tick,0x7fff911daad2,0x7fff5fbfe910,0,0x0,1 -tick,0x1e4e345b55c0,0x7fff5fbfef80,0,0x1e4e34399439,0 -tick,0x100063b5b,0x7fff5fbfea80,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad59,0x7fff5fbfeb20,0,0x7fff5fbfebe0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10015ddf1,0x7fff5fbfeb70,0,0x7fff5fbfeb90,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170950,0x7fff5fbfea30,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254693,0x7fff5fbfea80,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3430617f,0x7fff5fbfee40,0,0x1e4e343060e1,0,0x1e4e34570fec,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3430c544,0x7fff5fbff0a0,0,0x1e4e3431f53f,0,0x1e4e343b69fe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a0741,0x7fff5fbfeac0,0,0x7fff5fbfeb10,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000de07f,0x7fff5fbfea00,0,0x103016558,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253fff,0x7fff5fbfe7d0,1,0x10000a04c,3,0x1e4e3453ed3f,0x1e4e3454d637,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459ab65,0x7fff5fbff080,0,0x1e4e3431f661,0,0x1e4e343b69fe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019cf31,0x7fff5fbfed80,0,0x7fff5fbfedd0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fcb4,0x7fff5fbfef58,0,0x10005b882,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfed80,0,0x263e5f5700000015,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34594d7f,0x7fff5fbff248,0,0x1e4e343098ce,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfeda0,0,0x263e5f570000000a,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100063a65,0x7fff5fbfef60,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b37,0x7fff5fbfee10,0,0x101009410,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024aff6,0x7fff5fbfea60,0,0x2e9dafd05104,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c13eb,0x7fff5fbfee78,0,0x1000bd15f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100191440,0x7fff5fbfef70,0,0x102019d00,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345a4165,0x7fff5fbfeee0,0,0x1e4e34597a09,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd10b,0x7fff5fbfed68,0,0x1000bd28b,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34311972,0x7fff5fbfec20,0,0x1e4e345554e2,0,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001785e0,0x7fff5fbfe9b8,0,0x10011fb87,3,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9121478b,0x7fff5fbfea70,1,0x10000a04c,4,0x1e4e3453ed3f,0x1e4e3454d637,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1003946ea,0x7fff5fbfe938,0,0x10019ed51,3,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002490b4,0x7fff5fbfe8a0,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3456b120,2436,"replace native string.js:221",0xe6623231e8,~ -tick,0x1001e5086,0x7fff5fbfe560,0,0x10283d7a0,2,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3453eec0,3700,"replace native string.js:221",0xe6623231e8,* -tick,0x1002608ec,0x7fff5fbfe700,0,0xbaffa840000000a,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf39c,0x7fff5fbff210,0,0x1,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100252472,0x7fff5fbfe9f0,0,0x0,0,0x1e4e3455c3de,0x1e4e34588883,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d171,0x7fff5fbfea80,0,0x7fff5fbfeb30,0,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432556e,0x7fff5fbfebe0,0,0x1e4e34587fe0,0,0x1e4e345603e5,0x1e4e345a995d,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431b531,0x7fff5fbfed70,0,0xaabee8169e1,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da168,0x7fff5fbfeb38,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9864,0x7fff5fbfec70,0,0x11e9a5df1ba1,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010ca31,0x7fff5fbfeb80,0,0x7fff5fbfebe0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435d281,0x7fff5fbff0a8,0,0x1e4e3457bf50,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024f1cd,0x7fff5fbfe900,0,0xa5c158d9,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345921fe,0x7fff5fbff120,0,0x11e900000000,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345750e1,0x7fff5fbfee48,0,0x7fff5fbfee88,0,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3b6,0x7fff5fbfebb8,0,0x10100a770,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001500af,0x7fff5fbfeab0,0,0x7fff5fbfeb00,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430aa84,0x7fff5fbfee60,0,0x1e4e34587250,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343996f0,0x7fff5fbfef90,0,0x0,0 -tick,0x1001146dc,0x7fff5fbff558,0,0x0,4 -tick,0x10019ece1,0x7fff5fbfe290,0,0x7fff5fbfe300,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d43c,0x7fff5fbfefe0,0,0x15,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcf7,0x7fff5fbfee08,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f200e,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34576883,0x7fff5fbfeea8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c3c2,0x7fff5fbfecc0,0,0xe72c0000000169,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34597205,0x7fff5fbff280,0,0x1e4e343f1e7a,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001203f6,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454e2eb,0x7fff5fbfefd0,0,0x11e9a5b538b1,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f93b3,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011b611,0x7fff5fbfeef0,0,0x7fff5fbfef50,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de074,0x7fff5fbfeea0,0,0x7fff5fbfeeb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454a48e,0x7fff5fbff5c0,0,0x1e4e3459e4aa,0 -tick,0x7fff91213632,0x7fff5fbfeb40,0,0xffffffffffffffc0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3454d6ec,0x7fff5fbfeb30,0,0x100000000,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c16c,0x7fff5fbfebe8,0,0x101009498,0,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432554b,0x7fff5fbfeaf0,0,0x1e4e3455a0b7,0,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100150091,0x7fff5fbfeaf0,0,0x7fff5fbfeb40,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10010e877,0x7fff5fbff2b0,0,0x0,4 -tick,0x1002bf323,0x7fff5fbff210,0,0x1,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34309e4d,0x7fff5fbfebc0,0,0x1e4e343aabf9,0,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c1520,0x7fff5fbfeb68,0,0x1e4e3430618e,0,0x1e4e3454d16d,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a7917,0x7fff5fbfef40,0,0x1e4e343949d6,0,0x1e4e34399727 -tick,0x7fff911da171,0x7fff5fbfec48,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8101,0x7fff5fbfeac0,0,0x7fff5fbfeaf0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251069,0x7fff5fbfeb60,0,0x1c51,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34331b8a,0x7fff5fbfef28,0,0x1e4e34394a55,0,0x1e4e34399727 -tick,0x1e4e3457bf7f,0x7fff5fbff0a0,0,0x11e9a5aa4d59,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100005879,0x7fff5fbff1d0,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff911dbcff,0x7fff5fbff338,0,0x0,4 -tick,0x10010ca52,0x7fff5fbfebb0,0,0x1,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345570f8,0x7fff5fbfed98,0,0x1e4e343060e1,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8d00,0x7fff5fbfee38,0,0x1e4e34394669,0,0x1e4e3455287e,0x1e4e343993e2 -tick,0x7fff9120fd92,0x7fff5fbfe7b0,0,0x7fff5fbfe860,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024f2e0,0x7fff5fbfe900,0,0xa5adbf19,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34306140,0x7fff5fbfe978,0,0x1e4e3455497b,0,0x1e4e34564c92,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000de673,0x7fff5fbfec28,0,0xa0c93d59fbfe6b93,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfee00,0,0x2e9dafd13ad1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002524b2,0x7fff5fbfee70,0,0x2e9dafd23ac1,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012f03f,0x7fff5fbfee78,0,0x1002490ed,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254653,0x7fff5fbfedf0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253c3e,0x7fff5fbfee68,0,0x37ec2ed13579,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b51e8,0x7fff5fbff050,0,0x1e4e3455246b,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002ff06,0x7fff5fbff038,0,0x10002d47b,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afbe,0x7fff5fbfee00,0,0x2e9dafd13ad1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c691,0x7fff5fbff160,0,0x7fff5fbff1d0,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f997b,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10024edc5,0x7fff5fbfeb80,0,0x2c2694a1adf1,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120fc1d,0x7fff5fbff258,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10010e877,0x7fff5fbff2b0,0,0x0,4 -tick,0x100253b37,0x7fff5fbfe620,0,0x101009410,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfe8a0,0,0x263e5f570000000a,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024aff6,0x7fff5fbfe9e0,0,0x2e9dafd14da1,0,0x1e4e3455ac3e,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024edc5,0x7fff5fbfeb80,0,0x2c2694a120f1,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a242a,0x7fff5fbfeb10,0,0x11e9a5800000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfebf0,0,0x224a48af00000005,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8d18,0x7fff5fbfeb48,0,0x1e4e34583fda,0,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026c54b,0x7fff5fbfea60,0,0x7fff5fbfeb20,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff912107f1,0x7fff5fbfe830,0,0x7fff5fbfe8e0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456c8c0,0x7fff5fbfed90,0,0x1e4e343f1d15,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c0dc,0x7fff5fbfe760,0,0xb14a2787d9250134,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1003009ca,0x7fff5fbfe7f0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe810,0,0x0,1 -tick,0x1001987b5,0x7fff5fbfe7e0,0,0x0,1 -tick,0x1e4e345b8473,0x7fff5fbfecb0,0,0xc800000000,0,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100179eb9,0x7fff5fbfe8b0,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f92e6,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002d6b1,0x7fff5fbfeb80,0,0x103055220,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100257adf,0x7fff5fbfe278,0,0x2,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34589abc,0x7fff5fbff030,0,0x11e9a4e903d9,0,0x1e4e345892e0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10018e565,0x7fff5fbfed90,0,0x1003edf26,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de446,0x7fff5fbfec28,0,0x200d1f4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34597641,0x7fff5fbfef30,0,0x7fff5fbfefb8,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100252468,0x7fff5fbfef60,0,0x0,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbfedc0,0,0x7fff5fbfee00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbf90,0x7fff5fbfecb8,0,0x7fff91213830,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f4038,0x7fff5fbfeec0,0,0x37ec00000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd10b,0x7fff5fbfee28,0,0x1000bd28b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de5be,0x7fff5fbfec28,0,0xcc5c79030200d56c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de965,0x7fff5fbfec98,0,0xb8c56279b7e89e49,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3456515e,0x7fff5fbfea10,0,0x102023a88,0,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100014822,0x7fff5fbfea30,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3453fd40,1464,"callback zlib.js:395",0x37ec2ed7eae8,~ -tick,0x1001e9170,0x7fff5fbfe4c8,0,0x1001ee409,2 -code-creation,LazyCompile,0x1e4e34540300,5016,"callback zlib.js:395",0x37ec2ed7eae8,* -tick,0x100254e83,0x7fff5fbfeba0,0,0x37ec2eddef19,0,0x1e4e3455a80b,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10010d3ef,0x7fff5fbfea20,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026b47d,0x7fff5fbfea80,0,0x7fff5fbfeb20,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435a1d5,0x7fff5fbfebb0,0,0x11e9a4d4f7f1,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100394534,0x7fff5fbfe7c8,0,0x1001221af,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459d582,0x7fff5fbff090,0,0x9be4f22e49,0,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254cf1,0x7fff5fbff110,0,0x7fff5fbff200,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000af1c,0x7fff5fbfebd8,1,0x10000af1c,4,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010e883,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343098c3,0x7fff5fbfed08,0,0xe662304121,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457d177,0x7fff5fbfece0,0,0xd,0,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201221,0x7fff5fbfecb0,0,0x7fff5fbfecd8,0,0x1e4e3453d1f0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343258a8,0x7fff5fbfecd8,0,0x1e4e34551d37,0,0x1e4e3455a63b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100262bd1,0x7fff5fbfe2b0,0,0x7fff5fbfe710,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3453c646,0x7fff5fbfecb8,0,0xe662304121,0,0x1e4e345b7896,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b92d0,0x7fff5fbfee68,0,0xaabee8178d1,0,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34324860,0x7fff5fbff050,0,0x1e4e34311317,0 -tick,0x100250eb1,0x7fff5fbfe7d0,0,0x7fff5fbfe840,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345670c7,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012f03f,0x7fff5fbfe998,0,0x1002490ed,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100267611,0x7fff5fbff1f0,0,0x7fff5fbff260,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254e50,0x7fff5fbfec80,0,0x1020259f0,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c6797,0x7fff5fbfec68,0,0x1000c696a,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd1c0,0x7fff5fbfed60,0,0x1000c5c05,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f4038,0x7fff5fbfeec0,0,0x37ec00000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912132a9,0x7fff5fbfec60,0,0xffffffffffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3795,0x7fff5fbfec20,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100075a7c,0x7fff5fbfef58,0,0x100063c0e,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912085e9,0x7fff5fbfedc0,0,0x7fff5fbfee10,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001203f6,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213742,0x7fff5fbfecf0,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019acd0,0x7fff5fbff198,0,0x1002c93db,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e345984df -tick,0x1000f9821,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3430c2e5,0x7fff5fbfee98,0,0x1e4e34345467,0,0x1e4e343aa7b8,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100315091,0x7fff5fbfeb90,0,0x7fff5fbfebc0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345553c0,0x7fff5fbfee18,0,0x1e4e3452a4b5,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b611,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457d031,0x7fff5fbfee30,0,0x3d2797f6031,0,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608bc,0x7fff5fbfef30,0,0x23c089520000000a,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a2421,0x7fff5fbfeb60,0,0x7fff5fbfeba0,0,0x1e4e3455218e,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343985a1,0x7fff5fbfee60,0,0x7fff5fbfeea0,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345994c1,0x7fff5fbfedc8,0,0x7fff5fbfee48,0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100260a71,0x7fff5fbfe970,0,0x7fff5fbfe9f0,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430c380,0x7fff5fbfed68,0,0x1e4e3431b444,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251f73,0x7fff5fbfeca0,0,0x7fff00000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c3a80,0x7fff5fbfed48,0,0x1e4e3430618e,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100186475,0x7fff5fbfea40,0,0x7fff5fbfeb58,0,0x1e4e3431b547,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b123b,0x7fff5fbfe9a0,0,0x7fff5fbfea90,0,0x1e4e343a92fa,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024fa11,0x7fff5fbfe7f0,0,0x7fff5fbfe890,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002548e0,0x7fff5fbfec10,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff911dbd0c,0x7fff5fbfeae8,0,0x10011d48c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34552059,0x7fff5fbfec30,0,0x7fff5fbfec88,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -code-creation,LoadIC,0x1e4e345416a0,134,"length" -code-creation,LoadIC,0x1e4e345416a0,134,"length" -tick,0x10002fcd3,0x7fff5fbfe7a0,0,0x7fff5fbfe7d0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432556e,0x7fff5fbfeca8,0,0x1e4e34580961,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10016a194,0x7fff5fbfe690,0,0x11e900000000,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000a01eb,0x7fff5fbfeca0,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100260956,0x7fff5fbfeca0,0,0x0,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3f58,0x7fff5fbfed30,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100144539,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213767,0x7fff5fbfec20,0,0x10099da00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c1d36,0x7fff5fbfeea8,0,0x1000c5e74,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002bf398,0x7fff5fbfecc0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1003950e6,0x7fff5fbfed68,0,0x1000bd0fd,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91215394,0x7fff5fbfefe8,0,0x100063d40,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100075b2b,0x7fff5fbfef20,0,0x101900c80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912069cf,0x7fff5fbfede8,0,0x100a12be0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120415,0x7fff5fbfef30,0,0x7fff5fbfef50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100218e41,0x7fff5fbfec60,0,0x7fff5fbfec90,0,0x1e4e3454e2fc,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120686e,0x7fff5fbff310,0,0x0,4 -tick,0x7fff912083bc,0x7fff5fbff300,0,0x0,4 -tick,0x10010d3ef,0x7fff5fbfeb80,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002be303,0x7fff5fbfec60,0,0x1002be700,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bd17c,0x7fff5fbfe8e0,0,0x1000c5c05,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100191271,0x7fff5fbfeab0,0,0x7fff5fbfeaf0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343259e8,0x7fff5fbfe698,0,0x1e4e3455c3de,0,0x1e4e34334687,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253bc2,0x7fff5fbfee70,0,0x101009410,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9127ced8,0x7fff5fbfed68,0,0x100044dfe,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10000b1ad,0x7fff5fbfeac0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100254850,0x7fff5fbfec10,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e34519ce4,0x7fff5fbfee08,0,0x1e4e3454deac,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x1000df1a3,0x7fff5fbfe7a8,0,0xdad29efecaedb997,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120351,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af61,0x7fff5fbff610,0,0x0,3 -tick,0x1001aa8e3,0x7fff5fbfe760,0,0x0,1 -tick,0x1001a8a50,0x7fff5fbfe7d0,0,0x0,1 -tick,0x1001987fa,0x7fff5fbfe7a0,0,0x0,1 -tick,0x100206a7d,0x7fff5fbfe5c0,0,0x7fff5fbfe6b0,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10023b7a3,0x7fff5fbfeb60,0,0x5,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100117e30,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012fb5e,0x7fff5fbfe9d8,0,0x7fff5fbfeaa0,0,0x1e4e345add48,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199ed11,0x7fff5fbff808,0,0x0,4 -tick,0x100166090,0x7fff5fbfea98,0,0x1001441b9,0,0x1e4e343e78eb,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100206bcd,0x7fff5fbfeba0,0,0x100602a50,0,0x1e4e34583ea8,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100175d11,0x7fff5fbff0f0,0,0x7fff5fbff120,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e34384cf0,0x1e4e345522ca,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120481,0x7fff5fbff030,0,0x7fff5fbff090,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454d0c1,0x7fff5fbff098,0,0x7fff5fbff0f0,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345673e1,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be732,0x7fff5fbff1e0,0,0x37ec2eda37f9,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d45d,0x7fff5fbfefb0,0,0x1019008b0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3456caa0,0x7fff5fbff288,0,0x1e4e343f1dd0,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001ff2f1,0x7fff5fbfed90,0,0x102019b80,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002774e1,0x7fff5fbfe5f8,0,0x11e9a5eaafa9,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad20,0x7fff5fbfee08,0,0x10001a965,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34552103,0x7fff5fbff498,0,0xe6623608b1,0,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x1000f9767,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1000fde45,0x7fff5fbfe998,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001443f5,0x7fff5fbfec48,0,0x1e4e3430618e,0,0x1e4e345aff56,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002061ee,0x7fff5fbfeaf0,0,0x3d279700000,0,0x1e4e3456d6ec,0x1e4e34398b06,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001794b6,0x7fff5fbfeb18,0,0x1,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a4768,0x7fff5fbfec48,0,0x1e4e345a9b53,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10014468e,0x7fff5fbfeea0,0,0x7fff5fbfeef0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002bf4bf,0x7fff5fbfe9e0,0,0x7fff5fbfea00,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be86c,0x7fff5fbfef20,0,0x7fff5fbff060,0,0x1e4e34551d37,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002039ab,0x7fff5fbfeb40,0,0x20,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100206393,0x7fff5fbfeb10,0,0x220285,0,0x1e4e345afbf0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100063b2a,0x7fff5fbfeae0,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9741,0x7fff5fbfed80,0,0x7fff5fbfeda8,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c23c,0x7fff5fbfe910,0,0x2e9dafd13ad1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345881c8,0x7fff5fbff038,0,0x10024ed90,0 -tick,0x100206a7d,0x7fff5fbfe900,0,0x7fff5fbfe9f0,0,0x1e4e3458d12a,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002761a0,0x7fff5fbfe9a0,0,0x220285,0,0x1e4e3458c6cb,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f2be5,0x7fff5fbfec18,0,0x100044d2d,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4a0,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34570e61,0x7fff5fbfee98,0,0x7fff5fbfeef0,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1001fcb91,0x7fff5fbfec40,0,0x7fff5fbfecb0,0,0x1e4e3453d1f0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ac085,0x7fff5fbfebe8,0,0x1e4e34571067,0,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91215394,0x7fff5fbfeb28,0,0x100063292,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3430da29,0x7fff5fbfeca8,0,0x1e4e345b89e6,0,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001ffc66,0x7fff5fbfeda0,0,0x7fff5fbfedd0,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024b183,0x7fff5fbff208,0,0x7fff5fbff268,0,0x1e4e34551d37,0x1e4e34573444,0x1e4e343b650b,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x10006f6d7,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430988a,0x7fff5fbff170,0,0x7fff5fbff200,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430a939,0x7fff5fbff380,0,0x1e4e343df271,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10016d73f,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e343f1c43,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002389e0,0x7fff5fbfea90,0,0x1e4e343c1996,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfed80,0,0x263e5f5700000015,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213489,0x7fff5fbfec60,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000fde13,0x7fff5fbfed58,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912137ff,0x7fff5fbfec10,0,0x7fff5fbfec50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c05f,0x7fff5fbfebb8,0,0x70,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34311980,0x7fff5fbfeb20,0,0x1e4e3453ed3f,0,0x1e4e3454d637,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000a6e7,0x7fff5fbfece0,0,0x7fff5fbfed00,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100206064,0x7fff5fbfec20,0,0x11e9a5c00000,0,0x1e4e345835f9,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10023603c,0x7fff5fbfea10,0,0x0,1 -tick,0x10023590c,0x7fff5fbfe990,0,0x0,1 -tick,0x1002ff38d,0x7fff5fbfea50,0,0x0,1 -code-creation,LoadIC,0x1e4e345b9320,134,"_events" -code-creation,LoadIC,0x1e4e345b9320,134,"_events" -code-creation,LoadIC,0x1e4e345b93c0,284,"" -code-creation,LoadIC,0x1e4e345b93c0,284,"" -code-creation,LoadIC,0x1e4e345b94e0,134,"_ended" -code-creation,LoadIC,0x1e4e345b94e0,134,"_ended" -code-creation,LoadIC,0x1e4e345b9580,134,"length" -code-creation,LoadIC,0x1e4e345b9580,134,"length" -code-creation,LoadIC,0x1e4e345b9620,134,"_queue" -code-creation,LoadIC,0x1e4e345b9620,134,"_queue" -code-creation,CallIC,0x1e4e345b9080,217,"_process" -code-creation,CallIC,0x1e4e345b4f80,492,"write" -code-creation,LoadIC,0x1e4e345b5180,284,"" -code-creation,LoadIC,0x1e4e345b5180,284,"" -code-creation,LoadIC,0x1e4e345b52a0,138,"_buffer" -code-creation,LoadIC,0x1e4e345b52a0,138,"_buffer" -code-creation,LoadIC,0x1e4e345b5340,138,"_offset" -code-creation,LoadIC,0x1e4e345b5340,138,"_offset" -code-creation,StoreIC,0x1e4e345b53e0,189,"_offset" -code-creation,StoreIC,0x1e4e345b53e0,189,"_offset" -code-creation,CallIC,0x1e4e345b54a0,287,"emit" -code-creation,LoadIC,0x1e4e345b55c0,134,"_events" -code-creation,LoadIC,0x1e4e345b55c0,134,"_events" -code-creation,LoadIC,0x1e4e345b5660,134,"domain" -code-creation,LoadIC,0x1e4e345b5660,134,"domain" -code-creation,LoadIC,0x1e4e345b5700,138,"_chunkSize" -code-creation,LoadIC,0x1e4e345b5700,138,"_chunkSize" -code-creation,StoreIC,0x1e4e345b57a0,185,"_processing" -code-creation,StoreIC,0x1e4e345b57a0,185,"_processing" -code-creation,CallIC,0x1e4e345b0f60,217,"_process" -code-creation,CallIC,0x1e4e3457e400,492,"write" -code-creation,LoadIC,0x1e4e3457e600,138,"_offset" -code-creation,LoadIC,0x1e4e3457e600,138,"_offset" -code-creation,LoadIC,0x1e4e3457e6a0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457e6a0,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457e740,185,"_processing" -code-creation,StoreIC,0x1e4e3457e740,185,"_processing" -code-creation,CallIC,0x1e4e3457e800,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3457e920,185,"_flush" -code-creation,StoreIC,0x1e4e3457e920,185,"_flush" -code-creation,LoadIC,0x1e4e3457e9e0,134,"_events" -code-creation,LoadIC,0x1e4e3457e9e0,134,"_events" -code-creation,LoadIC,0x1e4e3457ea80,254,"" -code-creation,LoadIC,0x1e4e3457ea80,254,"" -code-creation,StoreIC,0x1e4e3457eb80,390,"_events" -code-creation,StoreIC,0x1e4e3457eb80,390,"_events" -code-creation,LoadIC,0x1e4e3457c420,254,"" -code-creation,LoadIC,0x1e4e3457c420,254,"" -code-creation,LoadIC,0x1e4e3457c520,134,"_events" -code-creation,LoadIC,0x1e4e3457c520,134,"_events" -code-creation,CallIC,0x1e4e3457c5c0,257,"emit" -code-creation,LoadIC,0x1e4e3457c6e0,134,"_events" -code-creation,LoadIC,0x1e4e3457c6e0,134,"_events" -code-creation,StoreIC,0x1e4e3457c780,189,"locked" -tick,0x100122a21,0x7fff5fbfec00,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3457c780,189,"locked" -code-creation,LoadIC,0x1e4e3457c840,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457c840,138,"lockBuffer" -code-creation,CallIC,0x1e4e3457c8e0,287,"emit" -code-creation,LoadIC,0x1e4e3457ca00,134,"_ended" -code-creation,LoadIC,0x1e4e3457ca00,134,"_ended" -code-creation,LoadIC,0x1e4e3457caa0,134,"_queue" -code-creation,LoadIC,0x1e4e3457caa0,134,"_queue" -code-creation,LoadIC,0x1e4e3457cb40,138,"_buffer" -code-creation,LoadIC,0x1e4e3457cb40,138,"_buffer" -code-creation,StoreIC,0x1e4e3457cbe0,189,"_offset" -code-creation,StoreIC,0x1e4e3457cbe0,189,"_offset" -code-creation,CallIC,0x1e4e345739e0,287,"emit" -code-creation,LoadIC,0x1e4e34573b00,134,"domain" -code-creation,LoadIC,0x1e4e34573b00,134,"domain" -code-creation,CallIC,0x1e4e34573ba0,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e34573cc0,185,"_flush" -code-creation,StoreIC,0x1e4e34573cc0,185,"_flush" -code-creation,LoadIC,0x1e4e34573d80,134,"pair" -code-creation,LoadIC,0x1e4e34573d80,134,"pair" -code-creation,LoadIC,0x1e4e34573e20,134,"writable" -code-creation,LoadIC,0x1e4e34573e20,134,"writable" -code-creation,LoadIC,0x1e4e34573ec0,134,"_pending" -code-creation,LoadIC,0x1e4e34573ec0,134,"_pending" -code-creation,LoadIC,0x1e4e34573f60,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e34573f60,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e34574000,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e34574000,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e345740a0,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345740a0,189,"_pendingBytes" -code-creation,LoadIC,0x1e4e34574160,170,"_pusher" -code-creation,LoadIC,0x1e4e34574160,170,"_pusher" -code-creation,LoadIC,0x1e4e34574220,170,"_pusher" -code-creation,LoadIC,0x1e4e34574220,170,"_pusher" -code-creation,LoadIC,0x1e4e345742e0,134,"domain" -code-creation,LoadIC,0x1e4e345742e0,134,"domain" -code-creation,LoadIC,0x1e4e34574380,134,"_needDrain" -code-creation,LoadIC,0x1e4e34574380,134,"_needDrain" -code-creation,LoadIC,0x1e4e34574420,134,"length" -code-creation,LoadIC,0x1e4e34574420,134,"length" -code-creation,StoreIC,0x1e4e345744c0,189,"locked" -code-creation,StoreIC,0x1e4e345744c0,189,"locked" -code-creation,LoadIC,0x1e4e34574580,138,"lockBuffer" -code-creation,LoadIC,0x1e4e34574580,138,"lockBuffer" -tick,0x10010d3c7,0x7fff5fbfeb30,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343180c1,0x7fff5fbfea18,0,0x37ec2eddef79,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457609c,0x7fff5fbfee80,0,0x11e9a4f33b59,0,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3432556e,0x7fff5fbfeb70,0,0x1e4e345529b6,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e3457cca0,134,"_events" -code-creation,LoadIC,0x1e4e3457cca0,134,"_events" -code-creation,LoadIC,0x1e4e345b1040,134,"domain" -code-creation,LoadIC,0x1e4e345b1040,134,"domain" -code-creation,CallIC,0x1e4e3456e8c0,492,"execute" -code-creation,LoadIC,0x1e4e3456eac0,254,"" -code-creation,LoadIC,0x1e4e3456eac0,254,"" -code-creation,StoreIC,0x1e4e3456ebc0,390,"_events" -code-creation,StoreIC,0x1e4e3456ebc0,390,"_events" -code-creation,LoadIC,0x1e4e3456ed60,254,"" -code-creation,LoadIC,0x1e4e3456ed60,254,"" -code-creation,CallIC,0x1e4e3456ee60,205,"onIncoming" -tick,0x7fff9199e6fe,0x7fff5fbfec08,1,0x100013f1a,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456ef40,284,"" -code-creation,LoadIC,0x1e4e3456ef40,284,"" -code-creation,StoreIC,0x1e4e3456f060,420,"_events" -code-creation,StoreIC,0x1e4e3456f060,420,"_events" -code-creation,LoadIC,0x1e4e3456c100,284,"" -code-creation,LoadIC,0x1e4e3456c100,284,"" -code-creation,LoadIC,0x1e4e3456c220,134,"_events" -code-creation,LoadIC,0x1e4e3456c220,134,"_events" -code-creation,CallIC,0x1e4e3456c2c0,257,"emit" -code-creation,LoadIC,0x1e4e3456c3e0,134,"_events" -code-creation,LoadIC,0x1e4e3456c3e0,134,"_events" -code-creation,CallIC,0x1e4e3456c480,287,"emit" -code-creation,LoadIC,0x1e4e3456c5a0,134,"_events" -code-creation,LoadIC,0x1e4e3456c5a0,134,"_events" -code-creation,CallIC,0x1e4e3456c640,287,"emit" -code-creation,LoadIC,0x1e4e3456c760,134,"_events" -code-creation,LoadIC,0x1e4e3456c760,134,"_events" -code-creation,LoadIC,0x1e4e3456c800,134,"domain" -code-creation,LoadIC,0x1e4e3456c800,134,"domain" -code-creation,LoadIC,0x1e4e3456c8a0,134,"_events" -code-creation,LoadIC,0x1e4e3456c8a0,134,"_events" -code-creation,LoadIC,0x1e4e3456c940,134,"domain" -code-creation,LoadIC,0x1e4e3456c940,134,"domain" -code-creation,CallIC,0x1e4e3456c9e0,277,"removeListener" -code-creation,LoadIC,0x1e4e3456cb00,134,"domain" -code-creation,LoadIC,0x1e4e3456cb00,134,"domain" -code-creation,CallIC,0x1e4e3456ac20,247,"removeListener" -code-creation,LoadIC,0x1e4e3456ad20,134,"_events" -code-creation,LoadIC,0x1e4e3456ad20,134,"_events" -code-creation,LoadIC,0x1e4e3456adc0,138,"incoming" -code-creation,LoadIC,0x1e4e3456adc0,138,"incoming" -tick,0x100190837,0x7fff5fbfe810,0,0x102023b10,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456ae60,492,"execute" -code-creation,CallIC,0x1e4e3456b060,205,"onIncoming" -code-creation,LoadIC,0x1e4e3456b140,138,"incoming" -code-creation,LoadIC,0x1e4e3456b140,138,"incoming" -tick,0x1e4e3435ccf5,0x7fff5fbff0a8,0,0x1e4e3457bed9,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456b1e0,492,"finish" -code-creation,CallIC,0x1e4e3456b3e0,492,"finish" -tick,0x10010dbc1,0x7fff5fbff1c0,0,0x0,4 -tick,0x1e4e3430b6a4,0x7fff5fbfef78,0,0x1e4e34399372,0 -tick,0x7fff9120c0d5,0x7fff5fbfe880,0,0x100000022,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34567952,0x7fff5fbfec80,0,0xe662335941,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170950,0x7fff5fbfea00,0,0x9,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430a91f,0x7fff5fbfeef0,0,0x1e4e343a9b78,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x100391a72,0x7fff5fbfea10,0,0x7fff5fbfea40,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455a75b,0x7fff5fbfedf8,0,0x2e9dafd19839,0,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3432556e,0x7fff5fbfedf0,0,0x1e4e343986dc,0,0x1e4e345761cf,0x1e4e34583f95,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345529b1,0x7fff5fbfee80,0,0x37ec2ed77cd9,0,0x1e4e343993e2 -code-creation,StoreIC,0x1e4e3456b5e0,189,"_buffer" -code-creation,StoreIC,0x1e4e3456b5e0,189,"_buffer" -code-creation,LoadIC,0x1e4e3456b6a0,138,"_binding" -code-creation,LoadIC,0x1e4e3456b6a0,138,"_binding" -code-creation,LoadIC,0x1e4e3456b740,134,"_flush" -code-creation,LoadIC,0x1e4e3456b740,134,"_flush" -code-creation,StoreIC,0x1e4e3456b7e0,189,"callback" -code-creation,StoreIC,0x1e4e3456b7e0,189,"callback" -code-creation,StoreIC,0x1e4e3456b8a0,189,"buffer" -code-creation,StoreIC,0x1e4e3456b8a0,189,"buffer" -tick,0x100251f38,0x7fff5fbfed50,0,0x0,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e34332f50,0x7fff5fbfea28,0,0x1e4e34548360,0,0x1e4e34596709,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100260892,0x7fff5fbfe8b0,0,0x11e9a4e90ba1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002565f1,0x7fff5fbff020,0,0x7fff5fbff040,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019fc03,0x7fff5fbff260,0,0x2e9dafd059b9,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100144656,0x7fff5fbfeb20,0,0x7fff5fbfeb60,0,0x1e4e343b6791,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456b960,134,"readable" -code-creation,LoadIC,0x1e4e3456b960,134,"readable" -code-creation,LoadIC,0x1e4e3456ba00,200,"resume" -code-creation,LoadIC,0x1e4e3456ba00,200,"resume" -code-creation,CallIC,0x1e4e3456bae0,217,"resume" -code-creation,CallIC,0x1e4e3456bbc0,247,"removeListener" -tick,0x1e4e343262ef,0x7fff5fbff288,0,0x1e4e343f1e29,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912135b8,0x7fff5fbfec90,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cd1,0x7fff5fbfeda8,0,0x100051ee8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912083bc,0x7fff5fbfed40,0,0x7fff5fbfed90,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa42,0x7fff5fbfef50,0,0x7fff5fbfefb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34332c29,0x7fff5fbff278,0,0x1e4e343f1adb,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34311b2d,0x7fff5fbff278,0,0x1e4e343f1d72,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c22b,0x7fff5fbfedf0,0,0x2e9dafd13ad1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100172261,0x7fff5fbfefa0,0,0x7fff5fbfefd0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1db9,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430c2e5,0x7fff5fbff568,0,0x1e4e343b64ed,0,0x1e4e343e412b,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456bcc0,134,"writable" -code-creation,LoadIC,0x1e4e3456bcc0,134,"writable" -code-creation,CallIC,0x1e4e345b10e0,217,"write" -code-creation,LoadIC,0x1e4e345b0280,134,"pair" -code-creation,LoadIC,0x1e4e345b0280,134,"pair" -code-creation,LoadIC,0x1e4e345b0320,134,"_pending" -code-creation,LoadIC,0x1e4e345b0320,134,"_pending" -code-creation,LoadIC,0x1e4e345b03c0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b03c0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b0460,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b0460,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b0500,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b0500,189,"_pendingBytes" -tick,0x10026082d,0x7fff5fbfeca0,0,0x263e5f5700000015,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e345b05c0,134,"_events" -code-creation,LoadIC,0x1e4e345b05c0,134,"_events" -code-creation,LoadIC,0x1e4e345b0660,134,"domain" -code-creation,LoadIC,0x1e4e345b0660,134,"domain" -code-creation,LoadIC,0x1e4e345b0700,134,"writable" -code-creation,LoadIC,0x1e4e345b0700,134,"writable" -code-creation,CallIC,0x1e4e345ad280,200,"write" -code-creation,LoadIC,0x1e4e345ad360,134,"_needDrain" -code-creation,LoadIC,0x1e4e345ad360,134,"_needDrain" -code-creation,CallIC,0x1e4e345ad400,257,"emit" -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b95e8,0x7fff5fbfee30,0,0x1e4e3439875f,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100218e81,0x7fff5fbfece0,0,0x7fff5fbfed10,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e343269a0,0x7fff5fbfee38,0,0x1e4e3455a80b,0,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019cf31,0x7fff5fbfeaf0,0,0x7fff5fbfeb18,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911db6a9,0x7fff5fbfeac8,0,0x10011d4a6,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456d6c1,0x7fff5fbfee20,0,0x7fff5fbfee60,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911daa57,0x7fff5fbff3e0,0,0x7fff5fbff410,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455d3c1,0x7fff5fbfeb88,0,0x7fff5fbfebe0,0,0x1e4e345b6181,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454df27,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002761d1,0x7fff5fbfe840,0,0x7fff5fbfe890,0,0x1e4e3455a80b,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309eed,0x7fff5fbfec78,0,0x1e4e345afdb1,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dc82,0x7fff5fbfecb0,0,0x102023a88,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002770cc,0x7fff5fbfe900,0,0x11e9a4c3e061,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026bbdc,0x7fff5fbfea40,0,0x3000000008,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002e4ee6,0x7fff5fbfec50,0,0x102023a88,0,0x1e4e343a9b0d,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3db,0x7fff5fbfe990,0,0x10000bfca,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c00a0,0x7fff5fbff060,0,0x2,0,0x1e4e34320ed1,0x1e4e343b6b12,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3e6,0x7fff5fbfeba0,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff90f806fc,0x7fff5fbfec18,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c3cba,0x7fff5fbfed40,0,0x7fff5fbfed60,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ef43,0x7fff5fbfeb60,0,0x11e9a4ce8569,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012eae1,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002e4c3b,0x7fff5fbfe6a0,0,0x1e4e34327dbe,0,0x1e4e343a689f,0x1e4e34555ca8,0x1e4e34564a8c,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10002cb0b,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c5e5,0x7fff5fbfed80,0,0x12605000000001d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34552823,0x7fff5fbff058,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad66,0x7fff5fbfef40,0,0x7fff5fbfef70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10000c163,0x7fff5fbfef50,0,0x7fff5fbfef90,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253c23,0x7fff5fbfedc0,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580479,0x7fff5fbff188,0,0x37ec2edd46c1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c1c1,0x7fff5fbfee10,0,0x7fff5fbfee60,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c0e4,0x7fff5fbfec40,0,0x1e04290662be251d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1d72,0x7fff5fbff280,0,0xe662335941,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c6812,0x7fff5fbfec30,0,0x7fff5fbfecd8,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9808,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3454dee2,0x7fff5fbfee00,0,0xbf00000000,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x10008dd68,0x7fff5fbfeba0,0,0x1019008b0,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345679df,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x1e4e343252a0,0x7fff5fbfeee8,0,0x1e4e343a9c42,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1001ff1b3,0x7fff5fbfea70,0,0x7fff5fbfeaa0,0,0x1e4e343aac0a,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002699c0,0x7fff5fbff268,0,0x10026a061,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000c12eb,0x7fff5fbfea20,0,0x7fff5fbfea70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001844b8,0x7fff5fbfecb0,0,0x0,0,0x1e4e3439925d -tick,0x100170e5b,0x7fff5fbff2d0,0,0x0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10002d539,0x7fff5fbfeb60,0,0x103800000,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daa49,0x7fff5fbfe8f0,0,0x7fff5fbfe920,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3435d5fb,0x7fff5fbfedc0,0,0x1e4e3456d6d0,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911f30c7,0x7fff5fbff350,0,0x0,4 -tick,0x10018457e,0x7fff5fbfe850,0,0x101009401,0,0x1e4e343210fa,0x1e4e34548360,0x1e4e3458d568,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3e6,0x7fff5fbfe990,0,0x1,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be6b9,0x7fff5fbfea00,0,0x102023a90,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34566f22,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523ba,0x7fff5fbfe650,0,0x101009410,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10008d8be,0x7fff5fbfefa0,0,0x7fff5fbfefd0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f92ce,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fc23,0x7fff5fbfece8,0,0x1019022c0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566bfe,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34567240,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019cc71,0x7fff5fbfefc0,0,0x7fff5fbff020,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002772f1,0x7fff5fbfe610,0,0x7fff5fbfea70,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002492c0,0x7fff5fbfee20,0,0x101009410,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008d929,0x7fff5fbff010,0,0x143b1b,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de300,0x7fff5fbfec28,0,0x100000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9719,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34559fc1,0x7fff5fbfee98,0,0x7fff5fbfeef0,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3455a6ef,0x7fff5fbfedf8,0,0x2e9dafd19839,0,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34573b80,0x7fff5fbfee78,0,0x1e4e3455246b,0,0x1e4e343993e2 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019cd48,0x7fff5fbff260,0,0x10306ab36,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024af85,0x7fff5fbfe7c0,0,0x2e9dafd05104,0,0x1e4e3455a80b,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343061c6,0x7fff5fbfeaf0,0,0x1e4e3455a80b,0,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343592e8,0x7fff5fbfec58,0,0xe662304121,0,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170941,0x7fff5fbfe8f0,0,0x7fff5fbfe920,3,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201c26,0x7fff5fbfeaa0,0,0x7fff5fbfeb18,0,0x1e4e34570fec,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a34,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x100252464,0x7fff5fbfeda0,0,0x101009400,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b7a85,0x7fff5fbfea90,0,0x7fff5fbfeac0,0,0x1e4e34584e52,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b50,0x7fff5fbfe790,0,0x101009410,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343ae621,0x7fff5fbfeec8,0,0x7fff5fbfef20,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34557d8f,0x7fff5fbfeda8,0,0x11e9a48ce5a1,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912086ff,0x7fff5fbfebe0,0,0x7fff5fbfec10,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100175d11,0x7fff5fbfeae0,0,0x7fff5fbfeb10,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f1a14,0x7fff5fbfeba0,0,0x4d555458,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100249108,0x7fff5fbfe810,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a6d1,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315222,0x7fff5fbff2d8,0,0x11e9a474c751,0,0x1e4e34576997,0x1e4e345984df -tick,0x1e4e34325862,0x7fff5fbfe728,0,0x1e4e34551d37,0,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100198a8d,0x7fff5fbfe980,0,0x2e9dafd00000,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34315115,0x7fff5fbfe988,0,0xe66234f301,0,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100144d32,0x7fff5fbfed70,0,0x1e4e345554e2,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34552364,0x7fff5fbfec30,0,0x7fff5fbfec88,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3456777c,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012eae0,0x7fff5fbff018,0,0x10002ff1d,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9127cbc6,0x7fff5fbfedd8,0,0x10012825a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005168e,0x7fff5fbfecd0,0,0x4a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa5a,0x7fff5fbfebe0,0,0x7fff5fbfec10,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100274921,0x7fff5fbfe600,0,0x7fff5fbfe640,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100018381,0x7fff5fbfed20,0,0x7fff5fbfed60,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfed18,0,0x100145b4e,4,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002758f1,0x7fff5fbfec10,0,0x7fff5fbfec60,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34310095,0x7fff5fbfef18,0,0x1e4e3456d6ec,0,0x1e4e34399744 -tick,0x1001a2a74,0x7fff5fbfe860,0,0x0,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025a928,0x7fff5fbfe6f0,0,0x1002bfd50,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10001a2b5,0x7fff5fbfe920,0,0x7fff5fbfe990,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456e3bc,0x7fff5fbfef28,0,0xe662304101,0,0x1e4e34399744 -tick,0x1e4e3457c660,0x7fff5fbfea98,0,0x1e4e3455a43d,0,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343258de,0x7fff5fbfedf0,0,0x1e4e3455a74d,0,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10010d3c7,0x7fff5fbfeae0,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b507a,0x7fff5fbfeea8,0,0x1e4e345b4f81,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10019cd02,0x7fff5fbfec20,0,0x10307c123,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a9417,0x7fff5fbfeac8,0,0x11e9a450cdf9,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daad8,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34568b13,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f2845,0x7fff5fbfeb50,0,0x10099b0f0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000c13be,0x7fff5fbfead0,0,0x7fff5fbfeb30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c604c,0x7fff5fbfeb20,0,0xe662300000,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254601,0x7fff5fbfec40,0,0x7fff5fbfec90,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10018e642,0x7fff5fbfe8b0,0,0x1003edf26,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343258de,0x7fff5fbfeb48,0,0x1e4e3455c3de,0,0x1e4e34334687,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001930f0,0x7fff5fbfeb18,0,0x1002c0e05,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100172c6b,0x7fff5fbfe840,0,0x7fff5fbfe8c0,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100315091,0x7fff5fbfed80,0,0x7fff5fbfedb0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100144366,0x7fff5fbff1e0,0,0x37ec00000000,0,0x1e4e343f1db9,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120340,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002ff850,0x7fff5fbff0d0,0,0xdc025860000,0,0x1e4e34580509,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a0621,0x7fff5fbff1d0,0,0x7fff5fbff250,0,0x1e4e343f1db9,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100251f1b,0x7fff5fbfebd0,0,0x200000000,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002492bc,0x7fff5fbfee20,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001ff011,0x7fff5fbfee40,0,0x7fff5fbfeeb0,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345ad25c,0x7fff5fbff270,0,0x1e4e343f1ac3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f98c9,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345553c1,0x7fff5fbfef68,0,0x7fff5fbfefb8,0 -tick,0x7fff912154c7,0x7fff5fbfe860,0,0x7fff5fbfe880,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457eb38,0x7fff5fbfebe0,0,0x1e4e34587fe0,0,0x1e4e345603e5,0x1e4e345a995d,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ec58,0x7fff5fbfe6b0,0,0x11e9a44872f1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912133bb,0x7fff5fbfe720,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431009d,0x7fff5fbfeb68,0,0x1e4e345adba1,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cd11,0x7fff5fbfec20,0,0x10105aeb7,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251ed5,0x7fff5fbff3e0,0,0x0,3 -tick,0x10024fe96,0x7fff5fbfe2a0,0,0x11e9a4400000,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100277504,0x7fff5fbfeaa8,0,0x11e9a44fd669,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001500af,0x7fff5fbfeaf0,0,0x7fff5fbfeb40,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911d9d04,0x7fff5fbfeb20,0,0x7fff5fbfebe0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34327aa8,0x7fff5fbfec58,0,0x1e4e34567081,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34570ffc,0x7fff5fbfec08,0,0x11e9a4349069,0,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f18c7,0x7fff5fbfed68,0,0x100044dfe,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10002ff06,0x7fff5fbfeb58,0,0x10002d7cb,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253f51,0x7fff5fbfea30,0,0x7fff5fbfea70,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be638,0x7fff5fbff140,0,0x102023a88,0,0x1e4e34551d37,0x1e4e34598721 -tick,0x1001a2a74,0x7fff5fbfe860,0,0x0,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001456a4,0x7fff5fbfea40,0,0x1,0,0x1e4e3455c886,0x1e4e3458e112,0x1e4e343b67b1,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10001bba9,0x7fff5fbfe920,0,0x7fff5fbfe990,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100232b31,0x7fff5fbfee90,0,0x7fff5fbfeef0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x10027a8c6,0x7fff5fbfec20,0,0x11e9a420f099,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343258e9,0x7fff5fbfed20,0,0x1e4e34551d37,0,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019edc8,0x7fff5fbfe850,0,0x0,3,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010ca31,0x7fff5fbfeef0,0,0x7fff5fbfef50,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002d7be,0x7fff5fbff040,0,0x7fff5fbff0c0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343083a2,0x7fff5fbff268,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100118d21,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfef98,0,0x10011c1f9,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd1b0,0x7fff5fbfedc0,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdbc,0x7fff5fbfecb0,0,0x7fff5fbfecf0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002c87b1,0x7fff5fbfef70,0,0x7fff5fbfef98,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fcde,0x7fff5fbfec00,0,0x10099f800,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9904,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3432554b,0x7fff5fbfeda0,0,0x1e4e343f1f17,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251f73,0x7fff5fbfec70,0,0x3d200000000,0,0x1e4e3455a80b,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002c87b1,0x7fff5fbfec40,0,0x7fff5fbfec68,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100117b70,0x7fff5fbff1c8,0,0x0,4 -tick,0x1000bd212,0x7fff5fbfea28,0,0x100a12be0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315115,0x7fff5fbfeca0,0,0x37ec2ed0dee1,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002e4d5d,0x7fff5fbfe950,0,0x102023a88,0,0x1e4e343210fa,0x1e4e3454dadf,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91213626,0x7fff5fbfeaf0,0,0xfffffffffffffc00,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3457bce1,0x7fff5fbff0f8,0,0x7fff5fbff198,0 -tick,0x10024ef80,0x7fff5fbfee90,0,0xd9c9ff15a96f5556,0,0x1e4e345b4a7f,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf28a,0x7fff5fbfef90,0,0x7fff5fbff060,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b9b03,0x7fff5fbfec70,0,0x11e9a4107c91,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911f271f,0x7fff5fbfeb50,0,0x10099b0f0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10011fbf8,0x7fff5fbfe9a0,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34599a26,0x7fff5fbfed80,0,0x11e9a41a20a9,0,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be511,0x7fff5fbff560,0,0x0,3 -tick,0x100184702,0x7fff5fbfe820,0,0x101009401,0,0x1e4e34320ee7,0x1e4e34579bae,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024fe96,0x7fff5fbfe650,0,0x11e9a4100000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100259c19,0x7fff5fbfe890,0,0x1019023b0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430aa40,0x7fff5fbfe678,0,0x1e4e343e41ec,0,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455c26c,0x7fff5fbfeae0,0,0x7fff5fbfeb48,0,0x1e4e34588883,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f2ce1,0x7fff5fbfea90,0,0x7fff5fbfeb10,0,0x1e4e343e7909,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9120c05f,0x7fff5fbfe8b8,0,0x70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100145ac4,0x7fff5fbfec70,0,0xe662304121,0,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b6837,0x7fff5fbfedc0,0,0x7fff5fbfedf0,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff911ee1ee,0x7fff5fbfea68,0,0x7fff5fbfeb1c,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100268862,0x7fff5fbfe970,0,0x102023b20,0,0x1e4e343a9328,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d464,0x7fff5fbfe938,0,0x10100a770,0,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345810d9,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34327b69,0x7fff5fbff138,0,0x1e4e34567081,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262c04,0x7fff5fbfe620,0,0x5,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b30,0x7fff5fbfeb60,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432af1f,0x7fff5fbff270,0,0x1e4e343f1af1,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1003932f1,0x7fff5fbfed60,0,0x7fff5fbfed80,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b6565,0x7fff5fbff0f8,0,0x1e4e34560143,0,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de186,0x7fff5fbfee70,0,0x1000c1d36,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001446cf,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100121229,0x7fff5fbff510,0,0x0,4 -tick,0x1e4e34592f43,0x7fff5fbff000,0,0x1e4e3457eeab,0,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002492da,0x7fff5fbfe8e0,0,0x101009410,0,0x1e4e3455ac3e,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad57,0x7fff5fbfec70,0,0x7fff5fbfed30,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1001aa8e3,0x7fff5fbfe950,0,0x0,1 -tick,0x1001a9b43,0x7fff5fbfe970,0,0x0,1 -tick,0x7fff911daafb,0x7fff5fbfe960,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe9c0,0,0x0,1 -tick,0x1e4e3436d304,0x7fff5fbfee70,0,0x1e4e343ad89e,0,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254e83,0x7fff5fbfecc0,0,0x7fff5fbfed10,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x10019cd40,0x7fff5fbfea60,0,0x1003d3d67,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024b700,0x7fff5fbfea88,0,0x1002be944,0,0x1e4e343e78d4,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343360f2,0x7fff5fbfeb98,0,0xe662350169,0,0x1e4e34571c20,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a67e5,0x7fff5fbfe9c0,0,0x1e4e34555ca8,0,0x1e4e34564a8c,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34579ab3,0x7fff5fbfeb30,0,0x102023b48,0,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002607b1,0x7fff5fbff130,0,0x7fff5fbff170,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100251268,0x7fff5fbfeb60,0,0x162b,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad4a,0x7fff5fbfeb20,0,0x7fff5fbfebe0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343258ec,0x7fff5fbfef00,0,0x1e4e34551d37,0,0x1e4e3455a43d,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038414,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3439860a,0x7fff5fbfedf8,0,0xe662304121,0,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1002be511,0x7fff5fbfece0,0,0x7fff5fbfed60,0,0x1e4e34551d37,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201cb8,0x7fff5fbfee70,0,0x11e9a5c174e1,0,0x1e4e343a9cb0,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170963,0x7fff5fbfea30,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253ae0,0x7fff5fbfec68,0,0x10024b001,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbfed28,0,0x7fff911f31d7,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100173ba1,0x7fff5fbfeaa0,0,0x7fff5fbfeb10,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3456eef8,0x7fff5fbff100,0,0x1e4e345921fe,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100201292,0x7fff5fbfe7b0,0,0x11e9a5c3d280,0,0x1e4e3453c902,0x1e4e343e436a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002ef008,0x7fff5fbfecd0,0,0xffffff01,2 -code-creation,LazyCompile,0x1e4e3453fd40,4956,"callback zlib.js:395",0x37ec2ed7eae8,* -tick,0x1e4e345addb5,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e343a9448,0x7fff5fbfead0,0,0x11e9a5cc1959,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff912135b1,0x7fff5fbfec90,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001912c2,0x7fff5fbfefd0,0,0x16b485,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100051ee0,0x7fff5fbfee10,0,0x7fff5fbfee50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457f7b8,0x7fff5fbff020,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3459bdc9,0x7fff5fbff288,0,0x1e4e343f1e57,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325574,0x7fff5fbff288,0,0x1e4e343f1da3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012f03f,0x7fff5fbfee78,0,0x1002490ed,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1f5d,0x7fff5fbff288,0,0x37ec2ed9cca9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309d8d,0x7fff5fbff150,0,0x1e4e34567ae8,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3431196e,0x7fff5fbff308,0,0x1e4e34576997,0,0x1e4e345984df -tick,0x1000bd10b,0x7fff5fbfec58,0,0x1000c629a,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9120c059,0x7fff5fbfe888,0,0x7fff912068f8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100148951,0x7fff5fbfed90,0,0x7fff5fbfee10,0,0x1e4e34394669,0x1e4e3455287e,0x1e4e343993e2 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100120351,0x7fff5fbfeba0,0,0x7fff5fbfebc0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430e002,0x7fff5fbfebc0,0,0x1e4e343aabea,0,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e122,0x7fff5fbfed18,0,0x7fff911f2dfd,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3458754e,0x7fff5fbfee70,0,0xe66236f699,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251e41,0x7fff5fbfee30,0,0x7fff5fbfeec0,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1002afadd,0x7fff5fbfeb88,0,0x1e4e3452aa21,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34557b46,0x7fff5fbfeda8,0,0x11e9a5b8cb39,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ec85,0x7fff5fbfebc0,0,0x1101a5f04fb1,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430ac85,0x7fff5fbfee18,0,0x1e4e34398634,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002c3b9c,0x7fff5fbfe9f0,0,0x1,0,0x1e4e3455497b,0x1e4e343a8fe7,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100187901,0x7fff5fbfe750,0,0x6a00,0,0x1e4e343a936f,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001ff741,0x7fff5fbfe840,0,0x7fff5fbfe870,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1002608ef,0x7fff5fbfebf0,0,0x17a3df6000000022,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34583526,0x7fff5fbfeee0,0,0x37ec2ed77921,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3455e7f2,0x7fff5fbfef20,0,0x11e9a5a79211,0,0x1e4e343949fb,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff90f806f5,0x7fff5fbfecf8,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be554,0x7fff5fbff0d0,0,0x0,3 -tick,0x1000bd110,0x7fff5fbfe9c8,0,0x7fff5fbfea00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002607b1,0x7fff5fbfef30,0,0x7fff5fbfef70,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010cb1d,0x7fff5fbfe5b0,0,0x0,0,0x1e4e34560bb7,0x1e4e343e426d,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253ae0,0x7fff5fbfe918,0,0x10024b001,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100064799,0x7fff5fbfef20,0,0x102019d00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100274921,0x7fff5fbfece0,0,0x7fff5fbfed20,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912061e1,0x7fff5fbfed48,0,0x140,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbfedc0,0,0x7fff5fbfee00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002772f8,0x7fff5fbfe600,0,0x5,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009ff01,0x7fff5fbfef30,0,0x44b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9280,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100218e41,0x7fff5fbfed80,0,0x7fff5fbfedb0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100232b54,0x7fff5fbff0b0,0,0x7fff5fbff0f0,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f988f,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911dbf90,0x7fff5fbfeb28,0,0x7fff91213830,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002524b2,0x7fff5fbfecb0,0,0x0,0,0x1e4e34551d37,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100179217,0x7fff5fbfeb00,0,0x101009410,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435ccf5,0x7fff5fbfeb48,0,0x1e4e343e7832,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b7e2,0x7fff5fbfebb0,0,0x101816190,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120351,0x7fff5fbfea50,0,0x7fff5fbfea70,0,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431520e,0x7fff5fbfedb0,0,0x11e9a59d2901,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a9a,0x7fff5fbfe9b8,0,0x10000c1f1,0,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100275a21,0x7fff5fbfe7f0,0,0x9be4f9dcf1,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343e838a,0x7fff5fbff598,0,0xaabee821951,0,0x1e4e3459e4aa -tick,0x10024edc5,0x7fff5fbfeb80,0,0x11e9a5f05021,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfec30,0,0x101009410,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343259b6,0x7fff5fbfeb80,0,0x1e4e3455ac3e,0,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309a6e,0x7fff5fbfec78,0,0x1e4e345afd61,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ac09c,0x7fff5fbfeb10,0,0x1e4e34571067,0,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34328525,0x7fff5fbfec20,0,0x1e4e34552010,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024eccb,0x7fff5fbfedc0,0,0x11e9a58aebb0,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f3258,0x7fff5fbff388,0,0x0,4 -tick,0x1001711bb,0x7fff5fbff0e0,0,0x0,0 -tick,0x100274de0,0x7fff5fbfe9f8,0,0x1002795fb,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91213367,0x7fff5fbfeaf0,0,0xfffffffffffffc00,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001203f6,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431b405,0x7fff5fbfed90,0,0x1e4e34557b9c,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34567946,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000bffc,0x7fff5fbfe9c0,0,0x101009400,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf241,0x7fff5fbfe9e0,0,0x7fff5fbfea00,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100175d11,0x7fff5fbfefa0,0,0x7fff5fbfefd0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024ee48,0x7fff5fbfeab0,0,0x37ec2edb53a1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019cd11,0x7fff5fbfef20,0,0x1003d3d67,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa49,0x7fff5fbfefc0,0,0x7fff5fbff000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcda,0x7fff5fbfed78,0,0x7fff911f40bc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100189820,0x7fff5fbfefd8,0,0x1002e5078,0,0x1e4e343f2016,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cd1,0x7fff5fbfed48,0,0x100051ee8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1e23,0x7fff5fbff288,0,0x37ec2ed9cca9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345789f2,0x7fff5fbff2d8,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e345984df -tick,0x1000bd04f,0x7fff5fbfed98,0,0x100075bec,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10011b99a,0x7fff5fbfe8d0,0,0x102019b80,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a013b,0x7fff5fbfed30,0,0x1,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454ded2,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456d931,0x7fff5fbfedd0,0,0x5,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10000a6ad,0x7fff5fbfece0,0,0x7fff5fbfed00,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343e8bf2,0x7fff5fbfed50,0,0x11e9a5716f59,0,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343150c3,0x7fff5fbfed60,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34328536,0x7fff5fbfeb20,0,0x1e4e34579aee,0,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b28c8,0x7fff5fbfea10,0,0x1020259f0,0,0x1e4e343a92fa,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343061a8,0x7fff5fbfea58,0,0x1e4e3455497b,0,0x1e4e343a8fe7,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024ee5f,0x7fff5fbff000,0,0x37ec2eda5e59,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daa49,0x7fff5fbfec00,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d1f1,0x7fff5fbff160,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34333004,0x7fff5fbfeb18,0,0x1e4e3454dadf,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be732,0x7fff5fbfea10,0,0x7fff5fbfead8,0,0x1e4e3455ac3e,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456bf57,0x7fff5fbfee70,0,0x37ec2eda1a81,0,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002490d0,0x7fff5fbfe950,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435d613,0x7fff5fbfeb50,0,0x1e4e34583530,0,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34308001,0x7fff5fbfec98,0,0x1e4e345b89e6,0,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b98d3,0x7fff5fbff368,0,0x3d27976be39,0,0x1e4e343b5cf2,0x1e4e345522ca,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x1000f927d,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a086,0x7fff5fbfeab0,0,0x11e9a5518489,0,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a2421,0x7fff5fbfefb0,0,0x7fff5fbfefd0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458d47c,0x7fff5fbfe8f8,0,0x1e4e343e43af,0,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001500af,0x7fff5fbfea80,0,0x7fff5fbfead0,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345acadc,0x7fff5fbfef48,0,0x1e4e34394aa3,0,0x1e4e34399727 -tick,0x10024939c,0x7fff5fbff110,0,0x0,3 -tick,0x1002597fa,0x7fff5fbfe7e0,0,0x7fff5fbfe850,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf204,0x7fff5fbfefd0,0,0x100000000,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343100a1,0x7fff5fbfeb00,0,0x1e4e345835f9,0,0x1e4e34573968,0x1e4e345a08d4,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430b6a4,0x7fff5fbfeac0,0,0x1e4e343a94a2,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000bd1d3,0x7fff5fbfee08,0,0x1000c620f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454d0c1,0x7fff5fbff098,0,0x7fff5fbff0f0,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001ff5ef,0x7fff5fbfee48,0,0x100201a6e,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343061a3,0x7fff5fbff020,0,0x1019008b0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008da10,0x7fff5fbfefc0,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfede8,0,0x7fff911f3e68,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd224,0x7fff5fbfede0,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100255038,0x7fff5fbfebb0,0,0x11e9a55d69e9,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fc29,0x7fff5fbfecd0,0,0x7,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001785e1,0x7fff5fbfee70,0,0x7fff5fbfeea0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000decac,0x7fff5fbfec98,0,0x5c1380932e746e5e,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3430ad1f,0x7fff5fbfee18,0,0x1e4e34398634,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x7fff911d9d0f,0x7fff5fbfe7d0,0,0xff80000000001000,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34315212,0x7fff5fbfeca0,0,0x11e9a5427671,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011c09f,0x7fff5fbff320,0,0xd9c9ff15a96f5556,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34330032,0x7fff5fbfef68,0,0x1e4e343992f5,0 -tick,0x10002cc0d,0x7fff5fbfeb50,0,0x7fff5fbfeb70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9121478b,0x7fff5fbfec80,0,0x102023a88,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10010e976,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a428,0x7fff5fbfede8,0,0xaabee819c11,0,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100253b67,0x7fff5fbfe810,1,0x10000a04c,3,0x1e4e3454d8af,0x1e4e3439950b -tick,0x10011d351,0x7fff5fbfeaf0,0,0x7fff5fbfeb30,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911ee1e9,0x7fff5fbfea50,0,0x7fff5fbfeaa0,0,0x1e4e34579b39,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10027a891,0x7fff5fbfe9d0,0,0x7fff5fbfea50,0,0x1e4e343a9236,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010e871,0x7fff5fbff2c0,0,0x0,4 -tick,0x1e4e3454a4a4,0x7fff5fbff5c0,0,0x1e4e3459e4aa,0 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8cc5,0x7fff5fbfeda8,0,0x1e4e3457b4d7,0,0x1e4e343e8c62,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523e1,0x7fff5fbfe910,0,0x2e9dafd13ad1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd0c,0x7fff5fbfeae8,0,0x10011a209,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfe680,0,0x101009410,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b288c,0x7fff5fbff0a0,0,0x11e9a536b889,0 -tick,0x7fff91206bff,0x7fff5fbff3a0,0,0x79,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff9120fdc8,0x7fff5fbfe830,0,0x7fff5fbfe8e0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d2c2,0x7fff5fbfeb30,0,0x100000000,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cc71,0x7fff5fbfef20,0,0x7fff5fbfef80,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x10011c0a3,0x7fff5fbff320,0,0x1020259f0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000c13bd,0x7fff5fbfeeb8,0,0x100075afe,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100391a5c,0x7fff5fbfef40,0,0x7fff5fbfef70,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001444e1,0x7fff5fbff150,0,0x7fff5fbff178,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd105,0x7fff5fbfed20,0,0x7fff5fbfedd4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345949d6,0x7fff5fbff218,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912137c4,0x7fff5fbfecd0,0,0x7fff79220180,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfef10,0,0x7fff5fbfef40,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f91bb,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100395422,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120110,0x7fff5fbfeeb0,0,0x10398f1a2,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009ff37,0x7fff5fbfec28,0,0x1003e2fb4,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002608ef,0x7fff5fbfea80,0,0xd17482d00000007,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e345710e0,0x1e4e3459dd67,0x1e4e343e8c98,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3a0,0x7fff5fbfeca8,0,0x10000c17f,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d0c0,0x7fff5fbfebe8,0,0x1e4e343098ce,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34560061,0x7fff5fbfec58,0,0x7fff5fbfed20,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be681,0x7fff5fbfec80,0,0x102023a88,0,0x1e4e34551d37,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100269fea,0x7fff5fbfeb60,0,0xe662340051,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001200af,0x7fff5fbfe900,0,0x10281df10,3,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024edf7,0x7fff5fbfedc0,0,0x11e9a5f04c41,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024ee35,0x7fff5fbfe5d0,0,0x37ec2edb53a1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34597409,0x7fff5fbfec20,0,0x7fff5fbfec40,0,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325540,0x7fff5fbfedf0,0,0x1e4e3455a0b7,0,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100144f21,0x7fff5fbfed70,0,0x1e4e345554e2,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34563fc2,0x7fff5fbfef20,0,0x1e4e3456e469,0,0x1e4e34399744 -tick,0x7fff911dbcda,0x7fff5fbfea48,0,0x7fff911f40bc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100269fb1,0x7fff5fbff2c0,0,0x7fff5fbff310,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026f1b0,0x7fff5fbfe9a0,0,0x11e9a5146d48,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001500af,0x7fff5fbfeaa0,0,0x7fff5fbfeaf0,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011d448,0x7fff5fbfecb0,0,0x153,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432517d,0x7fff5fbfeee8,0,0x1e4e343a9cdb,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x100392841,0x7fff5fbfeb00,0,0x7fff5fbfeb20,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34570f46,0x7fff5fbfee78,0,0x11e9a5198519,0,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34315104,0x7fff5fbfed60,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100392841,0x7fff5fbfecc0,0,0x7fff5fbfece0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1000a02aa,0x7fff5fbfe8b0,0,0x7fff5fbfe8d0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f54,0x7fff5fbfed20,0,0x1e4e345b78ad,0,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b87f9,0x7fff5fbfecb0,0,0xc800000000,0,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34591fbb,0x7fff5fbff120,0,0x11e900000000,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be56c,0x7fff5fbff1d0,0,0x0,3 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100170950,0x7fff5fbfeda0,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011a1e7,0x7fff5fbfefb0,0,0x102023a70,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c8313,0x7fff5fbfee18,0,0x1000bd17c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345a41a9,0x7fff5fbfeec0,0,0x3d2797f6031,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000deba2,0x7fff5fbfec88,0,0xa47c610b2718937e,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000dec15,0x7fff5fbfec28,0,0xcc5c790327ab1fb6,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa53,0x7fff5fbfed10,0,0x7fff5fbfed40,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34576641,0x7fff5fbfeed8,0,0x7fff5fbfef30,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b6a,0x7fff5fbff140,0,0x101009410,0,0x1e4e34551d37,0x1e4e34598721 -tick,0x10019ccc1,0x7fff5fbfee40,0,0x1003d3d67,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002491ca,0x7fff5fbfe9e0,0,0x102023a88,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100190834,0x7fff5fbfea80,1,0x10000a04c,3,0x1e4e3453ed3f,0x1e4e3454d637,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100261b28,0x7fff5fbfee10,0,0xaabee817ae9,0,0x1e4e34320ed1,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000498fa,0x7fff5fbff840,0,0x0,4 -tick,0x10000b330,0x7fff5fbfe930,0,0x101009410,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x1e4e3430619f,0x7fff5fbfea40,0,0x1e4e343060e1,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x1e4e34394a59,0x7fff5fbfef50,0,0x11e9a50f9709,0,0x1e4e34399727 -tick,0x100196f40,0x7fff5fbfe9f0,0,0x0,1 -tick,0x7fff911daafb,0x7fff5fbfe910,0,0x0,1 -tick,0x1001a8a96,0x7fff5fbfe970,0,0x0,1 -tick,0x1001a8cca,0x7fff5fbfe970,0,0x0,1 -tick,0x1001987a7,0x7fff5fbfe940,0,0x0,1 -tick,0x1001a805e,0x7fff5fbfe930,0,0x0,1 -tick,0x100254cf1,0x7fff5fbfe920,0,0x7fff5fbfea10,0,0x1e4e3455a80b,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f2d94,0x7fff5fbfed80,0,0x7fff5fbfedc0,0,0x1e4e3452a550,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453e21d,0x7fff5fbff1f0,0,0x7fff00000102,0,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x1e4e345b2d2e,0x7fff5fbfeec8,0,0x1e4e343aa6a1,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f89,0x7fff5fbfec68,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431520a,0x7fff5fbfed78,0,0xd7f00000000,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91206c38,0x7fff5fbfec20,0,0x1019014b0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3430617f,0x7fff5fbfee40,0,0x1e4e343060e1,0,0x1e4e34570fec,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10027995a,0x7fff5fbfe660,0,0xe662304161,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a24cf,0x7fff5fbfea50,0,0x1,0,0x1e4e343e78eb,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911da171,0x7fff5fbfec68,0,0x100218e51,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911dad20,0x7fff5fbfec78,0,0x7fff91213bb9,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff911da168,0x7fff5fbff2a8,0,0x0,4 -tick,0x1e4e343a9b3a,0x7fff5fbfeef0,0,0x37ec2edffa21,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f1a0b,0x7fff5fbfecf0,0,0x4d555458,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff911dbbb3,0x7fff5fbff160,0,0x0,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e345984df -tick,0x1e4e3432e3b7,0x7fff5fbff0d8,0,0x1e4e343b690c,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345958a8,0x7fff5fbff0d8,0,0x1e4e343b6afa,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100117f94,0x7fff5fbfec00,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010e871,0x7fff5fbff2c0,0,0x0,4 -tick,0x100120351,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3f5f,0x7fff5fbfef40,0,0x7fff5fbfef50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dab12,0x7fff5fbfefc0,0,0x7fff5fbff000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457efbc,0x7fff5fbff160,0,0x37ec2ed118d1,0,0x1e4e34580934,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91210801,0x7fff5fbfed50,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b6a,0x7fff5fbfea90,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011add1,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c7f6,0x7fff5fbfeca0,0,0xb3a4615a846d5da8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x100075c49,0x7fff5fbfeda0,0,0x206,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e343098e1,0x7fff5fbfee30,0,0x1e4e3452a536,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbfed18,0,0x7fff911f2dfd,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10012eae1,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002490bd,0x7fff5fbff450,0,0x0,3 -tick,0x10010cb1d,0x7fff5fbfe9a0,0,0x7fff5fbfea90,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfe690,0,0xcc6ac0600000031,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100251e41,0x7fff5fbff4c0,0,0x0,3 -tick,0x10030f5e1,0x7fff5fbff160,0,0x0,3 -tick,0x100252453,0x7fff5fbfe700,0,0xe662300000,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012815c,0x7fff5fbfe900,0,0x4056800000000000,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b67,0x7fff5fbfec30,0,0x101009410,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002ce4b3,0x7fff5fbfeb90,0,0x1002ce470,0,0x1e4e343599a4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e345410a0,189,"_buffer" -code-creation,StoreIC,0x1e4e345410a0,189,"_buffer" -code-creation,CallIC,0x1e4e34541160,189,"NonNumberToNumber" -code-creation,LoadIC,0x1e4e34541220,138,"_binding" -code-creation,LoadIC,0x1e4e34541220,138,"_binding" -code-creation,LoadIC,0x1e4e345412c0,134,"_flush" -code-creation,LoadIC,0x1e4e345412c0,134,"_flush" -code-creation,StoreIC,0x1e4e34541360,189,"callback" -code-creation,StoreIC,0x1e4e34541360,189,"callback" -code-creation,StoreIC,0x1e4e34541420,189,"buffer" -code-creation,StoreIC,0x1e4e34541420,189,"buffer" -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10024edf7,0x7fff5fbfed80,0,0x2b498da6f671,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34562e48,0x7fff5fbfed60,0,0x101009400,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c9fd0,0x7fff5fbfeb10,0,0x1002c9f30,0,0x1e4e345ae826,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332fcb,0x7fff5fbfeca0,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345af0a5,0x7fff5fbfee50,0,0x1e4e3458757d,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002607c9,0x7fff5fbfe860,0,0x0,0,0x1e4e3455c3de,0x1e4e34588883,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34320f80,0x7fff5fbfeb50,0,0x1e4e3454dadf,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3434a165,0x7fff5fbfea80,0,0x1e4e343a92fa,0,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3435482d,0x7fff5fbff528,0,0x1e4e3432102a,0,0x1e4e343b63ce,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x10025678a,0x7fff5fbfea60,0,0x7fff5fbfeaa0,0,0x1e4e34320e97,0x1e4e34579bae,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff912083fd,0x7fff5fbfee00,0,0x7fff5fbfee50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343262ef,0x7fff5fbff288,0,0x1e4e343f1e29,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121361d,0x7fff5fbfecc0,0,0xffffffffffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c4968,0x7fff5fbfee60,0,0x1000c5e5f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df0c0,0x7fff5fbfec28,0,0xcc5c79033cae8bf6,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002bf231,0x7fff5fbfecc0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d3ef,0x7fff5fbfeda0,0,0x1019040a0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c525,0x7fff5fbfed20,0,0x18ff80000000157,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100048540,0x7fff5fbfecd0,0,0x0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002607f2,0x7fff5fbfeb70,0,0xcc6ac0600000031,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f97d8,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002b984a,0x7fff5fbfec70,0,0x11e9a4a88889,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100118d21,0x7fff5fbfec90,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34555c33,0x7fff5fbfe9e8,0,0xe662340051,0 -tick,0x100269fea,0x7fff5fbfeb60,0,0xe662340051,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f91ff,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a99bd,0x7fff5fbfec50,0,0x101009400,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019143f,0x7fff5fbff588,0,0x0,3 -tick,0x1e4e34315212,0x7fff5fbff0d8,0,0x11e9a49733d9,0 -tick,0x10025ae2a,0x7fff5fbfe800,0,0x7fff5fbfe830,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343fd7c0,0x7fff5fbfee88,0,0x1e4e3455a43d,0,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34551c8b,0x7fff5fbfee60,0,0x11e9a49af7d1,0,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b80c9,0x7fff5fbfea10,0,0x1e4e34597c07,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f95,0x7fff5fbfec68,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027629e,0x7fff5fbfeb90,0,0x11e9a49df9c0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfeca8,0,0x10011d4e9,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455541d,0x7fff5fbfedb8,0,0x3d2797f6031,0,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f2cdd,0x7fff5fbfea60,0,0x2e9dafd056a9,0,0x1e4e34579b39,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455c43c,0x7fff5fbfe6a0,0,0xe662304161,0,0x1e4e34334687,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b0801,0x7fff5fbfec70,0,0x7fff5fbfecd8,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325540,0x7fff5fbfeb70,0,0x1e4e345529b6,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34576641,0x7fff5fbfe9f8,0,0x7fff5fbfea50,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001736e0,0x7fff5fbfede0,0,0x7fff5fbfee48,0,0x1e4e343946e2,0x1e4e3455287e,0x1e4e343993e2 -tick,0x1000385fd,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff91206bde,0x7fff5fbff3b8,0,0x7fff8ddd3347,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019cfba,0x7fff5fbfed10,0,0x15,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f1a50,0x7fff5fbfeba0,0,0x4d555458,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10024af66,0x7fff5fbfebb8,0,0x10201a5a0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345810d9,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002607f2,0x7fff5fbfe9e0,0,0x2ad95d0d0000000a,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3db1,0x7fff5fbfecf0,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011b9a9,0x7fff5fbfedb0,0,0x102019b80,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254de0,0x7fff5fbfebb0,0,0x11e9a470a2a9,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfef10,0,0x7fff5fbfef40,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10031509c,0x7fff5fbff080,0,0x7fff5fbff0b0,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1003950da,0x7fff5fbfebf8,0,0x1000bd305,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34573d3d,0x7fff5fbfef50,0,0x1e4e34394a1c,0,0x1e4e34399727 -tick,0x100276248,0x7fff5fbfe8b0,0,0x11e9a473d3b0,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34311972,0x7fff5fbfecd0,0,0x1e4e345a354c,0,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026b60a,0x7fff5fbfe9e0,0,0x18,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ad240,0x7fff5fbfeee8,0,0x1e4e343a9bb3,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b019,0x7fff5fbfecd0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daab5,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfea38,0,0x7fff911f2db4,0,0x1e4e34320ee7,0x1e4e34579bae,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120c248,0x7fff5fbff260,0,0x0,4 -tick,0x100253c23,0x7fff5fbfef70,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026f2ad,0x7fff5fbfea20,0,0x11e9a4608a40,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3451d615,0x7fff5fbfef80,0,0x1e4e34399744,0 -tick,0x1e4e343949bb,0x7fff5fbfef50,0,0x37ec2edd4459,0,0x1e4e34399727 -tick,0x1e4e34573a80,0x7fff5fbfef70,0,0x1e4e343993e2,0 -tick,0x100120351,0x7fff5fbfecf0,0,0x7fff5fbfed10,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e34320e9f,0x7fff5fbff078,0,0x11e9a46518e9,0,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100170950,0x7fff5fbfea70,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af85,0x7fff5fbff080,0,0x0,3 -tick,0x1e4e3456e004,0x7fff5fbfedd0,0,0x5,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10008d90f,0x7fff5fbfeb50,0,0x7fff5fbfebb0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315064,0x7fff5fbfef18,0,0x7fff5fbfef68,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x1001446d2,0x7fff5fbfec20,0,0x7fff5fbfec40,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf1c1,0x7fff5fbfe770,0,0x7fff5fbfe7d0,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100251e85,0x7fff5fbfeea0,0,0x11e9a46d7d01,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100218e41,0x7fff5fbfe980,0,0x7fff5fbfe9b0,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325548,0x7fff5fbfeb40,0,0x1e4e3453c902,0,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34555060,0x7fff5fbfee28,0,0x1e4e3455ac62,0,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10006386c,0x7fff5fbff020,0,0x10006378f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de0d4,0x7fff5fbfeed0,0,0x1000c1d36,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309840,0x7fff5fbff2f8,0,0x1e4e3457fd2b,0,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c4ee,0x7fff5fbfed00,0,0x1032003ea,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f93d0,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345ad25c,0x7fff5fbff270,0,0x1e4e343f1ac3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912134ac,0x7fff5fbfeba0,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325579,0x7fff5fbff288,0,0x1e4e343f1e91,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343098d6,0x7fff5fbff008,0,0x1e4e3457f7b4,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001146ce,0x7fff5fbff520,0,0x0,4 -tick,0x1000f98b7,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3454ddd0,0x7fff5fbfecb8,0,0x102023a90,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d57e,0x7fff5fbfed90,0,0x7fff5fbfee10,0,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608e1,0x7fff5fbfe870,0,0x18f891c50000000a,0,0x1e4e3455a74d,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f92a5,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad29,0x7fff5fbfe7f0,0,0x7fff5fbfe820,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000de31a,0x7fff5fbfe7a8,0,0x100000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b0f7,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cca2,0x7fff5fbfec20,0,0x103072f22,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34320f9f,0x7fff5fbff4f8,0,0xe662304121,0,0x1e4e343b6008,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100276efa,0x7fff5fbfe950,0,0x11e9a442d939,0,0x1e4e345852c8,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be51a,0x7fff5fbfea18,0,0xaabee821951,0,0x1e4e3455a74d,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010ca31,0x7fff5fbfea40,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100179d53,0x7fff5fbfeb80,0,0xe662335941,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430ac8d,0x7fff5fbfedd8,0,0x1e4e34398634,0,0x1e4e345761cf,0x1e4e34583f95,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10010d3c4,0x7fff5fbfeba0,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8121,0x7fff5fbfea30,0,0xb0,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbff070,0,0x23c0895200000014,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019ed21,0x7fff5fbfeaf0,0,0x7fff5fbfeb40,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551595,0x7fff5fbfe9a8,0,0x2e9dafd056a9,0,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343098ce,0x7fff5fbfe800,0,0x100000000,0,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100184460,0x7fff5fbfeab8,0,0x1002e4cd9,0,0x1e4e3431b547,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100176220,0x7fff5fbfec68,0,0x1002b9b2e,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002761d0,0x7fff5fbfebd8,0,0x100255030,0,0x1e4e3455a80b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34323e84,0x7fff5fbfef18,0,0x1e4e3456dbd3,0,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345550ac,0x7fff5fbfeae8,0,0xe662347fc9,0,0x1e4e3455c4cc,0x1e4e3458e112,0x1e4e343b67b1,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100014ce5,0x7fff5fbff370,0,0x1000145e0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000c1d37,0x7fff5fbfef00,0,0x7fff5fbfef10,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f91ca,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de077,0x7fff5fbfeea0,0,0x7fff5fbfeeb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c6202,0x7fff5fbfee10,0,0x1019033e0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34311972,0x7fff5fbff0f8,0,0x1e4e345554e2,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34327aa8,0x7fff5fbff038,0,0x1e4e3455287e,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c751,0x7fff5fbfed20,0,0x1a6e80000000177,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bdb36,0x7fff5fbfef08,0,0x10007569f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100218e4c,0x7fff5fbfedc0,0,0x1,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3f5f,0x7fff5fbfec70,0,0x7fff5fbfec80,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343098d6,0x7fff5fbff008,0,0x1e4e3457f7b4,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daab0,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10024c30a,0x7fff5fbfefe8,0,0x0,3 -tick,0x100392841,0x7fff5fbfec40,0,0x7fff5fbfec60,0,0x1e4e3454e2fc,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454de82,0x7fff5fbfecb8,0,0x102023a90,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3433002e,0x7fff5fbfef68,0,0x1e4e343992f5,0 -tick,0x1002be56c,0x7fff5fbff500,0,0x0,3 -tick,0x1e4e3457a962,0x7fff5fbfec40,0,0xe662304121,0,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019bd6c,0x7fff5fbfec00,0,0x0,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8108,0x7fff5fbfecd0,0,0x101009410,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011fffe,0x7fff5fbfecd0,0,0x103077026,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1001a8286,0x7fff5fbfeab0,0,0x101009410,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9741,0x7fff5fbfed80,0,0x7fff5fbfeda8,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010ca31,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311343,0x7fff5fbff430,0,0x0,0 -tick,0x10011d37a,0x7fff5fbff330,0,0x102019980,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457a60e,0x7fff5fbfec58,0,0x37ec2edd4381,0,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343248b1,0x7fff5fbff010,0,0x35fb00000000,0 -tick,0x1002bf72a,0x7fff5fbfeaa0,0,0x7fff5fbfeac0,0,0x1e4e3455a80b,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345676a2,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253bcb,0x7fff5fbfebe0,0,0x101009410,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100275890,0x7fff5fbfe848,0,0x100121b3b,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10012ef10,0x7fff5fbfeb98,0,0x100254e3f,0,0x1e4e3455a80b,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3452d4e5,0x7fff5fbfed88,0,0x1e4e3456e144,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10025124f,0x7fff5fbfe620,0,0x11e9a415c849,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457f010,0x7fff5fbfec80,0,0x37ec2ed118d1,0,0x1e4e34580934,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002714e6,0x7fff5fbfe810,0,0x0,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b239c,0x7fff5fbff0a0,0,0x11e9a41985c1,0 -tick,0x7fff911f287a,0x7fff5fbfea00,0,0x102023b08,0,0x1e4e34571eed,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100274ab9,0x7fff5fbfeca0,0,0x1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100176007,0x7fff5fbfef78,0,0x0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34576dee,0x7fff5fbfee78,0,0x2c2694a0b449,0,0x1e4e345768e4,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1c6f,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911db108,0x7fff5fbfee08,0,0x10001a965,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbbf0,0x7fff5fbfece0,0,0x7fff5fbfecf0,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fcd3,0x7fff5fbfec20,0,0x7fff5fbfec60,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd2f9,0x7fff5fbfee40,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd0bc,0x7fff5fbfed10,0,0xd9c9ff15a96f5556,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9714,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001a8121,0x7fff5fbfea10,0,0x0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254cf1,0x7fff5fbfec20,0,0x7fff5fbfed10,0,0x1e4e3455a80b,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000183c8,0x7fff5fbfecc0,0,0x101009400,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100179947,0x7fff5fbfea60,0,0x0,0,0x1e4e345ae741,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100259065,0x7fff5fbfe9f0,0,0x7fff5fbfea20,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254d7b,0x7fff5fbfec10,0,0x11e9a4054b91,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024edf7,0x7fff5fbff000,0,0x37ec2edc5749,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911edebb,0x7fff5fbfeb90,0,0x7fff5fbfec10,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10026305c,0x7fff5fbfe8f0,0,0x11e9a4096398,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001785e1,0x7fff5fbfeb40,0,0x7fff5fbfeb70,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170950,0x7fff5fbfea70,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100218e41,0x7fff5fbfeb90,0,0x7fff5fbfebc0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f15,0x7fff5fbfeca0,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfeab0,0,0x17a3df600000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100208281,0x7fff5fbfec60,0,0x7fff5fbfed80,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a805e,0x7fff5fbfe5e0,0,0x0,1 -tick,0x1001a9b43,0x7fff5fbfe5c0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe610,0,0x0,1 -tick,0x1001a8050,0x7fff5fbfe5d8,0,0x0,1 -tick,0x1001a96f0,0x7fff5fbfe5d8,0,0x0,1 -tick,0x1001a99c3,0x7fff5fbfe590,0,0x0,1 -tick,0x1e4e345598bf,0x7fff5fbff008,0,0x11e9a5ec65c1,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455d3c1,0x7fff5fbfeb88,0,0x7fff5fbfebe0,0,0x1e4e345b6181,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019c932,0x7fff5fbfe6a0,0,0x102023b18,0,0x1e4e34322a85,0x1e4e34320c96,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459cb85,0x7fff5fbfec68,0,0x1e4e3431f675,0,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daa7d,0x7fff5fbfeae0,0,0x7fff5fbfeb20,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456e371,0x7fff5fbfedd0,0,0x4f00000000,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3432a8c5,0x7fff5fbfef80,0,0x1e4e343996fd,0 -tick,0x1002657a3,0x7fff5fbfe890,0,0x100265790,0,0x1e4e345adec0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf398,0x7fff5fbfe7e0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b611,0x7fff5fbfea10,0,0x7fff5fbfea70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100268fff,0x7fff5fbfea30,0,0x100000001,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34598887,0x7fff5fbff368,0,0x1,0 -tick,0x7fff911f26d7,0x7fff5fbfea80,0,0x7fff5fbfeac0,0,0x1e4e34571eed,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a2530,0x7fff5fbfe958,0,0x10017950c,0,0x1e4e343a92fa,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10017117c,0x7fff5fbff270,0,0x1010096d0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10005b9f5,0x7fff5fbfef90,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100255038,0x7fff5fbfebb0,0,0x11e9a5dd7169,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c13bd,0x7fff5fbfef18,0,0x100075afe,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfeb90,0,0x14,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580200,0x7fff5fbff208,0,0x1e4e3459490b,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f923d,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa49,0x7fff5fbfefb0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432af1f,0x7fff5fbff270,0,0x1e4e343f1af1,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9918,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1000f9824,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001a0693,0x7fff5fbfea70,0,0xe662300000,0,0x1e4e343599a4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afbe,0x7fff5fbff0f0,0,0x0,3 -tick,0x1e4e34325540,0x7fff5fbfee30,0,0x1e4e34398674,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100145a43,0x7fff5fbfed20,0,0xe662304121,0,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325625,0x7fff5fbfecf0,0,0x1e4e3453d1f0,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345414e0,134,"length" -code-creation,LoadIC,0x1e4e345414e0,134,"length" -tick,0x1e4e345a267c,0x7fff5fbfebd8,0,0x1e4e3435998f,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ae320,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002039a9,0x7fff5fbfea08,0,0x11e9a5c7e859,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfe848,0,0x100121af7,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34336207,0x7fff5fbfeb00,0,0xe662350169,0,0x1e4e34579820,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100203768,0x7fff5fbff330,0,0x11e9a5cc2879,0,0x1e4e3455218e,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x10004ec1d,0x7fff5fbfeb30,0,0x7fff5fbfeb40,0,0x1e4e34560bb7,0x1e4e345b0d6e,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a075e,0x7fff5fbfeb20,0,0x0,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100205974,0x7fff5fbfea10,0,0x11e9a5c00000,0,0x1e4e3458c6cb,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c5ed1,0x7fff5fbfeb70,0,0x7fff5fbfeb90,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10020654b,0x7fff5fbfea40,0,0x7fff5fbfeb20,0,0x1e4e3458000c,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b825c,0x7fff5fbfec80,0,0x1e4e34566eed,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd0c,0x7fff5fbfeb38,0,0x100145af2,0,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002761d1,0x7fff5fbfeb90,0,0x7fff5fbfec20,0,0x1e4e3455a80b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff912134cd,0x7fff5fbfe810,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459bdc9,0x7fff5fbfeda8,0,0x1e4e343f1e57,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100219ab1,0x7fff5fbff1c0,0,0x0,4 -tick,0x7fff911dad6f,0x7fff5fbfe7c0,0,0x7fff5fbfe880,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024fb63,0x7fff5fbfe790,0,0x101009410,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100120415,0x7fff5fbfe990,0,0x7fff5fbfe9b0,0,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454ece0,0x7fff5fbfedf8,0,0x1e4e3454dee7,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x100172c5e,0x7fff5fbfe8a0,0,0x7fff5fbfe920,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10020631b,0x7fff5fbfe670,0,0x37ec2ed00000,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34519ce4,0x7fff5fbfee08,0,0x1e4e3454deac,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e345710e9,0x7fff5fbfef30,0,0x11e9a5bf15d9,0,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002fa451,0x7fff5fbfe780,0,0x7fff5fbfe7f0,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000bd2c6,0x7fff5fbfede0,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10025107c,0x7fff5fbfeb00,0,0x37ec2ed00000,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100395206,0x7fff5fbfeda8,0,0x100051ee8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1003946ea,0x7fff5fbfec88,0,0x1001a2a44,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be620,0x7fff5fbfef60,0,0x102023a70,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34596a6f,0x7fff5fbfef60,0,0xd9c9ff15a96f5556,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be6bf,0x7fff5fbfeee0,0,0x102023a70,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5b92,0x7fff5fbfee50,0,0x7fff5fbfee80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad66,0x7fff5fbfef40,0,0x7fff5fbfef70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa28,0x7fff5fbfef58,0,0x100063bd7,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002353f9,0x7fff5fbfed10,0,0x0,1 -tick,0x1002fee8b,0x7fff5fbfeb90,0,0x0,1 -tick,0x100235eb0,0x7fff5fbfebb0,0,0x0,1 -tick,0x10023594b,0x7fff5fbfeb30,0,0x0,1 -tick,0x100197e25,0x7fff5fbfeb80,0,0x0,1 -code-creation,LoadIC,0x1e4e345b9320,170,"_pusher" -code-creation,LoadIC,0x1e4e345b9320,170,"_pusher" -code-creation,LoadIC,0x1e4e345b93e0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b93e0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b9480,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b9480,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b9520,134,"pair" -code-creation,LoadIC,0x1e4e345b9520,134,"pair" -code-creation,LoadIC,0x1e4e345b95c0,134,"writable" -code-creation,LoadIC,0x1e4e345b95c0,134,"writable" -code-creation,LoadIC,0x1e4e345b9660,134,"_pending" -code-creation,LoadIC,0x1e4e345b9660,134,"_pending" -code-creation,LoadIC,0x1e4e345b9080,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b9080,134,"_pendingCallbacks" -code-creation,StoreIC,0x1e4e345b9120,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b9120,189,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b0f60,170,"_pusher" -code-creation,LoadIC,0x1e4e345b0f60,170,"_pusher" -code-creation,LoadIC,0x1e4e345b1020,134,"domain" -code-creation,LoadIC,0x1e4e345b1020,134,"domain" -tick,0x1002554ac,0x7fff5fbfebb0,0,0x11e9a4f05841,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e345b4f80,492,"finish" -code-creation,LoadIC,0x1e4e345b5180,134,"_events" -code-creation,LoadIC,0x1e4e345b5180,134,"_events" -code-creation,LoadIC,0x1e4e345b5220,134,"domain" -code-creation,LoadIC,0x1e4e345b5220,134,"domain" -tick,0x1e4e3430b5ed,0x7fff5fbff598,0,0x1e4e343e410d,0,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e345b52c0,134,"_events" -code-creation,LoadIC,0x1e4e345b52c0,134,"_events" -code-creation,LoadIC,0x1e4e345b5360,134,"domain" -code-creation,LoadIC,0x1e4e345b5360,134,"domain" -code-creation,LoadIC,0x1e4e345b5400,134,"writable" -code-creation,LoadIC,0x1e4e345b5400,134,"writable" -code-creation,CallIC,0x1e4e345b54a0,217,"write" -code-creation,LoadIC,0x1e4e345b5580,134,"pair" -code-creation,LoadIC,0x1e4e345b5580,134,"pair" -code-creation,LoadIC,0x1e4e345b5620,134,"_pending" -code-creation,LoadIC,0x1e4e345b5620,134,"_pending" -code-creation,LoadIC,0x1e4e345b56c0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b56c0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b5760,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b5760,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b5800,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b5800,189,"_pendingBytes" -tick,0x7fff912083f3,0x7fff5fbfec80,0,0x7fff5fbfecd0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e345b10c0,134,"_events" -code-creation,LoadIC,0x1e4e345b10c0,134,"_events" -code-creation,LoadIC,0x1e4e345b1160,134,"domain" -code-creation,LoadIC,0x1e4e345b1160,134,"domain" -code-creation,LoadIC,0x1e4e345b0280,134,"writable" -code-creation,LoadIC,0x1e4e345b0280,134,"writable" -code-creation,CallIC,0x1e4e345b0320,200,"write" -code-creation,LoadIC,0x1e4e345b0400,134,"_events" -code-creation,LoadIC,0x1e4e345b0400,134,"_events" -code-creation,CallIC,0x1e4e345b04a0,287,"emit" -code-creation,LoadIC,0x1e4e345b05c0,284,"" -code-creation,LoadIC,0x1e4e345b05c0,284,"" -code-creation,LoadIC,0x1e4e345b06e0,134,"_ended" -code-creation,LoadIC,0x1e4e345b06e0,134,"_ended" -code-creation,LoadIC,0x1e4e345ad280,134,"length" -code-creation,LoadIC,0x1e4e345ad280,134,"length" -code-creation,LoadIC,0x1e4e345ad320,134,"_queue" -code-creation,LoadIC,0x1e4e345ad320,134,"_queue" -code-creation,CallIC,0x1e4e345ad3c0,217,"_process" -code-creation,CallIC,0x1e4e3457e400,492,"write" -code-creation,LoadIC,0x1e4e3457e600,134,"_needDrain" -code-creation,LoadIC,0x1e4e3457e600,134,"_needDrain" -code-creation,LoadIC,0x1e4e3457e6a0,284,"" -code-creation,LoadIC,0x1e4e3457e6a0,284,"" -code-creation,LoadIC,0x1e4e3457e7c0,138,"_buffer" -code-creation,LoadIC,0x1e4e3457e7c0,138,"_buffer" -code-creation,LoadIC,0x1e4e3457e860,138,"_offset" -code-creation,LoadIC,0x1e4e3457e860,138,"_offset" -code-creation,StoreIC,0x1e4e3457e900,189,"_offset" -code-creation,StoreIC,0x1e4e3457e900,189,"_offset" -code-creation,CallIC,0x1e4e3457e9c0,287,"emit" -code-creation,LoadIC,0x1e4e3457eae0,134,"_events" -code-creation,LoadIC,0x1e4e3457eae0,134,"_events" -code-creation,LoadIC,0x1e4e3457eb80,134,"domain" -code-creation,LoadIC,0x1e4e3457eb80,134,"domain" -code-creation,LoadIC,0x1e4e3457ec20,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457ec20,138,"_chunkSize" -code-creation,StoreIC,0x1e4e345ad4a0,185,"_processing" -code-creation,StoreIC,0x1e4e345ad4a0,185,"_processing" -code-creation,CallIC,0x1e4e3457d740,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3457d860,185,"_flush" -code-creation,StoreIC,0x1e4e3457d860,185,"_flush" -code-creation,LoadIC,0x1e4e3457d920,134,"length" -code-creation,LoadIC,0x1e4e3457d920,134,"length" -code-creation,CallIC,0x1e4e3457d9c0,257,"emit" -tick,0x7fff911da1e3,0x7fff5fbfe638,0,0x7fff9125fd6d,0,0x1e4e3455a43d,0x1e4e345710e0,0x1e4e3459dd67,0x1e4e343e8c98,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e3457dae0,134,"_events" -code-creation,LoadIC,0x1e4e3457dae0,134,"_events" -code-creation,StoreIC,0x1e4e3457db80,189,"locked" -code-creation,StoreIC,0x1e4e3457db80,189,"locked" -code-creation,LoadIC,0x1e4e3457dc40,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457dc40,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457dce0,134,"_ended" -code-creation,LoadIC,0x1e4e3457dce0,134,"_ended" -code-creation,LoadIC,0x1e4e3457dd80,134,"_queue" -code-creation,LoadIC,0x1e4e3457dd80,134,"_queue" -code-creation,CallIC,0x1e4e3457de20,217,"_process" -code-creation,CallIC,0x1e4e3457df00,492,"write" -code-creation,LoadIC,0x1e4e3457e100,138,"_buffer" -code-creation,LoadIC,0x1e4e3457e100,138,"_buffer" -code-creation,LoadIC,0x1e4e345ad560,138,"_offset" -code-creation,LoadIC,0x1e4e345ad560,138,"_offset" -code-creation,StoreIC,0x1e4e345acd00,189,"_offset" -code-creation,StoreIC,0x1e4e345acd00,189,"_offset" -code-creation,CallIC,0x1e4e345acdc0,287,"emit" -code-creation,LoadIC,0x1e4e345acee0,134,"domain" -code-creation,LoadIC,0x1e4e345acee0,134,"domain" -code-creation,LoadIC,0x1e4e345acf80,138,"_chunkSize" -code-creation,LoadIC,0x1e4e345acf80,138,"_chunkSize" -code-creation,StoreIC,0x1e4e345ad020,185,"_processing" -code-creation,StoreIC,0x1e4e345ad020,185,"_processing" -code-creation,CallIC,0x1e4e3457c420,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3457c540,185,"_flush" -code-creation,StoreIC,0x1e4e3457c540,185,"_flush" -code-creation,LoadIC,0x1e4e3457c600,254,"" -code-creation,LoadIC,0x1e4e3457c600,254,"" -code-creation,StoreIC,0x1e4e3457c700,390,"_events" -code-creation,StoreIC,0x1e4e3457c700,390,"_events" -code-creation,LoadIC,0x1e4e3457c8a0,254,"" -code-creation,LoadIC,0x1e4e3457c8a0,254,"" -code-creation,LoadIC,0x1e4e3457c9a0,134,"_events" -code-creation,LoadIC,0x1e4e3457c9a0,134,"_events" -code-creation,CallIC,0x1e4e3457ca40,257,"emit" -code-creation,LoadIC,0x1e4e3457cb60,134,"_events" -code-creation,LoadIC,0x1e4e3457cb60,134,"_events" -code-creation,StoreIC,0x1e4e3457cc00,189,"locked" -code-creation,StoreIC,0x1e4e3457cc00,189,"locked" -code-creation,LoadIC,0x1e4e3457ccc0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457ccc0,138,"lockBuffer" -tick,0x1e4e34311321,0x7fff5fbff060,0,0x0,0 -tick,0x1002bf398,0x7fff5fbfe7e0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120351,0x7fff5fbfede0,0,0x7fff5fbfee00,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10010d439,0x7fff5fbfecb0,0,0x10000a5e0,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315091,0x7fff5fbfed98,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cc71,0x7fff5fbfec40,0,0x7fff5fbfeca0,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002490b4,0x7fff5fbff3c0,0,0x0,3 -code-creation,CallIC,0x1e4e345739e0,492,"execute" -code-creation,LoadIC,0x1e4e34573be0,254,"" -code-creation,LoadIC,0x1e4e34573be0,254,"" -code-creation,StoreIC,0x1e4e34573ce0,390,"_events" -code-creation,StoreIC,0x1e4e34573ce0,390,"_events" -code-creation,LoadIC,0x1e4e34573e80,254,"" -code-creation,LoadIC,0x1e4e34573e80,254,"" -code-creation,CallIC,0x1e4e34573f80,205,"onIncoming" -code-creation,LoadIC,0x1e4e34574060,284,"" -code-creation,LoadIC,0x1e4e34574060,284,"" -code-creation,StoreIC,0x1e4e34574180,420,"_events" -code-creation,StoreIC,0x1e4e34574180,420,"_events" -code-creation,LoadIC,0x1e4e34574340,284,"" -code-creation,LoadIC,0x1e4e34574340,284,"" -code-creation,CallIC,0x1e4e34574460,257,"emit" -code-creation,LoadIC,0x1e4e34574580,134,"_events" -code-creation,LoadIC,0x1e4e34574580,134,"_events" -code-creation,CallIC,0x1e4e3456c100,287,"emit" -code-creation,LoadIC,0x1e4e3456c220,134,"_events" -code-creation,LoadIC,0x1e4e3456c220,134,"_events" -code-creation,CallIC,0x1e4e3456c2c0,287,"emit" -code-creation,LoadIC,0x1e4e3456c3e0,134,"_events" -code-creation,LoadIC,0x1e4e3456c3e0,134,"_events" -code-creation,LoadIC,0x1e4e3456c480,134,"domain" -code-creation,LoadIC,0x1e4e3456c480,134,"domain" -code-creation,LoadIC,0x1e4e3456c520,134,"_events" -code-creation,LoadIC,0x1e4e3456c520,134,"_events" -code-creation,LoadIC,0x1e4e3456c5c0,134,"domain" -code-creation,LoadIC,0x1e4e3456c5c0,134,"domain" -code-creation,CallIC,0x1e4e3456c660,277,"removeListener" -code-creation,CallIC,0x1e4e3456c780,247,"removeListener" -code-creation,LoadIC,0x1e4e3456c880,134,"_events" -code-creation,LoadIC,0x1e4e3456c880,134,"_events" -code-creation,LoadIC,0x1e4e3456c920,138,"incoming" -code-creation,LoadIC,0x1e4e3456c920,138,"incoming" -tick,0x1e4e3454d0c1,0x7fff5fbfeb60,0,0x7fff5fbfeba8,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456c9c0,492,"execute" -code-creation,CallIC,0x1e4e345ad0e0,205,"onIncoming" -code-creation,LoadIC,0x1e4e345ac900,138,"incoming" -code-creation,LoadIC,0x1e4e345ac900,138,"incoming" -tick,0x10024ee35,0x7fff5fbff000,0,0x37ec2edc5559,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456ac20,492,"finish" -tick,0x7fff9199e10e,0x7fff5fbfed28,0,0x7fff911f31d7,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100251e40,0x7fff5fbfee38,0,0x1002bf37e,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x100122a21,0x7fff5fbfeb50,0,0x7fff5fbfeb70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff90f806f0,0x7fff5fbfecf8,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100117b85,0x7fff5fbff1c0,0,0x0,4 -tick,0x1e4e34324100,0x7fff5fbfedf8,0,0x1e4e3457d1f6,0,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x100117831,0x7fff5fbff350,0,0x7fff5fbff3a0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038ef9,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343298e4,0x7fff5fbfee30,0,0x1e4e34398769,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34553563,0x7fff5fbfedf8,0,0x3d2797f6031,0,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012ef10,0x7fff5fbfec08,0,0x100254e3f,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019bd01,0x7fff5fbfed00,0,0x7fff5fbfed40,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af69,0x7fff5fbfe9e8,0,0x37ec2edd4701,0,0x1e4e34551d37,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025241c,0x7fff5fbfe780,0,0x11e9a4e00000,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457a672,0x7fff5fbfec58,0,0x37ec2edd4381,0,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f2be5,0x7fff5fbff008,0,0x1001736e6,0,0x1e4e34320ee7,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456ae20,134,"readable" -code-creation,LoadIC,0x1e4e3456ae20,134,"readable" -code-creation,LoadIC,0x1e4e3456aec0,200,"resume" -code-creation,LoadIC,0x1e4e3456aec0,200,"resume" -code-creation,CallIC,0x1e4e3456afa0,217,"resume" -code-creation,CallIC,0x1e4e3456b080,247,"removeListener" -tick,0x100255035,0x7fff5fbfebb0,0,0x11e9a4d185b1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120364,0x7fff5fbff030,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325739,0x7fff5fbff288,0,0x1e4e343f1be0,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd20d,0x7fff5fbfed30,0,0x7fff5fbfedc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b7f69,0x7fff5fbfeea0,0,0x1e4e345767d8,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3dc1,0x7fff5fbfebc0,0,0xc389b3095daa90a8,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325574,0x7fff5fbff288,0,0x1e4e343f1da3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afe0,0x7fff5fbfea60,0,0x2e9dafd05104,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912107dc,0x7fff5fbfec98,0,0x7fff9120c37d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c059,0x7fff5fbfebc8,0,0x7fff912068f8,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10024afd3,0x7fff5fbfe670,0,0x2e9dafd0aae1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002ff2c,0x7fff5fbfebc0,0,0x1020259f0,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3456b180,189,"_buffer" -code-creation,StoreIC,0x1e4e3456b180,189,"_buffer" -code-creation,LoadIC,0x1e4e3456b240,138,"_binding" -code-creation,LoadIC,0x1e4e3456b240,138,"_binding" -code-creation,LoadIC,0x1e4e3456b2e0,134,"_flush" -code-creation,LoadIC,0x1e4e3456b2e0,134,"_flush" -code-creation,StoreIC,0x1e4e3456b380,189,"callback" -code-creation,StoreIC,0x1e4e3456b380,189,"callback" -code-creation,StoreIC,0x1e4e3456b440,189,"buffer" -code-creation,StoreIC,0x1e4e3456b440,189,"buffer" -tick,0x100038f07,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf1c0,0x7fff5fbfede8,0,0x1e4e3430618e,0,0x1e4e3455a80b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000c6275,0x7fff5fbfe8e8,0,0x1000c5bd4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253ae0,0x7fff5fbfebf8,0,0x10024b001,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100253ae1,0x7fff5fbfebf0,0,0x7fff5fbfec20,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002be67e,0x7fff5fbff260,0,0x102023b00,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002492da,0x7fff5fbfe9a0,0,0x101009410,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010e876,0x7fff5fbff2b8,0,0x0,4 -tick,0x7fff9120c48c,0x7fff5fbfe760,0,0x238aec90a60e2e13,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000def54,0x7fff5fbfe7a8,0,0xdad29dccf12d3916,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457d8c9,0x7fff5fbfef50,0,0x1e4e34394a1c,0,0x1e4e34399727 -tick,0x1000de4f9,0x7fff5fbfe7a8,0,0x9ad29dccdc040ac2,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024fe96,0x7fff5fbfe890,0,0x11e9a4c00000,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100014e10,0x7fff5fbff350,0,0x7fff5fbff490,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345aece5,0x7fff5fbfee28,0,0x1e4e3452a536,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253fd4,0x7fff5fbfeb70,0,0x37ec2edffc89,3,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100394df2,0x7fff5fbfebd8,0,0x100145b4e,4,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bdbc1,0x7fff5fbfe9f0,0,0x1000bdb36,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002afad1,0x7fff5fbfebb0,0,0x7fff5fbfec10,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10018e63e,0x7fff5fbfe8b0,0,0x1003edf26,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343af6b8,0x7fff5fbfeeb0,0,0x11e9a4cb1581,0,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024edc5,0x7fff5fbff000,0,0x37ec2eda5e59,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345649a1,0x7fff5fbfea58,0,0x7fff5fbfeaa8,0,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff91213367,0x7fff5fbfecf0,0,0xfffffffffff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100064e90,0x7fff5fbfef20,0,0x102019d00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325548,0x7fff5fbff280,0,0x1e4e343f1a60,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfefa8,0,0x10011d4e9,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100063d4a,0x7fff5fbfeff0,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100117b71,0x7fff5fbff030,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34332c31,0x7fff5fbff278,0,0x1e4e343f1adb,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345810d9,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f93b3,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34597667,0x7fff5fbfeef8,0,0x37ec2eddef79,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8144,0x7fff5fbff370,0,0xb0,0,0x1e4e3455218e,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x1000c5b92,0x7fff5fbfed30,0,0x7fff5fbfed60,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1000bd10c,0x7fff5fbfed60,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34311304,0x7fff5fbff060,0,0x0,0 -tick,0x7fff911f31a5,0x7fff5fbfebe0,0,0x1006395b4,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3454d0e3,0x7fff5fbfec48,0,0x7fff5fbfec20,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551d05,0x7fff5fbfee80,0,0x37ec2ed77cd9,0,0x1e4e343993e2 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3455e82c,0x7fff5fbfef20,0,0x11e9a4bf5759,0,0x1e4e343949fb,0x1e4e34399727 -tick,0x7fff911daa4f,0x7fff5fbfec00,0,0x7fff5fbfec50,0,0x1e4e3457b4d7,0x1e4e343e8c62,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100232b31,0x7fff5fbfedd0,0,0x7fff5fbfee30,0,0x1e4e3456bed2,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dbc0,0x7fff5fbfe9b8,0,0x10000c149,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10027621f,0x7fff5fbff010,0,0x11e9a4a4de10,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3435aa24,0x7fff5fbfeb30,0,0x1e4e34321c77,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d439,0x7fff5fbfeb60,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3430aa80,0x7fff5fbfef10,0,0x1e4e3455e7d0,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002b9a47,0x7fff5fbfec70,0,0x11e9a4a8fbd9,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b05a8,0x7fff5fbfee18,0,0x1e4e3455a43d,0,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10024fb9c,0x7fff5fbfe650,0,0x7fff5fbfe6f0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daab0,0x7fff5fbfe890,0,0x7fff5fbfe8c0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343e647d,0x7fff5fbfeb30,0,0x11e9a4aeff69,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038f19,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000c163,0x7fff5fbfed70,0,0x7fff5fbfedb8,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1002be632,0x7fff5fbfebc0,0,0x102023a88,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343252a0,0x7fff5fbfebb0,0,0x1e4e34321af0,0,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100260950,0x7fff5fbfebb0,0,0x0,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002609db,0x7fff5fbfe900,0,0x7fff5fbfea10,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911db6cb,0x7fff5fbfe6e8,0,0x10019cb65,0,0x1e4e34322a85,0x1e4e34320c96,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010e883,0x7fff5fbff430,0,0x0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254ef6,0x7fff5fbfebb0,0,0x11e9a49b74a9,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f920e,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008d8ba,0x7fff5fbfefe8,0,0x10002ca75,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100075c1f,0x7fff5fbfef20,0,0x101900c80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dab07,0x7fff5fbfefc0,0,0x7fff5fbff000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f4176,0x7fff5fbfecc0,0,0x1d7940000000057,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c381,0x7fff5fbfeca0,0,0x2837579c3d52a136,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b50,0x7fff5fbfebb0,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000481dc,0x7fff5fbff6b0,0,0x0,4 -tick,0x1000f96fb,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1000c82dd,0x7fff5fbfe8d0,0,0x7fff5fbfe8f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b30,0x7fff5fbfe950,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4a0,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf398,0x7fff5fbfe7e0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001791c4,0x7fff5fbfe8f0,0,0x101009410,3,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100394522,0x7fff5fbff608,0,0x0,3 -tick,0x1e4e343a9463,0x7fff5fbfeab8,0,0x3700000000,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000deb67,0x7fff5fbfe748,0,0xcfcf249ff2b45d13,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10008dd62,0x7fff5fbfefe0,0,0x1019008b0,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1e4e3431b481,0x7fff5fbfed70,0,0xe662304121,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201b21,0x7fff5fbfedf0,0,0x37ec2ed9e0b1,0,0x1e4e34570fec,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff90f806f5,0x7fff5fbfed78,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100263171,0x7fff5fbfea10,0,0x7fff5fbfea80,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170950,0x7fff5fbfea30,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dc25,0x7fff5fbfecb0,0,0x102023a88,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432a8c5,0x7fff5fbfef48,0,0x1e4e34394ab5,0,0x1e4e34399727 -tick,0x1e4e34555082,0x7fff5fbfec00,0,0xe662347fc9,0,0x1e4e34551dd7,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459abb0,0x7fff5fbfec58,0,0x1e4e3431f661,0,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b6a,0x7fff5fbfed70,0,0x101009410,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455a9b2,0x7fff5fbff020,0,0x2e9dafd16c09,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100118d21,0x7fff5fbfec80,0,0x7fff5fbfeca0,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34345441,0x7fff5fbfed78,0,0x7fff5fbfedd0,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432554b,0x7fff5fbfeda0,0,0x1e4e343f1a60,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87b1,0x7fff5fbfeda0,0,0x7fff5fbfedc0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34399383 -tick,0x1001500b7,0x7fff5fbfeb30,0,0x7fff5fbfeb90,0,0x1e4e345b6039,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000c49c1,0x7fff5fbfe920,0,0x1000c5e5f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343634bf,0x7fff5fbfeb08,0,0x1e4e3458506e,0,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3431196e,0x7fff5fbff0f8,0,0x1e4e345554e2,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c2a8,0x7fff5fbfed00,0,0x1030204fb,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002d8d3,0x7fff5fbff040,0,0xa00000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34567003,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8cc5,0x7fff5fbff278,0,0x1e4e343f1db9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de4a1,0x7fff5fbfec88,0,0x31e039ab0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34327aa8,0x7fff5fbff138,0,0x1e4e34567081,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34315118,0x7fff5fbff0c8,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430da29,0x7fff5fbff160,0,0x1e4e34567ab6,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c6288,0x7fff5fbfec60,0,0x1000c5c05,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3436a625,0x7fff5fbfeee8,0,0x1e4e343a9ac2,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff90f8101c,0x7fff5fbfe888,0,0x1002cd8f4,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435d5c7,0x7fff5fbfeeb0,0,0x1e4e34583530,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001500af,0x7fff5fbfea80,0,0x7fff5fbfead0,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452ac32,0x7fff5fbfeb28,0,0x1002afbde,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a21,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34559fc1,0x7fff5fbfee50,0,0x7fff5fbfee98,0,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34320f04,0x7fff5fbfeb30,0,0x1e4e34571f56,0,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100261bc0,0x7fff5fbfee10,0,0xaabee817ae9,0,0x1e4e34320ed1,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34598de0,0x7fff5fbfeda0,0,0x1e4e343f1f5d,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001865f0,0x7fff5fbfeb18,0,0x10018448c,0,0x1e4e343e8d37,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9aee,0x7fff5fbfec70,0,0x11e9a450b639,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002085d6,0x7fff5fbfec40,0,0x101009410,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345580e9,0x7fff5fbfeda8,0,0x297,0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x100253fff,0x7fff5fbfeb70,0,0x37ec2edffc89,3,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019bd00,0x7fff5fbfe9e8,0,0x1002c3b3d,0,0x1e4e3455497b,0x1e4e343a8fe7,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34521268,0x7fff5fbfed58,0,0x1e4e34562fde,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455294b,0x7fff5fbfe730,0,0x0,0,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026081c,0x7fff5fbfebf0,0,0x3885c40b00000002,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453f6b0,0x7fff5fbfedd8,0,0x7fff5fbfee20,0,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbcda,0x7fff5fbfeb98,0,0x7fff911f1b1b,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10010d3a0,0x7fff5fbfe8d8,0,0x10001a2d0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315061,0x7fff5fbff300,0,0x7fff5fbff348,0,0x1e4e345984df -tick,0x100253c1d,0x7fff5fbfef40,0,0x101009410,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001ff1b6,0x7fff5fbfea70,0,0x7fff5fbfeaa0,0,0x1e4e343aac27,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454d4d0,0x7fff5fbfec98,0,0x11e9a443c039,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011d37f,0x7fff5fbfefb0,0,0x102019d00,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfed80,0,0x263e5f570000000a,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3456884d,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfed78,0,0x7fff911f418d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fd79,0x7fff5fbfece8,0,0x7fff91213383,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912107dd,0x7fff5fbfec30,0,0x7fff5fbfece0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566b81,0x7fff5fbff200,0,0x7fff5fbff240,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c488,0x7fff5fbfed60,0,0x10320009f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254cf1,0x7fff5fbfec30,0,0x7fff5fbfecb0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be6b6,0x7fff5fbfeee0,0,0x102023a70,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002622f5,0x7fff5fbfec20,0,0x10099da00,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332c47,0x7fff5fbfeb40,0,0x1e4e343e78da,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454dda2,0x7fff5fbfec48,0,0x7fff5fbfec20,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002fede5,0x7fff5fbfed30,0,0x7fff5fbfed90,0,0x1e4e3456dbd3,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345b065a,0x7fff5fbfee30,0,0x1e4e34398674,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100044155,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3455d3c1,0x7fff5fbfed20,0,0x7fff5fbfed78,0,0x1e4e3453d29b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1003946ea,0x7fff5fbfe8f8,0,0x10019bd74,0,0x1e4e3455497b,0x1e4e34564c92,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024c6cc,0x7fff5fbfe770,0,0xe662346ba9,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff408,0,0x0,4 -tick,0x10024aff0,0x7fff5fbfe710,0,0x2e9dafd0e469,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100232b9c,0x7fff5fbfea70,0,0x7fff5fbfea60,0,0x1e4e34588ee2,0x1e4e345adfba,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100275e8e,0x7fff5fbfead0,0,0xf00000000,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551561,0x7fff5fbfede0,0,0x7fff5fbfee10,0,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002be701,0x7fff5fbfeca0,0,0x7fff5fbfecc0,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34311240,0x7fff5fbff268,0,0x10017128d,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfef30,0,0x2fecab700000000a,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325866,0x7fff5fbff018,0,0x1e4e3455a74d,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3439972b,0x7fff5fbfef88,0,0x11e9a42088e1,0 -tick,0x1e4e34566c18,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453c6c8,0x7fff5fbfef40,0,0x200000000,0,0x1e4e343992f5 -tick,0x1e4e3435ab8b,0x7fff5fbfebb0,0,0x1e4e3435a256,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100179c97,0x7fff5fbfeb40,0,0x9be4f24bf1,0,0x1e4e345b6039,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34327aa8,0x7fff5fbff058,0,0x1e4e345603e5,0 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10010dc2f,0x7fff5fbfe990,0,0x102023b08,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345949bf,0x7fff5fbff210,0,0x37ec2ed9cca9,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3451a2b4,0x7fff5fbff288,0,0x1e4e343f1f2c,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345800cb,0x7fff5fbff148,0,0x11e9a42a6e49,0,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430619f,0x7fff5fbfed90,0,0x1e4e343060e1,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c2c0,0x7fff5fbfed20,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454ddbc,0x7fff5fbfefe8,0,0x10002cd15,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019ece1,0x7fff5fbff0f0,0,0x7fff5fbff150,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10001abba,0x7fff5fbff670,0,0x0,4 -tick,0x7fff911db100,0x7fff5fbfed18,0,0x1000c62a9,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911f317a,0x7fff5fbfed30,0,0x1006395b4,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100148990,0x7fff5fbfedb0,0,0x11e9a43bb101,0,0x1e4e3456bed2,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100232b31,0x7fff5fbfedd0,0,0x7fff5fbfee30,0,0x1e4e3456bed2,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306141,0x7fff5fbfee58,0,0x7fff5fbfee98,0,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010ca31,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x10011b611,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff912083d5,0x7fff5fbfe940,0,0x7fff5fbfe990,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019bd91,0x7fff5fbfeff0,0,0x1002c3a80,0,0x1e4e3455497b,0x1e4e3457bd81,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100256fd3,0x7fff5fbfe850,0,0xe66233fad1,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026081f,0x7fff5fbfe8a0,0,0x263e5f5700000003,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345914e5,0x7fff5fbff120,0,0x11e900000000,0 -tick,0x10002cc25,0x7fff5fbfeb00,0,0x7fff5fbfeb20,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100186655,0x7fff5fbfe5d0,0,0x7fff5fbfe650,0,0x1e4e343181dd,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001444e1,0x7fff5fbfec70,0,0x7fff5fbfec98,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbcfc,0x7fff5fbfe808,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012eae1,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3454dea7,0x7fff5fbfee10,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x1002c1520,0x7fff5fbfea08,0,0x1e4e3430618e,0,0x1e4e3454d16d,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100172c5e,0x7fff5fbfe840,0,0x7fff5fbfe8c0,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001500af,0x7fff5fbff4e0,0,0x7fff5fbff580,0,0x1e4e3459e580 -tick,0x7fff9127cbc6,0x7fff5fbfe8f8,0,0x10012825a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be646,0x7fff5fbfea00,0,0x102023a90,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b43,0x7fff5fbfe730,0,0x101009410,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3458cbc0,0x7fff5fbff538,0,0x1e4e343b60c6,0,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608e1,0x7fff5fbfeda0,0,0x263e5f5700000015,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254fb5,0x7fff5fbfeaf0,0,0x7f015fbfeba0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000fa317,0x7fff5fbfeb80,0,0x100a137f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912107dc,0x7fff5fbfec38,0,0x7fff9120c37d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912137b6,0x7fff5fbfebe0,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001aa8e3,0x7fff5fbfeae0,0,0x0,1 -tick,0x1001a8d7c,0x7fff5fbfeb50,0,0x0,1 -tick,0x1001a8aa7,0x7fff5fbfeb68,0,0x0,1 -tick,0x1001a8a96,0x7fff5fbfeb50,0,0x0,1 -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100117c0b,0x7fff5fbff030,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de1c5,0x7fff5fbfee98,0,0x100a12be0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df244,0x7fff5fbfec28,0,0xfbc5e2e93e01e532,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019cc71,0x7fff5fbfee60,0,0x7fff5fbfeec0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9120c05a,0x7fff5fbff300,0,0x0,4 -tick,0x10004e7c3,0x7fff5fbff350,0,0x0,4 -tick,0x1002773c0,0x7fff5fbfe4a8,0,0x11e9a5d6a979,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431196a,0x7fff5fbfec18,0,0x1e4e345554e2,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c2dd,0x7fff5fbfe8a0,0,0x1fa610000000025,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002609b1,0x7fff5fbfea10,0,0x100000000,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ed40,0x7fff5fbfea90,0,0x0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002488a1,0x7fff5fbfe970,0,0x7fff5fbfe9b0,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025463a,0x7fff5fbfea40,0,0x162355501,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002ca3d,0x7fff5fbfeb50,0,0x7fff5fbfebb0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3458e77c,0x7fff5fbfec90,0,0x1e4e343af856,0,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024edc5,0x7fff5fbfe7c0,0,0x37ec2edcf291,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c0121,0x7fff5fbfeb50,0,0x7fff5fbfeb78,0,0x1e4e34320e97,0x1e4e34571f56,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87ce,0x7fff5fbfec00,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100117b71,0x7fff5fbfeba0,0,0x7fff5fbfebc0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a437c,0x7fff5fbfea10,0,0x1e4e34597bd0,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100391a51,0x7fff5fbfea60,0,0x7fff5fbfea90,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9127cbc6,0x7fff5fbfead8,0,0x10011c1f9,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c204,0x7fff5fbfebd0,0,0x0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345769ed,0x7fff5fbfe9b0,0,0x37ec2eddf0b9,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551561,0x7fff5fbff550,0,0x7fff5fbff580,0,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x100253b43,0x7fff5fbfee30,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3435d5c7,0x7fff5fbfeb00,0,0x1e4e34583530,0,0x1e4e34573968,0x1e4e345a08d4,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100254ef6,0x7fff5fbfecc0,0,0x7fff5fbfed10,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd2be,0x7fff5fbfee40,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9385,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10025470e,0x7fff5fbfedf0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3456786d,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9407,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100118d21,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457f6db,0x7fff5fbff020,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002cc44,0x7fff5fbfefe0,0,0x7fff5fbff000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daade,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1000f96f0,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3454833c,0x7fff5fbfe9d8,0,0x1d4c000000000,0,0x1e4e345977c1,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d63,0x7fff5fbfea90,0,0x3d2797f6031,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3454e093,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100261973,0x7fff5fbfee10,0,0x11e9a5be1011,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34519ce4,0x7fff5fbfec40,0,0x1e4e3454d3fe,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457b638,0x7fff5fbfed20,0,0x11e9a5a0e439,0,0x1e4e343e8cc4,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e345b9289,0x7fff5fbfec00,0,0x1e4e34570fec,0,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431b418,0x7fff5fbfed70,0,0xe662304121,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343098ac,0x7fff5fbfee08,0,0x0,0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da168,0x7fff5fbfe878,0,0x100218e51,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024fe96,0x7fff5fbfe890,0,0x11e9a5a00000,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343252ac,0x7fff5fbfeee8,0,0x1e4e343a9c42,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34597af2,0x7fff5fbfea18,0,0x37ec2eddef79,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b6825,0x7fff5fbfeb00,0,0x1e4e3454e2fc,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001785e1,0x7fff5fbfec90,0,0x7fff5fbfecc0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x10019b091,0x7fff5fbfed20,0,0x7fff5fbfed60,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345570fc,0x7fff5fbfed98,0,0x102023a88,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a27,0x7fff5fbfeb80,0,0x7fff5fbfebe0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9121376e,0x7fff5fbfe9d0,1,0x10000a04c,4,0x1e4e3453ed3f,0x1e4e3454d637,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315118,0x7fff5fbfeb60,0,0x37ec2edffa21,0,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1002095fe,0x7fff5fbfebc0,0,0x102023aa0,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456c980,0x7fff5fbff538,0,0x1e4e343b6092,0,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10009feb1,0x7fff5fbfedf8,0,0xa,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcd4,0x7fff5fbfeeb8,0,0x7fff911f40bc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100118d40,0x7fff5fbfefe0,0,0x7fff5fbff000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009fea8,0x7fff5fbfef50,0,0x7fff5fbfef80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566e80,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213624,0x7fff5fbfec60,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008e7d5,0x7fff5fbfef80,0,0x1005f82f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cfd,0x7fff5fbfeef0,0,0x7fff5fbfef60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309dc0,0x7fff5fbff150,0,0x1e4e34567ae8,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c3bd,0x7fff5fbfecc0,0,0x20818000000019f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34311283,0x7fff5fbff430,0,0x0,0 -tick,0x7fff911dbd12,0x7fff5fbfeec8,0,0x10011d4e9,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100179171,0x7fff5fbfead0,0,0x7fff5fbfeb00,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343e8bc1,0x7fff5fbfee20,0,0x7fff5fbfee50,0,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453f826,0x7fff5fbfedc8,0,0x11e9a581d439,0,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012116c,0x7fff5fbff170,0,0x0,4 -tick,0x1002490c1,0x7fff5fbfe970,0,0x101009410,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100276e8c,0x7fff5fbfe970,0,0x11e9a5857a49,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459287c,0x7fff5fbff5c8,0,0x1e4e3459e4c1,0 -tick,0x1e4e3454e1e2,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002618f1,0x7fff5fbfec50,0,0x7fff5fbfec90,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002095e0,0x7fff5fbfebc0,0,0x100000000,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251268,0x7fff5fbfeb60,0,0x16b,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026191a,0x7fff5fbfea90,0,0x2e9dafd14161,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d63,0x7fff5fbfec50,0,0x101009400,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011add1,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34571005,0x7fff5fbfef30,0,0x11e9a5714229,0,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10012eaec,0x7fff5fbfe8c0,0,0x7fff5fbfe920,0,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343b5fc0,0x7fff5fbff538,0,0x37ec2edd42b9,0,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34556d51,0x7fff5fbfed98,0,0x102023a88,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025246e,0x7fff5fbfec30,0,0x0,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001709b3,0x7fff5fbfe8c0,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34308541,0x7fff5fbfec50,0,0x1e4e3458000c,0,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002492c0,0x7fff5fbfee00,0,0x101009410,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1e4e34321d20,0x7fff5fbfeb38,0,0x0,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000df44c,0x7fff5fbfed00,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f372b,0x7fff5fbfec70,0,0x7fff5fbfec80,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de074,0x7fff5fbfeea0,0,0x7fff5fbfeeb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430da2d,0x7fff5fbff278,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454df06,0x7fff5fbfefe8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff90f81015,0x7fff5fbfed68,0,0x1002cd8f4,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121478b,0x7fff5fbfed20,0,0x5fbfed50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523e1,0x7fff5fbfebe0,0,0x2e9dafd13f69,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x100218e46,0x7fff5fbfeec0,0,0x1,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10026c54b,0x7fff5fbfeae0,0,0x102023a88,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454df5d,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120fe1b,0x7fff5fbfe6a8,0,0x7,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34571019,0x7fff5fbfee78,0,0x11e9a5655f21,0,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3456b500,724,"Buffer.writeUInt8 buffer.js:862",0xe662365888,~ -tick,0x1001e9021,0x7fff5fbfe5b0,0,0x7fff5fbfe5f0,2,0x1e4e343aa7b8,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e3456b7e0,1061,"Buffer.writeUInt8 buffer.js:862",0xe662365888,* -tick,0x100170950,0x7fff5fbfe8e0,0,0x9,3,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100275541,0x7fff5fbfe640,0,0x7fff5fbfe6b0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343f200a,0x7fff5fbfedb0,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345914a1,0x7fff5fbff198,0,0x7fff5fbff1d8,0 -tick,0x10000b1e6,0x7fff5fbfe908,0,0x100000000,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10017ce34,0x7fff5fbff280,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1002554b3,0x7fff5fbfec10,0,0x7fff00000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bd333,0x7fff5fbfe900,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be510,0x7fff5fbfece8,0,0x1002beadf,0,0x1e4e34551d37,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002ca003,0x7fff5fbfebe0,0,0x1002c9f30,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431196e,0x7fff5fbfeb18,0,0x1e4e34579b21,0,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10021c401,0x7fff5fbfe830,0,0x7fff5fbfe880,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457414a,0x7fff5fbfefc0,0,0x1e4e34587fe0,0,0x1e4e345603e5,0x1e4e3458991c,0x1e4e345892e0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c87ce,0x7fff5fbfed00,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f40bc,0x7fff5fbfe910,0,0x10280ed78,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100275d3d,0x7fff5fbfeae8,0,0x11e9a55bb3a9,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435d365,0x7fff5fbfeed8,0,0x1e4e343a9ce2,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34592f20,0x7fff5fbfebf8,0,0x1e4e3457eeab,0,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10016d882,0x7fff5fbfea00,0,0x0,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000c002,0x7fff5fbfe950,0,0x101009400,0,0x1e4e3454d2d8,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000f9f6a,0x7fff5fbfeec8,0,0x1000bdbd6,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523a0,0x7fff5fbfee28,0,0x1002490de,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f927d,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912132be,0x7fff5fbfec60,0,0xffffffffffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b6a,0x7fff5fbfedc0,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de748,0x7fff5fbfec88,0,0x888e00c06fa41c46,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457667d,0x7fff5fbfeea8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010dca0,0x7fff5fbff010,0,0x102023a68,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100392841,0x7fff5fbfedb0,0,0x7fff5fbfedd0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91210825,0x7fff5fbfecb0,0,0x7fff5fbfed60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002bf2d0,0x7fff5fbff4d0,0,0x0,3 -tick,0x7fff911daa40,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10002cc0d,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911edef8,0x7fff5fbfeb80,0,0x80000000,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343262e1,0x7fff5fbfef88,0,0x1e4e343993be,0 -tick,0x7fff911dbf9d,0x7fff5fbfe838,0,0x7fff91213830,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10018e8c1,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3459cbb0,0x7fff5fbff098,0,0x1e4e34320eb8,0,0x1e4e343b6b12,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100257b82,0x7fff5fbfe278,0,0x2,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002622ff,0x7fff5fbfec38,0,0x7fff5fbfee01,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001912a3,0x7fff5fbfeaf0,0,0x23bef4,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8e26,0x7fff5fbfe620,0,0x1e4e34560b9b,0,0x1e4e343e426d,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34575381,0x7fff5fbfedf8,0,0x11e9a534efb1,0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34583c05,0x7fff5fbfeec0,0,0x7fff5fbfef20,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345b290f,0x7fff5fbff0a0,0,0x11e9a5373da1,0 -tick,0x1e4e345b5328,0x7fff5fbff258,0,0x1e4e34551c75,0,0x1e4e34598721 -tick,0x1002608ec,0x7fff5fbfe8c0,0,0x263e5f5700000015,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34399303,0x7fff5fbfef90,0,0x0,0 -tick,0x10026191f,0x7fff5fbfea90,0,0x2e9dafd14161,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbff268,0,0x100171416,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34570ef6,0x7fff5fbfee78,0,0x11e9a5372df9,0,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3452d4e5,0x7fff5fbfed88,0,0x1e4e3456e144,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100118d21,0x7fff5fbfe900,0,0x7fff5fbfe920,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34578b28,0x7fff5fbfe988,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34563169,0x7fff5fbfed60,0,0x101009400,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343061b5,0x7fff5fbff188,0,0x1e4e34580509,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100050db0,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd297,0x7fff5fbfeef0,0,0x301,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de537,0x7fff5fbfec88,0,0x8b4e63b033b30ac7,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432554b,0x7fff5fbff288,0,0x1e4e343f1eb3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c13ec,0x7fff5fbfece0,0,0x7fff5fbfed00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432589a,0x7fff5fbff050,0,0x1e4e34551d37,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523cd,0x7fff5fbfed10,0,0x2e9dafd23ac1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911dbd12,0x7fff5fbfeb78,0,0x100120174,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120645f,0x7fff5fbfec18,0,0x7fff91206c54,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34332f89,0x7fff5fbfec68,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024bb40,0x7fff5fbfea08,0,0x100254146,0,0x1e4e34579e65,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455e9ff,0x7fff5fbfef20,0,0x11e9a52fb959,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e34327b69,0x7fff5fbfec58,0,0x1e4e34567081,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c5b21,0x7fff5fbfe948,0,0x1000c5ba6,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912061af,0x7fff5fbfe8b0,0,0x1009ca000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10016d815,0x7fff5fbfea80,0,0x1005ff640,0,0x1e4e343599a4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10016d970,0x7fff5fbfea80,0,0x0,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002631b6,0x7fff5fbfe2c0,0,0x7fff5fbfe300,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343a9400,0x7fff5fbfeae8,0,0x1e4e343098ce,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455a050,0x7fff5fbff020,0,0x2e9dafd16c09,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345a34de,0x7fff5fbfecf0,0,0x101009400,0,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf229,0x7fff5fbfed90,0,0x199900000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253fec,0x7fff5fbfea10,0,0x37ec2edffc89,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10000c05e,0x7fff5fbfea40,0,0x101009400,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8443,0x7fff5fbfe9e0,0,0x101009410,0,0x1e4e345ae6cd,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff90f806f5,0x7fff5fbfec18,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100252cda,0x7fff5fbff100,0,0x2d90905c00000009,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019fbd1,0x7fff5fbfea20,0,0x2e9dafd056a9,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b9842,0x7fff5fbfec70,0,0x11e9a51ff191,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34394a93,0x7fff5fbfef58,0,0xe662304121,0,0x1e4e34399727 -tick,0x1e4e3435cce0,0x7fff5fbff0a8,0,0x1e4e3457bdb7,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34582328,0x7fff5fbff388,0,0x1e4e343df14e,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bdbc1,0x7fff5fbfeed0,0,0x1000bdb36,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be554,0x7fff5fbfecd0,0,0x102023a88,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253c0d,0x7fff5fbfeb10,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120616c,0x7fff5fbfedb8,0,0x7fff91206c07,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001446d2,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002bf1ee,0x7fff5fbfecc0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019fb20,0x7fff5fbfed08,0,0x10019b1d2,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253ae0,0x7fff5fbfedf8,0,0x10024b001,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcf7,0x7fff5fbfed48,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c1c1,0x7fff5fbfee10,0,0x7fff5fbfee60,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,LazyCompile,0x1e4e34569460,1057,"ondata stream.js:36",0x37ec2edc4328,* -tick,0x7fff9121376e,0x7fff5fbfeb70,0,0x7fff5fbfeba0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100188710,0x7fff5fbfe5e8,0,0x0,1 -tick,0x7fff911daaf5,0x7fff5fbfe750,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe7b0,0,0x0,1 -tick,0x1001a8c6a,0x7fff5fbfe7b0,0,0x0,1 -tick,0x1001a807e,0x7fff5fbfe770,0,0x0,1 -tick,0x1001987fa,0x7fff5fbfe780,0,0x0,1 -tick,0x1001787d7,0x7fff5fbfec50,0,0x0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e3436a625,0x7fff5fbfeee0,0,0x1e4e343aa483,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c245,0x7fff5fbfea40,0,0x7900000000,0,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf1c8,0x7fff5fbfee00,0,0x5,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b5448,0x7fff5fbfe9d0,0,0x7fff5fbfe9f8,0,0x1e4e3432a2c0,0x1e4e3453ed3f,0x1e4e3454d637,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170963,0x7fff5fbfea30,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456d891,0x7fff5fbfef28,0,0xe6623608b1,0,0x1e4e34399744 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3455f4b2,0x7fff5fbfebc8,0,0x9be4f23001,0,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011b611,0x7fff5fbfe8c0,0,0x7fff5fbfe920,0,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34580ac3,0x7fff5fbfecb0,0,0x7fff5fbfed10,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011fc11,0x7fff5fbfeb30,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d188,0x7fff5fbfec40,0,0x100000000,0,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453ef6e,0x7fff5fbfedd8,0,0x7fff5fbfee20,0,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b279,0x7fff5fbfe8d0,0,0x0,0,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343598be,0x7fff5fbfebe0,0,0xe662304121,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455afbf,0x7fff5fbfeb88,0,0x2e9dafd19839,0,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34555442,0x7fff5fbfed78,0,0xf66,0,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345994c1,0x7fff5fbfedc8,0,0x7fff5fbfee48,0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10004e7ea,0x7fff5fbff350,0,0x0,4 -tick,0x1e4e3456e144,0x7fff5fbfedd0,0,0xc900000000,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100179207,0x7fff5fbfeac0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435ccf1,0x7fff5fbff0a8,0,0x1e4e3457be0e,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100039553,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100121377,0x7fff5fbff300,0,0x101009400,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011a1ce,0x7fff5fbfef10,0,0x102023a90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1000bd121,0x7fff5fbfedc0,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b1004,0x7fff5fbff160,0,0x1e4e34566fc0,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100249460,0x7fff5fbfee70,0,0x101009410,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fccb,0x7fff5fbfefc0,0,0x7fff5fbfefe0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d471,0x7fff5fbff050,0,0x7fff5fbff090,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580479,0x7fff5fbff188,0,0x37ec2edd46c1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd20d,0x7fff5fbfed30,0,0x7fff5fbfedc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121387a,0x7fff5fbfeca0,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10001a87d,0x7fff5fbfee48,0,0x1020259f0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911db094,0x7fff5fbfee38,0,0x1000643ea,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199effa,0x7fff5fbff408,0,0x0,4 -tick,0x7fff9120fd56,0x7fff5fbfe800,0,0x10099e400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100018f70,0x7fff5fbff2d0,0,0x0,4 -tick,0x100117b90,0x7fff5fbfec80,0,0x7fff5fbfeca0,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011ff80,0x7fff5fbfeb80,0,0x103050b4e,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311984,0x7fff5fbfed90,0,0x1e4e345554e2,0,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201b0a,0x7fff5fbfecf8,0,0x101009498,0,0x1e4e34563509,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455506e,0x7fff5fbff008,0,0x1e4e3455a8c4,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3451d5c0,0x7fff5fbfede8,0,0x1e4e34398b06,0,0x1e4e345761cf,0x1e4e34583f95,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100392841,0x7fff5fbfeb70,0,0x7fff5fbfeb90,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170950,0x7fff5fbfea70,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10014457f,0x7fff5fbfeea0,0,0x7fff5fbfeef0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x10022d1f1,0x7fff5fbfeb40,1,0x10000af1c,4,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f9264,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ae383,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8141,0x7fff5fbfeaa0,0,0x101058e00,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332e07,0x7fff5fbfec00,0,0x1e4e345b5c90,0,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024b186,0x7fff5fbfe8a8,0,0x1002510ae,0,0x1e4e343aac27,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c3c28,0x7fff5fbfed10,0,0x1,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306140,0x7fff5fbfedf8,0,0x1e4e3457d1f6,0,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x100276248,0x7fff5fbfeb90,0,0x11e9a4a72e48,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100262c0a,0x7fff5fbfe4d0,0,0x7fff5fbfe618,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da168,0x7fff5fbfeb78,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34572877,0x7fff5fbfe8c0,0,0x11e9a4a52681,0,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254e34,0x7fff5fbfe600,0,0xe662367291,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000decaa,0x7fff5fbfec28,0,0xb38000acd43cbfce,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd16e,0x7fff5fbfee80,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454e0ff,0x7fff5fbfefe8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345807af,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c3a0,0x7fff5fbfed60,0,0x101c0024b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100122a99,0x7fff5fbff090,0,0x7fff5fbff0b0,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454dee2,0x7fff5fbfefd8,0,0x4a00000000,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fd81,0x7fff5fbfed50,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10022d1f1,0x7fff5fbff020,0,0x7fff5fbff050,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024aff6,0x7fff5fbff5f0,0,0x0,3 -tick,0x1000f9784,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001785e6,0x7fff5fbfec08,0,0x7fff5fbfed78,3,0x1e4e3454e2fc,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbcf4,0x7fff5fbfea08,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34325595,0x7fff5fbfeda0,0,0x1e4e343f1a60,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608d7,0x7fff5fbfecc0,0,0x36d6f25000000012,0,0x1e4e345b4543,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001845b6,0x7fff5fbff260,0,0x101009401,0,0x1e4e343b5be9,0x1e4e343b64c9,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x1e4e34566c08,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3c7,0x7fff5fbfebb0,0,0x10002d91c,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c67cc,0x7fff5fbfe750,0,0x7fff5fbfe7f8,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34578961,0x7fff5fbff2d8,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e345984df -tick,0x1e4e34320d6e,0x7fff5fbff098,0,0x1e4e3457bf87,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002fedd1,0x7fff5fbfee90,0,0x7fff5fbfeef0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x100114521,0x7fff5fbff1c0,0,0x0,4 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1002590b1,0x7fff5fbfea20,0,0x7fff5fbfeae0,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345afd49,0x7fff5fbfec90,0,0x3d2797ecca1,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfeab0,0,0x3572042d0000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254fbd,0x7fff5fbfedc0,0,0x11e9a480e3b9,0,0x1e4e3455ab16,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019fcd6,0x7fff5fbff290,0,0xd9c9ff15a96f5556,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100118f4b,0x7fff5fbfeb70,0,0x7fff5fbfeb90,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343262ef,0x7fff5fbfef50,0,0x1e4e34394a1c,0,0x1e4e34399727 -tick,0x1e4e3430a91f,0x7fff5fbfeef0,0,0x1e4e343a9b78,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x100249255,0x7fff5fbfedf0,0,0x7fff5fbfee30,0,0x1e4e34551d37,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100260901,0x7fff5fbfeb50,0,0x7fff5fbfeb90,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c13bd,0x7fff5fbfef08,0,0x1000754d3,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006f819,0x7fff5fbff010,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3458041a,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b0fc8,0x7fff5fbff160,0,0x1e4e34566fc0,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cf2,0x7fff5fbfef30,0,0x1000bdb36,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580479,0x7fff5fbff188,0,0x37ec2edd46c1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fc66,0x7fff5fbfece0,0,0x10099da00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523a6,0x7fff5fbff3a8,0,0x0,3 -tick,0x1000f98e8,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e343252ac,0x7fff5fbfee30,0,0x1e4e34398a05,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34566c88,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ff7f,0x7fff5fbfec00,0,0x1,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253f51,0x7fff5fbfe920,0,0x7fff5fbfe960,3,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8d1b,0x7fff5fbfee38,0,0x1e4e34394669,0,0x1e4e3455287e,0x1e4e343993e2 -tick,0x1e4e3452a441,0x7fff5fbfee58,0,0x7fff5fbfeed0,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8fa0,0x7fff5fbfedf0,0,0x1e4e343e8c98,0,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e345547af,0x7fff5fbff098,0,0x7fff5fbff0f8,0 -tick,0x1e4e34589261,0x7fff5fbff080,0,0x7fff5fbff0c8,0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100118d4a,0x7fff5fbfeb50,0,0x102023a88,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c8301,0x7fff5fbfe980,0,0x101816290,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000394ea,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120616c,0x7fff5fbfe928,0,0x7fff91206c07,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608cc,0x7fff5fbfe920,0,0x263e5f5700000015,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10025466a,0x7fff5fbfeac0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10019080a,0x7fff5fbff560,0,0x0,3 -tick,0x100038ee5,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfeba0,0,0x122a8dcc00000007,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120364,0x7fff5fbfede0,0,0x7fff5fbfee00,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3454e300,0x7fff5fbfeab0,0,0x9be4f23001,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10001a871,0x7fff5fbfee70,0,0x7fff5fbfeeb8,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100191440,0x7fff5fbfef70,0,0x102019d00,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309889,0x7fff5fbff178,0,0x1e4e34580a7c,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000fde45,0x7fff5fbfed58,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bad91,0x7fff5fbfec28,0,0x1000c67b7,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002bf39c,0x7fff5fbfecc0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019cc71,0x7fff5fbfef40,0,0x7fff5fbfefa0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d3e6,0x7fff5fbfefc0,0,0x0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be632,0x7fff5fbfef00,0,0x102023a70,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5b92,0x7fff5fbfee50,0,0x7fff5fbfee80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1003946ea,0x7fff5fbff398,0,0x10019b1b0,0,0x1e4e3455218e,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x1000f979a,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001445cd,0x7fff5fbfed30,0,0x7fff5fbfed80,0,0x1e4e3456bed2,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff90f806f0,0x7fff5fbfec18,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011add1,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100254600,0x7fff5fbfeaf8,0,0x100179207,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daab0,0x7fff5fbfead0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34583552,0x7fff5fbfeb60,0,0x11e9a4435b29,0,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100279be1,0x7fff5fbfe740,0,0x7fff5fbfe780,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a8100,0x7fff5fbfeae8,0,0x10019f457,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfebf0,0,0x3572042d00000004,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002490c1,0x7fff5fbfebd0,0,0x101009410,0,0x1e4e34551d37,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100007ffb,0x7fff5fbfe5c0,0,0x7fff5fbfe600,0,0x1e4e34560bb7,0x1e4e343e426d,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343b5c81,0x7fff5fbff3f8,0,0x7fff5fbff428,0,0x1e4e345522ca,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x1e4e3457dfa9,0x7fff5fbfed68,0,0x1001444e0,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345b5328,0x7fff5fbff258,0,0x1e4e34551c75,0,0x1e4e34598721 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100046bc0,0x7fff5fbff380,0,0x0,4 -tick,0x7fff911f18c7,0x7fff5fbfed68,0,0x100044dfe,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e343fd785,0x7fff5fbfedd0,0,0x1e4e3455a43d,0,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbfed28,0,0x7fff911f31d7,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100176007,0x7fff5fbff2b8,0,0x0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454d5aa,0x7fff5fbfeab0,0,0x9be4f23001,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbcd4,0x7fff5fbfe898,0,0x7fff911f40bc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001203f6,0x7fff5fbff420,0,0x7fff5fbff440,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000a01c1,0x7fff5fbfecb0,0,0x7fff5fbfef40,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa4d,0x7fff5fbfefb0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c1d36,0x7fff5fbfeea8,0,0x1000c5e74,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a788d,0x7fff5fbfef60,0,0x101014e00,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3458028e,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001447fa,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120616c,0x7fff5fbfedb8,0,0x7fff91206c07,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012f03f,0x7fff5fbfee78,0,0x1002490ed,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b7ed8,0x7fff5fbff160,0,0x1e4e34567296,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfef28,0,0x7fff911f4105,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912134cd,0x7fff5fbfec90,0,0xcfffff800,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100175d11,0x7fff5fbfeec0,0,0x7fff5fbfeef0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3459992f,0x7fff5fbfee18,0,0x3d2797f6031,0,0x1e4e3457589f,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e34567f44,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34394b1b,0x7fff5fbfef78,0,0x1e4e34399727,0 -tick,0x1e4e34315082,0x7fff5fbfed68,0,0x300000000,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c5cd8,0x7fff5fbfe918,0,0x1000c2026,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10008ea4e,0x7fff5fbfebb0,0,0x7fff5fbfec20,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e1,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001218f1,0x7fff5fbfea30,0,0x7fff5fbfeaa0,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432101a,0x7fff5fbfed48,0,0xaabee809da1,0,0x1e4e3454dadf,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100252363,0x7fff5fbfed90,0,0x7fff5fbfee40,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34555ca8,0x7fff5fbfe980,0,0x2600000000,0,0x1e4e34564a8c,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100392841,0x7fff5fbfec50,0,0x7fff5fbfec70,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100044fdf,0x7fff5fbff390,0,0x0,4 -tick,0x1000f933e,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001912de,0x7fff5fbfea70,0,0x7fff5fbfeae0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019d00c,0x7fff5fbfec38,0,0x1002c87b0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b57,0x7fff5fbfee20,0,0x101009410,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100145a24,0x7fff5fbfebe0,0,0x1e4e345b67c1,0,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da168,0x7fff5fbfeb08,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343258de,0x7fff5fbfedf0,0,0x1e4e3455ac3e,0,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,StoreIC,0x1e4e345698a0,189,"_buffer" -code-creation,StoreIC,0x1e4e345698a0,189,"_buffer" -code-creation,LoadIC,0x1e4e34569960,138,"_binding" -code-creation,LoadIC,0x1e4e34569960,138,"_binding" -code-creation,LoadIC,0x1e4e34569a00,134,"_flush" -code-creation,LoadIC,0x1e4e34569a00,134,"_flush" -code-creation,StoreIC,0x1e4e34569aa0,189,"callback" -code-creation,StoreIC,0x1e4e34569aa0,189,"callback" -code-creation,StoreIC,0x1e4e34569b60,189,"buffer" -code-creation,StoreIC,0x1e4e34569b60,189,"buffer" -tick,0x1002608ec,0x7fff5fbfe640,0,0x28c26cf200000007,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343ad794,0x7fff5fbfee78,0,0x11e9a417edf9,0,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfec30,0,0x101009410,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a4368,0x7fff5fbff360,0,0x1e4e345984f6,0 -tick,0x10010dc33,0x7fff5fbfe8a0,0,0x102023b20,0,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001943ec,0x7fff5fbfe8e8,0,0x101009498,0,0x1e4e3454d2d8,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345789ee,0x7fff5fbfee68,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cd1,0x7fff5fbfee68,0,0x100051ee8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1d45,0x7fff5fbff280,0,0xe662335941,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100260935,0x7fff5fbfeee0,0,0x1,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd1b8,0x7fff5fbfed60,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f4216,0x7fff5fbfed98,0,0x1003e2fb4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010dbc0,0x7fff5fbff0b8,0,0x10002d962,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430c2e5,0x7fff5fbff280,0,0x1e4e343f1e97,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34594a53,0x7fff5fbff218,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100121204,0x7fff5fbff510,0,0x0,4 -tick,0x1000f970b,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3430619f,0x7fff5fbfeb60,0,0x7fff5fbfeb98,0,0x1e4e34320e97,0x1e4e34571f56,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbcf7,0x7fff5fbfea58,0,0x7fff911f2db4,0,0x1e4e34579b39,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000fde13,0x7fff5fbfe878,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343252a0,0x7fff5fbfee30,0,0x1e4e34398a05,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911dab07,0x7fff5fbfeae0,0,0x7fff5fbfeb20,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d483,0x7fff5fbfeb00,0,0x7fff5fbfeb50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34597409,0x7fff5fbfec20,0,0x7fff5fbfec40,0,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025463a,0x7fff5fbfec10,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e34559fc1,0x7fff5fbfee98,0,0x7fff5fbfeef0,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3435ccfd,0x7fff5fbff0a8,0,0x1e4e3457bdd4,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100251006,0x7fff5fbff078,0,0xe662304181,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343180c0,0x7fff5fbfebd8,0,0x1e4e343aac0a,0,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a805e,0x7fff5fbfe410,0,0x0,1 -tick,0x1001a8cca,0x7fff5fbfe440,0,0x0,1 -tick,0x1001a8c6a,0x7fff5fbfe440,0,0x0,1 -tick,0x100197a2f,0x7fff5fbfe470,0,0x0,1 -tick,0x1001987ab,0x7fff5fbfe410,0,0x0,1 -tick,0x100218e41,0x7fff5fbfe450,0,0x7fff5fbfe480,4,0x1e4e3459bb23,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002061c1,0x7fff5fbfea40,0,0xe662300000,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026081f,0x7fff5fbfebf0,0,0x17acbd4800000003,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff8ddd326a,0x7fff5fbfea20,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000de5ef,0x7fff5fbfe748,0,0xcc5c79030202028c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027565c,0x7fff5fbfe610,0,0x11e9a5d39021,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523a0,0x7fff5fbfe588,0,0x10025acf3,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100206038,0x7fff5fbfebd0,0,0xe662300000,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025dcdf,0x7fff5fbfe980,0,0x12fcd097cea0,0,0x1e4e345852c8,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34555cfb,0x7fff5fbfe980,0,0xaabee804139,0,0x1e4e34564a8c,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011d44e,0x7fff5fbfead0,0,0x102019d00,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325548,0x7fff5fbfeda8,0,0x1e4e343f1e3c,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019d00c,0x7fff5fbfec18,0,0x1002c87b0,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a4177,0x7fff5fbfe9e0,0,0x3d2797f6031,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002554c1,0x7fff5fbff0f0,0,0x11e9a5dda8e1,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100145a0f,0x7fff5fbfed20,0,0x7fff5fbfed40,0,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfefa8,0,0x10011d48c,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523c0,0x7fff5fbfebe0,0,0xe662300000,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002622f5,0x7fff5fbfed80,0,0x263e5f570000000a,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100203768,0x7fff5fbfee50,0,0x1,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100263257,0x7fff5fbfea80,0,0x7fff5fbfeb30,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfeda0,0,0x263e5f5700000015,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100279be0,0x7fff5fbfece8,0,0x10027558d,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019cd4b,0x7fff5fbfef20,0,0x1003d3d67,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c61f5,0x7fff5fbfed68,0,0x1000c5bd4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34327aa8,0x7fff5fbff038,0,0x1e4e3455287e,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8d18,0x7fff5fbff1a0,0,0x1e4e343f1db9,0,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9120fd7a,0x7fff5fbff250,0,0x0,4 -tick,0x1002e6b31,0x7fff5fbfdba0,0,0x5b,2 -code-creation,LazyCompile,0x1e4e345350e0,5285,"callback zlib.js:395",0x37ec2ed7eae8,* -tick,0x100205974,0x7fff5fbfe5c0,0,0x7fff5fbfe600,2 -tick,0x1002061b3,0x7fff5fbfe970,0,0x11e9a5d00000,0,0x1e4e345b0d38,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343fd791,0x7fff5fbff518,0,0x1e4e343b5fe4,0,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9121478b,0x7fff5fbff2b0,0,0x7fff5fbff710,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025246e,0x7fff5fbfe8f0,0,0x0,0,0x1e4e34551d37,0x1e4e3455a6d1,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100206516,0x7fff5fbfe4a8,0,0x7fff5fbfe4c8,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100114483,0x7fff5fbff1c0,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453f0e9,0x7fff5fbfedd8,0,0x7fff5fbfee20,0,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10017c56f,0x7fff5fbfe870,0,0x3,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002061db,0x7fff5fbfe8e0,0,0x3d279700000,0,0x1e4e345adbdf,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a34,0x7fff5fbfecb0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011c0a3,0x7fff5fbff290,0,0x0,4 -tick,0x10023ae02,0x7fff5fbfec70,0,0x3d279764be9,0,0x1e4e345b4ab6,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454a492,0x7fff5fbff5c0,0,0x1e4e3459e4aa,0 -tick,0x10030f640,0x7fff5fbff2e8,0,0x102023b08,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10023b360,0x7fff5fbfec90,0,0x38,0,0x1e4e34587515,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9121376e,0x7fff5fbfebe0,0,0x7fff5fbfec10,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019b0c3,0x7fff5fbfeae0,0,0x2e9dafd056a9,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002772f1,0x7fff5fbfe4c0,0,0x7fff5fbfe920,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c5b54,0x7fff5fbfe990,0,0x101901e20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435482d,0x7fff5fbfed48,0,0x1e4e3432102a,0,0x1e4e3454dadf,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459cb85,0x7fff5fbfe8c0,0,0x1e4e34320c96,0,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfef30,0,0x23c089520000000a,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457e184,0x7fff5fbfef88,0,0x1e4e34399339,0 -tick,0x10011fb5b,0x7fff5fbfe9a0,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120645f,0x7fff5fbfed68,0,0x7fff91206c54,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100391a5c,0x7fff5fbfe950,0,0x7fff5fbfe980,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345a08a3,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbff210,0,0xe6373030000000a,0,0x1e4e34551d37,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x1000c61f5,0x7fff5fbfee28,0,0x1000c5bd4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523a1,0x7fff5fbfebc0,0,0x7fff5fbfecb0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd10b,0x7fff5fbfedf8,0,0x1000c2030,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121381c,0x7fff5fbfecd0,0,0xd9c9ff15a96f5556,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c6980,0x7fff5fbfec70,0,0x67ff926ba1380,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9371,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfee00,0,0x2e9dafd23ac1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd221,0x7fff5fbfeef0,0,0x301,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de074,0x7fff5fbfeea0,0,0x7fff5fbfeeb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100218e45,0x7fff5fbfeff8,0,0x101009400,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100238300,0x7fff5fbfecb0,0,0x0,1 -tick,0x100235eaa,0x7fff5fbfebb0,0,0x0,1 -tick,0x1002358f2,0x7fff5fbfeb30,0,0x0,1 -tick,0x7fff9120d016,0x7fff5fbfec40,0,0xd9c9ff15a96f5556,4,0x1e4e34568b5c,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e345b9320,170,"_pusher" -code-creation,LoadIC,0x1e4e345b9320,170,"_pusher" -code-creation,LoadIC,0x1e4e345b93e0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b93e0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b9480,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b9480,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b9520,134,"pair" -code-creation,LoadIC,0x1e4e345b9520,134,"pair" -code-creation,LoadIC,0x1e4e345b95c0,134,"writable" -code-creation,LoadIC,0x1e4e345b95c0,134,"writable" -code-creation,LoadIC,0x1e4e345b9660,134,"_pending" -code-creation,LoadIC,0x1e4e345b9660,134,"_pending" -code-creation,LoadIC,0x1e4e345b9080,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b9080,134,"_pendingCallbacks" -code-creation,StoreIC,0x1e4e345b9120,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b9120,189,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b0f60,170,"_pusher" -code-creation,LoadIC,0x1e4e345b0f60,170,"_pusher" -code-creation,LoadIC,0x1e4e345b1020,134,"domain" -code-creation,LoadIC,0x1e4e345b1020,134,"domain" -code-creation,CallIC,0x1e4e345b4f80,492,"finish" -code-creation,LoadIC,0x1e4e345b5180,134,"_events" -code-creation,LoadIC,0x1e4e345b5180,134,"_events" -code-creation,LoadIC,0x1e4e345b5220,134,"domain" -code-creation,LoadIC,0x1e4e345b5220,134,"domain" -tick,0x1e4e3457678d,0x7fff5fbff318,0,0x11e9a4f08d09,0,0x1e4e345984df -code-creation,LoadIC,0x1e4e345b52c0,134,"_events" -code-creation,LoadIC,0x1e4e345b52c0,134,"_events" -code-creation,LoadIC,0x1e4e345b5360,134,"domain" -code-creation,LoadIC,0x1e4e345b5360,134,"domain" -code-creation,LoadIC,0x1e4e345b5400,134,"pair" -code-creation,LoadIC,0x1e4e345b5400,134,"pair" -code-creation,LoadIC,0x1e4e345b54a0,134,"writable" -code-creation,LoadIC,0x1e4e345b54a0,134,"writable" -code-creation,LoadIC,0x1e4e345b5540,134,"_pending" -code-creation,LoadIC,0x1e4e345b5540,134,"_pending" -code-creation,LoadIC,0x1e4e345b55e0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b55e0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b5680,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b5680,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b5720,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b5720,189,"_pendingBytes" -tick,0x1000df549,0x7fff5fbfebc0,0,0x1019027e0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e345b57e0,134,"_events" -code-creation,LoadIC,0x1e4e345b57e0,134,"_events" -code-creation,LoadIC,0x1e4e345b10c0,134,"domain" -code-creation,LoadIC,0x1e4e345b10c0,134,"domain" -code-creation,LoadIC,0x1e4e345b1160,134,"writable" -code-creation,LoadIC,0x1e4e345b1160,134,"writable" -code-creation,CallIC,0x1e4e345b0280,200,"write" -code-creation,LoadIC,0x1e4e345b0360,134,"_events" -code-creation,LoadIC,0x1e4e345b0360,134,"_events" -code-creation,CallIC,0x1e4e345b0400,287,"emit" -code-creation,LoadIC,0x1e4e345b0520,284,"" -code-creation,LoadIC,0x1e4e345b0520,284,"" -code-creation,LoadIC,0x1e4e345b0640,134,"_ended" -code-creation,LoadIC,0x1e4e345b0640,134,"_ended" -code-creation,LoadIC,0x1e4e345b06e0,134,"length" -code-creation,LoadIC,0x1e4e345b06e0,134,"length" -code-creation,LoadIC,0x1e4e345ad280,134,"_queue" -code-creation,LoadIC,0x1e4e345ad280,134,"_queue" -code-creation,CallIC,0x1e4e345ad320,217,"_process" -code-creation,CallIC,0x1e4e345ad400,492,"write" -code-creation,LoadIC,0x1e4e345acd00,134,"_needDrain" -code-creation,LoadIC,0x1e4e345acd00,134,"_needDrain" -code-creation,LoadIC,0x1e4e345acda0,284,"" -code-creation,LoadIC,0x1e4e345acda0,284,"" -code-creation,LoadIC,0x1e4e345acec0,138,"_offset" -code-creation,LoadIC,0x1e4e345acec0,138,"_offset" -code-creation,LoadIC,0x1e4e345acf60,138,"_chunkSize" -code-creation,LoadIC,0x1e4e345acf60,138,"_chunkSize" -code-creation,StoreIC,0x1e4e345ad000,185,"_processing" -code-creation,StoreIC,0x1e4e345ad000,185,"_processing" -code-creation,CallIC,0x1e4e345ad0c0,217,"_process" -code-creation,CallIC,0x1e4e3457e400,492,"write" -code-creation,LoadIC,0x1e4e3457e600,138,"_buffer" -code-creation,LoadIC,0x1e4e3457e600,138,"_buffer" -code-creation,LoadIC,0x1e4e3457e6a0,138,"_offset" -code-creation,LoadIC,0x1e4e3457e6a0,138,"_offset" -code-creation,StoreIC,0x1e4e3457e740,189,"_offset" -code-creation,StoreIC,0x1e4e3457e740,189,"_offset" -code-creation,CallIC,0x1e4e3457e800,287,"emit" -code-creation,LoadIC,0x1e4e3457e920,134,"domain" -code-creation,LoadIC,0x1e4e3457e920,134,"domain" -code-creation,LoadIC,0x1e4e3457e9c0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457e9c0,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457ea60,185,"_processing" -code-creation,StoreIC,0x1e4e3457ea60,185,"_processing" -code-creation,LoadIC,0x1e4e3457eb20,138,"_buffer" -code-creation,LoadIC,0x1e4e3457eb20,138,"_buffer" -code-creation,StoreIC,0x1e4e3457ebc0,189,"_offset" -code-creation,StoreIC,0x1e4e3457ebc0,189,"_offset" -code-creation,CallIC,0x1e4e3457d740,287,"emit" -code-creation,LoadIC,0x1e4e3457d860,134,"_events" -code-creation,LoadIC,0x1e4e3457d860,134,"_events" -code-creation,LoadIC,0x1e4e3457d900,134,"domain" -code-creation,LoadIC,0x1e4e3457d900,134,"domain" -code-creation,CallIC,0x1e4e3457d9a0,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3457dac0,185,"_flush" -code-creation,StoreIC,0x1e4e3457dac0,185,"_flush" -code-creation,LoadIC,0x1e4e3457db80,134,"length" -code-creation,LoadIC,0x1e4e3457db80,134,"length" -code-creation,CallIC,0x1e4e3457dc20,257,"emit" -code-creation,LoadIC,0x1e4e3457dd40,134,"_events" -code-creation,LoadIC,0x1e4e3457dd40,134,"_events" -tick,0x100232b9c,0x7fff5fbfece0,0,0x1e4e3455ac62,0,0x1e4e3456bed2,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3457dde0,189,"locked" -code-creation,StoreIC,0x1e4e3457dde0,189,"locked" -code-creation,LoadIC,0x1e4e3457dea0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457dea0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457df40,134,"_ended" -code-creation,LoadIC,0x1e4e3457df40,134,"_ended" -code-creation,LoadIC,0x1e4e3457dfe0,134,"_queue" -code-creation,LoadIC,0x1e4e3457dfe0,134,"_queue" -code-creation,CallIC,0x1e4e3457e080,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e345ac900,185,"_flush" -code-creation,StoreIC,0x1e4e345ac900,185,"_flush" -code-creation,LoadIC,0x1e4e3457c420,254,"" -code-creation,LoadIC,0x1e4e3457c420,254,"" -code-creation,StoreIC,0x1e4e3457c520,390,"_events" -code-creation,StoreIC,0x1e4e3457c520,390,"_events" -code-creation,LoadIC,0x1e4e3457c6c0,254,"" -code-creation,LoadIC,0x1e4e3457c6c0,254,"" -code-creation,LoadIC,0x1e4e3457c7c0,134,"_events" -code-creation,LoadIC,0x1e4e3457c7c0,134,"_events" -code-creation,CallIC,0x1e4e3457c860,257,"emit" -code-creation,LoadIC,0x1e4e3457c980,134,"_events" -code-creation,LoadIC,0x1e4e3457c980,134,"_events" -code-creation,StoreIC,0x1e4e3457ca20,189,"locked" -code-creation,StoreIC,0x1e4e3457ca20,189,"locked" -code-creation,LoadIC,0x1e4e3457cae0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457cae0,138,"lockBuffer" -tick,0x1001203f6,0x7fff5fbfec90,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100274f57,0x7fff5fbfe9b0,0,0x1007fff5fbfea20,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459821c,0x7fff5fbfeee8,0,0x1e4e343a9ccc,0,0x1e4e34394a55,0x1e4e34399727 -code-creation,CallIC,0x1e4e3457cb80,492,"execute" -code-creation,LoadIC,0x1e4e34573be0,254,"" -code-creation,LoadIC,0x1e4e34573be0,254,"" -code-creation,StoreIC,0x1e4e34573ce0,390,"_events" -code-creation,StoreIC,0x1e4e34573ce0,390,"_events" -code-creation,LoadIC,0x1e4e34573e80,254,"" -code-creation,LoadIC,0x1e4e34573e80,254,"" -code-creation,CallIC,0x1e4e34573f80,205,"onIncoming" -code-creation,LoadIC,0x1e4e34574060,284,"" -code-creation,LoadIC,0x1e4e34574060,284,"" -code-creation,StoreIC,0x1e4e34574180,420,"_events" -code-creation,StoreIC,0x1e4e34574180,420,"_events" -code-creation,LoadIC,0x1e4e34574340,284,"" -code-creation,LoadIC,0x1e4e34574340,284,"" -code-creation,CallIC,0x1e4e34574460,257,"emit" -code-creation,LoadIC,0x1e4e34574580,134,"_events" -code-creation,LoadIC,0x1e4e34574580,134,"_events" -code-creation,CallIC,0x1e4e3456e8c0,287,"emit" -code-creation,LoadIC,0x1e4e3456e9e0,134,"_events" -code-creation,LoadIC,0x1e4e3456e9e0,134,"_events" -code-creation,CallIC,0x1e4e3456ea80,287,"emit" -code-creation,LoadIC,0x1e4e3456eba0,134,"_events" -code-creation,LoadIC,0x1e4e3456eba0,134,"_events" -code-creation,LoadIC,0x1e4e3456ec40,134,"domain" -code-creation,LoadIC,0x1e4e3456ec40,134,"domain" -code-creation,LoadIC,0x1e4e3456ece0,134,"_events" -code-creation,LoadIC,0x1e4e3456ece0,134,"_events" -tick,0x7fff9199e6fe,0x7fff5fbfe748,1,0x100013f1a,0,0x1e4e34551c75,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456ed80,134,"domain" -code-creation,LoadIC,0x1e4e3456ed80,134,"domain" -code-creation,CallIC,0x1e4e3456ee20,277,"removeListener" -code-creation,CallIC,0x1e4e3456ef40,247,"removeListener" -code-creation,LoadIC,0x1e4e3456f040,134,"_events" -code-creation,LoadIC,0x1e4e3456f040,134,"_events" -code-creation,LoadIC,0x1e4e3456f0e0,138,"incoming" -code-creation,LoadIC,0x1e4e3456f0e0,138,"incoming" -code-creation,CallIC,0x1e4e3456c100,492,"execute" -code-creation,CallIC,0x1e4e3456c300,205,"onIncoming" -code-creation,LoadIC,0x1e4e3456c3e0,138,"incoming" -code-creation,LoadIC,0x1e4e3456c3e0,138,"incoming" -tick,0x10025460d,0x7fff5fbfe848,0,0x18,3,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456c480,492,"finish" -code-creation,StoreIC,0x1e4e3456c680,189,"_buffer" -code-creation,StoreIC,0x1e4e3456c680,189,"_buffer" -code-creation,LoadIC,0x1e4e3456c740,138,"_binding" -code-creation,LoadIC,0x1e4e3456c740,138,"_binding" -code-creation,LoadIC,0x1e4e3456c7e0,134,"_flush" -code-creation,LoadIC,0x1e4e3456c7e0,134,"_flush" -code-creation,StoreIC,0x1e4e3456c880,189,"callback" -code-creation,StoreIC,0x1e4e3456c880,189,"callback" -code-creation,StoreIC,0x1e4e3456c940,189,"buffer" -code-creation,StoreIC,0x1e4e3456c940,189,"buffer" -tick,0x100253b30,0x7fff5fbfefb0,0,0x0,3 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1001500ac,0x7fff5fbfec40,0,0x7fff5fbfec90,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1002c87b1,0x7fff5fbfeda0,0,0x7fff5fbfedc0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3430807f,0x7fff5fbfed88,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345649d4,0x7fff5fbfe9b8,0,0x10000c2be,0,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024c1c1,0x7fff5fbff2a0,0,0x7fff5fbff2f0,0,0x1e4e34551d37,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x10019bd01,0x7fff5fbfe910,0,0x7fff5fbfe950,0,0x1e4e3455497b,0x1e4e34564c92,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10012eb18,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34331b8a,0x7fff5fbfef28,0,0x1e4e34394a55,0,0x1e4e34399727 -tick,0x1e4e343248ca,0x7fff5fbff3e8,0,0x7fff5fbff470,0 -tick,0x1000393f9,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325862,0x7fff5fbfeb70,0,0x1e4e34551d37,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019f401,0x7fff5fbfeb20,0,0x7fff5fbfeb70,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454deeb,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002510e9,0x7fff5fbfe7b0,0,0x7fff5fbfe818,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456ca00,134,"readable" -code-creation,LoadIC,0x1e4e3456ca00,134,"readable" -code-creation,LoadIC,0x1e4e3456caa0,200,"resume" -code-creation,LoadIC,0x1e4e3456caa0,200,"resume" -code-creation,CallIC,0x1e4e3456cb80,217,"resume" -code-creation,CallIC,0x1e4e3456ac20,247,"removeListener" -tick,0x1e4e34568743,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c1c1,0x7fff5fbfeaf0,0,0x7fff5fbfeba0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10025245b,0x7fff5fbfebe0,0,0xe662300000,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be5e2,0x7fff5fbfeee0,0,0x102023a70,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c347,0x7fff5fbfec40,0,0x58008a84efd62e5c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5c05,0x7fff5fbfedb8,0,0x1000c4aa5,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34332f89,0x7fff5fbfef08,0,0x1e4e34548360,0,0x1e4e34596709,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f933a,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c61da,0x7fff5fbfeda0,0,0x7fff5fbfedc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34548360,0x7fff5fbfeeb8,0,0xe66236f439,0,0x1e4e345977c1,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c1306,0x7fff5fbfef00,0,0x7fff5fbfef50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34306162,0x7fff5fbff1e8,0,0x1e4e343060e1,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e345984df -tick,0x1000f9966,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10024c6d9,0x7fff5fbfec50,0,0x11e9a4d508a1,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002554ac,0x7fff5fbfecc0,0,0x7fff5fbfed10,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x10016d970,0x7fff5fbfea80,0,0x0,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100118f52,0x7fff5fbfebb0,0,0x101902760,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b6825,0x7fff5fbfec88,0,0x1e4e3454e2fc,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34557cb7,0x7fff5fbfeda8,0,0x11e9a4d94c51,0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345580c3,0x7fff5fbfeda8,0,0x1075,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523a6,0x7fff5fbfef98,0,0x11e9a4dc5a79,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430800e,0x7fff5fbff108,0,0x1e4e34591b02,0 -tick,0x10012ef1a,0x7fff5fbff600,0,0x0,3 -tick,0x1e4e345ad55c,0x7fff5fbfee80,0,0x7fff5fbfeee0,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34308008,0x7fff5fbfed88,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452d535,0x7fff5fbfed88,0,0x1e4e3456e144,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345a98e1,0x7fff5fbfec78,0,0x7fff5fbfecc8,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100194320,0x7fff5fbfe7f0,0,0x7fff5fbfe840,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608e7,0x7fff5fbfe860,0,0x23d2583d0000000a,0,0x1e4e3455c3de,0x1e4e34588883,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345982bc,0x7fff5fbfee98,0,0x1e4e343ae6d0,0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010e883,0x7fff5fbff430,0,0x0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458d5d0,0x7fff5fbfebb0,0,0x37ec2edd43f1,0,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002554c5,0x7fff5fbfed70,0,0x1,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfe8c0,0,0x2e9dafd05479,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bcdbc,0x7fff5fbfe980,0,0x7fff5fbfe9a0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf386,0x7fff5fbff4d0,0,0x0,3 -tick,0x1e4e3453cca2,0x7fff5fbfe848,0,0x11e9a4b247a1,0,0x1e4e343e436a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343098d6,0x7fff5fbff150,0,0x1e4e34567976,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254d3f,0x7fff5fbfebb0,0,0x11e9a4b395a1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024aff6,0x7fff5fbfee80,0,0x2e9dafd05169,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262c00,0x7fff5fbfe620,0,0x5,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206bff,0x7fff5fbfedc0,0,0x4a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100259a56,0x7fff5fbfed70,0,0x101816ea0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008d929,0x7fff5fbfee80,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121349a,0x7fff5fbfec60,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34551d56,0x7fff5fbff058,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343080cb,0x7fff5fbff190,0,0x1e4e343f1b37,0,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002608dd,0x7fff5fbfeca0,0,0x263e5f5700000015,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100044d00,0x7fff5fbfec28,0,0x0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3457b494,0x7fff5fbfedc0,0,0x3d279765af1,0,0x1e4e343e8c62,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025677b,0x7fff5fbfeaf0,0,0x100000000,0,0x1e4e34320e97,0x1e4e34571f56,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100120367,0x7fff5fbfeb60,0,0x7fff5fbfeb80,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432586a,0x7fff5fbfeea8,0,0x1e4e3455ac3e,0,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c0051,0x7fff5fbff040,0,0x7fff5fbff060,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432556e,0x7fff5fbff030,0,0x1e4e345881b1,0 -tick,0x10010d22a,0x7fff5fbfeca0,0,0x101815740,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911f2bfc,0x7fff5fbff340,0,0x0,4 -tick,0x1000c3419,0x7fff5fbfe8d0,0,0x7fff5fbfe8f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343210e4,0x7fff5fbfec00,0,0xe662304121,0,0x1e4e3454dadf,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x7fff9120fc2a,0x7fff5fbfe8f8,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001bc8d,0x7fff5fbfe8f0,0,0x101009400,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002755cc,0x7fff5fbfe8a0,0,0x9be4f23001,0,0x1e4e343aac27,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100274921,0x7fff5fbfe280,0,0x7fff5fbfe2c0,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345ad25c,0x7fff5fbff588,0,0x1e4e343e97c5,0,0x1e4e3459e4aa -tick,0x10022d1fe,0x7fff5fbfec80,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x100263257,0x7fff5fbfe930,0,0x11e9a492c4f9,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b2827,0x7fff5fbfe860,0,0xd9c9ff15a96f5556,0,0x1e4e343e435a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345570fe,0x7fff5fbfed98,0,0x102023a88,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daa6a,0x7fff5fbfedd0,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afe0,0x7fff5fbfee00,0,0x2e9dafd23ac1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa47,0x7fff5fbfefc0,0,0x7fff5fbff000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024b180,0x7fff5fbfee08,0,0x37ec2edd4631,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008e829,0x7fff5fbff000,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006f819,0x7fff5fbff010,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c740,0x7fff5fbfecc0,0,0x27bb40000000191,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345973ff,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8cdc,0x7fff5fbff278,0,0x1e4e343f1db9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019d00c,0x7fff5fbfed78,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c25d,0x7fff5fbff570,0,0x0,4 -tick,0x7fff9120fd56,0x7fff5fbfeae0,0,0x10099f800,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10011b7d9,0x7fff5fbfec80,0,0x1019013f0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001791c4,0x7fff5fbfea90,0,0x0,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34307125,0x7fff5fbfee28,0,0x1e4e3439867a,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10000c002,0x7fff5fbfea40,0,0x101009400,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b6825,0x7fff5fbfec88,0,0x1e4e3454e2fc,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332fa7,0x7fff5fbfed80,0,0x1e4e3454d0f5,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343b6728,0x7fff5fbfeba0,0,0xe662335941,0,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100007ffb,0x7fff5fbfe5c0,0,0x7fff5fbfe600,0,0x1e4e34560bb7,0x1e4e343e426d,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10033f4b1,0x7fff5fbfe4e0,0,0x7fff5fbfe510,0,0x1e4e343360fa,0x1e4e34320c78,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024f041,0x7fff5fbfebc0,0,0x7fff5fbfec00,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001500af,0x7fff5fbfeb70,0,0x7fff5fbfebd0,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120035,0x7fff5fbfeb80,0,0x10302f3d3,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343269a0,0x7fff5fbff018,0,0x1e4e3455ab16,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf334,0x7fff5fbfed90,0,0xd0700000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608b5,0x7fff5fbfe7f0,0,0xd17482d0000000a,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001847a1,0x7fff5fbfe7d0,0,0x7fff5fbfea10,0,0x1e4e343a9133,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019ed21,0x7fff5fbfeaf0,0,0x7fff5fbfeb40,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34552965,0x7fff5fbfeb78,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b10e,0x7fff5fbfec10,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343262ef,0x7fff5fbfeca8,0,0x1e4e345809c0,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3c7,0x7fff5fbfeae0,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34329552,0x7fff5fbff0d0,0,0x1e4e343b699a,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458751a,0x7fff5fbfee70,0,0x11e9a4786b01,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c2c8,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afcf,0x7fff5fbfee50,0,0x2e9dafd0e901,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa53,0x7fff5fbfeda0,0,0x7fff5fbfedc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345600f9,0x7fff5fbff120,0,0x37ec2ed118d1,0,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c13cd,0x7fff5fbfefb0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002cd1a,0x7fff5fbff018,0,0xa00000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911db6a0,0x7fff5fbfefa8,0,0x10011d4a6,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000fde57,0x7fff5fbfed58,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c82dc,0x7fff5fbfedb8,0,0x1000bd17c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x1e4e3430aa80,0x7fff5fbfedb0,0,0x1e4e3459db90,0,0x1e4e343e8c98,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345570f8,0x7fff5fbfed98,0,0x102023a88,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012ef36,0x7fff5fbfec00,0,0x7fff5fbfec90,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d0d0,0x7fff5fbfecb8,0,0x0,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cce9,0x7fff5fbfec20,0,0x10305e5bf,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10015012c,0x7fff5fbfe8c0,0,0x7fff5fbfe8e0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af6d,0x7fff5fbfed80,0,0x12fcd0905831,0,0x1e4e34551d37,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100218e51,0x7fff5fbfe970,0,0x1,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfe6b0,0,0x14,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309e80,0x7fff5fbfed88,0,0x1e4e343f1d72,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343262c9,0x7fff5fbfeca8,0,0x1e4e345809c0,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523a0,0x7fff5fbfe9c8,0,0x1002490de,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c38b,0x7fff5fbff570,0,0x0,4 -tick,0x100275a7f,0x7fff5fbfe848,0,0x100121b3b,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343150a3,0x7fff5fbfecb0,0,0x37ec2edffa21,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455506e,0x7fff5fbfec30,0,0x1e4e3454da72,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002523e1,0x7fff5fbfed50,0,0x2e9dafd13ad1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1e4e34564a73,0x7fff5fbfe9b0,0,0xe662335941,0,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff90f806f5,0x7fff5fbfef48,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009ff32,0x7fff5fbfee50,0,0x115,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213178,0x7fff5fbfed28,0,0x7fff91213b38,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c4956,0x7fff5fbfee60,0,0x1000c5e5f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10022d1fe,0x7fff5fbfefa0,0,0x7fff5fbfefd0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262c04,0x7fff5fbfe640,0,0x3d2797e3d01,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253ae1,0x7fff5fbfee70,0,0x7fff5fbfeea0,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001847a7,0x7fff5fbfefc0,0,0x101009401,0,0x1e4e343f2016,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3431820d,0x7fff5fbff220,0,0xe662304121,0,0x1e4e34576997,0x1e4e345984df -tick,0x1000f979a,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100232b63,0x7fff5fbfecf0,0,0x7fff5fbfece0,0,0x1e4e3456dbd3,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100201b01,0x7fff5fbfee30,0,0x7fff5fbfee50,0,0x1e4e34570fec,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345b1088,0x7fff5fbfeb70,0,0x1e4e345529b6,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456d94a,0x7fff5fbfedd0,0,0x5,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100019010,0x7fff5fbff2d0,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100044155,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10024c240,0x7fff5fbfedd0,0,0x2e9dafd05169,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1e4e34595a7a,0x7fff5fbfed58,0,0x1e4e345631bd,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34591c76,0x7fff5fbff120,0,0x11e900000000,0 -tick,0x100277b4d,0x7fff5fbfea70,0,0x2e9dafd05949,0,0x1e4e343599a4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8236,0x7fff5fbfead8,0,0x3d2797682b9,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d0d0,0x7fff5fbfec80,0,0xe662304121,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452a45a,0x7fff5fbfee38,0,0xe662304121,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343a67e5,0x7fff5fbfe968,0,0x1e4e34555ca8,0,0x1e4e34564a8c,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100315091,0x7fff5fbfe980,0,0x7fff5fbfe9b0,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10016613d,0x7fff5fbff4a0,0,0x7fff5fbff4e0,0,0x1e4e3459e580 -tick,0x10000b0db,0x7fff5fbfeb80,1,0x10000af1c,4,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10017117c,0x7fff5fbff0e0,0,0x0,0 -tick,0x1e4e3457eda0,0x7fff5fbfec60,0,0x1e4e34567081,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be8ff,0x7fff5fbff3e0,0,0x7fff5fbff410,0,0x1e4e34551d37,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x1e4e3459c102,0x7fff5fbff210,0,0x1e4e34594a9e,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121478b,0x7fff5fbfed20,0,0x5fbfed50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd050,0x7fff5fbfeeb0,0,0x7fff5fbfef50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120ff63,0x7fff5fbfece8,0,0x3,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002d8c9,0x7fff5fbff040,0,0xa00000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c7d0b,0x7fff5fbfed48,0,0x1000c80da,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024af85,0x7fff5fbfebf0,0,0x2e9dafd05169,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x7fff9199effa,0x7fff5fbff408,0,0x0,4 -tick,0x100120415,0x7fff5fbfec90,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34552424,0x7fff5fbfeda8,0,0x1a2f,0,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100176007,0x7fff5fbfec78,0,0x0,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100179171,0x7fff5fbfeb40,0,0x7fff5fbfeb70,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e343f200e,0x7fff5fbfedb0,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3d6,0x7fff5fbfeba0,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daaf5,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011c09f,0x7fff5fbff320,0,0xd9c9ff15a96f5556,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34321bb3,0x7fff5fbfebb8,0,0x0,0,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026a044,0x7fff5fbff270,0,0x10283dc88,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f2be6,0x7fff5fbfec10,0,0x7fff5fbfec30,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34394ae0,0x7fff5fbfef50,0,0x11e9a42beb41,0,0x1e4e34399727 -tick,0x1e4e345accf0,0x7fff5fbfee20,0,0x1e4e3439896f,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100018526,0x7fff5fbfecc0,0,0x101009400,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001446f0,0x7fff5fbfede0,0,0x1e4e343098ce,0,0x1e4e3456bed2,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34354822,0x7fff5fbfec40,0,0x1e4e3454d19f,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432e3db,0x7fff5fbfee28,0,0x1e4e343985b3,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100019010,0x7fff5fbff2d0,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100044b05,0x7fff5fbff838,0,0x0,4 -tick,0x10026b47a,0x7fff5fbfea00,0,0x7fff5fbfeaa0,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430b5e5,0x7fff5fbff530,0,0x1e4e343b6098,0,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454e2bf,0x7fff5fbfefe8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912083bc,0x7fff5fbfee00,0,0x7fff5fbfee50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566f49,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000630f3,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006f819,0x7fff5fbff010,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34551561,0x7fff5fbff110,0,0x7fff5fbff140,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1d72,0x7fff5fbff280,0,0xe662335941,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfed78,0,0x7fff911f418d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011d351,0x7fff5fbfeff0,0,0x7fff5fbff030,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbff028,0,0x10011a209,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8248,0x7fff5fbff160,0,0x1e4e34566eed,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f98a9,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100279981,0x7fff5fbfe9f0,0,0x7fff5fbfea20,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911edebb,0x7fff5fbfece0,0,0x7fff5fbfed60,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100253b30,0x7fff5fbfec00,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100201cbf,0x7fff5fbfee70,0,0x11e9a40b7d61,0,0x1e4e343a9cb0,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d1f1,0x7fff5fbfeca0,0,0x7fff5fbfecd0,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027b4f1,0x7fff5fbfe9e0,0,0x7fff5fbfea10,0,0x1e4e345ae6cd,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435cce2,0x7fff5fbfeb48,0,0x1e4e343e7804,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343ad797,0x7fff5fbfee70,0,0x37ec2ed9ce39,0,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a9de0,0x7fff5fbfe7e8,0,0x0,1 -tick,0x1001a959a,0x7fff5fbfe7f0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe7f0,0,0x0,1 -tick,0x1001a9b43,0x7fff5fbfe7a0,0,0x0,1 -tick,0x1001a8101,0x7fff5fbfec10,0,0x7fff5fbfec40,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1002491ca,0x7fff5fbfeed0,0,0x0,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f2cdd,0x7fff5fbfea60,0,0x2e9dafd056a9,0,0x1e4e34579b39,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100175dc5,0x7fff5fbfec50,0,0x101009400,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100232b9c,0x7fff5fbfecf0,0,0x11e9a5d6dc01,0,0x1e4e3456dbd3,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343a67e5,0x7fff5fbfe9c0,0,0x1e4e34555ca8,0,0x1e4e34564a8c,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001709b3,0x7fff5fbfea30,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100194385,0x7fff5fbfe980,0,0x7fff5fbfe9a0,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b0d59,0x7fff5fbfec10,0,0x100000000,0,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10004d0bb,0x7fff5fbff330,0,0x0,4 -tick,0x1002608ef,0x7fff5fbfed30,0,0x122a8dcc00000010,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b6fd0,0x7fff5fbfed38,0,0x37ec2ed0ddb1,0,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343e78c2,0x7fff5fbfeb48,0,0x11e9a5c325e1,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002018df,0x7fff5fbfeed0,0,0x102023b08,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343f1e7e,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100117b71,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262c0a,0x7fff5fbfe620,0,0x5,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206bee,0x7fff5fbfedc0,0,0x5a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c427,0x7fff5fbfeca0,0,0x2c992d0c8358a999,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10018e565,0x7fff5fbfed90,0,0x1003edf26,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34306141,0x7fff5fbff270,0,0x7fff5fbff2b8,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34332fd9,0x7fff5fbfefd0,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b67,0x7fff5fbff330,0,0x0,3 -tick,0x7fff9120c409,0x7fff5fbfec60,0,0x2a461000000015b,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3456724e,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343f19e1,0x7fff5fbfedd8,0,0x7fff5fbfee10,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002607e1,0x7fff5fbfe8c0,0,0x263e5f5700000000,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daa53,0x7fff5fbfe890,0,0x7fff5fbfe8c0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10005b8af,0x7fff5fbfe9f0,0,0x4,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432554b,0x7fff5fbfeda0,0,0x1e4e343f1a60,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343262c9,0x7fff5fbfef88,0,0x1e4e343993be,0 -tick,0x1e4e345b8cdc,0x7fff5fbfe620,0,0x1e4e34560b9b,0,0x1e4e343e426d,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458d53b,0x7fff5fbfebb0,0,0x37ec2edd43f1,0,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100315091,0x7fff5fbff410,0,0x7fff5fbff440,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100260845,0x7fff5fbfebf0,0,0x3572042d00000004,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019bd30,0x7fff5fbfecf0,0,0x1002c3a80,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026081c,0x7fff5fbfe860,0,0x23d2583d0000000a,0,0x1e4e3455c3de,0x1e4e34588883,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456e004,0x7fff5fbfedd0,0,0x5,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10000b43b,0x7fff5fbfe908,0,0x100000000,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253c1d,0x7fff5fbfef40,0,0x101009410,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001500af,0x7fff5fbfed30,0,0x7fff5fbfed90,0,0x1e4e3456dbd3,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100187901,0x7fff5fbfe900,0,0x6a00,0,0x1e4e34322a3d,0x1e4e3431f675,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10002ff06,0x7fff5fbfebd8,0,0x10002d99c,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbfed18,0,0x7fff911f2dfd,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3431004a,0x7fff5fbfef18,0,0x1e4e3456d6ec,0,0x1e4e34399744 -tick,0x1e4e3457400a,0x7fff5fbff100,0,0x1e4e345921fe,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b74,0x7fff5fbfede0,0,0x101009410,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c82f8,0x7fff5fbfee00,0,0x101816010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008e829,0x7fff5fbff000,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3459bf49,0x7fff5fbff210,0,0x1e4e345949e5,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002774ea,0x7fff5fbfe5f8,0,0x11e9a5a9ef71,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343181d5,0x7fff5fbfedb0,0,0x0,0,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432554b,0x7fff5fbff288,0,0x1e4e343f1da3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f91e3,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912084d9,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34551d51,0x7fff5fbff498,0,0xe6623608b1,0,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x1000df323,0x7fff5fbfec98,0,0xb8c5627912deda0c,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3454e147,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000de61d,0x7fff5fbfe7a8,0,0x42d29cccdd4721fb,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120351,0x7fff5fbfea10,0,0x7fff5fbfea30,0,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345756bf,0x7fff5fbfedf8,0,0x0,0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf287,0x7fff5fbfed60,0,0x1e4e34599bac,0,0x1e4e3455a80b,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343098d2,0x7fff5fbfee48,0,0x100000000,0,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345b8f7c,0x7fff5fbfedf0,0,0x1e4e343e8c98,0,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001481d,0x7fff5fbff350,0,0x9,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011ba00,0x7fff5fbff318,0,0x1000147b8,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000b195,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002be681,0x7fff5fbfec00,0,0x102023a88,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10010ca31,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cf31,0x7fff5fbfed20,0,0x7fff5fbfed48,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455e7c5,0x7fff5fbfef30,0,0x3d2797ecca1,0,0x1e4e343949fb,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9120c05a,0x7fff5fbfe9d0,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cd53,0x7fff5fbff268,0,0x4,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34327dbe,0x7fff5fbfebe0,0,0x0,0,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b7f,0x7fff5fbfe8e0,0,0x101009410,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbcf4,0x7fff5fbfea08,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120351,0x7fff5fbfe900,0,0x7fff5fbfe920,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012f03e,0x7fff5fbfedb0,0,0x7fff5fbfee40,0,0x1e4e3455ab16,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10006f944,0x7fff5fbfeaa8,0,0x10005b947,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af77,0x7fff5fbfec20,0,0x2e9dafd1f804,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff90f806fc,0x7fff5fbfef48,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df085,0x7fff5fbfec88,0,0x956e1f9955968387,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f92ce,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8cc5,0x7fff5fbff278,0,0x1e4e343f1db9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120619e,0x7fff5fbfed80,0,0x1009ca000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911d9d04,0x7fff5fbfebd0,0,0x7fff5fbfec90,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100248ff8,0x7fff5fbfee70,0,0x7fff5fbfef2c,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100128153,0x7fff5fbfede0,0,0x4056800000000000,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1e7e,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100150091,0x7fff5fbfee20,0,0x7fff5fbfee70,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9862,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100279be0,0x7fff5fbfe808,0,0x10027558d,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34559fc1,0x7fff5fbfee50,0,0x7fff5fbfee98,0,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100254ebe,0x7fff5fbfe660,0,0xe662367291,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343151e4,0x7fff5fbfed88,0,0x11e9a5720a99,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8100,0x7fff5fbfeb28,0,0x10019b1b0,0,0x1e4e3455218e,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458c700,0x7fff5fbfec60,0,0xe662335941,0,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34320f8e,0x7fff5fbfed80,0,0x1e4e3454dadf,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x7fff911dbd12,0x7fff5fbfea28,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a71b,0x7fff5fbfee40,0,0x11e9a57c7fd1,0,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002490de,0x7fff5fbfeb50,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34325595,0x7fff5fbfeb40,0,0x1e4e3453c902,0,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10015de00,0x7fff5fbfea90,0,0x1,0,0x1e4e34584ed9,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34325579,0x7fff5fbfee30,0,0x1e4e343986dc,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002095fe,0x7fff5fbfebc0,0,0x102023aa0,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100117b71,0x7fff5fbff1c0,0,0x0,4 -tick,0x10011a2a6,0x7fff5fbfeb08,0,0x10100a770,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010e871,0x7fff5fbff440,0,0x7fff5fbff4b0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34579be5,0x7fff5fbfeb30,0,0x102023b48,0,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343e77f4,0x7fff5fbfeb48,0,0xaabee82b9e1,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345679f6,0x7fff5fbff150,0,0x2dffe700000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d3ef,0x7fff5fbfefe0,0,0x8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002ff06,0x7fff5fbff058,0,0x10002d623,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325574,0x7fff5fbff288,0,0x1e4e343f1eb3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1a9a,0x7fff5fbff288,0,0x37ec2ed197b1,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa53,0x7fff5fbfedd0,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5bb9,0x7fff5fbfee90,0,0x10060d3b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345677b4,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fcff,0x7fff5fbfec80,0,0x7fff5fbfecb0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be623,0x7fff5fbfee00,0,0x102023a90,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3455e8b8,0x7fff5fbfef20,0,0x11e9a55300f9,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x1002bf447,0x7fff5fbfed20,0,0x7fff5fbfed60,0,0x1e4e3455a80b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a0819,0x7fff5fbfeb20,0,0x0,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100191440,0x7fff5fbff260,0,0x0,3 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91206bee,0x7fff5fbfe8e0,0,0x5a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100275601,0x7fff5fbfe8a0,0,0x9be4f23001,0,0x1e4e343aac27,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100175d71,0x7fff5fbff290,0,0x7fff5fbff2d0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10022d1f1,0x7fff5fbfeca0,0,0x7fff5fbfecd0,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100257005,0x7fff5fbfe610,0,0xe66233fad1,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34327aa8,0x7fff5fbfec08,0,0x1e4e345603e5,0,0x1e4e345a995d,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026095d,0x7fff5fbfe970,0,0x7fff5fbfea10,0,0x1e4e3455c3de,0x1e4e34588883,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9127cc08,0x7fff5fbfe8f8,0,0x7fff911f418d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10008da10,0x7fff5fbfeae0,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a95cc,0x7fff5fbfead0,0,0x11e9a5471309,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000395dc,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbbe3,0x7fff5fbff840,0,0x0,4 -tick,0x1002bf1ee,0x7fff5fbfee40,0,0x1e4e34394688,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x100260962,0x7fff5fbfec90,0,0x0,0,0x1e4e3455eb2b,0x1e4e343949fb,0x1e4e34399727 -tick,0x1e4e3456d719,0x7fff5fbfed90,0,0x5,0,0x1e4e34398b06,0x1e4e345761cf,0x1e4e34583f95,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10000c04b,0x7fff5fbfe9c0,0,0x101009400,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024afc2,0x7fff5fbfebf0,0,0x2e9dafd0b369,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912134cd,0x7fff5fbfec30,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10000b194,0x7fff5fbff038,0,0x10002d804,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfeeb8,0,0x7fff911f418d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120851e,0x7fff5fbfee00,0,0x7fff5fbfee50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34594b93,0x7fff5fbff218,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de8fb,0x7fff5fbfec88,0,0x41b26c6667a8f6ae,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100048540,0x7fff5fbfecd0,0,0x0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430da29,0x7fff5fbff278,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432e4d7,0x7fff5fbff560,0,0x1e4e343b64c9,0,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x1000bd18e,0x7fff5fbfebd0,0,0x4,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002608f3,0x7fff5fbfed20,0,0x263e5f570000000a,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10027624f,0x7fff5fbfe5e0,0,0x11e9a5370e98,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432556e,0x7fff5fbfec80,0,0x1e4e34566fc0,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b5969,0x7fff5fbfebb0,0,0x1e4e3435a1a0,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253c0d,0x7fff5fbfeac0,0,0x101009410,0,0x1e4e34551d37,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002510ae,0x7fff5fbfe7a0,0,0x7fff5fbfe7f0,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8cc5,0x7fff5fbfeda8,0,0x1e4e3457b4d7,0,0x1e4e343e8c62,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253fd4,0x7fff5fbfea50,0,0x37ec2edffc89,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfebf0,0,0x224a48af00000005,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459a52c,0x7fff5fbfed50,0,0x9be4f26761,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608cc,0x7fff5fbfef00,0,0x262ae5220000000a,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026088b,0x7fff5fbff210,0,0xe6373030000000a,0,0x1e4e34551d37,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x100179b56,0x7fff5fbfeab0,0,0x1e4e343060e1,0,0x1e4e345ae826,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002ff8cd,0x7fff5fbff000,0,0x1002ff7d0,0 -tick,0x1e4e345580c3,0x7fff5fbfeda8,0,0x10f7,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfead8,0,0x10011c15d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34575420,0x7fff5fbfecc8,0,0xe66236f969,0,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010e871,0x7fff5fbfea30,0,0x7fff5fbfeaa0,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100219ab1,0x7fff5fbff1c0,0,0x0,4 -tick,0x7fff911f2c26,0x7fff5fbff340,0,0x0,4 -tick,0x1e4e34594fbc,0x7fff5fbff588,0,0x1e4e343e9778,0,0x1e4e3459e4aa -tick,0x1e4e3459cb85,0x7fff5fbfec68,0,0x1e4e3431f675,0,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343100b5,0x7fff5fbfee60,0,0x1e4e345872a1,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3ba,0x7fff5fbfeba0,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027a97b,0x7fff5fbfef30,0,0x11e9a51441b9,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf398,0x7fff5fbfecc0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fccb,0x7fff5fbfefc0,0,0x7fff5fbfefe0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100118d4a,0x7fff5fbfed90,0,0x102023a80,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10001a970,0x7fff5fbfee10,0,0xe662304121,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10015009b,0x7fff5fbff0f0,0,0x7fff5fbff150,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011b820,0x7fff5fbfed60,0,0x7fff5fbfed80,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34597667,0x7fff5fbfeef8,0,0x37ec2eddef79,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454dee2,0x7fff5fbfefd8,0,0x4a00000000,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f407d,0x7fff5fbfede0,0,0x1019026b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd28b,0x7fff5fbfed20,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x1e4e343e8d53,0x7fff5fbfed70,0,0x7fff5fbfeda0,0,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100315091,0x7fff5fbfeb90,0,0x7fff5fbfebc0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911ee21c,0x7fff5fbfead0,0,0x4d555458,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd0c,0x7fff5fbfea88,0,0x100145af2,0,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34571c39,0x7fff5fbfebc8,0,0x0,0,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325720,0x7fff5fbfeb70,0,0x1e4e34551d37,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34566f97,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315222,0x7fff5fbff2d8,0,0x11e9a5017c99,0,0x1e4e34576997,0x1e4e345984df -tick,0x1e4e34551c90,0x7fff5fbfee60,0,0x11e9a5033fa9,0,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343b6736,0x7fff5fbfeba0,0,0xe662335941,0,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002510cf,0x7fff5fbfe880,0,0x7fff5fbfe8d0,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100252460,0x7fff5fbfeaf0,0,0x0,0,0x1e4e34551d37,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34336065,0x7fff5fbfebb0,0,0x1e4e34571c20,0,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b195,0x7fff5fbfeca0,0,0x7fff5fbfed00,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254e8b,0x7fff5fbfe960,0,0x0,0,0x1e4e343aac27,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b741b,0x7fff5fbfed38,0,0x37ec2ed0ddb1,0,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100249292,0x7fff5fbfeb00,0,0x7fff5fbfeb40,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002491a1,0x7fff5fbff1c0,0,0x0,3 -tick,0x1e4e34309889,0x7fff5fbfee20,0,0x1e4e3452a4e7,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001aa760,0x7fff5fbfe7b0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe820,0,0x0,1 -tick,0x1001a959a,0x7fff5fbfe820,0,0x0,1 -tick,0x1001a8a7e,0x7fff5fbfe820,0,0x0,1 -tick,0x1001a99c6,0x7fff5fbfe7a0,0,0x0,1 -tick,0x1001aa430,0x7fff5fbfe7a0,0,0x0,1 -tick,0x1e4e343100b5,0x7fff5fbfeb38,0,0x1e4e3453cc5c,0,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34576080,0x7fff5fbfeea8,0,0x1e4e34583f95,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343aa4f4,0x7fff5fbfeef0,0,0xe662304121,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170963,0x7fff5fbfe950,0,0x9,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c1521,0x7fff5fbfec60,0,0x7fff5fbfec80,0,0x1e4e3454d16d,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c17f,0x7fff5fbfebb0,0,0x101009400,0,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ed5e,0x7fff5fbfe850,0,0x1101a4d14980,0,0x1e4e3455a80b,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cd61,0x7fff5fbff260,0,0x10305e19d,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff90f80703,0x7fff5fbfef48,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002510e6,0x7fff5fbfebd0,0,0x101009400,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fd39,0x7fff5fbfecc0,0,0x10099f800,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34327a7a,0x7fff5fbff138,0,0x1e4e34567081,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100148951,0x7fff5fbff0f0,0,0x7fff5fbff150,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120364,0x7fff5fbff030,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019fcda,0x7fff5fbfed00,0,0x10099f804,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c390,0x7fff5fbfeca0,0,0xf4c3d43c1ec645d8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008dccd,0x7fff5fbff0b0,0,0x7fff5fbff0f0,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345787d0,0x7fff5fbff2d8,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e345984df -tick,0x10014597f,0x7fff5fbfed00,0,0x101009400,0,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e34567f44,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3435cd14,0x7fff5fbfeb48,0,0x1e4e343e788e,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000a02aa,0x7fff5fbfe970,0,0x7fff5fbfe9a0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f2746,0x7fff5fbff2c0,0,0x0,4 -tick,0x1002012b3,0x7fff5fbfec50,0,0x7fff5fbfecb0,0,0x1e4e3453d1f0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10005100b,0x7fff5fbfe820,0,0xaabee816aa1,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d1fe,0x7fff5fbfede0,0,0x7fff5fbfee00,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100120351,0x7fff5fbfede0,0,0x7fff5fbfee00,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10002d457,0x7fff5fbfeff0,0,0x7fff5fbff030,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1e4e345950e0,0x7fff5fbff5a0,0,0x1e4e343e9792,0,0x1e4e3459e4aa -tick,0x10019fb51,0x7fff5fbfea20,0,0x2e9dafd056a9,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34552947,0x7fff5fbfe730,0,0x0,0,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019320f,0x7fff5fbfeb30,0,0x7fff5fbfebe7,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001221b5,0x7fff5fbfe7d0,0,0x79,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ae2c7,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a2421,0x7fff5fbfea10,0,0x7fff5fbfea30,0,0x1e4e34570fec,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000396da,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432e48e,0x7fff5fbff560,0,0x1e4e343b64c9,0,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x7fff911da168,0x7fff5fbfeb78,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c1c8,0x7fff5fbfebd0,0,0x11e9a4ce0471,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253afb,0x7fff5fbfe790,0,0x101009410,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b8009,0x7fff5fbfe9c0,0,0x1e4e345769b4,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100262c04,0x7fff5fbfe140,0,0x5,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100262ced,0x7fff5fbfe160,0,0x1,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100198a41,0x7fff5fbfe9b0,0,0x7fff5fbfea00,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024ed49,0x7fff5fbfedc0,0,0x11e9a4b6a8a8,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3b6,0x7fff5fbfefc8,0,0x10100a770,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c0a3,0x7fff5fbfefa0,0,0x102023a68,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457f78d,0x7fff5fbff020,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c49d0,0x7fff5fbfee60,0,0x1000c5e5f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9f6b,0x7fff5fbfeec0,0,0x202,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912136fc,0x7fff5fbfebd0,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024af85,0x7fff5fbfee00,0,0x2e9dafd23ac1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34598e9c,0x7fff5fbff280,0,0x1e4e343f1f26,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343151cd,0x7fff5fbff0c8,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff90f81015,0x7fff5fbff1d8,0,0x1002cd8f4,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e345984df -tick,0x1000c5c0a,0x7fff5fbfec88,0,0x101901670,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3458372f,0x7fff5fbfeec0,0,0x7fff5fbfef20,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100249499,0x7fff5fbfebc0,0,0x101009410,0,0x1e4e34551d37,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d7ee,0x7fff5fbfed98,0,0x7fff5fbfedf0,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34320d6e,0x7fff5fbfebb0,0,0x1e4e34571f56,0,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d0f5,0x7fff5fbfeb68,0,0x1020259f0,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431b53f,0x7fff5fbfed70,0,0xaabee8169e1,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345580c3,0x7fff5fbfeda8,0,0x1e9a,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456dc0f,0x7fff5fbfef28,0,0xe6623608b1,0,0x1e4e34399744 -tick,0x10019ed75,0x7fff5fbfec20,0,0x0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff911f2e4f,0x7fff5fbff380,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9121376e,0x7fff5fbff360,0,0x7fff5fbff390,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011b927,0x7fff5fbff300,0,0x101009400,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10026083c,0x7fff5fbfe6b0,0,0x14,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175dc5,0x7fff5fbfea70,0,0x11e9a4aead79,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a78b1,0x7fff5fbfebf0,0,0x101014e00,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x1e4e3435aa20,0x7fff5fbfef88,0,0x1e4e34399308,0 -tick,0x10012ef10,0x7fff5fbfe5f8,0,0x100254e3f,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daa74,0x7fff5fbff490,0,0x7fff5fbff4e0,0,0x1e4e3459e580 -tick,0x1e4e34573920,0x7fff5fbfeb70,0,0x37ec2edde8e9,0,0x1e4e345a08d4,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343100b5,0x7fff5fbfebf8,0,0x1e4e34570ef6,0,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345553c1,0x7fff5fbfec60,0,0x7fff5fbfed20,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daa29,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10006f6d7,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a81e4,0x7fff5fbfef80,0,0x1003d3d62,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de310,0x7fff5fbfec88,0,0x300000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100275688,0x7fff5fbfecf0,0,0x11e9a49b4751,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345688e0,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002522c1,0x7fff5fbfec90,0,0x10201a2a0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd149,0x7fff5fbfed60,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457860c,0x7fff5fbff2d8,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e345984df -tick,0x1000df066,0x7fff5fbfeb08,0,0x5fb1818e66206676,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e343fd785,0x7fff5fbfedd0,0,0x1e4e3455a43d,0,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10027a978,0x7fff5fbfea40,0,0x11e9a49ff479,0,0x1e4e343e78d4,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100252472,0x7fff5fbfeaf0,0,0x0,0,0x1e4e34551d37,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100274ab9,0x7fff5fbfe5c0,0,0x101009400,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100249398,0x7fff5fbff110,0,0x0,3 -tick,0x10011b91c,0x7fff5fbfe8d0,0,0x79,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912137ff,0x7fff5fbfeb30,0,0x7fff5fbfeb80,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34311250,0x7fff5fbff468,0,0x0,0 -tick,0x1001712cd,0x7fff5fbff270,0,0x1010096d0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100121b2c,0x7fff5fbfe850,0,0xa,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f2be5,0x7fff5fbff388,0,0x0,4 -tick,0x1e4e3456dec6,0x7fff5fbfef28,0,0xe662304101,0,0x1e4e34399744 -tick,0x100253c1d,0x7fff5fbfe8c0,0,0x101009410,0,0x1e4e3455a80b,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456b860,0x7fff5fbfeea0,0,0xe662335941,0,0x1e4e343aa7b8,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100315091,0x7fff5fbfec80,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911f317a,0x7fff5fbff350,0,0x0,4 -tick,0x1001ff1b6,0x7fff5fbfea70,0,0x7fff5fbfeaa0,0,0x1e4e343aac27,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3431f52e,0x7fff5fbfec80,0,0xe66234f009,0,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b5c81,0x7fff5fbfec38,0,0x7fff5fbfec88,0,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455215a,0x7fff5fbff498,0,0xe6623608b1,0,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x10012eb18,0x7fff5fbfeb80,0,0x7fff5fbfebe0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34555cfb,0x7fff5fbfe980,0,0xaabee804139,0,0x1e4e34564a8c,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbf9d,0x7fff5fbfec38,0,0x7fff91213830,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912137bd,0x7fff5fbfed00,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9264,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100255384,0x7fff5fbfec80,0,0x1020259f0,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdd1,0x7fff5fbfec98,0,0x7fff9120c836,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34548321,0x7fff5fbfef40,0,0x7fff5fbfefb8,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206bee,0x7fff5fbfee10,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfedb8,0,0x10011f52d,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34552059,0x7fff5fbff498,0,0xe6623608b1,0,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x1000bd0c7,0x7fff5fbfebf0,0,0xd9c9ff15a96f5556,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345800cb,0x7fff5fbfec68,0,0x11e9a4617da1,0,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456f322,0x7fff5fbfecc0,0,0x3d2797f6031,0,0x1e4e3459f1d2,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87ce,0x7fff5fbfec00,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100169eea,0x7fff5fbfec30,0,0x11e9a4641b39,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3d6,0x7fff5fbfecf0,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e345a0060,0x7fff5fbfee98,0,0x1e4e343af6da,0,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a78e0,0x7fff5fbfef40,0,0x1e4e343949d6,0,0x1e4e34399727 -tick,0x1e4e34332f05,0x7fff5fbfeca0,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff8ddd324e,0x7fff5fbff668,0,0x0,4 -tick,0x1002608e1,0x7fff5fbfedf0,0,0xd17482d00000022,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100279814,0x7fff5fbfe670,0,0x3587,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34556d40,0x7fff5fbfedc8,0,0x1e4e34553563,0,0x1e4e3452a47a,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912083fd,0x7fff5fbff300,0,0x0,4 -tick,0x10011fc42,0x7fff5fbfeb50,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cfbc,0x7fff5fbfec00,0,0x6c,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100261ac7,0x7fff5fbfeb00,0,0x7fff5fbfeb30,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e1e2,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012116c,0x7fff5fbff510,0,0x0,4 -tick,0x1002be6b9,0x7fff5fbfec70,0,0x102023b08,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455b961,0x7fff5fbff090,0,0x7fff5fbff0c0,0,0x1e4e343b6a14,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff90f80734,0x7fff5fbfecf8,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253ae6,0x7fff5fbfebe8,0,0x37ec2eddee79,0,0x1e4e3455a80b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100150101,0x7fff5fbfe8c0,0,0x7fff5fbfe8e0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a99,0x7fff5fbfe920,0,0x7fff5fbfe980,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b4c4c,0x7fff5fbfef78,0,0x37ec2ed0ddb1,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430da2d,0x7fff5fbff278,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd337,0x7fff5fbfee40,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002607f2,0x7fff5fbfee00,0,0x263e5f5700000003,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10022d1fe,0x7fff5fbfed90,0,0x7fff5fbfedc0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd0e,0x7fff5fbfed98,0,0x1001267ae,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343180c1,0x7fff5fbfeef8,0,0x37ec2eddef79,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325548,0x7fff5fbff050,0,0x1e4e345529b6,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dadb0,0x7fff5fbfee90,0,0x7fff5fbfeeb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91208531,0x7fff5fbfee80,0,0x7fff5fbfeed0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345803b1,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345527fe,0x7fff5fbff058,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f98d2,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100253b99,0x7fff5fbff0b0,0,0x0,3 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002be56c,0x7fff5fbfea00,0,0x102023a90,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91210815,0x7fff5fbfe810,0,0x7fff5fbfe8c0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912132be,0x7fff5fbfe7e0,0,0xffffffffffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175dbb,0x7fff5fbfea90,0,0x3d2797f6031,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10006f8c8,0x7fff5fbfeb30,0,0x7fff5fbfeb70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ee5f,0x7fff5fbff000,0,0x37ec2edc56a9,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfef00,0,0x1e53d4e700000022,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100172261,0x7fff5fbfeac0,0,0x7fff5fbfeaf0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbcd4,0x7fff5fbfeb98,0,0x7fff911f1b1b,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10022d1e6,0x7fff5fbfeb28,0,0x7fff5fbfec38,0,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100150091,0x7fff5fbfec40,0,0x7fff5fbfec90,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e343248b1,0x7fff5fbff1a8,0,0x11e9a435bd51,0 -tick,0x1002523cd,0x7fff5fbfe7d0,0,0x2e9dafd14e81,0,0x1e4e34551d37,0x1e4e3455a6d1,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343262ef,0x7fff5fbfef88,0,0x1e4e343996f0,0 -tick,0x1e4e343251fd,0x7fff5fbfeee8,0,0x1e4e343a9cdb,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454de8f,0x7fff5fbfeb08,0,0x10002cd15,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345547ae,0x7fff5fbfe9a8,0,0x1e4e34564c92,0,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100117b70,0x7fff5fbfeb68,0,0x10000b1a2,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10006f663,0x7fff5fbfeb70,0,0x7fff5fbfebd0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c3cbb,0x7fff5fbfed48,0,0x1e4e3430618e,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ad248,0x7fff5fbfee40,0,0x1e4e34394688,0,0x1e4e3455287e,0x1e4e343993e2 -tick,0x1e4e343fd785,0x7fff5fbfeb60,0,0x1e4e3455a43d,0,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100393081,0x7fff5fbfeaa0,0,0x7fff5fbfead0,0,0x1e4e34579b39,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de663,0x7fff5fbfec28,0,0x9b023584f2e54c3c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430a8e0,0x7fff5fbff380,0,0x1e4e343df1ec,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f93bc,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c611a,0x7fff5fbfee00,0,0x7fff5fbfee20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1e7e,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002607be,0x7fff5fbfeb70,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006f8c1,0x7fff5fbff010,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfed80,0,0x263e5f5700000015,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c36c,0x7fff5fbfed60,0,0x101901c60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91208402,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f96f7,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34551561,0x7fff5fbfed98,0,0x7fff5fbfedc8,0,0x1e4e3455a43d,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34324860,0x7fff5fbff050,0,0x1e4e34311317,0 -tick,0x10010d200,0x7fff5fbfee08,0,0x10001866b,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100248ff0,0x7fff5fbfea48,0,0x10024920d,0,0x1e4e34551d37,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024edfe,0x7fff5fbfeb80,0,0x2b498da90241,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251ec6,0x7fff5fbfeca0,0,0x7fff5fbfecd0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012116c,0x7fff5fbff510,0,0x0,4 -tick,0x100262ced,0x7fff5fbfe6f0,0,0x11e9a42a0d11,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608e7,0x7fff5fbfecf0,0,0x3885c40b0000000a,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100249277,0x7fff5fbff110,0,0x0,3 -tick,0x7fff91215395,0x7fff5fbfeb40,0,0x7fff5fbfeb70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfe8c0,0,0x263e5f570000000a,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455241a,0x7fff5fbfee80,0,0x37ec2ed77cd9,0,0x1e4e343993e2 -tick,0x1e4e343a78f1,0x7fff5fbfef40,0,0x1e4e343949d6,0,0x1e4e34399727 -tick,0x7fff911dbcd6,0x7fff5fbfe898,0,0x7fff911f40bc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bd15a,0x7fff5fbfe940,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306192,0x7fff5fbfea50,0,0x7fff5fbfeaa0,0,0x1e4e3455497b,0x1e4e343a8ee9,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432e380,0x7fff5fbfe828,0,0x1e4e3459b690,0,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10004e6f5,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100122a27,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100150091,0x7fff5fbfedd0,0,0x7fff5fbfee30,0,0x1e4e3456bed2,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120307,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435ccf9,0x7fff5fbff0a8,0,0x1e4e3457bdd4,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c801,0x7fff5fbfed00,0,0x10320047c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b95,0x7fff5fbfee40,0,0x101009410,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120616c,0x7fff5fbfee08,0,0x7fff91206c07,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121478b,0x7fff5fbfed20,0,0x5fbfed50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457f78d,0x7fff5fbff020,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345965d3,0x7fff5fbfef60,0,0xd9c9ff15a96f5556,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9883,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001785e1,0x7fff5fbfea20,0,0x7fff5fbfea50,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000fde57,0x7fff5fbfe8d8,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b8bf,0x7fff5fbfe8d0,0,0x79,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d443,0x7fff5fbfec90,0,0x100018380,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10002cca1,0x7fff5fbfeb10,0,0x101009400,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a97f0,0x7fff5fbfeaa8,0,0x0,1 -tick,0x1001a8d7c,0x7fff5fbfead0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfead0,0,0x0,1 -tick,0x1001a8aaa,0x7fff5fbfeaf8,0,0x0,1 -tick,0x100198917,0x7fff5fbfeaa0,0,0x0,1 -tick,0x100189721,0x7fff5fbfe690,0,0x7fff5fbfe8d0,0,0x1e4e343a689f,0x1e4e34555ca8,0x1e4e34564a8c,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120fd9b,0x7fff5fbfe6b0,0,0x7fff5fbfe6f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452a4a4,0x7fff5fbfee28,0,0x400000000,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343210cd,0x7fff5fbfec00,0,0xe662304121,0,0x1e4e3454dadf,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b0588,0x7fff5fbfef88,0,0x1e4e3439922e,0 -tick,0x10025baa1,0x7fff5fbfeb20,0,0x7fff5fbfeb90,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456be9e,0x7fff5fbfee70,0,0x37ec2ed9cd11,0,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f3cfd,0x7fff5fbfea10,0,0x7fff5fbfea80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100260810,0x7fff5fbfe500,0,0x2ad95d0d0000000a,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d13a,0x7fff5fbfed90,0,0x7fff5fbfee10,0,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c3c54,0x7fff5fbfed10,0,0x1,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100206bd3,0x7fff5fbfe810,0,0x100602a50,0,0x1e4e3455497b,0x1e4e343a8fe7,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbff2c8,0,0x10011bbcd,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c0e7c,0x7fff5fbfeb20,0,0x102023b08,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b2401,0x7fff5fbfedd0,0,0x7fff5fbfedf8,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002389c0,0x7fff5fbfeca8,0,0x10020659e,0,0x1e4e34587515,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d205,0x7fff5fbff320,0,0x7fff5fbff350,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026f1d7,0x7fff5fbfea20,0,0x11e9a5dbb4e0,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1001a8141,0x7fff5fbfeac0,0,0xb5,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10020654b,0x7fff5fbfea90,0,0x7fff5fbfeb70,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011fc5b,0x7fff5fbfeb10,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10020654b,0x7fff5fbfe620,0,0x7fff5fbfe700,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012eae0,0x7fff5fbfee08,0,0x1000183c0,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100253b6a,0x7fff5fbfef40,0,0x101009410,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100315091,0x7fff5fbfe910,0,0x7fff5fbfe940,0,0x1e4e3454d2d8,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10001481d,0x7fff5fbff350,0,0x0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34327a7a,0x7fff5fbff138,0,0x1e4e34567081,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912107dc,0x7fff5fbfec38,0,0x7fff9120c37d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b5969,0x7fff5fbff380,0,0x1e4e343df271,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34576dee,0x7fff5fbfee78,0,0x2c2694a0b449,0,0x1e4e345768e4,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfedf0,0,0x7fff5fbfee20,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566cd3,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100206064,0x7fff5fbff070,0,0x3d279700000,0,0x1e4e343f1a3b,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10023adf2,0x7fff5fbfeae0,0,0x7,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100232b9c,0x7fff5fbff4a0,0,0x7fff5fbff4e0,0,0x1e4e3459e580 -tick,0x1000754ac,0x7fff5fbfee38,0,0x1000642c3,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100043f08,0x7fff5fbff370,0,0x0,4 -tick,0x10020654b,0x7fff5fbfea90,0,0x7fff5fbfeb70,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da168,0x7fff5fbfecc8,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x100175d60,0x7fff5fbfec50,0,0x101009400,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100203744,0x7fff5fbfede0,0,0x7fff5fbfee30,0,0x1e4e34570fec,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34551c02,0x7fff5fbfe9e0,0,0x1020259f0,0,0x1e4e3455a6d1,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100114520,0x7fff5fbff1c8,0,0x0,4 -tick,0x10019cc71,0x7fff5fbfea60,0,0x7fff5fbfeac0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459f7e5,0x7fff5fbfe9e8,0,0x1e4e345651bb,0,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfed30,0,0x3fd6f24200000012,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002065b7,0x7fff5fbfe0e0,0,0x7fff5fbfe1c0,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002d017d,0x7fff5fbfeab0,0,0x1e4e343a8f05,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x1002b9b27,0x7fff5fbfec70,0,0x11e9a5b7c1a9,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34324100,0x7fff5fbfec10,0,0x1e4e3457d1f6,0,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251f04,0x7fff5fbfeca0,0,0x7fff00000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019be80,0x7fff5fbfea58,0,0x100173bc6,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100203768,0x7fff5fbfe970,0,0x9be4f24bd1,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254685,0x7fff5fbfeac0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100205974,0x7fff5fbfea90,0,0x2e9dafd14161,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ee94,0x7fff5fbfe5e0,0,0x2e9dafd0ab51,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024f02e,0x7fff5fbfee10,0,0x7fff5fbfee38,0,0x1e4e343a9cb0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452d4e5,0x7fff5fbfeee0,0,0x1e4e3456e144,0,0x1e4e34399744 -tick,0x1002ff3a1,0x7fff5fbfe860,0,0x0,1 -tick,0x10023603c,0x7fff5fbfe6c0,0,0x0,1 -tick,0x10027b6ee,0x7fff5fbfe650,0,0x0,1 -code-creation,LoadIC,0x1e4e345b9320,134,"domain" -code-creation,LoadIC,0x1e4e345b9320,134,"domain" -tick,0x1e4e34566ede,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345b93c0,170,"_pusher" -code-creation,LoadIC,0x1e4e345b93c0,170,"_pusher" -code-creation,LoadIC,0x1e4e345b9480,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b9480,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b9520,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b9520,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b95c0,134,"pair" -code-creation,LoadIC,0x1e4e345b95c0,134,"pair" -code-creation,LoadIC,0x1e4e345b9660,134,"length" -code-creation,LoadIC,0x1e4e345b9660,134,"length" -code-creation,StoreIC,0x1e4e345b9080,189,"locked" -code-creation,StoreIC,0x1e4e345b9080,189,"locked" -code-creation,LoadIC,0x1e4e345b9140,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b9140,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b0f60,134,"_events" -code-creation,LoadIC,0x1e4e345b0f60,134,"_events" -code-creation,LoadIC,0x1e4e345b1000,284,"" -code-creation,LoadIC,0x1e4e345b1000,284,"" -code-creation,LoadIC,0x1e4e345b1120,134,"_ended" -code-creation,LoadIC,0x1e4e345b1120,134,"_ended" -code-creation,LoadIC,0x1e4e345b0280,134,"length" -code-creation,LoadIC,0x1e4e345b0280,134,"length" -code-creation,LoadIC,0x1e4e345b0320,134,"_queue" -code-creation,LoadIC,0x1e4e345b0320,134,"_queue" -code-creation,CallIC,0x1e4e345b03c0,217,"_process" -code-creation,CallIC,0x1e4e345b04a0,492,"write" -code-creation,LoadIC,0x1e4e345b4f80,284,"" -code-creation,LoadIC,0x1e4e345b4f80,284,"" -code-creation,LoadIC,0x1e4e345b50a0,138,"_buffer" -code-creation,LoadIC,0x1e4e345b50a0,138,"_buffer" -code-creation,LoadIC,0x1e4e345b5140,138,"_offset" -code-creation,LoadIC,0x1e4e345b5140,138,"_offset" -code-creation,StoreIC,0x1e4e345b51e0,189,"_offset" -code-creation,StoreIC,0x1e4e345b51e0,189,"_offset" -code-creation,CallIC,0x1e4e345b52a0,287,"emit" -code-creation,LoadIC,0x1e4e345b53c0,134,"_events" -code-creation,LoadIC,0x1e4e345b53c0,134,"_events" -code-creation,LoadIC,0x1e4e345b5460,134,"domain" -code-creation,LoadIC,0x1e4e345b5460,134,"domain" -code-creation,LoadIC,0x1e4e345b5500,138,"_chunkSize" -code-creation,LoadIC,0x1e4e345b5500,138,"_chunkSize" -code-creation,StoreIC,0x1e4e345b55a0,185,"_processing" -code-creation,StoreIC,0x1e4e345b55a0,185,"_processing" -code-creation,CallIC,0x1e4e345b5660,217,"_process" -code-creation,CallIC,0x1e4e3457e400,492,"write" -code-creation,LoadIC,0x1e4e3457e600,138,"_offset" -code-creation,LoadIC,0x1e4e3457e600,138,"_offset" -code-creation,LoadIC,0x1e4e3457e6a0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457e6a0,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457e740,185,"_processing" -code-creation,StoreIC,0x1e4e3457e740,185,"_processing" -code-creation,LoadIC,0x1e4e3457e800,134,"_events" -code-creation,LoadIC,0x1e4e3457e800,134,"_events" -code-creation,LoadIC,0x1e4e3457e8a0,134,"domain" -code-creation,LoadIC,0x1e4e3457e8a0,134,"domain" -code-creation,LoadIC,0x1e4e3457e940,170,"_pusher" -code-creation,LoadIC,0x1e4e3457e940,170,"_pusher" -code-creation,LoadIC,0x1e4e3457ea00,134,"_events" -code-creation,LoadIC,0x1e4e3457ea00,134,"_events" -code-creation,CallIC,0x1e4e3457eaa0,492,"execute" -code-creation,LoadIC,0x1e4e3457d740,254,"" -code-creation,LoadIC,0x1e4e3457d740,254,"" -code-creation,StoreIC,0x1e4e3457d840,390,"_events" -code-creation,StoreIC,0x1e4e3457d840,390,"_events" -code-creation,LoadIC,0x1e4e3457d9e0,254,"" -code-creation,LoadIC,0x1e4e3457d9e0,254,"" -code-creation,CallIC,0x1e4e3457dae0,205,"onIncoming" -code-creation,LoadIC,0x1e4e3457dbc0,284,"" -code-creation,LoadIC,0x1e4e3457dbc0,284,"" -code-creation,StoreIC,0x1e4e3457dce0,420,"_events" -code-creation,StoreIC,0x1e4e3457dce0,420,"_events" -code-creation,LoadIC,0x1e4e3457dea0,284,"" -code-creation,LoadIC,0x1e4e3457dea0,284,"" -code-creation,LoadIC,0x1e4e3457dfc0,134,"_events" -code-creation,LoadIC,0x1e4e3457dfc0,134,"_events" -code-creation,CallIC,0x1e4e3457e060,257,"emit" -code-creation,LoadIC,0x1e4e345b5740,134,"_events" -code-creation,LoadIC,0x1e4e345b5740,134,"_events" -code-creation,CallIC,0x1e4e345b57e0,287,"emit" -code-creation,LoadIC,0x1e4e345b06a0,134,"_events" -code-creation,LoadIC,0x1e4e345b06a0,134,"_events" -code-creation,CallIC,0x1e4e345739e0,287,"emit" -code-creation,LoadIC,0x1e4e34573b00,134,"_events" -code-creation,LoadIC,0x1e4e34573b00,134,"_events" -code-creation,LoadIC,0x1e4e34573ba0,134,"domain" -code-creation,LoadIC,0x1e4e34573ba0,134,"domain" -tick,0x10025dc42,0x7fff5fbfe920,1,0x100013f1a,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e34573c40,134,"_events" -code-creation,LoadIC,0x1e4e34573c40,134,"_events" -code-creation,LoadIC,0x1e4e34573ce0,134,"domain" -code-creation,LoadIC,0x1e4e34573ce0,134,"domain" -code-creation,CallIC,0x1e4e34573d80,277,"removeListener" -code-creation,LoadIC,0x1e4e34573ea0,134,"domain" -code-creation,LoadIC,0x1e4e34573ea0,134,"domain" -code-creation,CallIC,0x1e4e34573f40,247,"removeListener" -code-creation,LoadIC,0x1e4e34574040,134,"_events" -code-creation,LoadIC,0x1e4e34574040,134,"_events" -code-creation,LoadIC,0x1e4e345740e0,138,"incoming" -code-creation,LoadIC,0x1e4e345740e0,138,"incoming" -tick,0x1e4e34521268,0x7fff5fbfed58,0,0x1e4e34562fde,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e34574180,492,"finish" -code-creation,CallIC,0x1e4e34574380,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e345744a0,185,"_flush" -code-creation,StoreIC,0x1e4e345744a0,185,"_flush" -code-creation,LoadIC,0x1e4e34574560,134,"_events" -code-creation,LoadIC,0x1e4e34574560,134,"_events" -code-creation,LoadIC,0x1e4e3456e8c0,254,"" -code-creation,LoadIC,0x1e4e3456e8c0,254,"" -code-creation,StoreIC,0x1e4e3456e9c0,390,"_events" -code-creation,StoreIC,0x1e4e3456e9c0,390,"_events" -code-creation,LoadIC,0x1e4e3456eb60,254,"" -code-creation,LoadIC,0x1e4e3456eb60,254,"" -code-creation,LoadIC,0x1e4e3456ec60,134,"_events" -code-creation,LoadIC,0x1e4e3456ec60,134,"_events" -code-creation,CallIC,0x1e4e3456ed00,257,"emit" -code-creation,StoreIC,0x1e4e3456ee20,189,"locked" -code-creation,StoreIC,0x1e4e3456ee20,189,"locked" -code-creation,LoadIC,0x1e4e3456eee0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3456eee0,138,"lockBuffer" -code-creation,CallIC,0x1e4e3456ef80,287,"emit" -code-creation,LoadIC,0x1e4e3456f0a0,134,"_ended" -code-creation,LoadIC,0x1e4e3456f0a0,134,"_ended" -code-creation,LoadIC,0x1e4e3456f140,134,"_queue" -code-creation,LoadIC,0x1e4e3456f140,134,"_queue" -code-creation,LoadIC,0x1e4e3456f1e0,138,"_buffer" -code-creation,LoadIC,0x1e4e3456f1e0,138,"_buffer" -code-creation,StoreIC,0x1e4e345ad280,189,"_offset" -code-creation,StoreIC,0x1e4e345ad280,189,"_offset" -code-creation,CallIC,0x1e4e345ad340,287,"emit" -code-creation,LoadIC,0x1e4e345ad460,134,"domain" -code-creation,LoadIC,0x1e4e345ad460,134,"domain" -code-creation,CallIC,0x1e4e345ad500,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e345acd00,185,"_flush" -code-creation,StoreIC,0x1e4e345acd00,185,"_flush" -code-creation,LoadIC,0x1e4e345acdc0,134,"writable" -code-creation,LoadIC,0x1e4e345acdc0,134,"writable" -code-creation,LoadIC,0x1e4e345ace60,134,"_pending" -tick,0x7fff91261a2e,0x7fff5fbfe2c0,0,0x7fff5fbfe518,0,0x1e4e343f1da3,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345ace60,134,"_pending" -code-creation,LoadIC,0x1e4e345acf00,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345acf00,134,"_pendingCallbacks" -code-creation,StoreIC,0x1e4e345acfa0,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345acfa0,189,"_pendingBytes" -tick,0x10000c163,0x7fff5fbfebe0,0,0x7fff5fbfec28,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120415,0x7fff5fbfeb60,0,0x7fff5fbfeb80,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010e88e,0x7fff5fbfef80,0,0xffffffff,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -code-creation,CallIC,0x1e4e3456c100,492,"execute" -code-creation,CallIC,0x1e4e3456c300,205,"onIncoming" -code-creation,LoadIC,0x1e4e3456c3e0,138,"incoming" -code-creation,LoadIC,0x1e4e3456c3e0,138,"incoming" -tick,0x100253c06,0x7fff5fbfe620,0,0x101009410,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456c480,134,"readable" -code-creation,LoadIC,0x1e4e3456c480,134,"readable" -code-creation,LoadIC,0x1e4e3456c520,200,"resume" -code-creation,LoadIC,0x1e4e3456c520,200,"resume" -code-creation,CallIC,0x1e4e3456c600,217,"resume" -code-creation,CallIC,0x1e4e3456c6e0,247,"removeListener" -tick,0x7fff911dadb5,0x7fff5fbfef40,0,0x7fff5fbfef70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254e3f,0x7fff5fbfeb40,0,0x11e9a4f92961,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9385,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbf9d,0x7fff5fbfec38,0,0x7fff9120c12c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430c88e,0x7fff5fbfee98,0,0x1e4e345b8057,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd1d4,0x7fff5fbfeeb0,0,0x7fff5fbfef50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfea50,0,0xa,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345a3ee8,0x7fff5fbff148,0,0x1e4e34567e91,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34311b31,0x7fff5fbff278,0,0x1e4e343f1d72,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3453c601,0x7fff5fbff130,0,0x7fff5fbff170,0,0x1e4e34580a7c,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456c7e0,492,"finish" -tick,0x100114761,0x7fff5fbff7c0,0,0x0,4 -code-creation,LoadIC,0x1e4e3456c9e0,134,"pair" -code-creation,LoadIC,0x1e4e3456c9e0,134,"pair" -code-creation,LoadIC,0x1e4e3456ca80,134,"writable" -code-creation,LoadIC,0x1e4e3456ca80,134,"writable" -code-creation,LoadIC,0x1e4e3456cb20,134,"_pending" -code-creation,LoadIC,0x1e4e3456cb20,134,"_pending" -code-creation,LoadIC,0x1e4e3456cbc0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3456cbc0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345ad060,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345ad060,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e345ad100,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345ad100,189,"_pendingBytes" -tick,0x1000df264,0x7fff5fbfec98,0,0xd635b5c049121407,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e345ac900,134,"_events" -code-creation,LoadIC,0x1e4e345ac900,134,"_events" -code-creation,LoadIC,0x1e4e345ac9a0,134,"domain" -code-creation,LoadIC,0x1e4e345ac9a0,134,"domain" -code-creation,LoadIC,0x1e4e345ac120,134,"writable" -code-creation,LoadIC,0x1e4e345ac120,134,"writable" -code-creation,CallIC,0x1e4e345abee0,200,"write" -code-creation,LoadIC,0x1e4e345a2100,134,"_needDrain" -code-creation,LoadIC,0x1e4e345a2100,134,"_needDrain" -code-creation,CallIC,0x1e4e345a21a0,257,"emit" -tick,0x1001500ac,0x7fff5fbfee90,0,0x7fff5fbfeef0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x1001fd247,0x7fff5fbfec28,0,0x1e4e3453d3df,0,0x1e4e3453d3df,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1002be56c,0x7fff5fbff1d0,0,0x0,3 -tick,0x100170cf6,0x7fff5fbff158,0,0x0,3 -tick,0x7fff911f2e26,0x7fff5fbff340,0,0x0,4 -tick,0x1e4e34315118,0x7fff5fbfed98,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3459ec80,189,"_buffer" -code-creation,StoreIC,0x1e4e3459ec80,189,"_buffer" -code-creation,LoadIC,0x1e4e3459ed40,138,"_binding" -code-creation,LoadIC,0x1e4e3459ed40,138,"_binding" -code-creation,LoadIC,0x1e4e3459ede0,134,"_flush" -code-creation,LoadIC,0x1e4e3459ede0,134,"_flush" -code-creation,StoreIC,0x1e4e3459ee80,189,"callback" -code-creation,StoreIC,0x1e4e3459ee80,189,"callback" -code-creation,StoreIC,0x1e4e3459ef40,189,"buffer" -code-creation,StoreIC,0x1e4e3459ef40,189,"buffer" -tick,0x1e4e3459cb85,0x7fff5fbfe7e0,0,0x1e4e34320c96,0,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c1520,0x7fff5fbfea78,0,0x1e4e3430618e,0,0x1e4e3454d16d,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100044fcf,0x7fff5fbff390,0,0x0,4 -tick,0x10024afe9,0x7fff5fbfea10,0,0x2e9dafd19529,0,0x1e4e343aac0a,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100251ec6,0x7fff5fbfec30,0,0x7fff5fbfec70,0,0x1e4e3455a80b,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001485c2,0x7fff5fbfecd0,0,0x100000000,0,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c4a81,0x7fff5fbfe8f8,0,0x1000bd18a,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be669,0x7fff5fbfec90,0,0x102023a88,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91206882,0x7fff5fbfe990,0,0x7fff5fbfe9b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfeb78,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10004ec1c,0x7fff5fbfeb38,0,0x100008018,0,0x1e4e34560bb7,0x1e4e345b0d6e,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002c3a8a,0x7fff5fbfe938,0,0x101009498,0,0x1e4e3455497b,0x1e4e34564c92,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10017c6e2,0x7fff5fbfe7d8,0,0xe662347ec9,0,0x1e4e343e435a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455506e,0x7fff5fbff008,0,0x1e4e3455a8c4,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x7fff911daaf5,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457b401,0x7fff5fbfedd8,0,0x7fff5fbfee20,0,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a91e5,0x7fff5fbfeac0,0,0x11e9a4dc01c1,0 -tick,0x10024c1c1,0x7fff5fbfee10,0,0x7fff5fbfee60,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911db6a4,0x7fff5fbfefa8,0,0x10011d4a6,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432556e,0x7fff5fbff280,0,0x1e4e343f1f17,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c3b1,0x7fff5fbfed20,0,0x313780000000179,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fccb,0x7fff5fbfec20,0,0x7fff5fbfec60,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345787ff,0x7fff5fbfee68,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfee00,0,0x263e5f570000000a,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10016d710,0x7fff5fbff108,0,0x100169ef9,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345803b1,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345553c0,0x7fff5fbff148,0,0x1e4e345679fb,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100271401,0x7fff5fbff190,0,0x7fff5fbff1d0,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e345984df -tick,0x1000f9828,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34332f05,0x7fff5fbfec68,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e1e2,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012035a,0x7fff5fbfea80,0,0x7fff5fbfeaa0,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430d5be,0x7fff5fbfed60,0,0x1e4e34599bac,0,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457e24a,0x7fff5fbfeb70,0,0x101009400,0,0x1e4e34359ad4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ed21,0x7fff5fbfeaf0,0,0x7fff5fbfeb40,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026bca2,0x7fff5fbfe9c0,0,0x3,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455c240,0x7fff5fbfe958,0,0x1e4e34334687,0,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100391a51,0x7fff5fbfeba0,0,0x7fff5fbfebd0,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001bba9,0x7fff5fbfe920,0,0x7fff5fbfe990,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459ff7c,0x7fff5fbfeec8,0,0x1e4e343aa5fb,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001447f7,0x7fff5fbfec20,0,0x7fff5fbfec40,0,0x1e4e34580509,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8cdc,0x7fff5fbfeaf8,0,0x1e4e34583fda,0,0x1e4e34573968,0x1e4e345a08d4,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3459e9a0,189,"_buffer" -code-creation,StoreIC,0x1e4e3459e9a0,189,"_buffer" -code-creation,LoadIC,0x1e4e3459ea60,138,"_binding" -code-creation,LoadIC,0x1e4e3459ea60,138,"_binding" -code-creation,LoadIC,0x1e4e3459eb00,134,"_flush" -code-creation,LoadIC,0x1e4e3459eb00,134,"_flush" -code-creation,StoreIC,0x1e4e3459dea0,189,"callback" -code-creation,StoreIC,0x1e4e3459dea0,189,"callback" -code-creation,StoreIC,0x1e4e3459df60,189,"buffer" -code-creation,StoreIC,0x1e4e3459df60,189,"buffer" -tick,0x10012ef10,0x7fff5fbfe898,0,0x100254e3f,0,0x1e4e3455a80b,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011add1,0x7fff5fbff440,0,0x7fff5fbff4b0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100144303,0x7fff5fbff030,0,0x100000000,0,0x1e4e343b696c,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024f2e0,0x7fff5fbfe310,0,0x5fbfe330,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10024ee48,0x7fff5fbfe5d0,0,0x37ec2edb53a1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002d942,0x7fff5fbfebe0,0,0x101009400,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012032f,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34354822,0x7fff5fbfeaa8,0,0x1e4e3454d19f,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be6b6,0x7fff5fbfef40,0,0x102023b08,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfede8,0,0x7fff911f418d,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad59,0x7fff5fbfed60,0,0x7fff5fbfed90,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd2e9,0x7fff5fbfed20,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343098ce,0x7fff5fbff130,0,0x100000000,0,0x1e4e34567976,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213b38,0x7fff5fbfec40,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912061b3,0x7fff5fbfed00,0,0x1009ca000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911d9d0f,0x7fff5fbfebc0,0,0xff80000000001003,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100118d4a,0x7fff5fbfeea0,0,0x7fff5fbfeec0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345789f2,0x7fff5fbfee68,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120616c,0x7fff5fbfee08,0,0x7fff91206c07,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd337,0x7fff5fbfecc0,0,0x10060d028,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306140,0x7fff5fbfedc8,0,0x1e4e3454ed8b,0,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34399383 -tick,0x10024f072,0x7fff5fbfe6c0,0,0x0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001864f0,0x7fff5fbfe820,0,0x7fff5fbfea28,0,0x1e4e343e7909,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100260a71,0x7fff5fbfe970,0,0x7fff5fbfe9f0,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025fbc1,0x7fff5fbfeae0,0,0x7fff5fbfeb20,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dc25,0x7fff5fbfecb0,0,0x102023a88,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454a48a,0x7fff5fbfee60,0,0x1e4e3458747a,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120fed0,0x7fff5fbff558,0,0x0,4 -tick,0x1e4e34551561,0x7fff5fbff100,0,0x7fff5fbff130,0 -tick,0x10016d98e,0x7fff5fbfea00,0,0x0,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f308a,0x7fff5fbfef10,0,0x7fff5fbfef50,0,0x1e4e3439925d -tick,0x7fff9199e10e,0x7fff5fbfed28,0,0x7fff911f31d7,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1002608ef,0x7fff5fbfe8c0,0,0x263e5f570000000a,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d49c,0x7fff5fbfeb78,0,0x10002d794,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34324888,0x7fff5fbff3c0,0,0x11e9a4924d59,0 -tick,0x10019ed14,0x7fff5fbfe788,0,0x10024fe73,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343298e4,0x7fff5fbfef88,0,0x1e4e34399526,0 -tick,0x1000baa66,0x7fff5fbfe7a8,0,0x1000bab73,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432512c,0x7fff5fbfee78,0,0x1e4e345760c1,0,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100260f90,0x7fff5fbfe7c8,0,0x100122184,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026bd69,0x7fff5fbfea58,0,0x8,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001711bb,0x7fff5fbff0e0,0,0x0,0 -tick,0x10024fe50,0x7fff5fbfe790,0,0x11e9a4900000,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b4520,0x7fff5fbfef78,0,0x37ec2ed0ddb1,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10002d4af,0x7fff5fbff040,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120307,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8100,0x7fff5fbfec88,0,0x1001a2a44,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580479,0x7fff5fbff188,0,0x37ec2edd46c1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daab5,0x7fff5fbfedd0,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012676a,0x7fff5fbfeda0,0,0x0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430a8e0,0x7fff5fbff380,0,0x1e4e343df271,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006365e,0x7fff5fbfeeb0,0,0x7fff5fbfeec0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309889,0x7fff5fbff178,0,0x1e4e34580a7c,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912135c9,0x7fff5fbfea80,0,0x7ffffffc0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10022d1f1,0x7fff5fbfeca0,0,0x7fff5fbfecd0,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100391a5c,0x7fff5fbfec10,0,0x7fff5fbfec40,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002e4c21,0x7fff5fbfedc0,0,0x7fff5fbfee00,0,0x1e4e3452a550,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001446c3,0x7fff5fbfeac0,0,0x100000000,0,0x1e4e34588ee2,0x1e4e345adfba,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9c5e,0x7fff5fbfec70,0,0x11e9a489c749,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff90f806fc,0x7fff5fbfec18,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfeb78,0,0x100120174,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf1c1,0x7fff5fbff550,0,0x0,3 -tick,0x1e4e34311980,0x7fff5fbfeb90,0,0x1e4e3458d5a8,0,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432584e,0x7fff5fbfef38,0,0x1e4e34551d37,0,0x1e4e3455a43d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34596957,0x7fff5fbfea80,0,0xd9c9ff15a96f5556,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9121376d,0x7fff5fbfe878,0,0x7fff912061b3,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430aa9e,0x7fff5fbfef68,0,0x1e4e345b4410,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e343e7901,0x7fff5fbfeb50,0,0x11e9a47c3e91,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325595,0x7fff5fbfee30,0,0x1e4e34398674,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019b0ac,0x7fff5fbff2a0,0,0x2e9dafd04139,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34571180,0x7fff5fbfee78,0,0x11e9a4605621,0,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002608ec,0x7fff5fbff210,0,0xe6373030000000a,0,0x1e4e34551d37,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x100253c00,0x7fff5fbfef40,0,0x101009410,0,0x1e4e34320ed1,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b682e,0x7fff5fbfeae0,0,0x1e4e3454e2fc,0,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad20,0x7fff5fbfeb28,0,0x7fff91213bb9,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9120c502,0x7fff5fbff260,0,0x0,4 -tick,0x1e4e34593249,0x7fff5fbff150,0,0x101009410,0 -tick,0x1000baa67,0x7fff5fbfec80,0,0x7fff5fbfecb0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454e300,0x7fff5fbfefe8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fd7d,0x7fff5fbfec80,0,0x7fff5fbfecc0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c3a0,0x7fff5fbfed60,0,0x103200405,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b24,0x7fff5fbfebd0,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c2c9,0x7fff5fbfeda8,0,0x7fff912068f8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de2d9,0x7fff5fbfec88,0,0x66bc47c465fe6a73,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5e5f,0x7fff5fbfeeb8,0,0x100075bec,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff8ddd35c8,0x7fff5fbff668,0,0x0,4 -tick,0x1000f98c9,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100275540,0x7fff5fbfe648,0,0x10024fd7a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011fb78,0x7fff5fbfeb50,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b5ac5,0x7fff5fbfee18,0,0x1e4e3452a4b5,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457bf6a,0x7fff5fbff0b0,0,0x3d27976be39,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100208497,0x7fff5fbfec20,0,0x2,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87ce,0x7fff5fbfec20,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001785fd,0x7fff5fbfeac0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100207e01,0x7fff5fbfec60,0,0x7fff5fbfed80,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f317a,0x7fff5fbfebe0,0,0x1006395b4,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34325866,0x7fff5fbfef18,0,0x1e4e3455ea13,0,0x1e4e343949fb,0x1e4e34399727 -tick,0x10008e771,0x7fff5fbfead8,0,0x10008da93,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bfb5e,0x7fff5fbfeae0,0,0x1002bfb30,0,0x1e4e34579b39,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a8100,0x7fff5fbfe8b8,0,0x10019ed51,3,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002e4dec,0x7fff5fbff290,0,0x102023a68,0,0x1e4e343b5be9,0x1e4e343b64c9,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x1001ff011,0x7fff5fbfe960,0,0x7fff5fbfe9d0,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311960,0x7fff5fbfef20,0,0x1e4e345554e2,0,0x1e4e34399383 -tick,0x10025dca5,0x7fff5fbfe9a0,0,0x2e9dafd05949,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbcf4,0x7fff5fbfea08,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10004ec1d,0x7fff5fbfeb30,0,0x7fff5fbfeb40,0,0x1e4e34560bb7,0x1e4e345b0d6e,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100173ba1,0x7fff5fbfeaa0,0,0x7fff5fbfeb00,0,0x1e4e345ae6cd,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452abfd,0x7fff5fbfeac8,0,0xfffffffffffffffa,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254d09,0x7fff5fbff090,0,0x11e9a4473a61,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100170941,0x7fff5fbfea00,0,0x7fff5fbfea30,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343248b1,0x7fff5fbff620,0,0x3d2797e3ff9,0 -tick,0x10011f3c1,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343262c9,0x7fff5fbff288,0,0x1e4e343f1e29,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002cc25,0x7fff5fbfefe0,0,0x7fff5fbff000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bcdc4,0x7fff5fbfed20,0,0x7fff5fbfed40,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002524ff,0x7fff5fbfee48,0,0x1002490de,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608c3,0x7fff5fbfed80,0,0x263e5f5700000015,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002e4d61,0x7fff5fbfefe0,0,0x102023a68,0,0x1e4e343f2016,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100190834,0x7fff5fbfed50,0,0x10201a2a0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afc2,0x7fff5fbfeb50,0,0x2e9dafd0aae1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x1e4e3454e20d,0x7fff5fbfeb08,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c070,0x7fff5fbfe930,1,0x100014454,4,0x1e4e345ae0b7,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a07ad,0x7fff5fbfebb0,0,0x7fff5fbfebf0,0,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100269fea,0x7fff5fbfeb60,0,0xe662340051,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9746,0x7fff5fbfed78,0,0x7fff5fbfedd0,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100191276,0x7fff5fbfeb28,0,0x102023a88,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100255054,0x7fff5fbff090,0,0x11e9a4359181,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfeb38,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459f829,0x7fff5fbfe970,0,0x7fff5fbfe9a0,0,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454d41b,0x7fff5fbfec48,0,0x7fff5fbfec20,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456e361,0x7fff5fbfedd0,0,0x4f00000000,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345aadec,0x7fff5fbfec50,0,0x1000000000000,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a78f5,0x7fff5fbfeb08,0,0xaabee817209,0,0x1e4e34551d37,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a2421,0x7fff5fbfe7c0,0,0x7fff5fbfe7e0,0,0x1e4e3455a80b,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100005c38,0x7fff5fbfea30,0,0x7fff5fbfeaa0,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012121d,0x7fff5fbff170,0,0x0,4 -tick,0x1e4e34394af6,0x7fff5fbfef58,0,0x11e9a4224d49,0,0x1e4e34399727 -tick,0x10014597f,0x7fff5fbfed20,0,0x7fff5fbfed40,0,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34567287,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a21,0x7fff5fbfe9b0,0,0x7fff5fbfea10,0,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038c68,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100260837,0x7fff5fbfe5e0,0,0x28c26cf200000007,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019bed5,0x7fff5fbfeb00,0,0x3d2797682b9,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3433002a,0x7fff5fbfef68,0,0x1e4e343992f5,0 -tick,0x1e4e345515e5,0x7fff5fbfece0,0,0x102023a88,0,0x1e4e3455a63b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345550ac,0x7fff5fbfee80,0,0xe662347fc9,0,0x1e4e3455ac62,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325862,0x7fff5fbff050,0,0x1e4e34551d37,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c61ec,0x7fff5fbfee18,0,0x102025a38,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009c429,0x7fff5fbfef50,0,0x5a,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912084a3,0x7fff5fbfee00,0,0x7fff5fbfee50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad59,0x7fff5fbfed30,0,0x7fff5fbfed60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024901d,0x7fff5fbfee30,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325595,0x7fff5fbff188,0,0x1e4e34580961,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f921d,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3db5,0x7fff5fbfed50,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100172296,0x7fff5fbff010,0,0x102023a70,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432af1f,0x7fff5fbff3c8,0,0x1e4e343b5cc2,0,0x1e4e345522ca,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x7fff912135d6,0x7fff5fbfeb70,0,0xfffffffffff80000,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10006350f,0x7fff5fbfe9d0,0,0x7fff5fbfe9e0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120850b,0x7fff5fbff300,0,0x0,4 -tick,0x1e4e3455e868,0x7fff5fbfef20,0,0x11e9a414aa69,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x1002bf1eb,0x7fff5fbfee40,0,0x1e4e34394688,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e343151f0,0x7fff5fbfee98,0,0x1500000000,0,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608b8,0x7fff5fbfe920,0,0x263e5f570000000a,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87b1,0x7fff5fbfebd0,0,0x7fff5fbfebf8,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8380,0x7fff5fbfecb0,0,0xc800000000,0,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002d00c5,0x7fff5fbfeab0,0,0x9be4f23001,0,0x1e4e34579e65,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254eb0,0x7fff5fbfe600,0,0xe662367291,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911da168,0x7fff5fbfec68,0,0x100218e51,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10010ca52,0x7fff5fbfebb0,0,0x1,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170950,0x7fff5fbfea70,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010cb25,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100124d46,0x7fff5fbfe8f0,0,0x7fff5fbfe920,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002491ca,0x7fff5fbfe850,0,0x7fff5fbfe990,0,0x1e4e34551d37,0x1e4e3455a6d1,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019edbc,0x7fff5fbfe8c0,0,0x0,3,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024edf7,0x7fff5fbfed80,0,0x11e9a4f064c9,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100256667,0x7fff5fbfefb0,0,0x0,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345adbc0,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3431b46d,0x7fff5fbfe9d8,0,0xe662304121,0,0x1e4e34564c7e,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170950,0x7fff5fbfea30,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a805e,0x7fff5fbfe7d0,0,0x0,1 -tick,0x1001a8a8c,0x7fff5fbfe800,0,0x0,1 -tick,0x1001aa944,0x7fff5fbfe7b0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe800,0,0x0,1 -tick,0x1e4e34519ce4,0x7fff5fbfeaa8,0,0x1e4e3454d3fe,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024c713,0x7fff5fbff130,0,0x11e9a5d0f039,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000debac,0x7fff5fbfec28,0,0x7cf5bf78154278b4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024af61,0x7fff5fbfeaf0,0,0x7fff5fbfeba0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10000b194,0x7fff5fbff038,0,0x10002d804,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006392c,0x7fff5fbff008,0,0x101900c80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100064809,0x7fff5fbfef20,0,0x102019d00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343061c6,0x7fff5fbfefa8,0,0x1e4e3454ed8b,0,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566eaa,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100175d1a,0x7fff5fbfef88,0,0x7fff5fbff0a0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253aff,0x7fff5fbff350,0,0x0,3 -tick,0x1000f96f3,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34554906,0x7fff5fbfed78,0,0xe66234d299,0,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251f0d,0x7fff5fbfeca0,0,0x7fff00000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10004e7c3,0x7fff5fbff350,0,0x0,4 -tick,0x100215900,0x7fff5fbfec18,0,0x100208323,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a28a,0x7fff5fbfeb88,0,0x2e9dafd19839,0,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345adb44,0x7fff5fbfebc0,0,0x7fff5fbfec98,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100277080,0x7fff5fbfe8f8,0,0x10024f102,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfee30,0,0xd584d7f00000002,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34311972,0x7fff5fbff108,0,0x1e4e345916d7,0 -tick,0x1002c87d7,0x7fff5fbfebf0,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253ae0,0x7fff5fbfec68,0,0x10024b001,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dc2f,0x7fff5fbfe900,0,0x101009400,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x1002608ef,0x7fff5fbfe7d0,1,0x10000a04c,3,0x1e4e3454d8af,0x1e4e3439950b -tick,0x1e4e3455243a,0x7fff5fbfeda8,0,0x1d17,0,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100249108,0x7fff5fbfe7c0,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b77fd,0x7fff5fbfed38,0,0x37ec2ed0ddb1,0,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a2a74,0x7fff5fbfe760,0,0x0,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b693a,0x7fff5fbfedc0,0,0x1e4e3454e2fc,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x100250ce1,0x7fff5fbfe850,0,0x7fff5fbfe8e0,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455a30b,0x7fff5fbfee40,0,0x11e9a5b180a1,0,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3459f30d,0x7fff5fbfed38,0,0x1,0,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b4c4c,0x7fff5fbfef78,0,0x37ec2ed0ddb1,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002c92cb,0x7fff5fbfed30,0,0x102023a68,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa53,0x7fff5fbfedd0,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfeb90,0,0x14,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be6b6,0x7fff5fbfef60,0,0x102023a70,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432586f,0x7fff5fbff050,0,0x1e4e34551d37,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c611a,0x7fff5fbfee00,0,0x7fff5fbfee20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011a232,0x7fff5fbfefb0,0,0x102023a70,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002554ac,0x7fff5fbfebb0,0,0x11e9a5b79a51,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b99ff,0x7fff5fbff368,0,0x3d27976be39,0,0x1e4e343b5cf2,0x1e4e345522ca,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x7fff9120fc72,0x7fff5fbfec20,0,0x10099f800,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10018e761,0x7fff5fbff640,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10011c147,0x7fff5fbff290,0,0x0,4 -tick,0x7fff90f806f5,0x7fff5fbfed78,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34399383 -tick,0x10010cb24,0x7fff5fbfebb8,0,0x7fff5fbfeca8,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bd216,0x7fff5fbfe900,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10009fefa,0x7fff5fbfe980,0,0x101900c80,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e0ff,0x7fff5fbfeb08,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100144d36,0x7fff5fbfebb0,0,0x37ec2edd43f1,0,0x1e4e3455218e,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34322a8b,0x7fff5fbfec50,0,0xe66234e391,0,0x1e4e3431f675,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002761d0,0x7fff5fbfedf8,0,0x10024ed90,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345789c0,0x7fff5fbfe988,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459d1dc,0x7fff5fbff0e0,0,0x1e4e343b6a36,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100170963,0x7fff5fbfea70,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343151ec,0x7fff5fbfed78,0,0x39600000000,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b247d,0x7fff5fbfed90,0,0x7fff5fbfee58,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457e7bd,0x7fff5fbfef88,0,0x1e4e343996f0,0 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff911d9d04,0x7fff5fbfeb20,0,0x7fff5fbfebe0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34557b96,0x7fff5fbfed98,0,0xaabee8169e1,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100232b54,0x7fff5fbfee80,0,0x37ec2eda1ac9,0,0x1e4e34394aa3,0x1e4e34399727 -tick,0x100179c43,0x7fff5fbfeab0,0,0x1e4e343060e1,0,0x1e4e345ae6cd,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012014f,0x7fff5fbfeb80,0,0x10300e713,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000384f8,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3433629f,0x7fff5fbfeb00,0,0xe662350169,0,0x1e4e34579820,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019fb80,0x7fff5fbfecd0,0,0x2e9dafd059b9,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006f945,0x7fff5fbfeea0,0,0x7fff5fbfef10,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fe41,0x7fff5fbfec88,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1e7e,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b89a,0x7fff5fbfef60,0,0x4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262c04,0x7fff5fbfe640,0,0x3d2797e3d01,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34560061,0x7fff5fbff138,0,0x7fff5fbff200,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d3e6,0x7fff5fbfefb0,0,0x1019008b0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd297,0x7fff5fbfed20,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002490f9,0x7fff5fbfee30,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100075b35,0x7fff5fbfeda0,0,0x206,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911db000,0x7fff5fbfee38,0,0x1000643ea,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34521aa0,0x7fff5fbfece8,0,0x1e4e345a356c,0,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfe910,0,0xd17482d00000022,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87c7,0x7fff5fbfec20,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001483f,0x7fff5fbff380,0,0x100014592,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002565f1,0x7fff5fbff020,0,0x7fff5fbff040,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100005879,0x7fff5fbff1d0,0,0x0,4 -tick,0x10024afd3,0x7fff5fbfe670,0,0x2e9dafd0aae1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343e40e0,0x7fff5fbff5c0,0,0x1e4e3459e4aa,0 -tick,0x10012eb14,0x7fff5fbfeb50,0,0x7fff5fbfebb0,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f932e,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343946da,0x7fff5fbfee50,0,0x11e9a5873799,0,0x1e4e3455287e,0x1e4e343993e2 -tick,0x10012116c,0x7fff5fbff300,0,0xa,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34557e08,0x7fff5fbfeda8,0,0x11e9a5872031,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3ef,0x7fff5fbfecb0,0,0x10000a5e0,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254de0,0x7fff5fbfec10,0,0x11e9a58c71f9,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100262bd0,0x7fff5fbfe928,0,0x10026319c,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254e2c,0x7fff5fbfec10,0,0x11e9a58e8b31,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e345835f9,0x7fff5fbfeec0,0,0x7fff5fbfef20,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100114761,0x7fff5fbff560,0,0x0,4 -tick,0x1001a0741,0x7fff5fbfeac0,0,0x7fff5fbfeb10,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458ba61,0x7fff5fbff0c8,0,0x7fff5fbff0f8,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201c9f,0x7fff5fbfedf0,0,0x37ec2ede6749,0,0x1e4e34570fec,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019ca61,0x7fff5fbfe6a0,0,0x102023b18,0,0x1e4e34322a85,0x1e4e34320c96,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002523a1,0x7fff5fbfec10,0,0x7fff5fbfec50,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100051ee0,0x7fff5fbfef50,0,0x7fff5fbfef80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002622f5,0x7fff5fbfed00,0,0x10099e400,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c1c9,0x7fff5fbfee78,0,0x37ec2ed13579,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002c87ce,0x7fff5fbfef50,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457678d,0x7fff5fbfeea8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c7d07,0x7fff5fbfed10,0,0x7fff5fbfed40,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345682db,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de767,0x7fff5fbfec98,0,0xb8c56279b7e89e49,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff8b269cc9,0x7fff5fbff820,0,0x0,4 -tick,0x1e4e3455a0b7,0x7fff5fbfedf8,0,0x2e9dafd19839,0,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3456e2ff,0x7fff5fbfedd0,0,0xc900000000,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34308005,0x7fff5fbfed88,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100051ee8,0x7fff5fbfe8d0,0,0x7fff5fbfe910,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012116c,0x7fff5fbff510,0,0x0,4 -tick,0x1002488a1,0x7fff5fbfe970,0,0x7fff5fbfe9b0,0,0x1e4e34579e65,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10022d207,0x7fff5fbfe980,0,0x7fff5fbfe9b0,0,0x1e4e343a9270,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34587482,0x7fff5fbfee70,0,0x11e9a566d639,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34327a7a,0x7fff5fbfee50,0,0x1e4e3456bfea,0,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253bbd,0x7fff5fbfec30,0,0x101009410,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309eea,0x7fff5fbfeb30,0,0x1e4e343e78c2,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf231,0x7fff5fbfe7e0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf283,0x7fff5fbfe780,0,0x0,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345acf60,0x7fff5fbfeda8,0,0x1e4e343f1dd0,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027603b,0x7fff5fbfead0,0,0x1100000000,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f0d,0x7fff5fbfeca0,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019d00c,0x7fff5fbfec38,0,0x1002c87b0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3438d385,0x7fff5fbfee28,0,0x1e4e3439884c,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001737be,0x7fff5fbfed90,0,0x5,0,0x1e4e343986a3,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3432aeca,0x7fff5fbff0c8,0,0x1e4e343b6a14,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457f78d,0x7fff5fbfeb40,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120480,0x7fff5fbfeb78,1,0x10000af1c,4,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457e7bd,0x7fff5fbfef88,0,0x1e4e343996f0,0 -tick,0x1001709c0,0x7fff5fbfea88,0,0x100253f82,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34562d48,0x7fff5fbfecb0,0,0xc800000000,0,0x1e4e345b6d07,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34592ec0,0x7fff5fbfec18,0,0x1e4e3457eeab,0,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455c816,0x7fff5fbfeb18,0,0x7fff5fbfeb58,0,0x1e4e3458e112,0x1e4e343b67b1,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34578847,0x7fff5fbfee68,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfedf0,0,0x7fff5fbfee20,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c806,0x7fff5fbfede0,0,0x35fb5000000002d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa49,0x7fff5fbfedd0,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002c940a,0x7fff5fbfed30,0,0x102023a68,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343098e1,0x7fff5fbff280,0,0x1e4e343f1af1,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34594b93,0x7fff5fbff218,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325555,0x7fff5fbff160,0,0x1e4e34566fc0,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad61,0x7fff5fbfed00,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x1e4e3459fdb4,0x7fff5fbfec28,0,0x1e4e345a08d4,0,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e34567f44,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345b684b,0x7fff5fbfec68,0,0x7fff5fbfec98,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c1521,0x7fff5fbfec10,0,0x7fff5fbfec30,0,0x1e4e3454d16d,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff911da168,0x7fff5fbfe9f8,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ed75,0x7fff5fbfea90,0,0x0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f26e2,0x7fff5fbfed00,0,0x1019014b0,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3431f61c,0x7fff5fbfec80,0,0xe66234f009,0,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343a947e,0x7fff5fbfead0,0,0x11e9a5496fc1,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100201b01,0x7fff5fbfee30,0,0x7fff5fbfee50,0,0x1e4e34570fec,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100232d63,0x7fff5fbfee78,0,0x11e9a54c3fd0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x10015557d,0x7fff5fbfe680,0,0x7fff5fbfe710,2 -code-creation,LazyCompile,0x1e4e345350e0,5094,"callback zlib.js:395",0x37ec2ed7eae8,* -tick,0x1e4e34563fce,0x7fff5fbfef20,0,0x1e4e3456e469,0,0x1e4e34399744 -tick,0x100117991,0x7fff5fbff2c0,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10000b2bc,0x7fff5fbfe8d0,0,0x0,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daab0,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002755e4,0x7fff5fbfed90,0,0x11e9a5346d11,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34327a7a,0x7fff5fbfec58,0,0x1e4e34567081,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91213241,0x7fff5fbfe7b0,0,0xfffffffffffff800,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91206be3,0x7fff5fbfe878,0,0x10b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523cd,0x7fff5fbfeb10,0,0x2e9dafd14a21,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3456e349,0x7fff5fbfedd0,0,0x4f00000000,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10011ff51,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34327da4,0x7fff5fbfebd8,0,0x11e9a53c57f9,0,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608e7,0x7fff5fbfeba0,0,0x3fd6f2420000000a,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432556e,0x7fff5fbff288,0,0x1e4e343f1eb3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912147c4,0x7fff5fbfecd0,0,0xd9c9ff15a96f5556,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd1d4,0x7fff5fbfeeb0,0,0x7fff5fbfef50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019cd11,0x7fff5fbfef20,0,0x1003d3d67,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608e7,0x7fff5fbfed80,0,0x263e5f570000000a,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912107dd,0x7fff5fbfec30,0,0x7fff5fbfece0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001907bd,0x7fff5fbfed78,0,0x101009400,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd0c,0x7fff5fbfefc8,0,0x10011d48c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b9c8,0x7fff5fbfef90,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100063e66,0x7fff5fbfef20,0,0x102019d00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be646,0x7fff5fbfecd0,0,0x102023a90,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000fde45,0x7fff5fbfecf8,0,0x1000bd173,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911dbd12,0x7fff5fbfe8a8,0,0x10011c15d,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c3c54,0x7fff5fbfed10,0,0x1,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120123,0x7fff5fbfeb80,0,0x1010530f6,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c1c3,0x7fff5fbfecb0,0,0x7fff5fbfed40,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100262bed,0x7fff5fbfe4d0,0,0xe66233fd31,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019bd01,0x7fff5fbfed00,0,0x7fff5fbfed40,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfeb38,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10017137e,0x7fff5fbff480,0,0x0,0 -tick,0x100254cf8,0x7fff5fbfe670,0,0xc00000000,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454ddb2,0x7fff5fbfecb8,0,0x102023a90,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da168,0x7fff5fbfec68,0,0x100218e51,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34576780,0x7fff5fbff318,0,0x37ec2edb54f1,0,0x1e4e345984df -tick,0x10011b610,0x7fff5fbfe8c8,0,0x10000b2e4,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000058a8,0x7fff5fbff248,0,0x0,4 -tick,0x1002bf6d0,0x7fff5fbfeda8,0,0x1e4e3430618e,0,0x1e4e3455a80b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100122a38,0x7fff5fbfea70,0,0x7fff5fbfead0,0,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf39c,0x7fff5fbfe7e0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343258de,0x7fff5fbfec28,0,0x1e4e34551d37,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024933b,0x7fff5fbff110,0,0x0,3 -tick,0x1e4e343a9d46,0x7fff5fbfeef0,0,0x11e9a51bee89,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c163,0x7fff5fbfed70,0,0x7fff5fbfedb8,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x100166091,0x7fff5fbfea50,0,0x7fff5fbfead0,0,0x1e4e345587d1,0x1e4e3453cca7,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000f93bc,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bd0c7,0x7fff5fbfe830,0,0xd9c9ff15a96f5556,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345859c0,0x7fff5fbff018,0,0x1e4e34586857,0,0x1e4e3457bf37,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3eb,0x7fff5fbff010,0,0x10002d7a6,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100263171,0x7fff5fbfeed0,0,0x7fff5fbfef40,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345974e1,0x7fff5fbff0c0,0,0x7fff5fbff120,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010e871,0x7fff5fbfedb0,0,0x7fff5fbfee00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c7f6,0x7fff5fbfed60,0,0x1018171f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34597af2,0x7fff5fbfeef8,0,0x37ec2eddef79,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120415,0x7fff5fbff030,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100148951,0x7fff5fbff1d0,0,0x7fff5fbff250,0,0x1e4e343f1db9,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024b17c,0x7fff5fbfee00,0,0x2e9dafd13ad1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34560087,0x7fff5fbff120,0,0x37ec2ed118d1,0,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f96f7,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100252bb0,0x7fff5fbfea28,0,0x100268e00,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453f076,0x7fff5fbfedd8,0,0x7fff5fbfee20,0,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d455,0x7fff5fbfec98,0,0x11e9a50ae2b1,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435ab40,0x7fff5fbfebb0,0,0x1e4e3435a256,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da171,0x7fff5fbfe8b8,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345a08a3,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523e1,0x7fff5fbfefe0,0,0x0,3 -tick,0x1e4e3454d6ec,0x7fff5fbfeb68,0,0x1020259f0,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3ef,0x7fff5fbfe990,0,0x10000bfca,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a8a6c,0x7fff5fbfec00,0,0x0,1 -tick,0x7fff911daafb,0x7fff5fbfeba0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfec00,0,0x0,1 -tick,0x7fff911daac7,0x7fff5fbfeb70,0,0x0,1 -tick,0x1001a805e,0x7fff5fbfebc0,0,0x0,1 -tick,0x1000384f4,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024ee35,0x7fff5fbff000,0,0x37ec2edc5559,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff8ddd324e,0x7fff5fbfea28,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452a548,0x7fff5fbfee38,0,0x300000000,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100392848,0x7fff5fbfeb38,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453ef2e,0x7fff5fbfee50,0,0x1e4e3458757d,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d483,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x10012eae0,0x7fff5fbfe9b8,0,0x10000c1f1,0,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b6aa8,0x7fff5fbfecc0,0,0x1e4e343af80b,0,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfe8c0,0,0x263e5f5700000015,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10016d711,0x7fff5fbfec20,0,0x7fff5fbfec40,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430aa80,0x7fff5fbfef10,0,0x1e4e3455e7d0,0,0x1e4e343949fb,0x1e4e34399727 -tick,0x1e4e343ad866,0x7fff5fbfee78,0,0x11e9a4dc3dd9,0,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430ad17,0x7fff5fbfee18,0,0x1e4e34398634,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001ffc66,0x7fff5fbfe840,0,0x7fff5fbfe870,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af60,0x7fff5fbfec48,0,0x1002510ae,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3451a7a0,0x7fff5fbff288,0,0x1e4e343f1a75,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b7ec4,0x7fff5fbff160,0,0x1e4e34567296,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34311b20,0x7fff5fbff278,0,0x1e4e343f1d72,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002774e4,0x7fff5fbfe678,0,0x11e9a4c38c21,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f40bc,0x7fff5fbfede0,0,0x100a149f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd20d,0x7fff5fbfee00,0,0x7fff5fbfee20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cd2,0x7fff5fbfef40,0,0x7fff5fbfef50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430985e,0x7fff5fbff268,0,0x7fff5fbff2b8,0 -tick,0x10002d71d,0x7fff5fbff060,0,0x1030522f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120851e,0x7fff5fbfec20,0,0x7fff5fbfec70,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3455ab1b,0x7fff5fbfecf8,0,0x2e9dafd19839,0,0x1e4e345710e0,0x1e4e3459dd67,0x1e4e343e8c98,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c2b2,0x7fff5fbfeb90,0,0x102023a88,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8d18,0x7fff5fbfeda8,0,0x1e4e3457b4d7,0,0x1e4e343e8c62,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608cc,0x7fff5fbfeab0,0,0x3572042d0000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100215a1c,0x7fff5fbfec00,0,0x10100a798,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608e7,0x7fff5fbfeab0,0,0x224a48af0000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000a5e1,0x7fff5fbfed20,0,0x7fff5fbfed60,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253fff,0x7fff5fbfea90,0,0x37ec2edffc89,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100038c68,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459e32a,0x7fff5fbff5d0,0,0xe662335941,0 -tick,0x1002c104b,0x7fff5fbfeba0,0,0x102023a88,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f2858,0x7fff5fbfeb50,0,0x10099b0f0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34584a0e,0x7fff5fbfebb8,0,0x1e4e343098ce,0,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34597205,0x7fff5fbfeda0,0,0x1e4e343f1e7a,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343f200e,0x7fff5fbfedb0,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315228,0x7fff5fbfed98,0,0x11e9a4ba4959,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d53e,0x7fff5fbfed98,0,0x1019014b0,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120335,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430c384,0x7fff5fbfed68,0,0x1e4e3431b444,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311980,0x7fff5fbfed90,0,0x1e4e345554e2,0,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455c70d,0x7fff5fbfeb50,0,0x100000000,0,0x1e4e34334687,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001661ca,0x7fff5fbfe9f0,0,0x7fff5fbfea30,0,0x1e4e3455c886,0x1e4e3458e112,0x1e4e343b67b1,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3439f342,0x7fff5fbff148,0,0x1e4e345934fe,0 -tick,0x100075c1b,0x7fff5fbfea40,0,0x101900c80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c019b,0x7fff5fbfeab0,0,0x2,0,0x1e4e34320e97,0x1e4e34579bae,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000c61da,0x7fff5fbfed40,0,0x7fff5fbfed60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001500ac,0x7fff5fbff0f0,0,0x7fff5fbff150,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b7e88,0x7fff5fbff160,0,0x1e4e34567296,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c2ce,0x7fff5fbfec40,0,0xa4da0f2bd1b29307,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfea60,0,0x2e9dafd05104,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dadc1,0x7fff5fbfed70,0,0x7fff5fbfed90,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd17c,0x7fff5fbfee70,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206bff,0x7fff5fbfedc0,0,0x4a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de75c,0x7fff5fbfec98,0,0x5635b240a3b32d36,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3432e4d7,0x7fff5fbfef40,0,0x1e4e34394adc,0,0x1e4e34399727 -tick,0x1e4e3456ba43,0x7fff5fbfed58,0,0xe662335941,0,0x1e4e3453d3c8,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbfc8,0x7fff5fbfeb28,0,0x7fff91213b99,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100191271,0x7fff5fbff280,0,0x0,3 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100117b8d,0x7fff5fbfea80,0,0x7fff5fbfeaa0,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100257b82,0x7fff5fbfe278,0,0x2,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000386f9,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfeac0,0,0x7fff5fbfeaf0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315061,0x7fff5fbfedc0,0,0x7fff5fbfee10,0,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452d4fb,0x7fff5fbfed88,0,0x1e4e3456e144,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10008e80c,0x7fff5fbfeaa0,0,0x1005f82f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120683e,0x7fff5fbff638,0,0x0,4 -tick,0x1e4e34327a7a,0x7fff5fbff088,0,0x1e4e345b1bdc,0 -tick,0x1e4e34315061,0x7fff5fbff100,0,0x7fff5fbff198,0 -tick,0x100394ae6,0x7fff5fbfe608,0,0x10027558d,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430aa84,0x7fff5fbfee60,0,0x1e4e34587250,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d301,0x7fff5fbff290,0,0x0,4 -tick,0x100251e41,0x7fff5fbfed80,0,0x7fff5fbfee10,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ccc7,0x7fff5fbfec20,0,0x10283440a,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315118,0x7fff5fbfec48,0,0x37ec2edffa21,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000647c6,0x7fff5fbfea40,0,0x102019d00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34320f80,0x7fff5fbfea98,0,0x1e4e3454dadf,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b67,0x7fff5fbfebe0,0,0x101009410,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253c37,0x7fff5fbfee48,0,0x1,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c2dd,0x7fff5fbfed60,0,0x10302051d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002618f1,0x7fff5fbfee60,0,0x7fff5fbfeea0,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10027560e,0x7fff5fbfecf0,0,0x11e9a48aa7d9,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011b81d,0x7fff5fbfedb0,0,0x102019b80,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34576641,0x7fff5fbfeed8,0,0x7fff5fbfef30,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912084fe,0x7fff5fbfee00,0,0x7fff5fbfee50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa29,0x7fff5fbfedb0,0,0x7fff5fbfee00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9127cb7e,0x7fff5fbfed18,0,0x1000bd305,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f925a,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002cd1a,0x7fff5fbff038,0,0x8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fcb4,0x7fff5fbfec38,0,0x1000a02fe,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100124cbf,0x7fff5fbfe8f0,0,0x7fff5fbfe920,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026096b,0x7fff5fbfe900,0,0x7fff5fbfea10,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345364e0,134,"length" -code-creation,LoadIC,0x1e4e345364e0,134,"length" -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10019cd44,0x7fff5fbfec20,0,0x10302c675,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100150090,0x7fff5fbfea78,0,0x100254646,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345550a7,0x7fff5fbfec18,0,0xe662347fc9,0,0x1e4e3454da72,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a21,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430ad08,0x7fff5fbfe6e0,0,0x1e4e34334657,0,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34320c40,0x7fff5fbfe8f8,0,0x1e4e3455c67a,0,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100005835,0x7fff5fbff1d0,0,0x0,4 -tick,0x1e4e3456e004,0x7fff5fbfef28,0,0xe6623608b1,0,0x1e4e34399744 -tick,0x1e4e34332fa7,0x7fff5fbfeca0,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454ddb2,0x7fff5fbfec80,0,0xe662304121,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34399201,0x7fff5fbfefb8,0,0x7fff5fbff000,0 -tick,0x1e4e34315061,0x7fff5fbfedc0,0,0x7fff5fbfee10,0,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da171,0x7fff5fbfeb78,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024fb80,0x7fff5fbfe2a0,0,0x11e9a46214b9,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002685ca,0x7fff5fbff1f8,0,0x100269c83,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f2cf3,0x7fff5fbff340,0,0x0,4 -tick,0x1e4e34311321,0x7fff5fbff060,0,0x0,0 -tick,0x1e4e3430da25,0x7fff5fbfed98,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459bf82,0x7fff5fbfed30,0,0x1e4e345949e5,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b1dbc,0x7fff5fbff0a0,0,0x3d27976be39,0 -tick,0x100173bec,0x7fff5fbfe9c0,0,0x0,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10008d8af,0x7fff5fbfef78,0,0x10008e7e3,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbff050,0,0x7fff5fbff090,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91210815,0x7fff5fbfedd0,0,0x7fff5fbfee80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000630f3,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbfc8,0x7fff5fbfed18,0,0x7fff91213b99,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be70c,0x7fff5fbff230,0,0x100000000,0,0x1e4e343f1c43,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912084c8,0x7fff5fbfee60,0,0x7fff5fbfeeb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024b755,0x7fff5fbfebb0,0,0x7f01009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c808e,0x7fff5fbfed08,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3459e4aa,0x7fff5fbff5d0,0,0xe662335941,0 -tick,0x1000df251,0x7fff5fbfec98,0,0xb8c5627912deda0c,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c1c1,0x7fff5fbfe930,0,0x7fff5fbfe980,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000fde48,0x7fff5fbfe998,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432556e,0x7fff5fbfec80,0,0x1e4e34566fc0,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100050dd0,0x7fff5fbfe8e0,0,0x7fff5fbfe920,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3a0,0x7fff5fbfed18,0,0x10000c17f,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e3456e361,0x7fff5fbfef28,0,0xe662304101,0,0x1e4e34399744 -tick,0x1002b0ec1,0x7fff5fbfe850,0,0x7fff5fbfe8a0,0,0x1e4e343e435a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfe868,0,0x10011b9bf,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120c664,0x7fff5fbfe840,0,0x393400000000149,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a0025,0x7fff5fbfee98,0,0x1e4e343af6da,0,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f9315,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455e7c1,0x7fff5fbfef38,0,0x7fff5fbfef70,0,0x1e4e34399727 -tick,0x10011c14c,0x7fff5fbfeae0,0,0x102023a88,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10005baf5,0x7fff5fbfeac0,0,0x101900c80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f11,0x7fff5fbfeaf0,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10003b8ff,0x7fff5fbff6c0,0,0x0,4 -tick,0x100251352,0x7fff5fbfe7b0,0,0x7fff5fbfe818,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019b1f0,0x7fff5fbfefa8,0,0x10024eedd,0,0x1e4e3458be04,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100128239,0x7fff5fbfe900,0,0x4056800000000000,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cf31,0x7fff5fbfec10,0,0x7fff5fbfec30,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf4b7,0x7fff5fbff210,0,0x1,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011addb,0x7fff5fbff010,0,0xa00000,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34560061,0x7fff5fbff138,0,0x7fff5fbff200,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206bdf,0x7fff5fbfee20,0,0x7fff5fbfee50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34597b70,0x7fff5fbfeef8,0,0x37ec2eddef79,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10025503d,0x7fff5fbfeb40,0,0x11e9a432e6b9,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34308503,0x7fff5fbff130,0,0x1e4e3458000c,0,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008e829,0x7fff5fbfee70,0,0x7fff5fbfeea0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfef98,0,0x10011c15d,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580201,0x7fff5fbff200,0,0x7fff5fbff240,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254cf1,0x7fff5fbfebc0,0,0x7fff5fbfecb0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f92d7,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c4a3e,0x7fff5fbfec80,0,0x1000c5e5f,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345ae42c,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170963,0x7fff5fbfea30,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff90f8072c,0x7fff5fbfebe8,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b61b,0x7fff5fbfeba0,0,0x7fff5fbfeca8,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100150091,0x7fff5fbfeb70,0,0x7fff5fbfebd0,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be903,0x7fff5fbfecf0,0,0x101009400,0,0x1e4e34551d37,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012134c,0x7fff5fbff300,0,0x101009400,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001188a1,0x7fff5fbfe9b0,0,0x7fff5fbfea20,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a8141,0x7fff5fbff1d0,0,0xb0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001791c4,0x7fff5fbfebe0,0,0x7fff5fbfec80,3,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452a4d6,0x7fff5fbfee30,0,0x11e9a4242021,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf1ee,0x7fff5fbfe780,0,0x0,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10012eae8,0x7fff5fbfeb80,0,0x7fff5fbfebe0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e1e2,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a21,0x7fff5fbfeb50,0,0x7fff5fbfebb0,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019edbc,0x7fff5fbfead0,0,0x0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315104,0x7fff5fbfed60,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343361e2,0x7fff5fbfeb00,0,0xe662350169,0,0x1e4e34579820,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10016ba86,0x7fff5fbfea80,0,0x300000000,0,0x1e4e34579e65,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454d0c0,0x7fff5fbfebe8,0,0x1e4e343098ce,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100117e91,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000fa2a8,0x7fff5fbfeb80,0,0x100a137f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10022d1fe,0x7fff5fbfed90,0,0x7fff5fbfedc0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100050f4a,0x7fff5fbfede0,0,0x4a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbfefd0,0,0x7fff5fbff010,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345a4237,0x7fff5fbfee80,0,0x7fff5fbfeee0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024aff6,0x7fff5fbfeba0,0,0x2e9dafd0ab19,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f407d,0x7fff5fbfebd0,0,0x1015cdb0a65d251,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daacc,0x7fff5fbfed70,0,0x7fff5fbfeda0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002bf22d,0x7fff5fbfec70,0,0x11e9a4189491,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f4038,0x7fff5fbfeec0,0,0x37ec00000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c8313,0x7fff5fbfec38,0,0x1000bd17c,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10000b19a,0x7fff5fbfedf0,0,0x7fff5fbfee27,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10000b090,0x7fff5fbfecd0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x1e4e3453d368,0x7fff5fbfeda8,0,0x11e9a41f06a1,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f2c26,0x7fff5fbfebd0,0,0x10099a000,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002607ee,0x7fff5fbfef00,0,0x224a48af00000002,0,0x1e4e34320ed1,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100267fd5,0x7fff5fbff170,0,0x7fff5fbff1a0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34551fdc,0x7fff5fbfec30,0,0x7fff5fbfec88,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026b45f,0x7fff5fbfea80,0,0x7fff5fbfeb20,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120332,0x7fff5fbfec00,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435ccf5,0x7fff5fbfeb48,0,0x1e4e343e7832,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100391a5c,0x7fff5fbfebf0,0,0x7fff5fbfec20,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a2442,0x7fff5fbfee40,0,0x11e9a4000000,0,0x1e4e345b4a7f,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfe888,0,0x100124d6b,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100232b31,0x7fff5fbfeec0,0,0x7fff5fbfef20,0,0x1e4e34394aa3,0x1e4e34399727 -tick,0x100117c07,0x7fff5fbfec90,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911dab01,0x7fff5fbfe870,0,0x0,1 -tick,0x1001a97f8,0x7fff5fbfe8c0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe8d0,0,0x0,1 -tick,0x1001a8086,0x7fff5fbfe890,0,0x0,1 -tick,0x1001987ab,0x7fff5fbfe8a0,0,0x0,1 -tick,0x1e4e343e77e1,0x7fff5fbfeb60,0,0x7fff5fbfeb98,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100117e94,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100205974,0x7fff5fbfe9c0,0,0x11e9a5d140b9,0,0x1e4e345b6039,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3434a3ff,0x7fff5fbfea90,0,0x1e4e343a9311,0,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfe8c8,0,0x10011b9bf,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100007ffb,0x7fff5fbfe5c0,0,0x7fff5fbfe600,0,0x1e4e34560bb7,0x1e4e343e426d,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100206bd3,0x7fff5fbff030,0,0x100602a50,0,0x1e4e343f1ac9,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3456724a,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100279cde,0x7fff5fbfecc0,0,0x2,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100063982,0x7fff5fbfefc0,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd0c,0x7fff5fbfefc8,0,0x10011d48c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009fea7,0x7fff5fbfef98,0,0x10005bad8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10025245b,0x7fff5fbfeb90,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100392840,0x7fff5fbfed98,0,0x10010e888,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100206bd3,0x7fff5fbfead0,0,0x100602a50,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100144213,0x7fff5fbff1e0,0,0x37ec00000000,0,0x1e4e343f1de3,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100218e41,0x7fff5fbfedd0,0,0x7fff5fbfee00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523cd,0x7fff5fbfed10,0,0x2e9dafd23ac1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10019ff01,0x7fff5fbfed60,0,0x7fff5fbfedb0,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002afad1,0x7fff5fbfebb0,0,0x7fff5fbfec10,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be531,0x7fff5fbff1d0,0,0x0,3 -tick,0x10012f9fd,0x7fff5fbfe918,0,0x7fff5fbfe9e0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012f836,0x7fff5fbfeac8,0,0x7fff5fbfeb90,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002afbae,0x7fff5fbfeb30,0,0x7fff5fbfeb80,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d470,0x7fff5fbff1c8,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10023adf2,0x7fff5fbfeee0,0,0x3,0,0x1e4e34580210,0x1e4e3459490b,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x10012fa03,0x7fff5fbfe5e8,0,0x7fff5fbfe6b0,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002e4d61,0x7fff5fbfe390,0,0x102023b08,0,0x1e4e343360fa,0x1e4e34320c78,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100122a21,0x7fff5fbfe9b0,0,0x7fff5fbfea10,0,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001709b3,0x7fff5fbfe950,0,0x9,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad90,0x7fff5fbfeb20,0,0x7fff5fbfebe0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100218e4c,0x7fff5fbfeb80,0,0x1,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431196a,0x7fff5fbfeb90,0,0x1e4e3458d5a8,0,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455a71b,0x7fff5fbfee40,0,0x11e9a5c2e499,0,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3455506e,0x7fff5fbfed80,0,0x1e4e3454da72,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3430618e,0x7fff5fbfee40,0,0x1e4e343060e1,0,0x1e4e34570fec,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfecc0,0,0x3fd6f24200000013,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34320c4e,0x7fff5fbfe818,0,0x1e4e3459b784,0,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10020375e,0x7fff5fbfedc0,0,0x11e9a5b00000,0,0x1e4e34570fec,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343269fa,0x7fff5fbfeef0,0,0x1e4e3455eb2b,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e34333008,0x7fff5fbfeb18,0,0x1e4e3454dadf,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d5aa,0x7fff5fbfed98,0,0x1019014b0,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012f9e7,0x7fff5fbfeac8,0,0x7fff5fbfeb90,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10012f958,0x7fff5fbfe0f8,0,0x7fff5fbfe1c0,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002491ca,0x7fff5fbff1f0,0,0x7fff5fbff660,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120ff35,0x7fff5fbfec88,0,0x2,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9371,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbfefd0,0,0x7fff5fbff010,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262bd1,0x7fff5fbfeaf0,0,0x7fff5fbfef50,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100206bd3,0x7fff5fbfead0,0,0x100602a50,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5b99,0x7fff5fbfed80,0,0x101902630,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c4aa9,0x7fff5fbfeee0,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbf93,0x7fff5fbfecb8,0,0x7fff9120c12c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024ed5e,0x7fff5fbfeaf0,0,0x7f015fbfeba0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbfefd0,0,0x7fff5fbff010,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100251e41,0x7fff5fbff4c0,0,0x0,3 -tick,0x1000f987a,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002bfd89,0x7fff5fbfe890,0,0x7fff5fbfe8b8,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002061c1,0x7fff5fbfebd0,0,0x11e9a5b00000,0,0x1e4e345872a1,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b0081,0x7fff5fbfeb20,0,0x7fff5fbfebb0,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100238300,0x7fff5fbfe7d0,0,0x0,1 -tick,0x100235daf,0x7fff5fbfe6a0,0,0x0,1 -tick,0x1002ff8ba,0x7fff5fbfe5f0,0,0x0,1 -code-creation,LoadIC,0x1e4e345b9320,170,"_pusher" -code-creation,LoadIC,0x1e4e345b9320,170,"_pusher" -code-creation,LoadIC,0x1e4e345b93e0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b93e0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b9480,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b9480,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b9520,134,"pair" -code-creation,LoadIC,0x1e4e345b9520,134,"pair" -code-creation,LoadIC,0x1e4e345b95c0,134,"length" -code-creation,LoadIC,0x1e4e345b95c0,134,"length" -code-creation,StoreIC,0x1e4e345b9660,189,"locked" -code-creation,StoreIC,0x1e4e345b9660,189,"locked" -code-creation,LoadIC,0x1e4e345b9080,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b9080,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b9120,134,"_events" -code-creation,LoadIC,0x1e4e345b9120,134,"_events" -code-creation,LoadIC,0x1e4e345b4f80,284,"" -code-creation,LoadIC,0x1e4e345b4f80,284,"" -code-creation,LoadIC,0x1e4e345b50a0,134,"_ended" -code-creation,LoadIC,0x1e4e345b50a0,134,"_ended" -code-creation,LoadIC,0x1e4e345b5140,134,"length" -code-creation,LoadIC,0x1e4e345b5140,134,"length" -code-creation,LoadIC,0x1e4e345b51e0,134,"_queue" -code-creation,LoadIC,0x1e4e345b51e0,134,"_queue" -code-creation,CallIC,0x1e4e345b5280,217,"_process" -code-creation,CallIC,0x1e4e345b5360,492,"write" -code-creation,LoadIC,0x1e4e345b5560,284,"" -code-creation,LoadIC,0x1e4e345b5560,284,"" -code-creation,LoadIC,0x1e4e345b5680,138,"_buffer" -code-creation,LoadIC,0x1e4e345b5680,138,"_buffer" -code-creation,LoadIC,0x1e4e345b5720,138,"_offset" -code-creation,LoadIC,0x1e4e345b5720,138,"_offset" -code-creation,StoreIC,0x1e4e345b57c0,189,"_offset" -code-creation,StoreIC,0x1e4e345b57c0,189,"_offset" -code-creation,CallIC,0x1e4e3457e400,287,"emit" -code-creation,LoadIC,0x1e4e3457e520,134,"_events" -code-creation,LoadIC,0x1e4e3457e520,134,"_events" -code-creation,LoadIC,0x1e4e3457e5c0,134,"domain" -code-creation,LoadIC,0x1e4e3457e5c0,134,"domain" -tick,0x1001a0621,0x7fff5fbfed90,0,0x7fff5fbfee10,0,0x1e4e34394669,0x1e4e3455287e,0x1e4e343993e2 -code-creation,LoadIC,0x1e4e3457e660,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457e660,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457e700,185,"_processing" -code-creation,StoreIC,0x1e4e3457e700,185,"_processing" -code-creation,CallIC,0x1e4e3457e7c0,217,"_process" -code-creation,CallIC,0x1e4e3457e8a0,492,"write" -code-creation,LoadIC,0x1e4e3457eaa0,138,"_offset" -code-creation,LoadIC,0x1e4e3457eaa0,138,"_offset" -code-creation,LoadIC,0x1e4e3457eb40,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457eb40,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457ebe0,185,"_processing" -code-creation,StoreIC,0x1e4e3457ebe0,185,"_processing" -code-creation,CallIC,0x1e4e3457d740,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3457d860,185,"_flush" -code-creation,StoreIC,0x1e4e3457d860,185,"_flush" -code-creation,LoadIC,0x1e4e3457d920,134,"_events" -code-creation,LoadIC,0x1e4e3457d920,134,"_events" -code-creation,LoadIC,0x1e4e3457d9c0,254,"" -code-creation,LoadIC,0x1e4e3457d9c0,254,"" -code-creation,StoreIC,0x1e4e3457dac0,390,"_events" -code-creation,StoreIC,0x1e4e3457dac0,390,"_events" -code-creation,LoadIC,0x1e4e3457dc60,254,"" -code-creation,LoadIC,0x1e4e3457dc60,254,"" -code-creation,LoadIC,0x1e4e3457dd60,134,"_events" -code-creation,LoadIC,0x1e4e3457dd60,134,"_events" -code-creation,CallIC,0x1e4e3457de00,257,"emit" -code-creation,LoadIC,0x1e4e3457df20,134,"_events" -code-creation,LoadIC,0x1e4e3457df20,134,"_events" -code-creation,StoreIC,0x1e4e3457dfc0,189,"locked" -code-creation,StoreIC,0x1e4e3457dfc0,189,"locked" -code-creation,LoadIC,0x1e4e3457e080,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457e080,138,"lockBuffer" -code-creation,CallIC,0x1e4e3457c420,287,"emit" -code-creation,LoadIC,0x1e4e3457c540,134,"_ended" -code-creation,LoadIC,0x1e4e3457c540,134,"_ended" -code-creation,LoadIC,0x1e4e3457c5e0,134,"_queue" -code-creation,LoadIC,0x1e4e3457c5e0,134,"_queue" -code-creation,LoadIC,0x1e4e3457c680,138,"_buffer" -code-creation,LoadIC,0x1e4e3457c680,138,"_buffer" -code-creation,StoreIC,0x1e4e3457c720,189,"_offset" -code-creation,StoreIC,0x1e4e3457c720,189,"_offset" -code-creation,CallIC,0x1e4e3457c7e0,287,"emit" -code-creation,LoadIC,0x1e4e3457c900,134,"domain" -code-creation,LoadIC,0x1e4e3457c900,134,"domain" -code-creation,CallIC,0x1e4e3457c9a0,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3457cac0,185,"_flush" -code-creation,StoreIC,0x1e4e3457cac0,185,"_flush" -code-creation,LoadIC,0x1e4e3457cb80,134,"writable" -code-creation,LoadIC,0x1e4e3457cb80,134,"writable" -code-creation,LoadIC,0x1e4e3457cc20,134,"_pending" -code-creation,LoadIC,0x1e4e3457cc20,134,"_pending" -code-creation,LoadIC,0x1e4e3457ccc0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3457ccc0,134,"_pendingCallbacks" -code-creation,StoreIC,0x1e4e345b0f60,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b0f60,189,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b1020,170,"_pusher" -code-creation,LoadIC,0x1e4e345b1020,170,"_pusher" -code-creation,LoadIC,0x1e4e345b10e0,134,"domain" -code-creation,LoadIC,0x1e4e345b10e0,134,"domain" -tick,0x10019cf36,0x7fff5fbfec00,0,0xa0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454a492,0x7fff5fbfee60,0,0x1e4e3458747a,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87ce,0x7fff5fbfec20,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34332f54,0x7fff5fbfec68,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e0bb,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345b0280,134,"_events" -code-creation,LoadIC,0x1e4e345b0280,134,"_events" -code-creation,LoadIC,0x1e4e345b0320,134,"domain" -code-creation,LoadIC,0x1e4e345b0320,134,"domain" -code-creation,CallIC,0x1e4e345b03c0,492,"execute" -code-creation,LoadIC,0x1e4e345b05c0,254,"" -code-creation,LoadIC,0x1e4e345b05c0,254,"" -code-creation,StoreIC,0x1e4e345739e0,390,"_events" -code-creation,StoreIC,0x1e4e345739e0,390,"_events" -code-creation,LoadIC,0x1e4e34573b80,254,"" -code-creation,LoadIC,0x1e4e34573b80,254,"" -code-creation,CallIC,0x1e4e34573c80,205,"onIncoming" -code-creation,LoadIC,0x1e4e34573d60,284,"" -code-creation,LoadIC,0x1e4e34573d60,284,"" -code-creation,StoreIC,0x1e4e34573e80,420,"_events" -code-creation,StoreIC,0x1e4e34573e80,420,"_events" -code-creation,LoadIC,0x1e4e34574040,284,"" -code-creation,LoadIC,0x1e4e34574040,284,"" -code-creation,LoadIC,0x1e4e34574160,134,"_events" -code-creation,LoadIC,0x1e4e34574160,134,"_events" -code-creation,CallIC,0x1e4e34574200,257,"emit" -code-creation,LoadIC,0x1e4e34574320,134,"_events" -code-creation,LoadIC,0x1e4e34574320,134,"_events" -code-creation,CallIC,0x1e4e345743c0,287,"emit" -code-creation,LoadIC,0x1e4e345744e0,134,"_events" -code-creation,LoadIC,0x1e4e345744e0,134,"_events" -code-creation,CallIC,0x1e4e3456e8c0,287,"emit" -code-creation,LoadIC,0x1e4e3456e9e0,134,"_events" -code-creation,LoadIC,0x1e4e3456e9e0,134,"_events" -code-creation,LoadIC,0x1e4e3456ea80,134,"domain" -code-creation,LoadIC,0x1e4e3456ea80,134,"domain" -code-creation,LoadIC,0x1e4e3456eb20,134,"_events" -code-creation,LoadIC,0x1e4e3456eb20,134,"_events" -code-creation,LoadIC,0x1e4e3456ebc0,134,"domain" -code-creation,LoadIC,0x1e4e3456ebc0,134,"domain" -code-creation,CallIC,0x1e4e3456ec60,277,"removeListener" -code-creation,LoadIC,0x1e4e3456ed80,134,"domain" -code-creation,LoadIC,0x1e4e3456ed80,134,"domain" -tick,0x7fff9199e6fe,0x7fff5fbfe578,1,0x100013f1a,0,0x1e4e3455246b,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456ee20,247,"removeListener" -code-creation,LoadIC,0x1e4e3456ef20,134,"_events" -code-creation,LoadIC,0x1e4e3456ef20,134,"_events" -code-creation,LoadIC,0x1e4e3456efc0,138,"incoming" -code-creation,LoadIC,0x1e4e3456efc0,138,"incoming" -code-creation,CallIC,0x1e4e3456f060,492,"execute" -code-creation,CallIC,0x1e4e34574580,205,"onIncoming" -code-creation,LoadIC,0x1e4e345ad280,138,"incoming" -code-creation,LoadIC,0x1e4e345ad280,138,"incoming" -tick,0x1e4e3430f885,0x7fff5fbff090,0,0x1e4e3431f688,0,0x1e4e343b69fe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34327a60,0x7fff5fbfe990,0,0x1e4e34552947,0,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e345ad320,492,"finish" -code-creation,CallIC,0x1e4e3456c100,492,"finish" -tick,0x10010ca30,0x7fff5fbfeb88,0,0x10000c2b2,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551561,0x7fff5fbfec98,0,0x7fff5fbfecc8,0,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cc71,0x7fff5fbfea80,0,0x7fff5fbfeae0,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100392841,0x7fff5fbfead0,0,0x7fff5fbfeaf0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b5a05,0x7fff5fbfee18,0,0x1e4e3452a47a,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343361fd,0x7fff5fbfeb00,0,0xe662350169,0,0x1e4e34579820,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457c063,0x7fff5fbff0a0,0,0x11e9a4e542e1,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daab5,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d60,0x7fff5fbfec50,0,0x101009400,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025108a,0x7fff5fbfefe0,0,0x7fff5fbff010,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456c300,134,"readable" -code-creation,LoadIC,0x1e4e3456c300,134,"readable" -code-creation,LoadIC,0x1e4e3456c3a0,200,"resume" -code-creation,LoadIC,0x1e4e3456c3a0,200,"resume" -code-creation,CallIC,0x1e4e3456c480,217,"resume" -code-creation,CallIC,0x1e4e3456c560,247,"removeListener" -tick,0x100279be1,0x7fff5fbfece0,0,0x7fff5fbfed20,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34578727,0x7fff5fbfee68,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100169dbf,0x7fff5fbff110,0,0x11e9a4eb6901,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10000b194,0x7fff5fbff038,0,0x10002d804,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa47,0x7fff5fbfed10,0,0x7fff5fbfed40,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b882,0x7fff5fbfef60,0,0x4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121383d,0x7fff5fbfeca0,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8264,0x7fff5fbff160,0,0x1e4e34566eed,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262bd1,0x7fff5fbfea70,0,0x7fff5fbfeed0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfeda8,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011add0,0x7fff5fbff038,0,0x10002d516,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456c660,134,"pair" -code-creation,LoadIC,0x1e4e3456c660,134,"pair" -code-creation,LoadIC,0x1e4e3456c700,134,"writable" -code-creation,LoadIC,0x1e4e3456c700,134,"writable" -code-creation,LoadIC,0x1e4e3456c7a0,134,"_pending" -code-creation,LoadIC,0x1e4e3456c7a0,134,"_pending" -code-creation,LoadIC,0x1e4e3456c840,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3456c840,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3456c8e0,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e3456c8e0,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e3456c980,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e3456c980,189,"_pendingBytes" -tick,0x7fff911dad73,0x7fff5fbfec58,0,0x1000c62a9,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e3456ca40,134,"_events" -code-creation,LoadIC,0x1e4e3456ca40,134,"_events" -code-creation,LoadIC,0x1e4e3456cae0,134,"domain" -code-creation,LoadIC,0x1e4e3456cae0,134,"domain" -code-creation,LoadIC,0x1e4e3456cb80,134,"writable" -code-creation,LoadIC,0x1e4e3456cb80,134,"writable" -code-creation,CallIC,0x1e4e345ad520,200,"write" -code-creation,LoadIC,0x1e4e345acd00,134,"_needDrain" -code-creation,LoadIC,0x1e4e345acd00,134,"_needDrain" -tick,0x1e4e3432556e,0x7fff5fbfee78,0,0x1e4e34551c75,0,0x1e4e343993e2 -code-creation,CallIC,0x1e4e345acda0,257,"emit" -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34556f67,0x7fff5fbfed98,0,0x11e9a4d14ba1,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a9a4f,0x7fff5fbfec50,0,0x101009400,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253bfb,0x7fff5fbfec30,0,0x101009410,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff90f806f5,0x7fff5fbfec18,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e345acec0,189,"_buffer" -code-creation,StoreIC,0x1e4e345acec0,189,"_buffer" -code-creation,LoadIC,0x1e4e345acf80,138,"_binding" -code-creation,LoadIC,0x1e4e345acf80,138,"_binding" -code-creation,LoadIC,0x1e4e345ad020,134,"_flush" -code-creation,LoadIC,0x1e4e345ad020,134,"_flush" -code-creation,StoreIC,0x1e4e345ad0c0,189,"callback" -code-creation,StoreIC,0x1e4e345ad0c0,189,"callback" -code-creation,StoreIC,0x1e4e345ac900,189,"buffer" -code-creation,StoreIC,0x1e4e345ac900,189,"buffer" -tick,0x1e4e34325866,0x7fff5fbfeaa8,0,0x1e4e3455a74d,0,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a07c,0x7fff5fbfeab0,0,0x11e9a4d67c39,0,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459b0dc,0x7fff5fbfe6e0,0,0x1e4e343346a6,0,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038bfb,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34557de9,0x7fff5fbfeda8,0,0x11e9a4d661e1,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da168,0x7fff5fbfe9f8,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d2f0,0x7fff5fbff2a8,0,0x0,4 -tick,0x7fff91206831,0x7fff5fbff358,0,0x0,4 -tick,0x1e4e345b8cc5,0x7fff5fbfee38,0,0x1e4e34394669,0,0x1e4e3455287e,0x1e4e343993e2 -tick,0x100251e41,0x7fff5fbfee30,0,0x7fff5fbfeec0,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e3452ac19,0x7fff5fbfeac8,0,0xfffffffffffffffa,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100256942,0x7fff5fbfef70,0,0x2e9dafd05169,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100268010,0x7fff5fbff170,0,0x7fff5fbff1a0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e343098ac,0x7fff5fbfeea8,0,0x11e9a4ca4891,0,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34322423,0x7fff5fbfec40,0,0xe662354641,0,0x1e4e3431f661,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002758ab,0x7fff5fbfec10,0,0x7fff5fbfec60,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91213842,0x7fff5fbfebe0,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325862,0x7fff5fbff050,0,0x1e4e34551d37,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c086,0x7fff5fbff048,0,0x10100a770,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfeda0,0,0x263e5f570000000a,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfea50,0,0xa,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34307e64,0x7fff5fbff288,0,0x1e4e343f1ec4,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9127cc08,0x7fff5fbfed18,0,0x7fff911f418d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254e4c,0x7fff5fbfebb0,0,0x11e9a4b1ca79,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f93ea,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566b81,0x7fff5fbff200,0,0x7fff5fbff240,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912083bf,0x7fff5fbfec80,0,0x7fff5fbfecd0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10024edbe,0x7fff5fbfe640,0,0x37ec2eda5e59,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000de537,0x7fff5fbfe7a8,0,0x62d29b8d4d465e8b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bd272,0x7fff5fbfe830,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343248c1,0x7fff5fbff028,0,0x11e9a4b7a489,0 -tick,0x10000afa5,0x7fff5fbfecd0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x100117b8d,0x7fff5fbfeca0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002607f2,0x7fff5fbfef00,0,0xd584d7f00000002,0,0x1e4e34320ed1,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455a044,0x7fff5fbff020,0,0x2e9dafd16c09,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010ca4f,0x7fff5fbfe930,0,0x1,0,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e3457c8da,0x7fff5fbfef70,0,0x1e4e343993e2,0 -tick,0x1000bd337,0x7fff5fbfe900,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daa40,0x7fff5fbfe8f0,0,0x7fff5fbfe920,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34552400,0x7fff5fbfee80,0,0x37ec2ed77cd9,0,0x1e4e343993e2 -tick,0x7fff911edebb,0x7fff5fbfece0,0,0x7fff5fbfed60,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34551c7f,0x7fff5fbfec30,0,0x7fff5fbfec88,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf4b7,0x7fff5fbfebc0,0,0x7fff5fbfebe0,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfec00,0,0x101009410,0,0x1e4e3455a80b,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100215900,0x7fff5fbfec18,0,0x100208323,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ae145,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100039cf7,0x7fff5fbfea40,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001481d,0x7fff5fbff350,0,0x9,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10027625e,0x7fff5fbfedd0,0,0x11e9a491ec10,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000f93bc,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343098d2,0x7fff5fbff130,0,0x100000000,0,0x1e4e3456719c,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3451a2a3,0x7fff5fbff288,0,0x1e4e343f1f2c,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34567326,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430c88e,0x7fff5fbfee98,0,0x1e4e345b8057,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fe17,0x7fff5fbfeca8,0,0x7,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfefa8,0,0x10011d48c,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34318203,0x7fff5fbfedb0,0,0xe662304121,0,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100175dc5,0x7fff5fbfef70,0,0x0,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f93ea,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daac7,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100118ac8,0x7fff5fbfea00,0,0x7fff5fbfea30,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d439,0x7fff5fbfecb0,0,0x10000a5e0,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100393080,0x7fff5fbfecf8,0,0x100173a65,0,0x1e4e3431b547,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d470,0x7fff5fbfebc8,0,0x10000c2be,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d1f0,0x7fff5fbfeca8,0,0x10010dc41,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34557170,0x7fff5fbfed98,0,0x1e4e343060e1,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91208531,0x7fff5fbff300,0,0x0,4 -tick,0x1e4e343100b5,0x7fff5fbfec00,0,0x1e4e345b61a4,0,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34327a60,0x7fff5fbfe990,0,0x1e4e34552947,0,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34555df0,0x7fff5fbfe9d8,0,0x0,0,0x1e4e34564a13,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019d00c,0x7fff5fbfec38,0,0x1002c87b0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a2420,0x7fff5fbfed78,0,0x1001a0643,0,0x1e4e34394669,0x1e4e3455287e,0x1e4e343993e2 -tick,0x7fff9120856e,0x7fff5fbfe980,0,0x7fff5fbfe9d0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3c7,0x7fff5fbfe900,0,0x10001a870,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457f7b8,0x7fff5fbfeb40,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912085d3,0x7fff5fbfe860,0,0x7fff5fbfe8b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c306,0x7fff5fbff280,0,0x12fcd0909ce1,0,0x1e4e34551d37,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x1e4e3453c86e,0x7fff5fbfeb48,0,0xe662304121,0,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34552843,0x7fff5fbfee80,0,0x37ec2ed77cd9,0,0x1e4e343993e2 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001787de,0x7fff5fbfeae8,0,0x7fff5fbfec68,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfebe0,0,0x101009410,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b30,0x7fff5fbfebe0,0,0x101009410,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbff050,0,0x7fff5fbff090,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000dec8d,0x7fff5fbfec28,0,0xcc5c7903b1b11cb4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430da29,0x7fff5fbff160,0,0x1e4e34567ab6,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262bd1,0x7fff5fbfeaf0,0,0x7fff5fbfef50,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206bee,0x7fff5fbfedf0,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34306192,0x7fff5fbfed70,0,0x4273e105150ba000,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100277407,0x7fff5fbfe618,0,0x11e9a47a46c9,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100170e49,0x7fff5fbff4c0,0,0x0,3 -tick,0x7fff9120fdd1,0x7fff5fbfeb38,0,0x7fff912135ae,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001a2a74,0x7fff5fbfe7b0,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91213b5f,0x7fff5fbfe820,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175db0,0x7fff5fbfec50,0,0x101009400,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a0621,0x7fff5fbfed90,0,0x7fff5fbfee10,0,0x1e4e34394669,0x1e4e3455287e,0x1e4e343993e2 -tick,0x1002609db,0x7fff5fbfe830,0,0x7fff5fbfe8c0,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1002523a1,0x7fff5fbff3d0,0,0x0,3 -tick,0x1e4e34306182,0x7fff5fbfead0,0,0x1e4e343060e1,0,0x1e4e34320e97,0x1e4e34579bae,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459b0c5,0x7fff5fbfeb90,0,0x1e4e343346a6,0,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432e387,0x7fff5fbfec80,0,0x1e4e3459b690,0,0x1e4e3457b6a6,0x1e4e343e8cc4,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf6d1,0x7fff5fbfede0,0,0x7fff5fbfee08,0,0x1e4e3455a80b,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34309889,0x7fff5fbfeb60,0,0x1e4e3458e070,0,0x1e4e343b67b1,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34311984,0x7fff5fbfedc8,0,0x1e4e345554e2,0,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf1ee,0x7fff5fbfe9e0,0,0x101009400,0,0x1e4e3455a80b,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430ac02,0x7fff5fbfed60,0,0x1e4e3431b547,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be510,0x7fff5fbfee48,0,0x1002beadf,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100392848,0x7fff5fbff178,0,0x0,4 -tick,0x1000de8e5,0x7fff5fbfe7a8,0,0x52d29baf55462dda,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430b6a4,0x7fff5fbfee20,0,0x1e4e3452a4a4,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311980,0x7fff5fbfecd0,0,0x1e4e345a354c,0,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025241c,0x7fff5fbff070,0,0x0,3 -tick,0x1e4e34563578,0x7fff5fbfed60,0,0x101009400,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf28a,0x7fff5fbfedd0,0,0x7fff00000007,0,0x1e4e3455ab16,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3454ddd6,0x7fff5fbfecb8,0,0x0,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34583dbe,0x7fff5fbfeec0,0,0x37ec2edd4459,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10000b330,0x7fff5fbfe8d0,0,0x0,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100124221,0x7fff5fbfedc0,0,0x7fff5fbfee00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002cd8e1,0x7fff5fbfed80,0,0x7fff5fbfeda0,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912135b1,0x7fff5fbfec00,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010dbc1,0x7fff5fbff0b0,0,0x7fff5fbff0f0,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbf90,0x7fff5fbfecc8,0,0x7fff91213830,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fd78,0x7fff5fbfecf8,0,0x7fff9120c7cd,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbb60,0x7fff5fbfed18,0,0x7fff912154f3,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fccb,0x7fff5fbfee10,0,0x7fff5fbfee50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213198,0x7fff5fbfec60,0,0xffffffffffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbfeff0,0,0x7fff5fbff030,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9871,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001447fa,0x7fff5fbfeea0,0,0x7fff5fbfeef0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x1e4e345553c1,0x7fff5fbfec60,0,0x7fff5fbfed20,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100207e01,0x7fff5fbfec60,0,0x7fff5fbfed80,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454df27,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c7b8,0x7fff5fbfee08,0,0x10001866b,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e345ad248,0x7fff5fbfeee8,0,0x1e4e343a9bb3,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34588001,0x7fff5fbff038,0,0x10024ed90,0 -tick,0x1e4e34327a7f,0x7fff5fbff088,0,0x1e4e345b1bdc,0 -tick,0x10030f5e1,0x7fff5fbff160,0,0x0,3 -tick,0x1e4e34552802,0x7fff5fbfee80,0,0x37ec2ed77cd9,0,0x1e4e343993e2 -tick,0x100005713,0x7fff5fbff1d0,0,0x0,4 -tick,0x1e4e3453d0ea,0x7fff5fbfeda8,0,0x11e9a446d0c0,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012040a,0x7fff5fbfea80,0,0x7fff5fbfeaa0,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b67,0x7fff5fbfe810,0,0x101009410,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbcda,0x7fff5fbfece8,0,0x7fff911f1b1b,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1000de074,0x7fff5fbfe9c0,0,0x7fff5fbfe9d0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cf31,0x7fff5fbfeda0,0,0x7fff5fbfedc0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e345884bf,0x7fff5fbff038,0,0x10024ed90,0 -tick,0x1e4e34328575,0x7fff5fbfec18,0,0x1e4e34552010,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457c780,0x7fff5fbfef88,0,0x1e4e343993be,0 -tick,0x7fff911dbd02,0x7fff5fbfe928,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e343996f8,0x7fff5fbfef88,0,0xe662304121,0 -tick,0x1002c3c54,0x7fff5fbfe920,0,0x1,0,0x1e4e3455497b,0x1e4e34564c92,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34588d65,0x7fff5fbfeb50,0,0x3d279763d01,0,0x1e4e345adfba,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343262cc,0x7fff5fbfef88,0,0x1e4e343996f0,0 -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3456778a,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f4038,0x7fff5fbfef30,0,0x10280ed78,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100122a21,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfeb90,0,0x14,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213b50,0x7fff5fbfed00,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34592fca,0x7fff5fbff0a0,0,0x7fff5fbff0f8,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c05a,0x7fff5fbfee00,0,0x7fff5fbfee50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325595,0x7fff5fbff160,0,0x1e4e34566fc0,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008d9e6,0x7fff5fbfefe0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa7f,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100218e51,0x7fff5fbfeb40,0,0x1,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012f03f,0x7fff5fbff118,0,0x0,3 -tick,0x1e4e3456dbcc,0x7fff5fbfedc8,0,0x37ec2eddef59,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911da168,0x7fff5fbfeb78,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100114460,0x7fff5fbff1c8,0,0x0,4 -tick,0x10008da06,0x7fff5fbfeae0,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfe848,0,0x100121c6d,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100232b31,0x7fff5fbfeb10,0,0x7fff5fbfeb70,0,0x1e4e343b6791,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbcf4,0x7fff5fbff2b8,0,0x0,4 -tick,0x1001a81e6,0x7fff5fbfead8,0,0x3d2797682b9,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c142,0x7fff5fbfe820,0,0x101901ad0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100261b7f,0x7fff5fbfeb00,0,0x7fff5fbfeb30,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e345ac120,189,"_buffer" -code-creation,StoreIC,0x1e4e345ac120,189,"_buffer" -code-creation,LoadIC,0x1e4e345abee0,138,"_binding" -code-creation,LoadIC,0x1e4e345abee0,138,"_binding" -code-creation,LoadIC,0x1e4e345abf80,134,"_flush" -tick,0x7fff9199e6fe,0x7fff5fbfeb18,0,0x7fff9125a857,0,0x1e4e34399604 -code-creation,LoadIC,0x1e4e345abf80,134,"_flush" -code-creation,StoreIC,0x1e4e345a2100,189,"callback" -code-creation,StoreIC,0x1e4e345a2100,189,"callback" -code-creation,StoreIC,0x1e4e345a21c0,189,"buffer" -code-creation,StoreIC,0x1e4e345a21c0,189,"buffer" -tick,0x1e4e343100b5,0x7fff5fbfeeb0,0,0x1e4e34583d0a,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100255038,0x7fff5fbfee50,0,0x11e9a4141299,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34552a43,0x7fff5fbfe730,0,0x0,0,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff912137ff,0x7fff5fbff2b0,0,0x7fff5fbff710,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be51d,0x7fff5fbfea08,0,0x11e9a4187bd9,0,0x1e4e3455a74d,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b684b,0x7fff5fbfec30,0,0x7fff5fbfec60,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e14b,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254e46,0x7fff5fbfec10,0,0x7fff5fbfec60,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ece1,0x7fff5fbfeab0,0,0x7fff5fbfeb10,0,0x1e4e34588ee2,0x1e4e345adfba,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457e363,0x7fff5fbfeb70,0,0x101009400,0,0x1e4e34359ad4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024bb41,0x7fff5fbfe9e0,0,0x7fff5fbfea10,0,0x1e4e345852c8,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024fd7a,0x7fff5fbfe790,0,0x101009410,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3c7,0x7fff5fbff420,0,0x100013f1a,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100267f70,0x7fff5fbff1f8,0,0x100269c83,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100117c07,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fce8,0x7fff5fbfec20,0,0x7fff5fbfec60,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9267,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523ac,0x7fff5fbfef70,0,0x101009400,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100315091,0x7fff5fbff020,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100249464,0x7fff5fbfee70,0,0x101009410,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdcc,0x7fff5fbfed50,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd0c,0x7fff5fbfefc8,0,0x10011d48c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008e890,0x7fff5fbfefd0,0,0x1005f82f0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff90f8101c,0x7fff5fbfed68,0,0x1002cd8f4,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34567187,0x7fff5fbff080,0,0xe662304161,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10019e080,0x7fff5fbfeb18,0,0x1002c6177,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201b01,0x7fff5fbfee30,0,0x7fff5fbfee50,0,0x1e4e34570fec,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100050e26,0x7fff5fbfe8e0,0,0x7fff5fbfe920,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f05,0x7fff5fbfedf8,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x1002afeb0,0x7fff5fbfeb28,0,0x1002afb9d,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455f340,0x7fff5fbfebf8,0,0x1e4e345b5e69,0,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daabb,0x7fff5fbfe6f0,0,0x0,1 -tick,0x100197a50,0x7fff5fbfe780,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe750,0,0x0,1 -tick,0x100197a2c,0x7fff5fbfe780,0,0x0,1 -tick,0x100117a14,0x7fff5fbff350,0,0x7fff5fbff3a0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34599954,0x7fff5fbfed80,0,0x101009410,0,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343985d5,0x7fff5fbfedf8,0,0xe662304121,0,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10039517c,0x7fff5fbfed68,0,0x100044dfe,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10002cc80,0x7fff5fbfeb50,0,0x7fff5fbfebb0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343080bf,0x7fff5fbfec70,0,0x1e4e34567ab6,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad57,0x7fff5fbfec70,0,0x7fff5fbfed30,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10000c2ad,0x7fff5fbfebd0,0,0xd9c9ff15a96f5556,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253ba4,0x7fff5fbfed40,0,0x101009410,0,0x1e4e34551d37,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038f36,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100114761,0x7fff5fbff7c0,0,0x0,4 -tick,0x1e4e34354848,0x7fff5fbfeda0,0,0x1e4e34557e3c,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309840,0x7fff5fbfee18,0,0x1e4e3455a63b,0,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000a02c0,0x7fff5fbfe9a0,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10004502e,0x7fff5fbff390,0,0x0,4 -tick,0x100044fd7,0x7fff5fbff390,0,0x0,4 -tick,0x1e4e3433002e,0x7fff5fbfeec8,0,0x1e4e343aa909,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002012e4,0x7fff5fbfe7b0,0,0x11e9a5dff4e8,0,0x1e4e3453c902,0x1e4e343e436a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343361fd,0x7fff5fbfeae0,0,0xe662350169,0,0x1e4e34584ba3,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f407d,0x7fff5fbfeec0,0,0x37ec00000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100391a5c,0x7fff5fbfef40,0,0x7fff5fbfef70,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002554ac,0x7fff5fbfebb0,0,0x11e9a5ca15f1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3f5f,0x7fff5fbfeeb0,0,0x7fff5fbfeec0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121336e,0x7fff5fbfec90,0,0xfffffffffff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3456777c,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10018e557,0x7fff5fbfed90,0,0x1003edf26,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x7fff911f411a,0x7fff5fbfed50,0,0x200b5005fbfee2c,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34551c90,0x7fff5fbfe998,0,0x1002be632,0,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a407,0x7fff5fbff020,0,0x2e9dafd16c09,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9127cbc6,0x7fff5fbfeca8,0,0x10011d48c,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e2ea,0x7fff5fbfec70,0,0x11e9a5b118f1,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100275a78,0x7fff5fbfec48,0,0x102023a88,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010ca31,0x7fff5fbfeb80,0,0x7fff5fbfebe0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011ff51,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100252342,0x7fff5fbfed90,0,0x7fff5fbfee40,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b29c0,0x7fff5fbfe860,0,0x102023b18,0,0x1e4e343e435a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34328584,0x7fff5fbff480,0,0x1e4e34552010,0,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x100249398,0x7fff5fbff110,0,0x0,3 -tick,0x1e4e3454e01c,0x7fff5fbfee10,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff9120c059,0x7fff5fbfe8c8,0,0x7fff912068f8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253ae1,0x7fff5fbfe910,0,0x7fff5fbfe940,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452d4e5,0x7fff5fbfed88,0,0x1e4e3456e144,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3454d4d0,0x7fff5fbfec98,0,0x11e9a5a17131,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10019ccf1,0x7fff5fbff260,0,0x103096852,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10016ba31,0x7fff5fbfeaa0,0,0x7fff5fbfeaf0,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343259e8,0x7fff5fbfe698,0,0x1e4e3455c3de,0,0x1e4e34334687,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024fa60,0x7fff5fbfe650,0,0x3d2797e3fb9,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daac1,0x7fff5fbfe920,0,0x7fff5fbfe940,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a41c,0x7fff5fbfeaa8,0,0x11e9a5a908a9,0,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001864f0,0x7fff5fbfe7d0,0,0x7fff5fbfe918,0,0x1e4e343360fa,0x1e4e34579820,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001ff1b6,0x7fff5fbfee10,0,0x37ec2edd4701,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c0dc,0x7fff5fbfecc0,0,0x3f364000000002d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432554b,0x7fff5fbff050,0,0x1e4e3455246b,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011add1,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1b6b,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9127cbc6,0x7fff5fbff018,0,0x10011c1f9,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dab12,0x7fff5fbfefc0,0,0x7fff5fbff000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa32,0x7fff5fbfecf0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002c936e,0x7fff5fbfed30,0,0x102023a68,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002cbe4,0x7fff5fbff038,0,0x8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012123f,0x7fff5fbff510,0,0x0,4 -tick,0x100122a34,0x7fff5fbfef30,0,0x7fff5fbfef50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100018650,0x7fff5fbfecc0,0,0x102051fc0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34587f79,0x7fff5fbfebe8,0,0x7fff5fbfec18,0,0x1e4e345603e5,0x1e4e345a995d,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b7e2,0x7fff5fbfeb70,0,0x101901e40,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608e7,0x7fff5fbfeab0,0,0x3885c40b0000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454dff9,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e345917a9,0x7fff5fbff120,0,0x11e900000000,0 -tick,0x1002761d8,0x7fff5fbfe5e0,0,0x600000000,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025241c,0x7fff5fbfef70,0,0x2e9dafd174c9,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001211e0,0x7fff5fbff170,0,0x0,4 -tick,0x1e4e345ae708,0x7fff5fbfeb78,0,0x2b498da6b8e9,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100219ab1,0x7fff5fbff1c0,0,0x0,4 -tick,0x1001785e1,0x7fff5fbfec90,0,0x7fff5fbfecc0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e34394a63,0x7fff5fbfef50,0,0x37ec2edd43f1,0,0x1e4e34399727 -tick,0x1002c0152,0x7fff5fbfeb40,0,0x2,0,0x1e4e34320e97,0x1e4e34571f56,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001791c4,0x7fff5fbfeb00,0,0x11e9a584bf19,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454df84,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d1f1,0x7fff5fbfef60,0,0x7fff5fbfef90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x100252464,0x7fff5fbff0e0,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458d119,0x7fff5fbfec00,0,0xe662330751,0,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454dff9,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10011c18a,0x7fff5fbfeac0,0,0x102023a88,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120340,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3430c55e,0x7fff5fbfeb10,0,0x1e4e3455c716,0,0x1e4e3458e112,0x1e4e343b67b1,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9121349a,0x7fff5fbfec00,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfef90,0,0x7fff5fbfefc0,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfee00,0,0x2e9dafd13ad1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100175dc5,0x7fff5fbfef70,0,0x0,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df436,0x7fff5fbfecc0,0,0x102025a0b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c8089,0x7fff5fbfee50,0,0x7fff5fbfee80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5e7a,0x7fff5fbfeeb8,0,0x100075bc9,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34592e4c,0x7fff5fbff208,0,0x1e4e34594a7d,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c18a,0x7fff5fbff530,0,0x0,3 -tick,0x1000f981e,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343083a2,0x7fff5fbfed88,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002018df,0x7fff5fbfeb30,0,0x102023b08,0,0x1e4e343aac0a,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfeaf8,0,0x100120174,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34321001,0x7fff5fbfec50,0,0xe662304121,0,0x1e4e3454dadf,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455e7d0,0x7fff5fbfef20,0,0x11e9a57b1eb9,0,0x1e4e343949fb,0x1e4e34399727 -tick,0x1e4e34324102,0x7fff5fbfee08,0,0x224c00000000,0,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431520a,0x7fff5fbfed40,0,0xbc500000000,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10022d1fe,0x7fff5fbfeca0,0,0x7fff5fbfecd0,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100218e41,0x7fff5fbfeca0,0,0x7fff5fbfecd0,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100261b6a,0x7fff5fbfecd0,0,0x3d2797ecca1,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430adbf,0x7fff5fbfeb90,0,0x1e4e34334657,0,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455abca,0x7fff5fbfeaf8,0,0x1020259f0,0,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002761d0,0x7fff5fbfebb8,0,0x10024ed90,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100257b82,0x7fff5fbfe628,0,0x2,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024b898,0x7fff5fbfec30,0,0x101009410,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343e78f3,0x7fff5fbfeb50,0,0x11e9a5694459,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309dc8,0x7fff5fbfec78,0,0x1e4e345afdf3,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201841,0x7fff5fbfeb90,0,0x7fff5fbfebb8,0,0x1e4e343aac0a,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c3a8e,0x7fff5fbfe920,0,0x1,0,0x1e4e3455497b,0x1e4e34564c92,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432e4d7,0x7fff5fbff560,0,0x1e4e343b64c9,0,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x1002773b3,0x7fff5fbfde38,0,0x11e9a56e6bd1,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3456d6c1,0x7fff5fbfef78,0,0x7fff5fbfefb8,0 -tick,0x1e4e3432954a,0x7fff5fbfeba0,0,0x1e4e34359c80,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34320e7d,0x7fff5fbfeb98,0,0xe662351209,0,0x1e4e34571f56,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10004cf0c,0x7fff5fbff810,0,0x0,4 -tick,0x10010d3c7,0x7fff5fbff1a0,0,0x0,4 -tick,0x1e4e3453c6d2,0x7fff5fbff0e8,0,0x37ec2edcc799,0,0x1e4e3456719c,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c306,0x7fff5fbfea60,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd10b,0x7fff5fbfedd8,0,0x1000c6288,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100248ffe,0x7fff5fbfee30,0,0x101009410,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100118d4a,0x7fff5fbfeec0,0,0x102023a68,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002cb40,0x7fff5fbfefe0,0,0x103c407b0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912083bc,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34327aa8,0x7fff5fbff138,0,0x1e4e34567081,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34567809,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34576864,0x7fff5fbff318,0,0x11e9a55a18d9,0,0x1e4e345984df -code-creation,LazyCompile,0x1e4e3456ac20,576,"SlowBuffer.slice buffer.js:179",0xe662363638,~ -code-creation,LazyCompile,0x1e4e3456ae60,940,"SlowBuffer.slice buffer.js:179",0xe662363638,* -code-creation,LazyCompile,0x1e4e3456b220,320,"EncryptedStream._puller tls.js:688",0x3d2797705d0,~ -code-creation,LazyCompile,0x1e4e3456b360,442,"EncryptedStream._puller tls.js:688",0x3d2797705d0,* -tick,0x1000f9932,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100075742,0x7fff5fbfea70,0,0x7fff5fbfead0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfe710,1,0x10000a04c,3,0x1e4e3453ed3f,0x1e4e3454d637,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34310085,0x7fff5fbfeeb0,0,0x1e4e34583ea8,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x100262301,0x7fff5fbfe910,0,0x7fff5fbfe9b8,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551561,0x7fff5fbfece8,0,0x7fff5fbfed18,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c3c46,0x7fff5fbfe9f0,0,0x1,0,0x1e4e3455497b,0x1e4e343a8fe7,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34394785,0x7fff5fbfef30,0,0x11e9a54299a9,0 -tick,0x10019ed60,0x7fff5fbfe920,0,0x0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001203f6,0x7fff5fbfeb20,0,0x7fff5fbfeb40,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345b1b61,0x7fff5fbff0b8,0,0x7fff5fbff100,0 -tick,0x10005119c,0x7fff5fbfe820,0,0xaabee816aa1,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332fa2,0x7fff5fbfec30,0,0x1e4e3454d0f5,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10004675d,0x7fff5fbfec70,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001203f6,0x7fff5fbfecf0,0,0x7fff5fbfed10,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff912084f1,0x7fff5fbff300,0,0x0,4 -tick,0x1002608da,0x7fff5fbfe860,0,0x23d2583d0000000a,0,0x1e4e3455c3de,0x1e4e34588883,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100261bc7,0x7fff5fbfea90,0,0x2e9dafd14161,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430618e,0x7fff5fbfeb00,0,0x1e4e343060e1,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001909dc,0x7fff5fbff2d0,0,0x0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001864f0,0x7fff5fbfe890,0,0x7fff5fbfe9a8,0,0x1e4e34321bd7,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000b019,0x7fff5fbfec10,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8101,0x7fff5fbfeac0,0,0x7fff5fbfeaf0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345983f1,0x7fff5fbff368,0,0x1,0 -tick,0x1e4e34354822,0x7fff5fbfeb90,0,0x1e4e3454d19f,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100046bb8,0x7fff5fbff380,0,0x0,4 -tick,0x1e4e3430aa4a,0x7fff5fbfef68,0,0x1e4e345b4410,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10009fefa,0x7fff5fbfed90,0,0x189,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b89a,0x7fff5fbfef60,0,0x4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de317,0x7fff5fbfec28,0,0xcc5c79038b93a8b4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100274920,0x7fff5fbfece8,0,0x10027566d,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afcf,0x7fff5fbfee80,0,0x2e9dafd23ac1,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254601,0x7fff5fbfee20,0,0x7fff5fbfee70,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa47,0x7fff5fbfee00,0,0x7fff5fbfee20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345553c1,0x7fff5fbff140,0,0x7fff5fbff200,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34594aa2,0x7fff5fbff218,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001ff1ee,0x7fff5fbfed90,0,0x102019b80,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c824,0x7fff5fbff570,0,0x0,4 -code-creation,CallIC,0x1e4e3456b520,492,"encIn" -tick,0x10002fd01,0x7fff5fbfecf0,0,0x7fff5fbfed30,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002523cd,0x7fff5fbfead0,0,0x2e9dafd17459,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff912154c7,0x7fff5fbfe860,0,0x7fff5fbfe880,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b0db,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e3431b40e,0x7fff5fbfed90,0,0x1e4e34557b9c,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431196e,0x7fff5fbfec18,0,0x1e4e345554e2,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100064450,0x7fff5fbfee80,0,0x102019d00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x10026f141,0x7fff5fbfea00,0,0x7fff5fbfeaa0,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a2421,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34566eef,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608b5,0x7fff5fbfef70,0,0x0,3 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002552b1,0x7fff5fbfe7a0,0,0x1020259f0,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431818e,0x7fff5fbfe8d0,0,0xe662304121,0,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3ef,0x7fff5fbfeb80,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175da2,0x7fff5fbfea90,0,0x3d2797f6031,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c4956,0x7fff5fbfe980,0,0x1000c5e5f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3433007f,0x7fff5fbfeec8,0,0x1e4e343aa909,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfed30,0,0x36d6f25000000011,0,0x1e4e345b4543,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455a76d,0x7fff5fbff020,0,0x2e9dafd16c09,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019fbd8,0x7fff5fbff260,0,0x2e9dafd059b9,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34567269,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c122,0x7fff5fbfe930,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325862,0x7fff5fbfeb80,0,0x1e4e3455a74d,0,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025470e,0x7fff5fbfeac0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100005c38,0x7fff5fbfe940,0,0x7fff5fbfe9b0,0,0x1e4e3454d2d8,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100194120,0x7fff5fbfe978,0,0x100194453,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911db106,0x7fff5fbfed08,0,0x1000bd0fd,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100117b71,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012ec01,0x7fff5fbff098,0,0x10002ff1d,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bcdc4,0x7fff5fbfee40,0,0x7fff5fbfee60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be642,0x7fff5fbfeee0,0,0x102023a70,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd10c,0x7fff5fbfedc0,0,0x7fff5fbfedf0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b8b3,0x7fff5fbfeed0,0,0x4,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbfce,0x7fff5fbfed18,0,0x7fff91213b99,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa53,0x7fff5fbfee30,0,0x7fff5fbfee60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10026081f,0x7fff5fbfe9e0,0,0x2ad95d0d0000000a,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1b6b,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002772f8,0x7fff5fbfe520,0,0x5,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002523cd,0x7fff5fbfe9d0,0,0x2e9dafd14c19,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e345710e0,0x1e4e3459dd67,0x1e4e343e8c98,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456dfa3,0x7fff5fbfedd0,0,0x5,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3432516f,0x7fff5fbfee78,0,0x1e4e345760c1,0,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100394df2,0x7fff5fbfe878,0,0x10011b9bf,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608d7,0x7fff5fbfeba0,0,0x3fd6f2420000000e,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f93ea,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012134c,0x7fff5fbff510,0,0x0,3 -tick,0x7fff9120616c,0x7fff5fbff398,0,0x7fff91206c07,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000af1d,0x7fff5fbfebd0,1,0x10000af1c,4,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10021ad98,0x7fff5fbfe6d0,0,0x7f01009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002618fc,0x7fff5fbfeda0,0,0x101009410,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1003009ca,0x7fff5fbfe6c0,0,0x0,1 -tick,0x1001a8c20,0x7fff5fbfe708,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe6e0,0,0x0,1 -tick,0x1001a8bf0,0x7fff5fbfe708,0,0x0,1 -tick,0x1001987fa,0x7fff5fbfe6b0,0,0x0,1 -tick,0x1001a8050,0x7fff5fbfe6a8,0,0x0,1 -tick,0x1e4e3439921f,0x7fff5fbfef90,0,0xe662304121,0 -tick,0x100257b82,0x7fff5fbfe278,0,0x2,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f2d90,0x7fff5fbff340,0,0x0,4 -tick,0x100169d86,0x7fff5fbfec30,0,0x11e9a4ef3ff1,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a2700,0x7fff5fbfeb90,0,0x1e4e34359ad4,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34315212,0x7fff5fbfed98,0,0x11e9a4d23809,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201c04,0x7fff5fbfeb80,0,0x7fff5fbfec18,0,0x1e4e34570fec,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afcf,0x7fff5fbfed80,0,0x12fcd0905831,0,0x1e4e34551d37,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024fd38,0x7fff5fbfe790,0,0x101009410,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3453c601,0x7fff5fbfecd8,0,0x7fff5fbfed18,0,0x1e4e345b7896,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254e42,0x7fff5fbff090,0,0x11e9a4d83e19,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100172c61,0x7fff5fbfe840,0,0x7fff5fbfe8c0,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120c21b,0x7fff5fbff260,0,0x0,4 -tick,0x10019f444,0x7fff5fbfeaf0,0,0x102023a88,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b1aa,0x7fff5fbfeca0,0,0x11e9a4db6f19,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100201b8c,0x7fff5fbff010,0,0x11e9a4dca621,0,0x1e4e3458be04,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002774ef,0x7fff5fbfe618,0,0x11e9a4dd6a91,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100250ebd,0x7fff5fbfec88,0,0x11e9a4ddbd59,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566c2f,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8109,0x7fff5fbfeef8,0,0x5,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91210801,0x7fff5fbfec30,0,0x7fff5fbfece0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002d912,0x7fff5fbff070,0,0x100000000,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3459c102,0x7fff5fbff210,0,0x1e4e34594a9e,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345785e1,0x7fff5fbfee80,0,0x7fff5fbfeed8,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b801d,0x7fff5fbfeea0,0,0x1e4e345769b4,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254e2c,0x7fff5fbfeb40,0,0x11e9a4c13d29,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100171279,0x7fff5fbff480,0,0x0,0 -tick,0x7fff911daab0,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345b684b,0x7fff5fbfed40,0,0x1e4e3432102a,0,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x100260845,0x7fff5fbfebf0,0,0x3572042d00000004,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1001a2421,0x7fff5fbfed60,0,0x7fff5fbfed80,0,0x1e4e34570fec,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002491ca,0x7fff5fbff160,0,0x0,3 -tick,0x100260966,0x7fff5fbfe980,0,0x100000000,0,0x1e4e3455a74d,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100038ee9,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000384fe,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100075b5a,0x7fff5fbfe9e0,0,0x100000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011fb78,0x7fff5fbfeb50,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x100208281,0x7fff5fbfec60,0,0x7fff5fbfed80,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x1e4e345b5481,0x7fff5fbfed30,0,0x7fff5fbfed88,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100171228,0x7fff5fbff6e0,0,0x0,0 -tick,0x100232b41,0x7fff5fbfebd0,0,0x7fff5fbfec00,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100172261,0x7fff5fbfeac0,0,0x7fff5fbfeaf0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x1e4e3455e7f2,0x7fff5fbfef20,0,0x3d2797ecca1,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e34555092,0x7fff5fbfea38,0,0xe662347fc9,0,0x1e4e343a8d6e,0x1e4e343a924b,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100232b9c,0x7fff5fbfed90,0,0x800000000,0,0x1e4e3456bed2,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be568,0x7fff5fbff1d0,0,0x0,3 -tick,0x100117e30,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100172c6b,0x7fff5fbfe8a0,0,0x7fff5fbfe920,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10016d723,0x7fff5fbfe850,0,0x7fff5fbfe890,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100268ddc,0x7fff5fbfea30,0,0x100000001,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfeb78,0,0x100120174,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34320ea6,0x7fff5fbff070,0,0xe662340369,0,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459ba2e,0x7fff5fbfe838,0,0x7fff5fbfe890,0,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfe9e0,0,0x2ad95d0d0000000a,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c611a,0x7fff5fbfee00,0,0x7fff5fbfee20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfed00,0,0x7fff5fbfed40,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002d7ff,0x7fff5fbff040,0,0x7fff5fbff0c0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213b6e,0x7fff5fbfed20,0,0x5fbfed50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262bed,0x7fff5fbfe640,0,0x3d2797e3d01,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002492c0,0x7fff5fbfee20,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100050445,0x7fff5fbff6e0,0,0x0,4 -tick,0x1000f9982,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002608ef,0x7fff5fbfeab0,0,0x3b2c07d10000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfeab0,0,0x3572042d0000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452d535,0x7fff5fbfeee0,0,0x1e4e3456e144,0,0x1e4e34399744 -tick,0x1000f92dc,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011fb75,0x7fff5fbfeb50,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3451d5f7,0x7fff5fbfee28,0,0x1e4e34398b06,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34519d12,0x7fff5fbfec78,0,0x1e4e3454deac,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a81e9,0x7fff5fbfe758,0,0x1001a2a44,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34306146,0x7fff5fbfefe0,0,0x0,0,0x1e4e3455ab16,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10022d171,0x7fff5fbfec60,0,0x7fff5fbfed10,0,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e345b6825,0x7fff5fbfec88,0,0x1e4e3454e2fc,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34564c46,0x7fff5fbfe9b8,0,0x10000c2be,0,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34332fa2,0x7fff5fbfec30,0,0x1e4e3454d0f5,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345994c1,0x7fff5fbfedc8,0,0x7fff5fbfee48,0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345aedfe,0x7fff5fbff0a0,0,0x1e4e3457bd81,0 -tick,0x1e4e345807e4,0x7fff5fbfecb0,0,0x0,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afbe,0x7fff5fbfe6c0,0,0x2e9dafd18fb1,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455d828,0x7fff5fbfec18,0,0x101009400,0,0x1e4e34555948,0x1e4e3453d29b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34578740,0x7fff5fbfe988,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f927d,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfe8c0,0,0x263e5f570000000a,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455a790,0x7fff5fbff068,0,0xe662304121,0,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002523a1,0x7fff5fbfe5f0,0,0x7fff5fbfe6e0,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024b17c,0x7fff5fbfe880,0,0x2e9dafd05104,0,0x1e4e343aac0a,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000de513,0x7fff5fbfe748,0,0xbc20e3901e580b1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455ab06,0x7fff5fbff020,0,0x2e9dafd16c09,0,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff91206874,0x7fff5fbfe930,0,0x7fff5fbfe950,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfeb70,0,0xcc6ac0600000031,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000deaba,0x7fff5fbfec28,0,0xcc5c7903020390fc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f200e,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002597e8,0x7fff5fbfecc0,0,0x7fff5fbfed30,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34567a46,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c186,0x7fff5fbfefc0,0,0x102023a68,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457efa1,0x7fff5fbff178,0,0x7fff5fbff200,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3455549c,0x7fff5fbff120,0,0x46a50a,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbfc8,0x7fff5fbfecc8,0,0x7fff91213b58,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002490e3,0x7fff5fbfee30,0,0x101009410,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100218e81,0x7fff5fbff530,0,0x0,4 -tick,0x7fff911daa4d,0x7fff5fbfee30,0,0x7fff5fbfef20,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911dad61,0x7fff5fbfe890,0,0x7fff5fbfe8b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3458c9fc,0x7fff5fbfe670,0,0x1e4e343e426d,0,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff91213280,0x7fff5fbfe7e0,0,0xffffffffffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001ff639,0x7fff5fbfede0,0,0x101009400,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454d643,0x7fff5fbfea40,0,0x3d2797f6031,0,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34576792,0x7fff5fbfe9c8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e13d,0x7fff5fbfee10,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e3454e2b8,0x7fff5fbfeb30,0,0x100000000,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457df88,0x7fff5fbff490,0,0x1e4e34551c75,0,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x1e4e34592fbc,0x7fff5fbfebc0,0,0x7fff5fbfec18,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912134d3,0x7fff5fbfe6f0,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001485cf,0x7fff5fbfecd0,0,0x100000000,0,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x100169efc,0x7fff5fbfec30,0,0x11e9a47b2c91,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100394534,0x7fff5fbfe7c8,0,0x1001221af,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c163,0x7fff5fbfebe0,0,0x7fff5fbfec28,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be701,0x7fff5fbfea50,0,0x7fff5fbfea70,0,0x1e4e343a9236,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254e8b,0x7fff5fbfe860,0,0x11e9a4624999,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457f78d,0x7fff5fbfeb40,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34591829,0x7fff5fbff120,0,0x11e900000000,0 -tick,0x7fff911f3cd1,0x7fff5fbfea68,0,0x100051ee8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912134cd,0x7fff5fbfe7b0,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454a4a4,0x7fff5fbfee60,0,0x1e4e34587592,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d0c0,0x7fff5fbfed38,0,0x1e4e3431520e,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d11,0x7fff5fbfeca0,0,0x7fff5fbfecd0,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911ee1f2,0x7fff5fbfe9b0,0,0x12068,0,0x1e4e34320ee7,0x1e4e34571f56,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10027562c,0x7fff5fbfe850,0,0x11e9a46bf139,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000f9f6a,0x7fff5fbfeec8,0,0x1000bdbd6,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100392841,0x7fff5fbfedb0,0,0x7fff5fbfedd0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a8106,0x7fff5fbfef08,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c3ad,0x7fff5fbfeca0,0,0x579d258130281383,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566b81,0x7fff5fbff200,0,0x7fff5fbff240,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010dc2f,0x7fff5fbff010,0,0x102023a68,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100179171,0x7fff5fbfee70,0,0x7fff5fbfeea0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011d351,0x7fff5fbfefd0,0,0x7fff5fbff010,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34598513,0x7fff5fbff368,0,0x1,0 -tick,0x1000f9883,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3459cb04,0x7fff5fbff090,0,0x1e4e3457bf37,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3456733e,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bd216,0x7fff5fbfe900,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100179b31,0x7fff5fbfeb00,0,0x7fff5fbfeb30,0,0x1e4e345ae6cd,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d471,0x7fff5fbfea30,0,0x7fff5fbfea90,0,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100255328,0x7fff5fbfe860,0,0x7fff5fbfe9a0,0,0x1e4e3455a80b,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10015de03,0x7fff5fbfeab0,0,0x1,0,0x1e4e34579b39,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325881,0x7fff5fbfef18,0,0x1e4e3455ea13,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e345b5ac5,0x7fff5fbfee18,0,0x1e4e3452a4b5,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3e6,0x7fff5fbff2a0,0,0x0,4 -tick,0x1e4e3454d5aa,0x7fff5fbfed98,0,0x1019014b0,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf51a,0x7fff5fbfed90,0,0xadb00000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100005632,0x7fff5fbff2c0,0,0x0,4 -tick,0x1e4e3432a8d0,0x7fff5fbfef80,0,0x1e4e343996fd,0 -tick,0x1e4e345b8e0b,0x7fff5fbfeda8,0,0x1e4e3457b4d7,0,0x1e4e343e8c62,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34363480,0x7fff5fbfeb08,0,0x1e4e3458506e,0,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000c249,0x7fff5fbfe9c0,0,0xaabee8098d9,0,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026b47a,0x7fff5fbfea80,0,0x7fff5fbfeb20,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343248b1,0x7fff5fbfe840,0,0xe662366a89,0 -tick,0x100315091,0x7fff5fbfebd0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e1,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e345b45f4,0x7fff5fbfef78,0,0x37ec2ed0ddb1,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025677b,0x7fff5fbfeaf0,0,0x972c,0,0x1e4e34320e97,0x1e4e34571f56,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010ca4f,0x7fff5fbfebb0,0,0x1,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34562d58,0x7fff5fbfec28,0,0x11e9a4323e09,0,0x1e4e345b83bb,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9127cb7e,0x7fff5fbfedb8,0,0x100050ec1,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd214,0x7fff5fbfed30,0,0x101903470,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f939f,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c1d36,0x7fff5fbfeea8,0,0x1000c5e74,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100118d21,0x7fff5fbff030,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd18a,0x7fff5fbfed00,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100232b9c,0x7fff5fbff0b0,0,0x7fff5fbff0f0,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c8088,0x7fff5fbfee68,0,0x1000c5b41,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c4f4,0x7fff5fbfed60,0,0x100000022,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008da10,0x7fff5fbfefc0,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9737,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002608ef,0x7fff5fbfef00,0,0xd584d7f0000000a,0,0x1e4e34320ed1,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002523a0,0x7fff5fbfe688,0,0x100251ed1,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10014462b,0x7fff5fbfeed0,0,0x11e9a43aa821,0,0x1e4e34394aa3,0x1e4e34399727 -tick,0x100120011,0x7fff5fbfeb40,0,0x10309ada5,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34562ec0,0x7fff5fbfed60,0,0x101009400,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459c596,0x7fff5fbfee30,0,0x37ec2edffa21,0,0x1e4e3457b225,0x1e4e343aa5fb,0x1e4e34394a55,0x1e4e34399727 -tick,0x100262bd1,0x7fff5fbfea50,0,0x7fff5fbfeeb0,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1e4e3456fda2,0x7fff5fbfecb0,0,0xe662335941,0,0x1e4e3459f45d,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34566f09,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456dd99,0x7fff5fbfedd0,0,0x5,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100254002,0x7fff5fbfea20,0,0x37ec2edffc89,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306939,0x7fff5fbfe8d0,0,0x1e4e343e435a,0,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000f96ff,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34569652,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,Stub,0x1e4e3459ec80,224,"CompareICStub" -code-creation,StoreIC,0x1e4e3459ed60,185,"_paused" -code-creation,StoreIC,0x1e4e3459ed60,185,"_paused" -code-creation,LoadIC,0x1e4e3459ee20,170,"pause" -code-creation,LoadIC,0x1e4e3459ee20,170,"pause" -code-creation,CallIC,0x1e4e3459eee0,187,"pause" -code-creation,StoreIC,0x1e4e3459e9a0,189,"_paused" -code-creation,StoreIC,0x1e4e3459e9a0,189,"_paused" -tick,0x10004e7bf,0x7fff5fbff358,0,0x0,4 -tick,0x7fff91206c24,0x7fff5fbfed88,0,0x100046789,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3430988a,0x7fff5fbfee18,0,0x7fff5fbfee58,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325595,0x7fff5fbfef18,0,0x1e4e3455ea04,0,0x1e4e343949fb,0x1e4e34399727 -tick,0x1e4e3454d5aa,0x7fff5fbfeb98,0,0x1020259f0,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012eaec,0x7fff5fbff440,0,0x7fff5fbff4b0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026f2d4,0x7fff5fbfe9a0,0,0x11e9a42f18c0,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b45f4,0x7fff5fbfef78,0,0x37ec2ed0ddb1,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432587f,0x7fff5fbfef18,0,0x1e4e3455ea13,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x1001785e1,0x7fff5fbfe9f0,0,0x7fff5fbfea20,3,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3457f7b8,0x7fff5fbfeb40,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b6862,0x7fff5fbfebf8,0,0x1e4e3454e2fc,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002492da,0x7fff5fbfee00,0,0x101009410,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x100253aff,0x7fff5fbff140,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000de215,0x7fff5fbfec88,0,0x66bc47cf33f997f2,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f388a,0x7fff5fbfec20,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345527fe,0x7fff5fbff058,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009fea8,0x7fff5fbfef50,0,0x7fff5fbfef80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345ad25c,0x7fff5fbff270,0,0x1e4e343f1ac3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3453c601,0x7fff5fbff108,0,0x7fff5fbff148,0,0x1e4e3456719c,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024edc5,0x7fff5fbfeab0,0,0x37ec2edb53a1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff90f806f5,0x7fff5fbfef48,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121381c,0x7fff5fbfed30,0,0x10007,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfed80,0,0x263e5f570000000a,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019acd0,0x7fff5fbfed28,0,0x1002c93db,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3459e260,0x7fff5fbff618,0,0x1e4e343248c7,0 -code-creation,LoadIC,0x1e4e3459ea60,138,"readable" -code-creation,LoadIC,0x1e4e3459ea60,138,"readable" -code-creation,LoadIC,0x1e4e3459eb00,170,"resume" -code-creation,LoadIC,0x1e4e3459eb00,170,"resume" -code-creation,CallIC,0x1e4e3459dea0,187,"resume" -code-creation,CallIC,0x1e4e3459df60,217,"write" -tick,0x1000f9824,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001146cb,0x7fff5fbff500,0,0x0,4 -tick,0x1e4e3455d89a,0x7fff5fbfecc8,0,0xffffffff,0,0x1e4e34555948,0x1e4e3453d29b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c7f1,0x7fff5fbff2c0,0,0x0,4 -tick,0x1e4e345a1c85,0x7fff5fbfeb58,0,0x11e9a41fc571,0,0x1e4e345a07d8,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfe900,0,0x101009410,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b50,0x7fff5fbfef70,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfe920,0,0x263e5f5700000015,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34566cb0,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343061c6,0x7fff5fbfeb90,0,0x1e4e3454d16d,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34584a0e,0x7fff5fbfebb8,0,0x1e4e343098ce,0,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34575601,0x7fff5fbfedf8,0,0x0,0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d1d,0x7fff5fbfec78,0,0x0,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff8ddd33d3,0x7fff5fbfe920,0,0x7fff5fbfe990,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d9ff,0x7fff5fbfed98,0,0x1019014b0,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be791,0x7fff5fbfe930,0,0x11e900000000,0,0x1e4e34551d37,0x1e4e3455a6d1,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b57,0x7fff5fbfefb0,0,0x0,3 -tick,0x1e4e343987a8,0x7fff5fbfee38,0,0x37ec2ed77c29,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1003009ca,0x7fff5fbfe760,0,0x0,1 -tick,0x1001a9c12,0x7fff5fbfe730,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe780,0,0x0,1 -tick,0x1001aa8d1,0x7fff5fbfe730,0,0x0,1 -tick,0x1001a9de0,0x7fff5fbfe748,0,0x0,1 -tick,0x1e4e34327aa8,0x7fff5fbfee60,0,0x1e4e3455287e,0,0x1e4e343993e2 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cfb2,0x7fff5fbfec30,0,0x3,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34327cfa,0x7fff5fbfeb60,0,0x0,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011b611,0x7fff5fbfe830,0,0x7fff5fbfe890,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454d0ea,0x7fff5fbfeab0,0,0x9be4f23001,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff912083c7,0x7fff5fbfe920,0,0x7fff5fbfe970,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad2f,0x7fff5fbfe7f0,0,0x7fff5fbfe820,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120281,0x7fff5fbfeb70,1,0x10000af1c,4,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9127cb84,0x7fff5fbfeae8,0,0x10008e8cc,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100219ab1,0x7fff5fbff560,0,0x0,4 -tick,0x1e4e3430ad08,0x7fff5fbfe958,0,0x1e4e34334657,0,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10021c40e,0x7fff5fbfe820,0,0x61,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be787,0x7fff5fbfea40,0,0xe662304121,0,0x1e4e3455a74d,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b247d,0x7fff5fbfed90,0,0x7fff5fbfee58,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff91213180,0x7fff5fbfecb0,0,0x10099da00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343df20b,0x7fff5fbff390,0,0x1500000000,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008d8bb,0x7fff5fbfefe0,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de1a2,0x7fff5fbfeed0,0,0x1000c1d36,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df4b3,0x7fff5fbfece0,0,0x101817c70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120307,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345976fa,0x7fff5fbfeef8,0,0x37ec2eddef79,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343098e1,0x7fff5fbff160,0,0x1e4e3456719c,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34598fc0,0x7fff5fbff280,0,0x1e4e343f1f7b,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa57,0x7fff5fbfeec0,0,0x7fff5fbfef00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfeec8,0,0x10011a26e,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100269b4c,0x7fff5fbfeaf0,0,0x0,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c84e,0x7fff5fbff570,0,0x0,4 -tick,0x10009fefa,0x7fff5fbfea50,0,0x44b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af85,0x7fff5fbfed20,0,0x2e9dafd17459,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x100173887,0x7fff5fbfeb30,0,0x7fff5fbfeb50,0,0x1e4e34320ee7,0x1e4e34571f56,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100191271,0x7fff5fbff280,0,0x0,3 -tick,0x1e4e3452abf4,0x7fff5fbfeac8,0,0xfffffffffffffff0,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x7fff911da168,0x7fff5fbfec78,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x100205e71,0x7fff5fbfe920,0,0x7fff5fbfe950,0,0x1e4e3430ca23,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10020654b,0x7fff5fbfea90,0,0x7fff5fbfeb70,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432556e,0x7fff5fbff258,0,0x1e4e3455246b,0,0x1e4e34598721 -tick,0x1e4e345b5969,0x7fff5fbfeac0,0,0x1e4e343a9422,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459b180,0x7fff5fbfeb28,0,0x1e4e34321c4c,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff8ddd33d3,0x7fff5fbfe920,0,0x7fff5fbfe990,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b616,0x7fff5fbfe828,0,0x7fff5fbfe910,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100203796,0x7fff5fbfead0,0,0x11e9a5c00000,0,0x1e4e343599a4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100249110,0x7fff5fbfe970,0,0x101009410,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002607be,0x7fff5fbfeaa0,0,0x0,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10022d1f1,0x7fff5fbfeb20,0,0x7fff5fbfeb50,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10014411d,0x7fff5fbfed80,0,0xa5c74149,0,0x1e4e34398af0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b37,0x7fff5fbfec20,0,0x101009410,0,0x1e4e34551d37,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343fd794,0x7fff5fbff518,0,0x1e4e343b5fe4,0,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026800c,0x7fff5fbff170,0,0x7fff5fbff1a0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100145a43,0x7fff5fbfec70,0,0xe662304121,0,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10008d8b0,0x7fff5fbfea90,0,0x7fff5fbfead0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da168,0x7fff5fbfeb38,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254d7b,0x7fff5fbfec10,0,0x11e9a5b9d521,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d447,0x7fff5fbfeae0,0,0x0,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002492c0,0x7fff5fbff010,0,0x0,3 -tick,0x1001713b5,0x7fff5fbff480,0,0x0,0 -tick,0x100170cfd,0x7fff5fbff2c8,0,0x101009400,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b6820,0x7fff5fbfea80,0,0x1e4e3454e2fc,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34330032,0x7fff5fbfef68,0,0x1e4e343992f5,0 -tick,0x10006f7ac,0x7fff5fbfeb38,0,0x10006385c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025df1d,0x7fff5fbfe9a0,0,0x101009410,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010e88e,0x7fff5fbff040,0,0x15,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10000b195,0x7fff5fbff030,0,0x7fff5fbff090,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206882,0x7fff5fbfee90,0,0x103016558,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002384c9,0x7fff5fbfecb0,0,0x0,1 -tick,0x1002fee8b,0x7fff5fbfeb90,0,0x0,1 -tick,0x100235887,0x7fff5fbfeb30,0,0x0,1 -code-creation,LoadIC,0x1e4e345b9320,170,"_pusher" -code-creation,LoadIC,0x1e4e345b9320,170,"_pusher" -code-creation,LoadIC,0x1e4e345b93e0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b93e0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b9480,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b9480,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b9520,134,"pair" -code-creation,LoadIC,0x1e4e345b9520,134,"pair" -code-creation,LoadIC,0x1e4e345b95c0,134,"writable" -code-creation,LoadIC,0x1e4e345b95c0,134,"writable" -code-creation,LoadIC,0x1e4e345b9660,134,"_pending" -code-creation,LoadIC,0x1e4e345b9660,134,"_pending" -code-creation,LoadIC,0x1e4e345b9080,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b9080,134,"_pendingCallbacks" -code-creation,StoreIC,0x1e4e345b9120,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b9120,189,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b0f60,170,"_pusher" -code-creation,LoadIC,0x1e4e345b0f60,170,"_pusher" -code-creation,LoadIC,0x1e4e345b1020,134,"domain" -code-creation,LoadIC,0x1e4e345b1020,134,"domain" -tick,0x10011f55c,0x7fff5fbfedc0,0,0x7fff5fbfee00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34567853,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b91f,0x7fff5fbfefb8,0,0x1000638fc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024edf7,0x7fff5fbfeab0,0,0x37ec2edb53a1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345800b8,0x7fff5fbff128,0,0x800000000,0,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566b81,0x7fff5fbff200,0,0x7fff5fbff240,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912154c7,0x7fff5fbfed40,0,0x7fff5fbfed60,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e345b4f80,492,"finish" -code-creation,LoadIC,0x1e4e345b5180,134,"_events" -code-creation,LoadIC,0x1e4e345b5180,134,"_events" -code-creation,LoadIC,0x1e4e345b5220,134,"domain" -code-creation,LoadIC,0x1e4e345b5220,134,"domain" -code-creation,LoadIC,0x1e4e345b52c0,134,"_events" -code-creation,LoadIC,0x1e4e345b52c0,134,"_events" -code-creation,LoadIC,0x1e4e345b5360,134,"domain" -code-creation,LoadIC,0x1e4e345b5360,134,"domain" -tick,0x1e4e343c3daa,0x7fff5fbff348,0,0x81edc00000000,0 -code-creation,LoadIC,0x1e4e345b5400,134,"writable" -code-creation,LoadIC,0x1e4e345b5400,134,"writable" -code-creation,CallIC,0x1e4e345b54a0,217,"write" -code-creation,LoadIC,0x1e4e345b5580,134,"pair" -code-creation,LoadIC,0x1e4e345b5580,134,"pair" -code-creation,LoadIC,0x1e4e345b5620,134,"_pending" -code-creation,LoadIC,0x1e4e345b5620,134,"_pending" -code-creation,LoadIC,0x1e4e345b56c0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b56c0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345b5760,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b5760,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b5800,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e345b5800,189,"_pendingBytes" -code-creation,LoadIC,0x1e4e345b10c0,134,"_events" -code-creation,LoadIC,0x1e4e345b10c0,134,"_events" -tick,0x7fff9124dbd5,0x7fff5fbfe530,0,0x7fff5fbfea68,0,0x1e4e34551c75,0x1e4e34567f44,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e345b1160,134,"domain" -code-creation,LoadIC,0x1e4e345b1160,134,"domain" -code-creation,LoadIC,0x1e4e345b0280,134,"writable" -code-creation,LoadIC,0x1e4e345b0280,134,"writable" -code-creation,CallIC,0x1e4e345b0320,200,"write" -code-creation,LoadIC,0x1e4e345b0400,134,"_events" -code-creation,LoadIC,0x1e4e345b0400,134,"_events" -code-creation,CallIC,0x1e4e345b04a0,287,"emit" -code-creation,LoadIC,0x1e4e345b05c0,284,"" -code-creation,LoadIC,0x1e4e345b05c0,284,"" -code-creation,LoadIC,0x1e4e345b06e0,134,"_ended" -code-creation,LoadIC,0x1e4e345b06e0,134,"_ended" -code-creation,LoadIC,0x1e4e345ad280,134,"length" -code-creation,LoadIC,0x1e4e345ad280,134,"length" -code-creation,LoadIC,0x1e4e345ad320,134,"_queue" -code-creation,LoadIC,0x1e4e345ad320,134,"_queue" -code-creation,CallIC,0x1e4e345ad3c0,217,"_process" -code-creation,CallIC,0x1e4e3457e400,492,"write" -code-creation,LoadIC,0x1e4e3457e600,134,"_needDrain" -code-creation,LoadIC,0x1e4e3457e600,134,"_needDrain" -code-creation,LoadIC,0x1e4e3457e6a0,284,"" -code-creation,LoadIC,0x1e4e3457e6a0,284,"" -code-creation,LoadIC,0x1e4e3457e7c0,138,"_buffer" -code-creation,LoadIC,0x1e4e3457e7c0,138,"_buffer" -code-creation,LoadIC,0x1e4e3457e860,138,"_offset" -code-creation,LoadIC,0x1e4e3457e860,138,"_offset" -code-creation,StoreIC,0x1e4e3457e900,189,"_offset" -code-creation,StoreIC,0x1e4e3457e900,189,"_offset" -code-creation,CallIC,0x1e4e3457e9c0,287,"emit" -code-creation,LoadIC,0x1e4e3457eae0,134,"_events" -code-creation,LoadIC,0x1e4e3457eae0,134,"_events" -code-creation,LoadIC,0x1e4e3457eb80,134,"domain" -code-creation,LoadIC,0x1e4e3457eb80,134,"domain" -code-creation,LoadIC,0x1e4e3457ec20,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457ec20,138,"_chunkSize" -code-creation,StoreIC,0x1e4e345ad4a0,185,"_processing" -code-creation,StoreIC,0x1e4e345ad4a0,185,"_processing" -code-creation,CallIC,0x1e4e3457d740,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3457d860,185,"_flush" -code-creation,StoreIC,0x1e4e3457d860,185,"_flush" -code-creation,LoadIC,0x1e4e3457d920,134,"length" -code-creation,LoadIC,0x1e4e3457d920,134,"length" -code-creation,CallIC,0x1e4e3457d9c0,257,"emit" -code-creation,LoadIC,0x1e4e3457dae0,134,"_events" -code-creation,LoadIC,0x1e4e3457dae0,134,"_events" -code-creation,StoreIC,0x1e4e3457db80,189,"locked" -code-creation,StoreIC,0x1e4e3457db80,189,"locked" -code-creation,LoadIC,0x1e4e3457dc40,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457dc40,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457dce0,134,"_ended" -code-creation,LoadIC,0x1e4e3457dce0,134,"_ended" -code-creation,LoadIC,0x1e4e3457dd80,134,"_queue" -code-creation,LoadIC,0x1e4e3457dd80,134,"_queue" -code-creation,CallIC,0x1e4e3457de20,217,"_process" -code-creation,CallIC,0x1e4e3457df00,492,"write" -code-creation,LoadIC,0x1e4e3457e100,138,"_buffer" -code-creation,LoadIC,0x1e4e3457e100,138,"_buffer" -code-creation,LoadIC,0x1e4e345ad560,138,"_offset" -code-creation,LoadIC,0x1e4e345ad560,138,"_offset" -code-creation,StoreIC,0x1e4e345acd00,189,"_offset" -code-creation,StoreIC,0x1e4e345acd00,189,"_offset" -code-creation,CallIC,0x1e4e345acdc0,287,"emit" -code-creation,LoadIC,0x1e4e345acee0,134,"domain" -code-creation,LoadIC,0x1e4e345acee0,134,"domain" -code-creation,LoadIC,0x1e4e345acf80,138,"_chunkSize" -code-creation,LoadIC,0x1e4e345acf80,138,"_chunkSize" -code-creation,StoreIC,0x1e4e345ad020,185,"_processing" -code-creation,StoreIC,0x1e4e345ad020,185,"_processing" -code-creation,CallIC,0x1e4e3457c420,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3457c540,185,"_flush" -code-creation,StoreIC,0x1e4e3457c540,185,"_flush" -tick,0x10037f1e0,0x7fff5fbfe788,0,0x1003891ea,0,0x1e4e34587fe0,0x1e4e345603e5,0x1e4e345a995d,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e3457c600,254,"" -code-creation,LoadIC,0x1e4e3457c600,254,"" -code-creation,StoreIC,0x1e4e3457c700,390,"_events" -code-creation,StoreIC,0x1e4e3457c700,390,"_events" -code-creation,LoadIC,0x1e4e3457c8a0,254,"" -code-creation,LoadIC,0x1e4e3457c8a0,254,"" -code-creation,LoadIC,0x1e4e3457c9a0,134,"_events" -code-creation,LoadIC,0x1e4e3457c9a0,134,"_events" -code-creation,CallIC,0x1e4e3457ca40,257,"emit" -code-creation,LoadIC,0x1e4e3457cb60,134,"_events" -code-creation,LoadIC,0x1e4e3457cb60,134,"_events" -code-creation,StoreIC,0x1e4e3457cc00,189,"locked" -code-creation,StoreIC,0x1e4e3457cc00,189,"locked" -code-creation,LoadIC,0x1e4e3457ccc0,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457ccc0,138,"lockBuffer" -tick,0x10026b4c9,0x7fff5fbfe9e0,0,0x30,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100186850,0x7fff5fbfea48,0,0x100186783,0,0x1e4e3431b547,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454deac,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024edba,0x7fff5fbfeb98,0,0x11e9a4f83419,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343150c3,0x7fff5fbfed98,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e345ad0e0,189,"_buffer" -code-creation,StoreIC,0x1e4e345ad0e0,189,"_buffer" -code-creation,LoadIC,0x1e4e345ac900,138,"_binding" -code-creation,LoadIC,0x1e4e345ac900,138,"_binding" -code-creation,LoadIC,0x1e4e345ac9a0,134,"_flush" -code-creation,LoadIC,0x1e4e345ac9a0,134,"_flush" -code-creation,StoreIC,0x1e4e345ac120,189,"callback" -code-creation,StoreIC,0x1e4e345ac120,189,"callback" -code-creation,StoreIC,0x1e4e345abee0,189,"buffer" -code-creation,StoreIC,0x1e4e345abee0,189,"buffer" -tick,0x1e4e3431004a,0x7fff5fbfec00,0,0x1e4e345b0d38,0,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,CallIC,0x1e4e345739e0,492,"execute" -code-creation,LoadIC,0x1e4e34573be0,254,"" -code-creation,LoadIC,0x1e4e34573be0,254,"" -code-creation,StoreIC,0x1e4e34573ce0,390,"_events" -code-creation,StoreIC,0x1e4e34573ce0,390,"_events" -code-creation,LoadIC,0x1e4e34573e80,254,"" -code-creation,LoadIC,0x1e4e34573e80,254,"" -code-creation,CallIC,0x1e4e34573f80,205,"onIncoming" -code-creation,LoadIC,0x1e4e34574060,284,"" -code-creation,LoadIC,0x1e4e34574060,284,"" -code-creation,StoreIC,0x1e4e34574180,420,"_events" -code-creation,StoreIC,0x1e4e34574180,420,"_events" -code-creation,LoadIC,0x1e4e34574340,284,"" -code-creation,LoadIC,0x1e4e34574340,284,"" -code-creation,CallIC,0x1e4e34574460,257,"emit" -code-creation,LoadIC,0x1e4e34574580,134,"_events" -code-creation,LoadIC,0x1e4e34574580,134,"_events" -code-creation,CallIC,0x1e4e3456e8c0,287,"emit" -code-creation,LoadIC,0x1e4e3456e9e0,134,"_events" -code-creation,LoadIC,0x1e4e3456e9e0,134,"_events" -code-creation,CallIC,0x1e4e3456ea80,287,"emit" -code-creation,LoadIC,0x1e4e3456eba0,134,"_events" -code-creation,LoadIC,0x1e4e3456eba0,134,"_events" -code-creation,LoadIC,0x1e4e3456ec40,134,"domain" -code-creation,LoadIC,0x1e4e3456ec40,134,"domain" -code-creation,LoadIC,0x1e4e3456ece0,134,"_events" -code-creation,LoadIC,0x1e4e3456ece0,134,"_events" -code-creation,LoadIC,0x1e4e3456ed80,134,"domain" -code-creation,LoadIC,0x1e4e3456ed80,134,"domain" -code-creation,CallIC,0x1e4e3456ee20,277,"removeListener" -code-creation,CallIC,0x1e4e3456ef40,247,"removeListener" -code-creation,LoadIC,0x1e4e3456f040,134,"_events" -code-creation,LoadIC,0x1e4e3456f040,134,"_events" -code-creation,LoadIC,0x1e4e3456f0e0,138,"incoming" -code-creation,LoadIC,0x1e4e3456f0e0,138,"incoming" -tick,0x100254ed7,0x7fff5fbfe600,0,0xe662367291,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456c100,492,"execute" -tick,0x7fff9125057c,0x7fff5fbfe9f8,0,0x7fff91263acf,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456c300,205,"onIncoming" -code-creation,LoadIC,0x1e4e3456c3e0,138,"incoming" -code-creation,LoadIC,0x1e4e3456c3e0,138,"incoming" -code-creation,CallIC,0x1e4e3456c480,492,"finish" -tick,0x1e4e34332f05,0x7fff5fbfec30,0,0x1e4e3454d0f5,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34559fc1,0x7fff5fbfee50,0,0x7fff5fbfee98,0,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100118d4a,0x7fff5fbfea00,0,0x102023a88,0,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100218e46,0x7fff5fbfeb80,0,0x1,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100118d24,0x7fff5fbfec90,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002aff34,0x7fff5fbfeb00,0,0x101009400,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9120c516,0x7fff5fbfe7c0,0,0xfb07aa0332ace8ff,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345676e3,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309efe,0x7fff5fbfebc0,0,0x1e4e343aabf9,0,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454d3a5,0x7fff5fbfeab0,0,0x9be4f23001,0,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345930c9,0x7fff5fbfe8f8,0,0x1e4e343e439c,0,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff912137ff,0x7fff5fbfeb30,0,0x7fff5fbfeb80,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10011add1,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87b9,0x7fff5fbfec28,0,0x1002c87b0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254e89,0x7fff5fbfec10,0,0x11e9a4d0c9c1,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454ddb2,0x7fff5fbfec80,0,0xe662304121,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfe7b8,0,0x100121af7,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100170950,0x7fff5fbfe7f0,0,0x9,3,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LazyCompile,0x1e4e3456c680,460,"ondrain stream.js:46",0x37ec2edc4410,* -code-creation,CallIC,0x1e4e3456c860,247,"removeListener" -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002cc56,0x7fff5fbff000,0,0x7fff5fbff020,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5b54,0x7fff5fbfee10,0,0x1018158b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100218e4c,0x7fff5fbfedc0,0,0x1,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120683b,0x7fff5fbfee58,0,0x103016458,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120839a,0x7fff5fbfece8,0,0x7fff91206879,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566b80,0x7fff5fbff208,0,0x1e4e34594b8f,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d478,0x7fff5fbfefd0,0,0x7fff5fbff010,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9285,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f939f,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100191271,0x7fff5fbff5b0,0,0x0,3 -tick,0x1000c8107,0x7fff5fbfecb8,0,0x1000bd2e6,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100179230,0x7fff5fbfeae0,0,0x1e4e3454e2fc,3,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100393081,0x7fff5fbfeb40,0,0x7fff5fbfeb70,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9ab3,0x7fff5fbfec70,0,0x11e9a4dc30e1,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9dbf,0x7fff5fbfec70,0,0x11e9a4dc30e1,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf346,0x7fff5fbfed90,0,0x167b00000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430c384,0x7fff5fbfed68,0,0x1e4e3431b444,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343151d2,0x7fff5fbff2e0,0,0x0,0,0x1e4e34576997,0x1e4e345984df -tick,0x10024fe96,0x7fff5fbfe890,0,0x11e9a4c00000,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34557197,0x7fff5fbfed98,0,0x102023a88,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10011c09f,0x7fff5fbfeb40,0,0x102023a88,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b195,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x100255025,0x7fff5fbfecc0,0,0x100639558,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1002b2af1,0x7fff5fbfeb90,0,0x7fff5fbfebb0,0,0x1e4e3455f47d,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010e881,0x7fff5fbff430,0,0x0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10016d8e5,0x7fff5fbfea00,0,0x0,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343151d8,0x7fff5fbfed58,0,0x11e9a4b0a761,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10018661c,0x7fff5fbfe5d0,0,0x7fff5fbfe650,0,0x1e4e343181dd,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3458bb90,0x7fff5fbff0a0,0,0xe662335941,0,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff911dbd12,0x7fff5fbfeb38,0,0x10011c15d,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9127cbc6,0x7fff5fbff0d8,0,0x0,0 -tick,0x1e4e3431b400,0x7fff5fbfe9a0,0,0x1e4e34564c7e,0,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456c960,134,"readable" -code-creation,LoadIC,0x1e4e3456c960,134,"readable" -code-creation,LoadIC,0x1e4e3456ca00,200,"resume" -code-creation,LoadIC,0x1e4e3456ca00,200,"resume" -tick,0x1001fc5a4,0x7fff5fbff1b0,0,0x101009410,0,0x1e4e3456c7f3,0x1e4e345522ca,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456cae0,217,"resume" -tick,0x1002608ef,0x7fff5fbfe9e0,0,0x2ad95d0d0000000a,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002d7a6,0x7fff5fbff098,0,0x1e4e345b6659,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213198,0x7fff5fbfec60,0,0xffffffffffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100175d63,0x7fff5fbfef50,0,0x23c8e01,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f4154,0x7fff5fbfede0,0,0x465b10000000171,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10026190a,0x7fff5fbfed80,0,0x263e5f570000000a,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100251343,0x7fff5fbfeb00,0,0x37ec2ed00000,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10026080b,0x7fff5fbfe9e0,0,0x2ad95d0d0000000a,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912135dc,0x7fff5fbfebd0,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343098ce,0x7fff5fbff130,0,0x100000000,0,0x1e4e3456719c,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011b8ae,0x7fff5fbfedb0,0,0x102019b80,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002bf311,0x7fff5fbff4d0,0,0x0,3 -tick,0x1000f9889,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001847a1,0x7fff5fbfe8f0,0,0x7fff5fbfeb30,0,0x1e4e343346c4,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911da1e3,0x7fff5fbfec78,0,0x7fff91213bb9,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345b20fb,0x7fff5fbff0a0,0,0x11e9a4a49fe1,0 -tick,0x1e4e343985a1,0x7fff5fbfee60,0,0x7fff5fbfeea0,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10011ff7d,0x7fff5fbfecd0,0,0x10106a351,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff912135b8,0x7fff5fbfe800,0,0xfffffffffffffff0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000fde48,0x7fff5fbfe8d8,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3d1,0x7fff5fbff230,0,0x0,4 -tick,0x10024c1c6,0x7fff5fbff398,0,0x0,3 -tick,0x100122008,0x7fff5fbfe850,0,0x9be4f24bf1,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b30,0x7fff5fbfe950,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c73b,0x7fff5fbfec50,0,0x11e9a490de09,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432588a,0x7fff5fbfee78,0,0x1e4e34551d37,0,0x1e4e343993e2 -tick,0x100392841,0x7fff5fbfec50,0,0x7fff5fbfec70,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010ca31,0x7fff5fbfeb80,0,0x7fff5fbfebe0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002607b1,0x7fff5fbfec20,0,0x7fff5fbfec60,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10015009b,0x7fff5fbfeaf0,0,0x7fff5fbfeb40,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457a732,0x7fff5fbfec58,0,0x37ec2edd4381,0,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100144664,0x7fff5fbfeb20,0,0x7fff5fbfeb60,0,0x1e4e343b6791,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100262bd1,0x7fff5fbfe920,0,0x7fff5fbfed80,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91213b23,0x7fff5fbfe840,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012051c,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457df81,0x7fff5fbfed68,0,0x1001444e0,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306141,0x7fff5fbfeb10,0,0x7fff5fbfebb0,0,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608bc,0x7fff5fbfe840,0,0xbaffa8400000022,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34567240,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002618f1,0x7fff5fbfee00,0,0x7fff5fbfee40,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001500af,0x7fff5fbff0f0,0,0x7fff5fbff150,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10000b195,0x7fff5fbff030,0,0x7fff5fbff090,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002510d5,0x7fff5fbfea90,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c22f,0x7fff5fbfede0,0,0x46f8d000000016f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfed80,0,0x263e5f570000000a,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x7fff912068aa,0x7fff5fbfec30,0,0x7fff5fbfec50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345750e1,0x7fff5fbfed18,0,0x7fff5fbfed58,0,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911edec0,0x7fff5fbfeb80,0,0x80000000,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34557197,0x7fff5fbfec60,0,0x37ec2edffa21,0,0x1e4e34553563,0x1e4e3459f340,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a2420,0x7fff5fbfe858,0,0x10019b216,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3458751e,0x7fff5fbfee70,0,0x11e9a48c02a1,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010ca31,0x7fff5fbfe5c0,0,0x7fff5fbfe600,0,0x1e4e34560bb7,0x1e4e343e426d,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325595,0x7fff5fbff490,0,0x1e4e34551c75,0,0x1e4e343e9778,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3456f180,200,"pause" -code-creation,LoadIC,0x1e4e3456f180,200,"pause" -code-creation,LoadIC,0x1e4e345a2100,137,"cleartext" -code-creation,LoadIC,0x1e4e345a2100,137,"cleartext" -code-creation,CallIC,0x1e4e345a21a0,187,"pause" -code-creation,LoadIC,0x1e4e345a2260,134,"_handle" -code-creation,LoadIC,0x1e4e345a2260,134,"_handle" -code-creation,LoadIC,0x1e4e34569460,254,"" -code-creation,LoadIC,0x1e4e34569460,254,"" -code-creation,CallIC,0x1e4e34569560,492,"readStop" -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e34580a1c,0x7fff5fbfecb0,0,0x7fff5fbfed10,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551c90,0x7fff5fbfed28,0,0x37ec2eda1ac9,0,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34327a7a,0x7fff5fbff088,0,0x1e4e345b1bdc,0 -tick,0x1e4e3431135e,0x7fff5fbff0d8,0,0x0,0 -tick,0x10022d200,0x7fff5fbfea00,0,0x7fff5fbfea30,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457f7b8,0x7fff5fbfeb40,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911ee21c,0x7fff5fbfeba0,0,0x4d555458,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34321001,0x7fff5fbfed50,0,0xe662304121,0,0x1e4e3454dadf,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100044dd2,0x7fff5fbfed70,0,0x100a14760,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e343258ec,0x7fff5fbfeb70,0,0x1e4e34551d37,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000389ed,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001907f4,0x7fff5fbfe810,0,0x102023b10,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a7841,0x7fff5fbff3d0,0,0x7fff5fbff450,0,0x1e4e34551d37,0x1e4e343e9778,0x1e4e3459e4aa -tick,0x1e4e34595625,0x7fff5fbff0d0,0,0x1e4e343b6a9d,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34552882,0x7fff5fbfeb78,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345acac5,0x7fff5fbfef48,0,0x1e4e34394aa3,0,0x1e4e34399727 -tick,0x1002c0162,0x7fff5fbfeac0,0,0x2,0,0x1e4e34320e97,0x1e4e34571f56,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e34569760,157,"nextTick" -code-creation,LoadIC,0x1e4e34569800,284,"" -code-creation,LoadIC,0x1e4e34569800,284,"" -tick,0x10010d3e6,0x7fff5fbfede0,0,0x10001a870,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bab56,0x7fff5fbfecb0,0,0x7fff5fbfef40,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f929b,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c05a,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34592e4c,0x7fff5fbff208,0,0x1e4e34594a7d,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34327a91,0x7fff5fbff138,0,0x1e4e34567081,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343df1cf,0x7fff5fbff390,0,0x7900000000,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001a812b,0x7fff5fbfeef0,0,0x0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfed80,0,0x263e5f570000000a,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e34569920,287,"emit" -code-creation,LoadIC,0x1e4e34569a40,138,"readable" -code-creation,LoadIC,0x1e4e34569a40,138,"readable" -code-creation,LoadIC,0x1e4e34569ae0,170,"resume" -code-creation,LoadIC,0x1e4e34569ae0,170,"resume" -code-creation,CallIC,0x1e4e34569ba0,187,"resume" -code-creation,CallIC,0x1e4e34569c60,492,"readStart" -tick,0x1e4e34315208,0x7fff5fbff2d8,0,0x11e9a46ba1f9,0,0x1e4e34576997,0x1e4e345984df -tick,0x7fff911daa28,0x7fff5fbfed48,0,0x1000de0ff,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911daa5e,0x7fff5fbfe9e0,0,0x7fff5fbfea20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b0690,0x7fff5fbfef88,0,0x1e4e3439922e,0 -tick,0x1e4e3459f32b,0x7fff5fbfed28,0,0x400000000,0,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10017923a,0x7fff5fbfeb00,0,0x101009410,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002ff07,0x7fff5fbfeb70,0,0x7fff5fbfebd0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325625,0x7fff5fbfe850,0,0x1e4e3453c902,0,0x1e4e343e436a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000f9378,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbbd1,0x7fff5fbff848,0,0x0,4 -tick,0x100253ff2,0x7fff5fbfe900,0,0x37ec2edffc89,3,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10008e972,0x7fff5fbff010,0,0x7fff5fbff050,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1e4e343151f8,0x7fff5fbfec70,0,0xd300000000,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019b1a5,0x7fff5fbfe760,0,0x2e9dafd04139,0,0x1e4e343e435a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011c09f,0x7fff5fbff290,0,0x0,4 -tick,0x1e4e3454d339,0x7fff5fbfeb30,0,0x100000000,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf283,0x7fff5fbfee40,0,0x1e4e34394600,0,0x1e4e3455eb2b,0x1e4e343949fb,0x1e4e34399727 -tick,0x1001fcf25,0x7fff5fbfe700,0,0x1020259f0,0,0x1e4e3453c902,0x1e4e343e436a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10012eaec,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100117e91,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10024fd60,0x7fff5fbfe890,0,0x11e9a45dc9e9,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34332f11,0x7fff5fbfeca0,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbff070,0,0x23c0895200000014,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001200c0,0x7fff5fbfe9f0,0,0x102817aa0,3,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfeb38,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001459a7,0x7fff5fbfebe0,0,0x1e4e345b67c1,0,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3a0,0x7fff5fbfef48,0,0x10002cc97,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x100248ffd,0x7fff5fbfea18,0,0xaabee817209,0,0x1e4e34551d37,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551d3b,0x7fff5fbfeda8,0,0x1e97,0,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100124cb1,0x7fff5fbfe890,0,0x7fff5fbfe8c0,0,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523a6,0x7fff5fbfee18,0,0x7fff5fbfee78,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df505,0x7fff5fbfece0,0,0x101816850,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c4fe,0x7fff5fbfec40,0,0xfe430543c8719ebc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1003950da,0x7fff5fbfed68,0,0x1000bd305,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b30,0x7fff5fbfeb60,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcf4,0x7fff5fbfecb8,0,0x7fff911f4105,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608e1,0x7fff5fbfed80,0,0x263e5f5700000015,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d471,0x7fff5fbfeff0,0,0x7fff5fbff030,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343252b0,0x7fff5fbff380,0,0x1e4e343df280,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912085ee,0x7fff5fbfec80,0,0x7fff5fbfecd0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345b5a05,0x7fff5fbfee18,0,0x1e4e3452a47a,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027142d,0x7fff5fbfe810,0,0x0,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457e73a,0x7fff5fbfef88,0,0x1e4e3439922e,0 -tick,0x100394a5c,0x7fff5fbfeb98,0,0x100255030,0,0x1e4e3455a80b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34325548,0x7fff5fbfef50,0,0x1e4e34394a93,0,0x1e4e34399727 -tick,0x100260b33,0x7fff5fbfe950,0,0x1001942e3,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100250e07,0x7fff5fbfee10,0,0xd9c9ff15a96f5556,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038f07,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34557b50,0x7fff5fbfeda8,0,0x11e9a438dc69,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34398898,0x7fff5fbfedf8,0,0x37ec2ed77c29,0,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34394a59,0x7fff5fbfef50,0,0x11e9a439db69,0,0x1e4e34399727 -tick,0x10019cf31,0x7fff5fbfeb20,0,0x7fff5fbfeb48,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3455f8c7,0x7fff5fbfed28,0,0x1e4e343060e1,0,0x1e4e34563578,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038f19,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100118ac8,0x7fff5fbfe980,0,0x7fff5fbfe9b0,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3456e0e8,0x7fff5fbfef28,0,0xe662304101,0,0x1e4e34399744 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100218e41,0x7fff5fbfeb90,0,0x7fff5fbfebc0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456e004,0x7fff5fbfef28,0,0xe6623608b1,0,0x1e4e34399744 -tick,0x1002bf6d1,0x7fff5fbfede0,0,0x7fff5fbfee08,0,0x1e4e3455a80b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34555943,0x7fff5fbfec80,0,0xe662304161,0,0x1e4e3453d29b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432556e,0x7fff5fbfeda0,0,0x1e4e343f1f17,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325890,0x7fff5fbfeea8,0,0x1e4e3455ac3e,0,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026081c,0x7fff5fbfecc0,0,0x3fd6f24200000013,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038f41,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100277528,0x7fff5fbfde38,0,0x11e9a410e7b1,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbcff,0x7fff5fbfea08,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024b17c,0x7fff5fbfee00,0,0x2e9dafd05169,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fe29,0x7fff5fbfec28,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343080bf,0x7fff5fbff268,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523a1,0x7fff5fbfec10,0,0x7fff5fbfec50,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10015012c,0x7fff5fbfeda0,0,0x7fff5fbfedc0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345800af,0x7fff5fbff148,0,0x11e9a415a4a9,0,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009ff35,0x7fff5fbfee60,0,0xffffffff,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213706,0x7fff5fbfecc0,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343e40e1,0x7fff5fbff5b8,0,0x7fff5fbff610,0 -tick,0x1000f9886,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10011ff7d,0x7fff5fbfecd0,0,0x10106ad44,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff90f806fc,0x7fff5fbfec18,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001901f,0x7fff5fbff2d0,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff912134b5,0x7fff5fbfe6c0,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a3ebc,0x7fff5fbfec68,0,0x1e4e34567e91,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c287,0x7fff5fbfebd0,0,0x11e9a41daad9,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027565c,0x7fff5fbfe750,0,0x11e9a4182761,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457a962,0x7fff5fbfec40,0,0xe662304121,0,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002524f5,0x7fff5fbfec58,0,0x37ec2ed9efd1,0,0x1e4e34551d37,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e10e,0x7fff5fbfed28,0,0x7fff911f31d7,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff911edebb,0x7fff5fbfeb90,0,0x7fff5fbfec10,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10004e717,0x7fff5fbfedd0,0,0x100018f54,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34566c18,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100218e81,0x7fff5fbfead0,0,0x7fff5fbfeb00,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019b248,0x7fff5fbfe9e0,0,0x0,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c3c40,0x7fff5fbff010,0,0x1,0,0x1e4e3455497b,0x1e4e3457bd81,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000df1eb,0x7fff5fbfe7a8,0,0x13548c4cd971d7bd,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10000b1db,0x7fff5fbfebc8,0,0x10000c199,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daafb,0x7fff5fbfea80,0,0x0,1 -tick,0x7fff911daab5,0x7fff5fbfea80,0,0x0,1 -tick,0x1001aa4f3,0x7fff5fbfea90,0,0x0,1 -tick,0x1e4e3455a705,0x7fff5fbfedf8,0,0x2e9dafd19839,0,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911db6b4,0x7fff5fbfeae8,0,0x10011d4a6,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254ef6,0x7fff5fbfe850,0,0x7fff5fbfe990,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254cf1,0x7fff5fbfe920,0,0x7fff5fbfea10,0,0x1e4e3455a80b,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325555,0x7fff5fbfec28,0,0x1e4e34551c75,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011d440,0x7fff5fbff2f0,0,0x1,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024ef77,0x7fff5fbfefb0,0,0x5,0,0x1e4e3458be04,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100201b01,0x7fff5fbfebc0,0,0x7fff5fbfebe0,0,0x1e4e34570fec,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002fccb,0x7fff5fbfeec0,0,0x7fff5fbfeef0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100075bbf,0x7fff5fbfeec0,0,0x100000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912069c4,0x7fff5fbfee30,0,0x103016558,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345809cb,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911d9d0f,0x7fff5fbfeca0,0,0xff80000000001003,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254fec,0x7fff5fbfeaf0,0,0x7f015fbfeba0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120351,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120616c,0x7fff5fbfedb8,0,0x7fff91206c07,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011a238,0x7fff5fbfefd0,0,0x102023a70,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309a65,0x7fff5fbff268,0,0x1e4e343f1adb,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c8107,0x7fff5fbfed38,0,0x1000c49bc,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002608ec,0x7fff5fbfeab0,0,0x3b2c07d10000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34519d12,0x7fff5fbfec40,0,0x1e4e3454d3fe,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432554b,0x7fff5fbfef50,0,0x1e4e34394a93,0,0x1e4e34399727 -tick,0x1e4e3457b620,0x7fff5fbfed40,0,0x1e4e343e8cc4,0,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ccc1,0x7fff5fbfec20,0,0x1028154ad,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002622fc,0x7fff5fbfeb48,0,0x0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345553c1,0x7fff5fbfee10,0,0x7fff5fbfee58,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3458a27b,0x7fff5fbff030,0,0x11e9a5c565b1,0,0x1e4e345892e0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100144840,0x7fff5fbfeb78,0,0x1e4e3430618e,0,0x1e4e343b6791,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100170963,0x7fff5fbfe8e0,0,0x9,3,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100114460,0x7fff5fbff1c8,0,0x0,4 -tick,0x1000f9f94,0x7fff5fbfe9b0,0,0x20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b6825,0x7fff5fbfed60,0,0x1e4e3454e2fc,0,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002691ba,0x7fff5fbfea30,0,0x100000001,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253f50,0x7fff5fbfeab8,0,0x10025485e,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100005c38,0x7fff5fbfe9b0,0,0x7fff5fbfea20,0,0x1e4e343a9270,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a2a74,0x7fff5fbfe270,0,0x0,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100251f76,0x7fff5fbfeee0,0,0x0,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430b345,0x7fff5fbfedd0,0,0x1e4e34398a60,0,0x1e4e345761cf,0x1e4e34583f95,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000bd224,0x7fff5fbfe900,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000c1306,0x7fff5fbfea20,0,0x7fff5fbfea70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452a488,0x7fff5fbfee30,0,0x11e9a5b82f69,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfebf0,0,0x17a3df6000000022,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a21,0x7fff5fbfe8c0,0,0x7fff5fbfe920,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100279be1,0x7fff5fbfe840,0,0x7fff5fbfe880,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff91206c07,0x7fff5fbfedc0,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c716,0x7fff5fbff130,0,0x11e9a5be9a01,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019d003,0x7fff5fbfed70,0,0x4273e10515596000,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100259925,0x7fff5fbfecc0,0,0x7fff5fbfed30,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206882,0x7fff5fbfecf0,0,0x102025a0b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afe0,0x7fff5fbfea60,0,0x2e9dafd05104,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fc4d,0x7fff5fbfecc0,0,0x10099f800,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000ded0e,0x7fff5fbfec88,0,0x26bc47c668666952,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010dcc0,0x7fff5fbfede0,0,0x101009400,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10018e761,0x7fff5fbff640,0,0x0,4 -tick,0x7fff912061e4,0x7fff5fbfeba8,0,0x7fff91206c07,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3432e38a,0x7fff5fbfee28,0,0x1e4e343985b3,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1003947b6,0x7fff5fbfec18,0,0x100208323,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34394a59,0x7fff5fbfef50,0,0x11e9a5bb2491,0,0x1e4e34399727 -tick,0x1e4e34322a80,0x7fff5fbfe7c0,0,0x545900000000,0,0x1e4e34320c96,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000c4a65,0x7fff5fbfe920,0,0x1000c5e5f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c05a,0x7fff5fbfe8c0,0,0x7fff5fbfe910,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002b133e,0x7fff5fbfe7f0,0,0x7fff5fbfe890,0,0x1e4e343e435a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b9289,0x7fff5fbfee70,0,0x1e4e34570fec,0,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343210f2,0x7fff5fbfec00,0,0xe662304121,0,0x1e4e3454dadf,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345547ae,0x7fff5fbfed98,0,0x1e4e34557bb0,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8100,0x7fff5fbfeac8,0,0x10019ed51,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e343258de,0x7fff5fbfeaa8,0,0x1e4e3455ac3e,0,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002607d1,0x7fff5fbfe8a0,0,0x0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10025124f,0x7fff5fbfefe0,0,0xd9c9ff15a96f5556,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025ac3c,0x7fff5fbfe590,0,0x1009410,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019ff01,0x7fff5fbfeba0,0,0x7fff5fbfebf0,0,0x1e4e3455218e,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34595ac0,0x7fff5fbfed58,0,0x1e4e345631bd,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff91206831,0x7fff5fbff358,0,0x0,4 -tick,0x100253b67,0x7fff5fbff0b0,0,0x0,3 -tick,0x1e4e3458bbee,0x7fff5fbff0a0,0,0xe662335941,0,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1e4e345ae41a,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b7e88,0x7fff5fbfec80,0,0x1e4e34567296,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253ae1,0x7fff5fbfef70,0,0x7fff5fbfefa0,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000bd0fd,0x7fff5fbfed70,0,0xd9c9ff15a96f5556,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34597205,0x7fff5fbff280,0,0x1e4e343f1e7a,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b37,0x7fff5fbfeb60,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000dea74,0x7fff5fbfec28,0,0xba3509c8163cf87b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121376e,0x7fff5fbfed80,0,0x7fff5fbfedb0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fd02,0x7fff5fbfec68,0,0x1000bab02,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f91e0,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34327a7a,0x7fff5fbff038,0,0x1e4e3455287e,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121478b,0x7fff5fbfecd0,0,0x7fff79220180,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343150c3,0x7fff5fbfee68,0,0xe66234f301,0,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608f3,0x7fff5fbfeca0,0,0x263e5f570000000a,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10024920d,0x7fff5fbff160,0,0x0,3 -tick,0x10026b450,0x7fff5fbfea80,0,0x7fff5fbfeb20,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100050db0,0x7fff5fbfe920,0,0x7fff5fbfe990,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100252445,0x7fff5fbff0e0,0,0x0,3 -tick,0x1e4e3454e1e2,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87b1,0x7fff5fbfec40,0,0x7fff5fbfec68,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457cf00,0x7fff5fbfed70,0,0x11e9a58f8569,0,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002618f6,0x7fff5fbfe978,0,0x11e9a570ee39,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34327cf3,0x7fff5fbfeb60,0,0x0,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfe838,0,0x7fff911f2db4,0,0x1e4e34321bd7,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b6a,0x7fff5fbfef40,0,0x101009410,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34332f05,0x7fff5fbfeca0,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100261bb2,0x7fff5fbfeb00,0,0x7fff5fbfeb30,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024b89b,0x7fff5fbfec30,0,0x101009410,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100275d8a,0x7fff5fbfead0,0,0x0,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be82f,0x7fff5fbfec70,0,0x3d27977be89,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10002d5ff,0x7fff5fbfebd0,0,0x7fff5fbfec18,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b95,0x7fff5fbfebe0,0,0x101009410,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343061c6,0x7fff5fbfe980,0,0x1e4e3455497b,0,0x1e4e34564c92,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458372f,0x7fff5fbfeb60,0,0x11e9a560d5e9,0,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3435cce4,0x7fff5fbfeb48,0,0x1e4e343e7832,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3ef,0x7fff5fbfeb60,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10030f63f,0x7fff5fbff150,0,0x0,3 -tick,0x1e4e3431196a,0x7fff5fbfec18,0,0x1e4e345554e2,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100265ede,0x7fff5fbfeaa0,0,0xe662300000,0,0x1e4e343599a4,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100315091,0x7fff5fbfe890,0,0x7fff5fbfe8c0,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10002fccd,0x7fff5fbfedb0,0,0x7fff5fbfedf0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012f03f,0x7fff5fbfeae8,0,0x100254e3f,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457fc46,0x7fff5fbff318,0,0x37ec2eda2c21,0,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019cd40,0x7fff5fbfefa0,0,0x1003d3d67,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100051edf,0x7fff5fbfedb8,0,0x1000a02e4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100232b31,0x7fff5fbff0f0,0,0x7fff5fbff150,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcd4,0x7fff5fbfeeb8,0,0x7fff911f40bc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912084f1,0x7fff5fbfed60,0,0x7fff5fbfedb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253bfb,0x7fff5fbfedc0,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912137b6,0x7fff5fbfed00,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c6961,0x7fff5fbfec70,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262c04,0x7fff5fbfe540,0,0x7fff5fbfe5b8,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10016d6fb,0x7fff5fbfeae0,0,0x7fff5fbfeb30,0,0x1e4e34320e97,0x1e4e34571f56,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b0628,0x7fff5fbfef88,0,0x1e4e3439922e,0 -tick,0x10012010d,0x7fff5fbfeb40,0,0x10205528a,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e34569e60,189,"_buffer" -code-creation,StoreIC,0x1e4e34569e60,189,"_buffer" -code-creation,LoadIC,0x1e4e34569f20,138,"_binding" -code-creation,LoadIC,0x1e4e34569f20,138,"_binding" -code-creation,LoadIC,0x1e4e34569fc0,134,"_flush" -code-creation,LoadIC,0x1e4e34569fc0,134,"_flush" -code-creation,StoreIC,0x1e4e3456a060,189,"callback" -code-creation,StoreIC,0x1e4e3456a060,189,"callback" -tick,0x7fff91206831,0x7fff5fbfecc8,0,0x100304df6,0,0x1e4e3439968d -code-creation,StoreIC,0x1e4e3456a120,189,"buffer" -code-creation,StoreIC,0x1e4e3456a120,189,"buffer" -tick,0x10019081b,0x7fff5fbfe780,0,0x102023b10,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002523de,0x7fff5fbfe7d0,0,0x11e9a5500000,0,0x1e4e34551d37,0x1e4e3455a6d1,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34327aa8,0x7fff5fbfed88,0,0x1e4e3455287e,0,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430d58a,0x7fff5fbfed60,0,0x1e4e34599bac,0,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3d6,0x7fff5fbfea20,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001221a0,0x7fff5fbfe7d0,0,0x79,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343ad781,0x7fff5fbfee88,0,0x7fff5fbfeec8,0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34555cac,0x7fff5fbfe9d8,0,0x0,0,0x1e4e34564a8c,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34322433,0x7fff5fbfec40,0,0xe662354641,0,0x1e4e3431f661,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10012f03f,0x7fff5fbfee88,0,0x1002490ed,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a21,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3459f354,0x7fff5fbfed38,0,0x1,0,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f4105,0x7fff5fbfe710,0,0x18f8100018f8001,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34568597,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10020966e,0x7fff5fbfebc0,0,0x102023aa0,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325910,0x7fff5fbfeda0,0,0x1e4e34551d37,0,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311b29,0x7fff5fbfed98,0,0x1e4e343f1d72,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b4bf9,0x7fff5fbfef78,0,0x37ec2ed0ddb1,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b27,0x7fff5fbfe620,0,0x101009410,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100251e85,0x7fff5fbfeea0,0,0x11e9a54a65b9,0,0x1e4e3455a80b,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000057a1,0x7fff5fbff1d0,0,0x0,4 -tick,0x1e4e3457879c,0x7fff5fbff2d8,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e345984df -tick,0x100075a7d,0x7fff5fbfef50,0,0x7fff5fbfefb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100071a0a,0x7fff5fbfefe0,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10025545e,0x7fff5fbfec80,0,0x1020259f0,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3456710d,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa49,0x7fff5fbfefb0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457f79f,0x7fff5fbff010,0,0x11e9a54fe659,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be6b6,0x7fff5fbfeee0,0,0x102023a70,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34596a01,0x7fff5fbfef60,0,0xd9c9ff15a96f5556,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912147cf,0x7fff5fbfecd0,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f97d8,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911db6b4,0x7fff5fbfeac8,0,0x10011d4a6,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002ff2c,0x7fff5fbfeb40,0,0x1020259f0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100114760,0x7fff5fbff1c8,0,0x0,4 -tick,0x1e4e343061a8,0x7fff5fbfea78,0,0x1e4e3455497b,0,0x1e4e343a8ee9,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000a6ad,0x7fff5fbfece0,0,0x7fff5fbfed00,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000bd13d,0x7fff5fbfe810,0,0x4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457d83a,0x7fff5fbfef40,0,0x1e4e343949d6,0,0x1e4e34399727 -tick,0x1e4e3457eac8,0x7fff5fbfef70,0,0x1e4e343993e2,0 -tick,0x1e4e345b2e7c,0x7fff5fbfeea8,0,0x1e4e343af6c7,0,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001ff2fb,0x7fff5fbfe8b0,0,0x102019b80,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432512f,0x7fff5fbfee78,0,0x1e4e345760c1,0,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100018408,0x7fff5fbfee10,0,0x7fff5fbfee27,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100269fce,0x7fff5fbff270,0,0x103053016,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911da168,0x7fff5fbfe878,0,0x100218e51,0,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100175d91,0x7fff5fbfec50,0,0x100a0e968,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100075a93,0x7fff5fbfe9e0,0,0x100000000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3a0,0x7fff5fbfeb28,0,0x10002cc97,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345974bc,0x7fff5fbfebe0,0,0x7fff5fbfec40,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91206bff,0x7fff5fbfe930,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456d80f,0x7fff5fbfef28,0,0x11e9a5295549,0,0x1e4e34399744 -tick,0x1e4e345a4008,0x7fff5fbfeb38,0,0x1e4e3457f673,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454ecee,0x7fff5fbfedf8,0,0x1e4e3454dee7,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x100170be1,0x7fff5fbfe9f0,0,0x7fff5fbfea40,0,0x1e4e343a9328,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9121376e,0x7fff5fbff360,0,0x7fff5fbff390,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343634e1,0x7fff5fbfeb08,0,0x1e4e3458506e,0,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100248977,0x7fff5fbfe970,0,0x7fff5fbfe9b0,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000c4aa5,0x7fff5fbfee80,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024911e,0x7fff5fbfec58,0,0x10024920d,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002ca3c,0x7fff5fbff038,0,0x10002d8e3,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df497,0x7fff5fbfece0,0,0x1019038f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002c87b1,0x7fff5fbfef70,0,0x7fff5fbfef98,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002490c1,0x7fff5fbfee50,0,0x101009410,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfefc8,0,0x10011d48c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100218e41,0x7fff5fbfedd0,0,0x7fff5fbfee00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254d1c,0x7fff5fbfebb0,0,0x11e9a5153f41,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345a40ee,0x7fff5fbfef38,0,0x1e4e34596abd,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dadb5,0x7fff5fbfeef0,0,0x7fff5fbfef20,0,0x1e4e3456b480,0x1e4e34580757,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10010e871,0x7fff5fbfe8d0,0,0x7fff5fbfe920,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456d6c1,0x7fff5fbfee20,0,0x7fff5fbfee60,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfeab0,0,0x3b2c07d10000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253c23,0x7fff5fbfe7a0,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a6d1,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019432f,0x7fff5fbfe7f0,0,0x7fff5fbfe840,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10006f6d7,0x7fff5fbfeb30,0,0x7fff5fbfeb70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f26d6,0x7fff5fbfebd8,0,0x7fff911f3195,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3458dfbc,0x7fff5fbfeb78,0,0x3d27976be39,0,0x1e4e343b67b1,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432556e,0x7fff5fbfef48,0,0x1e4e34551c75,0,0x1e4e3455a43d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002772f0,0x7fff5fbfe6e8,0,0x100262c16,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343986c9,0x7fff5fbfedf8,0,0x37ec2ed77c29,0,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100208387,0x7fff5fbfec20,0,0x100000000,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf1c8,0x7fff5fbfee00,0,0x5,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b68cc,0x7fff5fbfebf0,0,0x7fff5fbfec50,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf442,0x7fff5fbfed90,0,0x9b100000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1003946ea,0x7fff5fbfe8b8,0,0x10019ed51,3,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001500ac,0x7fff5fbfe290,0,0x7fff5fbfe300,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f26d6,0x7fff5fbfed28,0,0x7fff911f3195,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1002083f3,0x7fff5fbfec20,0,0x2,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afd3,0x7fff5fbfeb30,0,0x2e9dafd05104,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1003009ca,0x7fff5fbfe570,0,0x0,1 -tick,0x7fff911daaf5,0x7fff5fbfe530,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe590,0,0x0,1 -tick,0x1001a951a,0x7fff5fbfe590,0,0x0,1 -tick,0x1001a9ccc,0x7fff5fbfe4d0,0,0x0,1 -tick,0x10025245b,0x7fff5fbfe360,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120340,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019cfb2,0x7fff5fbfeae0,0,0xd3,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432e3db,0x7fff5fbfec50,0,0x1e4e3458c610,0,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10016d6fb,0x7fff5fbfea30,0,0x7fff5fbfea80,0,0x1e4e34320e97,0x1e4e34584f5f,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459668f,0x7fff5fbfef60,0,0xd9c9ff15a96f5556,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd1ff,0x7fff5fbfeeb0,0,0x7fff5fbfef50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008e828,0x7fff5fbff008,0,0x10008d9b6,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325548,0x7fff5fbff188,0,0x1e4e34580961,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f921d,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c081,0x7fff5fbfefd0,0,0x7fff5fbff010,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fd39,0x7fff5fbfec00,0,0x10099e400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3d4c,0x7fff5fbfedb0,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008d90f,0x7fff5fbfeea0,0,0x7fff5fbfef10,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000630f3,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9737,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10020201b,0x7fff5fbfec50,0,0x1000000000000,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3a1,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452ac19,0x7fff5fbfeac8,0,0xfffffffffffffffc,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d11,0x7fff5fbfeca0,0,0x7fff5fbfecd0,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b067,0x7fff5fbfecd0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b0628,0x7fff5fbfef88,0,0x1e4e3439922e,0 -tick,0x10024b181,0x7fff5fbfec80,0,0x11e9a4dcda69,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002758da,0x7fff5fbfe7f0,0,0x0,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120616c,0x7fff5fbff398,0,0x7fff91206c07,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b5b85,0x7fff5fbfee20,0,0x1e4e3452a4e7,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3456d6c0,0x7fff5fbfef80,0,0x1e4e34399744,0 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1002761d1,0x7fff5fbfecb0,0,0x7fff5fbfed40,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e3455a30b,0x7fff5fbfee40,0,0x11e9a4c7c331,0,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34306152,0x7fff5fbfeb08,0,0x1e4e343060e1,0,0x1e4e3454d16d,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345aedfe,0x7fff5fbfe9a8,0,0x1e4e34564c92,0,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608b5,0x7fff5fbfe800,0,0x1b8578d70000000a,0,0x1e4e343aac27,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458ca10,0x7fff5fbfe670,0,0x1e4e343e426d,0,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3a1,0x7fff5fbfe9b0,0,0x7fff5fbfea20,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100063117,0x7fff5fbfeb50,0,0x1000630f2,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343150b1,0x7fff5fbfed98,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455ea50,0x7fff5fbfef20,0,0x11e9a4b0be01,0,0x1e4e343949d6,0x1e4e34399727 -tick,0x1002be5b9,0x7fff5fbff0d0,0,0x0,3 -tick,0x1002be634,0x7fff5fbfea00,0,0x102023a90,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523cd,0x7fff5fbfeb80,0,0x2e9dafd15079,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100038f44,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345966ac,0x7fff5fbfef60,0,0xd9c9ff15a96f5556,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c1c1,0x7fff5fbfee30,0,0x7fff5fbfee80,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213806,0x7fff5fbfec40,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad21,0x7fff5fbfedd0,0,0x7fff5fbfedf0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd28f,0x7fff5fbfee90,0,0x301,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309889,0x7fff5fbff178,0,0x1e4e34580a7c,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa28,0x7fff5fbfef58,0,0x100063bd7,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580af9,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcf7,0x7fff5fbfee08,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345984ac,0x7fff5fbff368,0,0x1,0 -tick,0x1000f98c6,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3432e3db,0x7fff5fbfeba0,0,0x1e4e345a01b0,0,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d492,0x7fff5fbfeb80,0,0x7fff5fbfebe0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3e6,0x7fff5fbfe8e0,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345a08a3,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026f1c2,0x7fff5fbfea20,0,0x11e9a4be0430,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da1a8,0x7fff5fbfe7a8,0,0x10002fd5a,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100148951,0x7fff5fbfec10,0,0x7fff5fbfec70,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911d9d0f,0x7fff5fbfe7a0,0,0xff80000000001001,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345898bc,0x7fff5fbff030,0,0x3d27976be39,0,0x1e4e345892e0,0x1e4e343b699a,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf1c8,0x7fff5fbfe760,0,0x0,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a02ff,0x7fff5fbff3e0,0,0x1,0,0x1e4e3455218e,0x1e4e343e83b2,0x1e4e3459e4aa -tick,0x100053af7,0x7fff5fbfec70,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100218e41,0x7fff5fbfe8a0,0,0x7fff5fbfe8d0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100218e7c,0x7fff5fbff280,0,0x0,4 -tick,0x7fff91206c24,0x7fff5fbfed88,0,0x100046789,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3454ecef,0x7fff5fbfec98,0,0x7fff5fbfed68,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345547ae,0x7fff5fbfe9a8,0,0x1e4e34564c92,0,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b8351,0x7fff5fbfecb0,0,0xc800000000,0,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019b0ca,0x7fff5fbff2a0,0,0x2e9dafd04139,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34580920,0x7fff5fbfecb0,0,0x7fff5fbfed10,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x100046b97,0x7fff5fbff380,0,0x0,4 -tick,0x10004d0b7,0x7fff5fbff330,0,0x0,4 -tick,0x1e4e34320fc2,0x7fff5fbff4f8,0,0xe662304121,0,0x1e4e343b6008,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10014467c,0x7fff5fbfeb20,0,0x7fff5fbfeb60,0,0x1e4e343b6791,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b7e88,0x7fff5fbff160,0,0x1e4e34567296,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f920e,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912068ce,0x7fff5fbfed50,0,0x102025a38,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fcef,0x7fff5fbfef50,0,0x7fff5fbfef80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457665c,0x7fff5fbfeea8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002ff06,0x7fff5fbff058,0,0x10002d623,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd0bc,0x7fff5fbfed10,0,0xd9c9ff15a96f5556,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa49,0x7fff5fbfedd0,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34307e64,0x7fff5fbff288,0,0x1e4e343f1ec4,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbff478,0,0x0,3 -tick,0x1000f97d2,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100120367,0x7fff5fbfeab0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002fd01,0x7fff5fbfe930,0,0x7fff5fbfe970,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254601,0x7fff5fbfec40,0,0x7fff5fbfec90,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x10012ef11,0x7fff5fbfecb0,0,0x7fff5fbfed40,0,0x1e4e3455eb2b,0x1e4e343949fb,0x1e4e34399727 -tick,0x10025dd77,0x7fff5fbfe980,0,0x2e9dafd05949,0,0x1e4e345852c8,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d11,0x7fff5fbfeca0,0,0x7fff5fbfecd0,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3458747e,0x7fff5fbfee70,0,0xe66236f699,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3457efa1,0x7fff5fbfec98,0,0x7fff5fbfed20,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34552965,0x7fff5fbfeb78,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3458092f,0x7fff5fbfeca8,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34322ad0,0x7fff5fbfec50,0,0xe66234e391,0,0x1e4e3431f675,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbff070,0,0x23c0895200000014,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002523a0,0x7fff5fbfe808,0,0x1002490de,0,0x1e4e34551d37,0x1e4e3455a6d1,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3452a47a,0x7fff5fbfee38,0,0xe662304121,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120350,0x7fff5fbfec98,0,0x10000b1bd,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3454e283,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100232b72,0x7fff5fbfee80,0,0x37ec2eda1ac9,0,0x1e4e34394aa3,0x1e4e34399727 -tick,0x7fff9120c22a,0x7fff5fbff260,0,0x0,4 -tick,0x1002be791,0x7fff5fbfeb30,0,0x7fff5fbfece8,0,0x1e4e34551d37,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff8ddd324e,0x7fff5fbff668,0,0x0,4 -tick,0x1e4e34573df6,0x7fff5fbff030,0,0x1e4e34588067,0 -tick,0x100184570,0x7fff5fbfe748,0,0x1002e4c99,0,0x1e4e343210fa,0x1e4e3454dadf,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432586c,0x7fff5fbfea68,0,0x1e4e34551d37,0,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a02c2,0x7fff5fbfed30,0,0x1,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253c00,0x7fff5fbff0b0,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566f0d,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912153b6,0x7fff5fbff020,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345807cf,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580f3c,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df4d5,0x7fff5fbfece0,0,0x101903d20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de820,0x7fff5fbfec88,0,0x5b92728e7ca33422,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be5b9,0x7fff5fbfef60,0,0x102023a70,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8240,0x7fff5fbff160,0,0x1e4e34566eed,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343248b1,0x7fff5fbff620,0,0x3d2797e3ff9,0 -tick,0x1000f9877,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10018e591,0x7fff5fbfe8b0,0,0x1003edf26,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457ce4e,0x7fff5fbfee30,0,0x3d2797f6031,0,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024edc5,0x7fff5fbfe640,0,0x37ec2eda5e59,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000fde48,0x7fff5fbfe8d8,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253c37,0x7fff5fbfe6d8,0,0x1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b98d8,0x7fff5fbfec70,0,0x11e9a466c8b9,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100117b7e,0x7fff5fbfeb60,0,0x7fff5fbfeb80,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a810a,0x7fff5fbfecc0,0,0x0,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1000a02a9,0x7fff5fbfe9d8,0,0x1000c4a09,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfebf0,0,0x17a3df6000000022,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457ce82,0x7fff5fbfee30,0,0x3d2797f6031,0,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001459ab,0x7fff5fbfebe0,0,0x1e4e345b67c1,0,0x1e4e3457d1a3,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457104f,0x7fff5fbfeb30,0,0x11e9a452add9,0,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001785e0,0x7fff5fbfe938,0,0x10011fb87,3,0x1e4e3454e2fc,0x1e4e345b60c1,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b0ef8,0x7fff5fbfe7f0,0,0x7fff5fbfe890,0,0x1e4e343e435a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3457400a,0x7fff5fbff100,0,0x1e4e345921fe,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34571f78,0x7fff5fbfebc8,0,0x0,0,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c1c1,0x7fff5fbfeb50,0,0x7fff5fbfec00,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f3db5,0x7fff5fbfe930,0,0x100000002,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001221b5,0x7fff5fbfe7d0,0,0x79,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e03e,0x7fff5fbfeb10,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001907bd,0x7fff5fbff2c8,0,0x101009400,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011bb00,0x7fff5fbff2d0,0,0x102023ab0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332fdd,0x7fff5fbfec68,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551595,0x7fff5fbfec30,0,0x7fff5fbfec88,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34576792,0x7fff5fbfeea8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cd2,0x7fff5fbfeeb0,0,0x7fff5fbfeec0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000513af,0x7fff5fbfed00,0,0xaabee816aa1,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3453c601,0x7fff5fbff130,0,0x7fff5fbff170,0,0x1e4e34580a7c,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b920,0x7fff5fbfefb0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3f19,0x7fff5fbfecf0,0,0x10280ebe8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d3e6,0x7fff5fbfede0,0,0x10001a870,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010e871,0x7fff5fbff030,0,0x7fff5fbff090,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be568,0x7fff5fbff500,0,0x0,3 -tick,0x7fff912134cd,0x7fff5fbfeab0,0,0x14fff80000,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34326020,0x7fff5fbfebb0,0,0x1e4e34359a6e,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34555073,0x7fff5fbfee18,0,0xe662340051,0,0x1e4e3455ac62,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002be510,0x7fff5fbfec68,0,0x1002beadf,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001203fa,0x7fff5fbfe9f0,0,0x7fff5fbfea10,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ac549,0x7fff5fbfed40,0,0x1e4e343ad7b1,0,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e0fb,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608b8,0x7fff5fbfeab0,0,0xd584d7f0000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34321eff,0x7fff5fbfeb38,0,0x0,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024edf7,0x7fff5fbff000,0,0x37ec2edc56a9,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34308616,0x7fff5fbfec98,0,0x1e4e345b89e6,0,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345a0c89,0x7fff5fbfeef0,0,0x1e4e343a9cb0,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10011addb,0x7fff5fbfecb0,0,0x7fff5fbfeda0,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34326316,0x7fff5fbfebe0,0,0x1e4e34588067,0,0x1e4e345603e5,0x1e4e345a995d,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170963,0x7fff5fbfea30,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201b21,0x7fff5fbfee70,0,0x11e9a439f361,0,0x1e4e343a9cb0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9127cbc6,0x7fff5fbfe868,0,0x10011b9bf,3,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c1561,0x7fff5fbfea00,0,0x7fff5fbfea28,0,0x1e4e3454d16d,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff91213405,0x7fff5fbfe6f0,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306140,0x7fff5fbfec38,0,0x1e4e3454ed8b,0,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f43,0x7fff5fbfec68,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34323e84,0x7fff5fbfeca0,0,0x1e4e34580480,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254611,0x7fff5fbfeac0,0,0x962355501,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100249323,0x7fff5fbfec80,0,0x101009410,0,0x1e4e34551d37,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a7841,0x7fff5fbfef90,0,0x7fff5fbff010,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309e80,0x7fff5fbff268,0,0x1e4e343f1d72,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c298,0x7fff5fbfec40,0,0x4ea53965e80e365a,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c138,0x7fff5fbfed00,0,0x101817540,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120616c,0x7fff5fbfedb8,0,0x7fff91206c07,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100277344,0x7fff5fbfe5f8,0,0x11e9a429c8f1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911db100,0x7fff5fbfed08,0,0x1000bd0fd,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432556e,0x7fff5fbff188,0,0x1e4e34580961,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100248ff1,0x7fff5fbfec50,0,0x7fff5fbfecc0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011b898,0x7fff5fbff5c0,0,0x0,4 -tick,0x1000f98a9,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e34399735,0x7fff5fbfef88,0,0x37ec2edd43f1,0 -tick,0x100148951,0x7fff5fbfedd0,0,0x7fff5fbfee30,0,0x1e4e3456bed2,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af61,0x7fff5fbfe6e0,0,0x7fff5fbfe7d0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bfb31,0x7fff5fbfeb90,0,0x7fff5fbfebb0,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afe0,0x7fff5fbfe8b0,0,0x2e9dafd14da1,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af61,0x7fff5fbfe6e0,0,0x7fff5fbfe7d0,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002566c3,0x7fff5fbfefb0,0,0x0,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455506e,0x7fff5fbff050,0,0x1e4e3455ac62,0,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345ae474,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001912db,0x7fff5fbff240,0,0x0,3 -tick,0x7fff911f308a,0x7fff5fbfed60,0,0x7fff5fbfed80,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff911dbcda,0x7fff5fbfe898,0,0x7fff911f40bc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e2e8,0x7fff5fbfeb30,0,0x100000000,0,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523aa,0x7fff5fbff0f8,0,0x102019920,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430da2d,0x7fff5fbff118,0,0x1e4e34591b02,0 -tick,0x1e4e343210c7,0x7fff5fbfed48,0,0xe662304121,0,0x1e4e3454dadf,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f308a,0x7fff5fbfec10,0,0x7fff5fbfec30,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10011d44c,0x7fff5fbfecb0,0,0x39d,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100150091,0x7fff5fbff320,0,0x7fff5fbff350,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911daaf5,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100260962,0x7fff5fbff060,0,0x0,3 -tick,0x1e4e3432554b,0x7fff5fbfeda0,0,0x1e4e343f1f17,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251e41,0x7fff5fbfef30,0,0x7fff5fbfefc0,0,0x1e4e3455ab16,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100118d21,0x7fff5fbfeb60,0,0x7fff5fbfeb80,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002fcb5,0x7fff5fbfea70,0,0x7fff5fbfeaa0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfe690,0,0xcc6ac0600000031,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002761d0,0x7fff5fbfeae8,0,0x10024ed90,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213470,0x7fff5fbfec00,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100248ff1,0x7fff5fbfec50,0,0x7fff5fbfecc0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002c9386,0x7fff5fbfed30,0,0x102023a68,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfefa8,0,0x10011a209,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afe0,0x7fff5fbfee20,0,0x2e9dafd23ac1,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430a8e0,0x7fff5fbff380,0,0x1e4e343df271,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34307fe5,0x7fff5fbff150,0,0x1e4e34567ab6,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cfd,0x7fff5fbfee60,0,0x7fff5fbfeed0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024ec51,0x7fff5fbfeb30,0,0x7fff5fbfebc0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9127cb7e,0x7fff5fbfef58,0,0x100063bd7,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100196dd6,0x7fff5fbfef50,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfeed0,0,0x0,1 -tick,0x7fff911dab07,0x7fff5fbfee70,0,0x0,1 -tick,0x1001aa4f3,0x7fff5fbfee80,0,0x0,1 -tick,0x1001a8051,0x7fff5fbfee90,0,0x0,1 -tick,0x1001aa77b,0x7fff5fbfee50,0,0x0,1 -tick,0x7fff9120c100,0x7fff5fbfeb20,0,0x5787abc8f40533af,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3432516f,0x7fff5fbfee78,0,0x1e4e345760c1,0,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34555463,0x7fff5fbfedf0,0,0x11,0,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf43d,0x7fff5fbfee40,0,0x1e4e34394688,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1002068e1,0x7fff5fbfe4b0,0,0x7fff5fbfe520,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfe8c0,0,0x263e5f5700000003,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343af6a1,0x7fff5fbfeec0,0,0x7fff5fbfef20,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x100144150,0x7fff5fbfeaa0,0,0x100a0e9b8,0,0x1e4e343e78eb,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100205974,0x7fff5fbfeac0,0,0x7fff5fbfeb58,3,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afc2,0x7fff5fbff420,0,0x0,3 -tick,0x100253b6a,0x7fff5fbfee70,0,0x101009410,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002061c1,0x7fff5fbfe720,0,0xe662300000,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345acf60,0x7fff5fbfee78,0,0x1e4e345529b6,0,0x1e4e343993e2 -tick,0x1e4e3455a7aa,0x7fff5fbfeaf8,0,0x101009400,0,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100005875,0x7fff5fbff1d0,0,0x0,4 -tick,0x7fff911da168,0x7fff5fbfeb78,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10015ddf0,0x7fff5fbfead8,0,0x1002bfb63,0,0x1e4e34579b39,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3435ccf5,0x7fff5fbfea88,0,0x1e4e343a9002,0,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100205968,0x7fff5fbfe900,0,0x10284b050,0,0x1e4e3453cc5c,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34309849,0x7fff5fbfedd0,0,0x1e4e3455a63b,0,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3458063c,0x7fff5fbfecb0,0,0x7fff5fbfed10,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c1fda,0x7fff5fbfe920,0,0x7fff5fbfe940,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455e0a3,0x7fff5fbfed68,0,0x1e4e343ad780,0,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e09d,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100262c04,0x7fff5fbfe1c0,0,0x7fff00000000,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91213198,0x7fff5fbfeaf0,0,0xfffffffffffffc00,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10012ef20,0x7fff5fbfedb0,0,0x7fff5fbfee40,0,0x1e4e3455ab16,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253aee,0x7fff5fbff0b0,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432556e,0x7fff5fbff030,0,0x1e4e34587fe0,0 -tick,0x1000c80da,0x7fff5fbfe810,0,0x101901938,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100268407,0x7fff5fbff170,0,0x7fff5fbff1a0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10004ec1d,0x7fff5fbfeb30,0,0x7fff5fbfeb40,0,0x1e4e34560bb7,0x1e4e345b0d6e,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431511c,0x7fff5fbfed60,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfe7b8,0,0x100121c6d,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3d6,0x7fff5fbff030,0,0x1019008b0,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002cc4d,0x7fff5fbff000,0,0x7fff5fbff020,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523ac,0x7fff5fbfee00,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213367,0x7fff5fbfeba0,0,0xffffffffffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fd0d,0x7fff5fbfecc0,0,0x10099f800,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdf9,0x7fff5fbfec28,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002491c0,0x7fff5fbfec60,0,0x7fff5fbfec80,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91206bee,0x7fff5fbfee10,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9f94,0x7fff5fbfee90,0,0x20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa53,0x7fff5fbfec20,0,0x7fff5fbfec40,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100215901,0x7fff5fbfec10,0,0x7fff5fbfec60,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100053d1f,0x7fff5fbff388,0,0x0,4 -tick,0x1e4e3459fdca,0x7fff5fbfeb90,0,0x1e4e345a08d4,0,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026b585,0x7fff5fbfe9e0,0,0x18,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbff348,0,0x0,4 -tick,0x10019cbbb,0x7fff5fbfe6f0,0,0x11e9a5b58831,0,0x1e4e34322a85,0x1e4e34320c96,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455e0a3,0x7fff5fbfeb30,0,0x11e9a5b35409,0,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911f19a7,0x7fff5fbfeba0,0,0x4d555458,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000df44c,0x7fff5fbfe880,0,0x7fff5fbfe8b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002061b3,0x7fff5fbfeac0,0,0x11e9a5b00000,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a67e0,0x7fff5fbfe9c0,0,0x1e4e34555ca8,0,0x1e4e34564a8c,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170941,0x7fff5fbfea80,0,0x7fff5fbfeab0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10008e829,0x7fff5fbfeb20,0,0x7fff5fbfeb50,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306141,0x7fff5fbfee58,0,0x7fff5fbfee98,0,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456796a,0x7fff5fbfec78,0,0xe662304161,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f2cdd,0x7fff5fbfeb90,0,0x7fff5fbfebd0,0,0x1e4e34322a3d,0x1e4e3431f675,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000c163,0x7fff5fbfe9a0,0,0x7fff5fbfe9e8,0,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459ab65,0x7fff5fbfec58,0,0x1e4e3431f661,0,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001941bf,0x7fff5fbfe900,0,0x7fff5fbfe920,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343252b0,0x7fff5fbfee30,0,0x1e4e34398a05,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343181fa,0x7fff5fbfe910,0,0x1e4e343098ce,0,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100237d06,0x7fff5fbfe980,0,0x0,1 -tick,0x1002fee8b,0x7fff5fbfe920,0,0x0,1 -tick,0x1002feef7,0x7fff5fbfe920,0,0x0,1 -tick,0x1002ff86a,0x7fff5fbfe860,0,0x0,1 -code-creation,LoadIC,0x1e4e3457e400,284,"" -code-creation,LoadIC,0x1e4e3457e400,284,"" -code-creation,LoadIC,0x1e4e3457e520,134,"_ended" -code-creation,LoadIC,0x1e4e3457e520,134,"_ended" -code-creation,LoadIC,0x1e4e3457e5c0,134,"length" -code-creation,LoadIC,0x1e4e3457e5c0,134,"length" -code-creation,LoadIC,0x1e4e3457e660,134,"_queue" -code-creation,LoadIC,0x1e4e3457e660,134,"_queue" -code-creation,CallIC,0x1e4e3457e700,217,"_process" -code-creation,LoadIC,0x1e4e3457e7e0,284,"" -code-creation,LoadIC,0x1e4e3457e7e0,284,"" -code-creation,LoadIC,0x1e4e3457e900,138,"_offset" -code-creation,LoadIC,0x1e4e3457e900,138,"_offset" -code-creation,LoadIC,0x1e4e3457e9a0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457e9a0,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457ea40,185,"_processing" -code-creation,StoreIC,0x1e4e3457ea40,185,"_processing" -code-creation,CallIC,0x1e4e3457eb00,277,"removeAllListeners" -code-creation,LoadIC,0x1e4e3457ec20,134,"_events" -code-creation,LoadIC,0x1e4e3457ec20,134,"_events" -code-creation,StoreIC,0x1e4e345b95c0,185,"_flush" -code-creation,StoreIC,0x1e4e345b95c0,185,"_flush" -code-creation,LoadIC,0x1e4e345b9680,134,"_events" -code-creation,LoadIC,0x1e4e345b9680,134,"_events" -code-creation,LoadIC,0x1e4e3457d740,254,"" -code-creation,LoadIC,0x1e4e3457d740,254,"" -code-creation,StoreIC,0x1e4e3457d840,390,"_events" -code-creation,StoreIC,0x1e4e3457d840,390,"_events" -code-creation,LoadIC,0x1e4e3457d9e0,254,"" -code-creation,LoadIC,0x1e4e3457d9e0,254,"" -code-creation,LoadIC,0x1e4e3457dae0,134,"_events" -code-creation,LoadIC,0x1e4e3457dae0,134,"_events" -code-creation,CallIC,0x1e4e3457db80,257,"emit" -code-creation,LoadIC,0x1e4e3457dca0,134,"_events" -code-creation,LoadIC,0x1e4e3457dca0,134,"_events" -tick,0x100179b56,0x7fff5fbfeab0,0,0x7fff5fbfead8,0,0x1e4e345ae826,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3457dd40,189,"locked" -code-creation,StoreIC,0x1e4e3457dd40,189,"locked" -code-creation,LoadIC,0x1e4e3457de00,138,"lockBuffer" -code-creation,LoadIC,0x1e4e3457de00,138,"lockBuffer" -code-creation,CallIC,0x1e4e3457dea0,287,"emit" -code-creation,LoadIC,0x1e4e3457dfc0,134,"_ended" -code-creation,LoadIC,0x1e4e3457dfc0,134,"_ended" -code-creation,LoadIC,0x1e4e3457e060,134,"_queue" -code-creation,LoadIC,0x1e4e3457e060,134,"_queue" -code-creation,CallIC,0x1e4e345b9320,217,"_process" -code-creation,CallIC,0x1e4e3457c420,492,"write" -code-creation,LoadIC,0x1e4e3457c620,138,"_offset" -code-creation,LoadIC,0x1e4e3457c620,138,"_offset" -code-creation,LoadIC,0x1e4e3457c6c0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457c6c0,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457c760,185,"_processing" -code-creation,StoreIC,0x1e4e3457c760,185,"_processing" -code-creation,CallIC,0x1e4e3457c820,492,"write" -code-creation,LoadIC,0x1e4e3457ca20,138,"_buffer" -code-creation,LoadIC,0x1e4e3457ca20,138,"_buffer" -code-creation,StoreIC,0x1e4e3457cac0,189,"_offset" -code-creation,StoreIC,0x1e4e3457cac0,189,"_offset" -code-creation,CallIC,0x1e4e3457cb80,287,"emit" -code-creation,LoadIC,0x1e4e3457cca0,134,"domain" -code-creation,LoadIC,0x1e4e3457cca0,134,"domain" -code-creation,LoadIC,0x1e4e345b9400,138,"_buffer" -code-creation,LoadIC,0x1e4e345b9400,138,"_buffer" -code-creation,StoreIC,0x1e4e345b9080,189,"_offset" -code-creation,StoreIC,0x1e4e345b9080,189,"_offset" -code-creation,CallIC,0x1e4e345739e0,287,"emit" -code-creation,LoadIC,0x1e4e34573b00,134,"_events" -code-creation,LoadIC,0x1e4e34573b00,134,"_events" -code-creation,LoadIC,0x1e4e34573ba0,134,"domain" -code-creation,LoadIC,0x1e4e34573ba0,134,"domain" -code-creation,CallIC,0x1e4e34573c40,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e34573d60,185,"_flush" -code-creation,StoreIC,0x1e4e34573d60,185,"_flush" -code-creation,LoadIC,0x1e4e34573e20,134,"pair" -code-creation,LoadIC,0x1e4e34573e20,134,"pair" -code-creation,LoadIC,0x1e4e34573ec0,134,"writable" -code-creation,LoadIC,0x1e4e34573ec0,134,"writable" -code-creation,LoadIC,0x1e4e34573f60,134,"_pending" -code-creation,LoadIC,0x1e4e34573f60,134,"_pending" -code-creation,LoadIC,0x1e4e34574000,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e34574000,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e345740a0,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345740a0,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e34574140,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e34574140,189,"_pendingBytes" -code-creation,LoadIC,0x1e4e34574200,170,"_pusher" -code-creation,LoadIC,0x1e4e34574200,170,"_pusher" -code-creation,LoadIC,0x1e4e345742c0,170,"_pusher" -code-creation,LoadIC,0x1e4e345742c0,170,"_pusher" -code-creation,LoadIC,0x1e4e34574380,134,"domain" -code-creation,LoadIC,0x1e4e34574380,134,"domain" -code-creation,LoadIC,0x1e4e34574420,134,"_needDrain" -code-creation,LoadIC,0x1e4e34574420,134,"_needDrain" -code-creation,LoadIC,0x1e4e345744c0,134,"length" -code-creation,LoadIC,0x1e4e345744c0,134,"length" -code-creation,StoreIC,0x1e4e34574560,189,"locked" -code-creation,StoreIC,0x1e4e34574560,189,"locked" -code-creation,LoadIC,0x1e4e345b5620,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b5620,138,"lockBuffer" -tick,0x1e4e3454e2c8,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b0081,0x7fff5fbfeb20,0,0x7fff5fbfebb0,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454decc,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345aece0,0x7fff5fbfee28,0,0x1e4e3452a536,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345b56c0,134,"_events" -code-creation,LoadIC,0x1e4e345b56c0,134,"_events" -code-creation,LoadIC,0x1e4e345b5760,134,"domain" -code-creation,LoadIC,0x1e4e345b5760,134,"domain" -tick,0x10022c6cc,0x7fff5fbfee28,0,0x3,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456e8c0,492,"execute" -code-creation,LoadIC,0x1e4e3456eac0,254,"" -code-creation,LoadIC,0x1e4e3456eac0,254,"" -code-creation,StoreIC,0x1e4e3456ebc0,390,"_events" -code-creation,StoreIC,0x1e4e3456ebc0,390,"_events" -code-creation,LoadIC,0x1e4e3456ed60,254,"" -code-creation,LoadIC,0x1e4e3456ed60,254,"" -code-creation,CallIC,0x1e4e3456ee60,205,"onIncoming" -code-creation,LoadIC,0x1e4e3456ef40,284,"" -code-creation,LoadIC,0x1e4e3456ef40,284,"" -code-creation,StoreIC,0x1e4e3456f060,420,"_events" -code-creation,StoreIC,0x1e4e3456f060,420,"_events" -code-creation,LoadIC,0x1e4e34569e60,284,"" -code-creation,LoadIC,0x1e4e34569e60,284,"" -code-creation,LoadIC,0x1e4e34569f80,134,"_events" -code-creation,LoadIC,0x1e4e34569f80,134,"_events" -code-creation,CallIC,0x1e4e3456a020,257,"emit" -code-creation,LoadIC,0x1e4e3456a140,134,"_events" -code-creation,LoadIC,0x1e4e3456a140,134,"_events" -code-creation,CallIC,0x1e4e3456a1e0,287,"emit" -code-creation,LoadIC,0x1e4e3456a300,134,"_events" -code-creation,LoadIC,0x1e4e3456a300,134,"_events" -code-creation,CallIC,0x1e4e3456a3a0,287,"emit" -code-creation,LoadIC,0x1e4e3456a4c0,134,"_events" -code-creation,LoadIC,0x1e4e3456a4c0,134,"_events" -code-creation,LoadIC,0x1e4e3456a560,134,"domain" -code-creation,LoadIC,0x1e4e3456a560,134,"domain" -code-creation,LoadIC,0x1e4e3456a600,134,"_events" -code-creation,LoadIC,0x1e4e3456a600,134,"_events" -code-creation,LoadIC,0x1e4e3456a6a0,134,"domain" -code-creation,LoadIC,0x1e4e3456a6a0,134,"domain" -code-creation,CallIC,0x1e4e3456a740,277,"removeListener" -code-creation,LoadIC,0x1e4e3456a860,134,"domain" -code-creation,LoadIC,0x1e4e3456a860,134,"domain" -code-creation,CallIC,0x1e4e3456a900,247,"removeListener" -code-creation,LoadIC,0x1e4e345b5800,134,"_events" -code-creation,LoadIC,0x1e4e345b5800,134,"_events" -code-creation,LoadIC,0x1e4e345b4f80,138,"incoming" -code-creation,LoadIC,0x1e4e345b4f80,138,"incoming" -code-creation,CallIC,0x1e4e345b5020,492,"execute" -code-creation,CallIC,0x1e4e345b5220,205,"onIncoming" -code-creation,LoadIC,0x1e4e345b5300,138,"incoming" -code-creation,LoadIC,0x1e4e345b5300,138,"incoming" -tick,0x1e4e343a947e,0x7fff5fbfead0,0,0x11e9a4f5bae1,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002522f4,0x7fff5fbfe9f0,0,0x7fff5fbfeaa0,0,0x1e4e343aac27,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e345656a0,492,"finish" -code-creation,CallIC,0x1e4e345658a0,492,"finish" -tick,0x100175d94,0x7fff5fbfec50,0,0x101009400,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,CallIC,0x1e4e34565aa0,247,"removeListener" -tick,0x10011d37f,0x7fff5fbfefb0,0,0x102019d00,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbbd1,0x7fff5fbfece8,0,0x7fff911dbb89,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfee00,0,0x2e9dafd13ad1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345a437c,0x7fff5fbfeef0,0,0x1e4e34597bd0,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de7be,0x7fff5fbfec28,0,0xcc5c790302044694,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432554b,0x7fff5fbff288,0,0x1e4e343f1e91,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f4040,0x7fff5fbfed20,0,0x4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100148950,0x7fff5fbff0f8,0,0x100144512,0,0x1e4e34580509,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b95,0x7fff5fbfede0,0,0x101009410,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343262ef,0x7fff5fbff188,0,0x1e4e345809c0,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e34565ba0,134,"writable" -code-creation,LoadIC,0x1e4e34565ba0,134,"writable" -code-creation,CallIC,0x1e4e34565c40,217,"write" -code-creation,LoadIC,0x1e4e34565d20,134,"pair" -code-creation,LoadIC,0x1e4e34565d20,134,"pair" -code-creation,LoadIC,0x1e4e34565dc0,134,"_pending" -code-creation,LoadIC,0x1e4e34565dc0,134,"_pending" -code-creation,LoadIC,0x1e4e34565e60,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e34565e60,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e34565f00,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e34565f00,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e34565fa0,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e34565fa0,189,"_pendingBytes" -tick,0x7fff91206bde,0x7fff5fbfed08,0,0x1000c80da,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e34566060,134,"_events" -code-creation,LoadIC,0x1e4e34566060,134,"_events" -code-creation,LoadIC,0x1e4e34566100,134,"domain" -code-creation,LoadIC,0x1e4e34566100,134,"domain" -code-creation,LoadIC,0x1e4e345661a0,134,"writable" -code-creation,LoadIC,0x1e4e345661a0,134,"writable" -code-creation,CallIC,0x1e4e34566240,200,"write" -code-creation,LoadIC,0x1e4e34566320,134,"_needDrain" -code-creation,LoadIC,0x1e4e34566320,134,"_needDrain" -code-creation,CallIC,0x1e4e345663c0,257,"emit" -tick,0x1e4e34557cbf,0x7fff5fbfeda8,0,0x11e9a4f92e11,0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c184,0x7fff5fbfeb60,0,0x7fff5fbfebe0,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34570e61,0x7fff5fbfec28,0,0x7fff5fbfec78,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34588206,0x7fff5fbfebe8,0,0x7fff5fbfec18,0,0x1e4e345603e5,0x1e4e345a995d,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100395194,0x7fff5fbfec88,0,0x100218e51,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455287e,0x7fff5fbfebe0,0,0x5fbfec28,0,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -code-creation,StoreIC,0x1e4e345664e0,189,"_buffer" -code-creation,StoreIC,0x1e4e345664e0,189,"_buffer" -code-creation,LoadIC,0x1e4e345665a0,138,"_binding" -tick,0x10022dbda,0x7fff5fbfebe0,0,0x7fff5fbfec30,0,0x1e4e343995ed -code-creation,LoadIC,0x1e4e345665a0,138,"_binding" -code-creation,LoadIC,0x1e4e34566640,134,"_flush" -code-creation,LoadIC,0x1e4e34566640,134,"_flush" -code-creation,StoreIC,0x1e4e345666e0,189,"callback" -code-creation,StoreIC,0x1e4e345666e0,189,"callback" -code-creation,StoreIC,0x1e4e345667a0,189,"buffer" -code-creation,StoreIC,0x1e4e345667a0,189,"buffer" -tick,0x1002488ed,0x7fff5fbfe970,0,0x7fff5fbfe9b0,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459ab7c,0x7fff5fbff080,0,0x1e4e3431f661,0,0x1e4e343b69fe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024c745,0x7fff5fbfe800,0,0xe662346ba9,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100063432,0x7fff5fbfe9d0,0,0x7fff5fbfe9e0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10006f819,0x7fff5fbfea10,0,0x7fff5fbfea30,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34327aa8,0x7fff5fbfee60,0,0x1e4e3455287e,0,0x1e4e343993e2 -tick,0x10002ff07,0x7fff5fbfeb70,0,0x7fff5fbfebd0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345810d9,0x7fff5fbfecb0,0,0x7fff5fbfed10,0,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432e49c,0x7fff5fbfef40,0,0x1e4e34394adc,0,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfec00,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100014e8e,0x7fff5fbff370,0,0x1000145ce,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011b611,0x7fff5fbfe8c0,0,0x7fff5fbfe920,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345aa743,0x7fff5fbfec50,0,0x101009400,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911db6b4,0x7fff5fbfeae8,0,0x10011d4a6,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100179b31,0x7fff5fbfebd0,0,0x7fff5fbfec00,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10018e63e,0x7fff5fbfeb20,1,0x10000a04c,4,0x1e4e3453ed3f,0x1e4e3454d637,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x100038ee9,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008e971,0x7fff5fbff0b8,0,0x10002d9ae,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c13b1,0x7fff5fbfefb0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213180,0x7fff5fbfec50,0,0x10099da00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f933e,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34596a47,0x7fff5fbfef60,0,0xd9c9ff15a96f5556,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd1d4,0x7fff5fbfeeb0,0,0x7fff5fbfef50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91215395,0x7fff5fbfefe0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10009ff37,0x7fff5fbfee78,0,0x5,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580f23,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f98bd,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002bf39c,0x7fff5fbfe7e0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000ba08b,0x7fff5fbfeac0,0,0x7fff5fbfeaf0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912083ce,0x7fff5fbfe9a0,0,0x7fff5fbfe9f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c347b,0x7fff5fbfe938,0,0x1000c4ab3,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170950,0x7fff5fbfe7b0,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345a08a3,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343150a7,0x7fff5fbfeef0,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x1000487c5,0x7fff5fbff810,0,0x0,4 -tick,0x1e4e3430b6a4,0x7fff5fbfee20,0,0x1e4e3452a4a4,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002761d1,0x7fff5fbfecb0,0,0x7fff5fbfed40,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbff0d8,0,0x0,3 -tick,0x100053af7,0x7fff5fbfec70,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100053af7,0x7fff5fbfec70,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10014469f,0x7fff5fbfeea0,0,0x7fff5fbfeef0,0,0x1e4e3456dbd3,0x1e4e34399744 -tick,0x10019127d,0x7fff5fbff2e8,0,0x101009400,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100275696,0x7fff5fbfe858,0,0x100,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10027b4f1,0x7fff5fbfe9e0,0,0x7fff5fbfea10,0,0x1e4e345ae6cd,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002773c0,0x7fff5fbfe138,0,0x11e9a4b918f9,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100249208,0x7fff5fbfeb90,0,0xe662367291,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfe8a0,0,0x263e5f5700000015,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343258a8,0x7fff5fbfee38,0,0x1e4e3455a74d,0,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3456d83d,0x7fff5fbfedd0,0,0x5,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34311310,0x7fff5fbff1e8,0,0x0,0 -tick,0x1e4e345b22c8,0x7fff5fbff0a0,0,0x11e9a4a07689,0 -tick,0x100253b30,0x7fff5fbfee30,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10006f945,0x7fff5fbfefe0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006f66b,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd337,0x7fff5fbfee40,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120839b,0x7fff5fbfed40,0,0x7fff5fbfed90,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345813d8,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3db1,0x7fff5fbfeef0,0,0x7fff5fbfef60,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911d9d03,0x7fff5fbfecb8,0,0x7fff912137f5,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be7c2,0x7fff5fbfefa0,0,0xe662367291,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100271470,0x7fff5fbfecf0,0,0x0,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9926,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100260845,0x7fff5fbfebf0,0,0x17a3df6000000022,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001481d,0x7fff5fbff350,0,0x9,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34557ae1,0x7fff5fbfedd8,0,0x7fff5fbfee20,0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a99,0x7fff5fbfeca0,0,0x7fff5fbfed00,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100260a84,0x7fff5fbfe950,0,0x1001942e3,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100215900,0x7fff5fbfec18,0,0x100208323,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253afb,0x7fff5fbfe9a0,0,0x101009410,0,0x1e4e3455ac3e,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b0f48,0x7fff5fbfe9a0,0,0x7fff5fbfea90,0,0x1e4e343a92fa,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011d350,0x7fff5fbff318,0,0x1000147aa,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430987b,0x7fff5fbfeb38,0,0x11e9a4941d29,0,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af60,0x7fff5fbff1a8,0,0x1002490de,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf87c,0x7fff5fbfea00,0,0x7fff5fbfea50,0,0x1e4e343a9328,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100253b43,0x7fff5fbfece0,0,0x101009410,0,0x1e4e3455eb2b,0x1e4e343949fb,0x1e4e34399727 -tick,0x100254ef6,0x7fff5fbfec10,0,0x11e9a49ac921,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b5b85,0x7fff5fbfee20,0,0x1e4e3452a4e7,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100050e08,0x7fff5fbfe8e0,0,0x7fff5fbfe920,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c723,0x7fff5fbfe800,0,0xe662346ba9,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b2b1e,0x7fff5fbfeb90,0,0x7fff5fbfebb0,0,0x1e4e3455f47d,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345aefb7,0x7fff5fbfed30,0,0x7fff5fbfed88,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100262c04,0x7fff5fbfe4d0,0,0x7fff5fbfe618,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbfed18,0,0x7fff911f2dfd,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1000df100,0x7fff5fbfe748,0,0xcc5c790345bed8b2,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253c3c,0x7fff5fbfe8a0,0,0x7fff5fbfe938,0,0x1e4e3455a74d,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af61,0x7fff5fbfe7f0,0,0x7fff5fbfe890,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000bd105,0x7fff5fbfed20,0,0x7fff5fbfedd4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daac1,0x7fff5fbfee60,0,0x7fff5fbfee80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430da29,0x7fff5fbff278,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008d8c5,0x7fff5fbfee38,0,0x10008e873,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100118d21,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c562,0x7fff5fbfed20,0,0x51688000000017d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253c09,0x7fff5fbff3e0,0,0x0,3 -tick,0x7fff911daa40,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001737be,0x7fff5fbfed00,0,0x7fff5fbfed01,0,0x1e4e3431b547,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345afe62,0x7fff5fbfec90,0,0x11e9a48e63e1,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e283,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100005835,0x7fff5fbff1d0,0,0x0,4 -tick,0x10019ed2a,0x7fff5fbfea98,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100254ef6,0x7fff5fbfe660,0,0xe662367291,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbfee30,0,0xd584d7f00000002,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10001481d,0x7fff5fbff350,0,0x9,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454e18d,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455c36a,0x7fff5fbfeae0,0,0x7fff5fbfeb48,0,0x1e4e34588883,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c604c,0x7fff5fbfeb20,0,0xe662300000,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afd3,0x7fff5fbfe660,0,0x2e9dafd18fb1,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343ad851,0x7fff5fbfee78,0,0x11e9a47d4e59,0,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3455a07c,0x7fff5fbfee40,0,0x11e9a476ec61,0,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10012eb18,0x7fff5fbfeb80,0,0x7fff5fbfebe0,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10001a977,0x7fff5fbfe930,0,0xe662304121,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f1b39,0x7fff5fbfeba0,0,0x4d555458,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff912085ee,0x7fff5fbff610,0,0x0,4 -tick,0x1e4e3432e3db,0x7fff5fbff0d8,0,0x1e4e343b690c,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34328575,0x7fff5fbfec18,0,0x1e4e34552010,0,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34327aa8,0x7fff5fbfed08,0,0x1e4e345587aa,0,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253c0d,0x7fff5fbff0b0,0,0x0,3 -tick,0x1001188a1,0x7fff5fbfe9b0,0,0x7fff5fbfea20,0,0x1e4e343a9270,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34327c96,0x7fff5fbfebe0,0,0x11e9a46ba079,0,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001907b4,0x7fff5fbfeda0,0,0x7fff5fbfee00,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912085fd,0x7fff5fbfee80,0,0x7fff5fbfeed0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024b138,0x7fff5fbfebf0,0,0x2e9dafd0e469,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002ff06,0x7fff5fbff038,0,0x10002d7cb,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcda,0x7fff5fbfed18,0,0x7fff911f40bc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdf9,0x7fff5fbfed48,0,0x3,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd111,0x7fff5fbfed00,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d3c7,0x7fff5fbff030,0,0x10002d5fe,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be791,0x7fff5fbfefa0,0,0xe662367291,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213318,0x7fff5fbfeb40,0,0xffffffffffffffc0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345a2485,0x7fff5fbfec70,0,0x1e4e345aff56,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001bb40,0x7fff5fbff650,0,0x0,4 -tick,0x1e4e3454decc,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523ba,0x7fff5fbfebf0,0,0x101009410,0,0x1e4e3455a80b,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff911daaf5,0x7fff5fbfecc0,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430da29,0x7fff5fbfec80,0,0x1e4e34567ab6,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608b5,0x7fff5fbfee30,0,0x17a3df6000000022,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34553501,0x7fff5fbfee48,0,0x7fff5fbfeed0,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34327aa8,0x7fff5fbfed88,0,0x1e4e3455287e,0,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b618,0x7fff5fbfebb0,0,0x101901f10,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100194381,0x7fff5fbfe980,0,0x7fff5fbfe9a0,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019d00c,0x7fff5fbfebc8,0,0x1002c87b0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3455544b,0x7fff5fbfedb8,0,0x75,0,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff91206bff,0x7fff5fbff3a0,0,0x79,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100121902,0x7fff5fbfe9b0,0,0x7fff5fbfea20,0,0x1e4e343a9270,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c3a81,0x7fff5fbfed40,0,0x7fff5fbfed60,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d7e4,0x7fff5fbfec48,0,0x7fff5fbfec20,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c17f,0x7fff5fbfebd0,0,0x11e9a447c539,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a2421,0x7fff5fbfed60,0,0x7fff5fbfed80,0,0x1e4e34570fec,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3432e3e7,0x7fff5fbfede8,0,0x1e4e343985b3,0,0x1e4e345761cf,0x1e4e34583f95,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10026096b,0x7fff5fbfe940,0,0x2,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026b407,0x7fff5fbfea00,0,0x7fff5fbfeaa0,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100254d49,0x7fff5fbff090,0,0x11e9a44c83b1,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002622fd,0x7fff5fbfed90,0,0x28,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345523fc,0x7fff5fbfee80,0,0x37ec2ed77cd9,0,0x1e4e343993e2 -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdcc,0x7fff5fbfec80,0,0x7fff5fbfecc0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019127d,0x7fff5fbfed58,0,0x101009400,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b43,0x7fff5fbfeb60,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa49,0x7fff5fbfee60,0,0x7fff5fbfeea0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c4cb,0x7fff5fbfed60,0,0x1032003d4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fda5,0x7fff5fbfec90,0,0x7fff5fbfed40,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c4dc,0x7fff5fbfed80,0,0x526d50000000053,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345676fd,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5e5f,0x7fff5fbfeeb8,0,0x100075bc9,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000633d9,0x7fff5fbfee30,0,0x7fff5fbfef20,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100148951,0x7fff5fbfed90,0,0x7fff5fbfee10,0,0x1e4e34394669,0x1e4e3455287e,0x1e4e343993e2 -tick,0x100253ae0,0x7fff5fbfec38,0,0x10024b001,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10011ff51,0x7fff5fbfeca0,0,0x7fff5fbfed00,0,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332fb8,0x7fff5fbfeca0,0,0x1e4e3454d0f5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ed00,0x7fff5fbfebc0,0,0x11e9a439d790,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024ee3e,0x7fff5fbfeb80,0,0x11e9a4f04ac9,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027a5dc,0x7fff5fbfe610,0,0x101009410,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100249323,0x7fff5fbff1a0,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10006f7ad,0x7fff5fbfea10,0,0x7fff5fbfea30,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f9285,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170e4c,0x7fff5fbff120,0,0x0,3 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3454a48a,0x7fff5fbfee60,0,0x1e4e3458747a,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be701,0x7fff5fbfed60,0,0x7fff5fbfed88,0,0x1e4e34551d37,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34322a5a,0x7fff5fbff060,0,0x1e4e34320eb8,0,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfe868,0,0x10011b8d7,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be511,0x7fff5fbfee40,0,0x7fff5fbfeec0,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10004d0ce,0x7fff5fbff330,0,0x0,4 -tick,0x10011d4c6,0x7fff5fbfeb50,0,0x102019d00,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1001500af,0x7fff5fbfead0,0,0x7fff5fbfeb20,3,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343a90a1,0x7fff5fbfea90,0,0x11e9a42fcce9,0,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325894,0x7fff5fbfeaa0,0,0x1e4e343a8efe,0,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100120351,0x7fff5fbfea10,0,0x7fff5fbfea30,0,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345aac88,0x7fff5fbfec50,0,0x1000000000000,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306141,0x7fff5fbff398,0,0x7fff5fbff3f8,0,0x1e4e34334687,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100075b2b,0x7fff5fbfef20,0,0x101900c80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfea60,0,0x2e9dafd05104,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fda8,0x7fff5fbfeb90,0,0x7fff5fbfebd0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c516,0x7fff5fbfed60,0,0x101c00291,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100394522,0x7fff5fbfeb38,0,0x100254e3f,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9127cbc6,0x7fff5fbff018,0,0x10011c1f9,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000de5be,0x7fff5fbfec28,0,0xcc5c79030204706c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345682db,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100175d65,0x7fff5fbfef50,0,0x7fff5fbfefc0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523cd,0x7fff5fbff380,0,0x0,3 -code-creation,LazyCompile,0x1e4e34560c40,1045,"ondata stream.js:36",0x37ec2edc4328,* -tick,0x100120415,0x7fff5fbfef30,0,0x7fff5fbfef50,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10026305c,0x7fff5fbfe8f0,0,0x11e9a41a37d0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a2a,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10000c7b9,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002be8ff,0x7fff5fbfec70,0,0x7fff5fbfecd0,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000bd111,0x7fff5fbfe880,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100248ffe,0x7fff5fbfe950,0,0x101009410,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431004a,0x7fff5fbfe848,0,0x1e4e3453cc5c,0,0x1e4e343e436a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002772ff,0x7fff5fbfe6c8,0,0x11e9a4044e81,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3c7,0x7fff5fbfeb30,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f5e,0x7fff5fbfede0,0,0x1e4e34548360,0,0x1e4e3439896f,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002be5b9,0x7fff5fbff0d0,0,0x0,3 -tick,0x100392841,0x7fff5fbff640,0,0x0,4 -tick,0x1001ff5c8,0x7fff5fbfea70,0,0x7fff5fbfeaa0,0,0x1e4e343aac0a,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100249499,0x7fff5fbfe8e0,0,0x101009410,0,0x1e4e3455ac3e,0x1e4e34588925,0x1e4e345ade38,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306141,0x7fff5fbfee50,0,0x7fff5fbfee98,0,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10011ff5c,0x7fff5fbfecf0,0,0x180b,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1002761d1,0x7fff5fbfe670,0,0x7fff5fbfe6c0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001aa8e3,0x7fff5fbfe930,0,0x0,1 -tick,0x1002ff0d0,0x7fff5fbfe948,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfe9a0,0,0x0,1 -tick,0x1001a990c,0x7fff5fbfe950,0,0x0,1 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3454ecee,0x7fff5fbfedf8,0,0x1e4e3454dee7,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x100053b08,0x7fff5fbfec60,0,0x1019014b0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343098d6,0x7fff5fbfeb40,0,0x1e4e34315208,0,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10001481d,0x7fff5fbff350,0,0x0,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000b1db,0x7fff5fbfeb88,0,0x10000c199,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfe840,0,0xbaffa8400000022,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024afe0,0x7fff5fbfead0,0,0x2e9dafd05104,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34578604,0x7fff5fbfee68,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100395422,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912147aa,0x7fff5fbfeca0,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024b001,0x7fff5fbfeba0,0,0x2e9dafd0ab19,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfed80,0,0x263e5f570000000a,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c4ac5,0x7fff5fbfee20,0,0x10060d028,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325728,0x7fff5fbff288,0,0x1e4e343f1c43,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005041c,0x7fff5fbff6e0,0,0x0,4 -tick,0x1000f9714,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345874ce,0x7fff5fbfee70,0,0x11e9a5de2c91,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024edc5,0x7fff5fbfeb80,0,0x11e9a5f04f49,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34583a9b,0x7fff5fbfeec0,0,0x7fff5fbfef20,0,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019cfbc,0x7fff5fbfec30,0,0xd,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024eddd,0x7fff5fbfeb80,0,0x11e9a5f04bd9,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfeca8,0,0x10011d48c,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34555060,0x7fff5fbfea50,0,0x1e4e343a8d6e,0,0x1e4e343a924b,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34324d21,0x7fff5fbfe858,0,0x1002b2a0b,0,0x1e4e343e436a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3456a8c0,0x7fff5fbfe728,0,0x1e4e345529b6,0,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455a2d9,0x7fff5fbfeaf8,0,0x101009400,0,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100145a0f,0x7fff5fbfed30,0,0x1e4e345b67c1,0,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251e41,0x7fff5fbff4c0,0,0x0,3 -tick,0x7fff911f3d53,0x7fff5fbfea10,0,0x7fff5fbfea80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455d89a,0x7fff5fbfecc8,0,0xffffffff,0,0x1e4e34555948,0x1e4e3453d29b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100046a48,0x7fff5fbfec38,0,0x1000467cd,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3435acc4,0x7fff5fbfef88,0,0x1e4e34399293,0 -tick,0x1002608ef,0x7fff5fbfea20,0,0xb92e5da00000022,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430616f,0x7fff5fbfee28,0,0x1e4e343060e1,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019bd81,0x7fff5fbfecf0,0,0x1002c3a80,0,0x1e4e3455497b,0x1e4e34557bb0,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be84e,0x7fff5fbfead0,0,0xe662304121,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251f68,0x7fff5fbff120,0,0x11e900000000,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608d7,0x7fff5fbff100,0,0x2d90905c00000009,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10006f66b,0x7fff5fbfeb70,0,0x7fff5fbfebd0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34315118,0x7fff5fbff0d8,0,0x3d27974c8f9,0 -tick,0x100248ff1,0x7fff5fbfee60,0,0x7fff5fbfeed0,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34568583,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213283,0x7fff5fbfec60,0,0xffffffffffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100169d50,0x7fff5fbff128,0,0x10024c726,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002490d0,0x7fff5fbfee30,0,0x101009410,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001203f6,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3431196a,0x7fff5fbff0f8,0,0x1e4e345554e2,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454d0c1,0x7fff5fbff098,0,0x7fff5fbff0f0,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fc99,0x7fff5fbfeda0,0,0x10099f800,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbff420,0,0x0,3 -tick,0x1000f9821,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002523cd,0x7fff5fbfefe0,0,0x0,3 -tick,0x1002492a0,0x7fff5fbfe9c0,0,0x101009410,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019d00d,0x7fff5fbfeaf0,0,0x7fff5fbfeb18,0,0x1e4e3454ed8b,0x1e4e3454d436,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c1521,0x7fff5fbfed60,0,0x7fff5fbfed80,0,0x1e4e3454d16d,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf43d,0x7fff5fbfed90,0,0x19c700000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455715d,0x7fff5fbfed98,0,0x102023a88,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100255025,0x7fff5fbff350,0,0x0,3 -tick,0x1e4e3458685b,0x7fff5fbff040,0,0x200000000,0,0x1e4e3457bf37,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001ff2fb,0x7fff5fbfe8b0,0,0x102019b80,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100071a0a,0x7fff5fbfeb20,0,0x7fff5fbfeb70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253bfb,0x7fff5fbfe960,0,0x101009410,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34560147,0x7fff5fbfec40,0,0x37ec2ed118d1,0,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be642,0x7fff5fbff0d0,0,0x0,3 -tick,0x1002be701,0x7fff5fbfece0,0,0x7fff5fbfed08,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1001ee6e6,0x7fff5fbfe440,0,0x0,2 -code-creation,LazyCompile,0x1e4e345350e0,4956,"callback zlib.js:395",0x37ec2ed7eae8,* -tick,0x7fff911dbf90,0x7fff5fbfec78,0,0x7fff91213830,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff911f2be5,0x7fff5fbfeaa8,0,0x10015de09,0,0x1e4e34579b39,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34563299,0x7fff5fbfed60,0,0x101009400,0,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100170cf1,0x7fff5fbff2f0,0,0x7fff5fbff350,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100122189,0x7fff5fbfe7d0,0,0x79,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c259,0x7fff5fbff260,0,0x0,4 -tick,0x1e4e34320fbe,0x7fff5fbfed48,0,0xe662304121,0,0x1e4e3454dadf,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x100171290,0x7fff5fbff480,0,0x0,0 -tick,0x1001a2a54,0x7fff5fbfe270,0,0x0,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025124f,0x7fff5fbfe620,0,0x11e9a59f90e9,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afc2,0x7fff5fbfee00,0,0x2e9dafd23ac1,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000decc0,0x7fff5fbfec88,0,0xa199a3e9a7eeeb07,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ec,0x7fff5fbfed80,0,0x263e5f5700000015,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100232b31,0x7fff5fbff0f0,0,0x7fff5fbff150,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343f1e7a,0x7fff5fbff290,0,0xe662304121,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34325720,0x7fff5fbff288,0,0x1e4e343f1be0,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002755f4,0x7fff5fbfecf0,0,0x11e9a584e7f9,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbfef98,0,0x10011c1f9,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912154c7,0x7fff5fbff1b0,0,0x7fff5fbff1d0,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e345984df -tick,0x1000c8089,0x7fff5fbfed30,0,0x7fff5fbfed60,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345523fc,0x7fff5fbfee80,0,0x7fff5fbfeee0,0,0x1e4e343993e2 -tick,0x7fff911f2ce1,0x7fff5fbfeb00,0,0x11e9a5879fc9,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34598165,0x7fff5fbfeed8,0,0x1e4e343a9c9c,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311b3f,0x7fff5fbfeb40,0,0x1e4e343e78c2,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456f35d,0x7fff5fbfecc0,0,0x3d2797f6031,0,0x1e4e3459f1d2,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002510e9,0x7fff5fbfec50,0,0xe66234e391,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34599f09,0x7fff5fbfebc0,0,0x37ec2ede6699,0,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b5e,0x7fff5fbfeaa0,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457fc8b,0x7fff5fbfee38,0,0x37ec2eda2c21,0,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453d46f,0x7fff5fbfeda8,0,0x11e9a572e6f9,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd0c,0x7fff5fbfeb08,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454df27,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343598a0,0x7fff5fbfec28,0,0x1e4e343596d7,0,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019cd54,0x7fff5fbff270,0,0x10305dcd0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253b30,0x7fff5fbfef70,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1001446cf,0x7fff5fbfeed0,0,0x1e4e343a9d42,0,0x1e4e34394aa3,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100218e41,0x7fff5fbff290,0,0x0,4 -tick,0x7fff91210825,0x7fff5fbfe750,0,0x7fff5fbfe800,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100263171,0x7fff5fbfea10,0,0x7fff5fbfea80,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000394ea,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523a6,0x7fff5fbfee68,0,0x7fff5fbfeec8,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3458021f,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100075c40,0x7fff5fbfef20,0,0x101900c80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f923a,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100259760,0x7fff5fbfed28,0,0x1002592bc,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523a0,0x7fff5fbfebc8,0,0x100251ed1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c09f,0x7fff5fbff020,0,0x102023a68,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fc91,0x7fff5fbfecc0,0,0x10099f800,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002bf39c,0x7fff5fbfecc0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008d8ba,0x7fff5fbfefe8,0,0x10002ca8a,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100122a21,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dab07,0x7fff5fbfee30,0,0x7fff5fbfef20,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3435acc4,0x7fff5fbfef88,0,0x1e4e34399293,0 -tick,0x100252453,0x7fff5fbfead0,0,0x37ec2ed00000,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e345712a5,0x1e4e34583e87,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34567291,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001218f1,0x7fff5fbfea30,0,0x7fff5fbfeaa0,0,0x1e4e3454d2d8,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912086ca,0x7fff5fbfebe8,0,0x7fff912064ae,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100275d3d,0x7fff5fbfeae8,0,0x2,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343e77e1,0x7fff5fbfeb60,0,0x7fff5fbfeb98,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100252bb8,0x7fff5fbfea10,0,0x11e9a5507119,0,0x1e4e345a356c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daad8,0x7fff5fbfecd0,0,0x7fff5fbfed20,0,0x1e4e3458c135,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10001461d,0x7fff5fbff3a0,0,0x7fff5fbff440,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343100b5,0x7fff5fbfef18,0,0x1e4e3456d6ec,0,0x1e4e34399744 -tick,0x10010d2f0,0x7fff5fbff2a8,0,0x0,4 -tick,0x1000fa355,0x7fff5fbfe780,0,0x100a137f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dab0c,0x7fff5fbfeae0,0,0x7fff5fbfeb20,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b2e7c,0x7fff5fbfeea8,0,0x1e4e343af6c7,0,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001444e1,0x7fff5fbfeb10,0,0x7fff5fbfeb38,0,0x1e4e34588ee2,0x1e4e345adfba,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c1c1,0x7fff5fbfeb50,0,0x7fff5fbfec00,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100201aa7,0x7fff5fbfef10,0,0x100000000,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a81e3,0x7fff5fbfe968,0,0x1,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a8100,0x7fff5fbfeac8,0,0x10019ed51,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3e6,0x7fff5fbfeba0,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523de,0x7fff5fbfefe0,0,0x0,3 -tick,0x7fff911dbcf4,0x7fff5fbfed18,0,0x7fff911f2db4,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100253c2b,0x7fff5fbfefb0,0,0x0,3 -tick,0x1e4e343061a3,0x7fff5fbff050,0,0x1e4e343060e1,0,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10008e972,0x7fff5fbff0b0,0,0x7fff5fbff0f0,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34594976,0x7fff5fbff218,0,0xe662304161,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008e971,0x7fff5fbff0b8,0,0x10002d9ae,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430a8e0,0x7fff5fbff380,0,0x1e4e343df271,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c4c2,0x7fff5fbfed60,0,0x1032003e0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10039534a,0x7fff5fbfefa8,0,0x10011d4a6,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002714ea,0x7fff5fbfecf0,0,0x0,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120ff63,0x7fff5fbfed48,0,0x3,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9304,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002597d3,0x7fff5fbfecc0,0,0x7fff5fbfed30,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c7ba,0x7fff5fbfeba0,0,0x557340000000019,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911dbcda,0x7fff5fbfeb98,0,0x7fff911f1b1b,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002607ee,0x7fff5fbfe500,0,0x2ad95d0d0000000a,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b57,0x7fff5fbfecc0,0,0x101009410,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455506e,0x7fff5fbfee28,0,0x1e4e3455ac62,0,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10016a149,0x7fff5fbfe690,0,0x11e900000000,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343947c8,0x7fff5fbfef20,0,0x37ec2ed77921,0,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e10e,0x7fff5fbfed28,0,0x7fff911f31d7,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e345b5a40,0x7fff5fbfee18,0,0x1e4e3452a47a,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120297,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3439972b,0x7fff5fbfef88,0,0x11e9a53839d1,0 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10016d91b,0x7fff5fbfea00,0,0x0,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345a2860,0x7fff5fbfea20,0,0x1e4e3454d2d8,0,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001500af,0x7fff5fbfe290,0,0x7fff5fbfe300,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454decc,0x7fff5fbfeb08,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100144820,0x7fff5fbfed40,0,0x0,0,0x1e4e3456dbd3,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3455a731,0x7fff5fbfedf8,0,0x2e9dafd19839,0,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e345b44bb,0x7fff5fbfef78,0,0x37ec2ed0ddb1,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100219aa1,0x7fff5fbff1c0,0,0x0,4 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100121c43,0x7fff5fbfe830,0,0x7fff5fbfe874,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911ee21c,0x7fff5fbfea30,0,0x12068,0,0x1e4e34320ee7,0x1e4e34571f56,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100274acf,0x7fff5fbfe700,0,0x1020259f0,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002597d3,0x7fff5fbfecc0,0,0x7fff5fbfed30,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120616c,0x7fff5fbfee08,0,0x7fff91206c07,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100252474,0x7fff5fbfee10,0,0x37ec2ed00000,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343255a8,0x7fff5fbff280,0,0x1e4e343f1dfb,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100169481,0x7fff5fbff120,0,0x7fff5fbff160,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002c87b1,0x7fff5fbfef70,0,0x7fff5fbfef98,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002607ba,0x7fff5fbfed98,0,0x37ec2ed00000,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100117bf4,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8000,0x7fff5fbff310,0,0x1e4e345769b4,0,0x1e4e345984df -tick,0x7fff9120ff2c,0x7fff5fbfec28,0,0x3,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199e0e6,0x7fff5fbfe878,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e34573968,0x1e4e345a08d4,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e34567f44,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10012ef36,0x7fff5fbfe650,0,0x7fff5fbfe6e0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000af1c,0x7fff5fbfec68,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34553559,0x7fff5fbfee10,0,0xe662304161,0,0x1e4e34587323,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912137a8,0x7fff5fbfe840,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001730f3,0x7fff5fbfec90,0,0x7fff5fbfedd8,0,0x1e4e3454d8af,0x1e4e3439950b -code-creation,LazyCompile,0x1e4e34536440,300,"collect /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:81",0x37ec2ed978b8,~ -code-creation,LazyCompile,0x1e4e34536580,462,"collect /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:81",0x37ec2ed978b8,* -tick,0x10019ed21,0x7fff5fbfead0,0,0x7fff5fbfeb20,3,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026bca2,0x7fff5fbfea40,0,0x8,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b3fb,0x7fff5fbfe930,0,0x101009410,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34332f54,0x7fff5fbfed20,0,0x1e4e345b78ad,0,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011d351,0x7fff5fbff310,0,0x7fff5fbff350,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100394df2,0x7fff5fbff2f8,0,0x10011b9bf,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019b186,0x7fff5fbfecf0,0,0x2e9dafd056a9,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf2e1,0x7fff5fbfe9e0,0,0x7fff5fbfea00,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325595,0x7fff5fbfeda0,0,0x1e4e3453d1f0,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34325595,0x7fff5fbfeb70,0,0x1e4e345529b6,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011fb51,0x7fff5fbfeb00,0,0x7fff5fbfeb50,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011a111,0x7fff5fbfeaf0,0,0x7fff5fbfeb30,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8d18,0x7fff5fbfee20,0,0x1e4e34398af0,0,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9120fca5,0x7fff5fbff220,0,0x0,4 -tick,0x10025246e,0x7fff5fbfebf0,0,0x0,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002631bd,0x7fff5fbfeb50,0,0x1e4e34327dbe,0,0x1e4e34320ed1,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10012128f,0x7fff5fbff300,0,0x101009400,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100215900,0x7fff5fbfec18,0,0x100208323,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100118d4a,0x7fff5fbfeb90,0,0x102023a88,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a805e,0x7fff5fbfeb00,0,0x0,1 -tick,0x1001a9b4e,0x7fff5fbfeae0,0,0x0,1 -tick,0x1001a8a5e,0x7fff5fbfeb30,0,0x0,1 -tick,0x7fff911daac1,0x7fff5fbfeaa0,0,0x0,1 -tick,0x1001aa25d,0x7fff5fbfeac8,0,0x0,1 -tick,0x100253b50,0x7fff5fbff0b0,0,0x0,3 -tick,0x1e4e3458d6e5,0x7fff5fbfebb0,0,0x37ec2edd43f1,0,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfeda0,0,0x263e5f570000000a,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df0c4,0x7fff5fbfec28,0,0xcc5c7903b5e384f2,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34578727,0x7fff5fbfee68,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457f78d,0x7fff5fbff020,0,0x37ec2edde921,0,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fcca,0x7fff5fbfece0,0,0x10099f800,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c562,0x7fff5fbfecc0,0,0x564ac0000000033,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34566cb0,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100395206,0x7fff5fbfef48,0,0x100051ee8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b67,0x7fff5fbfebb0,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000fde48,0x7fff5fbfec38,0,0x1000bd173,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3453f076,0x7fff5fbfedd8,0,0x7fff5fbfee20,0,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10039452e,0x7fff5fbfeb58,0,0x10000c1f1,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f3cfd,0x7fff5fbfea10,0,0x7fff5fbfea80,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551d56,0x7fff5fbfee80,0,0x37ec2ed77cd9,0,0x1e4e343993e2 -tick,0x7fff911dbd12,0x7fff5fbfeb78,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34306192,0x7fff5fbfedf0,0,0x37ec2edd43f1,0,0x1e4e3455a80b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100253bc2,0x7fff5fbfebe0,0,0x101009410,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34320e9f,0x7fff5fbff078,0,0x11e9a4d9aad1,0,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3452a544,0x7fff5fbfee38,0,0x500000000,0,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002be632,0x7fff5fbfede0,0,0x102023b08,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e3458bcc1,0x1e4e343b6a9d,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000487c5,0x7fff5fbff810,0,0x0,4 -tick,0x1e4e343a9c2f,0x7fff5fbfeef0,0,0x100000000,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001785e1,0x7fff5fbfeb40,0,0x7fff5fbfeb70,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3439922e,0x7fff5fbfef90,0,0xe662304121,0 -code-creation,LoadIC,0x1e4e34536760,134,"length" -code-creation,LoadIC,0x1e4e34536760,134,"length" -tick,0x1001200c4,0x7fff5fbfeb80,0,0x10304be5e,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100176007,0x7fff5fbff2b8,0,0x0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002b7997,0x7fff5fbfea90,0,0x7fff5fbfeac0,0,0x1e4e34584e52,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001711bb,0x7fff5fbff0e0,0,0x0,0 -tick,0x1002608ec,0x7fff5fbfe690,0,0xcc6ac0600000031,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430fb85,0x7fff5fbff090,0,0x1e4e3431f688,0,0x1e4e343b69fe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100394df2,0x7fff5fbfeb38,0,0x10012003a,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432954a,0x7fff5fbfeba0,0,0x1e4e34359c80,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c15df,0x7fff5fbfeaf0,0,0x7fff5fbfeb18,0,0x1e4e3454d16d,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912084f1,0x7fff5fbff300,0,0x0,4 -tick,0x100251e41,0x7fff5fbfed50,0,0x7fff5fbfede0,0,0x1e4e3455a80b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100262d01,0x7fff5fbfe600,0,0x11e9a4cb0c59,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff912135c9,0x7fff5fbfe780,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000de62b,0x7fff5fbfe748,0,0x77a0a063f5ed2219,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbff100,0,0xa689d4500000009,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100394972,0x7fff5fbfe878,0,0x10027566d,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d3b6,0x7fff5fbfedf8,0,0x10100a770,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430c88e,0x7fff5fbfee98,0,0x1e4e345b8057,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019fb20,0x7fff5fbfed08,0,0x10019b1d2,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213773,0x7fff5fbfeda8,0,0x10099a000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100277326,0x7fff5fbfe5f8,0,0x11e9a4b46cf9,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c0d5,0x7fff5fbfec40,0,0xe382a379c54a0a3d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b8a3,0x7fff5fbfef60,0,0x4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad59,0x7fff5fbfebb0,0,0x7fff5fbfebe0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002be90e,0x7fff5fbfec70,0,0x100000000,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10019ed20,0x7fff5fbfeaf8,0,0x10017860d,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x7fff91206831,0x7fff5fbff358,0,0x0,4 -tick,0x10011b611,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x1002523a0,0x7fff5fbfeac8,0,0x1002be86c,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002552b1,0x7fff5fbfed00,0,0x9be4f28db9,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024b183,0x7fff5fbfed78,0,0x3d279764be9,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34326316,0x7fff5fbfef50,0,0x1e4e34394a1c,0,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -code-creation,StoreIC,0x1e4e34536800,189,"_buffer" -code-creation,StoreIC,0x1e4e34536800,189,"_buffer" -code-creation,LoadIC,0x1e4e345368c0,138,"_binding" -code-creation,LoadIC,0x1e4e345368c0,138,"_binding" -code-creation,LoadIC,0x1e4e34536960,134,"_flush" -code-creation,LoadIC,0x1e4e34536960,134,"_flush" -code-creation,StoreIC,0x1e4e34536a00,189,"callback" -code-creation,StoreIC,0x1e4e34536a00,189,"callback" -code-creation,StoreIC,0x1e4e34536ac0,189,"buffer" -code-creation,StoreIC,0x1e4e34536ac0,189,"buffer" -tick,0x1e4e34332fa7,0x7fff5fbfede0,0,0x1e4e34548360,0,0x1e4e3439896f,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100253c33,0x7fff5fbfefb0,0,0x0,3 -tick,0x1e4e3456e3bc,0x7fff5fbfedd0,0,0xc900000000,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x10012ef10,0x7fff5fbfecb8,0,0x100254e3f,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e34326a04,0x7fff5fbff080,0,0x1e4e3457bfa2,0,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10019bf44,0x7fff5fbfe9b8,0,0x100173bc6,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100215901,0x7fff5fbfec10,0,0x7fff5fbfec60,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024af85,0x7fff5fbfe8f0,0,0x2e9dafd05169,0,0x1e4e3455a74d,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343150d9,0x7fff5fbfed60,0,0x37ec2edffa21,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c6e8,0x7fff5fbfec50,0,0x11e9a4af38c1,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad57,0x7fff5fbfe880,0,0x7fff5fbfe8b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100175d40,0x7fff5fbff290,0,0x7fff5fbff2d0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8248,0x7fff5fbff0c0,0,0x1e4e34566eed,0,0x1e4e34594b8f,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x1000de186,0x7fff5fbfeed0,0,0x1000c1d36,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91213742,0x7fff5fbfec00,0,0x7ffffffc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100254e76,0x7fff5fbfebb0,0,0x11e9a496c749,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be701,0x7fff5fbff010,0,0x7fff5fbff038,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcff,0x7fff5fbfed78,0,0x7fff911f4105,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9227,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b8d18,0x7fff5fbff278,0,0x1e4e343f1de3,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912068f8,0x7fff5fbfee10,0,0x7fff5fbfee30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbff420,0,0x0,3 -tick,0x1000f983a,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002608b5,0x7fff5fbfe8a0,0,0x263e5f5700000015,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b195,0x7fff5fbfeb50,0,0x7fff5fbfebb0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345553c1,0x7fff5fbfef68,0,0x7fff5fbfefb8,0 -tick,0x1e4e345570fc,0x7fff5fbfed98,0,0x102023a88,0,0x1e4e34553563,0x1e4e3452a47a,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf4c6,0x7fff5fbfed90,0,0x39900000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911da171,0x7fff5fbfeb38,0,0x100218e51,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34595528,0x7fff5fbff0e0,0,0x1e4e343b6a4d,0,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf398,0x7fff5fbff210,0,0x1,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b70fd,0x7fff5fbfed38,0,0x37ec2ed0ddb1,0,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34325595,0x7fff5fbfec80,0,0x1e4e34566fc0,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ae5ff,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551c50,0x7fff5fbfe998,0,0x1002be632,0,0x1e4e3455a43d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3b1,0x7fff5fbfea40,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523cd,0x7fff5fbfefe0,0,0x0,3 -tick,0x7fff911f3089,0x7fff5fbfed68,0,0x100044e0a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100172261,0x7fff5fbfeac0,0,0x7fff5fbfeaf0,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10005119c,0x7fff5fbfe820,0,0xaabee816aa1,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430b2e5,0x7fff5fbfea70,0,0x1e4e34398a60,0,0x1e4e34576330,0x1e4e34583f3b,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10026b483,0x7fff5fbfea08,0,0x1001939c1,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343a91e6,0x7fff5fbfeab8,0,0x11e9a47494c9,0,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff91206174,0x7fff5fbfe830,0,0x1003e2231,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34576792,0x7fff5fbfe9c8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100395194,0x7fff5fbfe898,0,0x100218e51,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ec,0x7fff5fbff070,0,0x23c0895200000014,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024afc2,0x7fff5fbfee00,0,0x2e9dafd13ad1,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000ded66,0x7fff5fbfec88,0,0x2c203da9ff976ac6,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f929b,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345a45ad,0x7fff5fbff100,0,0x7fff5fbff158,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580201,0x7fff5fbff200,0,0x7fff5fbff240,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be6b6,0x7fff5fbfeee0,0,0x102023a70,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912107dd,0x7fff5fbfec90,0,0x7fff5fbfed40,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002d5ff,0x7fff5fbff0b0,0,0x7fff5fbff0f8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcf4,0x7fff5fbfeee8,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x1e4e3457d1c0,0x7fff5fbfee08,0,0x8,0,0x1e4e345754eb,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e34567f44,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1000c5c06,0x7fff5fbfe8d0,0,0x7fff5fbfe8f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10008e7e6,0x7fff5fbfeaa0,0,0x1005f82f0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf323,0x7fff5fbff210,0,0x1,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100392841,0x7fff5fbff450,0,0x7fff5fbff470,0,0x1e4e343b63aa,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x10018f973,0x7fff5fbfeaf0,0,0x0,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000b0db,0x7fff5fbfec10,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c1ca,0x7fff5fbfeb30,0,0x0,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b6825,0x7fff5fbfec88,0,0x1e4e3454e2fc,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100045045,0x7fff5fbff390,0,0x0,4 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100254eb8,0x7fff5fbfe6d0,0,0x11e9a46a7bc1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024c22b,0x7fff5fbff0d0,0,0x2e9dafd05118,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100275891,0x7fff5fbfe840,0,0x7fff5fbfe8c0,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343258e9,0x7fff5fbfeb80,0,0x1e4e3455a74d,0,0x1e4e34571067,0x1e4e345ab88b,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455afc3,0x7fff5fbfeb88,0,0x2e9dafd19839,0,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345aedc5,0x7fff5fbfea00,0,0x1e4e34564c92,0,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911ee1ee,0x7fff5fbff328,0,0x0,4 -tick,0x7fff911f3800,0x7fff5fbfe740,0,0x0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455506e,0x7fff5fbfea50,0,0x1e4e343a8d6e,0,0x1e4e343a924b,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100261b0c,0x7fff5fbfee10,0,0x1e4e3458c20f,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100044002,0x7fff5fbff410,0,0x0,4 -tick,0x1e4e34315091,0x7fff5fbfecb0,0,0x37ec2edffa21,0,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455d840,0x7fff5fbfeb30,0,0x7fff5fbfeb90,0,0x1e4e34555948,0x1e4e345b6181,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff912083b5,0x7fff5fbfedc0,0,0x7fff5fbfee10,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd10b,0x7fff5fbfee88,0,0x1000bd28b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbf9d,0x7fff5fbfecf8,0,0x7fff9120c12c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b87d,0x7fff5fbfef60,0,0x4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100063bc9,0x7fff5fbfef60,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c05a,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd13d,0x7fff5fbfeea0,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024afd3,0x7fff5fbfee80,0,0x2e9dafd13ad1,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcfc,0x7fff5fbfed78,0,0x7fff911f418d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100250eb1,0x7fff5fbfecb0,0,0x7fff5fbfed20,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9966,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10012eae1,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100394ebe,0x7fff5fbfea68,0,0x1002c883a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000c49d0,0x7fff5fbfe980,0,0x1000c5e5f,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfe900,0,0x101009410,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011b611,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff911f3089,0x7fff5fbfed68,0,0x100044e0a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3456e361,0x7fff5fbfef28,0,0xe662304101,0,0x1e4e34399744 -tick,0x1002608ec,0x7fff5fbff570,0,0x0,3 -tick,0x100394522,0x7fff5fbfefa8,0,0x1002566dc,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf1c1,0x7fff5fbff290,0,0x7fff5fbff2f0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b2cfc,0x7fff5fbfeec8,0,0x1e4e343aa6a1,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457d1ac,0x7fff5fbfee28,0,0x9,0,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026318c,0x7fff5fbfe5c0,0,0x101009400,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34592e4c,0x7fff5fbfed28,0,0x1e4e34594a7d,0,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345515d2,0x7fff5fbfef50,0,0x1020259f0,0,0x1e4e3455a43d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10000afaa,0x7fff5fbfec10,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345750e1,0x7fff5fbfee48,0,0x7fff5fbfee88,0,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100118d2b,0x7fff5fbfe8e0,0,0x7fff5fbfe9e8,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345a08a3,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8240,0x7fff5fbfec80,0,0x1e4e345677f7,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10009c429,0x7fff5fbfea70,0,0x5a,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ac489,0x7fff5fbfeeb0,0,0x1e4e343ae6f4,0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100150091,0x7fff5fbfeb70,0,0x7fff5fbfebd0,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3458e7a0,0x7fff5fbfec90,0,0x1e4e343af856,0,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024b70a,0x7fff5fbfe9b8,0,0x11e9a4209071,0,0x1e4e343a9236,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343df2f0,0x7fff5fbff390,0,0x0,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100128158,0x7fff5fbfede0,0,0x4052800000000000,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c45e,0x7fff5fbfed80,0,0x58a390000000169,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002cc0d,0x7fff5fbff030,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bad91,0x7fff5fbfec28,0,0x1000c67b7,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c47b,0x7fff5fbfecc0,0,0x58b80000000002d,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3457fcfd,0x7fff5fbff318,0,0x37ec2eda2c21,0,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911daa49,0x7fff5fbfefb0,0,0x7fff5fbff010,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001267db,0x7fff5fbfeda0,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34552991,0x7fff5fbff058,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001444e1,0x7fff5fbff150,0,0x7fff5fbff178,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f98ec,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1000de540,0x7fff5fbfec98,0,0x1e35b02087b36112,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002bf241,0x7fff5fbfee40,0,0x1e4e34394600,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1002492bc,0x7fff5fbff010,0,0x0,3 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100122a34,0x7fff5fbfeb50,0,0x7fff5fbfeb70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001242a1,0x7fff5fbfe8e0,0,0x7fff5fbfe920,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002607b0,0x7fff5fbfee18,0,0x100253bc2,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343aabc1,0x7fff5fbfebf0,0,0x7fff5fbfec38,0,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3432556e,0x7fff5fbfeda8,0,0x1e4e343f1b7a,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x10022d171,0x7fff5fbfed10,0,0x7fff5fbfedc0,0,0x1e4e3457d1f6,0x1e4e343aa7ea,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ac6c0,0x7fff5fbfee70,0,0x1e4e343ad881,0,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343258e9,0x7fff5fbfeaa8,0,0x1e4e3455a74d,0,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012ef17,0x7fff5fbfe8d0,0,0x7fff5fbfe910,0,0x1e4e3455a74d,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10003957b,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a814b,0x7fff5fbff230,0,0x0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100050e79,0x7fff5fbfe8e0,0,0x7fff5fbfe920,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002d5ff,0x7fff5fbfebd0,0,0x7fff5fbfec18,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3435d5c0,0x7fff5fbfeb00,0,0x1e4e34583530,0,0x1e4e34573968,0x1e4e345a08d4,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34555478,0x7fff5fbfec40,0,0x5e3988,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3432e48a,0x7fff5fbfef78,0,0x1e4e34399727,0 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dc28,0x7fff5fbfe8a0,0,0x102023b20,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf1c1,0x7fff5fbfed40,0,0x7fff5fbfeda0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34578add,0x7fff5fbfee68,0,0x2c2694a0b2a9,0,0x1e4e345769f2,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10017233f,0x7fff5fbfef90,0,0x102023a70,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91215395,0x7fff5fbff020,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000b9f27,0x7fff5fbfef50,0,0x4000,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001ffc66,0x7fff5fbfed20,0,0x7fff5fbfed50,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100179e61,0x7fff5fbfedd0,0,0x7fff5fbfee00,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100117c0b,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d44e,0x7fff5fbfeed0,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34567081,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f97e4,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911dbd12,0x7fff5fbff0d8,0,0x0,3 -tick,0x1002be83b,0x7fff5fbfec70,0,0x7fff5fbfecd0,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3454d3e4,0x7fff5fbfed98,0,0x1019014b0,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343986c9,0x7fff5fbfee38,0,0x37ec2ed77c29,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34354822,0x7fff5fbfeb60,0,0x1e4e3454d19f,0,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459907c,0x7fff5fbfeed0,0,0x1e4e343aa7ea,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002ff367,0x7fff5fbfebd0,0,0x0,1 -tick,0x1001a8a50,0x7fff5fbfeb80,0,0x0,1 -tick,0x1001a9880,0x7fff5fbfeb78,0,0x0,1 -tick,0x1001a9c7e,0x7fff5fbfeac0,0,0x0,1 -tick,0x1001987a4,0x7fff5fbfeb50,0,0x0,1 -tick,0x1002b98be,0x7fff5fbfec70,0,0x11e9a5f047a9,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345afd61,0x7fff5fbfec90,0,0x3d2797ecca1,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100205974,0x7fff5fbfe770,0,0x7fff5fbfe7b0,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002061ee,0x7fff5fbfe8c0,0,0xe662300000,0,0x1e4e34583fc7,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34310085,0x7fff5fbfef68,0,0x1e4e345b4ab6,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100144d07,0x7fff5fbfed70,0,0x1e4e345554e2,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343061c6,0x7fff5fbfec08,0,0x1e4e345b6039,0,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459ffae,0x7fff5fbfeec8,0,0x1e4e343aa5fb,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34308008,0x7fff5fbfed88,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d22a,0x7fff5fbfedf0,0,0x1019014b0,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e345afbe1,0x7fff5fbfecd8,0,0x7fff5fbfed88,0,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100206064,0x7fff5fbfe950,0,0x37ec2ed00000,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343106f1,0x7fff5fbfee20,0,0xe662304121,0,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff90f81015,0x7fff5fbff1d8,0,0x1002cd8f4,0,0x1e4e3431824c,0x1e4e34576997,0x1e4e345984df -tick,0x100253b50,0x7fff5fbfee20,0,0x101009410,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430ad08,0x7fff5fbfe6e0,0,0x1e4e34334657,0,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100205929,0x7fff5fbfec20,0,0x7fff5fbfec40,0,0x1e4e343f1d72,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10030f5e1,0x7fff5fbff160,0,0x0,3 -tick,0x1002c87ce,0x7fff5fbfebf0,0,0x1,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024f01e,0x7fff5fbfefe0,0,0x11e9a5c1bef1,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011fba1,0x7fff5fbfec30,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100118d20,0x7fff5fbfea38,0,0x10000c252,0,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10002cc41,0x7fff5fbfeb80,0,0x7fff5fbfeba0,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d49c,0x7fff5fbfe8c8,0,0x10000b433,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120839a,0x7fff5fbfece8,0,0x7fff91206879,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10027ccae,0x7fff5fbfeb00,0,0x7fff5fbfebe0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10017a01d,0x7fff5fbfeda8,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34580f5f,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024911e,0x7fff5fbfeeb8,0,0x10024920d,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cd1,0x7fff5fbfeda8,0,0x100051ee8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120c05a,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011c1f9,0x7fff5fbfefc0,0,0x102023a68,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002522c0,0x7fff5fbfec88,0,0x102023a68,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010cb25,0x7fff5fbfeef0,0,0x7fff5fbfef50,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012137d,0x7fff5fbff510,0,0x0,3 -tick,0x1000f980b,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x100205987,0x7fff5fbfeb80,0,0x37ec2ede6789,0,0x1e4e3456d6ec,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10002d5fc,0x7fff5fbfebb0,0,0x7fff5fbfebf0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34311972,0x7fff5fbfec18,0,0x1e4e345554e2,0,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120340,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10018e63e,0x7fff5fbfe8b0,0,0x1003edf26,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100166091,0x7fff5fbfec30,0,0x7fff5fbfec80,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100179df5,0x7fff5fbfeb80,0,0xe662335941,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d214,0x7fff5fbfedf0,0,0x101815740,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100205974,0x7fff5fbfef00,0,0x102019d00,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b1ba0,0x7fff5fbff0a0,0,0x3d27976be39,0 -tick,0x1e4e3430f885,0x7fff5fbfec68,0,0x1e4e3431f688,0,0x1e4e345b89e6,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000de4c0,0x7fff5fbfe748,0,0x204d09c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100007ffb,0x7fff5fbfeb40,0,0x7fff5fbfeb88,0,0x1e4e34560bb7,0x1e4e345b0d6e,0x1e4e345b006c,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024b001,0x7fff5fbfeff0,0,0x0,3 -tick,0x1002608ec,0x7fff5fbfe8a0,0,0x263e5f5700000015,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100218e41,0x7fff5fbfece0,0,0x7fff5fbfed10,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff911dbd12,0x7fff5fbfeac8,0,0x10011a26e,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002061ab,0x7fff5fbfe620,0,0xe662300000,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b773a,0x7fff5fbfed38,0,0x37ec2ed0ddb1,0,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100120351,0x7fff5fbfe920,0,0x7fff5fbfe940,0,0x1e4e3454e2fc,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100205b7d,0x7fff5fbfeb30,0,0x7fff5fbfebec,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100247152,0x7fff5fbfe850,0,0x0,1 -tick,0x1002fee8b,0x7fff5fbfe6f0,0,0x0,1 -tick,0x1002fee77,0x7fff5fbfe6f0,0,0x0,1 -tick,0x100300a05,0x7fff5fbfe6e0,0,0x0,1 -code-creation,StoreIC,0x1e4e345b95c0,189,"locked" -code-creation,StoreIC,0x1e4e345b95c0,189,"locked" -code-creation,LoadIC,0x1e4e345b9680,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b9680,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b9320,134,"_events" -code-creation,LoadIC,0x1e4e345b9320,134,"_events" -code-creation,CallIC,0x1e4e345b93c0,287,"emit" -code-creation,LoadIC,0x1e4e3457e400,284,"" -code-creation,LoadIC,0x1e4e3457e400,284,"" -code-creation,LoadIC,0x1e4e3457e520,134,"_ended" -code-creation,LoadIC,0x1e4e3457e520,134,"_ended" -code-creation,LoadIC,0x1e4e3457e5c0,134,"length" -code-creation,LoadIC,0x1e4e3457e5c0,134,"length" -code-creation,LoadIC,0x1e4e3457e660,134,"_queue" -code-creation,LoadIC,0x1e4e3457e660,134,"_queue" -code-creation,CallIC,0x1e4e3457e700,217,"_process" -code-creation,CallIC,0x1e4e3457e7e0,492,"write" -code-creation,LoadIC,0x1e4e3457e9e0,284,"" -code-creation,LoadIC,0x1e4e3457e9e0,284,"" -code-creation,LoadIC,0x1e4e3457eb00,138,"_buffer" -code-creation,LoadIC,0x1e4e3457eb00,138,"_buffer" -code-creation,LoadIC,0x1e4e3457eba0,138,"_offset" -code-creation,LoadIC,0x1e4e3457eba0,138,"_offset" -code-creation,StoreIC,0x1e4e3457ec40,189,"_offset" -code-creation,StoreIC,0x1e4e3457ec40,189,"_offset" -code-creation,CallIC,0x1e4e3457d740,287,"emit" -code-creation,LoadIC,0x1e4e3457d860,134,"_events" -code-creation,LoadIC,0x1e4e3457d860,134,"_events" -code-creation,LoadIC,0x1e4e3457d900,134,"domain" -code-creation,LoadIC,0x1e4e3457d900,134,"domain" -code-creation,LoadIC,0x1e4e3457d9a0,138,"_chunkSize" -code-creation,LoadIC,0x1e4e3457d9a0,138,"_chunkSize" -code-creation,StoreIC,0x1e4e3457da40,185,"_processing" -code-creation,StoreIC,0x1e4e3457da40,185,"_processing" -code-creation,CallIC,0x1e4e3457db00,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e3457dc20,185,"_flush" -code-creation,StoreIC,0x1e4e3457dc20,185,"_flush" -code-creation,LoadIC,0x1e4e3457dce0,134,"pair" -code-creation,LoadIC,0x1e4e3457dce0,134,"pair" -code-creation,LoadIC,0x1e4e3457dd80,134,"writable" -code-creation,LoadIC,0x1e4e3457dd80,134,"writable" -code-creation,LoadIC,0x1e4e3457de20,134,"_pending" -code-creation,LoadIC,0x1e4e3457de20,134,"_pending" -code-creation,LoadIC,0x1e4e3457dec0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3457dec0,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3457df60,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e3457df60,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e3457e000,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e3457e000,189,"_pendingBytes" -code-creation,LoadIC,0x1e4e3457e0c0,170,"_pusher" -code-creation,LoadIC,0x1e4e3457e0c0,170,"_pusher" -code-creation,LoadIC,0x1e4e345b9080,170,"_pusher" -code-creation,LoadIC,0x1e4e345b9080,170,"_pusher" -tick,0x1e4e3454ddee,0x7fff5fbfeb08,0,0x10002cd15,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e345b9140,134,"domain" -code-creation,LoadIC,0x1e4e345b9140,134,"domain" -code-creation,LoadIC,0x1e4e345b5620,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b5620,134,"_needDrain" -code-creation,LoadIC,0x1e4e345b56c0,134,"length" -code-creation,LoadIC,0x1e4e345b56c0,134,"length" -code-creation,StoreIC,0x1e4e345b5760,189,"locked" -code-creation,StoreIC,0x1e4e345b5760,189,"locked" -code-creation,LoadIC,0x1e4e345b5820,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b5820,138,"lockBuffer" -code-creation,LoadIC,0x1e4e345b4f80,134,"_ended" -code-creation,LoadIC,0x1e4e345b4f80,134,"_ended" -code-creation,LoadIC,0x1e4e345b5020,134,"_queue" -code-creation,LoadIC,0x1e4e345b5020,134,"_queue" -code-creation,CallIC,0x1e4e345b50c0,217,"_process" -code-creation,CallIC,0x1e4e345b51a0,492,"write" -code-creation,LoadIC,0x1e4e345b53a0,138,"_buffer" -code-creation,LoadIC,0x1e4e345b53a0,138,"_buffer" -code-creation,LoadIC,0x1e4e345b5440,138,"_offset" -code-creation,LoadIC,0x1e4e345b5440,138,"_offset" -code-creation,StoreIC,0x1e4e345b0f60,189,"_offset" -code-creation,StoreIC,0x1e4e345b0f60,189,"_offset" -code-creation,CallIC,0x1e4e345b1020,287,"emit" -code-creation,LoadIC,0x1e4e345b1140,134,"domain" -code-creation,LoadIC,0x1e4e345b1140,134,"domain" -code-creation,LoadIC,0x1e4e345b0280,138,"_chunkSize" -code-creation,LoadIC,0x1e4e345b0280,138,"_chunkSize" -code-creation,StoreIC,0x1e4e345b0320,185,"_processing" -code-creation,StoreIC,0x1e4e345b0320,185,"_processing" -code-creation,CallIC,0x1e4e345b03e0,277,"removeAllListeners" -code-creation,StoreIC,0x1e4e345b0500,185,"_flush" -code-creation,StoreIC,0x1e4e345b0500,185,"_flush" -code-creation,LoadIC,0x1e4e345b05c0,134,"_events" -code-creation,LoadIC,0x1e4e345b05c0,134,"_events" -code-creation,LoadIC,0x1e4e345b0660,254,"" -code-creation,LoadIC,0x1e4e345b0660,254,"" -code-creation,StoreIC,0x1e4e3457c420,390,"_events" -code-creation,StoreIC,0x1e4e3457c420,390,"_events" -code-creation,LoadIC,0x1e4e3457c5c0,254,"" -code-creation,LoadIC,0x1e4e3457c5c0,254,"" -code-creation,LoadIC,0x1e4e3457c6c0,134,"_events" -code-creation,LoadIC,0x1e4e3457c6c0,134,"_events" -code-creation,CallIC,0x1e4e3457c760,257,"emit" -code-creation,LoadIC,0x1e4e3457c880,134,"_events" -code-creation,LoadIC,0x1e4e3457c880,134,"_events" -tick,0x1001500ac,0x7fff5fbfec40,0,0x7fff5fbfec90,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff911f2bfc,0x7fff5fbff340,0,0x0,4 -tick,0x100253b6a,0x7fff5fbfe8e0,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000f9353,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,LoadIC,0x1e4e3457c920,134,"_events" -code-creation,LoadIC,0x1e4e3457c920,134,"_events" -code-creation,LoadIC,0x1e4e3457c9c0,134,"domain" -code-creation,LoadIC,0x1e4e3457c9c0,134,"domain" -code-creation,CallIC,0x1e4e3457ca60,492,"execute" -tick,0x1e4e3459168e,0x7fff5fbff0a0,1,0x100013f1a,0 -code-creation,LoadIC,0x1e4e3457cc60,254,"" -code-creation,LoadIC,0x1e4e3457cc60,254,"" -code-creation,StoreIC,0x1e4e345739e0,390,"_events" -code-creation,StoreIC,0x1e4e345739e0,390,"_events" -code-creation,LoadIC,0x1e4e34573b80,254,"" -code-creation,LoadIC,0x1e4e34573b80,254,"" -code-creation,CallIC,0x1e4e34573c80,205,"onIncoming" -code-creation,LoadIC,0x1e4e34573d60,284,"" -code-creation,LoadIC,0x1e4e34573d60,284,"" -code-creation,StoreIC,0x1e4e34573e80,420,"_events" -code-creation,StoreIC,0x1e4e34573e80,420,"_events" -code-creation,LoadIC,0x1e4e34574040,284,"" -code-creation,LoadIC,0x1e4e34574040,284,"" -code-creation,LoadIC,0x1e4e34574160,134,"_events" -code-creation,LoadIC,0x1e4e34574160,134,"_events" -code-creation,CallIC,0x1e4e34574200,257,"emit" -code-creation,LoadIC,0x1e4e34574320,134,"_events" -code-creation,LoadIC,0x1e4e34574320,134,"_events" -code-creation,CallIC,0x1e4e345743c0,287,"emit" -code-creation,LoadIC,0x1e4e345744e0,134,"_events" -code-creation,LoadIC,0x1e4e345744e0,134,"_events" -code-creation,CallIC,0x1e4e3456e8c0,287,"emit" -code-creation,LoadIC,0x1e4e3456e9e0,134,"_events" -code-creation,LoadIC,0x1e4e3456e9e0,134,"_events" -code-creation,LoadIC,0x1e4e3456ea80,134,"domain" -code-creation,LoadIC,0x1e4e3456ea80,134,"domain" -code-creation,LoadIC,0x1e4e3456eb20,134,"_events" -code-creation,LoadIC,0x1e4e3456eb20,134,"_events" -code-creation,LoadIC,0x1e4e3456ebc0,134,"domain" -code-creation,LoadIC,0x1e4e3456ebc0,134,"domain" -code-creation,CallIC,0x1e4e3456ec60,277,"removeListener" -code-creation,LoadIC,0x1e4e3456ed80,134,"domain" -code-creation,LoadIC,0x1e4e3456ed80,134,"domain" -code-creation,CallIC,0x1e4e3456ee20,247,"removeListener" -code-creation,LoadIC,0x1e4e3456ef20,134,"_events" -code-creation,LoadIC,0x1e4e3456ef20,134,"_events" -code-creation,LoadIC,0x1e4e3456efc0,138,"incoming" -code-creation,LoadIC,0x1e4e3456efc0,138,"incoming" -tick,0x1e4e345b5969,0x7fff5fbfeac0,0,0x1e4e343a9495,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e3456f060,492,"execute" -code-creation,CallIC,0x1e4e34574580,205,"onIncoming" -tick,0x1002770a9,0x7fff5fbfe4d0,1,0x100013f1a,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e345ad280,138,"incoming" -code-creation,LoadIC,0x1e4e345ad280,138,"incoming" -code-creation,CallIC,0x1e4e345ad320,247,"removeListener" -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3cd1,0x7fff5fbfef88,0,0x100051ee8,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f9244,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001203fa,0x7fff5fbff030,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024b001,0x7fff5fbfee00,0,0x2e9dafd05169,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001791c4,0x7fff5fbfee30,0,0x7fff5fbfef0c,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34332fdd,0x7fff5fbfefd0,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008dd7b,0x7fff5fbff0b0,0,0x7fff5fbff0f0,0,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10017a01d,0x7fff5fbfeda8,0,0x0,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10012ebf7,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -code-creation,CallIC,0x1e4e345ad420,492,"finish" -code-creation,CallIC,0x1e4e34569e60,492,"finish" -code-creation,LoadIC,0x1e4e3456a060,134,"pair" -code-creation,LoadIC,0x1e4e3456a060,134,"pair" -code-creation,LoadIC,0x1e4e3456a100,134,"writable" -code-creation,LoadIC,0x1e4e3456a100,134,"writable" -code-creation,LoadIC,0x1e4e3456a1a0,134,"_pending" -code-creation,LoadIC,0x1e4e3456a1a0,134,"_pending" -code-creation,LoadIC,0x1e4e3456a240,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3456a240,134,"_pendingCallbacks" -code-creation,LoadIC,0x1e4e3456a2e0,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e3456a2e0,138,"_pendingBytes" -code-creation,StoreIC,0x1e4e3456a380,189,"_pendingBytes" -code-creation,StoreIC,0x1e4e3456a380,189,"_pendingBytes" -tick,0x1e4e345b7e80,0x7fff5fbff088,0,0x1e4e34567296,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -code-creation,LoadIC,0x1e4e3456a440,134,"_events" -code-creation,LoadIC,0x1e4e3456a440,134,"_events" -code-creation,LoadIC,0x1e4e3456a4e0,134,"domain" -code-creation,LoadIC,0x1e4e3456a4e0,134,"domain" -code-creation,LoadIC,0x1e4e3456a580,134,"writable" -code-creation,LoadIC,0x1e4e3456a580,134,"writable" -code-creation,CallIC,0x1e4e3456a620,200,"write" -code-creation,LoadIC,0x1e4e3456a700,134,"_needDrain" -code-creation,LoadIC,0x1e4e3456a700,134,"_needDrain" -tick,0x1e4e3453d296,0x7fff5fbfed88,0,0xe662304161,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -code-creation,CallIC,0x1e4e3456a7a0,257,"emit" -tick,0x7fff9120c7f2,0x7fff5fbff260,0,0x0,4 -tick,0x100391a51,0x7fff5fbfed70,0,0x7fff5fbfeda0,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e34399383 -tick,0x1e4e3459ffae,0x7fff5fbfeec8,0,0x1e4e343aa5fb,0,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343061a8,0x7fff5fbfed50,0,0x1e4e3454ed8b,0,0x1e4e3454d436,0x1e4e343aa5cb,0x1e4e34394a55,0x1e4e34399727 -tick,0x10039534a,0x7fff5fbfeac8,0,0x10011d4a6,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430987b,0x7fff5fbfeaf8,0,0xe662335941,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253bc2,0x7fff5fbfe620,0,0x101009410,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b9289,0x7fff5fbfec00,0,0x1e4e34570fec,0,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343258e9,0x7fff5fbfeb80,0,0x1e4e3455a74d,0,0x1e4e34571067,0x1e4e345ab7d2,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457e225,0x7fff5fbfeb90,0,0x1e4e34359ad4,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459f80b,0x7fff5fbfe9c8,0,0x7fff5fbfe9f8,0,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309849,0x7fff5fbfeb20,0,0x1e4e34571fff,0,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10024c745,0x7fff5fbfec50,0,0x11e9a4d25399,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027627c,0x7fff5fbfebb0,0,0x0,0,0x1e4e3455a80b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,StoreIC,0x1e4e3456a8c0,189,"_buffer" -code-creation,StoreIC,0x1e4e3456a8c0,189,"_buffer" -code-creation,LoadIC,0x1e4e345acd00,138,"_binding" -code-creation,LoadIC,0x1e4e345acd00,138,"_binding" -code-creation,LoadIC,0x1e4e345acda0,134,"_flush" -code-creation,LoadIC,0x1e4e345acda0,134,"_flush" -code-creation,StoreIC,0x1e4e345ace40,189,"callback" -code-creation,StoreIC,0x1e4e345ace40,189,"callback" -code-creation,StoreIC,0x1e4e345acf00,189,"buffer" -code-creation,StoreIC,0x1e4e345acf00,189,"buffer" -tick,0x1e4e34320f8e,0x7fff5fbfed80,0,0x1e4e3454dadf,0,0x1e4e343a9b56,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3459a7ad,0x7fff5fbfea30,0,0x7fff5fbfea88,0,0x1e4e343a9270,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608e1,0x7fff5fbfe840,0,0xbaffa8400000022,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000b9854,0x7fff5fbfe7d8,0,0x1000b9cf0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a0204,0x7fff5fbfed30,0,0x1,0,0x1e4e345757f0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911f282d,0x7fff5fbfe9c0,0,0x2e9dafd041e1,0,0x1e4e34584ed9,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34580990,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002ccd8,0x7fff5fbfeff0,0,0x101009400,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100063eae,0x7fff5fbfef20,0,0x102019d00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010d3b1,0x7fff5fbff030,0,0x7fff5fbff090,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fdbc,0x7fff5fbfec10,0,0x7fff5fbfec50,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024b700,0x7fff5fbfebe8,0,0x10024b0f3,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10008da10,0x7fff5fbfefc0,0,0x103016400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91210815,0x7fff5fbfed70,0,0x7fff5fbfee20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345b91a8,0x7fff5fbff050,0,0x1e4e3455246b,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430b5ed,0x7fff5fbff598,0,0x1e4e343e410d,0,0x1e4e3459e4aa -tick,0x1000f980b,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001a8551,0x7fff5fbfeab0,0,0x101009410,0,0x1e4e345ab7f8,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002510cb,0x7fff5fbfeb60,0,0x8d1,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002bf1eb,0x7fff5fbfed90,0,0x123f00000000,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345afc9e,0x7fff5fbfec90,0,0x3d2797ecca1,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011d475,0x7fff5fbfecb0,0,0x513,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019fc03,0x7fff5fbfeaa0,0,0x2e9dafd056a9,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100394534,0x7fff5fbfe7c8,0,0x1001221af,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34321bcf,0x7fff5fbfe688,0,0x0,0,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002607b1,0x7fff5fbfef30,0,0x7fff5fbfef70,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100175d71,0x7fff5fbfec50,0,0x101009400,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454d0d0,0x7fff5fbfec80,0,0xe662304121,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608ef,0x7fff5fbfeab0,0,0x262ae5220000000a,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011d541,0x7fff5fbfe920,0,0x7fff5fbfe980,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012116c,0x7fff5fbff170,0,0x0,4 -tick,0x10024ee8f,0x7fff5fbfedc0,0,0x11e9a4f501c9,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000ba08b,0x7fff5fbfef00,0,0x7fff5fbfef30,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e3453e344,0x1e4e3453dee6,0x1e4e34552902,0x1e4e34598721 -tick,0x10026b450,0x7fff5fbfea80,0,0x7fff5fbfeb20,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010dc33,0x7fff5fbfecb0,0,0x102023a88,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c29b,0x7fff5fbfed20,0,0x7fff5fbfed60,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x10011b611,0x7fff5fbfe920,0,0x7fff5fbfe980,0,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100232b31,0x7fff5fbfeab0,0,0x7fff5fbfeb10,0,0x1e4e34588ee2,0x1e4e345adfba,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002630a8,0x7fff5fbfeb10,0,0x11e9a4be2540,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10024fe96,0x7fff5fbfe790,0,0x11e9a4b00000,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c936e,0x7fff5fbfe850,0,0x102023a88,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000df045,0x7fff5fbfec28,0,0xcc5c7903e420d3f2,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fccb,0x7fff5fbfee70,0,0x7fff5fbfeeb0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002524ff,0x7fff5fbfee28,0,0x1002490de,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608e7,0x7fff5fbfed80,0,0x263e5f5700000003,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd28f,0x7fff5fbfee90,0,0x301,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345515e0,0x7fff5fbff058,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9121376e,0x7fff5fbfedd0,0,0x7fff5fbfee00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5cd8,0x7fff5fbfee58,0,0x1000c2026,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100051ee0,0x7fff5fbfee50,0,0x7fff5fbfee80,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006310a,0x7fff5fbff030,0,0x1000630f2,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10005b8a3,0x7fff5fbfef60,0,0x4,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000ded27,0x7fff5fbfec98,0,0xb8c5627912deda0c,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e343e8c9c,0x7fff5fbfed50,0,0x11e9a4b72199,0,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4b1,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34566ec4,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911edebb,0x7fff5fbfeb90,0,0x7fff5fbfec10,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002761d0,0x7fff5fbfebd8,0,0x100255030,0,0x1e4e3455a80b,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100117c0b,0x7fff5fbff420,0,0x7fff5fbff440,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b8cdc,0x7fff5fbfeaf8,0,0x1e4e345587d1,0,0x1e4e3453cca7,0x1e4e3458d70b,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34575112,0x7fff5fbfedf8,0,0x11e9a4afbab1,0,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34556eae,0x7fff5fbfec60,0,0x37ec2edffa21,0,0x1e4e34553563,0x1e4e3459f340,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100118068,0x7fff5fbfec00,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457eb84,0x7fff5fbfef88,0,0x1e4e34399339,0 -tick,0x7fff911f324e,0x7fff5fbfebe0,0,0x1006395b4,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3456df3a,0x7fff5fbfedd0,0,0x5,0,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34311960,0x7fff5fbfef20,0,0x1e4e345554e2,0,0x1e4e34399383 -tick,0x100038ed8,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3430ad1f,0x7fff5fbfe958,0,0x1e4e34334657,0,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3455f34e,0x7fff5fbfec78,0,0x1e4e345afea5,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002491a1,0x7fff5fbfea10,0,0x7fff5fbfea80,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024afe9,0x7fff5fbfe710,0,0x2e9dafd0e469,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019ece1,0x7fff5fbfe290,0,0x7fff5fbfe300,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b2e7c,0x7fff5fbfeea8,0,0x1e4e343af6c7,0,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100170950,0x7fff5fbfe7b0,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e345a08a3,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002490ed,0x7fff5fbff1b0,0,0x101009410,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10011d555,0x7fff5fbfe8c0,0,0x7fff5fbfe920,0,0x1e4e345651bb,0x1e4e343a9553,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001443b9,0x7fff5fbfed40,0,0x0,0,0x1e4e34398af0,0x1e4e345761cf,0x1e4e34583f95,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e343a9507,0x7fff5fbfeab8,0,0x2d00000000,0,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911da171,0x7fff5fbfed98,0,0x10010e888,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100252442,0x7fff5fbfef60,0,0x0,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019cfbe,0x7fff5fbfef60,0,0x4a,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bcda9,0x7fff5fbfed80,0,0x7fff5fbfeda0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002bf398,0x7fff5fbfecc0,0,0xaabee816aa1,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fef7,0x7fff5fbfec88,0,0x1,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbff028,0,0x10011d48c,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df165,0x7fff5fbfec98,0,0x5c1380932e746e5e,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1001a07ba,0x7fff5fbfeb20,0,0x0,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c87b1,0x7fff5fbfec40,0,0x7fff5fbfec68,0,0x1e4e3454ed8b,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002607b1,0x7fff5fbfec20,0,0x7fff5fbfec60,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002491f4,0x7fff5fbfe9b0,0,0xe662367291,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9127cc9e,0x7fff5fbfe7e8,0,0x7fff91213830,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dab07,0x7fff5fbfeae0,0,0x7fff5fbfeb20,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251362,0x7fff5fbfeda0,0,0x11e9a47429b9,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c3c4c,0x7fff5fbff010,0,0x1,0,0x1e4e3455497b,0x1e4e3457bd81,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002490f1,0x7fff5fbff020,0,0x0,3 -tick,0x1e4e3432556e,0x7fff5fbfeda8,0,0x1e4e343f1e91,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001fcb91,0x7fff5fbfec40,0,0x7fff5fbfecb0,0,0x1e4e3453d1f0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100005835,0x7fff5fbff1d0,0,0x0,4 -tick,0x100275f09,0x7fff5fbfead0,0,0x600000000,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3459994c,0x7fff5fbfed80,0,0x101009410,0,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10024aff6,0x7fff5fbfe940,0,0x2e9dafd23ac1,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001a8100,0x7fff5fbff298,0,0x10019b132,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343258de,0x7fff5fbfeea8,0,0x1e4e3455a74d,0,0x1e4e34571177,0x1e4e345b4b51,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b6919,0x7fff5fbfeaa0,0,0x7fff5fbfeb00,0,0x1e4e3454e2fc,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343af7a1,0x7fff5fbfecd8,0,0x7fff5fbfed08,0,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100255054,0x7fff5fbfe8a0,0,0x7fff5fbfe8e0,0,0x1e4e3455a80b,0x1e4e345ae7f4,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3431b405,0x7fff5fbfed90,0,0x1e4e34557b9c,0,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10000b195,0x7fff5fbfed10,0,0x7fff5fbfed70,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x100253bbb,0x7fff5fbfef40,0,0x101009410,0,0x1e4e3455a74d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dbd12,0x7fff5fbfe848,0,0x100121c6d,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100126681,0x7fff5fbfedc0,0,0x7fff5fbfee00,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000bd110,0x7fff5fbfed08,0,0x101816878,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002607bc,0x7fff5fbfee10,0,0x11e9a46d2aa1,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253b7f,0x7fff5fbfebb0,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002492c0,0x7fff5fbfee20,0,0x101009410,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608b8,0x7fff5fbfeda0,0,0x263e5f570000000a,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100253c00,0x7fff5fbff370,0,0x0,3 -tick,0x7fff911daafb,0x7fff5fbfed50,0,0x7fff5fbfed90,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3456d78a,0x7fff5fbfed90,0,0x5,0,0x1e4e34398b06,0x1e4e345761cf,0x1e4e34583f95,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002bf1c0,0x7fff5fbfeda8,0,0x1e4e3430618e,0,0x1e4e3455a80b,0x1e4e3457120e,0x1e4e34583de5,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e3454e14b,0x7fff5fbfe9f8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e345a08a3,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001221b5,0x7fff5fbfe7d0,0,0x79,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3e6,0x7fff5fbfeb80,0,0x10000c162,0,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34324899,0x7fff5fbff018,0,0x0,0 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911d9d04,0x7fff5fbfe7c0,0,0x7fff5fbfe880,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e34599f28,0x1e4e3458d144,0x1e4e3458c774,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3458d6e5,0x7fff5fbfebb0,0,0x37ec2edd43f1,0,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x1e4e34324d21,0x7fff5fbfecf8,0,0x11e9a45d51c1,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523ba,0x7fff5fbfeb90,0,0x37ec2ed00000,0,0x1e4e34551d37,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100120351,0x7fff5fbfecf0,0,0x7fff5fbfed10,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34399383 -tick,0x10010dbd4,0x7fff5fbff230,0,0x0,4 -tick,0x1e4e345b8cdc,0x7fff5fbfe620,0,0x1e4e34560b9b,0,0x1e4e343e426d,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100254600,0x7fff5fbfeaf8,0,0x100179207,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000a714,0x7fff5fbfece0,0,0x7fff5fbfed00,0,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9120c059,0x7fff5fbff308,0,0x0,4 -tick,0x100257a95,0x7fff5fbfe628,0,0x2,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454ecee,0x7fff5fbfeca0,0,0x1e4e3454dee7,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345a237c,0x7fff5fbfeb70,0,0x1e4e345ae456,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100118ac8,0x7fff5fbfe890,0,0x7fff5fbfe8c0,0,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff911dbd12,0x7fff5fbff2f8,0,0x10011b9bf,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010ca31,0x7fff5fbff4a0,0,0x7fff5fbff500,0,0x1e4e343b63aa,0x1e4e343e412b,0x1e4e3459e4aa -tick,0x1e4e345ac49d,0x7fff5fbfeeb0,0,0x1e4e343ae6f4,0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523de,0x7fff5fbfe8b0,0,0x101009410,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002be51a,0x7fff5fbfef48,0,0x101009400,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c716,0x7fff5fbff130,0,0x11e9a431c591,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001446bc,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9127cc08,0x7fff5fbfeee8,0,0x7fff911f3e68,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5e7a,0x7fff5fbfef18,0,0x100075bec,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dad59,0x7fff5fbfecd0,0,0x7fff5fbfed00,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002608ef,0x7fff5fbfee00,0,0x263e5f5700000003,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34309879,0x7fff5fbff250,0,0x100000000,0,0x1e4e343f1af1,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100124360,0x7fff5fbfedc8,0,0x10001bbed,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000baa7f,0x7fff5fbfec70,0,0x10060b8c8,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100315091,0x7fff5fbfeed0,0,0x7fff5fbfef00,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x7fff911dbfc8,0x7fff5fbfe838,0,0x7fff91213b99,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001710dc,0x7fff5fbff4e0,0,0x0,3 -tick,0x100144627,0x7fff5fbfeed0,0,0x11e9a4375ef1,0,0x1e4e34394aa3,0x1e4e34399727 -tick,0x1e4e34309efb,0x7fff5fbfeb30,0,0x1e4e343e78c2,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002b9846,0x7fff5fbfec70,0,0x11e9a435ed69,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100170963,0x7fff5fbfea70,0,0x9,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10027620b,0x7fff5fbfec90,0,0x0,0,0x1e4e3455eb2b,0x1e4e343949d6,0x1e4e34399727 -tick,0x1e4e3431520a,0x7fff5fbfed78,0,0x1afb00000000,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100038f36,0x7fff5fbff3b0,0,0x101009400,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025125e,0x7fff5fbfec50,0,0xe66234e391,0,0x1e4e345b44de,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf1c1,0x7fff5fbff290,0,0x7fff5fbff2f0,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b68fb,0x7fff5fbfec30,0,0x7fff5fbfec88,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34325595,0x7fff5fbfef80,0,0x1e4e34399439,0 -tick,0x10010d214,0x7fff5fbfedf0,0,0x1019014b0,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1002bfb37,0x7fff5fbfeb80,0,0x1002bfb30,0,0x1e4e34571eed,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454df45,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012128f,0x7fff5fbff510,0,0x0,3 -tick,0x10019b20e,0x7fff5fbfefc0,0,0x11e9a42ab989,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002608c3,0x7fff5fbfeba0,0,0x3fd6f2420000000e,0,0x1e4e345b45a8,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002759fe,0x7fff5fbfec10,0,0x7fff5fbfec60,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b57,0x7fff5fbff0b0,0,0x0,3 -tick,0x1e4e343e7901,0x7fff5fbfeb50,0,0x11e9a42fa011,0,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b8587,0x7fff5fbfecb0,0,0xc800000000,0,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343262cc,0x7fff5fbfef50,0,0x1e4e34394a7d,0,0x1e4e34399727 -tick,0x1e4e34326316,0x7fff5fbfef88,0,0x1e4e343993be,0 -tick,0x1e4e34584fd4,0x7fff5fbfeaf0,0,0x11e9a415c101,0,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1000fde57,0x7fff5fbfee78,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbd0c,0x7fff5fbfefc8,0,0x10011d48c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbf90,0x7fff5fbfed18,0,0x7fff91213830,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432556e,0x7fff5fbff288,0,0x1e4e343f1b7a,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345a0060,0x7fff5fbff378,0,0x1e4e343df207,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c5bfa,0x7fff5fbfee30,0,0x10060d3b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345813ce,0x7fff5fbff190,0,0x37ec2ed9cbe1,0,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199effa,0x7fff5fbff6d8,0,0x0,4 -tick,0x1000f98f8,0x7fff5fbfec38,0,0x1000fa413,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e345527fe,0x7fff5fbfeb78,0,0x1020259f0,0,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34308008,0x7fff5fbfed88,0,0x1e4e343f1ac9,0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456fcd6,0x7fff5fbfecb0,0,0xe662335941,0,0x1e4e3459f45d,0x1e4e34599988,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002e4fb3,0x7fff5fbfeb50,0,0x102023a88,0,0x1e4e343e8d37,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10026c550,0x7fff5fbfeae0,0,0x102023a88,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100252442,0x7fff5fbfe6b0,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x10015ddfa,0x7fff5fbfeab0,0,0x1,0,0x1e4e34579b39,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459fa1a,0x7fff5fbfe630,0,0x1e4e34560b28,0,0x1e4e343e426d,0x1e4e343346a6,0x1e4e34552947,0x1e4e3459ba7b,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34309efe,0x7fff5fbfebc0,0,0x1e4e343aabf9,0,0x1e4e345b5f37,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10025460a,0x7fff5fbfeab8,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e34575361,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002be701,0x7fff5fbfed70,0,0x7fff5fbfed90,0,0x1e4e343f1be0,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100251e41,0x7fff5fbfe6e0,0,0x7fff5fbfe770,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e3458d5a8,0x1e4e3457a977,0x1e4e345b87f9,0x1e4e345b711b,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002bf1c6,0x7fff5fbfee08,0,0x7fff5fbfee68,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100260849,0x7fff5fbfebf0,0,0x224a48af00000005,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -code-creation,LazyCompile,0x1e4e345acfc0,462,"collect /Users/indutny/Code/indutny/node-spdy/lib/spdy/utils.js:81",0x37ec2ed978b8,* -tick,0x10008e9a7,0x7fff5fbfebb0,0,0x7fff5fbfec20,0,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1003009ca,0x7fff5fbfeaa0,0,0x0,1 -tick,0x7fff911daabb,0x7fff5fbfea60,0,0x0,1 -tick,0x1001a951a,0x7fff5fbfeac0,0,0x0,1 -tick,0x1001a8a6c,0x7fff5fbfeac0,0,0x0,1 -tick,0x1001a8cb0,0x7fff5fbfeac0,0,0x0,1 -tick,0x7fff912137ff,0x7fff5fbfe840,0,0x0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911dad20,0x7fff5fbfe7f8,0,0x1000df4a9,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1001221b5,0x7fff5fbfe7d0,0,0x79,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100394eb8,0x7fff5fbfec38,0,0x100046789,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1e4e34573a49,0x7fff5fbff030,0,0x1e4e34588067,0 -tick,0x1e4e3455a7fb,0x7fff5fbff068,0,0xe662304121,0,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3456503f,0x7fff5fbfe9b8,0,0x10000c2be,0,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100122a38,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100253b6a,0x7fff5fbfef40,0,0x101009410,0,0x1e4e34320ed1,0x1e4e3457bf87,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006f60e,0x7fff5fbff050,0,0x7fff5fbff0b0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100260962,0x7fff5fbfeee0,0,0x1,0,0x1e4e34551d37,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3454e2fc,0x7fff5fbfefe8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e345679fb,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010e96c,0x7fff5fbfeda0,0,0x102019ba0,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1001203f6,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912083bc,0x7fff5fbfeda0,0,0x7fff5fbfedf0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c80da,0x7fff5fbfed70,0,0x7fff5fbfee10,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912153b6,0x7fff5fbff020,0,0x7fff5fbff050,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912132c6,0x7fff5fbfeb00,0,0xfffffffffffffff0,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1000f9235,0x7fff5fbfe778,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10021acd1,0x7fff5fbfe720,0,0x7fff5fbfe770,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343098e1,0x7fff5fbfec80,0,0x1e4e3456719c,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3453d130,0x7fff5fbfeda8,0,0x11e9a5d82138,0,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1002b124f,0x7fff5fbfe9a0,0,0x7fff5fbfea90,0,0x1e4e343a92fa,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002523a0,0x7fff5fbfeed8,0,0x100251ed1,0,0x1e4e3457bfa2,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9120fccd,0x7fff5fbfe720,0,0x10099e400,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34596957,0x7fff5fbfea80,0,0xd9c9ff15a96f5556,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345b65c0,0x7fff5fbfebf8,0,0x1e4e34560143,0,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10018e8c1,0x7fff5fbfecb0,0,0x7fff5fbfed20,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002be511,0x7fff5fbfeae0,0,0x7fff5fbfeb30,3,0x1e4e3456877b,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10012ef36,0x7fff5fbff080,0,0x7fff5fbff110,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100269fb1,0x7fff5fbff2c0,0,0x7fff5fbff310,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345ae29f,0x7fff5fbfeb78,0,0x1002be700,0,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e09d,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002608bc,0x7fff5fbff100,0,0x2d90905c00000009,3,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff91213287,0x7fff5fbff270,0,0xffffffffffffffff,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100175d11,0x7fff5fbfeca0,0,0x7fff5fbfecd0,3,0x1e4e345580e9,0x1e4e3452a536,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122103,0x7fff5fbfe7d0,0,0x79,3,0x1e4e345651bb,0x1e4e3454dc3c,0x1e4e345affdf,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345aa460,0x7fff5fbfec50,0,0x101009400,0,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x10024ba07,0x7fff5fbfe7b0,0,0x11e9a5b97f20,0,0x1e4e34320cb2,0x1e4e3455c67a,0x1e4e34334687,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100120280,0x7fff5fbfee08,0,0x10001a98a,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e34576681,0x7fff5fbfeea8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c830d,0x7fff5fbfedc0,0,0x2,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912083bc,0x7fff5fbfece0,0,0x7fff5fbfed30,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10010dca7,0x7fff5fbff010,0,0x102023a68,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff91210825,0x7fff5fbfed70,0,0x7fff5fbfee20,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002510e6,0x7fff5fbfea90,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000b9d09,0x7fff5fbfecc0,0,0x10099f800,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff8ddd364c,0x7fff5fbff668,0,0x0,4 -tick,0x1002be538,0x7fff5fbfee00,0,0x7fff5fbfee10,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x10024ee42,0x7fff5fbfe7c0,0,0x37ec2edcf291,0,0x1e4e3455a80b,0x1e4e34571067,0x1e4e345adf5c,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100122a38,0x7fff5fbfebc0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e147,0x7fff5fbfecb8,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345aece5,0x7fff5fbfee28,0,0x1e4e3452a536,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10000c2b5,0x7fff5fbfebd0,0,0x7fff5fbfec20,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3458740e,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454a4a4,0x7fff5fbfee60,0,0x1e4e3458747a,0,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10018e814,0x7fff5fbff620,0,0x0,4 -tick,0x10019b245,0x7fff5fbfe9e0,0,0x0,0,0x1e4e3455f4b2,0x1e4e345b5f92,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345930c9,0x7fff5fbfe8f8,0,0x1e4e343e439c,0,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x100144683,0x7fff5fbfed30,0,0x7fff5fbfed80,0,0x1e4e3456bed2,0x1e4e343e8cda,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34597667,0x7fff5fbfea18,0,0x37ec2eddef79,0,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34587c6d,0x7fff5fbfebe8,0,0x7fff5fbfec18,0,0x1e4e345603e5,0x1e4e345a995d,0x1e4e345a354c,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34551d37,0x7fff5fbfe9e0,0,0x1020259f0,0,0x1e4e3455a6d1,0x1e4e345ae69b,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100186850,0x7fff5fbfe7f8,0,0x100186783,0,0x1e4e34320ee7,0x1e4e34571f56,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e345b745c,0x7fff5fbfed38,0,0x37ec2ed0ddb1,0,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3454ed06,0x7fff5fbfec80,0,0x11e9a59b0781,0,0x1e4e3454dee7,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e34327a9d,0x7fff5fbfed88,0,0x1e4e3455287e,0,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1000185b0,0x7fff5fbfee10,0,0x7fff5fbfee27,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e3457d031,0x7fff5fbfece0,0,0x3d2797f6031,0,0x1e4e3453d46b,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010d3a1,0x7fff5fbfeb50,0,0x7fff5fbfebb0,0,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100274955,0x7fff5fbfe240,0,0x0,0,0x1e4e343a8f05,0x1e4e34579c64,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100250db5,0x7fff5fbfee10,0,0xd9c9ff15a96f5556,0,0x1e4e3457c086,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343098d2,0x7fff5fbfefe8,0,0x100000000,0,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3432584a,0x7fff5fbff288,0,0x1e4e343f1be0,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10001a871,0x7fff5fbfee70,0,0x7fff5fbfeeb8,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9120fc1d,0x7fff5fbfec38,0,0x7fff9120c47b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e3430a8e0,0x7fff5fbff380,0,0x1e4e343df271,0,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100120364,0x7fff5fbff010,0,0x7fff5fbff030,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9199f4aa,0x7fff5fbfecf8,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10001a2d4,0x7fff5fbfedc0,0,0x102019b80,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002be568,0x7fff5fbfecd0,0,0x102023a88,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002772f1,0x7fff5fbfe570,0,0x7fff5fbfe9d0,3,0x1e4e3456b480,0x1e4e34580757,0x1e4e3459490b,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e3452d517,0x7fff5fbfea70,0,0x1e4e3456e144,0,0x1e4e34398b06,0x1e4e34583b98,0x1e4e34573968,0x1e4e345a08d4,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e34384b5a,0x1e4e3455287e,0x1e4e34567f44,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1e4e343a78f4,0x7fff5fbfef40,0,0x1e4e343949fb,0,0x1e4e34399727 -tick,0x10011fba1,0x7fff5fbfead0,0,0x101009400,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e34575593,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfece8,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199f4aa,0x7fff5fbff368,0,0x0,4 -tick,0x1e4e3431b53f,0x7fff5fbfed70,0,0xaabee8169e1,0,0x1e4e34557b9c,0x1e4e3452a536,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10019e080,0x7fff5fbfeb18,0,0x1002c6177,0,0x1e4e3435a7a0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e345ac760,0x7fff5fbfee68,0,0x1e4e343ad898,0,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e343150ab,0x7fff5fbff2d8,0,0xe66234f301,0,0x1e4e34576997,0x1e4e345984df -tick,0x10019bf37,0x7fff5fbfe990,0,0x102023b38,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459387c,0x7fff5fbff150,0,0x11e9a576e719,0 -tick,0x1001710dd,0x7fff5fbff138,0,0x0,3 -tick,0x100248ff8,0x7fff5fbfeb70,0,0x7fff5fbfec2c,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e34583a7a,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1002761d0,0x7fff5fbfe678,0,0x10024ed90,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x100179237,0x7fff5fbfea90,0,0x0,3,0x1e4e3454e2fc,0x1e4e3453d21f,0x1e4e343e8c22,0x1e4e3456bfea,0x1e4e343af6f3,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100215901,0x7fff5fbfec10,0,0x7fff5fbfec60,0,0x1e4e3453f8aa,0x1e4e3458757d,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3455f8bd,0x7fff5fbfed28,0,0x1e4e343060e1,0,0x1e4e34563578,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010dcc8,0x7fff5fbfe9a0,0,0x7fff5fbfea90,0,0x1e4e343a9211,0x1e4e34579c64,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3459d8fe,0x7fff5fbfef68,0,0x9be4f4cc81,0,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001a8101,0x7fff5fbfeac0,0,0x7fff5fbfeaf0,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34309840,0x7fff5fbfee20,0,0x1e4e3452a4e7,0,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3457dfe4,0x7fff5fbfeca8,0,0x1e4e34580961,0,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002cd6f1,0x7fff5fbfef50,0,0x7fff5fbfef78,0,0x1e4e3439925d -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x100263181,0x7fff5fbfea80,0,0x11e9a568a0a9,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002607b0,0x7fff5fbfedb8,0,0x100253bc2,3,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345688c8,0x7fff5fbff168,0,0x800000000,0,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000c4a82,0x7fff5fbfedd0,0,0x7fff5fbfedf0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10024c30d,0x7fff5fbfee08,0,0x101009400,3,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x100262ced,0x7fff5fbfe6a0,0,0x1e4e34327dbe,3,0x1e4e34568839,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fccb,0x7fff5fbfec60,0,0x7fff5fbfec80,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff9127cbc6,0x7fff5fbfefc8,0,0x10011d48c,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff912135b8,0x7fff5fbfec90,0,0x14fff80000,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002492c0,0x7fff5fbfec10,0,0x101009410,3,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000fde10,0x7fff5fbfee78,0,0x1000bd173,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10019ad35,0x7fff5fbfed10,0,0x4273e10515db3000,0,0x1e4e3431826c,0x1e4e34576997,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911f3e0b,0x7fff5fbfebd0,0,0x10280ebe8,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002be939,0x7fff5fbfea90,0,0x7fff5fbfeb10,0,0x1e4e343e78d4,0x1e4e34571fff,0x1e4e345aff22,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100261b53,0x7fff5fbfeb00,0,0x7fff5fbfeb30,0,0x1e4e345875ad,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199e122,0x7fff5fbff338,0,0x0,4 -tick,0x1002523e1,0x7fff5fbfefe0,0,0x0,3 -tick,0x100117b88,0x7fff5fbfede0,0,0x7fff5fbfee00,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9120645f,0x7fff5fbfed68,0,0x7fff91206c54,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x100176003,0x7fff5fbfea90,0,0x7fff5fbfecd0,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430db9d,0x7fff5fbff108,0,0x1e4e34591ad9,0 -tick,0x100248909,0x7fff5fbfe970,0,0x7fff5fbfe9b0,0,0x1e4e34579e65,0x1e4e345b5ee6,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002c3a81,0x7fff5fbfea20,0,0x7fff5fbfea48,0,0x1e4e3455497b,0x1e4e343a8fe7,0x1e4e34585011,0x1e4e345b600f,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001ff011,0x7fff5fbfe960,0,0x7fff5fbfe9d0,0,0x1e4e34597b0c,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456703e,0x7fff5fbfec88,0,0x800000000,0,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e25f,0x7fff5fbfee10,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e34399383 -tick,0x100170946,0x7fff5fbfea78,0,0x2e9dafd14161,3,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e34587592,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x10010ca4f,0x7fff5fbfebb0,0,0x1,0,0x1e4e3454e2fc,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x100315091,0x7fff5fbfec90,1,0x10000af1c,4,0x1e4e3457d1f6,0x1e4e343a9b8e,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff911daa5e,0x7fff5fbff3e0,0,0x7fff5fbff410,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100253ae0,0x7fff5fbfef78,0,0x10024b001,0,0x1e4e34320ed1,0x1e4e3457c06b,0x1e4e34591e83,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x100173ba1,0x7fff5fbfeaa0,0,0x7fff5fbfeb10,0,0x1e4e3455f4b2,0x1e4e345b5e69,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e343591c0,0x7fff5fbfec78,0,0x1e4e345affc9,0,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100145baa,0x7fff5fbfeb40,0,0xe662304121,0,0x1e4e3457d1f6,0x1e4e345754eb,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10001481d,0x7fff5fbfea30,1,0x100014454,4,0x1e4e345ae0f8,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002523cd,0x7fff5fbfed40,0,0x2e9dafd05479,0,0x1e4e34551d37,0x1e4e3455a43d,0x1e4e343b6ad4,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e34332f15,0x7fff5fbfeca0,0,0x1e4e3454ddf5,0,0x1e4e345554e2,0x1e4e3452a4b5,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3456d6c1,0x7fff5fbfede0,0,0x7fff5fbfee20,0,0x1e4e34576330,0x1e4e34583f3b,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x7fff9199e0e6,0x7fff5fbfeb98,0,0x7fff911f1b7a,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x100232b9c,0x7fff5fbfead0,0,0x7fff5fbfeaf0,0,0x1e4e343b6791,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001446cf,0x7fff5fbff100,0,0x7fff5fbff120,0,0x1e4e34580480,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002d7be,0x7fff5fbff040,0,0x1e4e3455287e,0,0x1e4e34560143,0x1e4e34567081,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10006f945,0x7fff5fbfeef0,0,0x7fff5fbfef10,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10002fcb5,0x7fff5fbfef90,0,0x7fff5fbfefc0,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e345768aa,0x7fff5fbfeea8,0,0x37ec2edd4559,0,0x1e4e3459769d,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x10011a1ce,0x7fff5fbfefd0,0,0x102023a70,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1002523a1,0x7fff5fbfee40,0,0x7fff5fbfee80,3,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f920e,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1e4e343262c9,0x7fff5fbff288,0,0x1e4e343f1e29,0,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000f920e,0x7fff5fbfeb78,0,0x1000fa33b,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x7fff911dbcda,0x7fff5fbfed78,0,0x7fff911f40bc,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343df207,0x1e4e343346a6,0x1e4e34552289,0x1e4e343ad6fd,0x1e4e3459e4aa -tick,0x1000df0fa,0x7fff5fbfeb08,0,0x3dd7171afe803e7f,0,0x1e4e3457eeab,0x1e4e34567081,0x1e4e34594a7d,0x1e4e343f1e7a,0x1e4e34560e32,0x1e4e3455287e,0x1e4e343c3e38 -tick,0x1002607c1,0x7fff5fbfeaa0,0,0x0,0,0x1e4e34551d37,0x1e4e3455a63b,0x1e4e34583b1e,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -tick,0x1000bd149,0x7fff5fbfe8e0,0,0x1000c5c05,0,0x1e4e345800c7,0x1e4e34580707,0x1e4e345949c4,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x7fff9199f4aa,0x7fff5fbfe818,0,0x100051044,0,0x1e4e34597a09,0x1e4e34596abd,0x1e4e3457f7b4,0x1e4e3455287e,0x1e4e34567e91,0x1e4e34594b8f,0x1e4e343f1e7a,0x1e4e3457fd2b,0x1e4e343af6da,0x1e4e343aa909,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e34331b8a,0x7fff5fbfef28,0,0x1e4e34394a55,0,0x1e4e34399727 -tick,0x100114761,0x7fff5fbff1c0,0,0x0,4 -tick,0x100179b71,0x7fff5fbfeab0,0,0x1e4e343060e1,0,0x1e4e345ae741,0x1e4e3455287e,0x1e4e345a364d,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3454e1ca,0x7fff5fbfec80,0,0xe662350b29,0,0x1e4e345554e2,0x1e4e3452a4e7,0x1e4e3458747a,0x1e4e343a9c9c,0x1e4e34394a55,0x1e4e34399727 -tick,0x1002c0cb1,0x7fff5fbfec10,0,0x7fff5fbfec30,0,0x1e4e3455f4b2,0x1e4e345afea5,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x10011c081,0x7fff5fbff5f0,0,0x0,4 -tick,0x1002772f0,0x7fff5fbfde58,0,0x100262c16,0,0x1e4e34320cb2,0x1e4e3459b784,0x1e4e34572897,0x1e4e343e443a,0x1e4e343346a6,0x1e4e34552947,0x1e4e34573444,0x1e4e343e6479,0x1e4e343346a6,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1e4e3433466f,0x7fff5fbfeba8,0,0x11e9a53cd979,0,0x1e4e34552289,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1002524ff,0x7fff5fbff0a8,0,0x0,3 -tick,0x100145040,0x7fff5fbfea40,0,0x11,0,0x1e4e3455c886,0x1e4e3458e112,0x1e4e343b67b1,0x1e4e345522ca,0x1e4e345b79cd,0x1e4e3458c20f,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x7fff912086cb,0x7fff5fbfebe0,0,0x7fff5fbfec10,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583c5c,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,Stub,0x1e4e345656a0,560,"BinaryOpStub_ADD_Alloc_Generic" -code-creation,LoadIC,0x1e4e345658e0,147,"$NaN" -code-creation,LoadIC,0x1e4e345658e0,147,"$NaN" -tick,0x100143da0,0x7fff5fbff1c8,0,0x1002feade,0,0x1e4e343c3ceb -code-creation,StoreIC,0x1e4e34565980,189,"readable" -code-creation,StoreIC,0x1e4e34565980,189,"readable" -code-creation,StoreIC,0x1e4e34565a40,185,"_flags" -code-creation,StoreIC,0x1e4e34565a40,185,"_flags" -code-creation,StoreIC,0x1e4e34565b00,185,"writable" -code-creation,StoreIC,0x1e4e34565b00,185,"writable" -code-creation,StoreIC,0x1e4e34565bc0,185,"_connectQueueSize" -code-creation,StoreIC,0x1e4e34565bc0,185,"_connectQueueSize" -code-creation,StoreIC,0x1e4e34565c80,185,"writable" -code-creation,StoreIC,0x1e4e34565c80,185,"writable" -code-creation,StoreIC,0x1e4e34565d40,189,"readable" -code-creation,StoreIC,0x1e4e34565d40,189,"readable" -code-creation,LazyCompile,0x1e4e34565e00,721,"remove _linklist.js:47",0x3d27975d330,* -code-creation,StoreIC,0x1e4e345660e0,189,"_idlePrev" -code-creation,StoreIC,0x1e4e345660e0,189,"_idlePrev" -code-creation,StoreIC,0x1e4e345661a0,189,"_idleNext" -code-creation,StoreIC,0x1e4e345661a0,189,"_idleNext" -code-creation,StoreIC,0x1e4e34566260,189,"_idleNext" -code-creation,StoreIC,0x1e4e34566260,189,"_idleNext" -code-creation,StoreIC,0x1e4e34566320,189,"_idlePrev" -code-creation,StoreIC,0x1e4e34566320,189,"_idlePrev" -code-creation,KeyedLoadIC,0x1e4e345663e0,130,"" -code-creation,KeyedLoadIC,0x1e4e345663e0,130,"args_count: 0" -code-creation,StoreIC,0x1e4e34566480,189,"_idleTimeout" -code-creation,StoreIC,0x1e4e34566480,189,"_idleTimeout" -code-creation,StoreIC,0x1e4e34566540,185,"_handle" -code-creation,StoreIC,0x1e4e34566540,185,"_handle" -code-creation,StoreIC,0x1e4e34566600,185,"destroyed" -code-creation,StoreIC,0x1e4e34566600,185,"destroyed" -code-creation,StoreIC,0x1e4e345666c0,189,"_connections" -code-creation,StoreIC,0x1e4e345666c0,189,"_connections" -code-creation,LoadIC,0x1e4e34566780,134,"_events" -code-creation,LoadIC,0x1e4e34566780,134,"_events" -code-creation,LoadIC,0x1e4e34566820,134,"domain" -code-creation,LoadIC,0x1e4e34566820,134,"domain" -code-creation,Stub,0x1e4e345668c0,224,"CompareICStub" -tick,0x7fff9126351e,0x7fff5fbfe6b0,0,0x7fff5fbfe710,0,0x1e4e34334dcf,0x1e4e343851f8,0x1e4e345522ca,0x1e4e343c4079 -code-creation,LoadIC,0x1e4e345669a0,134,"_events" -code-creation,LoadIC,0x1e4e345669a0,134,"_events" -code-creation,KeyedLoadIC,0x1e4e34566a40,130,"" -code-creation,KeyedLoadIC,0x1e4e34566a40,130,"args_count: 0" -code-creation,CallIC,0x1e4e345ac900,192,"splice" -code-creation,StoreIC,0x1e4e345ac120,185,"writable" -code-creation,StoreIC,0x1e4e345ac120,185,"writable" -code-creation,Stub,0x1e4e345abee0,224,"CompareICStub" -code-creation,CallIC,0x1e4e3459ee20,189,"ToPrimitive" -code-creation,LoadIC,0x1e4e3459eee0,137,"encrypted" -code-creation,LoadIC,0x1e4e3459eee0,137,"encrypted" -code-creation,LoadIC,0x1e4e3459ef80,134,"pair" -code-creation,LoadIC,0x1e4e3459ef80,134,"pair" -code-creation,LoadIC,0x1e4e3459ea60,137,"cleartext" -code-creation,LoadIC,0x1e4e3459ea60,137,"cleartext" -code-creation,LoadIC,0x1e4e3459eb00,138,"_doneFlag" -code-creation,LoadIC,0x1e4e3459eb00,138,"_doneFlag" -code-creation,LoadIC,0x1e4e3459dea0,138,"_doneFlag" -code-creation,LoadIC,0x1e4e3459dea0,138,"_doneFlag" -code-creation,StoreIC,0x1e4e3459df40,185,"_doneFlag" -code-creation,StoreIC,0x1e4e3459df40,185,"_doneFlag" -code-creation,KeyedLoadIC,0x1e4e3459e000,152,"" -code-creation,KeyedLoadMegamorphicIC,0x1e4e3459e000,152,"args_count: 0" -code-creation,CallIC,0x1e4e3459e0a0,157,"remove" -code-creation,LoadIC,0x1e4e3459e140,138,"_idleNext" -code-creation,LoadIC,0x1e4e3459e140,138,"_idleNext" -code-creation,LoadIC,0x1e4e3459d760,138,"_idlePrev" -code-creation,LoadIC,0x1e4e3459d760,138,"_idlePrev" -code-creation,StoreIC,0x1e4e3459d200,189,"_idlePrev" -code-creation,StoreIC,0x1e4e3459d200,189,"_idlePrev" -code-creation,StoreIC,0x1e4e3459d2c0,189,"_idleNext" -code-creation,StoreIC,0x1e4e3459d2c0,189,"_idleNext" -code-creation,StoreIC,0x1e4e3459d380,189,"_idleNext" -code-creation,StoreIC,0x1e4e3459d380,189,"_idleNext" -code-creation,StoreIC,0x1e4e3459cbe0,189,"_idlePrev" -code-creation,StoreIC,0x1e4e3459cbe0,189,"_idlePrev" -code-creation,LoadIC,0x1e4e3459cca0,134,"_idleTimeout" -code-creation,LoadIC,0x1e4e3459cca0,134,"_idleTimeout" -code-creation,CallIC,0x1e4e3459cd40,157,"isEmpty" -code-creation,CallIC,0x1e4e3459cde0,492,"close" -code-creation,StoreIC,0x1e4e3459c7a0,185,"_idleTimeout" -code-creation,StoreIC,0x1e4e3459c7a0,185,"_idleTimeout" -code-creation,StoreIC,0x1e4e3459c860,189,"timer" -code-creation,StoreIC,0x1e4e3459c860,189,"timer" -code-creation,StoreIC,0x1e4e3459c920,185,"ssl" -code-creation,StoreIC,0x1e4e3459c920,185,"ssl" -code-creation,StoreIC,0x1e4e3459ae20,185,"readable" -code-creation,StoreIC,0x1e4e3459ae20,185,"readable" -code-creation,StoreIC,0x1e4e3459aee0,185,"writable" -code-creation,StoreIC,0x1e4e3459aee0,185,"writable" -code-creation,StoreIC,0x1e4e3459afa0,185,"readable" -code-creation,StoreIC,0x1e4e3459afa0,185,"readable" -code-creation,StoreIC,0x1e4e3459a300,185,"writable" -code-creation,StoreIC,0x1e4e3459a300,185,"writable" -code-creation,CallIC,0x1e4e34599fa0,217,"_pull" -code-creation,LoadIC,0x1e4e3459a080,134,"_pending" -code-creation,LoadIC,0x1e4e3459a080,134,"_pending" -code-creation,LoadIC,0x1e4e3459a120,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e3459a120,138,"_pendingBytes" -code-creation,LoadIC,0x1e4e345991a0,134,"_needDrain" -code-creation,LoadIC,0x1e4e345991a0,134,"_needDrain" -code-creation,CallIC,0x1e4e34599240,217,"_push" -code-creation,LoadIC,0x1e4e34599320,134,"pair" -code-creation,LoadIC,0x1e4e34599320,134,"pair" -code-creation,LoadIC,0x1e4e345993c0,134,"_paused" -code-creation,LoadIC,0x1e4e345993c0,134,"_paused" -code-creation,LoadIC,0x1e4e34597060,138,"_buffer" -code-creation,LoadIC,0x1e4e34597060,138,"_buffer" -code-creation,LoadIC,0x1e4e34597100,134,"offset" -code-creation,LoadIC,0x1e4e34597100,134,"offset" -code-creation,LoadIC,0x1e4e345951e0,170,"_pusher" -code-creation,LoadIC,0x1e4e345951e0,170,"_pusher" -code-creation,CallIC,0x1e4e345952a0,187,"use" -code-creation,LoadIC,0x1e4e34595360,134,"remaining" -code-creation,LoadIC,0x1e4e34595360,134,"remaining" -code-creation,LoadIC,0x1e4e34595400,134,"pool" -code-creation,LoadIC,0x1e4e34595400,134,"pool" -code-creation,CallIC,0x1e4e34594000,192,"call" -code-creation,LoadIC,0x1e4e345940c0,134,"ssl" -code-creation,LoadIC,0x1e4e345940c0,134,"ssl" -code-creation,CallIC,0x1e4e34593b60,187,"maybeInitFinished" -code-creation,LoadIC,0x1e4e3458ee40,134,"isFull" -code-creation,LoadIC,0x1e4e3458ee40,134,"isFull" -code-creation,CallIC,0x1e4e3458eee0,187,"_internallyPendingBytes" -code-creation,LoadIC,0x1e4e3458efa0,138,"_destroyAfterPush" -tick,0x7fff9199e6fe,0x7fff5fbfebf8,0,0x7fff9125a857,0,0x1e4e343f3bbb,0x1e4e34594a7d,0x1e4e343f3005,0x1e4e34384e65,0x1e4e345522ca,0x1e4e343c4079 -code-creation,LoadIC,0x1e4e3458efa0,138,"_destroyAfterPush" -code-creation,CallIC,0x1e4e3458f040,217,"_done" -code-creation,StoreIC,0x1e4e3458f120,189,"_doneFlag" -code-creation,StoreIC,0x1e4e3458f120,189,"_doneFlag" -code-creation,LoadIC,0x1e4e3458f1e0,134,"_doneFlag" -code-creation,LoadIC,0x1e4e3458f1e0,134,"_doneFlag" -code-creation,LoadIC,0x1e4e3458ea20,134,"writable" -code-creation,LoadIC,0x1e4e3458ea20,134,"writable" -code-creation,StoreIC,0x1e4e3458ce80,191,"cycleEncryptedPushLock" -code-creation,StoreIC,0x1e4e3458ce80,191,"cycleEncryptedPushLock" -code-creation,CallIC,0x1e4e3455b9c0,247,"removeListener" -code-creation,CallIC,0x1e4e3455bac0,277,"removeListener" -code-creation,LoadIC,0x1e4e3455bbe0,134,"_events" -code-creation,LoadIC,0x1e4e3455bbe0,134,"_events" -code-creation,LoadIC,0x1e4e3455bc80,137,"socket" -code-creation,LoadIC,0x1e4e3455bc80,137,"socket" -code-creation,LoadIC,0x1e4e3455bd20,134,"writable" -code-creation,LoadIC,0x1e4e3455bd20,134,"writable" -tick,0x10012eaec,0x7fff5fbfee00,0,0x7fff5fbfee70,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x1e4e34573928,0x7fff5fbfeb70,0,0x37ec2edde8e9,0,0x1e4e345a08d4,0x1e4e345998f6,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e34599bac,0x1e4e3457589f,0x1e4e343ad8f4,0x1e4e343ae72a,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x1e4e3430a943,0x7fff5fbfebb0,0,0x1e4e3435a1df,0,0x1e4e343596d7,0x1e4e345affc9,0x1e4e345a36a6,0x1e4e3455287e,0x1e4e343ae6d0,0x1e4e343a9d42,0x1e4e34394a55,0x1e4e34399727 -tick,0x100171290,0x7fff5fbff0e0,0,0x0,0 -tick,0x10012035a,0x7fff5fbfec90,0,0x7fff5fbfecb0,0,0x1e4e3456e144,0x1e4e34398b06,0x1e4e34583b98,0x1e4e343947c4,0x1e4e34394adc,0x1e4e34399727 -code-creation,LoadIC,0x1e4e3455bdc0,134,"_events" -code-creation,LoadIC,0x1e4e3455bdc0,134,"_events" -code-creation,LoadIC,0x1e4e3455be60,134,"domain" -code-creation,LoadIC,0x1e4e3455be60,134,"domain" -code-creation,CallIC,0x1e4e3455bf00,187,"end" -code-creation,CallIC,0x1e4e3455bfc0,277,"removeListener" -code-creation,LoadIC,0x1e4e3455c0e0,138,"listener" -code-creation,LoadIC,0x1e4e3455c0e0,138,"listener" -code-creation,LoadIC,0x1e4e3458cc00,194,"" -code-creation,LoadIC,0x1e4e3458cc00,194,"" -code-creation,StoreIC,0x1e4e3458cce0,185,"_closed" -code-creation,StoreIC,0x1e4e3458cce0,185,"_closed" -code-creation,LoadIC,0x1e4e3458c2a0,138,"locked" -code-creation,LoadIC,0x1e4e3458c2a0,138,"locked" -code-creation,StoreIC,0x1e4e3458c340,189,"lockBuffer" -code-creation,StoreIC,0x1e4e3458c340,189,"lockBuffer" -tick,0x1e4e345921dc,0x7fff5fbff120,0,0x11e900000000,0,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x1001864f0,0x7fff5fbfe7d0,0,0x7fff5fbfe918,0,0x1e4e34320ee7,0x1e4e34579bae,0x1e4e345b609d,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -code-creation,LoadIC,0x1e4e3458c400,138,"locked" -code-creation,LoadIC,0x1e4e3458c400,138,"locked" -code-creation,CallIC,0x1e4e3458c4a0,217,"reset" -code-creation,CallIC,0x1e4e34558880,492,"reset" -code-creation,StoreIC,0x1e4e34558a80,189,"lockBuffer" -code-creation,StoreIC,0x1e4e34558a80,189,"lockBuffer" -tick,0x10012ef20,0x7fff5fbfe5f0,0,0x7fff5fbfe680,3,0x1e4e345651bb,0x1e4e343a947e,0x1e4e34571fff,0x1e4e345b61ff,0x1e4e3458c6f4,0x1e4e343af856,0x1e4e345587aa,0x1e4e34563626,0x1e4e3458c187,0x1e4e345527f5,0x1e4e345b4c48,0x1e4e345527f5,0x1e4e343b6cfe,0x1e4e345921fe,0x1e4e343b5fe4,0x1e4e343e97d5,0x1e4e3459e4aa -tick,0x10010d214,0x7fff5fbfedf0,0,0x1019014b0,0,0x1e4e3456e144,0x1e4e34399744 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 -tick,0x7fff9199ed16,0x7fff5fbff808,0,0x0,4 diff --git a/node_modules/restify/node_modules/verror/Makefile b/node_modules/restify/node_modules/verror/Makefile index 00faa97..03504fa 100644 --- a/node_modules/restify/node_modules/verror/Makefile +++ b/node_modules/restify/node_modules/verror/Makefile @@ -30,6 +30,7 @@ test: node tests/tst.inherit.js node tests/tst.verror.js node tests/tst.werror.js + node tests/tst.serror.js @echo all tests passed include ./Makefile.targ diff --git a/node_modules/restify/node_modules/verror/README.md b/node_modules/restify/node_modules/verror/README.md index e9b5497..2b0de8b 100644 --- a/node_modules/restify/node_modules/verror/README.md +++ b/node_modules/restify/node_modules/verror/README.md @@ -1,24 +1,39 @@ # verror: richer JavaScript errors -This module provides two classes: VError, for accretive errors, and WError, for -wrapping errors. Both support printf-style error messages using extsprintf. +This module provides two classes: -## Printf-style errors +* VError, for combining errors while preserving each one's error message, and +* WError, for wrapping errors. + +Both support printf-style error messages using +[extsprintf](https://github.com/davepacheco/node-extsprintf). + +## printf-style Error constructor At the most basic level, VError is just like JavaScript's Error class, but with printf-style arguments: - var verror = require('verror'); +```javascript +var VError = require('verror'); + +var filename = '/etc/passwd'; +var err = new VError('missing file: "%s"', filename); +console.log(err.message); +``` + +This prints: + + missing file: "/etc/passwd" + +`err.stack` works the same as for built-in errors: - var opname = 'read'; - var err = new verror.VError('"%s" operation failed', opname); - console.log(err.message); - console.log(err.stack); +```javascript +console.log(err.stack); +``` This prints: - "read" operation failed - "read" operation failed + missing file: "/etc/passwd" at Object. (/Users/dap/node-verror/examples/varargs.js:4:11) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) @@ -28,66 +43,63 @@ This prints: at process.startup.processNextTick.process._tickCallback (node.js:244:9) -## VError for accretive error messages +## Causes -More interestingly, you can use VError to build up an error describing what -happened at various levels in the stack. For example, suppose you have a -request handler that stats a file and fails if it doesn't exist: +You can also pass a `cause` argument, which is another Error. For example: - var fs = require('fs'); - var verror = require('verror'); +```javascript +var fs = require('fs'); +var VError = require('verror'); - function checkFile(filename, callback) { - fs.stat(filename, function (err) { - if (err) - /* Annotate the "stat" error with what we were doing. */ - return (callback(new verror.VError(err, - 'failed to check "%s"', filename))); +var filename = '/nonexistent'; +fs.stat(filename, function (err1) { + var err2 = new VError(err1, 'stat "%s" failed', filename); + console.error(err2.message); +}); +``` - /* ... */ - }); - } +This prints out: - function handleRequest(filename, callback) { - checkFile('/nonexistent', function (err) { - if (err) { - /* Annotate the "checkFile" error with what we were doing. */ - return (callback(new verror.VError(err, 'request failed'))); - } + stat "/nonexistent" failed: ENOENT, stat '/nonexistent' - /* ... */ - }); - } +which resembles how Unix programs typically report errors: - handleRequest('/nonexistent', function (err) { - if (err) - console.log(err.message); - /* ... */ - }); + $ sort /nonexistent + sort: open failed: /nonexistent: No such file or directory -Since the file "/nonexistent" doesn't exist, this prints out: +To match the Unixy feel, just prepend the program's name to the VError's +`message`. - request failed: failed to check "/nonexistent": ENOENT, stat '/nonexistent' +You can also get the next-level Error using `err.cause()`: -The idea here is that the lowest level (Node's "fs.stat" function) generates an -arbitrary error, and each higher level (request handler and stat callback) -creates a new VError that annotates the previous error with what it was doing, -so that the result is a clear message explaining what failed at each level. +```javascript +console.error(err2.cause().message); +``` + +prints: + + ENOENT, stat '/nonexistent' + +Of course, you can nest these as many times as you want: + +```javascript +var VError = require('verror'); +var err1 = new Error('No such file or directory'); +var err2 = new VError(err1, 'failed to stat "%s"', '/junk'); +var err3 = new VError(err2, 'request failed'); +console.error(err3.message); +``` + +This prints: -This plays nicely with extsprintf's "%r" specifier, which prints out a -Java-style stacktrace with the whole chain of exceptions: + request failed: failed to stat "/junk": No such file or directory - EXCEPTION: VError: request failed: failed to check "/nonexistent": ENOENT, stat '/nonexistent' - at /Users/dap/work/node-verror/examples/levels.js:21:21 - at /Users/dap/work/node-verror/examples/levels.js:9:12 - at Object.oncomplete (fs.js:297:15) - Caused by: EXCEPTION: VError: failed to check "/nonexistent": ENOENT, stat '/nonexistent' - at /Users/dap/work/node-verror/examples/levels.js:9:21 - at Object.oncomplete (fs.js:297:15) - Caused by: EXCEPTION: Error: Error: ENOENT, stat '/nonexistent' +The idea is that each layer in the stack annotates the error with a description +of what it was doing (with a printf-like format string) and the result is a +message that explains what happened at every level. -## WError for wrapped errors +## WError: wrap layered errors Sometimes you don't want an Error's "message" field to include the details of all of the low-level errors, but you still want to be able to get at them @@ -98,15 +110,15 @@ WError, which is created exactly like VError (and also supports both printf-style arguments and an optional cause), but the resulting "message" only contains the top-level error. It's also more verbose, including the class associated with each error in the cause chain. Using the same example above, -but replacing the VError in handleRequest with WError, we get this output: +but replacing `err3`'s VError with WError, we get this output: request failed That's what we wanted -- just a high-level summary for the client. But we can get the object's toString() for the full details: - WError: request failed; caused by WError: failed to check "/nonexistent"; - caused by Error: ENOENT, stat '/nonexistent' + WError: request failed; caused by WError: failed to stat "/nonexistent"; + caused by Error: No such file or directory # Contributing diff --git a/node_modules/restify/node_modules/verror/examples/levels-verror.js b/node_modules/restify/node_modules/verror/examples/levels-verror.js index 53a7022..b6bc14c 100644 --- a/node_modules/restify/node_modules/verror/examples/levels-verror.js +++ b/node_modules/restify/node_modules/verror/examples/levels-verror.js @@ -1,12 +1,12 @@ var extsprintf = require('extsprintf'); var fs = require('fs'); -var verror = require('../lib/verror'); +var VError = require('../lib/verror'); function checkFile(filename, callback) { fs.stat(filename, function (err) { if (err) /* Annotate the "stat" error with what we were doing. */ - return (callback(new verror.VError(err, + return (callback(new VError(err, 'failed to check "%s"', filename))); /* ... */ @@ -18,7 +18,7 @@ function handleRequest(filename, callback) { checkFile('/nonexistent', function (err) { if (err) /* Annotate the "checkFile" error. */ - return (callback(new verror.VError( + return (callback(new VError( err, 'request failed'))); /* ... */ diff --git a/node_modules/restify/node_modules/verror/examples/levels-werror.js b/node_modules/restify/node_modules/verror/examples/levels-werror.js index 7e57075..1893dfb 100644 --- a/node_modules/restify/node_modules/verror/examples/levels-werror.js +++ b/node_modules/restify/node_modules/verror/examples/levels-werror.js @@ -1,12 +1,12 @@ var extsprintf = require('extsprintf'); var fs = require('fs'); -var verror = require('../lib/verror'); +var VError = require('../lib/verror'); function checkFile(filename, callback) { fs.stat(filename, function (err) { if (err) /* Annotate the "stat" error with what we were doing. */ - return (callback(new verror.VError(err, + return (callback(new VError(err, 'failed to check "%s"', filename))); /* ... */ @@ -18,7 +18,7 @@ function handleRequest(filename, callback) { checkFile('/nonexistent', function (err) { if (err) /* Wrap the "checkFile" error. */ - return (callback(new verror.WError( + return (callback(new VError.WError( err, 'request failed'))); /* ... */ diff --git a/node_modules/restify/node_modules/verror/examples/varargs.js b/node_modules/restify/node_modules/verror/examples/varargs.js index 2e14ee4..b9e91b4 100644 --- a/node_modules/restify/node_modules/verror/examples/varargs.js +++ b/node_modules/restify/node_modules/verror/examples/varargs.js @@ -1,6 +1,6 @@ -var verror = require('../lib/verror'); +var VError = require('../lib/verror'); var opname = 'read'; -var err = new verror.VError('"%s" operation failed', opname); +var err = new VError('"%s" operation failed', opname); console.log(err.message); console.log(err.stack); diff --git a/node_modules/restify/node_modules/verror/examples/verror.js b/node_modules/restify/node_modules/verror/examples/verror.js index 887b181..d2409fa 100644 --- a/node_modules/restify/node_modules/verror/examples/verror.js +++ b/node_modules/restify/node_modules/verror/examples/verror.js @@ -1,13 +1,9 @@ -var mod_fs = require('fs'); -var mod_verror = require('../lib/verror'); +var fs = require('fs'); +var VError = require('../lib/verror'); var filename = '/nonexistent'; - -mod_fs.stat(filename, function (err1) { - var err2 = new mod_verror.VError(err1, 'failed to stat "%s"', filename); - - /* The following would normally be higher up the stack. */ - var err3 = new mod_verror.VError(err2, 'failed to handle request'); - console.log(err3.message); - console.log(err3.stack); +fs.stat(filename, function (err1) { + var err2 = new VError(err1, 'stat "%s" failed', filename); + console.error(err2.message); + console.error(err2.cause().message); }); diff --git a/node_modules/restify/node_modules/verror/jsl.node.conf b/node_modules/restify/node_modules/verror/jsl.node.conf index bd724a2..802d679 100644 --- a/node_modules/restify/node_modules/verror/jsl.node.conf +++ b/node_modules/restify/node_modules/verror/jsl.node.conf @@ -115,6 +115,7 @@ +define console +define exports +define global ++define module +define process +define require +define setInterval diff --git a/node_modules/restify/node_modules/verror/lib/verror.js b/node_modules/restify/node_modules/verror/lib/verror.js index 9ca087b..26e84b9 100644 --- a/node_modules/restify/node_modules/verror/lib/verror.js +++ b/node_modules/restify/node_modules/verror/lib/verror.js @@ -10,17 +10,45 @@ var mod_extsprintf = require('extsprintf'); /* * Public interface */ -exports.VError = VError; -exports.WError = WError; -exports.MultiError = MultiError; + +/* So you can 'var VError = require('verror')' */ +module.exports = VError; +/* For compatibility */ +VError.VError = VError; +/* Other exported classes */ +VError.SError = SError; +VError.WError = WError; +VError.MultiError = MultiError; /* - * Like JavaScript's built-in Error class, but supports a "cause" argument and a - * printf-style message. The cause argument can be null. + * VError([cause], fmt[, arg...]): Like JavaScript's built-in Error class, but + * supports a "cause" argument (another error) and a printf-style message. The + * cause argument can be null or omitted entirely. + * + * Examples: + * + * CODE MESSAGE + * new VError('something bad happened') "something bad happened" + * new VError('missing file: "%s"', file) "missing file: "/etc/passwd" + * with file = '/etc/passwd' + * new VError(err, 'open failed') "open failed: file not found" + * with err.message = 'file not found' */ function VError(options) { - var args, causedBy, ctor, tailmsg; + var args, obj, causedBy, ctor, tailmsg; + + /* + * This is a regrettable pattern, but JavaScript's built-in Error class + * is defined to work this way, so we allow the constructor to be called + * without "new". + */ + if (!(this instanceof VError)) { + args = Array.prototype.slice.call(arguments, 0); + obj = Object.create(VError.prototype); + VError.apply(obj, arguments); + return (obj); + } if (options instanceof Error || typeof (options) === 'object') { args = Array.prototype.slice.call(arguments, 1); @@ -29,6 +57,37 @@ function VError(options) options = undefined; } + /* + * extsprintf (which we invoke here with our caller's arguments in order + * to construct this Error's message) is strict in its interpretation of + * values to be processed by the "%s" specifier. The value passed to + * extsprintf must actually be a string or something convertible to a + * String using .toString(). Passing other values (notably "null" and + * "undefined") is considered a programmer error. The assumption is + * that if you actually want to print the string "null" or "undefined", + * then that's easy to do that when you're calling extsprintf; on the + * other hand, if you did NOT want that (i.e., there's actually a bug + * where the program assumes some variable is non-null and tries to + * print it, which might happen when constructing a packet or file in + * some specific format), then it's better to stop immediately than + * produce bogus output. + * + * However, sometimes the bug is only in the code calling VError, and a + * programmer might prefer to have the error message contain "null" or + * "undefined" rather than have the bug in the error path crash the + * program (making the first bug harder to identify). For that reason, + * by default VError converts "null" or "undefined" arguments to their + * string representations and passes those to extsprintf. Programmers + * desiring the strict behavior can use the SError class or pass the + * "strict" option to the VError constructor. + */ + if (!options || !options.strict) { + args = args.map(function (a) { + return (a === null ? 'null' : + a === undefined ? 'undefined' : a); + }); + } + tailmsg = args.length > 0 ? mod_extsprintf.sprintf.apply(null, args) : ''; this.jse_shortmsg = tailmsg; @@ -54,6 +113,8 @@ function VError(options) ctor = ctor || arguments.callee; Error.captureStackTrace(this, ctor); } + + return (this); } mod_util.inherits(VError, Error); @@ -75,6 +136,38 @@ VError.prototype.cause = function ve_cause() }; +/* + * SError is like VError, but stricter about types. You cannot pass "null" or + * "undefined" as string arguments to the formatter. Since SError is only a + * different function, not really a different class, we don't set + * SError.prototype.name. + */ +function SError() +{ + var fmtargs, opts, key, args; + + opts = {}; + opts.constructorOpt = SError; + + if (arguments[0] instanceof Error) { + opts.cause = arguments[0]; + fmtargs = Array.prototype.slice.call(arguments, 1); + } else if (typeof (arguments[0]) == 'object') { + for (key in arguments[0]) + opts[key] = arguments[0][key]; + fmtargs = Array.prototype.slice.call(arguments, 1); + } else { + fmtargs = Array.prototype.slice.call(arguments, 0); + } + + opts.strict = true; + args = [ opts ].concat(fmtargs); + VError.apply(this, args); +} + +mod_util.inherits(SError, VError); + + /* * Represents a collection of errors for the purpose of consumers that generally * only deal with one error. Callers can extract the individual errors @@ -93,7 +186,6 @@ function MultiError(errors) mod_util.inherits(MultiError, VError); - /* * Like JavaScript's built-in Error class, but supports a "cause" argument which * is wrapped, not "folded in" as with VError. Accepts a printf-style message. diff --git a/node_modules/restify/node_modules/verror/node_modules/extsprintf/examples/simple.js b/node_modules/restify/node_modules/verror/node_modules/extsprintf/examples/simple.js deleted file mode 100644 index 9f342f5..0000000 --- a/node_modules/restify/node_modules/verror/node_modules/extsprintf/examples/simple.js +++ /dev/null @@ -1,2 +0,0 @@ -var mod_extsprintf = require('extsprintf'); -console.log(mod_extsprintf.sprintf('hello %25s', 'world')); diff --git a/node_modules/restify/node_modules/verror/node_modules/extsprintf/lib/extsprintf.js b/node_modules/restify/node_modules/verror/node_modules/extsprintf/lib/extsprintf.js index 61ff891..b9ab2eb 100644 --- a/node_modules/restify/node_modules/verror/node_modules/extsprintf/lib/extsprintf.js +++ b/node_modules/restify/node_modules/verror/node_modules/extsprintf/lib/extsprintf.js @@ -9,6 +9,7 @@ var mod_util = require('util'); * Public interface */ exports.sprintf = jsSprintf; +exports.printf = jsPrintf; /* * Stripped down version of s[n]printf(3c). We make a best effort to throw an @@ -107,6 +108,10 @@ function jsSprintf(fmt) arg.toString()); break; + case 'x': + ret += doPad(pad, width, left, arg.toString(16)); + break; + case 'j': /* non-standard */ if (width === 0) width = 10; @@ -127,6 +132,10 @@ function jsSprintf(fmt) return (ret); } +function jsPrintf() { + process.stdout.write(jsSprintf.apply(this, arguments)); +} + function doPad(chr, width, left, str) { var ret = str; diff --git a/node_modules/restify/node_modules/verror/node_modules/extsprintf/package.json b/node_modules/restify/node_modules/verror/node_modules/extsprintf/package.json index 53dc979..b1f37f9 100644 --- a/node_modules/restify/node_modules/verror/node_modules/extsprintf/package.json +++ b/node_modules/restify/node_modules/verror/node_modules/extsprintf/package.json @@ -1,6 +1,6 @@ { "name": "extsprintf", - "version": "1.0.2", + "version": "1.2.0", "description": "extended POSIX-style sprintf", "main": "./lib/extsprintf.js", "repository": { @@ -10,11 +10,16 @@ "engines": [ "node >=0.6.0" ], + "license": "MIT", "readme": "# extsprintf: extended POSIX-style sprintf\n\nStripped down version of s[n]printf(3c). We make a best effort to throw an\nexception when given a format string we don't understand, rather than ignoring\nit, so that we won't break existing programs if/when we go implement the rest\nof this.\n\nThis implementation currently supports specifying\n\n* field alignment ('-' flag),\n* zero-pad ('0' flag)\n* always show numeric sign ('+' flag),\n* field width\n* conversions for strings, decimal integers, and floats (numbers).\n* argument size specifiers. These are all accepted but ignored, since\n Javascript has no notion of the physical size of an argument.\n\nEverything else is currently unsupported, most notably: precision, unsigned\nnumbers, non-decimal numbers, and characters.\n\nBesides the usual POSIX conversions, this implementation supports:\n\n* `%j`: pretty-print a JSON object (using node's \"inspect\")\n* `%r`: pretty-print an Error object\n\n# Example\n\nFirst, install it:\n\n # npm install extsprintf\n\nNow, use it:\n\n var mod_extsprintf = require('extsprintf');\n console.log(mod_extsprintf.sprintf('hello %25s', 'world'));\n\noutputs:\n\n hello world\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/davepacheco/node-extsprintf/issues" }, - "_id": "extsprintf@1.0.2", - "_from": "extsprintf@1.0.2" + "_id": "extsprintf@1.2.0", + "dist": { + "shasum": "39cd1a598acf26b42bf03302a7986cfde7abf1fb" + }, + "_from": "extsprintf@1.2.0", + "_resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.2.0.tgz" } diff --git a/node_modules/restify/node_modules/verror/package.json b/node_modules/restify/node_modules/verror/package.json index c2d3d0d..f4fddbb 100644 --- a/node_modules/restify/node_modules/verror/package.json +++ b/node_modules/restify/node_modules/verror/package.json @@ -1,6 +1,6 @@ { "name": "verror", - "version": "1.3.6", + "version": "1.6.0", "description": "richer JavaScript errors", "main": "./lib/verror.js", "repository": { @@ -8,7 +8,7 @@ "url": "git://github.com/davepacheco/node-verror.git" }, "dependencies": { - "extsprintf": "1.0.2" + "extsprintf": "1.2.0" }, "engines": [ "node >=0.6.0" @@ -16,11 +16,16 @@ "scripts": { "test": "make test" }, - "readme": "# verror: richer JavaScript errors\n\nThis module provides two classes: VError, for accretive errors, and WError, for\nwrapping errors. Both support printf-style error messages using extsprintf.\n\n## Printf-style errors\n\nAt the most basic level, VError is just like JavaScript's Error class, but with\nprintf-style arguments:\n\n var verror = require('verror');\n\n var opname = 'read';\n var err = new verror.VError('\"%s\" operation failed', opname);\n console.log(err.message);\n console.log(err.stack);\n\nThis prints:\n\n \"read\" operation failed\n \"read\" operation failed\n at Object. (/Users/dap/node-verror/examples/varargs.js:4:11)\n at Module._compile (module.js:449:26)\n at Object.Module._extensions..js (module.js:467:10)\n at Module.load (module.js:356:32)\n at Function.Module._load (module.js:312:12)\n at Module.runMain (module.js:492:10)\n at process.startup.processNextTick.process._tickCallback (node.js:244:9)\n\n\n## VError for accretive error messages\n\nMore interestingly, you can use VError to build up an error describing what\nhappened at various levels in the stack. For example, suppose you have a\nrequest handler that stats a file and fails if it doesn't exist:\n\n var fs = require('fs');\n var verror = require('verror');\n\n function checkFile(filename, callback) {\n fs.stat(filename, function (err) {\n if (err)\n\t\t/* Annotate the \"stat\" error with what we were doing. */\n\t \treturn (callback(new verror.VError(err,\n\t\t 'failed to check \"%s\"', filename)));\n\n\t /* ... */\n });\n }\n\n function handleRequest(filename, callback) {\n \tcheckFile('/nonexistent', function (err) {\n \t if (err) {\n \t \t/* Annotate the \"checkFile\" error with what we were doing. */\n \t \treturn (callback(new verror.VError(err, 'request failed')));\n \t }\n\n \t /* ... */\n \t});\n }\n\n handleRequest('/nonexistent', function (err) {\n\tif (err)\n\t\tconsole.log(err.message);\n\t/* ... */\n });\n\nSince the file \"/nonexistent\" doesn't exist, this prints out:\n\n request failed: failed to check \"/nonexistent\": ENOENT, stat '/nonexistent'\n\nThe idea here is that the lowest level (Node's \"fs.stat\" function) generates an\narbitrary error, and each higher level (request handler and stat callback)\ncreates a new VError that annotates the previous error with what it was doing,\nso that the result is a clear message explaining what failed at each level.\n\nThis plays nicely with extsprintf's \"%r\" specifier, which prints out a\nJava-style stacktrace with the whole chain of exceptions:\n\n EXCEPTION: VError: request failed: failed to check \"/nonexistent\": ENOENT, stat '/nonexistent'\n at /Users/dap/work/node-verror/examples/levels.js:21:21\n at /Users/dap/work/node-verror/examples/levels.js:9:12\n at Object.oncomplete (fs.js:297:15)\n Caused by: EXCEPTION: VError: failed to check \"/nonexistent\": ENOENT, stat '/nonexistent'\n at /Users/dap/work/node-verror/examples/levels.js:9:21\n at Object.oncomplete (fs.js:297:15)\n Caused by: EXCEPTION: Error: Error: ENOENT, stat '/nonexistent'\n\n\n## WError for wrapped errors\n\nSometimes you don't want an Error's \"message\" field to include the details of\nall of the low-level errors, but you still want to be able to get at them\nprogrammatically. For example, in an HTTP server, you probably don't want to\nspew all of the low-level errors back to the client, but you do want to include\nthem in the audit log entry for the request. In that case, you can use a\nWError, which is created exactly like VError (and also supports both\nprintf-style arguments and an optional cause), but the resulting \"message\" only\ncontains the top-level error. It's also more verbose, including the class\nassociated with each error in the cause chain. Using the same example above,\nbut replacing the VError in handleRequest with WError, we get this output:\n\n request failed\n\nThat's what we wanted -- just a high-level summary for the client. But we can\nget the object's toString() for the full details:\n\n WError: request failed; caused by WError: failed to check \"/nonexistent\";\n caused by Error: ENOENT, stat '/nonexistent'\n\n# Contributing\n\nContributions welcome. Code should be \"make check\" clean. To run \"make check\",\nyou'll need these tools:\n\n* https://github.com/davepacheco/jsstyle\n* https://github.com/davepacheco/javascriptlint\n\nIf you're changing something non-trivial or user-facing, you may want to submit\nan issue first.\n", + "license": "MIT", + "readme": "# verror: richer JavaScript errors\n\nThis module provides two classes:\n\n* VError, for combining errors while preserving each one's error message, and\n* WError, for wrapping errors.\n\nBoth support printf-style error messages using\n[extsprintf](https://github.com/davepacheco/node-extsprintf).\n\n## printf-style Error constructor\n\nAt the most basic level, VError is just like JavaScript's Error class, but with\nprintf-style arguments:\n\n```javascript\nvar VError = require('verror');\n\nvar filename = '/etc/passwd';\nvar err = new VError('missing file: \"%s\"', filename);\nconsole.log(err.message);\n```\n\nThis prints:\n\n missing file: \"/etc/passwd\"\n\n`err.stack` works the same as for built-in errors:\n\n```javascript\nconsole.log(err.stack);\n```\n\nThis prints:\n\n missing file: \"/etc/passwd\"\n at Object. (/Users/dap/node-verror/examples/varargs.js:4:11)\n at Module._compile (module.js:449:26)\n at Object.Module._extensions..js (module.js:467:10)\n at Module.load (module.js:356:32)\n at Function.Module._load (module.js:312:12)\n at Module.runMain (module.js:492:10)\n at process.startup.processNextTick.process._tickCallback (node.js:244:9)\n\n\n## Causes\n\nYou can also pass a `cause` argument, which is another Error. For example:\n\n```javascript\nvar fs = require('fs');\nvar VError = require('verror');\n\nvar filename = '/nonexistent';\nfs.stat(filename, function (err1) {\n\tvar err2 = new VError(err1, 'stat \"%s\" failed', filename);\n\tconsole.error(err2.message);\n});\n```\n\nThis prints out:\n\n stat \"/nonexistent\" failed: ENOENT, stat '/nonexistent'\n\nwhich resembles how Unix programs typically report errors:\n\n $ sort /nonexistent\n sort: open failed: /nonexistent: No such file or directory\n\nTo match the Unixy feel, just prepend the program's name to the VError's\n`message`.\n\nYou can also get the next-level Error using `err.cause()`:\n\n```javascript\nconsole.error(err2.cause().message);\n```\n\nprints:\n\n ENOENT, stat '/nonexistent'\n\nOf course, you can nest these as many times as you want:\n\n```javascript\nvar VError = require('verror');\nvar err1 = new Error('No such file or directory');\nvar err2 = new VError(err1, 'failed to stat \"%s\"', '/junk');\nvar err3 = new VError(err2, 'request failed');\nconsole.error(err3.message);\n```\n\nThis prints:\n\n request failed: failed to stat \"/junk\": No such file or directory\n\nThe idea is that each layer in the stack annotates the error with a description\nof what it was doing (with a printf-like format string) and the result is a\nmessage that explains what happened at every level.\n\n\n## WError: wrap layered errors\n\nSometimes you don't want an Error's \"message\" field to include the details of\nall of the low-level errors, but you still want to be able to get at them\nprogrammatically. For example, in an HTTP server, you probably don't want to\nspew all of the low-level errors back to the client, but you do want to include\nthem in the audit log entry for the request. In that case, you can use a\nWError, which is created exactly like VError (and also supports both\nprintf-style arguments and an optional cause), but the resulting \"message\" only\ncontains the top-level error. It's also more verbose, including the class\nassociated with each error in the cause chain. Using the same example above,\nbut replacing `err3`'s VError with WError, we get this output:\n\n request failed\n\nThat's what we wanted -- just a high-level summary for the client. But we can\nget the object's toString() for the full details:\n\n WError: request failed; caused by WError: failed to stat \"/nonexistent\";\n caused by Error: No such file or directory\n\n# Contributing\n\nContributions welcome. Code should be \"make check\" clean. To run \"make check\",\nyou'll need these tools:\n\n* https://github.com/davepacheco/jsstyle\n* https://github.com/davepacheco/javascriptlint\n\nIf you're changing something non-trivial or user-facing, you may want to submit\nan issue first.\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/davepacheco/node-verror/issues" }, - "_id": "verror@1.3.6", - "_from": "verror@1.3.6" + "_id": "verror@1.6.0", + "dist": { + "shasum": "eb20359c81307ce3ace9c1229bf5ea6600504343" + }, + "_from": "verror@^1.4.0", + "_resolved": "https://registry.npmjs.org/verror/-/verror-1.6.0.tgz" } diff --git a/node_modules/restify/node_modules/verror/tests/tst.inherit.js b/node_modules/restify/node_modules/verror/tests/tst.inherit.js index 0f0d70b..b0e49be 100644 --- a/node_modules/restify/node_modules/verror/tests/tst.inherit.js +++ b/node_modules/restify/node_modules/verror/tests/tst.inherit.js @@ -5,10 +5,8 @@ var mod_assert = require('assert'); var mod_util = require('util'); -var mod_verror = require('../lib/verror'); - -var VError = mod_verror.VError; -var WError = mod_verror.WError; +var VError = require('../lib/verror'); +var WError = VError.WError; var err, suberr; function VErrorChild() diff --git a/node_modules/restify/node_modules/verror/tests/tst.verror.js b/node_modules/restify/node_modules/verror/tests/tst.verror.js index ee937cd..2eb4c80 100644 --- a/node_modules/restify/node_modules/verror/tests/tst.verror.js +++ b/node_modules/restify/node_modules/verror/tests/tst.verror.js @@ -154,3 +154,16 @@ mod_assert.equal(stack, [ 'VError: test error', ' at Object. (tst.verror.js)' ].join('\n') + '\n' + nodestack); + +/* "null" or "undefined" as string for extsprintf */ +err = new VError('my %s string', null); +mod_assert.equal('my null string', err.message); +err = new VError('my %s string', undefined); +mod_assert.equal('my undefined string', err.message); + +/* invoked without "new" */ +err = VError('my %s string', 'testing!'); +mod_assert.equal(err.name, 'VError'); +mod_assert.ok(err instanceof VError); +mod_assert.ok(err instanceof Error); +mod_assert.equal(err.message, 'my testing! string'); diff --git a/node_modules/restify/package.json b/node_modules/restify/package.json index 8cab475..3d8bb68 100644 --- a/node_modules/restify/package.json +++ b/node_modules/restify/package.json @@ -13,6 +13,9 @@ { "name": "Dominic Barnes" }, + { + "name": "Josh Clulow" + }, { "name": "Jonathan Dahan" }, @@ -40,12 +43,18 @@ { "name": "Erik Kristensen" }, + { + "name": "Domikik Lessel" + }, { "name": "Steve Mason" }, { "name": "Trent Mick" }, + { + "name": "Gergely Nemeth" + }, { "name": "Colin O'Brien" }, @@ -75,12 +84,18 @@ }, { "name": "Mike Williams" + }, + { + "name": "Brian Pin" + }, + { + "name": "Ben Doerr" } ], "name": "restify", "homepage": "http://mcavage.github.com/node-restify", "description": "REST framework", - "version": "2.5.1", + "version": "2.8.3", "repository": { "type": "git", "url": "git://github.com/mcavage/node-restify.git" @@ -93,44 +108,51 @@ "report-latency": "./bin/report-latency" }, "engines": { - "node": ">=0.8" + "node": ">=0.10" }, "dependencies": { - "assert-plus": "0.1.2", - "backoff": "2.2.0", - "bunyan": "0.21.1", - "deep-equal": "0.0.0", - "escape-regexp-component": "1.0.2", - "formidable": "1.0.14", - "http-signature": "0.10.0", - "keep-alive-agent": "0.0.1", - "lru-cache": "2.3.0", - "mime": "1.2.9", - "negotiator": "0.2.5", - "node-uuid": "1.4.0", - "once": "1.1.1", - "qs": "0.6.4", - "semver": "1.1.4", - "spdy": "1.8.2", - "verror": "1.3.6", - "dtrace-provider": "0.2.8" + "assert-plus": "^0.1.5", + "backoff": "^2.3.0", + "bunyan": "^0.23.1", + "csv": "^0.4.0", + "deep-equal": "^0.2.1", + "escape-regexp-component": "^1.0.2", + "formidable": "^1.0.14", + "http-signature": "^0.10.0", + "keep-alive-agent": "^0.0.1", + "lru-cache": "^2.5.0", + "mime": "^1.2.11", + "negotiator": "^0.4.5", + "node-uuid": "^1.4.1", + "once": "^1.3.0", + "qs": "^1.0.0", + "semver": "^2.3.0", + "spdy": "^1.26.5", + "tunnel-agent": "^0.4.0", + "verror": "^1.4.0", + "dtrace-provider": "^0.2.8" }, "optionalDependencies": { - "dtrace-provider": "0.2.8" + "dtrace-provider": "^0.2.8" }, "devDependencies": { - "cover": "0.2.8", - "filed": "0.0.7", - "nodeunit": "0.8.0" + "cover": "^0.2.9", + "filed": "^0.1.0", + "nodeunit": "^0.9.0", + "watershed": "^0.3.0" }, "scripts": { "test": "nodeunit ./test" }, - "readme": "# restify\n\n[![Build Status](https://travis-ci.org/mcavage/node-restify.png)](https://travis-ci.org/mcavage/node-restify)\n\n[restify](http://mcavage.github.com/node-restify) is a smallish framework,\nsimilar to [express](http://expressjs.com) for building REST APIs. For full\ndetails, see http://mcavage.github.com/node-restify.\n\n# Usage\n\n## Server\n\n var restify = require('restify');\n\n var server = restify.createServer({\n name: 'myapp',\n version: '1.0.0'\n });\n server.use(restify.acceptParser(server.acceptable));\n server.use(restify.queryParser());\n server.use(restify.bodyParser());\n\n server.get('/echo/:name', function (req, res, next) {\n res.send(req.params);\n return next();\n });\n\n server.listen(8080, function () {\n console.log('%s listening at %s', server.name, server.url);\n });\n\n## Client\n\n var assert = require('assert');\n var restify = require('restify');\n\n var client = restify.createJsonClient({\n url: 'http://localhost:8080',\n version: '~1.0'\n });\n\n client.get('/echo/mark', function (err, req, res, obj) {\n assert.ifError(err);\n console.log('Server returned: %j', obj);\n });\n\n# Installation\n\n $ npm install restify\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee .\n\n## Mailing list\n\nSee the\n[Google group](https://groups.google.com/forum/?hl=en&fromgroups#!forum/restify)\n.\n", + "readme": "# restify\n\n[![Build Status](https://travis-ci.org/mcavage/node-restify.png)](https://travis-ci.org/mcavage/node-restify)\n[![Gitter chat](https://badges.gitter.im/mcavage/node-restify.png)](https://gitter.im/mcavage/node-restify)\n[![Dependency Status](https://david-dm.org/mcavage/node-restify.png)](https://david-dm.org/mcavage/node-restify)\n[![devDependency Status](https://david-dm.org/mcavage/node-restify/dev-status.png)](https://david-dm.org/mcavage/node-restify#info=devDependencies)\n\n\n[restify](http://mcavage.github.com/node-restify) is a smallish framework,\nsimilar to [express](http://expressjs.com) for building REST APIs. For full\ndetails, see http://mcavage.github.com/node-restify.\n\n# Usage\n\n## Server\n```javascript\nvar restify = require('restify');\n\nvar server = restify.createServer({\n name: 'myapp',\n version: '1.0.0'\n});\nserver.use(restify.acceptParser(server.acceptable));\nserver.use(restify.queryParser());\nserver.use(restify.bodyParser());\n\nserver.get('/echo/:name', function (req, res, next) {\n res.send(req.params);\n return next();\n});\n\nserver.listen(8080, function () {\n console.log('%s listening at %s', server.name, server.url);\n});\n```\n\n## Client\n```javascript\nvar assert = require('assert');\nvar restify = require('restify');\n\nvar client = restify.createJsonClient({\n url: 'http://localhost:8080',\n version: '~1.0'\n});\n\nclient.get('/echo/mark', function (err, req, res, obj) {\n assert.ifError(err);\n console.log('Server returned: %j', obj);\n});\n```\n\n# Installation\n\n $ npm install restify\n\n## License\n\nThe MIT License (MIT)\nCopyright (c) 2012 Mark Cavage\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## Bugs\n\nSee .\n\n## Mailing list\n\nSee the\n[Google group](https://groups.google.com/forum/?hl=en&fromgroups#!forum/restify)\n.\n", "readmeFilename": "README.md", "bugs": { "url": "https://github.com/mcavage/node-restify/issues" }, - "_id": "restify@2.5.1", - "_from": "restify@2.x" + "_id": "restify@2.8.3", + "_from": "restify@2.8.3", + "dist": { + "shasum": "de61cf1777104883f1908aaecd4f898beaac57ae" + }, + "_resolved": "https://registry.npmjs.org/restify/-/restify-2.8.3.tgz" } diff --git a/node_modules/underscore/.npmignore b/node_modules/underscore/.npmignore deleted file mode 100644 index 4e5886d..0000000 --- a/node_modules/underscore/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -test/ -Rakefile -docs/ -raw/ diff --git a/node_modules/underscore/.travis.yml b/node_modules/underscore/.travis.yml deleted file mode 100644 index 99dc771..0000000 --- a/node_modules/underscore/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.8 -notifications: - email: false diff --git a/node_modules/underscore/CNAME b/node_modules/underscore/CNAME deleted file mode 100644 index a007e65..0000000 --- a/node_modules/underscore/CNAME +++ /dev/null @@ -1 +0,0 @@ -underscorejs.org diff --git a/node_modules/underscore/CONTRIBUTING.md b/node_modules/underscore/CONTRIBUTING.md deleted file mode 100644 index de5d562..0000000 --- a/node_modules/underscore/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -## How to contribute to Underscore.js - -* Before you open a ticket or send a pull request, [search](https://github.com/documentcloud/underscore/issues) for previous discussions about the same feature or issue. Add to the earlier ticket if you find one. - -* Before sending a pull request for a feature, be sure to have [tests](http://underscorejs.org/test/). - -* Use the same coding style as the rest of the [codebase](https://github.com/documentcloud/underscore/blob/master/underscore.js). - -* In your pull request, do not add documentation or re-build the minified `underscore-min.js` file. We'll do those things before cutting a new release. diff --git a/node_modules/underscore/LICENSE b/node_modules/underscore/LICENSE index 0d8dbe4..0d6b873 100644 --- a/node_modules/underscore/LICENSE +++ b/node_modules/underscore/LICENSE @@ -1,4 +1,5 @@ -Copyright (c) 2009-2013 Jeremy Ashkenas, DocumentCloud +Copyright (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative +Reporters & Editors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/node_modules/underscore/README.md b/node_modules/underscore/README.md index b1f3e50..c2ba259 100644 --- a/node_modules/underscore/README.md +++ b/node_modules/underscore/README.md @@ -15,5 +15,8 @@ without extending any core JavaScript objects. For Docs, License, Tests, and pre-packed downloads, see: http://underscorejs.org +Underscore is an open-sourced component of DocumentCloud: +https://github.com/documentcloud + Many thanks to our contributors: -https://github.com/documentcloud/underscore/contributors +https://github.com/jashkenas/underscore/contributors diff --git a/node_modules/underscore/favicon.ico b/node_modules/underscore/favicon.ico deleted file mode 100644 index 0304968..0000000 Binary files a/node_modules/underscore/favicon.ico and /dev/null differ diff --git a/node_modules/underscore/index.html b/node_modules/underscore/index.html deleted file mode 100644 index 8c5793a..0000000 --- a/node_modules/underscore/index.html +++ /dev/null @@ -1,2467 +0,0 @@ - - - - - - - - - Underscore.js - - - - - - -
    - -

    - -

    - -

    - Underscore is a - utility-belt library for JavaScript that provides a lot of the - functional programming support that you would expect in - Prototype.js - (or Ruby), - but without extending any of the built-in JavaScript objects. It's the - tie to go along with jQuery's tux, - and Backbone.js's suspenders. -

    - -

    - Underscore provides 80-odd functions that support both the usual - functional suspects: map, select, invoke — - as well as more specialized helpers: function binding, javascript - templating, deep equality testing, and so on. It delegates to built-in - functions, if present, so modern browsers will use the - native implementations of forEach, map, reduce, - filter, every, some and indexOf. -

    - -

    - A complete Test & Benchmark Suite - is included for your perusal. -

    - -

    - You may also read through the annotated source code. -

    - -

    - The project is - hosted on GitHub. - You can report bugs and discuss features on the - issues page, - on Freenode in the #documentcloud channel, - or send tweets to @documentcloud. -

    - -

    - Underscore is an open-source component of DocumentCloud. -

    - -

    Downloads (Right-click, and use "Save As")

    - - - - - - - - - - - - - - - - - -
    Development Version (1.4.4)40kb, Uncompressed with Plentiful Comments
    Production Version (1.4.4)4kb, Minified and Gzipped
    Edge VersionUnreleased, current master, use at your own risk
    - -
    - -

    Collection Functions (Arrays or Objects)

    - -

    - each_.each(list, iterator, [context]) - Alias: forEach -
    - Iterates over a list of elements, yielding each in turn to an iterator - function. The iterator is bound to the context object, if one is - passed. Each invocation of iterator is called with three arguments: - (element, index, list). If list is a JavaScript object, iterator's - arguments will be (value, key, list). Delegates to the native - forEach function if it exists. -

    -
    -_.each([1, 2, 3], alert);
    -=> alerts each number in turn...
    -_.each({one : 1, two : 2, three : 3}, alert);
    -=> alerts each number value in turn...
    - -

    - map_.map(list, iterator, [context]) - Alias: collect -
    - Produces a new array of values by mapping each value in list - through a transformation function (iterator). If the native map method - exists, it will be used instead. If list is a JavaScript object, - iterator's arguments will be (value, key, list). -

    -
    -_.map([1, 2, 3], function(num){ return num * 3; });
    -=> [3, 6, 9]
    -_.map({one : 1, two : 2, three : 3}, function(num, key){ return num * 3; });
    -=> [3, 6, 9]
    - -

    - reduce_.reduce(list, iterator, memo, [context]) - Aliases: inject, foldl -
    - Also known as inject and foldl, reduce boils down a - list of values into a single value. Memo is the initial state - of the reduction, and each successive step of it should be returned by - iterator. The iterator is passed four arguments: the memo, - then the value and index (or key) of the iteration, - and finally a reference to the entire list. -

    -
    -var sum = _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);
    -=> 6
    -
    - -

    - reduceRight_.reduceRight(list, iterator, memo, [context]) - Alias: foldr -
    - The right-associative version of reduce. Delegates to the - JavaScript 1.8 version of reduceRight, if it exists. Foldr - is not as useful in JavaScript as it would be in a language with lazy - evaluation. -

    -
    -var list = [[0, 1], [2, 3], [4, 5]];
    -var flat = _.reduceRight(list, function(a, b) { return a.concat(b); }, []);
    -=> [4, 5, 2, 3, 0, 1]
    -
    - -

    - find_.find(list, iterator, [context]) - Alias: detect -
    - Looks through each value in the list, returning the first one that - passes a truth test (iterator). The function returns as - soon as it finds an acceptable element, and doesn't traverse the - entire list. -

    -
    -var even = _.find([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
    -=> 2
    -
    - -

    - filter_.filter(list, iterator, [context]) - Alias: select -
    - Looks through each value in the list, returning an array of all - the values that pass a truth test (iterator). Delegates to the - native filter method, if it exists. -

    -
    -var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
    -=> [2, 4, 6]
    -
    - -

    - where_.where(list, properties) -
    - Looks through each value in the list, returning an array of all - the values that contain all of the key-value pairs listed in properties. -

    -
    -_.where(listOfPlays, {author: "Shakespeare", year: 1611});
    -=> [{title: "Cymbeline", author: "Shakespeare", year: 1611},
    -    {title: "The Tempest", author: "Shakespeare", year: 1611}]
    -
    - -

    - findWhere_.findWhere(list, properties) -
    - Looks through the list and returns the first value that matches - all of the key-value pairs listed in properties. -

    -
    -_.findWhere(publicServicePulitzers, {newsroom: "The New York Times"});
    -=> {year: 1918, newsroom: "The New York Times",
    -  reason: "For its public service in publishing in full so many official reports,
    -  documents and speeches by European statesmen relating to the progress and
    -  conduct of the war."}
    -
    - -

    - reject_.reject(list, iterator, [context]) -
    - Returns the values in list without the elements that the truth - test (iterator) passes. The opposite of filter. -

    -
    -var odds = _.reject([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; });
    -=> [1, 3, 5]
    -
    - -

    - every_.every(list, iterator, [context]) - Alias: all -
    - Returns true if all of the values in the list pass the iterator - truth test. Delegates to the native method every, if present. -

    -
    -_.every([true, 1, null, 'yes'], _.identity);
    -=> false
    -
    - -

    - some_.some(list, [iterator], [context]) - Alias: any -
    - Returns true if any of the values in the list pass the - iterator truth test. Short-circuits and stops traversing the list - if a true element is found. Delegates to the native method some, - if present. -

    -
    -_.some([null, 0, 'yes', false]);
    -=> true
    -
    - -

    - contains_.contains(list, value) - Alias: include -
    - Returns true if the value is present in the list. - Uses indexOf internally, if list is an Array. -

    -
    -_.contains([1, 2, 3], 3);
    -=> true
    -
    - -

    - invoke_.invoke(list, methodName, [*arguments]) -
    - Calls the method named by methodName on each value in the list. - Any extra arguments passed to invoke will be forwarded on to the - method invocation. -

    -
    -_.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
    -=> [[1, 5, 7], [1, 2, 3]]
    -
    - -

    - pluck_.pluck(list, propertyName) -
    - A convenient version of what is perhaps the most common use-case for - map: extracting a list of property values. -

    -
    -var stooges = [{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}];
    -_.pluck(stooges, 'name');
    -=> ["moe", "larry", "curly"]
    -
    - -

    - max_.max(list, [iterator], [context]) -
    - Returns the maximum value in list. If iterator is passed, - it will be used on each value to generate the criterion by which the - value is ranked. -

    -
    -var stooges = [{name : 'moe', age : 40}, {name : 'larry', age : 50}, {name : 'curly', age : 60}];
    -_.max(stooges, function(stooge){ return stooge.age; });
    -=> {name : 'curly', age : 60};
    -
    - -

    - min_.min(list, [iterator], [context]) -
    - Returns the minimum value in list. If iterator is passed, - it will be used on each value to generate the criterion by which the - value is ranked. -

    -
    -var numbers = [10, 5, 100, 2, 1000];
    -_.min(numbers);
    -=> 2
    -
    - -

    - sortBy_.sortBy(list, iterator, [context]) -
    - Returns a sorted copy of list, ranked in ascending order by the - results of running each value through iterator. Iterator may - also be the string name of the property to sort by (eg. length). -

    -
    -_.sortBy([1, 2, 3, 4, 5, 6], function(num){ return Math.sin(num); });
    -=> [5, 4, 6, 3, 1, 2]
    -
    - -

    - groupBy_.groupBy(list, iterator, [context]) -
    - Splits a collection into sets, grouped by the result of running each - value through iterator. If iterator is a string instead of - a function, groups by the property named by iterator on each of - the values. -

    -
    -_.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); });
    -=> {1: [1.3], 2: [2.1, 2.4]}
    -
    -_.groupBy(['one', 'two', 'three'], 'length');
    -=> {3: ["one", "two"], 5: ["three"]}
    -
    - -

    - countBy_.countBy(list, iterator, [context]) -
    - Sorts a list into groups and returns a count for the number of objects - in each group. - Similar to groupBy, but instead of returning a list of values, - returns a count for the number of values in that group. -

    -
    -_.countBy([1, 2, 3, 4, 5], function(num) {
    -  return num % 2 == 0 ? 'even' : 'odd';
    -});
    -=> {odd: 3, even: 2}
    -
    - -

    - shuffle_.shuffle(list) -
    - Returns a shuffled copy of the list, using a version of the - Fisher-Yates shuffle. -

    -
    -_.shuffle([1, 2, 3, 4, 5, 6]);
    -=> [4, 1, 6, 3, 5, 2]
    -
    - -

    - toArray_.toArray(list) -
    - Converts the list (anything that can be iterated over), into a - real Array. Useful for transmuting the arguments object. -

    -
    -(function(){ return _.toArray(arguments).slice(1); })(1, 2, 3, 4);
    -=> [2, 3, 4]
    -
    - -

    - size_.size(list) -
    - Return the number of values in the list. -

    -
    -_.size({one : 1, two : 2, three : 3});
    -=> 3
    -
    - -

    Array Functions

    - -

    - - Note: All array functions will also work on the arguments object. - However, Underscore functions are not designed to work on "sparse" arrays. - -

    - -

    - first_.first(array, [n]) - Alias: head, take -
    - Returns the first element of an array. Passing n will - return the first n elements of the array. -

    -
    -_.first([5, 4, 3, 2, 1]);
    -=> 5
    -
    - -

    - initial_.initial(array, [n]) -
    - Returns everything but the last entry of the array. Especially useful on - the arguments object. Pass n to exclude the last n elements - from the result. -

    -
    -_.initial([5, 4, 3, 2, 1]);
    -=> [5, 4, 3, 2]
    -
    - -

    - last_.last(array, [n]) -
    - Returns the last element of an array. Passing n will return - the last n elements of the array. -

    -
    -_.last([5, 4, 3, 2, 1]);
    -=> 1
    -
    - -

    - rest_.rest(array, [index]) - Alias: tail, drop -
    - Returns the rest of the elements in an array. Pass an index - to return the values of the array from that index onward. -

    -
    -_.rest([5, 4, 3, 2, 1]);
    -=> [4, 3, 2, 1]
    -
    - -

    - compact_.compact(array) -
    - Returns a copy of the array with all falsy values removed. - In JavaScript, false, null, 0, "", - undefined and NaN are all falsy. -

    -
    -_.compact([0, 1, false, 2, '', 3]);
    -=> [1, 2, 3]
    -
    - -

    - flatten_.flatten(array, [shallow]) -
    - Flattens a nested array (the nesting can be to any depth). If you - pass shallow, the array will only be flattened a single level. -

    -
    -_.flatten([1, [2], [3, [[4]]]]);
    -=> [1, 2, 3, 4];
    -
    -_.flatten([1, [2], [3, [[4]]]], true);
    -=> [1, 2, 3, [[4]]];
    -
    - -

    - without_.without(array, [*values]) -
    - Returns a copy of the array with all instances of the values - removed. -

    -
    -_.without([1, 2, 1, 0, 3, 1, 4], 0, 1);
    -=> [2, 3, 4]
    -
    - -

    - union_.union(*arrays) -
    - Computes the union of the passed-in arrays: the list of unique items, - in order, that are present in one or more of the arrays. -

    -
    -_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
    -=> [1, 2, 3, 101, 10]
    -
    - -

    - intersection_.intersection(*arrays) -
    - Computes the list of values that are the intersection of all the arrays. - Each value in the result is present in each of the arrays. -

    -
    -_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
    -=> [1, 2]
    -
    - -

    - difference_.difference(array, *others) -
    - Similar to without, but returns the values from array that - are not present in the other arrays. -

    -
    -_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
    -=> [1, 3, 4]
    -
    - -

    - uniq_.uniq(array, [isSorted], [iterator]) - Alias: unique -
    - Produces a duplicate-free version of the array, using === to test - object equality. If you know in advance that the array is sorted, - passing true for isSorted will run a much faster algorithm. - If you want to compute unique items based on a transformation, pass an - iterator function. -

    -
    -_.uniq([1, 2, 1, 3, 1, 4]);
    -=> [1, 2, 3, 4]
    -
    - -

    - zip_.zip(*arrays) -
    - Merges together the values of each of the arrays with the - values at the corresponding position. Useful when you have separate - data sources that are coordinated through matching array indexes. - If you're working with a matrix of nested arrays, zip.apply - can transpose the matrix in a similar fashion. -

    -
    -_.zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]);
    -=> [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]
    -
    - -

    - object_.object(list, [values]) -
    - Converts arrays into objects. Pass either a single list of - [key, value] pairs, or a list of keys, and a list of values. -

    -
    -_.object(['moe', 'larry', 'curly'], [30, 40, 50]);
    -=> {moe: 30, larry: 40, curly: 50}
    -
    -_.object([['moe', 30], ['larry', 40], ['curly', 50]]);
    -=> {moe: 30, larry: 40, curly: 50}
    -
    - -

    - indexOf_.indexOf(array, value, [isSorted]) -
    - Returns the index at which value can be found in the array, - or -1 if value is not present in the array. Uses the native - indexOf function unless it's missing. If you're working with a - large array, and you know that the array is already sorted, pass true - for isSorted to use a faster binary search ... or, pass a number as - the third argument in order to look for the first matching value in the - array after the given index. -

    -
    -_.indexOf([1, 2, 3], 2);
    -=> 1
    -
    - -

    - lastIndexOf_.lastIndexOf(array, value, [fromIndex]) -
    - Returns the index of the last occurrence of value in the array, - or -1 if value is not present. Uses the native lastIndexOf - function if possible. Pass fromIndex to start your search at a - given index. -

    -
    -_.lastIndexOf([1, 2, 3, 1, 2, 3], 2);
    -=> 4
    -
    - -

    - sortedIndex_.sortedIndex(list, value, [iterator], [context]) -
    - Uses a binary search to determine the index at which the value - should be inserted into the list in order to maintain the list's - sorted order. If an iterator is passed, it will be used to compute - the sort ranking of each value, including the value you pass. -

    -
    -_.sortedIndex([10, 20, 30, 40, 50], 35);
    -=> 3
    -
    - -

    - range_.range([start], stop, [step]) -
    - A function to create flexibly-numbered lists of integers, handy for - each and map loops. start, if omitted, defaults - to 0; step defaults to 1. Returns a list of integers - from start to stop, incremented (or decremented) by step, - exclusive. -

    -
    -_.range(10);
    -=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    -_.range(1, 11);
    -=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    -_.range(0, 30, 5);
    -=> [0, 5, 10, 15, 20, 25]
    -_.range(0, -10, -1);
    -=> [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
    -_.range(0);
    -=> []
    -
    - -

    Function (uh, ahem) Functions

    - -

    - bind_.bind(function, object, [*arguments]) -
    - Bind a function to an object, meaning that whenever - the function is called, the value of this will be the object. - Optionally, pass arguments to the function to pre-fill them, - also known as partial application. -

    -
    -var func = function(greeting){ return greeting + ': ' + this.name };
    -func = _.bind(func, {name : 'moe'}, 'hi');
    -func();
    -=> 'hi: moe'
    -
    - -

    - bindAll_.bindAll(object, [*methodNames]) -
    - Binds a number of methods on the object, specified by - methodNames, to be run in the context of that object whenever they - are invoked. Very handy for binding functions that are going to be used - as event handlers, which would otherwise be invoked with a fairly useless - this. If no methodNames are provided, all of the object's - function properties will be bound to it. -

    -
    -var buttonView = {
    -  label   : 'underscore',
    -  onClick : function(){ alert('clicked: ' + this.label); },
    -  onHover : function(){ console.log('hovering: ' + this.label); }
    -};
    -_.bindAll(buttonView);
    -jQuery('#underscore_button').bind('click', buttonView.onClick);
    -=> When the button is clicked, this.label will have the correct value...
    -
    - -

    - partial_.partial(function, [*arguments]) -
    - Partially apply a function by filling in any number of its arguments, - without changing its dynamic this value. A close cousin - of bind. -

    -
    -var add = function(a, b) { return a + b; };
    -add5 = _.partial(add, 5);
    -add5(10);
    -=> 15
    -
    - -

    - memoize_.memoize(function, [hashFunction]) -
    - Memoizes a given function by caching the computed result. Useful - for speeding up slow-running computations. If passed an optional - hashFunction, it will be used to compute the hash key for storing - the result, based on the arguments to the original function. The default - hashFunction just uses the first argument to the memoized function - as the key. -

    -
    -var fibonacci = _.memoize(function(n) {
    -  return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
    -});
    -
    - -

    - delay_.delay(function, wait, [*arguments]) -
    - Much like setTimeout, invokes function after wait - milliseconds. If you pass the optional arguments, they will be - forwarded on to the function when it is invoked. -

    -
    -var log = _.bind(console.log, console);
    -_.delay(log, 1000, 'logged later');
    -=> 'logged later' // Appears after one second.
    -
    - -

    - defer_.defer(function, [*arguments]) -
    - Defers invoking the function until the current call stack has cleared, - similar to using setTimeout with a delay of 0. Useful for performing - expensive computations or HTML rendering in chunks without blocking the UI thread - from updating. If you pass the optional arguments, they will be - forwarded on to the function when it is invoked. -

    -
    -_.defer(function(){ alert('deferred'); });
    -// Returns from the function before the alert runs.
    -
    - -

    - throttle_.throttle(function, wait) -
    - Creates and returns a new, throttled version of the passed function, - that, when invoked repeatedly, will only actually call the original function - at most once per every wait - milliseconds. Useful for rate-limiting events that occur faster than you - can keep up with. -

    -
    -var throttled = _.throttle(updatePosition, 100);
    -$(window).scroll(throttled);
    -
    - -

    - debounce_.debounce(function, wait, [immediate]) -
    - Creates and returns a new debounced version of the passed function that - will postpone its execution until after - wait milliseconds have elapsed since the last time it - was invoked. Useful for implementing behavior that should only happen - after the input has stopped arriving. For example: rendering a - preview of a Markdown comment, recalculating a layout after the window - has stopped being resized, and so on. -

    - -

    - Pass true for the immediate parameter to cause - debounce to trigger the function on the leading instead of the - trailing edge of the wait interval. Useful in circumstances like - preventing accidental double-clicks on a "submit" button from firing a - second time. -

    - -
    -var lazyLayout = _.debounce(calculateLayout, 300);
    -$(window).resize(lazyLayout);
    -
    - -

    - once_.once(function) -
    - Creates a version of the function that can only be called one time. - Repeated calls to the modified function will have no effect, returning - the value from the original call. Useful for initialization functions, - instead of having to set a boolean flag and then check it later. -

    -
    -var initialize = _.once(createApplication);
    -initialize();
    -initialize();
    -// Application is only created once.
    -
    - -

    - after_.after(count, function) -
    - Creates a version of the function that will only be run after first - being called count times. Useful for grouping asynchronous responses, - where you want to be sure that all the async calls have finished, before - proceeding. -

    -
    -var renderNotes = _.after(notes.length, render);
    -_.each(notes, function(note) {
    -  note.asyncSave({success: renderNotes});
    -});
    -// renderNotes is run once, after all notes have saved.
    -
    - -

    - wrap_.wrap(function, wrapper) -
    - Wraps the first function inside of the wrapper function, - passing it as the first argument. This allows the wrapper to - execute code before and after the function runs, adjust the arguments, - and execute it conditionally. -

    -
    -var hello = function(name) { return "hello: " + name; };
    -hello = _.wrap(hello, function(func) {
    -  return "before, " + func("moe") + ", after";
    -});
    -hello();
    -=> 'before, hello: moe, after'
    -
    - -

    - compose_.compose(*functions) -
    - Returns the composition of a list of functions, where each function - consumes the return value of the function that follows. In math terms, - composing the functions f(), g(), and h() produces - f(g(h())). -

    -
    -var greet    = function(name){ return "hi: " + name; };
    -var exclaim  = function(statement){ return statement + "!"; };
    -var welcome = _.compose(exclaim, greet);
    -welcome('moe');
    -=> 'hi: moe!'
    -
    - -

    Object Functions

    - -

    - keys_.keys(object) -
    - Retrieve all the names of the object's properties. -

    -
    -_.keys({one : 1, two : 2, three : 3});
    -=> ["one", "two", "three"]
    -
    - -

    - values_.values(object) -
    - Return all of the values of the object's properties. -

    -
    -_.values({one : 1, two : 2, three : 3});
    -=> [1, 2, 3]
    -
    - -

    - pairs_.pairs(object) -
    - Convert an object into a list of [key, value] pairs. -

    -
    -_.pairs({one: 1, two: 2, three: 3});
    -=> [["one", 1], ["two", 2], ["three", 3]]
    -
    - -

    - invert_.invert(object) -
    - Returns a copy of the object where the keys have become the values - and the values the keys. For this to work, all of your object's values - should be unique and string serializable. -

    -
    -_.invert({Moe: "Moses", Larry: "Louis", Curly: "Jerome"});
    -=> {Moses: "Moe", Louis: "Larry", Jerome: "Curly"};
    -
    - -

    - functions_.functions(object) - Alias: methods -
    - Returns a sorted list of the names of every method in an object — - that is to say, the name of every function property of the object. -

    -
    -_.functions(_);
    -=> ["all", "any", "bind", "bindAll", "clone", "compact", "compose" ...
    -
    - -

    - extend_.extend(destination, *sources) -
    - Copy all of the properties in the source objects over to the - destination object, and return the destination object. - It's in-order, so the last source will override properties of the same - name in previous arguments. -

    -
    -_.extend({name : 'moe'}, {age : 50});
    -=> {name : 'moe', age : 50}
    -
    - -

    - pick_.pick(object, *keys) -
    - Return a copy of the object, filtered to only have values for - the whitelisted keys (or array of valid keys). -

    -
    -_.pick({name : 'moe', age: 50, userid : 'moe1'}, 'name', 'age');
    -=> {name : 'moe', age : 50}
    -
    - -

    - omit_.omit(object, *keys) -
    - Return a copy of the object, filtered to omit the blacklisted - keys (or array of keys). -

    -
    -_.omit({name : 'moe', age : 50, userid : 'moe1'}, 'userid');
    -=> {name : 'moe', age : 50}
    -
    - -

    - defaults_.defaults(object, *defaults) -
    - Fill in null and undefined properties in object with values from the - defaults objects, and return the object. As soon as the - property is filled, further defaults will have no effect. -

    -
    -var iceCream = {flavor : "chocolate"};
    -_.defaults(iceCream, {flavor : "vanilla", sprinkles : "lots"});
    -=> {flavor : "chocolate", sprinkles : "lots"}
    -
    - -

    - clone_.clone(object) -
    - Create a shallow-copied clone of the object. Any nested objects - or arrays will be copied by reference, not duplicated. -

    -
    -_.clone({name : 'moe'});
    -=> {name : 'moe'};
    -
    - -

    - tap_.tap(object, interceptor) -
    - Invokes interceptor with the object, and then returns object. - The primary purpose of this method is to "tap into" a method chain, in order to perform operations on intermediate results within the chain. -

    -
    -_.chain([1,2,3,200])
    -  .filter(function(num) { return num % 2 == 0; })
    -  .tap(alert)
    -  .map(function(num) { return num * num })
    -  .value();
    -=> // [2, 200] (alerted)
    -=> [4, 40000]
    -
    - -

    - has_.has(object, key) -
    - Does the object contain the given key? Identical to - object.hasOwnProperty(key), but uses a safe reference to the - hasOwnProperty function, in case it's been - overridden accidentally. -

    -
    -_.has({a: 1, b: 2, c: 3}, "b");
    -=> true
    -
    - -

    - isEqual_.isEqual(object, other) -
    - Performs an optimized deep comparison between the two objects, to determine - if they should be considered equal. -

    -
    -var moe   = {name : 'moe', luckyNumbers : [13, 27, 34]};
    -var clone = {name : 'moe', luckyNumbers : [13, 27, 34]};
    -moe == clone;
    -=> false
    -_.isEqual(moe, clone);
    -=> true
    -
    - -

    - isEmpty_.isEmpty(object) -
    - Returns true if object contains no values. -

    -
    -_.isEmpty([1, 2, 3]);
    -=> false
    -_.isEmpty({});
    -=> true
    -
    - -

    - isElement_.isElement(object) -
    - Returns true if object is a DOM element. -

    -
    -_.isElement(jQuery('body')[0]);
    -=> true
    -
    - -

    - isArray_.isArray(object) -
    - Returns true if object is an Array. -

    -
    -(function(){ return _.isArray(arguments); })();
    -=> false
    -_.isArray([1,2,3]);
    -=> true
    -
    - -

    - isObject_.isObject(value) -
    - Returns true if value is an Object. Note that JavaScript - arrays and functions are objects, while (normal) strings and numbers are not. -

    -
    -_.isObject({});
    -=> true
    -_.isObject(1);
    -=> false
    -
    - -

    - isArguments_.isArguments(object) -
    - Returns true if object is an Arguments object. -

    -
    -(function(){ return _.isArguments(arguments); })(1, 2, 3);
    -=> true
    -_.isArguments([1,2,3]);
    -=> false
    -
    - -

    - isFunction_.isFunction(object) -
    - Returns true if object is a Function. -

    -
    -_.isFunction(alert);
    -=> true
    -
    - -

    - isString_.isString(object) -
    - Returns true if object is a String. -

    -
    -_.isString("moe");
    -=> true
    -
    - -

    - isNumber_.isNumber(object) -
    - Returns true if object is a Number (including NaN). -

    -
    -_.isNumber(8.4 * 5);
    -=> true
    -
    - -

    - isFinite_.isFinite(object) -
    - Returns true if object is a finite Number. -

    -
    -_.isFinite(-101);
    -=> true
    -
    -_.isFinite(-Infinity);
    -=> false
    -
    - -

    - isBoolean_.isBoolean(object) -
    - Returns true if object is either true or false. -

    -
    -_.isBoolean(null);
    -=> false
    -
    - -

    - isDate_.isDate(object) -
    - Returns true if object is a Date. -

    -
    -_.isDate(new Date());
    -=> true
    -
    - -

    - isRegExp_.isRegExp(object) -
    - Returns true if object is a RegExp. -

    -
    -_.isRegExp(/moe/);
    -=> true
    -
    - -

    - isNaN_.isNaN(object) -
    - Returns true if object is NaN.
    Note: this is not - the same as the native isNaN function, which will also return - true if the variable is undefined. -

    -
    -_.isNaN(NaN);
    -=> true
    -isNaN(undefined);
    -=> true
    -_.isNaN(undefined);
    -=> false
    -
    - -

    - isNull_.isNull(object) -
    - Returns true if the value of object is null. -

    -
    -_.isNull(null);
    -=> true
    -_.isNull(undefined);
    -=> false
    -
    - -

    - isUndefined_.isUndefined(value) -
    - Returns true if value is undefined. -

    -
    -_.isUndefined(window.missingVariable);
    -=> true
    -
    - -

    Utility Functions

    - -

    - noConflict_.noConflict() -
    - Give control of the "_" variable back to its previous owner. Returns - a reference to the Underscore object. -

    -
    -var underscore = _.noConflict();
    - -

    - identity_.identity(value) -
    - Returns the same value that is used as the argument. In math: - f(x) = x
    - This function looks useless, but is used throughout Underscore as - a default iterator. -

    -
    -var moe = {name : 'moe'};
    -moe === _.identity(moe);
    -=> true
    - -

    - times_.times(n, iterator, [context]) -
    - Invokes the given iterator function n times. Each invocation of - iterator is called with an index argument. -
    - Note: this example uses the chaining syntax. -

    -
    -_(3).times(function(n){ genie.grantWishNumber(n); });
    - -

    - random_.random(min, max) -
    - Returns a random integer between min and max, inclusive. - If you only pass one argument, it will return a number between 0 - and that number. -

    -
    -_.random(0, 100);
    -=> 42
    - -

    - mixin_.mixin(object) -
    - Allows you to extend Underscore with your own utility functions. Pass - a hash of {name: function} definitions to have your functions - added to the Underscore object, as well as the OOP wrapper. -

    -
    -_.mixin({
    -  capitalize : function(string) {
    -    return string.charAt(0).toUpperCase() + string.substring(1).toLowerCase();
    -  }
    -});
    -_("fabio").capitalize();
    -=> "Fabio"
    -
    - -

    - uniqueId_.uniqueId([prefix]) -
    - Generate a globally-unique id for client-side models or DOM elements - that need one. If prefix is passed, the id will be appended to it. -

    -
    -_.uniqueId('contact_');
    -=> 'contact_104'
    - -

    - escape_.escape(string) -
    - Escapes a string for insertion into HTML, replacing - &, <, >, ", ', and / characters. -

    -
    -_.escape('Curly, Larry & Moe');
    -=> "Curly, Larry &amp; Moe"
    - -

    - unescape_.unescape(string) -
    - The opposite of escape, replaces - &amp;, &lt;, &gt;, - &quot;, &#x27;, and &#x2F; - with their unescaped counterparts. -

    -
    -_.unescape('Curly, Larry &amp; Moe');
    -=> "Curly, Larry & Moe"
    - -

    - result_.result(object, property) -
    - If the value of the named property is a function then invoke it; otherwise, return it. -

    -
    -var object = {cheese: 'crumpets', stuff: function(){ return 'nonsense'; }};
    -_.result(object, 'cheese');
    -=> "crumpets"
    -_.result(object, 'stuff');
    -=> "nonsense"
    - -

    - template_.template(templateString, [data], [settings]) -
    - Compiles JavaScript templates into functions that can be evaluated - for rendering. Useful for rendering complicated bits of HTML from JSON - data sources. Template functions can both interpolate variables, using - <%= … %>, as well as execute arbitrary JavaScript code, with - <% … %>. If you wish to interpolate a value, and have - it be HTML-escaped, use <%- … %> When you evaluate a template function, pass in a - data object that has properties corresponding to the template's free - variables. If you're writing a one-off, you can pass the data - object as the second parameter to template in order to render - immediately instead of returning a template function. The settings argument - should be a hash containing any _.templateSettings that should be overridden. -

    - -
    -var compiled = _.template("hello: <%= name %>");
    -compiled({name : 'moe'});
    -=> "hello: moe"
    -
    -var list = "<% _.each(people, function(name) { %> <li><%= name %></li> <% }); %>";
    -_.template(list, {people : ['moe', 'curly', 'larry']});
    -=> "<li>moe</li><li>curly</li><li>larry</li>"
    -
    -var template = _.template("<b><%- value %></b>");
    -template({value : '<script>'});
    -=> "<b>&lt;script&gt;</b>"
    - -

    - You can also use print from within JavaScript code. This is - sometimes more convenient than using <%= ... %>. -

    - -
    -var compiled = _.template("<% print('Hello ' + epithet); %>");
    -compiled({epithet: "stooge"});
    -=> "Hello stooge."
    - -

    - If ERB-style delimiters aren't your cup of tea, you can change Underscore's - template settings to use different symbols to set off interpolated code. - Define an interpolate regex to match expressions that should be - interpolated verbatim, an escape regex to match expressions that should - be inserted after being HTML escaped, and an evaluate regex to match - expressions that should be evaluated without insertion into the resulting - string. You may define or omit any combination of the three. - For example, to perform - Mustache.js - style templating: -

    - -
    -_.templateSettings = {
    -  interpolate : /\{\{(.+?)\}\}/g
    -};
    -
    -var template = _.template("Hello {{ name }}!");
    -template({name : "Mustache"});
    -=> "Hello Mustache!"
    - -

    - By default, template places the values from your data in the local scope - via the with statement. However, you can specify a single variable name - with the variable setting. This can significantly improve the speed - at which a template is able to render. -

    - -
    -_.template("Using 'with': <%= data.answer %>", {answer: 'no'}, {variable: 'data'});
    -=> "Using 'with': no"
    - -

    - Precompiling your templates can be a big help when debugging errors you can't - reproduce. This is because precompiled templates can provide line numbers and - a stack trace, something that is not possible when compiling templates on the client. - The source property is available on the compiled template - function for easy precompilation. -

    - -
    <script>
    -  JST.project = <%= _.template(jstText).source %>;
    -</script>
    - - -

    Chaining

    - -

    - You can use Underscore in either an object-oriented or a functional style, - depending on your preference. The following two lines of code are - identical ways to double a list of numbers. -

    - -
    -_.map([1, 2, 3], function(n){ return n * 2; });
    -_([1, 2, 3]).map(function(n){ return n * 2; });
    - -

    - Calling chain will cause all future method calls to return - wrapped objects. When you've finished the computation, use - value to retrieve the final value. Here's an example of chaining - together a map/flatten/reduce, in order to get the word count of - every word in a song. -

    - -
    -var lyrics = [
    -  {line : 1, words : "I'm a lumberjack and I'm okay"},
    -  {line : 2, words : "I sleep all night and I work all day"},
    -  {line : 3, words : "He's a lumberjack and he's okay"},
    -  {line : 4, words : "He sleeps all night and he works all day"}
    -];
    -
    -_.chain(lyrics)
    -  .map(function(line) { return line.words.split(' '); })
    -  .flatten()
    -  .reduce(function(counts, word) {
    -    counts[word] = (counts[word] || 0) + 1;
    -    return counts;
    -  }, {})
    -  .value();
    -
    -=> {lumberjack : 2, all : 4, night : 2 ... }
    - -

    - In addition, the - Array prototype's methods - are proxied through the chained Underscore object, so you can slip a - reverse or a push into your chain, and continue to - modify the array. -

    - -

    - chain_.chain(obj) -
    - Returns a wrapped object. Calling methods on this object will continue - to return wrapped objects until value is used. -

    -
    -var stooges = [{name : 'curly', age : 25}, {name : 'moe', age : 21}, {name : 'larry', age : 23}];
    -var youngest = _.chain(stooges)
    -  .sortBy(function(stooge){ return stooge.age; })
    -  .map(function(stooge){ return stooge.name + ' is ' + stooge.age; })
    -  .first()
    -  .value();
    -=> "moe is 21"
    -
    - -

    - value_(obj).value() -
    - Extracts the value of a wrapped object. -

    -
    -_([1, 2, 3]).value();
    -=> [1, 2, 3]
    -
    - - - -

    - The Underscore documentation is also available in - Simplified Chinese. -

    - -

    - Underscore.lua, - a Lua port of the functions that are applicable in both languages. - Includes OOP-wrapping and chaining. - (source) -

    - -

    - Underscore.m, an Objective-C port - of many of the Underscore.js functions, using a syntax that encourages - chaining. - (source) -

    - -

    - _.m, an alternative - Objective-C port that tries to stick a little closer to the original - Underscore.js API. - (source) -

    - -

    - Underscore.php, - a PHP port of the functions that are applicable in both languages. - Includes OOP-wrapping and chaining. - (source) -

    - -

    - Underscore-perl, - a Perl port of many of the Underscore.js functions, - aimed at on Perl hashes and arrays. - (source) -

    - -

    - Underscore.cfc, - a Coldfusion port of many of the Underscore.js functions. - (source) -

    - -

    - Underscore.string, - an Underscore extension that adds functions for string-manipulation: - trim, startsWith, contains, capitalize, - reverse, sprintf, and more. -

    - -

    - Ruby's Enumerable module. -

    - -

    - Prototype.js, which provides - JavaScript with collection functions in the manner closest to Ruby's Enumerable. -

    - -

    - Oliver Steele's - Functional JavaScript, - which includes comprehensive higher-order function support as well as string lambdas. -

    - -

    - Michael Aufreiter's Data.js, - a data manipulation + persistence library for JavaScript. -

    - -

    - Python's itertools. -

    - -

    Change Log

    - -

    - 1.4.4Jan. 30, 2013Diff
    -

      -
    • - Added _.findWhere, for finding the first element in a list - that matches a particular set of keys and values. -
    • -
    • - Added _.partial, for partially applying a function without - changing its dynamic reference to this. -
    • -
    • - Simplified bind by removing some edge cases involving - constructor functions. In short: don't _.bind your - constructors. -
    • -
    • - A minor optimization to invoke. -
    • -
    • - Fix bug in the minified version due to the minifier incorrectly - optimizing-away isFunction. -
    • -
    -

    - -

    - 1.4.3Dec. 4, 2012Diff
    -

      -
    • - Improved Underscore compatibility with Adobe's JS engine that can be - used to script Illustrator, Photoshop, and friends. -
    • -
    • - Added a default _.identity iterator to countBy and - groupBy. -
    • -
    • - The uniq function can now take array, iterator, context - as the argument list. -
    • -
    • - The times function now returns the mapped array of iterator - results. -
    • -
    • - Simplified and fixed bugs in throttle. -
    • -
    -

    - -

    - 1.4.2Oct. 1, 2012Diff
    -

      -
    • - For backwards compatibility, returned to pre-1.4.0 behavior when - passing null to iteration functions. They now become no-ops - again. -
    • -
    -

    - -

    - 1.4.1Oct. 1, 2012Diff
    -

      -
    • - Fixed a 1.4.0 regression in the lastIndexOf function. -
    • -
    -

    - -

    - 1.4.0Sept. 27, 2012Diff
    -

      -
    • - Added a pairs function, for turning a JavaScript object - into [key, value] pairs ... as well as an object - function, for converting an array of [key, value] pairs - into an object. -
    • -
    • - Added a countBy function, for counting the number of objects - in a list that match a certain criteria. -
    • -
    • - Added an invert function, for performing a simple inversion - of the keys and values in an object. -
    • -
    • - Added a where function, for easy cases of filtering a list - for objects with specific values. -
    • -
    • - Added an omit function, for filtering an object to remove - certain keys. -
    • -
    • - Added a random function, to return a random number in a - given range. -
    • -
    • - _.debounce'd functions now return their last updated value, - just like _.throttle'd functions do. -
    • -
    • - The sortBy function now runs a stable sort algorithm. -
    • -
    • - Added the optional fromIndex option to indexOf and - lastIndexOf. -
    • -
    • - "Sparse" arrays are no longer supported in Underscore iteration - functions. Use a for loop instead (or better yet, an object). -
    • -
    • - The min and max functions may now be called on - very large arrays. -
    • -
    • - Interpolation in templates now represents null and - undefined as the empty string. -
    • -
    • - Underscore iteration functions no longer accept null values - as a no-op argument. You'll get an early error instead. -
    • -
    • - A number of edge-cases fixes and tweaks, which you can spot in the - diff. - Depending on how you're using Underscore, 1.4.0 may be more - backwards-incompatible than usual — please test when you upgrade. -
    • -
    -

    - -

    - 1.3.3April 10, 2012
    -

      -
    • - Many improvements to _.template, which now provides the - source of the template function as a property, for potentially - even more efficient pre-compilation on the server-side. You may now - also set the variable option when creating a template, - which will cause your passed-in data to be made available under the - variable you named, instead of using a with statement — - significantly improving the speed of rendering the template. -
    • -
    • - Added the pick function, which allows you to filter an - object literal with a whitelist of allowed property names. -
    • -
    • - Added the result function, for convenience when working - with APIs that allow either functions or raw properties. -
    • -
    • - Added the isFinite function, because sometimes knowing that - a value is a number just ain't quite enough. -
    • -
    • - The sortBy function may now also be passed the string name - of a property to use as the sort order on each object. -
    • -
    • - Fixed uniq to work with sparse arrays. -
    • -
    • - The difference function now performs a shallow flatten - instead of a deep one when computing array differences. -
    • -
    • - The debounce function now takes an immediate - parameter, which will cause the callback to fire on the leading - instead of the trailing edge. -
    • -
    -

    - -

    - 1.3.1Jan. 23, 2012
    -

      -
    • - Added an _.has function, as a safer way to use hasOwnProperty. -
    • -
    • - Added _.collect as an alias for _.map. Smalltalkers, rejoice. -
    • -
    • - Reverted an old change so that _.extend will correctly copy - over keys with undefined values again. -
    • -
    • - Bugfix to stop escaping slashes within interpolations in _.template. -
    • -
    -

    - -

    - 1.3.0Jan. 11, 2012
    -

      -
    • - Removed AMD (RequireJS) support from Underscore. If you'd like to use - Underscore with RequireJS, you can load it as a normal script, wrap - or patch your copy, or download a forked version. -
    • -
    -

    - -

    - 1.2.4Jan. 4, 2012
    -

      -
    • - You now can (and probably should, as it's simpler) - write _.chain(list) - instead of _(list).chain(). -
    • -
    • - Fix for escaped characters in Underscore templates, and for supporting - customizations of _.templateSettings that only define one or - two of the required regexes. -
    • -
    • - Fix for passing an array as the first argument to an _.wrap'd function. -
    • -
    • - Improved compatibility with ClojureScript, which adds a call - function to String.prototype. -
    • -
    -

    - -

    - 1.2.3Dec. 7, 2011
    -

      -
    • - Dynamic scope is now preserved for compiled _.template functions, - so you can use the value of this if you like. -
    • -
    • - Sparse array support of _.indexOf, _.lastIndexOf. -
    • -
    • - Both _.reduce and _.reduceRight can now be passed an - explicitly undefined value. (There's no reason why you'd - want to do this.) -
    • -
    -

    - -

    - 1.2.2Nov. 14, 2011
    -

      -
    • - Continued tweaks to _.isEqual semantics. Now JS primitives are - considered equivalent to their wrapped versions, and arrays are compared - by their numeric properties only (#351). -
    • -
    • - _.escape no longer tries to be smart about not double-escaping - already-escaped HTML entities. Now it just escapes regardless (#350). -
    • -
    • - In _.template, you may now leave semicolons out of evaluated - statements if you wish: <% }) %> (#369). -
    • -
    • - _.after(callback, 0) will now trigger the callback immediately, - making "after" easier to use with asynchronous APIs (#366). -
    • -
    -

    - -

    - 1.2.1Oct. 24, 2011
    -

      -
    • - Several important bug fixes for _.isEqual, which should now - do better on mutated Arrays, and on non-Array objects with - length properties. (#329) -
    • -
    • - jrburke contributed Underscore exporting for AMD module loaders, - and tonylukasavage for Appcelerator Titanium. - (#335, #338) -
    • -
    • - You can now _.groupBy(list, 'property') as a shortcut for - grouping values by a particular common property. -
    • -
    • - _.throttle'd functions now fire immediately upon invocation, - and are rate-limited thereafter (#170, #266). -
    • -
    • - Most of the _.is[Type] checks no longer ducktype. -
    • -
    • - The _.bind function now also works on constructors, a-la - ES5 ... but you would never want to use _.bind on a - constructor function. -
    • -
    • - _.clone no longer wraps non-object types in Objects. -
    • -
    • - _.find and _.filter are now the preferred names for - _.detect and _.select. -
    • -
    -

    - -

    - 1.2.0Oct. 5, 2011
    -

      -
    • - The _.isEqual function now - supports true deep equality comparisons, with checks for cyclic structures, - thanks to Kit Cambridge. -
    • -
    • - Underscore templates now support HTML escaping interpolations, using - <%- ... %> syntax. -
    • -
    • - Ryan Tenney contributed _.shuffle, which uses a modified - Fisher-Yates to give you a shuffled copy of an array. -
    • -
    • - _.uniq can now be passed an optional iterator, to determine by - what criteria an object should be considered unique. -
    • -
    • - _.last now takes an optional argument which will return the last - N elements of the list. -
    • -
    • - A new _.initial function was added, as a mirror of _.rest, - which returns all the initial values of a list (except the last N). -
    • -
    -

    - -

    - 1.1.7July 13, 2011
    - Added _.groupBy, which aggregates a collection into groups of like items. - Added _.union and _.difference, to complement the - (re-named) _.intersection. - Various improvements for support of sparse arrays. - _.toArray now returns a clone, if directly passed an array. - _.functions now also returns the names of functions that are present - in the prototype chain. -

    - -

    - 1.1.6April 18, 2011
    - Added _.after, which will return a function that only runs after - first being called a specified number of times. - _.invoke can now take a direct function reference. - _.every now requires an iterator function to be passed, which - mirrors the ECMA5 API. - _.extend no longer copies keys when the value is undefined. - _.bind now errors when trying to bind an undefined value. -

    - -

    - 1.1.5Mar 20, 2011
    - Added an _.defaults function, for use merging together JS objects - representing default options. - Added an _.once function, for manufacturing functions that should - only ever execute a single time. - _.bind now delegates to the native ECMAScript 5 version, - where available. - _.keys now throws an error when used on non-Object values, as in - ECMAScript 5. - Fixed a bug with _.keys when used over sparse arrays. -

    - -

    - 1.1.4Jan 9, 2011
    - Improved compliance with ES5's Array methods when passing null - as a value. _.wrap now correctly sets this for the - wrapped function. _.indexOf now takes an optional flag for - finding the insertion index in an array that is guaranteed to already - be sorted. Avoiding the use of .callee, to allow _.isArray - to work properly in ES5's strict mode. -

    - -

    - 1.1.3Dec 1, 2010
    - In CommonJS, Underscore may now be required with just:
    - var _ = require("underscore"). - Added _.throttle and _.debounce functions. - Removed _.breakLoop, in favor of an ECMA5-style un-break-able - each implementation — this removes the try/catch, and you'll now have - better stack traces for exceptions that are thrown within an Underscore iterator. - Improved the isType family of functions for better interoperability - with Internet Explorer host objects. - _.template now correctly escapes backslashes in templates. - Improved _.reduce compatibility with the ECMA5 version: - if you don't pass an initial value, the first item in the collection is used. - _.each no longer returns the iterated collection, for improved - consistency with ES5's forEach. -

    - -

    - 1.1.2
    - Fixed _.contains, which was mistakenly pointing at - _.intersect instead of _.include, like it should - have been. Added _.unique as an alias for _.uniq. -

    - -

    - 1.1.1
    - Improved the speed of _.template, and its handling of multiline - interpolations. Ryan Tenney contributed optimizations to many Underscore - functions. An annotated version of the source code is now available. -

    - -

    - 1.1.0
    - The method signature of _.reduce has been changed to match - the ECMAScript 5 signature, instead of the Ruby/Prototype.js version. - This is a backwards-incompatible change. _.template may now be - called with no arguments, and preserves whitespace. _.contains - is a new alias for _.include. -

    - -

    - 1.0.4
    - Andri Möll contributed the _.memoize - function, which can be used to speed up expensive repeated computations - by caching the results. -

    - -

    - 1.0.3
    - Patch that makes _.isEqual return false if any property - of the compared object has a NaN value. Technically the correct - thing to do, but of questionable semantics. Watch out for NaN comparisons. -

    - -

    - 1.0.2
    - Fixes _.isArguments in recent versions of Opera, which have - arguments objects as real Arrays. -

    - -

    - 1.0.1
    - Bugfix for _.isEqual, when comparing two objects with the same - number of undefined keys, but with different names. -

    - -

    - 1.0.0
    - Things have been stable for many months now, so Underscore is now - considered to be out of beta, at 1.0. Improvements since 0.6 - include _.isBoolean, and the ability to have _.extend - take multiple source objects. -

    - -

    - 0.6.0
    - Major release. Incorporates a number of - Mile Frawley's refactors for - safer duck-typing on collection functions, and cleaner internals. A new - _.mixin method that allows you to extend Underscore with utility - functions of your own. Added _.times, which works the same as in - Ruby or Prototype.js. Native support for ECMAScript 5's Array.isArray, - and Object.keys. -

    - -

    - 0.5.8
    - Fixed Underscore's collection functions to work on - NodeLists and - HTMLCollections - once more, thanks to - Justin Tulloss. -

    - -

    - 0.5.7
    - A safer implementation of _.isArguments, and a - faster _.isNumber,
    thanks to - Jed Schmidt. -

    - -

    - 0.5.6
    - Customizable delimiters for _.template, contributed by - Noah Sloan. -

    - -

    - 0.5.5
    - Fix for a bug in MobileSafari's OOP-wrapper, with the arguments object. -

    - -

    - 0.5.4
    - Fix for multiple single quotes within a template string for - _.template. See: - Rick Strahl's blog post. -

    - -

    - 0.5.2
    - New implementations of isArray, isDate, isFunction, - isNumber, isRegExp, and isString, thanks to - a suggestion from - Robert Kieffer. - Instead of doing Object#toString - comparisons, they now check for expected properties, which is less safe, - but more than an order of magnitude faster. Most other Underscore - functions saw minor speed improvements as a result. - Evgeniy Dolzhenko - contributed _.tap, - similar to Ruby 1.9's, - which is handy for injecting side effects (like logging) into chained calls. -

    - -

    - 0.5.1
    - Added an _.isArguments function. Lots of little safety checks - and optimizations contributed by - Noah Sloan and - Andri Möll. -

    - -

    - 0.5.0
    - [API Changes] _.bindAll now takes the context object as - its first parameter. If no method names are passed, all of the context - object's methods are bound to it, enabling chaining and easier binding. - _.functions now takes a single argument and returns the names - of its Function properties. Calling _.functions(_) will get you - the previous behavior. - Added _.isRegExp so that isEqual can now test for RegExp equality. - All of the "is" functions have been shrunk down into a single definition. - Karl Guertin contributed patches. -

    - -

    - 0.4.7
    - Added isDate, isNaN, and isNull, for completeness. - Optimizations for isEqual when checking equality between Arrays - or Dates. _.keys is now 25%–2X faster (depending on your - browser) which speeds up the functions that rely on it, such as _.each. -

    - -

    - 0.4.6
    - Added the range function, a port of the - Python - function of the same name, for generating flexibly-numbered lists - of integers. Original patch contributed by - Kirill Ishanov. -

    - -

    - 0.4.5
    - Added rest for Arrays and arguments objects, and aliased - first as head, and rest as tail, - thanks to Luke Sutton's patches. - Added tests ensuring that all Underscore Array functions also work on - arguments objects. -

    - -

    - 0.4.4
    - Added isString, and isNumber, for consistency. Fixed - _.isEqual(NaN, NaN) to return true (which is debatable). -

    - -

    - 0.4.3
    - Started using the native StopIteration object in browsers that support it. - Fixed Underscore setup for CommonJS environments. -

    - -

    - 0.4.2
    - Renamed the unwrapping function to value, for clarity. -

    - -

    - 0.4.1
    - Chained Underscore objects now support the Array prototype methods, so - that you can perform the full range of operations on a wrapped array - without having to break your chain. Added a breakLoop method - to break in the middle of any Underscore iteration. Added an - isEmpty function that works on arrays and objects. -

    - -

    - 0.4.0
    - All Underscore functions can now be called in an object-oriented style, - like so: _([1, 2, 3]).map(...);. Original patch provided by - Marc-André Cournoyer. - Wrapped objects can be chained through multiple - method invocations. A functions method - was added, providing a sorted list of all the functions in Underscore. -

    - -

    - 0.3.3
    - Added the JavaScript 1.8 function reduceRight. Aliased it - as foldr, and aliased reduce as foldl. -

    - -

    - 0.3.2
    - Now runs on stock Rhino - interpreters with: load("underscore.js"). - Added identity as a utility function. -

    - -

    - 0.3.1
    - All iterators are now passed in the original collection as their third - argument, the same as JavaScript 1.6's forEach. Iterating over - objects is now called with (value, key, collection), for details - see _.each. -

    - -

    - 0.3.0
    - Added Dmitry Baranovskiy's - comprehensive optimizations, merged in - Kris Kowal's patches to make Underscore - CommonJS and - Narwhal compliant. -

    - -

    - 0.2.0
    - Added compose and lastIndexOf, renamed inject to - reduce, added aliases for inject, filter, - every, some, and forEach. -

    - -

    - 0.1.1
    - Added noConflict, so that the "Underscore" object can be assigned to - other variables. -

    - -

    - 0.1.0
    - Initial release of Underscore.js. -

    - -

    - - A DocumentCloud Project - -

    - -
    - -
    - - - - - - diff --git a/node_modules/underscore/index.js b/node_modules/underscore/index.js deleted file mode 100644 index 2cf0ca5..0000000 --- a/node_modules/underscore/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./underscore'); diff --git a/node_modules/underscore/package.json b/node_modules/underscore/package.json index aea7a4b..addcdae 100644 --- a/node_modules/underscore/package.json +++ b/node_modules/underscore/package.json @@ -15,21 +15,41 @@ }, "repository": { "type": "git", - "url": "git://github.com/documentcloud/underscore.git" + "url": "git://github.com/jashkenas/underscore.git" }, "main": "underscore.js", - "version": "1.4.4", + "version": "1.7.0", "devDependencies": { - "phantomjs": "0.2.2" + "docco": "0.6.x", + "phantomjs": "1.9.7-1", + "uglify-js": "2.4.x", + "eslint": "0.6.x" }, "scripts": { - "test": "phantomjs test/vendor/runner.js test/index.html?noglobals=true" + "test": "phantomjs test/vendor/runner.js test/index.html?noglobals=true && eslint underscore.js test/*.js test/vendor/runner.js", + "build": "uglifyjs underscore.js -c \"evaluate=false\" --comments \"/ .*/\" -m --source-map underscore-min.map -o underscore-min.js", + "doc": "docco underscore.js" }, - "readme": " __\n /\\ \\ __\n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____\n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\\n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/\n \\ \\____/\n \\/___/\n\nUnderscore.js is a utility-belt library for JavaScript that provides\nsupport for the usual functional suspects (each, map, reduce, filter...)\nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://underscorejs.org\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n", + "licenses": [ + { + "type": "MIT", + "url": "https://raw.github.com/jashkenas/underscore/master/LICENSE" + } + ], + "files": [ + "underscore.js", + "underscore-min.js", + "LICENSE" + ], + "readme": " __\n /\\ \\ __\n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____\n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\\n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/\n \\ \\____/\n \\/___/\n\nUnderscore.js is a utility-belt library for JavaScript that provides\nsupport for the usual functional suspects (each, map, reduce, filter...)\nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://underscorejs.org\n\nUnderscore is an open-sourced component of DocumentCloud:\nhttps://github.com/documentcloud\n\nMany thanks to our contributors:\nhttps://github.com/jashkenas/underscore/contributors\n", "readmeFilename": "README.md", "bugs": { - "url": "https://github.com/documentcloud/underscore/issues" + "url": "https://github.com/jashkenas/underscore/issues" + }, + "_id": "underscore@1.7.0", + "_from": "underscore@1.7.0", + "dist": { + "shasum": "e13a21a5086004c9dbddd7f8394e5f7cc079d2c3" }, - "_id": "underscore@1.4.4", - "_from": "underscore@1.x" + "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz" } diff --git a/node_modules/underscore/underscore-min.js b/node_modules/underscore/underscore-min.js index c1d9d3a..11f1d96 100644 --- a/node_modules/underscore/underscore-min.js +++ b/node_modules/underscore/underscore-min.js @@ -1 +1,6 @@ -(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,d=e.filter,g=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.4";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:d&&n.filter===d?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:g&&n.every===g?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2),e=w.isFunction(t);return w.map(n,function(n){return(e?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t,r){return w.isEmpty(t)?r?null:[]:w[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.findWhere=function(n,t){return w.where(n,t,!0)},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var k=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=k(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.indexi;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i},w.bind=function(n,t){if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));var r=o.call(arguments,2);return function(){return n.apply(t,r.concat(o.call(arguments)))}},w.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},w.bindAll=function(n){var t=o.call(arguments,1);return 0===t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var I=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=I(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&I(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return I(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),"function"!=typeof/./&&(w.isFunction=function(n){return"function"==typeof n}),w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return n===void 0},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var M={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};M.unescape=w.invert(M.escape);var S={escape:RegExp("["+w.keys(M.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(M.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(S[n],function(t){return M[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),D.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=++N+"";return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,q={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){var e;r=w.defaults({},r,w.templateSettings);var u=RegExp([(r.escape||T).source,(r.interpolate||T).source,(r.evaluate||T).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(B,function(n){return"\\"+q[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,w);var c=function(n){return e.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},w.chain=function(n){return w(n).chain()};var D=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],D.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return D.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); \ No newline at end of file +// Underscore.js 1.7.0 +// http://underscorejs.org +// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. +(function(){var n=this,t=n._,r=Array.prototype,e=Object.prototype,u=Function.prototype,i=r.push,a=r.slice,o=r.concat,l=e.toString,c=e.hasOwnProperty,f=Array.isArray,s=Object.keys,p=u.bind,h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=h),exports._=h):n._=h,h.VERSION="1.7.0";var g=function(n,t,r){if(t===void 0)return n;switch(null==r?3:r){case 1:return function(r){return n.call(t,r)};case 2:return function(r,e){return n.call(t,r,e)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,i){return n.call(t,r,e,u,i)}}return function(){return n.apply(t,arguments)}};h.iteratee=function(n,t,r){return null==n?h.identity:h.isFunction(n)?g(n,t,r):h.isObject(n)?h.matches(n):h.property(n)},h.each=h.forEach=function(n,t,r){if(null==n)return n;t=g(t,r);var e,u=n.length;if(u===+u)for(e=0;u>e;e++)t(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;u>e;e++)t(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,t,r){if(null==n)return[];t=h.iteratee(t,r);for(var e,u=n.length!==+n.length&&h.keys(n),i=(u||n).length,a=Array(i),o=0;i>o;o++)e=u?u[o]:o,a[o]=t(n[e],e,n);return a};var v="Reduce of empty array with no initial value";h.reduce=h.foldl=h.inject=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length,o=0;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[o++]:o++]}for(;a>o;o++)u=i?i[o]:o,r=t(r,n[u],u,n);return r},h.reduceRight=h.foldr=function(n,t,r,e){null==n&&(n=[]),t=g(t,e,4);var u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;if(arguments.length<3){if(!a)throw new TypeError(v);r=n[i?i[--a]:--a]}for(;a--;)u=i?i[a]:a,r=t(r,n[u],u,n);return r},h.find=h.detect=function(n,t,r){var e;return t=h.iteratee(t,r),h.some(n,function(n,r,u){return t(n,r,u)?(e=n,!0):void 0}),e},h.filter=h.select=function(n,t,r){var e=[];return null==n?e:(t=h.iteratee(t,r),h.each(n,function(n,r,u){t(n,r,u)&&e.push(n)}),e)},h.reject=function(n,t,r){return h.filter(n,h.negate(h.iteratee(t)),r)},h.every=h.all=function(n,t,r){if(null==n)return!0;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,!t(n[u],u,n))return!1;return!0},h.some=h.any=function(n,t,r){if(null==n)return!1;t=h.iteratee(t,r);var e,u,i=n.length!==+n.length&&h.keys(n),a=(i||n).length;for(e=0;a>e;e++)if(u=i?i[e]:e,t(n[u],u,n))return!0;return!1},h.contains=h.include=function(n,t){return null==n?!1:(n.length!==+n.length&&(n=h.values(n)),h.indexOf(n,t)>=0)},h.invoke=function(n,t){var r=a.call(arguments,2),e=h.isFunction(t);return h.map(n,function(n){return(e?t:n[t]).apply(n,r)})},h.pluck=function(n,t){return h.map(n,h.property(t))},h.where=function(n,t){return h.filter(n,h.matches(t))},h.findWhere=function(n,t){return h.find(n,h.matches(t))},h.max=function(n,t,r){var e,u,i=-1/0,a=-1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],e>i&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(u>a||u===-1/0&&i===-1/0)&&(i=n,a=u)});return i},h.min=function(n,t,r){var e,u,i=1/0,a=1/0;if(null==t&&null!=n){n=n.length===+n.length?n:h.values(n);for(var o=0,l=n.length;l>o;o++)e=n[o],i>e&&(i=e)}else t=h.iteratee(t,r),h.each(n,function(n,r,e){u=t(n,r,e),(a>u||1/0===u&&1/0===i)&&(i=n,a=u)});return i},h.shuffle=function(n){for(var t,r=n&&n.length===+n.length?n:h.values(n),e=r.length,u=Array(e),i=0;e>i;i++)t=h.random(0,i),t!==i&&(u[i]=u[t]),u[t]=r[i];return u},h.sample=function(n,t,r){return null==t||r?(n.length!==+n.length&&(n=h.values(n)),n[h.random(n.length-1)]):h.shuffle(n).slice(0,Math.max(0,t))},h.sortBy=function(n,t,r){return t=h.iteratee(t,r),h.pluck(h.map(n,function(n,r,e){return{value:n,index:r,criteria:t(n,r,e)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.index-t.index}),"value")};var m=function(n){return function(t,r,e){var u={};return r=h.iteratee(r,e),h.each(t,function(e,i){var a=r(e,i,t);n(u,e,a)}),u}};h.groupBy=m(function(n,t,r){h.has(n,r)?n[r].push(t):n[r]=[t]}),h.indexBy=m(function(n,t,r){n[r]=t}),h.countBy=m(function(n,t,r){h.has(n,r)?n[r]++:n[r]=1}),h.sortedIndex=function(n,t,r,e){r=h.iteratee(r,e,1);for(var u=r(t),i=0,a=n.length;a>i;){var o=i+a>>>1;r(n[o])t?[]:a.call(n,0,t)},h.initial=function(n,t,r){return a.call(n,0,Math.max(0,n.length-(null==t||r?1:t)))},h.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:a.call(n,Math.max(n.length-t,0))},h.rest=h.tail=h.drop=function(n,t,r){return a.call(n,null==t||r?1:t)},h.compact=function(n){return h.filter(n,h.identity)};var y=function(n,t,r,e){if(t&&h.every(n,h.isArray))return o.apply(e,n);for(var u=0,a=n.length;a>u;u++){var l=n[u];h.isArray(l)||h.isArguments(l)?t?i.apply(e,l):y(l,t,r,e):r||e.push(l)}return e};h.flatten=function(n,t){return y(n,t,!1,[])},h.without=function(n){return h.difference(n,a.call(arguments,1))},h.uniq=h.unique=function(n,t,r,e){if(null==n)return[];h.isBoolean(t)||(e=r,r=t,t=!1),null!=r&&(r=h.iteratee(r,e));for(var u=[],i=[],a=0,o=n.length;o>a;a++){var l=n[a];if(t)a&&i===l||u.push(l),i=l;else if(r){var c=r(l,a,n);h.indexOf(i,c)<0&&(i.push(c),u.push(l))}else h.indexOf(u,l)<0&&u.push(l)}return u},h.union=function(){return h.uniq(y(arguments,!0,!0,[]))},h.intersection=function(n){if(null==n)return[];for(var t=[],r=arguments.length,e=0,u=n.length;u>e;e++){var i=n[e];if(!h.contains(t,i)){for(var a=1;r>a&&h.contains(arguments[a],i);a++);a===r&&t.push(i)}}return t},h.difference=function(n){var t=y(a.call(arguments,1),!0,!0,[]);return h.filter(n,function(n){return!h.contains(t,n)})},h.zip=function(n){if(null==n)return[];for(var t=h.max(arguments,"length").length,r=Array(t),e=0;t>e;e++)r[e]=h.pluck(arguments,e);return r},h.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},h.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=h.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}for(;u>e;e++)if(n[e]===t)return e;return-1},h.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=n.length;for("number"==typeof r&&(e=0>r?e+r+1:Math.min(e,r+1));--e>=0;)if(n[e]===t)return e;return-1},h.range=function(n,t,r){arguments.length<=1&&(t=n||0,n=0),r=r||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=Array(e),i=0;e>i;i++,n+=r)u[i]=n;return u};var d=function(){};h.bind=function(n,t){var r,e;if(p&&n.bind===p)return p.apply(n,a.call(arguments,1));if(!h.isFunction(n))throw new TypeError("Bind must be called on a function");return r=a.call(arguments,2),e=function(){if(!(this instanceof e))return n.apply(t,r.concat(a.call(arguments)));d.prototype=n.prototype;var u=new d;d.prototype=null;var i=n.apply(u,r.concat(a.call(arguments)));return h.isObject(i)?i:u}},h.partial=function(n){var t=a.call(arguments,1);return function(){for(var r=0,e=t.slice(),u=0,i=e.length;i>u;u++)e[u]===h&&(e[u]=arguments[r++]);for(;r=e)throw new Error("bindAll must be passed function names");for(t=1;e>t;t++)r=arguments[t],n[r]=h.bind(n[r],n);return n},h.memoize=function(n,t){var r=function(e){var u=r.cache,i=t?t.apply(this,arguments):e;return h.has(u,i)||(u[i]=n.apply(this,arguments)),u[i]};return r.cache={},r},h.delay=function(n,t){var r=a.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},h.defer=function(n){return h.delay.apply(h,[n,1].concat(a.call(arguments,1)))},h.throttle=function(n,t,r){var e,u,i,a=null,o=0;r||(r={});var l=function(){o=r.leading===!1?0:h.now(),a=null,i=n.apply(e,u),a||(e=u=null)};return function(){var c=h.now();o||r.leading!==!1||(o=c);var f=t-(c-o);return e=this,u=arguments,0>=f||f>t?(clearTimeout(a),a=null,o=c,i=n.apply(e,u),a||(e=u=null)):a||r.trailing===!1||(a=setTimeout(l,f)),i}},h.debounce=function(n,t,r){var e,u,i,a,o,l=function(){var c=h.now()-a;t>c&&c>0?e=setTimeout(l,t-c):(e=null,r||(o=n.apply(i,u),e||(i=u=null)))};return function(){i=this,u=arguments,a=h.now();var c=r&&!e;return e||(e=setTimeout(l,t)),c&&(o=n.apply(i,u),i=u=null),o}},h.wrap=function(n,t){return h.partial(t,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var n=arguments,t=n.length-1;return function(){for(var r=t,e=n[t].apply(this,arguments);r--;)e=n[r].call(this,e);return e}},h.after=function(n,t){return function(){return--n<1?t.apply(this,arguments):void 0}},h.before=function(n,t){var r;return function(){return--n>0?r=t.apply(this,arguments):t=null,r}},h.once=h.partial(h.before,2),h.keys=function(n){if(!h.isObject(n))return[];if(s)return s(n);var t=[];for(var r in n)h.has(n,r)&&t.push(r);return t},h.values=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=n[t[u]];return e},h.pairs=function(n){for(var t=h.keys(n),r=t.length,e=Array(r),u=0;r>u;u++)e[u]=[t[u],n[t[u]]];return e},h.invert=function(n){for(var t={},r=h.keys(n),e=0,u=r.length;u>e;e++)t[n[r[e]]]=r[e];return t},h.functions=h.methods=function(n){var t=[];for(var r in n)h.isFunction(n[r])&&t.push(r);return t.sort()},h.extend=function(n){if(!h.isObject(n))return n;for(var t,r,e=1,u=arguments.length;u>e;e++){t=arguments[e];for(r in t)c.call(t,r)&&(n[r]=t[r])}return n},h.pick=function(n,t,r){var e,u={};if(null==n)return u;if(h.isFunction(t)){t=g(t,r);for(e in n){var i=n[e];t(i,e,n)&&(u[e]=i)}}else{var l=o.apply([],a.call(arguments,1));n=new Object(n);for(var c=0,f=l.length;f>c;c++)e=l[c],e in n&&(u[e]=n[e])}return u},h.omit=function(n,t,r){if(h.isFunction(t))t=h.negate(t);else{var e=h.map(o.apply([],a.call(arguments,1)),String);t=function(n,t){return!h.contains(e,t)}}return h.pick(n,t,r)},h.defaults=function(n){if(!h.isObject(n))return n;for(var t=1,r=arguments.length;r>t;t++){var e=arguments[t];for(var u in e)n[u]===void 0&&(n[u]=e[u])}return n},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,t){return t(n),n};var b=function(n,t,r,e){if(n===t)return 0!==n||1/n===1/t;if(null==n||null==t)return n===t;n instanceof h&&(n=n._wrapped),t instanceof h&&(t=t._wrapped);var u=l.call(n);if(u!==l.call(t))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+t;case"[object Number]":return+n!==+n?+t!==+t:0===+n?1/+n===1/t:+n===+t;case"[object Date]":case"[object Boolean]":return+n===+t}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]===n)return e[i]===t;var a=n.constructor,o=t.constructor;if(a!==o&&"constructor"in n&&"constructor"in t&&!(h.isFunction(a)&&a instanceof a&&h.isFunction(o)&&o instanceof o))return!1;r.push(n),e.push(t);var c,f;if("[object Array]"===u){if(c=n.length,f=c===t.length)for(;c--&&(f=b(n[c],t[c],r,e)););}else{var s,p=h.keys(n);if(c=p.length,f=h.keys(t).length===c)for(;c--&&(s=p[c],f=h.has(t,s)&&b(n[s],t[s],r,e)););}return r.pop(),e.pop(),f};h.isEqual=function(n,t){return b(n,t,[],[])},h.isEmpty=function(n){if(null==n)return!0;if(h.isArray(n)||h.isString(n)||h.isArguments(n))return 0===n.length;for(var t in n)if(h.has(n,t))return!1;return!0},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=f||function(n){return"[object Array]"===l.call(n)},h.isObject=function(n){var t=typeof n;return"function"===t||"object"===t&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp"],function(n){h["is"+n]=function(t){return l.call(t)==="[object "+n+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return h.has(n,"callee")}),"function"!=typeof/./&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&n!==+n},h.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"===l.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return n===void 0},h.has=function(n,t){return null!=n&&c.call(n,t)},h.noConflict=function(){return n._=t,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(n){return function(t){return t[n]}},h.matches=function(n){var t=h.pairs(n),r=t.length;return function(n){if(null==n)return!r;n=new Object(n);for(var e=0;r>e;e++){var u=t[e],i=u[0];if(u[1]!==n[i]||!(i in n))return!1}return!0}},h.times=function(n,t,r){var e=Array(Math.max(0,n));t=g(t,r,1);for(var u=0;n>u;u++)e[u]=t(u);return e},h.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var _={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},w=h.invert(_),j=function(n){var t=function(t){return n[t]},r="(?:"+h.keys(n).join("|")+")",e=RegExp(r),u=RegExp(r,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=j(_),h.unescape=j(w),h.result=function(n,t){if(null==n)return void 0;var r=n[t];return h.isFunction(r)?n[t]():r};var x=0;h.uniqueId=function(n){var t=++x+"";return n?n+t:t},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var A=/(.)^/,k={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},O=/\\|'|\r|\n|\u2028|\u2029/g,F=function(n){return"\\"+k[n]};h.template=function(n,t,r){!t&&r&&(t=r),t=h.defaults({},t,h.templateSettings);var e=RegExp([(t.escape||A).source,(t.interpolate||A).source,(t.evaluate||A).source].join("|")+"|$","g"),u=0,i="__p+='";n.replace(e,function(t,r,e,a,o){return i+=n.slice(u,o).replace(O,F),u=o+t.length,r?i+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":e?i+="'+\n((__t=("+e+"))==null?'':__t)+\n'":a&&(i+="';\n"+a+"\n__p+='"),t}),i+="';\n",t.variable||(i="with(obj||{}){\n"+i+"}\n"),i="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+i+"return __p;\n";try{var a=new Function(t.variable||"obj","_",i)}catch(o){throw o.source=i,o}var l=function(n){return a.call(this,n,h)},c=t.variable||"obj";return l.source="function("+c+"){\n"+i+"}",l},h.chain=function(n){var t=h(n);return t._chain=!0,t};var E=function(n){return this._chain?h(n).chain():n};h.mixin=function(n){h.each(h.functions(n),function(t){var r=h[t]=n[t];h.prototype[t]=function(){var n=[this._wrapped];return i.apply(n,arguments),E.call(this,r.apply(h,n))}})},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=r[n];h.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!==n&&"splice"!==n||0!==r.length||delete r[0],E.call(this,r)}}),h.each(["concat","join","slice"],function(n){var t=r[n];h.prototype[n]=function(){return E.call(this,t.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}).call(this); +//# sourceMappingURL=underscore-min.map \ No newline at end of file diff --git a/node_modules/underscore/underscore.js b/node_modules/underscore/underscore.js index a12f0d9..b4f49a0 100644 --- a/node_modules/underscore/underscore.js +++ b/node_modules/underscore/underscore.js @@ -1,6 +1,6 @@ -// Underscore.js 1.4.4 +// Underscore.js 1.7.0 // http://underscorejs.org -// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc. +// (c) 2009-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // Underscore may be freely distributed under the MIT license. (function() { @@ -8,37 +8,26 @@ // Baseline setup // -------------- - // Establish the root object, `window` in the browser, or `global` on the server. + // Establish the root object, `window` in the browser, or `exports` on the server. var root = this; // Save the previous value of the `_` variable. var previousUnderscore = root._; - // Establish the object that gets returned to break out of a loop iteration. - var breaker = {}; - // Save bytes in the minified (but not gzipped) version: var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; // Create quick reference variables for speed access to core prototypes. - var push = ArrayProto.push, - slice = ArrayProto.slice, - concat = ArrayProto.concat, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; + var + push = ArrayProto.push, + slice = ArrayProto.slice, + concat = ArrayProto.concat, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; // All **ECMAScript 5** native function implementations that we hope to use // are declared here. var - nativeForEach = ArrayProto.forEach, - nativeMap = ArrayProto.map, - nativeReduce = ArrayProto.reduce, - nativeReduceRight = ArrayProto.reduceRight, - nativeFilter = ArrayProto.filter, - nativeEvery = ArrayProto.every, - nativeSome = ArrayProto.some, - nativeIndexOf = ArrayProto.indexOf, - nativeLastIndexOf = ArrayProto.lastIndexOf, nativeIsArray = Array.isArray, nativeKeys = Object.keys, nativeBind = FuncProto.bind; @@ -52,8 +41,7 @@ // Export the Underscore object for **Node.js**, with // backwards-compatibility for the old `require()` API. If we're in - // the browser, add `_` as a global object via a string identifier, - // for Closure Compiler "advanced" mode. + // the browser, add `_` as a global object. if (typeof exports !== 'undefined') { if (typeof module !== 'undefined' && module.exports) { exports = module.exports = _; @@ -64,98 +52,125 @@ } // Current version. - _.VERSION = '1.4.4'; + _.VERSION = '1.7.0'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var createCallback = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + case 2: return function(value, other) { + return func.call(context, value, other); + }; + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + // A mostly-internal function to generate callbacks that can be applied + // to each element in a collection, returning the desired result — either + // identity, an arbitrary callback, a property matcher, or a property accessor. + _.iteratee = function(value, context, argCount) { + if (value == null) return _.identity; + if (_.isFunction(value)) return createCallback(value, context, argCount); + if (_.isObject(value)) return _.matches(value); + return _.property(value); + }; // Collection Functions // -------------------- // The cornerstone, an `each` implementation, aka `forEach`. - // Handles objects with the built-in `forEach`, arrays, and raw objects. - // Delegates to **ECMAScript 5**'s native `forEach` if available. - var each = _.each = _.forEach = function(obj, iterator, context) { - if (obj == null) return; - if (nativeForEach && obj.forEach === nativeForEach) { - obj.forEach(iterator, context); - } else if (obj.length === +obj.length) { - for (var i = 0, l = obj.length; i < l; i++) { - if (iterator.call(context, obj[i], i, obj) === breaker) return; + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + if (obj == null) return obj; + iteratee = createCallback(iteratee, context); + var i, length = obj.length; + if (length === +length) { + for (i = 0; i < length; i++) { + iteratee(obj[i], i, obj); } } else { - for (var key in obj) { - if (_.has(obj, key)) { - if (iterator.call(context, obj[key], key, obj) === breaker) return; - } + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); } } + return obj; }; - // Return the results of applying the iterator to each element. - // Delegates to **ECMAScript 5**'s native `map` if available. - _.map = _.collect = function(obj, iterator, context) { - var results = []; - if (obj == null) return results; - if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); - each(obj, function(value, index, list) { - results[results.length] = iterator.call(context, value, index, list); - }); + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + if (obj == null) return []; + iteratee = _.iteratee(iteratee, context); + var keys = obj.length !== +obj.length && _.keys(obj), + length = (keys || obj).length, + results = Array(length), + currentKey; + for (var index = 0; index < length; index++) { + currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } return results; }; var reduceError = 'Reduce of empty array with no initial value'; // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. - _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { - var initial = arguments.length > 2; + // or `foldl`. + _.reduce = _.foldl = _.inject = function(obj, iteratee, memo, context) { if (obj == null) obj = []; - if (nativeReduce && obj.reduce === nativeReduce) { - if (context) iterator = _.bind(iterator, context); - return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator); + iteratee = createCallback(iteratee, context, 4); + var keys = obj.length !== +obj.length && _.keys(obj), + length = (keys || obj).length, + index = 0, currentKey; + if (arguments.length < 3) { + if (!length) throw new TypeError(reduceError); + memo = obj[keys ? keys[index++] : index++]; + } + for (; index < length; index++) { + currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); } - each(obj, function(value, index, list) { - if (!initial) { - memo = value; - initial = true; - } else { - memo = iterator.call(context, memo, value, index, list); - } - }); - if (!initial) throw new TypeError(reduceError); return memo; }; // The right-associative version of reduce, also known as `foldr`. - // Delegates to **ECMAScript 5**'s native `reduceRight` if available. - _.reduceRight = _.foldr = function(obj, iterator, memo, context) { - var initial = arguments.length > 2; + _.reduceRight = _.foldr = function(obj, iteratee, memo, context) { if (obj == null) obj = []; - if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { - if (context) iterator = _.bind(iterator, context); - return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator); + iteratee = createCallback(iteratee, context, 4); + var keys = obj.length !== + obj.length && _.keys(obj), + index = (keys || obj).length, + currentKey; + if (arguments.length < 3) { + if (!index) throw new TypeError(reduceError); + memo = obj[keys ? keys[--index] : --index]; } - var length = obj.length; - if (length !== +length) { - var keys = _.keys(obj); - length = keys.length; + while (index--) { + currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); } - each(obj, function(value, index, list) { - index = keys ? keys[--length] : --length; - if (!initial) { - memo = obj[index]; - initial = true; - } else { - memo = iterator.call(context, memo, obj[index], index, list); - } - }); - if (!initial) throw new TypeError(reduceError); return memo; }; // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, iterator, context) { + _.find = _.detect = function(obj, predicate, context) { var result; - any(obj, function(value, index, list) { - if (iterator.call(context, value, index, list)) { + predicate = _.iteratee(predicate, context); + _.some(obj, function(value, index, list) { + if (predicate(value, index, list)) { result = value; return true; } @@ -164,61 +179,58 @@ }; // Return all the elements that pass a truth test. - // Delegates to **ECMAScript 5**'s native `filter` if available. // Aliased as `select`. - _.filter = _.select = function(obj, iterator, context) { + _.filter = _.select = function(obj, predicate, context) { var results = []; if (obj == null) return results; - if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context); - each(obj, function(value, index, list) { - if (iterator.call(context, value, index, list)) results[results.length] = value; + predicate = _.iteratee(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); }); return results; }; // Return all the elements for which a truth test fails. - _.reject = function(obj, iterator, context) { - return _.filter(obj, function(value, index, list) { - return !iterator.call(context, value, index, list); - }, context); + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(_.iteratee(predicate)), context); }; // Determine whether all of the elements match a truth test. - // Delegates to **ECMAScript 5**'s native `every` if available. // Aliased as `all`. - _.every = _.all = function(obj, iterator, context) { - iterator || (iterator = _.identity); - var result = true; - if (obj == null) return result; - if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context); - each(obj, function(value, index, list) { - if (!(result = result && iterator.call(context, value, index, list))) return breaker; - }); - return !!result; + _.every = _.all = function(obj, predicate, context) { + if (obj == null) return true; + predicate = _.iteratee(predicate, context); + var keys = obj.length !== +obj.length && _.keys(obj), + length = (keys || obj).length, + index, currentKey; + for (index = 0; index < length; index++) { + currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; }; // Determine if at least one element in the object matches a truth test. - // Delegates to **ECMAScript 5**'s native `some` if available. // Aliased as `any`. - var any = _.some = _.any = function(obj, iterator, context) { - iterator || (iterator = _.identity); - var result = false; - if (obj == null) return result; - if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context); - each(obj, function(value, index, list) { - if (result || (result = iterator.call(context, value, index, list))) return breaker; - }); - return !!result; + _.some = _.any = function(obj, predicate, context) { + if (obj == null) return false; + predicate = _.iteratee(predicate, context); + var keys = obj.length !== +obj.length && _.keys(obj), + length = (keys || obj).length, + index, currentKey; + for (index = 0; index < length; index++) { + currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; }; // Determine if the array or object contains a given value (using `===`). // Aliased as `include`. _.contains = _.include = function(obj, target) { if (obj == null) return false; - if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1; - return any(obj, function(value) { - return value === target; - }); + if (obj.length !== +obj.length) obj = _.values(obj); + return _.indexOf(obj, target) >= 0; }; // Invoke a method (with arguments) on every item in a collection. @@ -232,83 +244,104 @@ // Convenience version of a common use case of `map`: fetching a property. _.pluck = function(obj, key) { - return _.map(obj, function(value){ return value[key]; }); + return _.map(obj, _.property(key)); }; // Convenience version of a common use case of `filter`: selecting only objects // containing specific `key:value` pairs. - _.where = function(obj, attrs, first) { - if (_.isEmpty(attrs)) return first ? null : []; - return _[first ? 'find' : 'filter'](obj, function(value) { - for (var key in attrs) { - if (attrs[key] !== value[key]) return false; - } - return true; - }); + _.where = function(obj, attrs) { + return _.filter(obj, _.matches(attrs)); }; // Convenience version of a common use case of `find`: getting the first object // containing specific `key:value` pairs. _.findWhere = function(obj, attrs) { - return _.where(obj, attrs, true); - }; - - // Return the maximum element or (element-based computation). - // Can't optimize arrays of integers longer than 65,535 elements. - // See: https://bugs.webkit.org/show_bug.cgi?id=80797 - _.max = function(obj, iterator, context) { - if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { - return Math.max.apply(Math, obj); + return _.find(obj, _.matches(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = obj.length === +obj.length ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value > result) { + result = value; + } + } + } else { + iteratee = _.iteratee(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = value; + lastComputed = computed; + } + }); } - if (!iterator && _.isEmpty(obj)) return -Infinity; - var result = {computed : -Infinity, value: -Infinity}; - each(obj, function(value, index, list) { - var computed = iterator ? iterator.call(context, value, index, list) : value; - computed >= result.computed && (result = {value : value, computed : computed}); - }); - return result.value; + return result; }; // Return the minimum element (or element-based computation). - _.min = function(obj, iterator, context) { - if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { - return Math.min.apply(Math, obj); + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null && obj != null) { + obj = obj.length === +obj.length ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value < result) { + result = value; + } + } + } else { + iteratee = _.iteratee(iteratee, context); + _.each(obj, function(value, index, list) { + computed = iteratee(value, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = value; + lastComputed = computed; + } + }); } - if (!iterator && _.isEmpty(obj)) return Infinity; - var result = {computed : Infinity, value: Infinity}; - each(obj, function(value, index, list) { - var computed = iterator ? iterator.call(context, value, index, list) : value; - computed < result.computed && (result = {value : value, computed : computed}); - }); - return result.value; + return result; }; - // Shuffle an array. + // Shuffle a collection, using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). _.shuffle = function(obj) { - var rand; - var index = 0; - var shuffled = []; - each(obj, function(value) { - rand = _.random(index++); - shuffled[index - 1] = shuffled[rand]; - shuffled[rand] = value; - }); + var set = obj && obj.length === +obj.length ? obj : _.values(obj); + var length = set.length; + var shuffled = Array(length); + for (var index = 0, rand; index < length; index++) { + rand = _.random(0, index); + if (rand !== index) shuffled[index] = shuffled[rand]; + shuffled[rand] = set[index]; + } return shuffled; }; - // An internal function to generate lookup iterators. - var lookupIterator = function(value) { - return _.isFunction(value) ? value : function(obj){ return obj[value]; }; + // Sample **n** random values from a collection. + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (obj.length !== +obj.length) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + return _.shuffle(obj).slice(0, Math.max(0, n)); }; - // Sort the object's values by a criterion produced by an iterator. - _.sortBy = function(obj, value, context) { - var iterator = lookupIterator(value); + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + iteratee = _.iteratee(iteratee, context); return _.pluck(_.map(obj, function(value, index, list) { return { - value : value, - index : index, - criteria : iterator.call(context, value, index, list) + value: value, + index: index, + criteria: iteratee(value, index, list) }; }).sort(function(left, right) { var a = left.criteria; @@ -317,53 +350,56 @@ if (a > b || a === void 0) return 1; if (a < b || b === void 0) return -1; } - return left.index < right.index ? -1 : 1; + return left.index - right.index; }), 'value'); }; // An internal function used for aggregate "group by" operations. - var group = function(obj, value, context, behavior) { - var result = {}; - var iterator = lookupIterator(value || _.identity); - each(obj, function(value, index) { - var key = iterator.call(context, value, index, obj); - behavior(result, key, value); - }); - return result; + var group = function(behavior) { + return function(obj, iteratee, context) { + var result = {}; + iteratee = _.iteratee(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; }; // Groups the object's values by a criterion. Pass either a string attribute // to group by, or a function that returns the criterion. - _.groupBy = function(obj, value, context) { - return group(obj, value, context, function(result, key, value) { - (_.has(result, key) ? result[key] : (result[key] = [])).push(value); - }); - }; + _.groupBy = group(function(result, value, key) { + if (_.has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); // Counts instances of an object that group by a certain criterion. Pass // either a string attribute to count by, or a function that returns the // criterion. - _.countBy = function(obj, value, context) { - return group(obj, value, context, function(result, key) { - if (!_.has(result, key)) result[key] = 0; - result[key]++; - }); - }; + _.countBy = group(function(result, value, key) { + if (_.has(result, key)) result[key]++; else result[key] = 1; + }); // Use a comparator function to figure out the smallest index at which // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iterator, context) { - iterator = iterator == null ? _.identity : lookupIterator(iterator); - var value = iterator.call(context, obj); + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = _.iteratee(iteratee, context, 1); + var value = iteratee(obj); var low = 0, high = array.length; while (low < high) { - var mid = (low + high) >>> 1; - iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid; + var mid = low + high >>> 1; + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; } return low; }; - // Safely convert anything iterable into a real, live array. + // Safely create a real, live array from anything iterable. _.toArray = function(obj) { if (!obj) return []; if (_.isArray(obj)) return slice.call(obj); @@ -374,7 +410,18 @@ // Return the number of elements in an object. _.size = function(obj) { if (obj == null) return 0; - return (obj.length === +obj.length) ? obj.length : _.keys(obj).length; + return obj.length === +obj.length ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = function(obj, predicate, context) { + predicate = _.iteratee(predicate, context); + var pass = [], fail = []; + _.each(obj, function(value, key, obj) { + (predicate(value, key, obj) ? pass : fail).push(value); + }); + return [pass, fail]; }; // Array Functions @@ -385,7 +432,9 @@ // allows it to work with `_.map`. _.first = _.head = _.take = function(array, n, guard) { if (array == null) return void 0; - return (n != null) && !guard ? slice.call(array, 0, n) : array[0]; + if (n == null || guard) return array[0]; + if (n < 0) return []; + return slice.call(array, 0, n); }; // Returns everything but the last entry of the array. Especially useful on @@ -393,18 +442,15 @@ // the array, excluding the last N. The **guard** check allows it to work with // `_.map`. _.initial = function(array, n, guard) { - return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n)); + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); }; // Get the last element of an array. Passing **n** will return the last N // values in the array. The **guard** check allows it to work with `_.map`. _.last = function(array, n, guard) { if (array == null) return void 0; - if ((n != null) && !guard) { - return slice.call(array, Math.max(array.length - n, 0)); - } else { - return array[array.length - 1]; - } + if (n == null || guard) return array[array.length - 1]; + return slice.call(array, Math.max(array.length - n, 0)); }; // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. @@ -412,7 +458,7 @@ // the rest N values in the array. The **guard** // check allows it to work with `_.map`. _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, (n == null) || guard ? 1 : n); + return slice.call(array, n == null || guard ? 1 : n); }; // Trim out all falsy values from an array. @@ -421,20 +467,26 @@ }; // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, output) { - each(input, function(value) { - if (_.isArray(value)) { - shallow ? push.apply(output, value) : flatten(value, shallow, output); + var flatten = function(input, shallow, strict, output) { + if (shallow && _.every(input, _.isArray)) { + return concat.apply(output, input); + } + for (var i = 0, length = input.length; i < length; i++) { + var value = input[i]; + if (!_.isArray(value) && !_.isArguments(value)) { + if (!strict) output.push(value); + } else if (shallow) { + push.apply(output, value); } else { - output.push(value); + flatten(value, shallow, strict, output); } - }); + } return output; }; - // Return a completely flattened version of an array. + // Flatten out an array, either recursively (by default), or just one level. _.flatten = function(array, shallow) { - return flatten(array, shallow, []); + return flatten(array, shallow, false, []); }; // Return a version of the array that does not contain the specified value(s). @@ -445,56 +497,74 @@ // Produce a duplicate-free version of the array. If the array has already // been sorted, you have the option of using a faster algorithm. // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iterator, context) { - if (_.isFunction(isSorted)) { - context = iterator; - iterator = isSorted; + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (array == null) return []; + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; isSorted = false; } - var initial = iterator ? _.map(array, iterator, context) : array; - var results = []; + if (iteratee != null) iteratee = _.iteratee(iteratee, context); + var result = []; var seen = []; - each(initial, function(value, index) { - if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) { - seen.push(value); - results.push(array[index]); + for (var i = 0, length = array.length; i < length; i++) { + var value = array[i]; + if (isSorted) { + if (!i || seen !== value) result.push(value); + seen = value; + } else if (iteratee) { + var computed = iteratee(value, i, array); + if (_.indexOf(seen, computed) < 0) { + seen.push(computed); + result.push(value); + } + } else if (_.indexOf(result, value) < 0) { + result.push(value); } - }); - return results; + } + return result; }; // Produce an array that contains the union: each distinct element from all of // the passed-in arrays. _.union = function() { - return _.uniq(concat.apply(ArrayProto, arguments)); + return _.uniq(flatten(arguments, true, true, [])); }; // Produce an array that contains every item shared between all the // passed-in arrays. _.intersection = function(array) { - var rest = slice.call(arguments, 1); - return _.filter(_.uniq(array), function(item) { - return _.every(rest, function(other) { - return _.indexOf(other, item) >= 0; - }); - }); + if (array == null) return []; + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = array.length; i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + for (var j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; }; // Take the difference between one array and a number of other arrays. // Only the elements present in just the first array will remain. _.difference = function(array) { - var rest = concat.apply(ArrayProto, slice.call(arguments, 1)); - return _.filter(array, function(value){ return !_.contains(rest, value); }); + var rest = flatten(slice.call(arguments, 1), true, true, []); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); }; // Zip together multiple lists into a single array -- elements that share // an index go together. - _.zip = function() { - var args = slice.call(arguments); - var length = _.max(_.pluck(args, 'length')); - var results = new Array(length); + _.zip = function(array) { + if (array == null) return []; + var length = _.max(arguments, 'length').length; + var results = Array(length); for (var i = 0; i < length; i++) { - results[i] = _.pluck(args, "" + i); + results[i] = _.pluck(arguments, i); } return results; }; @@ -505,7 +575,7 @@ _.object = function(list, values) { if (list == null) return {}; var result = {}; - for (var i = 0, l = list.length; i < l; i++) { + for (var i = 0, length = list.length; i < length; i++) { if (values) { result[list[i]] = values[i]; } else { @@ -515,37 +585,32 @@ return result; }; - // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**), - // we need this function. Return the position of the first occurrence of an - // item in an array, or -1 if the item is not included in the array. - // Delegates to **ECMAScript 5**'s native `indexOf` if available. + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. // If the array is large and already in sort order, pass `true` // for **isSorted** to use binary search. _.indexOf = function(array, item, isSorted) { if (array == null) return -1; - var i = 0, l = array.length; + var i = 0, length = array.length; if (isSorted) { if (typeof isSorted == 'number') { - i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted); + i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted; } else { i = _.sortedIndex(array, item); return array[i] === item ? i : -1; } } - if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted); - for (; i < l; i++) if (array[i] === item) return i; + for (; i < length; i++) if (array[i] === item) return i; return -1; }; - // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available. _.lastIndexOf = function(array, item, from) { if (array == null) return -1; - var hasIndex = from != null; - if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) { - return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item); + var idx = array.length; + if (typeof from == 'number') { + idx = from < 0 ? idx + from + 1 : Math.min(idx, from + 1); } - var i = (hasIndex ? from : array.length); - while (i--) if (array[i] === item) return i; + while (--idx >= 0) if (array[idx] === item) return idx; return -1; }; @@ -557,15 +622,13 @@ stop = start || 0; start = 0; } - step = arguments[2] || 1; + step = step || 1; - var len = Math.max(Math.ceil((stop - start) / step), 0); - var idx = 0; - var range = new Array(len); + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); - while(idx < len) { - range[idx++] = start; - start += step; + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; } return range; @@ -574,50 +637,77 @@ // Function (ahem) Functions // ------------------ + // Reusable constructor function for prototype setting. + var Ctor = function(){}; + // Create a function bound to a given object (assigning `this`, and arguments, // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if // available. _.bind = function(func, context) { - if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); - var args = slice.call(arguments, 2); - return function() { - return func.apply(context, args.concat(slice.call(arguments))); + var args, bound; + if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + args = slice.call(arguments, 2); + bound = function() { + if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments))); + Ctor.prototype = func.prototype; + var self = new Ctor; + Ctor.prototype = null; + var result = func.apply(self, args.concat(slice.call(arguments))); + if (_.isObject(result)) return result; + return self; }; + return bound; }; // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder, allowing any combination of arguments to be pre-filled. _.partial = function(func) { - var args = slice.call(arguments, 1); + var boundArgs = slice.call(arguments, 1); return function() { - return func.apply(this, args.concat(slice.call(arguments))); + var position = 0; + var args = boundArgs.slice(); + for (var i = 0, length = args.length; i < length; i++) { + if (args[i] === _) args[i] = arguments[position++]; + } + while (position < arguments.length) args.push(arguments[position++]); + return func.apply(this, args); }; }; - // Bind all of an object's methods to that object. Useful for ensuring that - // all callbacks defined on an object belong to it. + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. _.bindAll = function(obj) { - var funcs = slice.call(arguments, 1); - if (funcs.length === 0) funcs = _.functions(obj); - each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); }); + var i, length = arguments.length, key; + if (length <= 1) throw new Error('bindAll must be passed function names'); + for (i = 1; i < length; i++) { + key = arguments[i]; + obj[key] = _.bind(obj[key], obj); + } return obj; }; // Memoize an expensive function by storing its results. _.memoize = function(func, hasher) { - var memo = {}; - hasher || (hasher = _.identity); - return function() { - var key = hasher.apply(this, arguments); - return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments)); + var memoize = function(key) { + var cache = memoize.cache; + var address = hasher ? hasher.apply(this, arguments) : key; + if (!_.has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; }; + memoize.cache = {}; + return memoize; }; // Delays a function for the given number of milliseconds, and then calls // it with the arguments supplied. _.delay = function(func, wait) { var args = slice.call(arguments, 2); - return setTimeout(function(){ return func.apply(null, args); }, wait); + return setTimeout(function(){ + return func.apply(null, args); + }, wait); }; // Defers a function, scheduling it to run after the current call stack has @@ -627,26 +717,34 @@ }; // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. - _.throttle = function(func, wait) { - var context, args, timeout, result; + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var context, args, result; + var timeout = null; var previous = 0; + if (!options) options = {}; var later = function() { - previous = new Date; + previous = options.leading === false ? 0 : _.now(); timeout = null; result = func.apply(context, args); + if (!timeout) context = args = null; }; return function() { - var now = new Date; + var now = _.now(); + if (!previous && options.leading === false) previous = now; var remaining = wait - (now - previous); context = this; args = arguments; - if (remaining <= 0) { + if (remaining <= 0 || remaining > wait) { clearTimeout(timeout); timeout = null; previous = now; result = func.apply(context, args); - } else if (!timeout) { + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { timeout = setTimeout(later, remaining); } return result; @@ -658,31 +756,34 @@ // N milliseconds. If `immediate` is passed, trigger the function on the // leading edge, instead of the trailing. _.debounce = function(func, wait, immediate) { - var timeout, result; - return function() { - var context = this, args = arguments; - var later = function() { + var timeout, args, context, timestamp, result; + + var later = function() { + var last = _.now() - timestamp; + + if (last < wait && last > 0) { + timeout = setTimeout(later, wait - last); + } else { timeout = null; - if (!immediate) result = func.apply(context, args); - }; - var callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) result = func.apply(context, args); - return result; + if (!immediate) { + result = func.apply(context, args); + if (!timeout) context = args = null; + } + } }; - }; - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = function(func) { - var ran = false, memo; return function() { - if (ran) return memo; - ran = true; - memo = func.apply(this, arguments); - func = null; - return memo; + context = this; + args = arguments; + timestamp = _.now(); + var callNow = immediate && !timeout; + if (!timeout) timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + context = args = null; + } + + return result; }; }; @@ -690,29 +791,31 @@ // allowing you to adjust arguments, run code before and after, and // conditionally execute the original function. _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { return function() { - var args = [func]; - push.apply(args, arguments); - return wrapper.apply(this, args); + return !predicate.apply(this, arguments); }; }; // Returns a function that is the composition of a list of functions, each // consuming the return value of the function that follows. _.compose = function() { - var funcs = arguments; + var args = arguments; + var start = args.length - 1; return function() { - var args = arguments; - for (var i = funcs.length - 1; i >= 0; i--) { - args = [funcs[i].apply(this, args)]; - } - return args[0]; + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; }; }; // Returns a function that will only be executed after being called N times. _.after = function(times, func) { - if (times <= 0) return func(); return function() { if (--times < 1) { return func.apply(this, arguments); @@ -720,36 +823,65 @@ }; }; + // Returns a function that will only be executed before being called N times. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } else { + func = null; + } + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + // Object Functions // ---------------- // Retrieve the names of an object's properties. // Delegates to **ECMAScript 5**'s native `Object.keys` - _.keys = nativeKeys || function(obj) { - if (obj !== Object(obj)) throw new TypeError('Invalid object'); + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); var keys = []; - for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key; + for (var key in obj) if (_.has(obj, key)) keys.push(key); return keys; }; // Retrieve the values of an object's properties. _.values = function(obj) { - var values = []; - for (var key in obj) if (_.has(obj, key)) values.push(obj[key]); + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } return values; }; // Convert an object into a list of `[key, value]` pairs. _.pairs = function(obj) { - var pairs = []; - for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]); + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } return pairs; }; // Invert the keys and values of an object. The values must be serializable. _.invert = function(obj) { var result = {}; - for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } return result; }; @@ -765,45 +897,62 @@ // Extend a given object with all the properties in passed-in object(s). _.extend = function(obj) { - each(slice.call(arguments, 1), function(source) { - if (source) { - for (var prop in source) { - obj[prop] = source[prop]; + if (!_.isObject(obj)) return obj; + var source, prop; + for (var i = 1, length = arguments.length; i < length; i++) { + source = arguments[i]; + for (prop in source) { + if (hasOwnProperty.call(source, prop)) { + obj[prop] = source[prop]; } } - }); + } return obj; }; // Return a copy of the object only containing the whitelisted properties. - _.pick = function(obj) { - var copy = {}; - var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); - each(keys, function(key) { - if (key in obj) copy[key] = obj[key]; - }); - return copy; + _.pick = function(obj, iteratee, context) { + var result = {}, key; + if (obj == null) return result; + if (_.isFunction(iteratee)) { + iteratee = createCallback(iteratee, context); + for (key in obj) { + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + } else { + var keys = concat.apply([], slice.call(arguments, 1)); + obj = new Object(obj); + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (key in obj) result[key] = obj[key]; + } + } + return result; }; // Return a copy of the object without the blacklisted properties. - _.omit = function(obj) { - var copy = {}; - var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); - for (var key in obj) { - if (!_.contains(keys, key)) copy[key] = obj[key]; + _.omit = function(obj, iteratee, context) { + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + } else { + var keys = _.map(concat.apply([], slice.call(arguments, 1)), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; } - return copy; + return _.pick(obj, iteratee, context); }; // Fill in a given object with default properties. _.defaults = function(obj) { - each(slice.call(arguments, 1), function(source) { - if (source) { - for (var prop in source) { - if (obj[prop] == null) obj[prop] = source[prop]; - } + if (!_.isObject(obj)) return obj; + for (var i = 1, length = arguments.length; i < length; i++) { + var source = arguments[i]; + for (var prop in source) { + if (obj[prop] === void 0) obj[prop] = source[prop]; } - }); + } return obj; }; @@ -824,8 +973,8 @@ // Internal recursive comparison function for `isEqual`. var eq = function(a, b, aStack, bStack) { // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal. - if (a === b) return a !== 0 || 1 / a == 1 / b; + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; // A strict comparison is necessary because `null == undefined`. if (a == null || b == null) return a === b; // Unwrap any wrapped objects. @@ -833,29 +982,27 @@ if (b instanceof _) b = b._wrapped; // Compare `[[Class]]` names. var className = toString.call(a); - if (className != toString.call(b)) return false; + if (className !== toString.call(b)) return false; switch (className) { - // Strings, numbers, dates, and booleans are compared by value. + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') case '[object String]': // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is // equivalent to `new String("5")`. - return a == String(b); + return '' + a === '' + b; case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for - // other numeric values. - return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b); + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; case '[object Date]': case '[object Boolean]': // Coerce dates and booleans to numeric primitive values. Dates are compared by their // millisecond representations. Note that invalid dates with millisecond representations // of `NaN` are not equivalent. - return +a == +b; - // RegExps are compared by their source patterns and flags. - case '[object RegExp]': - return a.source == b.source && - a.global == b.global && - a.multiline == b.multiline && - a.ignoreCase == b.ignoreCase; + return +a === +b; } if (typeof a != 'object' || typeof b != 'object') return false; // Assume equality for cyclic structures. The algorithm for detecting cyclic @@ -864,17 +1011,29 @@ while (length--) { // Linear search. Performance is inversely proportional to the number of // unique nested structures. - if (aStack[length] == a) return bStack[length] == b; + if (aStack[length] === a) return bStack[length] === b; + } + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if ( + aCtor !== bCtor && + // Handle Object.create(x) cases + 'constructor' in a && 'constructor' in b && + !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + ) { + return false; } // Add the first object to the stack of traversed objects. aStack.push(a); bStack.push(b); - var size = 0, result = true; + var size, result; // Recursively compare objects and arrays. - if (className == '[object Array]') { + if (className === '[object Array]') { // Compare array lengths to determine if a deep comparison is necessary. size = a.length; - result = size == b.length; + result = size === b.length; if (result) { // Deep compare the contents, ignoring non-numeric properties. while (size--) { @@ -882,28 +1041,17 @@ } } } else { - // Objects with different constructors are not equivalent, but `Object`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) && - _.isFunction(bCtor) && (bCtor instanceof bCtor))) { - return false; - } // Deep compare objects. - for (var key in a) { - if (_.has(a, key)) { - // Count the expected number of properties. - size++; - // Deep compare each member. - if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break; - } - } - // Ensure that both objects contain the same number of properties. + var keys = _.keys(a), key; + size = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + result = _.keys(b).length === size; if (result) { - for (key in b) { - if (_.has(b, key) && !(size--)) break; + while (size--) { + // Deep compare each member + key = keys[size]; + if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break; } - result = !size; } } // Remove the first object from the stack of traversed objects. @@ -921,7 +1069,7 @@ // An "empty" object has no enumerable own-properties. _.isEmpty = function(obj) { if (obj == null) return true; - if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; + if (_.isArray(obj) || _.isString(obj) || _.isArguments(obj)) return obj.length === 0; for (var key in obj) if (_.has(obj, key)) return false; return true; }; @@ -934,18 +1082,19 @@ // Is a given value an array? // Delegates to ECMA5's native Array.isArray _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) == '[object Array]'; + return toString.call(obj) === '[object Array]'; }; // Is a given variable an object? _.isObject = function(obj) { - return obj === Object(obj); + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; }; // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp. - each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) { + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) { _['is' + name] = function(obj) { - return toString.call(obj) == '[object ' + name + ']'; + return toString.call(obj) === '[object ' + name + ']'; }; }); @@ -953,14 +1102,14 @@ // there isn't any inspectable "Arguments" type. if (!_.isArguments(arguments)) { _.isArguments = function(obj) { - return !!(obj && _.has(obj, 'callee')); + return _.has(obj, 'callee'); }; } - // Optimize `isFunction` if appropriate. - if (typeof (/./) !== 'function') { + // Optimize `isFunction` if appropriate. Work around an IE 11 bug. + if (typeof /./ !== 'function') { _.isFunction = function(obj) { - return typeof obj === 'function'; + return typeof obj == 'function' || false; }; } @@ -971,12 +1120,12 @@ // Is the given value `NaN`? (NaN is the only number which does not equal itself). _.isNaN = function(obj) { - return _.isNumber(obj) && obj != +obj; + return _.isNumber(obj) && obj !== +obj; }; // Is a given value a boolean? _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) == '[object Boolean]'; + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; }; // Is a given value equal to null? @@ -992,7 +1141,7 @@ // Shortcut function for checking if an object has a given property directly // on itself (in other words, not on a prototype). _.has = function(obj, key) { - return hasOwnProperty.call(obj, key); + return obj != null && hasOwnProperty.call(obj, key); }; // Utility Functions @@ -1005,15 +1154,44 @@ return this; }; - // Keep the identity function around for default iterators. + // Keep the identity function around for default iteratees. _.identity = function(value) { return value; }; + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + _.property = function(key) { + return function(obj) { + return obj[key]; + }; + }; + + // Returns a predicate for checking whether an object has a given set of `key:value` pairs. + _.matches = function(attrs) { + var pairs = _.pairs(attrs), length = pairs.length; + return function(obj) { + if (obj == null) return !length; + obj = new Object(obj); + for (var i = 0; i < length; i++) { + var pair = pairs[i], key = pair[0]; + if (pair[1] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + }; + // Run a function **n** times. - _.times = function(n, iterator, context) { - var accum = Array(n); - for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i); + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = createCallback(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); return accum; }; @@ -1026,53 +1204,45 @@ return min + Math.floor(Math.random() * (max - min + 1)); }; - // List of HTML entities for escaping. - var entityMap = { - escape: { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/' - } + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); }; - entityMap.unescape = _.invert(entityMap.escape); - // Regexes containing the keys and values listed immediately above. - var entityRegexes = { - escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'), - unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g') + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' }; + var unescapeMap = _.invert(escapeMap); // Functions for escaping and unescaping strings to/from HTML interpolation. - _.each(['escape', 'unescape'], function(method) { - _[method] = function(string) { - if (string == null) return ''; - return ('' + string).replace(entityRegexes[method], function(match) { - return entityMap[method][match]; - }); + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; }; - }); + // Regexes for identifying a key that needs to be escaped + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); - // If the value of the named property is a function then invoke it; - // otherwise, return it. + // If the value of the named `property` is a function then invoke it with the + // `object` as context; otherwise, return it. _.result = function(object, property) { - if (object == null) return null; + if (object == null) return void 0; var value = object[property]; - return _.isFunction(value) ? value.call(object) : value; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - each(_.functions(obj), function(name){ - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return result.call(this, func.apply(_, args)); - }; - }); + return _.isFunction(value) ? object[property]() : value; }; // Generate a unique integer id (unique within the entire client session). @@ -1103,22 +1273,26 @@ '\\': '\\', '\r': 'r', '\n': 'n', - '\t': 't', '\u2028': 'u2028', '\u2029': 'u2029' }; - var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g; + var escaper = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; // JavaScript micro-templating, similar to John Resig's implementation. // Underscore templating handles arbitrary delimiters, preserves whitespace, // and correctly escapes quotes within interpolated code. - _.template = function(text, data, settings) { - var render; + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; settings = _.defaults({}, settings, _.templateSettings); // Combine delimiters into one regular expression via alternation. - var matcher = new RegExp([ + var matcher = RegExp([ (settings.escape || noMatch).source, (settings.interpolate || noMatch).source, (settings.evaluate || noMatch).source @@ -1128,19 +1302,18 @@ var index = 0; var source = "__p+='"; text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset) - .replace(escaper, function(match) { return '\\' + escapes[match]; }); + source += text.slice(index, offset).replace(escaper, escapeChar); + index = offset + match.length; if (escape) { source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } - if (interpolate) { + } else if (interpolate) { source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } - if (evaluate) { + } else if (evaluate) { source += "';\n" + evaluate + "\n__p+='"; } - index = offset + match.length; + + // Adobe VMs need the match returned to produce the correct offest. return match; }); source += "';\n"; @@ -1150,29 +1323,31 @@ source = "var __t,__p='',__j=Array.prototype.join," + "print=function(){__p+=__j.call(arguments,'');};\n" + - source + "return __p;\n"; + source + 'return __p;\n'; try { - render = new Function(settings.variable || 'obj', '_', source); + var render = new Function(settings.variable || 'obj', '_', source); } catch (e) { e.source = source; throw e; } - if (data) return render(data, _); var template = function(data) { return render.call(this, data, _); }; - // Provide the compiled function source as a convenience for precompilation. - template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}'; + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; return template; }; - // Add a "chain" function, which will delegate to the wrapper. + // Add a "chain" function. Start chaining a wrapped Underscore object. _.chain = function(obj) { - return _(obj).chain(); + var instance = _(obj); + instance._chain = true; + return instance; }; // OOP @@ -1186,41 +1361,55 @@ return this._chain ? _(obj).chain() : obj; }; + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result.call(this, func.apply(_, args)); + }; + }); + }; + // Add all of the Underscore functions to the wrapper object. _.mixin(_); // Add all mutator Array functions to the wrapper. - each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { var method = ArrayProto[name]; _.prototype[name] = function() { var obj = this._wrapped; method.apply(obj, arguments); - if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0]; + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; return result.call(this, obj); }; }); // Add all accessor Array functions to the wrapper. - each(['concat', 'join', 'slice'], function(name) { + _.each(['concat', 'join', 'slice'], function(name) { var method = ArrayProto[name]; _.prototype[name] = function() { return result.call(this, method.apply(this._wrapped, arguments)); }; }); - _.extend(_.prototype, { - - // Start chaining a wrapped Underscore object. - chain: function() { - this._chain = true; - return this; - }, - - // Extracts the result from a wrapped and chained object. - value: function() { - return this._wrapped; - } - - }); - -}).call(this); + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (typeof define === 'function' && define.amd) { + define('underscore', [], function() { + return _; + }); + } +}.call(this)); diff --git a/package.json b/package.json index 0fd06f0..393fa0c 100644 --- a/package.json +++ b/package.json @@ -12,14 +12,14 @@ }, "dependencies": { - "restify" : "2.5.x" - , "restify-oauth2" : "2.x" + "restify" : "2.8.x" + , "restify-oauth2" : "4.x" , "cluster" : "0.7.7" , "underscore": "1.x" - , "mongoose": "3.6.x" - , "bcrypt" : "0.7.5" - , "mongoose-validator" : "0.2.x" - , "redis" : "0.8.x" - , "redis-url" : "0.1.0" + , "mongoose": "3.8.x" + , "bcrypt" : "0.8.x" + , "mongoose-validator" : "1.0.x" + , "redis" : "0.12.x" + , "redis-url" : "0.2.0" } } \ No newline at end of file