UNPKG

abstract

Version:

Abstraction of JavaScript Objects.

1,077 lines 70.4 kB
/* automatically generated by JSCoverage - do not edit */
if (typeof _$jscoverage === 'undefined') _$jscoverage = {};
if (! _$jscoverage['normalize.js']) {
  _$jscoverage['normalize.js'] = [];
  _$jscoverage['normalize.js'][42] = 0;
  _$jscoverage['normalize.js'][44] = 0;
  _$jscoverage['normalize.js'][53] = 0;
  _$jscoverage['normalize.js'][54] = 0;
  _$jscoverage['normalize.js'][55] = 0;
  _$jscoverage['normalize.js'][59] = 0;
  _$jscoverage['normalize.js'][60] = 0;
  _$jscoverage['normalize.js'][61] = 0;
  _$jscoverage['normalize.js'][65] = 0;
  _$jscoverage['normalize.js'][76] = 0;
  _$jscoverage['normalize.js'][89] = 0;
  _$jscoverage['normalize.js'][90] = 0;
  _$jscoverage['normalize.js'][92] = 0;
  _$jscoverage['normalize.js'][93] = 0;
  _$jscoverage['normalize.js'][94] = 0;
  _$jscoverage['normalize.js'][97] = 0;
  _$jscoverage['normalize.js'][112] = 0;
  _$jscoverage['normalize.js'][116] = 0;
  _$jscoverage['normalize.js'][118] = 0;
  _$jscoverage['normalize.js'][119] = 0;
  _$jscoverage['normalize.js'][120] = 0;
  _$jscoverage['normalize.js'][122] = 0;
  _$jscoverage['normalize.js'][126] = 0;
  _$jscoverage['normalize.js'][139] = 0;
  _$jscoverage['normalize.js'][141] = 0;
  _$jscoverage['normalize.js'][142] = 0;
  _$jscoverage['normalize.js'][146] = 0;
  _$jscoverage['normalize.js'][158] = 0;
  _$jscoverage['normalize.js'][159] = 0;
  _$jscoverage['normalize.js'][161] = 0;
  _$jscoverage['normalize.js'][162] = 0;
  _$jscoverage['normalize.js'][163] = 0;
  _$jscoverage['normalize.js'][168] = 0;
  _$jscoverage['normalize.js'][172] = 0;
  _$jscoverage['normalize.js'][173] = 0;
  _$jscoverage['normalize.js'][174] = 0;
  _$jscoverage['normalize.js'][176] = 0;
  _$jscoverage['normalize.js'][189] = 0;
  _$jscoverage['normalize.js'][190] = 0;
  _$jscoverage['normalize.js'][193] = 0;
  _$jscoverage['normalize.js'][194] = 0;
  _$jscoverage['normalize.js'][207] = 0;
  _$jscoverage['normalize.js'][209] = 0;
  _$jscoverage['normalize.js'][210] = 0;
  _$jscoverage['normalize.js'][213] = 0;
  _$jscoverage['normalize.js'][223] = 0;
  _$jscoverage['normalize.js'][224] = 0;
  _$jscoverage['normalize.js'][234] = 0;
  _$jscoverage['normalize.js'][245] = 0;
  _$jscoverage['normalize.js'][246] = 0;
  _$jscoverage['normalize.js'][249] = 0;
  _$jscoverage['normalize.js'][263] = 0;
  _$jscoverage['normalize.js'][265] = 0;
  _$jscoverage['normalize.js'][266] = 0;
  _$jscoverage['normalize.js'][269] = 0;
  _$jscoverage['normalize.js'][270] = 0;
  _$jscoverage['normalize.js'][272] = 0;
  _$jscoverage['normalize.js'][289] = 0;
  _$jscoverage['normalize.js'][293] = 0;
  _$jscoverage['normalize.js'][294] = 0;
  _$jscoverage['normalize.js'][295] = 0;
  _$jscoverage['normalize.js'][296] = 0;
  _$jscoverage['normalize.js'][297] = 0;
  _$jscoverage['normalize.js'][301] = 0;
  _$jscoverage['normalize.js'][313] = 0;
  _$jscoverage['normalize.js'][316] = 0;
  _$jscoverage['normalize.js'][317] = 0;
  _$jscoverage['normalize.js'][318] = 0;
  _$jscoverage['normalize.js'][319] = 0;
  _$jscoverage['normalize.js'][320] = 0;
  _$jscoverage['normalize.js'][322] = 0;
  _$jscoverage['normalize.js'][323] = 0;
  _$jscoverage['normalize.js'][324] = 0;
  _$jscoverage['normalize.js'][327] = 0;
  _$jscoverage['normalize.js'][343] = 0;
  _$jscoverage['normalize.js'][347] = 0;
  _$jscoverage['normalize.js'][349] = 0;
  _$jscoverage['normalize.js'][351] = 0;
  _$jscoverage['normalize.js'][352] = 0;
  _$jscoverage['normalize.js'][357] = 0;
  _$jscoverage['normalize.js'][358] = 0;
  _$jscoverage['normalize.js'][362] = 0;
  _$jscoverage['normalize.js'][373] = 0;
  _$jscoverage['normalize.js'][374] = 0;
  _$jscoverage['normalize.js'][377] = 0;
  _$jscoverage['normalize.js'][378] = 0;
  _$jscoverage['normalize.js'][381] = 0;
  _$jscoverage['normalize.js'][392] = 0;
  _$jscoverage['normalize.js'][393] = 0;
  _$jscoverage['normalize.js'][396] = 0;
  _$jscoverage['normalize.js'][397] = 0;
  _$jscoverage['normalize.js'][398] = 0;
  _$jscoverage['normalize.js'][399] = 0;
  _$jscoverage['normalize.js'][403] = 0;
  _$jscoverage['normalize.js'][416] = 0;
  _$jscoverage['normalize.js'][420] = 0;
  _$jscoverage['normalize.js'][421] = 0;
  _$jscoverage['normalize.js'][425] = 0;
  _$jscoverage['normalize.js'][428] = 0;
  _$jscoverage['normalize.js'][429] = 0;
  _$jscoverage['normalize.js'][430] = 0;
  _$jscoverage['normalize.js'][431] = 0;
  _$jscoverage['normalize.js'][434] = 0;
  _$jscoverage['normalize.js'][435] = 0;
  _$jscoverage['normalize.js'][438] = 0;
  _$jscoverage['normalize.js'][439] = 0;
  _$jscoverage['normalize.js'][440] = 0;
  _$jscoverage['normalize.js'][441] = 0;
  _$jscoverage['normalize.js'][442] = 0;
  _$jscoverage['normalize.js'][443] = 0;
  _$jscoverage['normalize.js'][444] = 0;
  _$jscoverage['normalize.js'][445] = 0;
  _$jscoverage['normalize.js'][446] = 0;
  _$jscoverage['normalize.js'][447] = 0;
  _$jscoverage['normalize.js'][449] = 0;
  _$jscoverage['normalize.js'][450] = 0;
  _$jscoverage['normalize.js'][451] = 0;
  _$jscoverage['normalize.js'][453] = 0;
  _$jscoverage['normalize.js'][454] = 0;
  _$jscoverage['normalize.js'][455] = 0;
  _$jscoverage['normalize.js'][456] = 0;
  _$jscoverage['normalize.js'][457] = 0;
  _$jscoverage['normalize.js'][458] = 0;
  _$jscoverage['normalize.js'][461] = 0;
  _$jscoverage['normalize.js'][464] = 0;
  _$jscoverage['normalize.js'][465] = 0;
  _$jscoverage['normalize.js'][466] = 0;
  _$jscoverage['normalize.js'][467] = 0;
  _$jscoverage['normalize.js'][469] = 0;
  _$jscoverage['normalize.js'][470] = 0;
  _$jscoverage['normalize.js'][471] = 0;
  _$jscoverage['normalize.js'][472] = 0;
  _$jscoverage['normalize.js'][476] = 0;
  _$jscoverage['normalize.js'][477] = 0;
  _$jscoverage['normalize.js'][478] = 0;
  _$jscoverage['normalize.js'][479] = 0;
  _$jscoverage['normalize.js'][480] = 0;
  _$jscoverage['normalize.js'][481] = 0;
  _$jscoverage['normalize.js'][482] = 0;
  _$jscoverage['normalize.js'][486] = 0;
  _$jscoverage['normalize.js'][487] = 0;
  _$jscoverage['normalize.js'][491] = 0;
  _$jscoverage['normalize.js'][493] = 0;
  _$jscoverage['normalize.js'][494] = 0;
  _$jscoverage['normalize.js'][495] = 0;
  _$jscoverage['normalize.js'][509] = 0;
  _$jscoverage['normalize.js'][510] = 0;
  _$jscoverage['normalize.js'][512] = 0;
  _$jscoverage['normalize.js'][513] = 0;
  _$jscoverage['normalize.js'][514] = 0;
  _$jscoverage['normalize.js'][517] = 0;
  _$jscoverage['normalize.js'][527] = 0;
  _$jscoverage['normalize.js'][529] = 0;
  _$jscoverage['normalize.js'][531] = 0;
  _$jscoverage['normalize.js'][532] = 0;
  _$jscoverage['normalize.js'][534] = 0;
  _$jscoverage['normalize.js'][535] = 0;
  _$jscoverage['normalize.js'][537] = 0;
  _$jscoverage['normalize.js'][543] = 0;
  _$jscoverage['normalize.js'][553] = 0;
  _$jscoverage['normalize.js'][561] = 0;
  _$jscoverage['normalize.js'][562] = 0;
  _$jscoverage['normalize.js'][573] = 0;
  _$jscoverage['normalize.js'][584] = 0;
  _$jscoverage['normalize.js'][585] = 0;
  _$jscoverage['normalize.js'][588] = 0;
  _$jscoverage['normalize.js'][590] = 0;
  _$jscoverage['normalize.js'][592] = 0;
  _$jscoverage['normalize.js'][594] = 0;
  _$jscoverage['normalize.js'][596] = 0;
  _$jscoverage['normalize.js'][605] = 0;
  _$jscoverage['normalize.js'][615] = 0;
  _$jscoverage['normalize.js'][617] = 0;
  _$jscoverage['normalize.js'][619] = 0;
  _$jscoverage['normalize.js'][628] = 0;
  _$jscoverage['normalize.js'][630] = 0;
  _$jscoverage['normalize.js'][632] = 0;
  _$jscoverage['normalize.js'][633] = 0;
  _$jscoverage['normalize.js'][636] = 0;
  _$jscoverage['normalize.js'][637] = 0;
  _$jscoverage['normalize.js'][640] = 0;
  _$jscoverage['normalize.js'][642] = 0;
  _$jscoverage['normalize.js'][643] = 0;
  _$jscoverage['normalize.js'][645] = 0;
  _$jscoverage['normalize.js'][652] = 0;
  _$jscoverage['normalize.js'][661] = 0;
  _$jscoverage['normalize.js'][663] = 0;
  _$jscoverage['normalize.js'][664] = 0;
  _$jscoverage['normalize.js'][673] = 0;
  _$jscoverage['normalize.js'][675] = 0;
  _$jscoverage['normalize.js'][676] = 0;
  _$jscoverage['normalize.js'][685] = 0;
  _$jscoverage['normalize.js'][688] = 0;
  _$jscoverage['normalize.js'][697] = 0;
  _$jscoverage['normalize.js'][700] = 0;
  _$jscoverage['normalize.js'][711] = 0;
  _$jscoverage['normalize.js'][713] = 0;
  _$jscoverage['normalize.js'][714] = 0;
  _$jscoverage['normalize.js'][717] = 0;
  _$jscoverage['normalize.js'][719] = 0;
  _$jscoverage['normalize.js'][721] = 0;
  _$jscoverage['normalize.js'][722] = 0;
  _$jscoverage['normalize.js'][724] = 0;
  _$jscoverage['normalize.js'][729] = 0;
  _$jscoverage['normalize.js'][740] = 0;
  _$jscoverage['normalize.js'][745] = 0;
  _$jscoverage['normalize.js'][747] = 0;
  _$jscoverage['normalize.js'][748] = 0;
  _$jscoverage['normalize.js'][750] = 0;
  _$jscoverage['normalize.js'][752] = 0;
  _$jscoverage['normalize.js'][754] = 0;
  _$jscoverage['normalize.js'][755] = 0;
  _$jscoverage['normalize.js'][757] = 0;
  _$jscoverage['normalize.js'][759] = 0;
  _$jscoverage['normalize.js'][760] = 0;
  _$jscoverage['normalize.js'][762] = 0;
  _$jscoverage['normalize.js'][768] = 0;
  _$jscoverage['normalize.js'][770] = 0;
  _$jscoverage['normalize.js'][781] = 0;
  _$jscoverage['normalize.js'][789] = 0;
  _$jscoverage['normalize.js'][791] = 0;
  _$jscoverage['normalize.js'][793] = 0;
  _$jscoverage['normalize.js'][795] = 0;
  _$jscoverage['normalize.js'][806] = 0;
  _$jscoverage['normalize.js'][816] = 0;
  _$jscoverage['normalize.js'][826] = 0;
  _$jscoverage['normalize.js'][827] = 0;
  _$jscoverage['normalize.js'][828] = 0;
  _$jscoverage['normalize.js'][829] = 0;
  _$jscoverage['normalize.js'][830] = 0;
  _$jscoverage['normalize.js'][831] = 0;
  _$jscoverage['normalize.js'][833] = 0;
  _$jscoverage['normalize.js'][834] = 0;
  _$jscoverage['normalize.js'][836] = 0;
  _$jscoverage['normalize.js'][837] = 0;
  _$jscoverage['normalize.js'][839] = 0;
  _$jscoverage['normalize.js'][840] = 0;
  _$jscoverage['normalize.js'][842] = 0;
  _$jscoverage['normalize.js'][844] = 0;
  _$jscoverage['normalize.js'][855] = 0;
  _$jscoverage['normalize.js'][857] = 0;
  _$jscoverage['normalize.js'][858] = 0;
  _$jscoverage['normalize.js'][859] = 0;
  _$jscoverage['normalize.js'][861] = 0;
  _$jscoverage['normalize.js'][884] = 0;
  _$jscoverage['normalize.js'][885] = 0;
  _$jscoverage['normalize.js'][886] = 0;
  _$jscoverage['normalize.js'][887] = 0;
  _$jscoverage['normalize.js'][888] = 0;
  _$jscoverage['normalize.js'][891] = 0;
  _$jscoverage['normalize.js'][902] = 0;
  _$jscoverage['normalize.js'][904] = 0;
  _$jscoverage['normalize.js'][905] = 0;
  _$jscoverage['normalize.js'][906] = 0;
  _$jscoverage['normalize.js'][908] = 0;
  _$jscoverage['normalize.js'][937] = 0;
  _$jscoverage['normalize.js'][938] = 0;
  _$jscoverage['normalize.js'][939] = 0;
  _$jscoverage['normalize.js'][940] = 0;
  _$jscoverage['normalize.js'][941] = 0;
  _$jscoverage['normalize.js'][944] = 0;
  _$jscoverage['normalize.js'][954] = 0;
  _$jscoverage['normalize.js'][964] = 0;
  _$jscoverage['normalize.js'][975] = 0;
  _$jscoverage['normalize.js'][989] = 0;
  _$jscoverage['normalize.js'][990] = 0;
  _$jscoverage['normalize.js'][993] = 0;
  _$jscoverage['normalize.js'][1003] = 0;
  _$jscoverage['normalize.js'][1005] = 0;
  _$jscoverage['normalize.js'][1008] = 0;
  _$jscoverage['normalize.js'][1009] = 0;
  _$jscoverage['normalize.js'][1012] = 0;
  _$jscoverage['normalize.js'][1013] = 0;
  _$jscoverage['normalize.js'][1017] = 0;
  _$jscoverage['normalize.js'][1025] = 0;
  _$jscoverage['normalize.js'][1026] = 0;
  _$jscoverage['normalize.js'][1036] = 0;
  _$jscoverage['normalize.js'][1038] = 0;
  _$jscoverage['normalize.js'][1044] = 0;
  _$jscoverage['normalize.js'][1045] = 0;
  _$jscoverage['normalize.js'][1046] = 0;
  _$jscoverage['normalize.js'][1048] = 0;
  _$jscoverage['normalize.js'][1050] = 0;
  _$jscoverage['normalize.js'][1051] = 0;
  _$jscoverage['normalize.js'][1053] = 0;
  _$jscoverage['normalize.js'][1056] = 0;
  _$jscoverage['normalize.js'][1060] = 0;
  _$jscoverage['normalize.js'][1064] = 0;
}
_$jscoverage['normalize.js'][42]++;
module.exports = (function (target) {
  _$jscoverage['normalize.js'][44]++;
  var app = {"create_callback": (function (func, thisArg) {
  _$jscoverage['normalize.js'][53]++;
  if (typeof func != "function") {
    _$jscoverage['normalize.js'][54]++;
    return (function (object) {
  _$jscoverage['normalize.js'][55]++;
  return object[func];
});
  }
  _$jscoverage['normalize.js'][59]++;
  if (thisArg !== undefined) {
    _$jscoverage['normalize.js'][60]++;
    return (function (value, index, object) {
  _$jscoverage['normalize.js'][61]++;
  return func.call(thisArg, value, index, object);
});
  }
  _$jscoverage['normalize.js'][65]++;
  return func;
})};
  _$jscoverage['normalize.js'][76]++;
  var _ = {"group_by": (function (collection, callback, thisArg) {
  _$jscoverage['normalize.js'][89]++;
  var result = {};
  _$jscoverage['normalize.js'][90]++;
  callback = app.create_callback(callback, thisArg);
  _$jscoverage['normalize.js'][92]++;
  _.for_each(collection, (function (value, key, collection) {
  _$jscoverage['normalize.js'][93]++;
  key = callback(value, key, collection);
  _$jscoverage['normalize.js'][94]++;
  (hasOwnProperty.call(result, key)? result[key]: result[key] = []).push(value);
}));
  _$jscoverage['normalize.js'][97]++;
  return result;
}), "object": (function (keys, values) {
  _$jscoverage['normalize.js'][112]++;
  var index = -1, length = keys? keys.length: 0, result = {};
  _$jscoverage['normalize.js'][116]++;
  while (++index < length) {
    _$jscoverage['normalize.js'][118]++;
    var key = keys[index];
    _$jscoverage['normalize.js'][119]++;
    if (values) {
      _$jscoverage['normalize.js'][120]++;
      result[key] = values[index];
    }
    else {
      _$jscoverage['normalize.js'][122]++;
      result[key[0]] = key[1];
    }
}
  _$jscoverage['normalize.js'][126]++;
  return result;
}), "to_array": (function (collection) {
  _$jscoverage['normalize.js'][139]++;
  var noArraySliceOnStrings = slice.call("x")[0] != "x";
  _$jscoverage['normalize.js'][141]++;
  if (collection && typeof collection.length == "number") {
    _$jscoverage['normalize.js'][142]++;
    return (noArraySliceOnStrings? isString(collection): typeof collection == "string")? collection.split(""): slice.call(collection);
  }
  _$jscoverage['normalize.js'][146]++;
  return values(collection);
}), "range": (function (start, end, step) {
  _$jscoverage['normalize.js'][158]++;
  start = + start || 0;
  _$jscoverage['normalize.js'][159]++;
  step = + step || 1;
  _$jscoverage['normalize.js'][161]++;
  if (end == null) {
    _$jscoverage['normalize.js'][162]++;
    end = start;
    _$jscoverage['normalize.js'][163]++;
    start = 0;
  }
  _$jscoverage['normalize.js'][168]++;
  var index = -1, length = Math.max(0, ceil((end - start) / step)), result = Array(length);
  _$jscoverage['normalize.js'][172]++;
  while (++index < length) {
    _$jscoverage['normalize.js'][173]++;
    result[index] = start;
    _$jscoverage['normalize.js'][174]++;
    start += step;
}
  _$jscoverage['normalize.js'][176]++;
  return result;
}), "for_each": (function (arr, iterator) {
  _$jscoverage['normalize.js'][189]++;
  if (arr.for_each) {
    _$jscoverage['normalize.js'][190]++;
    return arr.for_each(iterator);
  }
  _$jscoverage['normalize.js'][193]++;
  for (var i = 0; i < arr.length; i += 1) {
    _$jscoverage['normalize.js'][194]++;
    iterator(arr[i], i, arr);
}
}), "pluck": (function (collection, property) {
  _$jscoverage['normalize.js'][207]++;
  var result = [];
  _$jscoverage['normalize.js'][209]++;
  _.for_each(collection, (function (value) {
  _$jscoverage['normalize.js'][210]++;
  result.push(value[property]);
}));
  _$jscoverage['normalize.js'][213]++;
  return result;
}), "size": (function (collection) {
  _$jscoverage['normalize.js'][223]++;
  var length = collection? collection.length: 0;
  _$jscoverage['normalize.js'][224]++;
  return typeof length == "number"? length: _.keys(collection).length;
}), "is_string": (function (value) {
  _$jscoverage['normalize.js'][234]++;
  return toString.call(value) == stringClass;
}), "is_array": (function (item) {
  _$jscoverage['normalize.js'][245]++;
  if (Object.prototype.toString.call(item) === "[object Array]") {
    _$jscoverage['normalize.js'][246]++;
    return true;
  }
  _$jscoverage['normalize.js'][249]++;
  return false;
}), "compose": (function () {
  _$jscoverage['normalize.js'][263]++;
  var funcs = arguments;
  _$jscoverage['normalize.js'][265]++;
  return (function () {
  _$jscoverage['normalize.js'][266]++;
  var args = arguments, length = funcs.length;
  _$jscoverage['normalize.js'][269]++;
  while (length--) {
    _$jscoverage['normalize.js'][270]++;
    args = [funcs[length].apply(this, args)];
}
  _$jscoverage['normalize.js'][272]++;
  return args[0];
});
}), "sorted_index": (function (array, value, callback, thisArg) {
  _$jscoverage['normalize.js'][289]++;
  var low = 0, high = array? array.length: low;
  _$jscoverage['normalize.js'][293]++;
  callback = callback? app.create_callback(callback, thisArg): identity;
  _$jscoverage['normalize.js'][294]++;
  value = callback(value);
  _$jscoverage['normalize.js'][295]++;
  while (low < high) {
    _$jscoverage['normalize.js'][296]++;
    var mid = (low + high) >>> 1;
    _$jscoverage['normalize.js'][297]++;
    callback(array[mid]) < value? low = mid + 1: high = mid;
}
  _$jscoverage['normalize.js'][301]++;
  return low;
}), "indexOf": (function (array, value, fromIndex) {
  _$jscoverage['normalize.js'][313]++;
  var index = -1, length = array? array.length: 0;
  _$jscoverage['normalize.js'][316]++;
  if (typeof fromIndex == "number") {
    _$jscoverage['normalize.js'][317]++;
    index = (fromIndex < 0? Math.max(0, length + fromIndex): fromIndex || 0) - 1;
  }
  else {
    _$jscoverage['normalize.js'][318]++;
    if (fromIndex) {
      _$jscoverage['normalize.js'][319]++;
      index = _.sorted_index(array, value);
      _$jscoverage['normalize.js'][320]++;
      return array[index] === value? index: -1;
    }
  }
  _$jscoverage['normalize.js'][322]++;
  while (++index < length) {
    _$jscoverage['normalize.js'][323]++;
    if (array[index] === value) {
      _$jscoverage['normalize.js'][324]++;
      return index;
    }
}
  _$jscoverage['normalize.js'][327]++;
  return -1;
}), "map": (function (collection, callback, thisArg) {
  _$jscoverage['normalize.js'][343]++;
  var index = -1, length = collection? collection.length: 0, result = Array(typeof length == "number"? length: 0);
  _$jscoverage['normalize.js'][347]++;
  callback = app.create_callback(callback, thisArg);
  _$jscoverage['normalize.js'][349]++;
  if (_.is_array(collection)) {
    _$jscoverage['normalize.js'][351]++;
    while (++index < length) {
      _$jscoverage['normalize.js'][352]++;
      result[index] = callback(collection[index], index, collection);
}
  }
  else {
    _$jscoverage['normalize.js'][357]++;
    _.for_each(collection, (function (value, key, collection) {
  _$jscoverage['normalize.js'][358]++;
  result[++index] = callback(value, key, collection);
}));
  }
  _$jscoverage['normalize.js'][362]++;
  return result;
}), "reduce": (function (arr, iterator, memo) {
  _$jscoverage['normalize.js'][373]++;
  if (arr.reduce) {
    _$jscoverage['normalize.js'][374]++;
    return arr.reduce(iterator, memo);
  }
  _$jscoverage['normalize.js'][377]++;
  _.for_each(arr, (function (x, i, a) {
  _$jscoverage['normalize.js'][378]++;
  memo = iterator(memo, x, i, a);
}));
  _$jscoverage['normalize.js'][381]++;
  return memo;
}), "keys": (function (obj) {
  _$jscoverage['normalize.js'][392]++;
  if (Object.keys) {
    _$jscoverage['normalize.js'][393]++;
    return Object.keys(obj);
  }
  _$jscoverage['normalize.js'][396]++;
  var keys = [];
  _$jscoverage['normalize.js'][397]++;
  for (var k in obj) {
    _$jscoverage['normalize.js'][398]++;
    if (obj.hasOwnProperty(k)) {
      _$jscoverage['normalize.js'][399]++;
      keys.push(k);
    }
}
  _$jscoverage['normalize.js'][403]++;
  return keys;
}), "json_path": (function (obj, expr, arg) {
  _$jscoverage['normalize.js'][416]++;
  var P = {resultType: arg && arg.resultType || "VALUE", result: [], normalize: (function (expr) {
  _$jscoverage['normalize.js'][420]++;
  var subx = [];
  _$jscoverage['normalize.js'][421]++;
  return expr.replace(/[\['](\??\(.*?\))[\]']/g, (function ($0, $1) {
  _$jscoverage['normalize.js'][421]++;
  return "[#" + (subx.push($1) - 1) + "]";
})).replace(/'?\.'?|\['?/g, ";").replace(/;;;|;;/g, ";..;").replace(/;$|'?\]|'$/g, "").replace(/#([0-9]+)/g, (function ($0, $1) {
  _$jscoverage['normalize.js'][425]++;
  return subx[$1];
}));
}), asPath: (function (path) {
  _$jscoverage['normalize.js'][428]++;
  var x = path.split(";"), p = "$";
  _$jscoverage['normalize.js'][429]++;
  for (var i = 1, n = x.length; i < n; i++) {
    _$jscoverage['normalize.js'][430]++;
    p += /^[0-9*]+$/.test(x[i])? ("[" + x[i] + "]"): ("['" + x[i] + "']");
}
  _$jscoverage['normalize.js'][431]++;
  return p;
}), store: (function (p, v) {
  _$jscoverage['normalize.js'][434]++;
  if (p) {
    _$jscoverage['normalize.js'][434]++;
    P.result[P.result.length] = P.resultType == "PATH"? P.asPath(p): v;
  }
  _$jscoverage['normalize.js'][435]++;
  return ! ! p;
}), trace: (function (expr, val, path) {
  _$jscoverage['normalize.js'][438]++;
  if (expr) {
    _$jscoverage['normalize.js'][439]++;
    var x = expr.split(";"), loc = x.shift();
    _$jscoverage['normalize.js'][440]++;
    x = x.join(";");
    _$jscoverage['normalize.js'][441]++;
    if (val && val.hasOwnProperty(loc)) {
      _$jscoverage['normalize.js'][442]++;
      P.trace(x, val[loc], path + ";" + loc);
    }
    else {
      _$jscoverage['normalize.js'][443]++;
      if (loc === "*") {
        _$jscoverage['normalize.js'][444]++;
        P.walk(loc, x, val, path, (function (m, l, x, v, p) {
  _$jscoverage['normalize.js'][444]++;
  P.trace(m + ";" + x, v, p);
}));
      }
      else {
        _$jscoverage['normalize.js'][445]++;
        if (loc === "..") {
          _$jscoverage['normalize.js'][446]++;
          P.trace(x, val, path);
          _$jscoverage['normalize.js'][447]++;
          P.walk(loc, x, val, path, (function (m, l, x, v, p) {
  _$jscoverage['normalize.js'][447]++;
  typeof v[m] === "object" && P.trace("..;" + x, v[m], p + ";" + m);
}));
        }
        else {
          _$jscoverage['normalize.js'][449]++;
          if (/,/.test(loc)) {
            _$jscoverage['normalize.js'][450]++;
            for (var s = loc.split(/'?,'?/), i = 0, n = s.length; i < n; i++) {
              _$jscoverage['normalize.js'][451]++;
              P.trace(s[i] + ";" + x, val, path);
}
          }
          else {
            _$jscoverage['normalize.js'][453]++;
            if (/^\(.*?\)$/.test(loc)) {
              _$jscoverage['normalize.js'][454]++;
              P.trace(P.eval(loc, val, path.substr(path.lastIndexOf(";") + 1)) + ";" + x, val, path);
            }
            else {
              _$jscoverage['normalize.js'][455]++;
              if (/^\?\(.*?\)$/.test(loc)) {
                _$jscoverage['normalize.js'][456]++;
                P.walk(loc, x, val, path, (function (m, l, x, v, p) {
  _$jscoverage['normalize.js'][456]++;
  if (P.eval(l.replace(/^\?\((.*?)\)$/, "$1"), v[m], m)) {
    _$jscoverage['normalize.js'][456]++;
    P.trace(m + ";" + x, v, p);
  }
}));
              }
              else {
                _$jscoverage['normalize.js'][457]++;
                if (/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(loc)) {
                  _$jscoverage['normalize.js'][458]++;
                  P.slice(loc, x, val, path);
                }
              }
            }
          }
        }
      }
    }
  }
  else {
    _$jscoverage['normalize.js'][461]++;
    P.store(path, val);
  }
}), walk: (function (loc, expr, val, path, f) {
  _$jscoverage['normalize.js'][464]++;
  if (val instanceof Array) {
    _$jscoverage['normalize.js'][465]++;
    for (var i = 0, n = val.length; i < n; i++) {
      _$jscoverage['normalize.js'][466]++;
      if (i in val) {
        _$jscoverage['normalize.js'][467]++;
        f(i, loc, expr, val, path);
      }
}
  }
  else {
    _$jscoverage['normalize.js'][469]++;
    if (typeof val === "object") {
      _$jscoverage['normalize.js'][470]++;
      for (var m in val) {
        _$jscoverage['normalize.js'][471]++;
        if (val.hasOwnProperty(m)) {
          _$jscoverage['normalize.js'][472]++;
          f(m, loc, expr, val, path);
        }
}
    }
  }
}), slice: (function (loc, expr, val, path) {
  _$jscoverage['normalize.js'][476]++;
  if (val instanceof Array) {
    _$jscoverage['normalize.js'][477]++;
    var len = val.length, start = 0, end = len, step = 1;
    _$jscoverage['normalize.js'][478]++;
    loc.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g, (function ($0, $1, $2, $3) {
  _$jscoverage['normalize.js'][478]++;
  start = parseInt($1 || start);
  _$jscoverage['normalize.js'][478]++;
  end = parseInt($2 || end);
  _$jscoverage['normalize.js'][478]++;
  step = parseInt($3 || step);
}));
    _$jscoverage['normalize.js'][479]++;
    start = (start < 0)? Math.max(0, start + len): Math.min(len, start);
    _$jscoverage['normalize.js'][480]++;
    end = (end < 0)? Math.max(0, end + len): Math.min(len, end);
    _$jscoverage['normalize.js'][481]++;
    for (var i = start; i < end; i += step) {
      _$jscoverage['normalize.js'][482]++;
      P.trace(i + ";" + expr, val, path);
}
  }
}), eval: (function (x, _v, _vname) {
  _$jscoverage['normalize.js'][486]++;
  try {
    _$jscoverage['normalize.js'][486]++;
    return $ && _v && eval(x.replace(/@/g, "_v"));
  }
  catch (e) {
    _$jscoverage['normalize.js'][487]++;
    throw new SyntaxError("json_path: " + e.message + ": " + x.replace(/@/g, "_v").replace(/\^/g, "_a"));
  }
})};
  _$jscoverage['normalize.js'][491]++;
  var $ = obj;
  _$jscoverage['normalize.js'][493]++;
  if (expr && obj && (P.resultType == "VALUE" || P.resultType == "PATH")) {
    _$jscoverage['normalize.js'][494]++;
    P.trace(P.normalize(expr).replace(/^\$;/, ""), obj, "$");
    _$jscoverage['normalize.js'][495]++;
    return P.result.length? P.result: false;
  }
}), "array_to_hash_tables": (function (array) {
  _$jscoverage['normalize.js'][509]++;
  var keys = [];
  _$jscoverage['normalize.js'][510]++;
  var values = [];
  _$jscoverage['normalize.js'][512]++;
  _.forOwn(array, (function (num, key) {
  _$jscoverage['normalize.js'][513]++;
  keys.push(_.keys(num));
  _$jscoverage['normalize.js'][514]++;
  values.push(_.first(_.values(num)));
}));
  _$jscoverage['normalize.js'][517]++;
  return _.object(keys, values);
}), "extend": (function (target) {
  _$jscoverage['normalize.js'][527]++;
  target = target? target: {};
  _$jscoverage['normalize.js'][529]++;
  for (var i = 1; i < arguments.length; i++) {
    _$jscoverage['normalize.js'][531]++;
    var source = arguments[i];
    _$jscoverage['normalize.js'][532]++;
    var keys = Object.keys(source);
    _$jscoverage['normalize.js'][534]++;
    for (var j = 0; j < keys.length; j++) {
      _$jscoverage['normalize.js'][535]++;
      var name = keys[j];
      _$jscoverage['normalize.js'][537]++;
      target[name] = source[name];
}
}
  _$jscoverage['normalize.js'][543]++;
  return target;
})};
  _$jscoverage['normalize.js'][553]++;
  var _process = {"debug": (function (object, args) {
  _$jscoverage['normalize.js'][561]++;
  app.debug = true;
  _$jscoverage['normalize.js'][562]++;
  return object;
}), "dot_notation": (function (object, args) {
  _$jscoverage['normalize.js'][573]++;
  return object;
}), "get_by_path": (function (object, path) {
  _$jscoverage['normalize.js'][584]++;
  function index(obj, i) {
    _$jscoverage['normalize.js'][585]++;
    return obj[i];
}
  _$jscoverage['normalize.js'][588]++;
  try {
    _$jscoverage['normalize.js'][590]++;
    object = path.split(".").reduce(index, object);
    _$jscoverage['normalize.js'][592]++;
    return object;
  }
  catch (error) {
    _$jscoverage['normalize.js'][594]++;
    debug(error);
  }
  _$jscoverage['normalize.js'][596]++;
  return object;
}), "batch_items": (function (json, args, parsed) {
  _$jscoverage['normalize.js'][605]++;
  debug("parse()");
}), "parse": (function (json, args, parsed) {
  _$jscoverage['normalize.js'][615]++;
  debug("parse()");
  _$jscoverage['normalize.js'][617]++;
  try {
    _$jscoverage['normalize.js'][617]++;
    parsed = JSON.parse(json);
  }
  catch (error) {
    _$jscoverage['normalize.js'][617]++;
    parsed = false;
  }
  _$jscoverage['normalize.js'][619]++;
  return (typeof parsed === "object"? parsed: json);
}), "clean_object": (function (object, args) {
  _$jscoverage['normalize.js'][628]++;
  debug("clean()");
  _$jscoverage['normalize.js'][630]++;
  for (i in object) {
    _$jscoverage['normalize.js'][632]++;
    if (! object[i] && typeof object[i] != "boolean") {
      _$jscoverage['normalize.js'][633]++;
      delete object[i];
    }
    _$jscoverage['normalize.js'][636]++;
    if (object[i] === null) {
      _$jscoverage['normalize.js'][637]++;
      delete object[i];
    }
    _$jscoverage['normalize.js'][640]++;
    if (typeof object[i] === "object") {
      _$jscoverage['normalize.js'][642]++;
      if (Object.keys(object[i]).length) {
        _$jscoverage['normalize.js'][643]++;
        object[i] = _process.clean_object(object[i], args);
      }
      else {
        _$jscoverage['normalize.js'][645]++;
        delete object[i];
      }
    }
}
  _$jscoverage['normalize.js'][652]++;
  return object;
}), "normalize": (function (object, args) {
  _$jscoverage['normalize.js'][661]++;
  debug("normalize()");
  _$jscoverage['normalize.js'][663]++;
  object.__normalized = true;
  _$jscoverage['normalize.js'][664]++;
  return object;
}), "nestify": (function (object, args) {
  _$jscoverage['normalize.js'][673]++;
  debug("make_array()");
  _$jscoverage['normalize.js'][675]++;
  object.__nestify = true;
  _$jscoverage['normalize.js'][676]++;
  return object;
}), "objectify": (function (object, args) {
  _$jscoverage['normalize.js'][685]++;
  debug("make_object()");
  _$jscoverage['normalize.js'][688]++;
  return object;
}), "data_types": (function (object, args) {
  _$jscoverage['normalize.js'][697]++;
  debug("data_types()");
  _$jscoverage['normalize.js'][700]++;
  return object;
}), "key_map": (function (object, map) {
  _$jscoverage['normalize.js'][711]++;
  map = map? map: {};
  _$jscoverage['normalize.js'][713]++;
  if (! _.isEmpty(map)) {
    _$jscoverage['normalize.js'][714]++;
    return object;
  }
  _$jscoverage['normalize.js'][717]++;
  var _new = {};
  _$jscoverage['normalize.js'][719]++;
  _.each(object, (function (value, key) {
  _$jscoverage['normalize.js'][721]++;
  if (map[key]) {
    _$jscoverage['normalize.js'][722]++;
    _new[key] = value;
  }
  else {
    _$jscoverage['normalize.js'][724]++;
    _new[key] = value;
  }
}));
  _$jscoverage['normalize.js'][729]++;
  return _new;
}), "group_by_key": (function (object, args) {
  _$jscoverage['normalize.js'][740]++;
  args = _.extend(args, {"min": 5});
  _$jscoverage['normalize.js'][745]++;
  var _temp = ["list_agent_", "list_office_", "alt_agent_", "alt_office_"];
  _$jscoverage['normalize.js'][747]++;
  var _keys = _.keys(object);
  _$jscoverage['normalize.js'][748]++;
  var _grouped = {};
  _$jscoverage['normalize.js'][750]++;
  for (key in object) {
    _$jscoverage['normalize.js'][752]++;
    for (i in _temp) {
      _$jscoverage['normalize.js'][754]++;
      var _group_key = _temp[i];
      _$jscoverage['normalize.js'][755]++;
      var _clean_group_key = _group_key.substring(0, _group_key.length - 1);
      _$jscoverage['normalize.js'][757]++;
      if (key.toLowerCase().indexOf(_temp[i]) >= 0) {
        _$jscoverage['normalize.js'][759]++;
        _grouped[_clean_group_key] = _grouped[_clean_group_key]? _grouped[_clean_group_key]: {};
        _$jscoverage['normalize.js'][760]++;
        _grouped[_clean_group_key][key.replace(_group_key, "")] = object[key];
        _$jscoverage['normalize.js'][762]++;
        delete object[key];
      }
}
}
  _$jscoverage['normalize.js'][768]++;
  ;
  _$jscoverage['normalize.js'][770]++;
  return _.extend(object, _grouped);
})};
  _$jscoverage['normalize.js'][781]++;
  var _string = {"wordize": (function (text) {
  _$jscoverage['normalize.js'][789]++;
  text = _string.dasherize(text);
  _$jscoverage['normalize.js'][791]++;
  text = text.replace("-", " ");
  _$jscoverage['normalize.js'][793]++;
  text = _string.capitalize(text);
  _$jscoverage['normalize.js'][795]++;
  return text;
}), "capitalize": (function (str) {
  _$jscoverage['normalize.js'][806]++;
  return str.charAt(0).toUpperCase() + str.substring(1).toLowerCase();
}), "dasherize": (function (str) {
  _$jscoverage['normalize.js'][816]++;
  return str.replace(/\s|_/g, "-");
}), "ordinalize": (function (str) {
  _$jscoverage['normalize.js'][826]++;
  var isTeen, r, n;
  _$jscoverage['normalize.js'][827]++;
  n = parseInt(str, 10) % 100;
  _$jscoverage['normalize.js'][828]++;
  isTeen = {11: true, 12: true, 13: true}[n];
  _$jscoverage['normalize.js'][829]++;
  if (isTeen) {
    _$jscoverage['normalize.js'][829]++;
    return str + "th";
  }
  _$jscoverage['normalize.js'][829]++;
  ;
  _$jscoverage['normalize.js'][830]++;
  n = parseInt(str, 10) % 10;
  _$jscoverage['normalize.js'][831]++;
  switch (n) {
  case 1:
    _$jscoverage['normalize.js'][833]++;
    r = str + "st";
    _$jscoverage['normalize.js'][834]++;
    break;
  case 2:
    _$jscoverage['normalize.js'][836]++;
    r = str + "nd";
    _$jscoverage['normalize.js'][837]++;
    break;
  case 3:
    _$jscoverage['normalize.js'][839]++;
    r = str + "rd";
    _$jscoverage['normalize.js'][840]++;
    break;
  default:
    _$jscoverage['normalize.js'][842]++;
    r = str + "th";
  }
  _$jscoverage['normalize.js'][844]++;
  return r;
}), "pluralize": (function (str) {
  _$jscoverage['normalize.js'][855]++;
  var uncountable = _string.uncountableWords[str.toLowerCase()];
  _$jscoverage['normalize.js'][857]++;
  if (uncountable) {
    _$jscoverage['normalize.js'][858]++;
    return str;
  }
  _$jscoverage['normalize.js'][859]++;
  ;
  _$jscoverage['normalize.js'][861]++;
  var rules = [[new RegExp("(m)an$", "gi"), "$1en"], [new RegExp("(pe)rson$", "gi"), "$1ople"], [new RegExp("(child)$", "gi"), "$1ren"], [new RegExp("^(ox)$", "gi"), "$1en"], [new RegExp("(ax|test)is$", "gi"), "$1es"], [new RegExp("(octop|vir)us$", "gi"), "$1i"], [new RegExp("(alias|status)$", "gi"), "$1es"], [new RegExp("(bu)s$", "gi"), "$1ses"], [new RegExp("(buffal|tomat|potat)o$", "gi"), "$1oes"], [new RegExp("([ti])um$", "gi"), "$1a"], [new RegExp("sis$", "gi"), "ses"], [new RegExp("(?:([^f])fe|([lr])f)$", "gi"), "$1$2ves"], [new RegExp("(hive)$", "gi"), "$1s"], [new RegExp("([^aeiouy]|qu)y$", "gi"), "$1ies"], [new RegExp("(matr|vert|ind)ix|ex$", "gi"), "$1ices"], [new RegExp("(x|ch|ss|sh)$", "gi"), "$1es"], [new RegExp("([m|l])ouse$", "gi"), "$1ice"], [new RegExp("(quiz)$", "gi"), "$1zes"], [new RegExp("s$", "gi"), "s"], [new RegExp("$", "gi"), "s"]];
  _$jscoverage['normalize.js'][884]++;
  for (var i = 0, l = rules.length; i < l; i++) {
    _$jscoverage['normalize.js'][885]++;
    if (str.match(rules[i][0])) {
      _$jscoverage['normalize.js'][886]++;
      str = str.replace(rules[i][0], rules[i][1]);
      _$jscoverage['normalize.js'][887]++;
      break;
    }
    _$jscoverage['normalize.js'][888]++;
    ;
}
  _$jscoverage['normalize.js'][891]++;
  return str;
}), "singularize": (function (str) {
  _$jscoverage['normalize.js'][902]++;
  var uncountable = _string.uncountableWords[str.toLowerCase()];
  _$jscoverage['normalize.js'][904]++;
  if (uncountable) {
    _$jscoverage['normalize.js'][905]++;
    return str;
  }
  _$jscoverage['normalize.js'][906]++;
  ;
  _$jscoverage['normalize.js'][908]++;
  var rules = [[new RegExp("(m)en$", "gi"), "$1an"], [new RegExp("(pe)ople$", "gi"), "$1rson"], [new RegExp("(child)ren$", "gi"), "$1"], [new RegExp("([ti])a$", "gi"), "$1um"], [new RegExp("((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$", "gi"), "$1$2sis"], [new RegExp("(hive)s$", "gi"), "$1"], [new RegExp("(tive)s$", "gi"), "$1"], [new RegExp("(curve)s$", "gi"), "$1"], [new RegExp("([lr])ves$", "gi"), "$1f"], [new RegExp("([^fo])ves$", "gi"), "$1fe"], [new RegExp("([^aeiouy]|qu)ies$", "gi"), "$1y"], [new RegExp("(s)eries$", "gi"), "$1eries"], [new RegExp("(m)ovies$", "gi"), "$1ovie"], [new RegExp("(x|ch|ss|sh)es$", "gi"), "$1"], [new RegExp("([m|l])ice$", "gi"), "$1ouse"], [new RegExp("(bus)es$", "gi"), "$1"], [new RegExp("(o)es$", "gi"), "$1"], [new RegExp("(shoe)s$", "gi"), "$1"], [new RegExp("(cris|ax|test)es$", "gi"), "$1is"], [new RegExp("(octop|vir)i$", "gi"), "$1us"], [new RegExp("(alias|status)es$", "gi"), "$1"], [new RegExp("^(ox)en", "gi"), "$1"], [new RegExp("(vert|ind)ices$", "gi"), "$1ex"], [new RegExp("(matr)ices$", "gi"), "$1ix"], [new RegExp("(quiz)zes$", "gi"), "$1"], [new RegExp("s$", "gi"), ""]];
  _$jscoverage['normalize.js'][937]++;
  for (var i = 0, l = rules.length; i < l; i++) {
    _$jscoverage['normalize.js'][938]++;
    if (str.match(rules[i][0])) {
      _$jscoverage['normalize.js'][939]++;
      str = str.replace(rules[i][0], rules[i][1]);
      _$jscoverage['normalize.js'][940]++;
      break;
    }
    _$jscoverage['normalize.js'][941]++;
    ;
}
  _$jscoverage['normalize.js'][944]++;
  return str;
}), "strip": (function (str) {
  _$jscoverage['normalize.js'][954]++;
  return str.replace(/^\s+/, "").replace(/\s+$/, "");
}), "underscore": (function (str) {
  _$jscoverage['normalize.js'][964]++;
  return str.replace(/::/g, "/").replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").replace(/([a-z\d])([A-Z])/g, "$1_$2").replace(/-/g, "_").toLowerCase();
}), "uncountable": (function () {
  _$jscoverage['normalize.js'][975]++;
  var uncountable = {"equipment": true, "information": true, "rice": true, "money": true, "species": true, "series": true, "fish": true, "sheep": true, "moose": true, "deer": true, "news": true};
  _$jscoverage['normalize.js'][989]++;
  for (var i = 0, l = arguments.length; i < l; i++) {
    _$jscoverage['normalize.js'][990]++;
    _string.uncountable[arguments[i]] = true;
}
  _$jscoverage['normalize.js'][993]++;
  return _string;
})};
  _$jscoverage['normalize.js'][1003]++;
  var log = (function () {
  _$jscoverage['normalize.js'][1005]++;
  switch (true) {
  case (arguments[0] instanceof Error):
    _$jscoverage['normalize.js'][1008]++;
    console.error(arguments[0]);
    _$jscoverage['normalize.js'][1009]++;
    break;
  default:
    _$jscoverage['normalize.js'][1012]++;
    console.log.apply(console, ["  \u001b[36m", "Normalize"].concat(arguments).concat(["\u001b[0m"]));
    _$jscoverage['normalize.js'][1013]++;
    break;
  }
  _$jscoverage['normalize.js'][1017]++;
  return arguments[0]? arguments[0]: null;
});
  _$jscoverage['normalize.js'][1025]++;
  var debug = (function () {
  _$jscoverage['normalize.js'][1026]++;
  return (app.debug || arguments[0] instanceof Error? log.apply(this, arguments): arguments);
});
  _$jscoverage['normalize.js'][1036]++;
  var init = (function (target, arguments) {
  _$jscoverage['normalize.js'][1038]++;
  _.extend(app, {"debug": false, "log": [], "stack": ["parse"]}, app);
  _$jscoverage['normalize.js'][1044]++;
  for (var i = 1, l = arguments.length; i < l; i++) {
    _$jscoverage['normalize.js'][1045]++;
    app.stack.push(arguments[i]);
}
  _$jscoverage['normalize.js'][1046]++;
  ;
  _$jscoverage['normalize.js'][1048]++;
  for (i in app.stack) {
    _$jscoverage['normalize.js'][1050]++;
    if (typeof app.stack[i] === "string") {
      _$jscoverage['normalize.js'][1051]++;
      var caller = {"function": app.stack[i], "args": {}};
    }
    else {
      _$jscoverage['normalize.js'][1053]++;
      var caller = {"function": app.stack[i][0], "args": app.stack[i][1]};
    }
    _$jscoverage['normalize.js'][1056]++;
    this.target = target = (typeof _process[caller["function"]] === "function"? _process[caller["function"]].apply(this, [target, caller.args]): target);
}
  _$jscoverage['normalize.js'][1060]++;
  return target;
});
  _$jscoverage['normalize.js'][1064]++;
  return init(target, arguments);
});
_$jscoverage['normalize.js'].source = ["/**"," * Object Normalization / JSON Object"," * ============================+==============="," *"," * Transformation and normalization of a JSON Document, Nested Array, XML Document, or Two Dimensional Table."," *"," * = Conversions = Can be chained."," * - Primarily for working with Associative Arrays, e.g. JSON Hash  , being able to transform objects between hashtables and arrays"," * - Strandard transofmration between XML and JSON, using the @ prefix for attributes, etc."," * - Associative Array / Object conversion to Nested Array Format, and reverals (e.g. Knockout.js Models)"," *"," * = Structure Remapping ="," * - Handle Object Transformations based on a Schema with advanced mapping ruels similar to XPath capabilities"," *"," * = Structure Normalization ="," * - Key Pattern Grouping - Convert 2D objects into nested objects based on patterns, such as common prefix."," * - Numbered Key Decoupling - Created nested elements from numbered keys. e.g. bedroom1, bedroom2, =&gt; { 'bedrooms': [ 'first value', 'second', etc. ] }"," * - Key Normalization - Convert to standard underscore format: de-camel, lowercase, etc."," *"," * = Value Conversions ="," * - True Data Type - Ensure values have their intended data formats, e.g. converting \"5\" to 5, \"true\" to true, etc."," * - Nullification - Apply rules to convert values between \"undefined\", \"null\", \"false\", etc."," * - Filtering &amp; Stripping - Removing empty fields and/or empty objects and arrays. Whitespace removal."," * - Tokenize - Value tokenization. e.g. \"my dog hasn't any flees\" =&gt; [ 'my', 'dog', 'has', 'n\\'t', 'any', 'flees', '.' ]"," *"," * = Semantic Conversions = Can be chained."," * - Singularize / Pluralize -"," * - Change Tense - Future, Present"," * - Ordinalize -"," * - Deordinalize -"," * - Wordize - Convert to printable format. e.g. \"my_homes\" =&gt; \"My Home\""," * - Stem - Get stem of a word. e.g. \"words\" =&gt; \"word\""," *"," * = Other / Specialized ="," * - Geolocation - Conversion of an address into coordinates."," * - Categorical Classification"," * - Phoenetics"," *"," * @version 0.1.0"," * @author potanin@UD"," */","module.exports = function( target ) {","","  var app = {","","    /**","     * Produces an iteration callback bound to an optional `thisArg`. If `func` is","     * a property name, the callback will return the property value for a given element.","     *","     */","    'create_callback': function(func, thisArg) {","","      if (typeof func != 'function') {","        return function(object) {","          return object[func];","        };","      }","","      if (thisArg !== undefined) {","        return function(value, index, object) {","          return func.call(thisArg, value, index, object);","        };","      }","","      return func;","","    }","","  }","","  /**","   * Non-chainable Utility Functions","   *","   * @since 0.2.0","   */","  var _ = {","","","    /**","     * Creates an object composed of keys returned from running each element of","     * `collection` through a `callback`. The corresponding value of each key is an","     * array of elements passed to `callback` that returned the key. The `callback`","     * is bound to `thisArg` and invoked with three arguments; (value, index|key, collection).","     * The `callback` argument may also be the name of a property to group by (e.g. 'length').","     *","     * @source Lo-Dash v0.9.2","     */","    'group_by': function(collection, callback, thisArg) {","      var result = {};","      callback = app.create_callback(callback, thisArg);","","      _.for_each(collection, function(value, key, collection) {","      key = callback(value, key, collection);","      (hasOwnProperty.call(result, key) ? result[key] : result[key] = []).push(value);","      });","","      return result;","    },","","","    /**","     * Creates an object composed from arrays of `keys` and `values`. Pass either","     * a single two dimensional array, i.e. `[[key1, value1], [key2, value2]]`, or","     * two arrays, one of `keys` and one of corresponding `values`.","     *","     * _.object(['moe', 'larry', 'curly'], [30, 40, 50]); // =&gt; { 'moe': 30, 'larry': 40, 'curly': 50 }","     *","     * @source Lo-Dash v0.9.2","     */","    'object': function(keys, values) {","","      var index = -1,","        length = keys ? keys.length : 0,","        result = {};","","      while (++index &lt; length) {","","      var key = keys[index];","      if (values) {","        result[key] = values[index];","      } else {","        result[key[0]] = key[1];","      }","      }","","      return result;","    },","","","    /**","     * Converts the `collection`, to an array.","     *","     * (function() { return _.to_array(arguments).slice(1); })(1, 2, 3, 4); // =&gt; [2, 3, 4]","     *","     * @source Lo-Dash v0.9.2","     */","    'to_array': function(collection) {","","      var noArraySliceOnStrings = slice.call('x')[0] != 'x';","","      if (collection &amp;&amp; typeof collection.length == 'number') {","      return (noArraySliceOnStrings ? isString(collection) : typeof collection == 'string')","        ? collection.split('')","        : slice.call(collection);","      }","      return values(collection);","    },","","","    /**","     * Creates an array of numbers (positive and/or negative) progressing from","     * `start` up to but not including `stop`. This method is a port of Python's","     * `range()` function. See http://docs.python.org/library/functions.html#range.","     *","     * @source Lo-Dash v0.9.2","     */","    'range': function(start, end, step) {","      start = +start || 0;","      step = +step || 1;","","      if (end == null) {","      end = start;","      start = 0;","      }","","      // use `Array(length)` so V8 will avoid the slower \"dictionary\" mode","      // http://www.youtube.com/watch?v=XAqIpGU8ZZk#t=16m27s","      var index = -1,","        length = Math.max(0, ceil((end - start) / step)),","        result = Array(length);","","      while (++index &lt; length) {","      result[index] = start;","      start += step;","      }","      return result;","    },","","","    /**","     * Array Iterator","     *","     * @lodash forEach requires createIterator() which is too robust to port.","     * @source async","     * @since 0.2.0","     */","    'for_each': function( arr, iterator ) {","","      if( arr.for_each ) {","      return arr.for_each(iterator);","      }","","      for (var i = 0; i &lt; arr.length; i += 1) {","      iterator(arr[i], i, arr);","      }","","    },","","","    /**","     * Retrieves the value of a specified property from all elements in","     * the `collection`.","     *","     * @source Lo-Dash v0.9.2","     */","    'pluck': function(collection, property) {","      var result = [];","","      _.for_each(collection, function(value) {","      result.push(value[property]);","      });","","      return result;","    },","","    /**","     * Gets the size of the `collection` by returning `collection.length` for arrays","     * and array-like objects or the number of own enumerable properties for objects.","     *","     * @source Lo-Dash v0.9.2","     */","    'size': function(collection) {","      var length = collection ? collection.length : 0;","      return typeof length == 'number' ? length : _.keys(collection).length;","    },","","    /**","     * Checks if `value` is a string.","     *","     *","     * @source Lo-Dash v0.9.2","     */","    'is_string': function(value) {","      return toString.call(value) == stringClass;","    },","","","    /**","     *","     *","     * @source http://stackoverflow.com/questions/4775722/javascript-check-if-object-is-array","     */","    'is_array': function( item ) {","","      if( Object.prototype.toString.call( item ) === '[object Array]' ) {","      return true;","      }","","      return false;","","    },","","","    /**","     * Creates a function that is the composition of the passed 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()))`.","     * Each function is executed with the `this` binding of the composed function.","     *","     * @source Lo-Dash v0.9.2","     */","    'compose': function() {","      var funcs = arguments;","","      return function() {","      var args = arguments,","        length = funcs.length;","","      while (length--) {","        args = [funcs[length].apply(this, args)];","      }","      return args[0];","      };","","    },","","","    /**","     * Uses a binary search to determine the smallest index at which the `value`","     * should be inserted into `array` in order to maintain the sort order of the","     * sorted `array`. If `callback` is passed, it will be executed for `value` and","     * each element in `array` to compute their sort ranking. The `callback` is","     * bound to `thisArg` and invoked with one argument; (value). The `callback`","     * argument may also be the name of a property to order by.","     *","     * @source Lo-Dash v0.9.2","     */","    'sorted_index': function(array, value, callback, thisArg) {","      var low = 0,","        high = array ? array.length : low;","","      // explicitly reference `identity` for better engine inlining","      callback = callback ? app.create_callback(callback, thisArg) : identity;","      value = callback(value);","      while (low &lt; high) {","      var mid = (low + high) &gt;&gt;&gt; 1;","      callback(array[mid]) &lt; value","        ? low = mid + 1","        : high = mid;","      }","      return low;","    },","","","    /**","     * Gets the index at which the first occurrence of `value` is found using","     * strict equality for comparisons, i.e. `===`. If the `array` is already","     * sorted, passing `true` for `fromIndex` will run a faster binary search.","     *","     * @source Lo-Dash v0.9.2","     */","    'indexOf': function(array, value, fromIndex) {","      var index = -1,","        length = array ? array.length : 0;","","      if (typeof fromIndex == 'number') {","      index = (fromIndex &lt; 0 ? Math.max(0, length + fromIndex) : fromIndex || 0) - 1;","      } else if (fromIndex) {","      index = _.sorted_index(array, value);","      return array[index] === value ? index : -1;","      }","      while (++index &lt; length) {","      if (array[index] === value) {","        return index;","      }","      }","      return -1;","    },","","","    /**","     * Creates an array of values by running each element in the `collection`","     * through a `callback`. The `callback` is bound to `thisArg` and invoked with","     * three arguments; (value, index|key, collection).","     *","     * _.map([1, 2, 3], function(num) { return num * 3; });  // =&gt; [3, 6, 9]","     *","     * _.map({ 'one': 1, 'two': 2, 'three': 3 }, function(num) { return num * 3; });  // =&gt; [3, 6, 9] (order is not guaranteed)","     *","     * @source Lo-Dash v0.9.2","     */","    'map': function(collection, callback, thisArg) {","      var index = -1,","        length = collection ? collection.length : 0,","        result = Array(typeof length == 'number' ? length : 0);","","      callback = app.create_callback(callback, thisArg);","","      if(_.is_array(collection)) {","","      while (++index &lt; length) {","        result[index] = callback(collection[index], index, collection);","      }","","      } else {","","      _.for_each(collection, function(value, key, collection) {","        result[++index] = callback(value, key, collection);","      });","","      }","      return result;","    },","","","    /**","     *","     * @source Async","     * @since 0.2.0","     */","    'reduce': function( arr, iterator, memo) {","","      if (arr.reduce) {","      return arr.reduce(iterator, memo);","      }","","      _.for_each(arr, function( x, i, a) {","      memo = iterator(memo, x, i, a);","      });","","      return memo;","    },","","","    /**","     *","     *","     * @since 0.2.0","     */","    '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;","","    },","","","    /**","     * Not Yet Tested at All","     *","     * @source json_path 0.8.0 - XPath for JSON","     * @since 0.2.0","     */","    'json_path': function(obj, expr, arg) {","","     var P = {","      resultType: arg &amp;&amp; arg.resultType || \"VALUE\",","      result: [],","      normalize: function(expr) {","         var subx = [];","         return expr.replace(/[\\['](\\??\\(.*?\\))[\\]']/g, function($0,$1){return \"[#\"+(subx.push($1)-1)+\"]\";})","              .replace(/'?\\.'?|\\['?/g, \";\")","              .replace(/;;;|;;/g, \";..;\")","              .replace(/;$|'?\\]|'$/g, \"\")","              .replace(/#([0-9]+)/g, function($0,$1){return subx[$1];});","      },","      asPath: function(path) {","         var x = path.split(\";\"), p = \"$\";","         for (var i=1,n=x.length; i&lt;n; i++)","          p += /^[0-9*]+$/.test(x[i]) ? (\"[\"+x[i]+\"]\") : (\"['\"+x[i]+\"']\");","         return p;","      },","      store: function(p, v) {","         if (p) P.result[P.result.length] = P.resultType == \"PATH\" ? P.asPath(p) : v;","         return !!p;","      },","      trace: function(expr, val, path) {","         if (expr) {","          var x = expr.split(\";\"), loc = x.shift();","          x = x.join(\";\");","          if (val &amp;&amp; val.hasOwnProperty(loc))","           P.trace(x, val[loc], path + \";\" + loc);","          else if (loc === \"*\")","           P.walk(loc, x, val, path, function(m,l,x,v,p) { P.trace(m+\";\"+x,v,p); });","          else if (loc === \"..\") {","           P.trace(x, val, path);","           P.walk(loc, x, val, path, function(m,l,x,v,p) { typeof v[m] === \"object\" &amp;&amp; P.trace(\"..;\"+x,v[m],p+\";\"+m); });","          }","          else if (/,/.test(loc)) { // [name1,name2,...]","           for (var s=loc.split(/'?,'?/),i=0,n=s.length; i&lt;n; i++)","            P.trace(s[i]+\";\"+x, val, path);","          }","          else if (/^\\(.*?\\)$/.test(loc)) // [(expr)]","           P.trace(P.eval(loc, val, path.substr(path.lastIndexOf(\";\")+1))+\";\"+x, val, path);","          else if (/^\\?\\(.*?\\)$/.test(loc)) // [?(expr)]","           P.walk(loc, x, val, path, function(m,l,x,v,p) { if (P.eval(l.replace(/^\\?\\((.*?)\\)$/,\"$1\"),v[m],m)) P.trace(m+\";\"+x,v,p); });","          else if (/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(loc)) // [start:end:step]  phyton slice syntax","           P.slice(loc, x, val, path);","         }","         else","          P.store(path, val);","      },","      walk: function(loc, expr, val, path, f) {","         if (val instanceof Array) {","          for (var i=0,n=val.length; i&lt;n; i++)","           if (i in val)","            f(i,loc,expr,val,path);","         }","         else if (typeof val === \"object\") {","          for (var m in val)","           if (val.hasOwnProperty(m))","            f(m,loc,expr,val,path);","         }","      },","      slice: function(loc, expr, val, path) {","         if (val instanceof Array) {","          var len=val.length, start=0, end=len, step=1;","          loc.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g, function($0,$1,$2,$3){start=parseInt($1||start);end=parseInt($2||end);step=parseInt($3||step);});","          start = (start &lt; 0) ? Math.max(0,start+len) : Math.min(len,start);","          end   = (end &lt; 0)   ? Math.max(0,end+len)   : Math.min(len,end);","          for (var i=start; i&lt;end; i+=step)","           P.trace(i+\";\"+expr, val, path);","         }","      },","      eval: function(x, _v, _vname) {","         try { return $ &amp;&amp; _v &amp;&amp; eval(x.replace(/@/g, \"_v\")); }","         catch(e) { throw new SyntaxError(\"json_path: \" + e.message + \": \" + x.replace(/@/g, \"_v\").replace(/\\^/g, \"_a\")); }","      }","     };","","     var $ = obj;","","     if (expr &amp;&amp; obj &amp;&amp; (P.resultType == \"VALUE\" || P.resultType == \"PATH\")) {","      P.trace(P.normalize(expr).replace(/^\\$;/,\"\"), obj, \"$\");","      return P.result.length ? P.result : false;","     }","","    },","","","    /**","     *","     *","     * @since 2.0","     * @author potanin@UD","     */","    'array_to_hash_tables': function( array ) {","","      var keys = [];","      var values = [];","","      _.forOwn( array, function( num, key ) {","        keys.push( _.keys( num ) );","        values.push( _.first( _.values( num ) ) );","      } );","","      return _.object( keys, values );","    },","","    /**","     *","     *","     * @since 0.2.0","     */","    'extend': function( target ) {","","      target = target ? target : {};","","      for( var i = 1; i &lt; arguments.length; i++ ) {","","      var source = arguments[i];","      var keys = Object.keys( source );","","      for( var j = 0; j &lt; keys.length; j++ ) {","        var name = keys[j];","","        target[name] = source[name];","","      }","","      }","","      return target","    },","","  }","","  /**","   * Object and Array Transformations","   *","   * @since 0.2.0","   */","  var _process = {","","    /**","     * Enable Debug for rest of chain","     *","     * @since 0.2.0","     */","    'debug': function( object, args ) {","      app.debug = true;","      return object;","    },","","    /**","     * Enable Debug For Chain","     *","     * @since 0.2.0","     */","    'dot_notation': function( object, args ) {","","      ","      return object;","    },","","    /**","     * Enable Debug For Chain","     *","     * @source http://stackoverflow.com/questions/6393943/convert-javascript-string-in-dot-notation-into-an-object-reference","     * @since 0.2.0","     */","    'get_by_path': function( object, path ) { ","      ","      function index( obj,i ) {","        return obj[i];","      }","      ","      try {","      ","        object = path.split( '.' ).reduce( index, object );","        ","        return object;","        ","      } catch( error ) { debug( error ); }","      ","      return object;","      ","    },","","    /**","     * Batch Items Passed. Second-level items will have the rest of the rules applied.","     *","     * @since 0.2.0","     */","    'batch_items': function( json, args, parsed ) { debug( 'parse()' );","","","    },","","    /**","     * Safelty Parse JSON","     *","     * @since 0.2.0","     */","    'parse': function( json, args, parsed ) { debug( 'parse()' );","","      try { parsed = JSON.parse( json ); } catch (error) { parsed = false; }","","      return ( typeof parsed === 'object' ? parsed : json );","","    },","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'clean_object': function( object, args ) { debug( 'clean()' );","","      for( i in object ) {","","        if( !object[i] &amp;&amp; typeof object[i] != 'boolean' ) {","          delete object[i];","        }","","        if( object[i] === null ) {","          delete object[i];","        }","","        if( typeof object[i] === 'object' ) {","","          if( Object.keys( object[i] ).length ) {","            object[i] = _process.clean_object( object[i], args );","          } else {","            delete object[i];","          }","","        }","","      }","","      return object;","","    },","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'normalize': function( object, args ) { debug( 'normalize()' );","","      object.__normalized = true;","      return object;","","    },","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'nestify': function( object, args ) { debug( 'make_array()' );","","      object.__nestify = true;","      return object;","","    },","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'objectify': function( object, args ) { debug( 'make_object()' );","","","      return object;","","    },","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'data_types': function( object, args ) { debug( 'data_types()' );","","","      return object;","","    },","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'key_map': function( object, map ) { // console.info( 'common.apply_key_map()' );","","      map = map ? map : {};","","      if( !_.isEmpty( map ) ) {","      return object;","      }","","      var _new = {};","","      _.each( object, function( value, key ) {","","      if( map[ key ] ) {","        _new[ key ] = value;","      } else {","        _new[ key ] = value;","      }","","      });","","      return _new;","","    },","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'group_by_key': function( object, args ) { // console.info( 'common.group_by_key()' );","","      args = _.extend( args, {","      'min': 5","      });","","      //var _temp = [ 'lfd_', 'lo1_', 'la1_', 'lm_', 'l_address', 'l_keyword', 'l_', 'sa3_', 'list_agent_', 'list_office_', 'alt_agent_', 'alt_office_' ];","      var _temp = [ 'list_agent_', 'list_office_', 'alt_agent_', 'alt_office_' ];","","      var _keys = _.keys( object );","      var _grouped = {};","","      for( key in object ) {","","      for( i in _temp ) {","","        var _group_key = _temp[i];","        var _clean_group_key = _group_key.substring( 0, _group_key.length - 1 );","","        if( key.toLowerCase().indexOf( _temp[i] ) &gt;= 0 ) {","","        _grouped[ _clean_group_key ] = _grouped[ _clean_group_key ] ? _grouped[ _clean_group_key ] : {};","        _grouped[ _clean_group_key ][ key.replace( _group_key, '' ) ] = object[ key ];","","        delete object[ key ];","","        }","","      }","","      };","","      return _.extend( object, _grouped );","","    }","","  };","","  /**","   * String / Number Transormations","   *","   * @since 0.2.0","   */","  var _string = {","","    /**","     * Convert String to Printable Words","     *","     */","    'wordize': function( text ) {","","      text = _string.dasherize( text );","","      text = text.replace( '-', ' ' );","","      text = _string.capitalize( text );","","      return text;","","    },","","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'capitalize': function(str) {","      return str.charAt(0).toUpperCase() + str.substring(1).toLowerCase();","    },","","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'dasherize': function(str){","      return str.replace(/\\s|_/g, '-');","    },","","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'ordinalize': function(str){","      var isTeen, r, n;","      n = parseInt(str, 10) % 100;","      isTeen = { 11: true, 12: true, 13: true}[n];","      if(isTeen) {return str + 'th'};","      n = parseInt(str, 10) % 10","      switch(n) {","      case 1:","      r = str + 'st';","      break;","      case 2:","      r = str + 'nd';","      break;","      case 3:","      r = str + 'rd';","      break;","      default:","      r = str + 'th';","      }","      return r;","    },","","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'pluralize': function(str){","","      var uncountable = _string.uncountableWords[str.toLowerCase()];","","      if (uncountable) {","      return str;","      };","","      var rules = [","      [new RegExp('(m)an$', 'gi'),         '$1en'],","      [new RegExp('(pe)rson$', 'gi'),        '$1ople'],","      [new RegExp('(child)$', 'gi'),         '$1ren'],","      [new RegExp('^(ox)$', 'gi'),         '$1en'],","      [new RegExp('(ax|test)is$', 'gi'),       '$1es'],","      [new RegExp('(octop|vir)us$', 'gi'),     '$1i'],","      [new RegExp('(alias|status)$', 'gi'),    '$1es'],","      [new RegExp('(bu)s$', 'gi'),         '$1ses'],","      [new RegExp('(buffal|tomat|potat)o$', 'gi'), '$1oes'],","      [new RegExp('([ti])um$', 'gi'),        '$1a'],","      [new RegExp('sis$', 'gi'),           'ses'],","      [new RegExp('(?:([^f])fe|([lr])f)$', 'gi'),  '$1$2ves'],","      [new RegExp('(hive)$', 'gi'),        '$1s'],","      [new RegExp('([^aeiouy]|qu)y$', 'gi'),     '$1ies'],","      [new RegExp('(matr|vert|ind)ix|ex$', 'gi'),  '$1ices'],","      [new RegExp('(x|ch|ss|sh)$', 'gi'),      '$1es'],","      [new RegExp('([m|l])ouse$', 'gi'),       '$1ice'],","      [new RegExp('(quiz)$', 'gi'),        '$1zes'],","      [new RegExp('s$', 'gi'),           's'],","      [new RegExp('$', 'gi'),            's']","      ];","","      for(var i = 0, l = rules.length; i &lt; l; i++){","      if (str.match(rules[i][0])) {","        str = str.replace(rules[i][0], rules[i][1]);","        break;","      };","      }","","      return str;","    },","","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'singularize': function(str){","","      var uncountable = _string.uncountableWords[str.toLowerCase()];","","      if (uncountable) {","        return str;","      };","","      var rules = [","        [new RegExp('(m)en$', 'gi'),                             '$1an'],","        [new RegExp('(pe)ople$', 'gi'),                          '$1rson'],","        [new RegExp('(child)ren$', 'gi'),                          '$1'],","        [new RegExp('([ti])a$', 'gi'),                           '$1um'],","        [new RegExp('((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$','gi'), '$1$2sis'],","        [new RegExp('(hive)s$', 'gi'),                           '$1'],","        [new RegExp('(tive)s$', 'gi'),                           '$1'],","        [new RegExp('(curve)s$', 'gi'),                          '$1'],","        [new RegExp('([lr])ves$', 'gi'),                           '$1f'],","        [new RegExp('([^fo])ves$', 'gi'),                          '$1fe'],","        [new RegExp('([^aeiouy]|qu)ies$', 'gi'),                       '$1y'],","        [new RegExp('(s)eries$', 'gi'),                          '$1eries'],","        [new RegExp('(m)ovies$', 'gi'),                          '$1ovie'],","        [new RegExp('(x|ch|ss|sh)es$', 'gi'),                        '$1'],","        [new RegExp('([m|l])ice$', 'gi'),                          '$1ouse'],","        [new RegExp('(bus)es$', 'gi'),                           '$1'],","        [new RegExp('(o)es$', 'gi'),                             '$1'],","        [new RegExp('(shoe)s$', 'gi'),                           '$1'],","        [new RegExp('(cris|ax|test)es$', 'gi'),                      '$1is'],","        [new RegExp('(octop|vir)i$', 'gi'),                        '$1us'],","        [new RegExp('(alias|status)es$', 'gi'),                      '$1'],","        [new RegExp('^(ox)en', 'gi'),                            '$1'],","        [new RegExp('(vert|ind)ices$', 'gi'),                        '$1ex'],","        [new RegExp('(matr)ices$', 'gi'),                          '$1ix'],","        [new RegExp('(quiz)zes$', 'gi'),                           '$1'],","        [new RegExp('s$', 'gi'),                               '']","      ];","","      for(var i = 0, l = rules.length; i &lt; l; i++){","        if (str.match(rules[i][0])) {","          str = str.replace(rules[i][0], rules[i][1]);","          break;","        };","      }","","      return str;","    },","","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'strip': function(str){","      return str.replace(/^\\s+/, '').replace(/\\s+$/, '');","    },","","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'underscore': function(str){","      return str.replace(/::/g, '/').replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2').replace(/([a-z\\d])([A-Z])/g, '$1_$2').replace(/-/g, '_').toLowerCase();","    },","","","    /**","     * {}","     *","     * @since 0.2.0","     */","    'uncountable': function() {","","      var uncountable = {","      'equipment': true,","      'information': true,","      'rice': true,","      'money': true,","      'species': true,","      'series':true,","      'fish':true,","      'sheep':true,","      'moose':true,","      'deer':true,","      'news':true","      };","","      for(var i=0,l=arguments.length; i&lt;l; i++){","      _string.uncountable[arguments[i]] = true;","      }","","      return _string;","    }","","  };","","  /**","   * Internal logging function","   *","   * @since 0.1","   */","  var log = function() {","","    switch ( true ) {","","      case ( arguments[0] instanceof Error ):","      console.error( arguments[0] );","      break;","","      default:","      console.log.apply( console, [ '  \\u001b[36m', 'Normalize' ].concat( arguments ).concat( [ '\\u001b[0m' ] ) );","      break;","","    }","","    return arguments[0] ? arguments[0] : null;","","  };","","  /**","   *","   * @author potanin@UD","   */","  var debug = function() {","    return ( app.debug || arguments[0] instanceof Error ? log.apply( this, arguments ) : arguments );","  }","","  /**","   * Initialize","   *","   * @todo Use _.compose(); to trigger chained functions.","   * @since 2.0","   * @since 0.2.0","   */","  var init = function( target, arguments ) { // debug( arguments );","","    _.extend( app, {","      'debug': false,","      'log': [],","      'stack': [ 'parse' ]","    }, app );","","    for( var i = 1, l = arguments.length; i &lt; l; i++ ) {","      app.stack.push( arguments[i] );","    };","","    for( i in app.stack ) {","      ","      if( typeof app.stack[i] === 'string' ) {        ","        var caller = { 'function': app.stack[i], 'args': {} }        ","      } else {      ","        var caller = { 'function': app.stack[i][0], 'args': app.stack[i][1] }              ","      }","      ","      this.target = target = ( typeof _process[ caller[ 'function' ] ] === 'function' ? _process[ caller[ 'function' ] ].apply( this, [ target, caller[ 'args' ] ] ) : target );","      ","    }","","    return target;","","  };","","  return init( target, arguments );","","};",""];