/* automatically generated by JSCoverage - do not edit */
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
if (! _$jscoverage['express 3.0.6/utils.js']) {
  _$jscoverage['express 3.0.6/utils.js'] = [];
  _$jscoverage['express 3.0.6/utils.js'][6] = 0;
  _$jscoverage['express 3.0.6/utils.js'][17] = 0;
  _$jscoverage['express 3.0.6/utils.js'][18] = 0;
  _$jscoverage['express 3.0.6/utils.js'][31] = 0;
  _$jscoverage['express 3.0.6/utils.js'][32] = 0;
  _$jscoverage['express 3.0.6/utils.js'][34] = 0;
  _$jscoverage['express 3.0.6/utils.js'][35] = 0;
  _$jscoverage['express 3.0.6/utils.js'][36] = 0;
  _$jscoverage['express 3.0.6/utils.js'][37] = 0;
  _$jscoverage['express 3.0.6/utils.js'][39] = 0;
  _$jscoverage['express 3.0.6/utils.js'][50] = 0;
  _$jscoverage['express 3.0.6/utils.js'][51] = 0;
  _$jscoverage['express 3.0.6/utils.js'][52] = 0;
  _$jscoverage['express 3.0.6/utils.js'][63] = 0;
  _$jscoverage['express 3.0.6/utils.js'][64] = 0;
  _$jscoverage['express 3.0.6/utils.js'][66] = 0;
  _$jscoverage['express 3.0.6/utils.js'][67] = 0;
  _$jscoverage['express 3.0.6/utils.js'][68] = 0;
  _$jscoverage['express 3.0.6/utils.js'][70] = 0;
  _$jscoverage['express 3.0.6/utils.js'][73] = 0;
  _$jscoverage['express 3.0.6/utils.js'][84] = 0;
  _$jscoverage['express 3.0.6/utils.js'][85] = 0;
  _$jscoverage['express 3.0.6/utils.js'][96] = 0;
  _$jscoverage['express 3.0.6/utils.js'][97] = 0;
  _$jscoverage['express 3.0.6/utils.js'][99] = 0;
  _$jscoverage['express 3.0.6/utils.js'][100] = 0;
  _$jscoverage['express 3.0.6/utils.js'][105] = 0;
  _$jscoverage['express 3.0.6/utils.js'][117] = 0;
  _$jscoverage['express 3.0.6/utils.js'][119] = 0;
  _$jscoverage['express 3.0.6/utils.js'][122] = 0;
  _$jscoverage['express 3.0.6/utils.js'][126] = 0;
  _$jscoverage['express 3.0.6/utils.js'][127] = 0;
  _$jscoverage['express 3.0.6/utils.js'][128] = 0;
  _$jscoverage['express 3.0.6/utils.js'][129] = 0;
  _$jscoverage['express 3.0.6/utils.js'][145] = 0;
  _$jscoverage['express 3.0.6/utils.js'][146] = 0;
  _$jscoverage['express 3.0.6/utils.js'][147] = 0;
  _$jscoverage['express 3.0.6/utils.js'][159] = 0;
  _$jscoverage['express 3.0.6/utils.js'][160] = 0;
  _$jscoverage['express 3.0.6/utils.js'][176] = 0;
  _$jscoverage['express 3.0.6/utils.js'][177] = 0;
  _$jscoverage['express 3.0.6/utils.js'][180] = 0;
  _$jscoverage['express 3.0.6/utils.js'][181] = 0;
  _$jscoverage['express 3.0.6/utils.js'][182] = 0;
  _$jscoverage['express 3.0.6/utils.js'][183] = 0;
  _$jscoverage['express 3.0.6/utils.js'][197] = 0;
  _$jscoverage['express 3.0.6/utils.js'][198] = 0;
  _$jscoverage['express 3.0.6/utils.js'][202] = 0;
  _$jscoverage['express 3.0.6/utils.js'][205] = 0;
  _$jscoverage['express 3.0.6/utils.js'][218] = 0;
  _$jscoverage['express 3.0.6/utils.js'][219] = 0;
  _$jscoverage['express 3.0.6/utils.js'][222] = 0;
  _$jscoverage['express 3.0.6/utils.js'][226] = 0;
  _$jscoverage['express 3.0.6/utils.js'][237] = 0;
  _$jscoverage['express 3.0.6/utils.js'][238] = 0;
  _$jscoverage['express 3.0.6/utils.js'][262] = 0;
  _$jscoverage['express 3.0.6/utils.js'][263] = 0;
  _$jscoverage['express 3.0.6/utils.js'][264] = 0;
  _$jscoverage['express 3.0.6/utils.js'][265] = 0;
  _$jscoverage['express 3.0.6/utils.js'][269] = 0;
  _$jscoverage['express 3.0.6/utils.js'][270] = 0;
  _$jscoverage['express 3.0.6/utils.js'][271] = 0;
  _$jscoverage['express 3.0.6/utils.js'][281] = 0;
}
_$jscoverage['express 3.0.6/utils.js'][6]++;
var mime = require("connect").mime, crc32 = require("buffer-crc32");
_$jscoverage['express 3.0.6/utils.js'][17]++;
exports.etag = (function (body) {
  _$jscoverage['express 3.0.6/utils.js'][18]++;
  return "\"" + crc32.signed(body) + "\"";
});
_$jscoverage['express 3.0.6/utils.js'][31]++;
exports.locals = (function (obj) {
  _$jscoverage['express 3.0.6/utils.js'][32]++;
  obj.viewCallbacks = obj.viewCallbacks || [];
  _$jscoverage['express 3.0.6/utils.js'][34]++;
  function locals(obj) {
    _$jscoverage['express 3.0.6/utils.js'][35]++;
    for (var key in obj) {
      _$jscoverage['express 3.0.6/utils.js'][35]++;
      locals[key] = obj[key];
}
    _$jscoverage['express 3.0.6/utils.js'][36]++;
    return obj;
}
  _$jscoverage['express 3.0.6/utils.js'][37]++;
  ;
  _$jscoverage['express 3.0.6/utils.js'][39]++;
  return locals;
});
_$jscoverage['express 3.0.6/utils.js'][50]++;
exports.isAbsolute = (function (path) {
  _$jscoverage['express 3.0.6/utils.js'][51]++;
  if ("/" == path[0]) {
    _$jscoverage['express 3.0.6/utils.js'][51]++;
    return true;
  }
  _$jscoverage['express 3.0.6/utils.js'][52]++;
  if (":" == path[1] && "\\" == path[2]) {
    _$jscoverage['express 3.0.6/utils.js'][52]++;
    return true;
  }
});
_$jscoverage['express 3.0.6/utils.js'][63]++;
exports.flatten = (function (arr, ret) {
  _$jscoverage['express 3.0.6/utils.js'][64]++;
  var ret = ret || [], len = arr.length;
  _$jscoverage['express 3.0.6/utils.js'][66]++;
  for (var i = 0; i < len; ++i) {
    _$jscoverage['express 3.0.6/utils.js'][67]++;
    if (Array.isArray(arr[i])) {
      _$jscoverage['express 3.0.6/utils.js'][68]++;
      exports.flatten(arr[i], ret);
    }
    else {
      _$jscoverage['express 3.0.6/utils.js'][70]++;
      ret.push(arr[i]);
    }
}
  _$jscoverage['express 3.0.6/utils.js'][73]++;
  return ret;
});
_$jscoverage['express 3.0.6/utils.js'][84]++;
exports.normalizeType = (function (type) {
  _$jscoverage['express 3.0.6/utils.js'][85]++;
  return ~ type.indexOf("/")? type: mime.lookup(type);
});
_$jscoverage['express 3.0.6/utils.js'][96]++;
exports.normalizeTypes = (function (types) {
  _$jscoverage['express 3.0.6/utils.js'][97]++;
  var ret = [];
  _$jscoverage['express 3.0.6/utils.js'][99]++;
  for (var i = 0; i < types.length; ++i) {
    _$jscoverage['express 3.0.6/utils.js'][100]++;
    ret.push(~ types[i].indexOf("/")? types[i]: mime.lookup(types[i]));
}
  _$jscoverage['express 3.0.6/utils.js'][105]++;
  return ret;
});
_$jscoverage['express 3.0.6/utils.js'][117]++;
exports.acceptsArray = (function (types, str) {
  _$jscoverage['express 3.0.6/utils.js'][119]++;
  if (! str) {
    _$jscoverage['express 3.0.6/utils.js'][119]++;
    return types[0];
  }
  _$jscoverage['express 3.0.6/utils.js'][122]++;
  var accepted = exports.parseAccept(str), normalized = exports.normalizeTypes(types), len = accepted.length;
  _$jscoverage['express 3.0.6/utils.js'][126]++;
  for (var i = 0; i < len; ++i) {
    _$jscoverage['express 3.0.6/utils.js'][127]++;
    for (var j = 0, jlen = types.length; j < jlen; ++j) {
      _$jscoverage['express 3.0.6/utils.js'][128]++;
      if (exports.accept(normalized[j].split("/"), accepted[i])) {
        _$jscoverage['express 3.0.6/utils.js'][129]++;
        return types[j];
      }
}
}
});
_$jscoverage['express 3.0.6/utils.js'][145]++;
exports.accepts = (function (type, str) {
  _$jscoverage['express 3.0.6/utils.js'][146]++;
  if ("string" == typeof type) {
    _$jscoverage['express 3.0.6/utils.js'][146]++;
    type = type.split(/ *, */);
  }
  _$jscoverage['express 3.0.6/utils.js'][147]++;
  return exports.acceptsArray(type, str);
});
_$jscoverage['express 3.0.6/utils.js'][159]++;
exports.accept = (function (type, other) {
  _$jscoverage['express 3.0.6/utils.js'][160]++;
  return (type[0] == other.type || "*" == other.type) && (type[1] == other.subtype || "*" == other.subtype);
});
_$jscoverage['express 3.0.6/utils.js'][176]++;
exports.parseAccept = (function (str) {
  _$jscoverage['express 3.0.6/utils.js'][177]++;
  return exports.parseQuality(str).map((function (obj) {
  _$jscoverage['express 3.0.6/utils.js'][180]++;
  var parts = obj.value.split("/");
  _$jscoverage['express 3.0.6/utils.js'][181]++;
  obj.type = parts[0];
  _$jscoverage['express 3.0.6/utils.js'][182]++;
  obj.subtype = parts[1];
  _$jscoverage['express 3.0.6/utils.js'][183]++;
  return obj;
}));
});
_$jscoverage['express 3.0.6/utils.js'][197]++;
exports.parseQuality = (function (str) {
  _$jscoverage['express 3.0.6/utils.js'][198]++;
  return str.split(/ *, */).map(quality).filter((function (obj) {
  _$jscoverage['express 3.0.6/utils.js'][202]++;
  return obj.quality;
})).sort((function (a, b) {
  _$jscoverage['express 3.0.6/utils.js'][205]++;
  return b.quality - a.quality;
}));
});
_$jscoverage['express 3.0.6/utils.js'][218]++;
function quality(str) {
  _$jscoverage['express 3.0.6/utils.js'][219]++;
  var parts = str.split(/ *; */), val = parts[0];
  _$jscoverage['express 3.0.6/utils.js'][222]++;
  var q = parts[1]? parseFloat(parts[1].split(/ *= */)[1]): 1;
  _$jscoverage['express 3.0.6/utils.js'][226]++;
  return ({value: val, quality: q});
}
_$jscoverage['express 3.0.6/utils.js'][237]++;
exports.escape = (function (html) {
  _$jscoverage['express 3.0.6/utils.js'][238]++;
  return String(html).replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
});
_$jscoverage['express 3.0.6/utils.js'][262]++;
exports.pathRegexp = (function (path, keys, sensitive, strict) {
  _$jscoverage['express 3.0.6/utils.js'][263]++;
  if (path instanceof RegExp) {
    _$jscoverage['express 3.0.6/utils.js'][263]++;
    return path;
  }
  _$jscoverage['express 3.0.6/utils.js'][264]++;
  if (Array.isArray(path)) {
    _$jscoverage['express 3.0.6/utils.js'][264]++;
    path = "(" + path.join("|") + ")";
  }
  _$jscoverage['express 3.0.6/utils.js'][265]++;
  path = path.concat(strict? "": "/?").replace(/\/\(/g, "(?:/").replace(/(\/)?(\.)?:(\w+)(?:(\(.*?\)))?(\?)?(\*)?/g, (function (_, slash, format, key, capture, optional, star) {
  _$jscoverage['express 3.0.6/utils.js'][269]++;
  keys.push({name: key, optional: ! ! optional});
  _$jscoverage['express 3.0.6/utils.js'][270]++;
  slash = slash || "";
  _$jscoverage['express 3.0.6/utils.js'][271]++;
  return "" + (optional? "": slash) + "(?:" + (optional? slash: "") + (format || "") + (capture || (format && "([^/.]+?)" || "([^/]+?)")) + ")" + (optional || "") + (star? "(/*)?": "");
})).replace(/([\/.])/g, "\\$1").replace(/\*/g, "(.*)");
  _$jscoverage['express 3.0.6/utils.js'][281]++;
  return new RegExp("^" + path + "$", sensitive? "": "i");
});
_$jscoverage['express 3.0.6/utils.js'].source = ["","/**"," * 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){","  obj.viewCallbacks = obj.viewCallbacks || [];","","  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] &amp;&amp; '\\\\' == 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 &lt; 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 &lt; 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 &lt; len; ++i) {","    for (var j = 0, jlen = types.length; j &lt; 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)","    &amp;&amp; (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(/&amp;/g, '&amp;amp;')","    .replace(/\"/g, '&amp;quot;')","    .replace(/&lt;/g, '&amp;lt;')","    .replace(/&gt;/g, '&amp;gt;');","};","","/**"," * 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 &amp;&amp; '([^/.]+?)' || '([^/]+?)')) + ')'","        + (optional || '')","        + (star ? '(/*)?' : '');","    })","    .replace(/([\\/.])/g, '\\\\$1')","    .replace(/\\*/g, '(.*)');","  return new RegExp('^' + path + '$', sensitive ? '' : 'i');","}"];
