text: /*
   * Copyright 2014 The Closure Compiler Authors
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  /**
   * @fileoverview NodeJS built-ins.
   * @externs
   */
  
  /** @const {string} */
  var __filename;
  
  /** @const {string} */
  var __dirname;
  
  /**
   * @param {string} name
   * @return {?}
   */
  function require(name) {}
  
  // http://nodejs.org/api/timers.html
  
  /**
   * The ID returned by setTimeout.
   * @constructor
   */
  function TimeoutId() {}
  
  /** @see http://nodejs.org/api/timers.html#timers_unref */
  TimeoutId.prototype.unref = function() {};
  
  /** @see http://nodejs.org/api/timers.html#timers_ref */
  TimeoutId.prototype.ref = function() {};
  
  
  /**
   * @param {Function} fn
   * @param {number} ms
   * @param {...?} var_args
   * @return {TimeoutId}
   * @see http://nodejs.org/api/timers.html#timers_settimeout_callback_delay_arg
   */
  function setTimeout(fn, ms, var_args) {}
  
  /**
   * @param {TimeoutId} id
   * @see http://nodejs.org/api/timers.html#timers_cleartimeout_timeoutid
   */
  function clearTimeout(id) {}
  
  /**
   * @param {Function} fn
   * @param {number} ms
   * @param {...?} var_args
   * @return {TimeoutId}
   * @see http://nodejs.org/api/timers.html#timers_setinterval_callback_delay_arg
   */
  function setInterval(fn, ms, var_args) {}
  
  /**
   * @param {TimeoutId} id
   * @see http://nodejs.org/api/timers.html#timers_clearinterval_intervalid
   */
  function clearInterval(id) {}
  
  /**
   * The ID returned by setImmediate.
   * @constructor
   */
  function ImmediateId() {}
  
  /**
   * @param {Function} fn
   * @param {...?} var_args
   * @return {ImmediateId}
   * @see http://nodejs.org/api/timers.html#timers_setimmediate_callback_delay_arg
   */
  function setImmediate(fn, var_args) {}
  
  /**
   * @param {ImmediateId} id
   * @see http://nodejs.org/api/timers.html#timers_clearimmediate_immediateid
   */
  function clearImmediate(id) {}
  
  
  // http://nodejs.org/api/process.html
  
  /** @constructor */
  function Process() {}
  
  /**
   * @param {Function} fn
   * @see http://nodejs.org/api/process.html#process_process_nexttick_callback
   */
  Process.prototype.nextTick = function (fn) {};
  
  /** @const {Process} */
  var process;
  
  /**
   * @constructor
   * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/Console.idl
   * @see http://trac.webkit.org/browser/trunk/Source/WebCore/page/Console.cpp
   */
  function Console() {};
  
  /**
   * @param {*} condition
   * @param {...*} var_args
   */
  Console.prototype.assert = function(condition, var_args) {};
  
  /**
   * @param {...*} var_args
   */
  Console.prototype.error = function(var_args) {};
  
  /**
   * @param {...*} var_args
   */
  Console.prototype.info = function(var_args) {};
  
  /**
   * @param {...*} var_args
   */
  Console.prototype.log = function(var_args) {};
  
  /**
   * @param {...*} var_args
   */
  Console.prototype.warn = function(var_args) {};
  
  /**
   * @param {...*} var_args
   */
  Console.prototype.debug = function(var_args) {};
  
  /**
   * @param {*} value
   */
  Console.prototype.dir = function(value) {};
  
  /**
   * @param {...*} var_args
   */
  Console.prototype.dirxml = function(var_args) {};
  
  /**
   * @param {!Object} data
   * @param {*=} opt_columns
   */
  Console.prototype.table = function(data, opt_columns) {};
  
  /**
   * @return {undefined}
   */
  Console.prototype.trace = function() {};
  
  /**
   * @param {*} value
   */
  Console.prototype.count = function(value) {};
  
  /**
   * @param {*} value
   */
  Console.prototype.markTimeline = function(value) {};
  
  /**
   * @param {string=} opt_title
   */
  Console.prototype.profile = function(opt_title) {};
  
  /**
   * @param {string=} opt_title
   */
  Console.prototype.profileEnd = function(opt_title) {};
  
  /**
   * @param {string} name
   */
  Console.prototype.time = function(name) {};
  
  /**
   * @param {string} name
   */
  Console.prototype.timeEnd = function(name) {};
  
  /**
   * @param {*} value
   */
  Console.prototype.timeStamp = function(value) {};
  
  /**
   * @param {...*} var_args
   */
  Console.prototype.group = function(var_args) {};
  
  /**
   * @param {...*} var_args
   */
  Console.prototype.groupCollapsed = function(var_args) {};
  
  /** @return {void} */
  Console.prototype.groupEnd = function() {};
  
  /** @return {void} */
  Console.prototype.clear = function() {};
  
  /**
   * @type {!Console}
   */
  var console;
  
  
  
  /**
   * @param {...*} var_args
   * @constructor
   * @nosideeffects
   */
  var Buffer = function (var_args) {};
  
  /**
   * @param {string} encoding
   * @return {boolean}
   */
  Buffer.isEncoding;
  
  /**
   * @param {*} obj
   * @return {boolean}
   * @nosideeffects
   */
  Buffer.isBuffer;
  
  /**
   * @param {string} string
   * @param {string=} encoding
   * @return {number}
   * @nosideeffects
   */
  Buffer.byteLength;
  
  /**
   * @param {Array.<Buffer>} list
   * @param {number=} totalLength
   * @return {Buffer}
   * @nosideeffects
   */
  Buffer.concat;
  
  /**
   * @param {number} offset
   * @return {*}
   */
  Buffer.prototype.get;
  
  /**
   * @param {number} offset
   * @param {*} v
   */
  Buffer.prototype.set;
  
  /**
   * @param {string} string
   * @param {number|string=} offset
   * @param {number|string=} length
   * @param {number|string=} encoding
   * @return {*}
   */
  Buffer.prototype.write;
  
  /**
   * @return {Array}
   */
  Buffer.prototype.toJSON;
  
  /**
   * @type {number}
   */
  Buffer.prototype.length;
  
  /**
   * @param {Buffer} targetBuffer
   * @param {number=} targetStart
   * @param {number=} sourceStart
   * @param {number=} sourceEnd
   * @return {Buffer}
   */
  Buffer.prototype.copy;
  
  /**
   * @param {number=} start
   * @param {number=} end
   * @return {Buffer}
   * @nosideeffects
   */
  Buffer.prototype.slice;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readUInt8;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readUInt16LE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readUInt16BE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readUInt32LE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readUInt32BE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readInt8;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readInt16LE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readInt16BE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readInt32LE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readInt32BE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readFloatLE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readFloatBE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readDoubleLE;
  
  /**
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.readDoubleBE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeUInt8;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeUInt16LE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeUInt16BE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeUInt32LE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeUInt32BE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeInt8;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeInt16LE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeInt16BE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeInt32LE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeInt32BE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeFloatLE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeFloatBE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeDoubleLE;
  
  /**
   * @param {number} value
   * @param {number} offset
   * @param {boolean=} noAssert
   * @return {number}
   */
  Buffer.prototype.writeDoubleBE;
  
  /**
   * @param {*} value
   * @param {number=} offset
   * @param {number=} end
   * @return {void}
   */
  Buffer.prototype.fill;
  
  /**
   * @param {string=} encoding
   * @param {number=} start
   * @param {number=} end
   * @return {string}
   * @nosideeffects
   */
  Buffer.prototype.toString;
  
  /**
   * @type {number}
   */
  Buffer.INSPECT_MAX_BYTES = 50;
  
  //
  // Legacy
  //
  
  /**
   * @param {number=} start
   * @param {number=} end
   * @return {Buffer}
   */
  Buffer.prototype.utf8Slice;
  
  /**
   * @param {number=} start
   * @param {number=} end
   * @return {Buffer}
   */
  Buffer.prototype.binarySlice;
  
  /**
   * @param {number=} start
   * @param {number=} end
   * @return {Buffer}
   */
  Buffer.prototype.asciiSlice;
  
  /**
   * @param {string} string
   * @param {number=} offset
   * @return {Buffer}
   */
  Buffer.prototype.utf8Write;
  
  /**
   * @param {string} string
   * @param {number=} offset
   * @return {Buffer}
   */
  Buffer.prototype.binaryWrite;
  
  /**
   * @param {string} string
   * @param {number=} offset
   * @return {Buffer}
   */
  Buffer.prototype.asciiWrite;
  