Compare commits

..

73 Commits
2.0.0 ... 2.2.1

Author SHA1 Message Date
Benjamin Tan
4bce4721e5 Update v2.2.1 docs 2015-01-23 15:09:28 +08:00
John-David Dalton
49e22742de Add test for incorrectly shimmed Object.create. 2013-10-03 09:42:32 -07:00
John-David Dalton
422d7942ef Bump to v2.2.1. 2013-10-03 00:30:29 -07:00
John-David Dalton
a63e7162bc Make doc/parse.php read the version from package.json. [ci skip] 2013-10-02 23:21:41 -07:00
John-David Dalton
1f973b72b8 Keep createObject fallback for modern builds. 2013-10-02 19:47:15 -07:00
John-David Dalton
d3dd97f167 Fix _.mixin creates functions that respect __chain__. 2013-10-02 19:30:49 -07:00
John-David Dalton
f0f17e0041 Updated the tested version of Node.js to 0.10.20 in readme. [ci skip] 2013-10-01 22:20:26 -07:00
John-David Dalton
d6fa8bf233 Add _.pluck to backbone.html in anticipation of Backbone's version bump. [ci skip] 2013-10-01 22:04:43 -07:00
John-David Dalton
ec5e685a1c Remove unneeded keywords from component.json. [ci skip] 2013-10-01 08:39:03 -07:00
John-David Dalton
c88b95751c Reduce setting MAKE in .travis.yml. 2013-09-30 20:21:59 -07:00
John-David Dalton
72ae25bc53 Log the params passed to test.js to the console. 2013-09-30 19:33:18 -07:00
John-David Dalton
02e5cc1da8 Add asset folders and cache busting to worker.js. 2013-09-30 18:53:04 -07:00
John-David Dalton
3d092df56d Tweak isModularize detection. [ci skip] 2013-09-29 20:33:13 -07:00
John-David Dalton
912d5c700c Change before_script to the more appropriate before_install in .travis.yml. 2013-09-29 20:21:45 -07:00
John-David Dalton
6d3c492518 Extend test/test.js to support testing generated npm packages. 2013-09-29 19:19:02 -07:00
John-David Dalton
5e29e3f1cb Tweak wording on _.clone feature note in readme & tweak unit test handling missing _.runInContext. 2013-09-29 14:46:52 -07:00
John-David Dalton
0558495760 Update _.clone unit test for older Safari. 2013-09-29 12:30:34 -07:00
John-David Dalton
0471dfa2f8 Update vendor/qunit-clib to avoid logInline when running on Windows. 2013-09-29 09:53:05 -07:00
John-David Dalton
7883e6544e Remove modularize entry in test-ui.js, update isModularize detection, and avoid a false fail in old Opera. 2013-09-28 22:14:05 -07:00
John-David Dalton
6da87e4a79 Bump to v2.2.0. 2013-09-28 20:29:54 -07:00
John-David Dalton
bafe4fff93 Update vendor/qunit-clib and validate assert counts in each unit test. 2013-09-28 18:27:07 -07:00
John-David Dalton
da782398a2 Allow test.'s to support rhino -require with modularized builds. 2013-09-28 17:13:24 -07:00
John-David Dalton
4b26b46f6a Remove unneeded code from the underscore build of the support object. 2013-09-28 14:02:12 -07:00
John-David Dalton
0f1e69a2df Tweak how isModularize is detected in test/test.js. 2013-09-28 00:25:56 -07:00
John-David Dalton
85f2bd464c Remove "performance" & "speed" keywords from package.json. [ci skip] 2013-09-26 23:47:26 -07:00
John-David Dalton
8a4956b736 Remove openjdk6 from .travis.yml. 2013-09-26 21:55:14 -07:00
John-David Dalton
4a369af4c7 Cleanup baseClone. 2013-09-26 21:05:10 -07:00
John-David Dalton
9749305ecd Make _.clone shallow clone dates, regexps, and boolean/number/string objects. [closes #358] 2013-09-26 20:07:07 -07:00
John-David Dalton
639178dbdc Make qunit-clib less chatty for passed tests. 2013-09-26 08:12:33 -07:00
John-David Dalton
62d038b547 Fix typo in .travis.yml. 2013-09-26 01:10:22 -07:00
John-David Dalton
9b80e3a33b When floating in _.random avoid getting 0 too many times when using arguments like min of -3 and max of 3. 2013-09-25 23:24:58 -07:00
John-David Dalton
0ea54f0458 Optimize .travis.yml narwhal, ringo, and rhino use. 2013-09-25 22:56:51 -07:00
John-David Dalton
374c52f71f Use ln as shorthand for link in the "Notes" section of the readme . [ci skip] 2013-09-25 09:09:04 -07:00
John-David Dalton
60f63e125a Experiment with downloading rhino, ringo, narwhal via .travis.yml. 2013-09-25 07:52:48 -07:00
John-David Dalton
7cfa7f3de4 Use now() in the compat and underscore builds too. 2013-09-24 19:10:09 -07:00
John-David Dalton
92409831c2 Reduce dependency on getObject. 2013-09-24 00:10:16 -07:00
John-David Dalton
e04790a628 Update docs to make the list of aliases more descriptive. [ci skip] 2013-09-23 09:12:50 -07:00
John-David Dalton
cd7bf40508 Have the npm packages link in the readme use the "lodash-modularized" keyword. [ci skip] 2013-09-23 08:38:52 -07:00
John-David Dalton
dc378e9ce7 Bump to v2.1.0. 2013-09-22 22:55:14 -07:00
John-David Dalton
5fcdcec1a8 Tweak test-ui.js for changes in the modularize build option. [ci skip] 2013-09-22 01:15:50 -07:00
John-David Dalton
8773704c8b Strengthen the UMD. 2013-09-20 23:01:53 -07:00
John-David Dalton
291fd1857e Reduce our readme and update docdown. [ci skip] 2013-09-20 21:18:26 -07:00
John-David Dalton
0aa4aeaddc Change directory in .travis.yml before running unit tests. 2013-09-20 19:52:49 -07:00
John-David Dalton
ca81f1b2e8 Add floating argument to _.random. [closes #354] 2013-09-20 00:21:42 -07:00
John-David Dalton
fca3a14410 Update readme with download descriptions. 2013-09-19 23:49:44 -07:00
John-David Dalton
d105e80ed8 Add "include" to .travis.yml. 2013-09-19 22:23:27 -07:00
John-David Dalton
ce63faa597 Add "matrix" to .travis.yml. 2013-09-19 21:12:17 -07:00
John-David Dalton
25c1b63a00 Fix doc typo in _.where. [ci skip] [closes #353, #355] 2013-09-19 18:40:58 -07:00
John-David Dalton
548728abba Avoid PhantomJS 1.9.2 bug in .travis.yml. 2013-09-19 09:33:33 -07:00
John-David Dalton
2ebdbd565a Add tests to check that _.support properties aren't minified. 2013-09-19 09:20:42 -07:00
John-David Dalton
86376616ff Remove testing modern builds by phantomjs in .travis.yml. 2013-09-19 08:53:55 -07:00
John-David Dalton
7c6865f948 Ensure reThis isn't used in Windows 8 apps. 2013-09-19 08:53:19 -07:00
John-David Dalton
c2da0070f5 Add legacy and mobile builds to .travis.yml. 2013-09-18 23:27:11 -07:00
John-David Dalton
bf2a2aed66 Fix typo in _.template docs. 2013-09-18 21:13:34 -07:00
John-David Dalton
403ea0a0e1 Fix _.compose unit test. 2013-09-18 01:20:08 -07:00
John-David Dalton
27976cbe1a Add notes about Infinity and -Infinity to _.min and _.max docs. 2013-09-17 22:54:42 -07:00
John-David Dalton
70147396a4 Add mid check to createCache bailout. 2013-09-17 22:53:10 -07:00
John-David Dalton
d6aed16e7c Allow _.compose to be called without arguments. [closes #352] 2013-09-17 19:40:48 -07:00
John-David Dalton
0414bae820 Avoid creating an enumerable Function#bind in test/index.html. 2013-09-17 19:30:01 -07:00
John-David Dalton
620866bc39 Ensure _.flatten handles empty arrays. 2013-09-17 19:29:09 -07:00
John-David Dalton
55f080e33f Optimize _.isArray fallback, baseFlatten, & _.isArguments for plain objects. 2013-09-17 08:58:18 -07:00
John-David Dalton
9f2b1b03d7 Don't restore undefined native methods in test/index.html. 2013-09-17 00:16:40 -07:00
John-David Dalton
c0a0f3aaf5 Minor whitespace nits in test and perf ui. [ci skip] 2013-09-17 00:05:21 -07:00
John-David Dalton
7726b5c56b Add more bad shim tests. 2013-09-16 23:57:01 -07:00
John-David Dalton
3daff8ab8a Decode custom test/perf build urls. 2013-09-16 23:56:26 -07:00
John-David Dalton
428c2097c7 Cleanup baseFlatten. 2013-09-16 21:20:14 -07:00
John-David Dalton
7786583ecf Avoid long fail message in _.flatten unit test. 2013-09-16 07:25:32 -07:00
John-David Dalton
9b79ea7d30 Minor doc tweaks. [ci skip] 2013-09-15 23:12:04 -07:00
John-David Dalton
3dc8436362 Ensure _.flatten works with extremely large arrays. [closes #349] 2013-09-15 18:37:09 -07:00
John-David Dalton
9f1f2a4845 Keep the defineProperty fallback in place so it can be used in phantom.js without throwing an error. 2013-09-15 17:29:18 -07:00
John-David Dalton
40204e8133 Cleanup docs. 2013-09-15 17:17:57 -07:00
John-David Dalton
133b1067c5 Add Node 0.8 to .travis.yml. 2013-09-14 00:09:56 -07:00
John-David Dalton
5c8287203e Adjust .gitignore to only ignore .min files in the root. 2013-09-13 21:39:12 -07:00
28 changed files with 2420 additions and 1735 deletions

2
.gitignore vendored
View File

@@ -1,8 +1,8 @@
.DS_Store .DS_Store
*.custom.* *.custom.*
*.min.*
*.template.* *.template.*
*.map *.map
/*.min.*
modularize modularize
node_modules node_modules
dist/*.backbone.* dist/*.backbone.*

View File

@@ -1,12 +0,0 @@
.*
*.md
/lodash.js
index.js
bower.json
component.json
doc
modularize
node_modules
perf
test
vendor

View File

@@ -1,19 +1,58 @@
language: node_js language: node_js
node_js: node_js:
- "0.6" - "0.6"
- "0.8"
- "0.10" - "0.10"
env: env:
- TEST_COMMAND="istanbul cover ./test/test.js" global:
- TEST_COMMAND="phantomjs ./test/test.js ../dist/lodash.compat.js" - BIN="node" BUILD=false MAKE=false OPTION=""
- TEST_COMMAND="phantomjs ./test/test.js ../dist/lodash.compat.min.js" matrix:
- TEST_COMMAND="node ./test/test.js ../dist/lodash.js" - BUILD="compat"
- TEST_COMMAND="node ./test/test.js ../dist/lodash.min.js" - BUILD="modern"
- BUILD="legacy"
- BUILD="mobile"
- BIN="phantomjs" BUILD="compat"
- BIN="phantomjs" BUILD="legacy"
- BIN="phantomjs" BUILD="mobile"
matrix:
include:
- node_js: "0.10"
env: BIN="istanbul"
- node_js: "0.10"
env: BIN="narwhal" BUILD="compat"
- node_js: "0.10"
env: BIN="narwhal" BUILD="legacy"
- node_js: "0.10"
env: BIN="rhino" BUILD="compat"
- node_js: "0.10"
env: BIN="rhino" BUILD="legacy"
- node_js: "0.10"
env: BIN="rhino" BUILD="compat" OPTION="-require"
- node_js: "0.10"
env: BIN="rhino" BUILD="legacy" OPTION="-require"
- node_js: "0.10"
env: BIN="ringo" BUILD="compat"
- node_js: "0.10"
env: BIN="ringo" BUILD="legacy"
git: git:
depth: 1 depth: 1
branches: branches:
only: only:
- master - master
before_script: before_install:
- "npm install -g istanbul" - "[ $BIN == 'istanbul' ] && npm install -g istanbul || true"
- "[ $BIN == 'narwhal' ] && wget https://github.com/280north/narwhal/archive/v0.3.2.zip && sudo unzip v0.3.2 -d /opt/ && rm v0.3.2.zip || true"
- "[ $BIN == 'narwhal' ] && sudo ln -s /opt/narwhal-0.3.2/bin/narwhal /usr/local/bin/narwhal && sudo chmod +x /usr/local/bin/narwhal || true"
- "[ $BIN == 'rhino' ] && sudo mkdir /opt/rhino-1.7R5 && sudo wget -O /opt/rhino-1.7R5/js.jar https://oss.sonatype.org/content/repositories/snapshots/org/mozilla/rhino/1.7R5-SNAPSHOT/rhino-1.7R5-20120629.144839-4.jar || true"
- "[ $BIN == 'rhino' ] && echo -e '#!/bin/sh\\njava -jar /opt/rhino-1.7R5/js.jar $@' | sudo tee /usr/local/bin/rhino && sudo chmod +x /usr/local/bin/rhino || true"
- "[ $BIN == 'ringo' ] && wget http://ringojs.org/downloads/ringojs-0.9.zip && sudo unzip ringojs-0.9 -d /opt && rm ringojs-0.9.zip || true"
- "[ $BIN == 'ringo' ] && sudo ln -s /opt/ringojs-0.9/bin/ringo /usr/local/bin/ringo && sudo chmod +x /usr/local/bin/ringo || true"
script: script:
- $TEST_COMMAND - "[ $BIN == 'istanbul' ] && $BIN cover ./test/test.js || true"
- "[ $BUILD != false ] && [ $BUILD != 'compat' ] && [ $BUILD != 'modern' ] && MAKE=true || true"
- "[ $MAKE != false ] && git clone --depth=1 --branch=master git://github.com/lodash/lodash-cli.git ./node_modules/lodash-cli || true"
- "[ $MAKE != false ] && mkdir ./node_modules/lodash-cli/node_modules && cd ./node_modules/lodash-cli/node_modules/ && ln -s ../../../ ./lodash && cd ../ && npm i . && cd ../../ || true"
- "[ $MAKE != false ] && node ./node_modules/lodash-cli/bin/lodash $BUILD -o ./dist/lodash.$BUILD.js || true"
- "[ $BUILD != false ] && cd ./test || true"
- "[ $BUILD != false ] && $BIN $OPTION ./test.js ../dist/lodash.$BUILD.js || true"
- "[ $BUILD != false ] && $BIN $OPTION ./test.js ../dist/lodash.$BUILD.min.js || true"

View File

@@ -1,30 +1,29 @@
# Lo-Dash v2.0.0 # Lo-Dash v2.2.1
A utility library delivering consistency, [customization](http://lodash.com/custom-builds), [performance](http://lodash.com/benchmarks), & [extras](http://lodash.com/#features). A utility library delivering consistency, [customization](http://lodash.com/custom-builds), [performance](http://lodash.com/benchmarks), & [extras](http://lodash.com/#features).
## Download ## Download
* Modern builds: * Modern builds perfect for newer browsers/environments:<br>
[Development](https://raw.github.com/lodash/lodash/2.0.0/dist/lodash.js) & [Development](https://raw.github.com/lodash/lodash/2.2.1/dist/lodash.js) &
[Production](https://raw.github.com/lodash/lodash/2.0.0/dist/lodash.min.js) [Production](https://raw.github.com/lodash/lodash/2.2.1/dist/lodash.min.js)
* Compatibility builds: * Compatibility builds for older environment support too:<br>
[Development](https://raw.github.com/lodash/lodash/2.0.0/dist/lodash.compat.js) & [Development](https://raw.github.com/lodash/lodash/2.2.1/dist/lodash.compat.js) &
[Production](https://raw.github.com/lodash/lodash/2.0.0/dist/lodash.compat.min.js) [Production](https://raw.github.com/lodash/lodash/2.2.1/dist/lodash.compat.min.js)
* Underscore builds: * Underscore builds to use as a drop-in replacement:<br>
[Development](https://raw.github.com/lodash/lodash/2.0.0/dist/lodash.underscore.js) & [Development](https://raw.github.com/lodash/lodash/2.2.1/dist/lodash.underscore.js) &
[Production](https://raw.github.com/lodash/lodash/2.0.0/dist/lodash.underscore.min.js) [Production](https://raw.github.com/lodash/lodash/2.2.1/dist/lodash.underscore.min.js)
Love modules? Weve got you covered with [lodash-amd](https://npmjs.org/package/lodash-amd), [lodash-node](https://npmjs.org/package/lodash-node), and [npm packages](https://npmjs.org/browse/author/jdalton) per method. CDN copies are available on [cdnjs](http://cdnjs.com/libraries/lodash.js/) & [jsDelivr](http://www.jsdelivr.com/#!lodash).<br>
For smaller file sizes, create [custom builds](http://lodash.com/custom-builds) with only the features needed.<br>
CDN copies are available on [cdnjs](http://cdnjs.com/) & [jsDelivr](http://www.jsdelivr.com/#!lodash).<br> Love modules? Weve got you covered with [lodash-amd](https://npmjs.org/package/lodash-amd), [lodash-node](https://npmjs.org/package/lodash-node), & [npm packages](https://npmjs.org/browse/keyword/lodash-modularized) per method.
For smaller file sizes, create [custom builds](http://lodash.com/custom-builds) with only the features needed.
## Dive in ## Dive in
Theres plenty of [documentation](http://lodash.com/docs), [unit tests](http://lodash.com/tests), & [benchmarks](http://lodash.com/benchmarks). Theres plenty of [documentation](http://lodash.com/docs), [unit tests](http://lodash.com/tests), & [benchmarks](http://lodash.com/benchmarks).<br>
For a list of upcoming features, check out our [roadmap](https://github.com/lodash/lodash/wiki/Roadmap).<br>
For a list of upcoming features, check out our [roadmap](https://github.com/lodash/lodash/wiki/Roadmap). The full changelog for this release is available on our [wiki](https://github.com/lodash/lodash/wiki/Changelog).
## Features *not* in Underscore ## Features *not* in Underscore
@@ -32,11 +31,12 @@ For a list of upcoming features, check out our [roadmap](https://github.com/loda
* [_(…)](http://lodash.com/docs#_) supports intuitive chaining * [_(…)](http://lodash.com/docs#_) supports intuitive chaining
* [_.at](http://lodash.com/docs#at) for cherry-picking collection values * [_.at](http://lodash.com/docs#at) for cherry-picking collection values
* [_.bindKey](http://lodash.com/docs#bindKey) for binding [*“lazy”*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods * [_.bindKey](http://lodash.com/docs#bindKey) for binding [*“lazy”*](http://michaux.ca/articles/lazy-function-definition-pattern) defined methods
* [_.clone](http://lodash.com/docs#clone) supports shallow cloning of `Date` & `RegExp` objects
* [_.cloneDeep](http://lodash.com/docs#cloneDeep) for deep cloning arrays & objects * [_.cloneDeep](http://lodash.com/docs#cloneDeep) for deep cloning arrays & objects
* [_.contains](http://lodash.com/docs#contains) accepts a `fromIndex` * [_.contains](http://lodash.com/docs#contains) accepts a `fromIndex`
* [_.createCallback](http://lodash.com/docs#createCallback) for extending callbacks in methods & mixins * [_.createCallback](http://lodash.com/docs#createCallback) for extending callbacks in methods & mixins
* [_.curry](http://lodash.com/docs#curry) for creating [curried](http://hughfdjackson.com/javascript/2013/07/06/why-curry-helps/) functions * [_.curry](http://lodash.com/docs#curry) for creating [curried](http://hughfdjackson.com/javascript/2013/07/06/why-curry-helps/) functions
* [_.debounce](http://lodash.com/docs#debounce) & [_.throttle](http://lodash.com/docs#throttle) accept `options` for more control * [_.debounce](http://lodash.com/docs#debounce) & [_.throttle](http://lodash.com/docs#throttle) accept additional `options` for more control
* [_.findIndex](http://lodash.com/docs#findIndex) & [_.findKey](http://lodash.com/docs#findKey) for finding indexes & keys * [_.findIndex](http://lodash.com/docs#findIndex) & [_.findKey](http://lodash.com/docs#findKey) for finding indexes & keys
* [_.forEach](http://lodash.com/docs#forEach) is chainable & supports exiting early * [_.forEach](http://lodash.com/docs#forEach) is chainable & supports exiting early
* [_.forIn](http://lodash.com/docs#forIn) for iterating own & inherited properties * [_.forIn](http://lodash.com/docs#forIn) for iterating own & inherited properties
@@ -47,6 +47,7 @@ For a list of upcoming features, check out our [roadmap](https://github.com/loda
* [_.parseInt](http://lodash.com/docs#parseInt) for consistent behavior * [_.parseInt](http://lodash.com/docs#parseInt) for consistent behavior
* [_.partialRight](http://lodash.com/docs#partialRight) for [partial application](http://lodash.com/docs#partial) from the right * [_.partialRight](http://lodash.com/docs#partialRight) for [partial application](http://lodash.com/docs#partial) from the right
* [_.pull](http://lodash.com/docs#pull) & [_.remove](http://lodash.com/docs#remove) for mutating arrays * [_.pull](http://lodash.com/docs#pull) & [_.remove](http://lodash.com/docs#remove) for mutating arrays
* [_.random](http://lodash.com/docs#random) supports returning floating-point numbers
* [_.runInContext](http://lodash.com/docs#runInContext) for easier mocking * [_.runInContext](http://lodash.com/docs#runInContext) for easier mocking
* [_.support](http://lodash.com/docs#support) for flagging environment features * [_.support](http://lodash.com/docs#support) for flagging environment features
* [_.template](http://lodash.com/docs#template) supports [*“imports”*](http://lodash.com/docs#templateSettings_imports) options & [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.8.6) * [_.template](http://lodash.com/docs#template) supports [*“imports”*](http://lodash.com/docs#templateSettings_imports) options & [ES6 template delimiters](http://people.mozilla.org/~jorendorff/es6-draft.html#sec-7.8.6)
@@ -78,7 +79,7 @@ For a list of upcoming features, check out our [roadmap](https://github.com/loda
## Support ## Support
Tested in Chrome 5~29, Firefox 2~23, IE 6-10, Opera 9.25~15, Safari 3-6, Node.js 0.6.8-0.10.18, Narwhal 0.3.2, PhantomJS 1.9.1, RingoJS 0.9, & Rhino 1.7RC5. Tested in Chrome 5~29, Firefox 2~24, IE 6-10, Opera 9.25~16, Safari 3-6, Node.js 0.6.8-0.10.20, Narwhal 0.3.2, PhantomJS 1.9.2, RingoJS 0.9, & Rhino 1.7RC5.
## Installation & usage ## Installation & usage
@@ -91,10 +92,10 @@ In browsers:
Using [`npm`](http://npmjs.org/): Using [`npm`](http://npmjs.org/):
```bash ```bash
npm i lodash npm i --save lodash
{sudo} npm i -g lodash {sudo} npm i -g lodash
npm link lodash npm ln lodash
``` ```
In [Node.js](http://nodejs.org/) & [Ringo](http://ringojs.org/): In [Node.js](http://nodejs.org/) & [Ringo](http://ringojs.org/):
@@ -107,7 +108,7 @@ var _ = require('lodash/dist/lodash.underscore');
**Notes:** **Notes:**
* Dont assign values to [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL * Dont assign values to [special variable](http://nodejs.org/api/repl.html#repl_repl_features) `_` when in the REPL
* If Lo-Dash is installed globally, run [`npm link lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your projects root directory *before* requiring it * If Lo-Dash is installed globally, run [`npm ln lodash`](http://blog.nodejs.org/2011/03/23/npm-1-0-global-vs-local-installation/) in your projects root directory *before* requiring it
* Node.js 0.10.8-0.10.11 [have](https://github.com/joyent/node/issues/5622) [bugs](https://github.com/joyent/node/issues/5688) preventing minified builds * Node.js 0.10.8-0.10.11 [have](https://github.com/joyent/node/issues/5622) [bugs](https://github.com/joyent/node/issues/5688) preventing minified builds
In [Rhino](http://www.mozilla.org/rhino/): In [Rhino](http://www.mozilla.org/rhino/):
@@ -129,60 +130,6 @@ require({
}); });
``` ```
## Release Notes
### <sup>v2.0.0</sup>
#### Compatibility Warnings
* Aligned `_.after` with Underscore 1.5.0, making it always return a function
#### Noteable Changes
* Created Lo-Dash methods as `npm` packages & AMD/Node.js modules
* Made `_.chain` force chaining for all methods, even those that normally return unwrapped values
* Moved the build utility to [lodash-cli](https://npmjs.org/package/lodash-cli)
* Optimized `_.contains`, `_.debounce`, `_.isArguments`, `_.throttle`, `_.where`,<br>
& functions created by `_.bind`, `_.bindKey`, `_.curry`, `_.partial`, & `_.partialRight`
* Added [`_.curry`](http://lodash.com/docs#curry), [`_.forEachRight`](http://lodash.com/docs#forEachRight),
[`_.indexBy`](http://lodash.com/docs#indexBy), [`_.findLast`](http://lodash.com/docs#findLast),
[`_.findLastIndex`](http://lodash.com/docs#findLastIndex),<br>
[`_.findLastKey`](http://lodash.com/docs#findLastKey), [`_.forInRight`](http://lodash.com/docs#forInRight),
[`_.forOwnRight`](http://lodash.com/docs#forOwnRight), [`_.pull`](http://lodash.com/docs#pull),
[`_.remove`](http://lodash.com/docs#remove), & [`_.sample`](http://lodash.com/docs#sample)
#### Other Changes
* Added Curl & Dojo module loaders to the unit tests
* Added the `modularize` build option
* Added support for the `iife` command to be used without an `%output%` token
* Added support for `_.mixin` to accept a destination object
* Added support for `_.range` to accept a `step` of `0`
* Added `_.eachRight` as an alias for `_.forEachRight`
* Ensured *“Arrays”* methods support `arguments` objects
* Ensured *“Functions”* methods throw when not passed functions
* Ensured `_.at` works as a `callback` for `_.map`
* Ensured `_.createCallback` works when no `argCount` is specified
* Ensured `_.first` & `_.last` return arrays when passed a falsey `array` with an `n` value
* Ensured `_.flatten` works with `arguments` objects
* Ensured minified files work with Dojos builder
* Ensured `_.zipObject` skips falsey elements
* Improved dead code removal from builds
* Improved JSDoc syntax
* Made `_.memoize` avoid prefixing `cache` keys when using a `resolver` function
* Made `_.unzip` an alias of `_.zip`
* Removed local `clearTimeout` & `setTimeout` variables from the `underscore` build
* Reduced the size of the repo & `npm` package
* Simplified the bailout in `createCache`
* Updated sourceURL & sourceMappingURL syntax
* Updated `underscore` build compatibility to v1.5.2
The full changelog is available [here](https://github.com/lodash/lodash/wiki/Changelog).
## BestieJS
Lo-Dash is part of the [BestieJS](https://github.com/bestiejs) *“Best in Class”* module collection. This means it promotes solid environment support, ES5+ precedents, unit testing, & plenty of documentation.
## Author ## Author
| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](http://twitter.com/jdalton "Follow @jdalton on Twitter") | | [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](http://twitter.com/jdalton "Follow @jdalton on Twitter") |

View File

@@ -1,7 +1,7 @@
{ {
"name": "lodash", "name": "lodash",
"version": "2.0.0", "version": "2.2.1",
"main": "./dist/lodash.compat.js", "main": "dist/lodash.compat.js",
"ignore": [ "ignore": [
".*", ".*",
"*.custom.*", "*.custom.*",

View File

@@ -1,10 +1,10 @@
{ {
"name": "lodash", "name": "lodash",
"repo": "lodash/lodash", "repo": "lodash/lodash",
"version": "2.0.0", "version": "2.2.1",
"description": "A utility library delivering consistency, customization, performance, and extras.", "description": "A utility library delivering consistency, customization, performance, & extras.",
"license": "MIT", "license": "MIT",
"keywords": ["amd", "browser", "client", "customize", "functional", "performance", "server", "speed", "util"], "keywords": ["amd", "browser", "client", "functional", "server", "util"],
"scripts": [ "scripts": [
"index.js", "index.js",
"dist/lodash.compat.js" "dist/lodash.compat.js"

399
dist/lodash.compat.js vendored
View File

@@ -1,6 +1,6 @@
/** /**
* @license * @license
* Lo-Dash 2.0.0 (Custom Build) <http://lodash.com/> * Lo-Dash 2.2.1 (Custom Build) <http://lodash.com/>
* Build: `lodash -o ./dist/lodash.compat.js` * Build: `lodash -o ./dist/lodash.compat.js`
* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/> * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE> * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
@@ -70,7 +70,7 @@
var reNoMatch = /($^)/; var reNoMatch = /($^)/;
/** Used to detect functions containing a `this` reference */ /** Used to detect functions containing a `this` reference */
var reThis = (reThis = /\bthis\b/) && reThis.test(runInContext) && reThis; var reThis = /\bthis\b/;
/** Used to match unescaped characters in compiled string literals */ /** Used to match unescaped characters in compiled string literals */
var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g; var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
@@ -111,6 +111,36 @@
cloneableClasses[numberClass] = cloneableClasses[objectClass] = cloneableClasses[numberClass] = cloneableClasses[objectClass] =
cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true; cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
/** Used as an internal `_.debounce` options object */
var debounceOptions = {
'leading': false,
'maxWait': 0,
'trailing': false
};
/** Used as the property descriptor for `__bindData__` */
var descriptor = {
'configurable': false,
'enumerable': false,
'value': null,
'writable': false
};
/** Used as the data object for `iteratorTemplate` */
var iteratorData = {
'args': '',
'array': null,
'bottom': '',
'firstArg': '',
'init': '',
'keys': null,
'loop': '',
'shadowedProps': null,
'support': null,
'top': '',
'useHas': false
};
/** Used to determine if values are of the language type Object */ /** Used to determine if values are of the language type Object */
var objectTypes = { var objectTypes = {
'boolean': false, 'boolean': false,
@@ -136,10 +166,13 @@
var root = (objectTypes[typeof window] && window) || this; var root = (objectTypes[typeof window] && window) || this;
/** Detect free variable `exports` */ /** Detect free variable `exports` */
var freeExports = objectTypes[typeof exports] && exports; var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
/** Detect free variable `module` */ /** Detect free variable `module` */
var freeModule = objectTypes[typeof module] && module && module.exports == freeExports && module; var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
/** Detect the popular CommonJS extension `module.exports` */
var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
/** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */
var freeGlobal = objectTypes[typeof global] && global; var freeGlobal = objectTypes[typeof global] && global;
@@ -199,7 +232,7 @@
} }
/** /**
* Adds a given `value` to the corresponding cache object. * Adds a given value to the corresponding cache object.
* *
* @private * @private
* @param {*} value The value to add to the cache. * @param {*} value The value to add to the cache.
@@ -278,9 +311,11 @@
var index = -1, var index = -1,
length = array.length, length = array.length,
first = array[0], first = array[0],
mid = array[(length / 2) | 0],
last = array[length - 1]; last = array[length - 1];
if (first && typeof first == 'object' && last && typeof last == 'object') { if (first && typeof first == 'object' &&
mid && typeof mid == 'object' && last && typeof last == 'object') {
return false; return false;
} }
var cache = getObject(); var cache = getObject();
@@ -327,34 +362,19 @@
*/ */
function getObject() { function getObject() {
return objectPool.pop() || { return objectPool.pop() || {
'args': '',
'array': null, 'array': null,
'bottom': '',
'cache': null, 'cache': null,
'configurable': false,
'criteria': null, 'criteria': null,
'enumerable': false,
'false': false, 'false': false,
'firstArg': '',
'index': 0, 'index': 0,
'init': '',
'keys': null,
'leading': false,
'loop': '',
'maxWait': 0,
'null': false, 'null': false,
'number': null, 'number': null,
'object': null, 'object': null,
'push': null, 'push': null,
'shadowedProps': null,
'string': null, 'string': null,
'top': '',
'trailing': false,
'true': false, 'true': false,
'undefined': false, 'undefined': false,
'useHas': false, 'value': null
'value': null,
'writable': false
}; };
} }
@@ -441,7 +461,7 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Create a new `lodash` function using the given `context` object. * Create a new `lodash` function using the given context object.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -499,6 +519,7 @@
fnToString = Function.prototype.toString, fnToString = Function.prototype.toString,
getPrototypeOf = reNative.test(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, getPrototypeOf = reNative.test(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf,
hasOwnProperty = objectProto.hasOwnProperty, hasOwnProperty = objectProto.hasOwnProperty,
now = reNative.test(now = Date.now) && now || function() { return +new Date; },
push = arrayRef.push, push = arrayRef.push,
propertyIsEnumerable = objectProto.propertyIsEnumerable, propertyIsEnumerable = objectProto.propertyIsEnumerable,
setImmediate = context.setImmediate, setImmediate = context.setImmediate,
@@ -566,8 +587,8 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Creates a `lodash` object which wraps the given value to enable method * Creates a `lodash` object which wraps the given value to enable intuitive
* chaining. * method chaining.
* *
* In addition to Lo-Dash methods, wrappers also have the following `Array` methods: * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
* `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
@@ -601,6 +622,8 @@
* The wrapper functions `first` and `last` return wrapped values when `n` is * The wrapper functions `first` and `last` return wrapped values when `n` is
* provided, otherwise they return unwrapped values. * provided, otherwise they return unwrapped values.
* *
* Explicit chaining can be enabled by using the `_.chain` method.
*
* @name _ * @name _
* @constructor * @constructor
* @category Chaining * @category Chaining
@@ -667,14 +690,6 @@
for (var prop in new ctor) { props.push(prop); } for (var prop in new ctor) { props.push(prop); }
for (prop in arguments) { } for (prop in arguments) { }
/**
* Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5).
*
* @memberOf _.support
* @type boolean
*/
support.argsObject = arguments.constructor == Object && !(arguments instanceof Array);
/** /**
* Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9). * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9).
* *
@@ -683,6 +698,14 @@
*/ */
support.argsClass = toString.call(arguments) == argsClass; support.argsClass = toString.call(arguments) == argsClass;
/**
* Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5).
*
* @memberOf _.support
* @type boolean
*/
support.argsObject = arguments.constructor == Object && !(arguments instanceof Array);
/** /**
* Detect if `name` or `message` properties of `Error.prototype` are * Detect if `name` or `message` properties of `Error.prototype` are
* enumerable by default. (IE < 9, Safari < 5.1) * enumerable by default. (IE < 9, Safari < 5.1)
@@ -713,6 +736,15 @@
*/ */
support.fastBind = nativeBind && !isV8; support.fastBind = nativeBind && !isV8;
/**
* Detect if functions can be decompiled by `Function#toString`
* (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).
*
* @memberOf _.support
* @type boolean
*/
support.funcDecomp = !reNative.test(context.WinRTError) && reThis.test(runInContext);
/** /**
* Detect if `Function#name` is supported (all but IE). * Detect if `Function#name` is supported (all but IE).
* *
@@ -721,14 +753,6 @@
*/ */
support.funcNames = typeof Function.name == 'string'; support.funcNames = typeof Function.name == 'string';
/**
* Detect if own properties are iterated after inherited properties (all but IE < 9).
*
* @memberOf _.support
* @type boolean
*/
support.ownLast = props[0] != 'x';
/** /**
* Detect if `arguments` object indexes are non-enumerable * Detect if `arguments` object indexes are non-enumerable
* (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1). * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1).
@@ -749,6 +773,14 @@
*/ */
support.nonEnumShadows = !/valueOf/.test(props); support.nonEnumShadows = !/valueOf/.test(props);
/**
* Detect if own properties are iterated after inherited properties (all but IE < 9).
*
* @memberOf _.support
* @type boolean
*/
support.ownLast = props[0] != 'x';
/** /**
* Detect if `Array#shift` and `Array#splice` augment array-like objects correctly. * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.
* *
@@ -958,64 +990,62 @@
* *
* @private * @private
* @param {*} value The value to clone. * @param {*} value The value to clone.
* @param {boolean} [deep=false] A flag to indicate a deep clone. * @param {boolean} [deep=false] Specify a deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {Array} [stackA=[]] Tracks traversed source objects. * @param {Array} [stackA=[]] Tracks traversed source objects.
* @param {Array} [stackB=[]] Associates clones with source counterparts. * @param {Array} [stackB=[]] Associates clones with source counterparts.
* @returns {*} Returns the cloned `value`. * @returns {*} Returns the cloned value.
*/ */
function baseClone(value, deep, callback, stackA, stackB) { function baseClone(value, deep, callback, stackA, stackB) {
var result = value;
if (callback) { if (callback) {
result = callback(result); var result = callback(value);
if (typeof result != 'undefined') { if (typeof result != 'undefined') {
return result; return result;
} }
result = value;
} }
// inspect [[Class]] // inspect [[Class]]
var isObj = isObject(result); var isObj = isObject(value);
if (isObj) { if (isObj) {
var className = toString.call(result); var className = toString.call(value);
if (!cloneableClasses[className] || (!support.nodeClass && isNode(result))) { if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) {
return result; return value;
} }
var isArr = isArray(result); var ctor = ctorByClass[className];
} switch (className) {
// shallow clone case boolClass:
if (!isObj || !deep) { case dateClass:
return isObj return new ctor(+value);
? (isArr ? slice(result) : assign({}, result))
: result;
}
var ctor = ctorByClass[className];
switch (className) {
case boolClass:
case dateClass:
return new ctor(+result);
case numberClass: case numberClass:
case stringClass: case stringClass:
return new ctor(result); return new ctor(value);
case regexpClass: case regexpClass:
return ctor(result.source, reFlags.exec(result)); result = ctor(value.source, reFlags.exec(value));
} result.lastIndex = value.lastIndex;
// check for circular references and return corresponding clone return result;
var initedStack = !stackA;
stackA || (stackA = getArray());
stackB || (stackB = getArray());
var length = stackA.length;
while (length--) {
if (stackA[length] == value) {
return stackB[length];
} }
} else {
return value;
} }
// init cloned object var isArr = isArray(value);
result = isArr ? ctor(result.length) : {}; if (deep) {
// check for circular references and return corresponding clone
var initedStack = !stackA;
stackA || (stackA = getArray());
stackB || (stackB = getArray());
var length = stackA.length;
while (length--) {
if (stackA[length] == value) {
return stackB[length];
}
}
result = isArr ? ctor(value.length) : {};
}
else {
result = isArr ? slice(value) : assign({}, value);
}
// add array properties assigned by `RegExp#exec` // add array properties assigned by `RegExp#exec`
if (isArr) { if (isArr) {
if (hasOwnProperty.call(value, 'index')) { if (hasOwnProperty.call(value, 'index')) {
@@ -1025,6 +1055,10 @@
result.input = value.input; result.input = value.input;
} }
} }
// exit for shallow clone
if (!deep) {
return result;
}
// add the source value to the stack of traversed objects // add the source value to the stack of traversed objects
// and associate it with its clone // and associate it with its clone
stackA.push(value); stackA.push(value);
@@ -1068,7 +1102,7 @@
} }
if (support.funcNames || !bindData) { if (support.funcNames || !bindData) {
// checks if `func` references the `this` keyword and stores the result // checks if `func` references the `this` keyword and stores the result
bindData = !reThis || reThis.test(source); bindData = !support.funcDecomp || reThis.test(source);
setBindData(func, bindData); setBindData(func, bindData);
} }
} }
@@ -1111,9 +1145,21 @@
while (++index < length) { while (++index < length) {
var value = array[index]; var value = array[index];
// recursively flatten arrays (susceptible to call stack limits)
if (value && typeof value == 'object' && (isArray(value) || isArguments(value))) { if (value && typeof value == 'object' && typeof value.length == 'number'
push.apply(result, isShallow ? value : baseFlatten(value, isShallow, isArgArrays)); && (isArray(value) || isArguments(value))) {
// recursively flatten arrays (susceptible to call stack limits)
if (!isShallow) {
value = baseFlatten(value, isShallow, isArgArrays);
}
var valIndex = -1,
valLength = value.length,
resIndex = result.length;
result.length += valLength;
while (++valIndex < valLength) {
result[resIndex++] = value[valIndex];
}
} else if (!isArgArrays) { } else if (!isArgArrays) {
result.push(value); result.push(value);
} }
@@ -1567,39 +1613,35 @@
* @returns {Function} Returns the compiled function. * @returns {Function} Returns the compiled function.
*/ */
function createIterator() { function createIterator() {
var data = getObject();
// data properties // data properties
data.shadowedProps = shadowedProps; iteratorData.shadowedProps = shadowedProps;
// iterator options // iterator options
data.array = data.bottom = data.loop = data.top = ''; iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = '';
data.init = 'iterable'; iteratorData.init = 'iterable';
data.useHas = true; iteratorData.useHas = true;
// merge options into a template data object // merge options into a template data object
for (var object, index = 0; object = arguments[index]; index++) { for (var object, index = 0; object = arguments[index]; index++) {
for (var key in object) { for (var key in object) {
data[key] = object[key]; iteratorData[key] = object[key];
} }
} }
var args = data.args; var args = iteratorData.args;
data.firstArg = /^[^,]+/.exec(args)[0]; iteratorData.firstArg = /^[^,]+/.exec(args)[0];
// create the function factory // create the function factory
var factory = Function( var factory = Function(
'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' + 'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' +
'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' + 'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' +
'objectTypes, nonEnumProps, stringClass, stringProto, toString', 'objectTypes, nonEnumProps, stringClass, stringProto, toString',
'return function(' + args + ') {\n' + iteratorTemplate(data) + '\n}' 'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}'
); );
releaseObject(data);
// return the compiled function // return the compiled function
return factory( return factory(
baseCreateCallback, errorClass, errorProto, hasOwnProperty, baseCreateCallback, errorClass, errorProto, hasOwnProperty,
indicatorObject, isArguments, isArray, isString, data.keys, objectProto, indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto,
objectTypes, nonEnumProps, stringClass, stringProto, toString objectTypes, nonEnumProps, stringClass, stringProto, toString
); );
} }
@@ -1658,10 +1700,8 @@
* @param {*} value The value to set. * @param {*} value The value to set.
*/ */
var setBindData = !defineProperty ? noop : function(func, value) { var setBindData = !defineProperty ? noop : function(func, value) {
var descriptor = getObject();
descriptor.value = value; descriptor.value = value;
defineProperty(func, '__bindData__', descriptor); defineProperty(func, '__bindData__', descriptor);
releaseObject(descriptor);
}; };
/** /**
@@ -1734,12 +1774,14 @@
* // => false * // => false
*/ */
function isArguments(value) { function isArguments(value) {
return (value && typeof value == 'object') ? toString.call(value) == argsClass : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == argsClass || false;
} }
// fallback for browsers that can't detect `arguments` objects by [[Class]] // fallback for browsers that can't detect `arguments` objects by [[Class]]
if (!support.argsClass) { if (!support.argsClass) {
isArguments = function(value) { isArguments = function(value) {
return (value && typeof value == 'object') ? hasOwnProperty.call(value, 'callee') : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
hasOwnProperty.call(value, 'callee') || false;
}; };
} }
@@ -1761,7 +1803,8 @@
* // => true * // => true
*/ */
var isArray = nativeIsArray || function(value) { var isArray = nativeIsArray || function(value) {
return (value && typeof value == 'object') ? toString.call(value) == arrayClass : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == arrayClass || false;
}; };
/** /**
@@ -1929,10 +1972,10 @@
* @memberOf _ * @memberOf _
* @category Objects * @category Objects
* @param {*} value The value to clone. * @param {*} value The value to clone.
* @param {boolean} [deep=false] A flag to indicate a deep clone. * @param {boolean} [deep=false] Specify a deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {*} [thisArg] The `this` binding of `callback`. * @param {*} [thisArg] The `this` binding of `callback`.
* @returns {*} Returns the cloned `value`. * @returns {*} Returns the cloned value.
* @example * @example
* *
* var stooges = [ * var stooges = [
@@ -1986,7 +2029,7 @@
* @param {*} value The value to deep clone. * @param {*} value The value to deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {*} [thisArg] The `this` binding of `callback`. * @param {*} [thisArg] The `this` binding of `callback`.
* @returns {*} Returns the deep cloned `value`. * @returns {*} Returns the deep cloned value.
* @example * @example
* *
* var stooges = [ * var stooges = [
@@ -3563,10 +3606,11 @@
} }
/** /**
* Retrieves the maximum value of an array. If a callback is provided it * Retrieves the maximum value of a collection. If the collection is empty or
* will be executed for each value in the array to generate the criterion by * falsey `-Infinity` is returned. If a callback is provided it will be executed
* which the value is ranked. The callback is bound to `thisArg` and invoked * for each value in the collection to generate the criterion by which the value
* with three arguments; (value, index, collection). * is ranked. The callback is bound to `thisArg` and invoked with three
* arguments; (value, index, collection).
* *
* If a property name is provided for `callback` the created "_.pluck" style * If a property name is provided for `callback` the created "_.pluck" style
* callback will return the property value of the given element. * callback will return the property value of the given element.
@@ -3632,10 +3676,11 @@
} }
/** /**
* Retrieves the minimum value of an array. If a callback is provided it * Retrieves the minimum value of a collection. If the collection is empty or
* will be executed for each value in the array to generate the criterion by * falsey `Infinity` is returned. If a callback is provided it will be executed
* which the value is ranked. The callback is bound to `thisArg` and invoked * for each value in the collection to generate the criterion by which the value
* with three arguments; (value, index, collection). * is ranked. The callback is bound to `thisArg` and invoked with three
* arguments; (value, index, collection).
* *
* If a property name is provided for `callback` the created "_.pluck" style * If a property name is provided for `callback` the created "_.pluck" style
* callback will return the property value of the given element. * callback will return the property value of the given element.
@@ -4091,16 +4136,16 @@
* @category Collections * @category Collections
* @param {Array|Object|string} collection The collection to iterate over. * @param {Array|Object|string} collection The collection to iterate over.
* @param {Object} properties The object of property values to filter by. * @param {Object} properties The object of property values to filter by.
* @returns {Array} Returns a new array of elements that have the given `properties`. * @returns {Array} Returns a new array of elements that have the given properties.
* @example * @example
* *
* var stooges = [ * var stooges = [
* { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }, * { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
* { 'name': 'moe', 'age': '40', 'quotes': ['Spread out!', 'You knucklehead!'] } * { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }
* ]; * ];
* *
* _.where(stooges, { 'age': 40 }); * _.where(stooges, { 'age': 40 });
* // => [{ 'name': 'moe', 'age': '40', 'quotes': ['Spread out!', 'You knucklehead!'] }] * // => [{ 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }]
* *
* _.where(stooges, { 'quotes': ['Poifect!'] }); * _.where(stooges, { 'quotes': ['Poifect!'] });
* // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }] * // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }]
@@ -5252,7 +5297,7 @@
*/ */
function compose() { function compose() {
var funcs = arguments, var funcs = arguments,
length = funcs.length || 1; length = funcs.length;
while (length--) { while (length--) {
if (!isFunction(funcs[length])) { if (!isFunction(funcs[length])) {
@@ -5435,7 +5480,7 @@
trailing = 'trailing' in options ? options.trailing : trailing; trailing = 'trailing' in options ? options.trailing : trailing;
} }
var delayed = function() { var delayed = function() {
var remaining = wait - (new Date - stamp); var remaining = wait - (now() - stamp);
if (remaining <= 0) { if (remaining <= 0) {
if (maxTimeoutId) { if (maxTimeoutId) {
clearTimeout(maxTimeoutId); clearTimeout(maxTimeoutId);
@@ -5443,7 +5488,7 @@
var isCalled = trailingCall; var isCalled = trailingCall;
maxTimeoutId = timeoutId = trailingCall = undefined; maxTimeoutId = timeoutId = trailingCall = undefined;
if (isCalled) { if (isCalled) {
lastCalled = +new Date; lastCalled = now();
result = func.apply(thisArg, args); result = func.apply(thisArg, args);
} }
} else { } else {
@@ -5457,14 +5502,14 @@
} }
maxTimeoutId = timeoutId = trailingCall = undefined; maxTimeoutId = timeoutId = trailingCall = undefined;
if (trailing || (maxWait !== wait)) { if (trailing || (maxWait !== wait)) {
lastCalled = +new Date; lastCalled = now();
result = func.apply(thisArg, args); result = func.apply(thisArg, args);
} }
}; };
return function() { return function() {
args = arguments; args = arguments;
stamp = +new Date; stamp = now();
thisArg = this; thisArg = this;
trailingCall = trailing && (timeoutId || !leading); trailingCall = trailing && (timeoutId || !leading);
@@ -5519,7 +5564,7 @@
return setTimeout(function() { func.apply(undefined, args); }, 1); return setTimeout(function() { func.apply(undefined, args); }, 1);
} }
// use `setImmediate` if available in Node.js // use `setImmediate` if available in Node.js
if (isV8 && freeModule && typeof setImmediate == 'function') { if (isV8 && moduleExports && typeof setImmediate == 'function') {
defer = function(func) { defer = function(func) {
if (!isFunction(func)) { if (!isFunction(func)) {
throw new TypeError; throw new TypeError;
@@ -5737,13 +5782,11 @@
leading = 'leading' in options ? options.leading : leading; leading = 'leading' in options ? options.leading : leading;
trailing = 'trailing' in options ? options.trailing : trailing; trailing = 'trailing' in options ? options.trailing : trailing;
} }
options = getObject(); debounceOptions.leading = leading;
options.leading = leading; debounceOptions.maxWait = wait;
options.maxWait = wait; debounceOptions.trailing = trailing;
options.trailing = trailing;
var result = debounce(func, wait, options); var result = debounce(func, wait, debounceOptions);
releaseObject(options);
return result; return result;
} }
@@ -5858,9 +5901,12 @@
push.apply(args, arguments); push.apply(args, arguments);
var result = func.apply(object, args); var result = func.apply(object, args);
return (value && typeof value == 'object' && value === result) if (value && typeof value == 'object' && value === result) {
? this return this;
: new ctor(result); }
result = new ctor(result);
result.__chain__ = this.__chain__;
return result;
}; };
} }
}); });
@@ -5884,7 +5930,7 @@
} }
/** /**
* Converts the given `value` into an integer of the specified `radix`. * Converts the given value into an integer of the specified radix.
* If `radix` is `undefined` or `0` a `radix` of `10` is used unless the * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the
* `value` is a hexadecimal, in which case a `radix` of `16` is used. * `value` is a hexadecimal, in which case a `radix` of `16` is used.
* *
@@ -5910,36 +5956,57 @@
/** /**
* Produces a random number between `min` and `max` (inclusive). If only one * Produces a random number between `min` and `max` (inclusive). If only one
* argument is provided a number between `0` and the given number will be * argument is provided a number between `0` and the given number will be
* returned. * returned. If `floating` is truey or either `min` or `max` are floats a
* floating-point number will be returned instead of an integer.
* *
* @static * @static
* @memberOf _ * @memberOf _
* @category Utilities * @category Utilities
* @param {number} [min=0] The minimum possible value. * @param {number} [min=0] The minimum possible value.
* @param {number} [max=1] The maximum possible value. * @param {number} [max=1] The maximum possible value.
* @param {boolean} [floating=false] Specify returning a floating-point number.
* @returns {number} Returns a random number. * @returns {number} Returns a random number.
* @example * @example
* *
* _.random(0, 5); * _.random(0, 5);
* // => a number between 0 and 5 * // => an integer between 0 and 5
* *
* _.random(5); * _.random(5);
* // => also a number between 0 and 5 * // => also an integer between 0 and 5
*
* _.random(5, true);
* // => a floating-point number between 0 and 5
*
* _.random(1.2, 5.2);
* // => a floating-point number between 1.2 and 5.2
*/ */
function random(min, max) { function random(min, max, floating) {
if (min == null && max == null) { var noMin = min == null,
noMax = max == null;
if (floating == null) {
if (typeof min == 'boolean' && noMax) {
floating = min;
min = 1;
}
else if (!noMax && typeof max == 'boolean') {
floating = max;
noMax = true;
}
}
if (noMin && noMax) {
max = 1; max = 1;
} }
min = +min || 0; min = +min || 0;
if (max == null) { if (noMax) {
max = min; max = min;
min = 0; min = 0;
} else { } else {
max = +max || 0; max = +max || 0;
} }
var rand = nativeRandom(); var rand = nativeRandom();
return (min % 1 || max % 1) return (floating || min % 1 || max % 1)
? min + nativeMin(rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1))), max) ? nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max)
: min + floor(rand * (max - min + 1)); : min + floor(rand * (max - min + 1));
} }
@@ -6037,8 +6104,8 @@
* // => 'hello mustache!' * // => 'hello mustache!'
* *
* // using the `imports` option to import jQuery * // using the `imports` option to import jQuery
* var list = '<% $.each(people, function(name) { %><li><%= name %></li><% }); %>'; * var list = '<% $.each(people, function(name) { %><li><%- name %></li><% }); %>';
* _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery }); * _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery } });
* // => '<li>moe</li><li>larry</li>' * // => '<li>moe</li><li>larry</li>'
* *
* // using the `sourceURL` option to specify a custom sourceURL for the template * // using the `sourceURL` option to specify a custom sourceURL for the template
@@ -6156,7 +6223,7 @@
if (data) { if (data) {
return result(data); return result(data);
} }
// provide the compiled function's source via its `toString` method, in // provide the compiled function's source by its `toString` method, in
// supported environments, or the `source` property as a convenience for // supported environments, or the `source` property as a convenience for
// inlining compiled templates during the build process // inlining compiled templates during the build process
result.source = source; result.source = source;
@@ -6241,7 +6308,8 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Creates a `lodash` object that wraps the given `value`. * Creates a `lodash` object that wraps the given value with explicit
* method chaining enabled.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -6257,9 +6325,10 @@
* ]; * ];
* *
* var youngest = _.chain(stooges) * var youngest = _.chain(stooges)
* .sortBy(function(stooge) { return stooge.age; }) * .sortBy('age')
* .map(function(stooge) { return stooge.name + ' is ' + stooge.age; }) * .map(function(stooge) { return stooge.name + ' is ' + stooge.age; })
* .first(); * .first()
* .value();
* // => 'moe is 40' * // => 'moe is 40'
*/ */
function chain(value) { function chain(value) {
@@ -6296,7 +6365,7 @@
} }
/** /**
* Enables method chaining on the wrapper object. * Enables explicit method chaining on the wrapper object.
* *
* @name chain * @name chain
* @memberOf _ * @memberOf _
@@ -6304,11 +6373,21 @@
* @returns {*} Returns the wrapper object. * @returns {*} Returns the wrapper object.
* @example * @example
* *
* var sum = _([1, 2, 3]) * var stooges = [
* .chain() * { 'name': 'moe', 'age': 40 },
* .reduce(function(sum, num) { return sum + num; }) * { 'name': 'larry', 'age': 50 }
* .value() * ];
* // => 6` *
* // without explicit chaining
* _(stooges).first();
* // => { 'name': 'moe', 'age': 40 }
*
* // with explicit chaining
* _(stooges).chain()
* .first()
* .pick('age')
* .value()
* // => { 'age': 40 }
*/ */
function wrapperChain() { function wrapperChain() {
this.__chain__ = true; this.__chain__ = true;
@@ -6542,7 +6621,7 @@
* @memberOf _ * @memberOf _
* @type string * @type string
*/ */
lodash.VERSION = '2.0.0'; lodash.VERSION = '2.2.1';
// add "Chaining" functions to the wrapper // add "Chaining" functions to the wrapper
lodash.prototype.chain = wrapperChain; lodash.prototype.chain = wrapperChain;
@@ -6581,7 +6660,7 @@
}); });
// avoid array-like object bugs with `Array#shift` and `Array#splice` // avoid array-like object bugs with `Array#shift` and `Array#splice`
// in Firefox < 10 and IE < 9 // in IE < 9, Firefox < 10, Narwhal, and RingoJS
if (!support.spliceObjects) { if (!support.spliceObjects) {
baseEach(['pop', 'shift', 'splice'], function(methodName) { baseEach(['pop', 'shift', 'splice'], function(methodName) {
var func = arrayRef[methodName], var func = arrayRef[methodName],
@@ -6615,7 +6694,7 @@
// Expose Lo-Dash to the global object even when an AMD loader is present in // Expose Lo-Dash to the global object even when an AMD loader is present in
// case Lo-Dash was injected by a third-party script and not intended to be // case Lo-Dash was injected by a third-party script and not intended to be
// loaded as a module. The global assignment can be reverted in the Lo-Dash // loaded as a module. The global assignment can be reverted in the Lo-Dash
// module via its `noConflict()` method. // module by its `noConflict()` method.
root._ = _; root._ = _;
// define as an anonymous module so, through path mapping, it can be // define as an anonymous module so, through path mapping, it can be
@@ -6625,12 +6704,12 @@
}); });
} }
// check for `exports` after `define` in case a build optimizer adds an `exports` object // check for `exports` after `define` in case a build optimizer adds an `exports` object
else if (freeExports && !freeExports.nodeType) { else if (freeExports && freeModule) {
// in Node.js or RingoJS v0.8.0+ // in Node.js or RingoJS
if (freeModule) { if (moduleExports) {
(freeModule.exports = _)._ = _; (freeModule.exports = _)._ = _;
} }
// in Narwhal or RingoJS v0.7.0- // in Narwhal or Rhino -require
else { else {
freeExports._ = _; freeExports._ = _;
} }

View File

@@ -1,56 +1,56 @@
/** /**
* @license * @license
* Lo-Dash 2.0.0 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE * Lo-Dash 2.2.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
* Build: `lodash -o ./dist/lodash.compat.js` * Build: `lodash -o ./dist/lodash.compat.js`
*/ */
;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.k,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:b+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.k,e=typeof n;if("boolean"==e||null==n)t[n]=!0;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:b+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=!0 ;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.l,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:b+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.l,e=typeof n;if("boolean"==e||null==n)t[n]=!0;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:b+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=!0
}}function r(n){return n.charCodeAt(0)}function u(n,t){var e=n.l,r=t.l;if(e!==r){if(e>r||typeof e=="undefined")return 1;if(e<r||typeof r=="undefined")return-1}return n.m-t.m}function o(n){var t=-1,r=n.length,u=n[0],o=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object")return!1;for(u=l(),u["false"]=u["null"]=u["true"]=u.undefined=!1,o=l(),o.b=n,o.k=u,o.push=e;++t<r;)o.push(n[t]);return o}function a(n){return"\\"+Q[n]}function i(){return y.pop()||[]}function l(){return m.pop()||{a:"",b:null,c:"",k:null,configurable:!1,l:null,enumerable:!1,"false":!1,d:"",m:0,e:"",v:null,leading:!1,g:"",maxWait:0,"null":!1,number:null,z:null,push:null,h:null,string:null,i:"",trailing:!1,"true":!1,undefined:!1,j:!1,n:null,writable:!1} }}function r(n){return n.charCodeAt(0)}function u(n,t){var e=n.m,r=t.m;if(e!==r){if(e>r||typeof e=="undefined")return 1;if(e<r||typeof r=="undefined")return-1}return n.n-t.n}function o(n){var t=-1,r=n.length,u=n[0],o=n[0|r/2],a=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object"&&a&&typeof a=="object")return!1;for(u=l(),u["false"]=u["null"]=u["true"]=u.undefined=!1,o=l(),o.k=n,o.l=u,o.push=e;++t<r;)o.push(n[t]);return o}function a(n){return"\\"+Z[n]}function i(){return y.pop()||[]}function l(){return m.pop()||{k:null,l:null,m:null,"false":!1,n:0,"null":!1,number:null,object:null,push:null,string:null,"true":!1,undefined:!1,o:null}
}function f(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function c(){}function p(n){n.length=0,y.length<j&&y.push(n)}function s(n){var t=n.k;t&&s(t),n.b=n.k=n.l=n.object=n.number=n.string=n.n=null,m.length<j&&m.push(n)}function g(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function h(e){function y(n){return n&&typeof n=="object"&&!qe(n)&&ve.call(n,"__wrapped__")?n:new m(n)}function m(n,t){this.__chain__=!!t,this.__wrapped__=n }function f(n){return typeof n.toString!="function"&&typeof(n+"")=="string"}function c(){}function p(n){n.length=0,y.length<j&&y.push(n)}function s(n){var t=n.l;t&&s(t),n.k=n.l=n.m=n.object=n.number=n.string=n.o=null,m.length<j&&m.push(n)}function g(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function h(e){function y(n){return n&&typeof n=="object"&&!Je(n)&&de.call(n,"__wrapped__")?n:new m(n)}function m(n,t){this.__chain__=!!t,this.__wrapped__=n
}function j(n,t,e,r,u){var o=n;if(e){if(o=e(o),typeof o!="undefined")return o;o=n}var a=mt(o);if(a){var l=we.call(o);if(!U[l]||!Le.nodeClass&&f(o))return o;var c=qe(o)}if(!a||!t)return a?c?g(o):Ye({},o):o;switch(a=$e[l],l){case T:case q:return new a(+o);case G:case H:return new a(o);case M:return a(o.source,A.exec(o))}l=!r,r||(r=i()),u||(u=i());for(var s=r.length;s--;)if(r[s]==n)return u[s];return o=c?a(o.length):{},c&&(ve.call(n,"index")&&(o.index=n.index),ve.call(n,"input")&&(o.input=n.input)),r.push(n),u.push(o),(c?Xe:tr)(n,function(n,a){o[a]=j(n,t,e,r,u) }function j(n,t,e,r,u){if(e){var o=e(n);if(typeof o!="undefined")return o}if(!bt(n))return n;var a=ke.call(n);if(!U[a]||!We.nodeClass&&f(n))return n;var l=qe[a];switch(a){case z:case q:return new l(+n);case G:case H:return new l(n);case M:return o=l(n.source,I.exec(n)),o.lastIndex=n.lastIndex,o}if(a=Je(n),t){var c=!r;r||(r=i()),u||(u=i());for(var s=r.length;s--;)if(r[s]==n)return u[s];o=a?l(n.length):{}}else o=a?g(n):er({},n);return a&&(de.call(n,"index")&&(o.index=n.index),de.call(n,"input")&&(o.input=n.input)),t?(r.push(n),u.push(o),(a?tr:or)(n,function(n,a){o[a]=j(n,t,e,r,u)
}),l&&(p(r),p(u)),o}function Q(n,t,e){if(typeof n!="function")return Gt;if(typeof t=="undefined")return n;var r=n.__bindData__||Le.o&&!n.name;if(typeof r=="undefined"){var u=P&&ge.call(n);Le.o||!u||I.test(u)||(r=!0),(Le.o||!r)&&(r=!P||P.test(u),Te(n,r))}if(true!==r&&r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)} }),c&&(p(r),p(u)),o):o}function Z(n,t,e){if(typeof n!="function")return Ht;if(typeof t=="undefined")return n;var r=n.__bindData__||We.funcNames&&!n.name;if(typeof r=="undefined"){var u=P&&ye.call(n);We.funcNames||!u||A.test(u)||(r=!0),(We.funcNames||!r)&&(r=!We.funcDecomp||P.test(u),Ge(n,r))}if(true!==r&&r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)
}return qt(n,t)}function Y(n,t,e,r){r=(r||0)-1;for(var u=n?n.length:0,o=[];++r<u;){var a=n[r];a&&typeof a=="object"&&(qe(a)||st(a))?ye.apply(o,t?a:Y(a,t,e)):e||o.push(a)}return o}function nt(n,t,e,r,u,o){if(e){var a=e(n,t);if(typeof a!="undefined")return!!a}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&V[typeof n]||t&&V[typeof t]))return!1;if(null==n||null==t)return n===t;var l=we.call(n),c=we.call(t);if(l==z&&(l=J),c==z&&(c=J),l!=c)return!1;switch(l){case T:case q:return+n==+t;case G:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t; }}return Gt(n,t)}function tt(n,t,e,r){r=(r||0)-1;for(var u=n?n.length:0,o=[];++r<u;){var a=n[r];if(a&&typeof a=="object"&&typeof a.length=="number"&&(Je(a)||vt(a))){t||(a=tt(a,t,e));var i=-1,l=a.length,f=o.length;for(o.length+=l;++i<l;)o[f++]=a[i]}else e||o.push(a)}return o}function et(n,t,e,r,u,o){if(e){var a=e(n,t);if(typeof a!="undefined")return!!a}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&Y[typeof n]||t&&Y[typeof t]))return!1;if(null==n||null==t)return n===t;var l=ke.call(n),c=ke.call(t);
case M:case H:return n==ee(t)}if(c=l==L,!c){if(ve.call(n,"__wrapped__")||ve.call(t,"__wrapped__"))return nt(n.__wrapped__||n,t.__wrapped__||t,e,r,u,o);if(l!=J||!Le.nodeClass&&(f(n)||f(t)))return!1;var l=!Le.argsObject&&st(n)?ne:n.constructor,s=!Le.argsObject&&st(t)?ne:t.constructor;if(l!=s&&!(yt(l)&&l instanceof l&&yt(s)&&s instanceof s))return!1}for(s=!u,u||(u=i()),o||(o=i()),l=u.length;l--;)if(u[l]==n)return o[l]==t;var g=0,a=!0;if(u.push(n),o.push(t),c){if(l=n.length,g=t.length,a=g==n.length,!a&&!r)return a; if(l==L&&(l=J),c==L&&(c=J),l!=c)return!1;switch(l){case z:case q:return+n==+t;case G:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case M:case H:return n==oe(t)}if(c=l==T,!c){if(de.call(n,"__wrapped__")||de.call(t,"__wrapped__"))return et(n.__wrapped__||n,t.__wrapped__||t,e,r,u,o);if(l!=J||!We.nodeClass&&(f(n)||f(t)))return!1;var l=!We.argsObject&&vt(n)?re:n.constructor,s=!We.argsObject&&vt(t)?re:t.constructor;if(l!=s&&!(_t(l)&&l instanceof l&&_t(s)&&s instanceof s))return!1}for(s=!u,u||(u=i()),o||(o=i()),l=u.length;l--;)if(u[l]==n)return o[l]==t;
for(;g--;)if(c=l,s=t[g],r)for(;c--&&!(a=nt(n[c],s,e,r,u,o)););else if(!(a=nt(n[g],s,e,r,u,o)))break;return a}return nr(t,function(t,i,l){return ve.call(l,i)?(g++,a=ve.call(n,i)&&nt(n[i],t,e,r,u,o)):void 0}),a&&!r&&nr(n,function(n,t,e){return ve.call(e,t)?a=-1<--g:void 0}),s&&(p(u),p(o)),a}function et(n,t,e,r,u){(qe(t)?Ct:tr)(t,function(t,o){var a,i,l=t,f=n[o];if(t&&((i=qe(t))||er(t))){for(l=r.length;l--;)if(a=r[l]==t){f=u[l];break}if(!a){var c;e&&(l=e(f,t),c=typeof l!="undefined")&&(f=l),c||(f=i?qe(f)?f:[]:er(f)?f:{}),r.push(t),u.push(f),c||et(f,t,e,r,u) var g=0,a=!0;if(u.push(n),o.push(t),c){if(l=n.length,g=t.length,a=g==n.length,!a&&!r)return a;for(;g--;)if(c=l,s=t[g],r)for(;c--&&!(a=et(n[c],s,e,r,u,o)););else if(!(a=et(n[g],s,e,r,u,o)))break;return a}return ur(t,function(t,i,l){return de.call(l,i)?(g++,a=de.call(n,i)&&et(n[i],t,e,r,u,o)):void 0}),a&&!r&&ur(n,function(n,t,e){return de.call(e,t)?a=-1<--g:void 0}),s&&(p(u),p(o)),a}function ut(n,t,e,r,u){(Je(t)?St:or)(t,function(t,o){var a,i,l=t,f=n[o];if(t&&((i=Je(t))||ar(t))){for(l=r.length;l--;)if(a=r[l]==t){f=u[l];
}}else e&&(l=e(f,t),typeof l=="undefined"&&(l=t)),typeof l!="undefined"&&(f=l);n[o]=f})}function rt(e,r,u){var a=-1,l=ft(),f=e?e.length:0,c=[],g=!r&&f>=w&&l===n,h=u||g?i():c;if(g){var v=o(h);v?(l=t,h=v):(g=!1,h=u?h:(p(h),c))}for(;++a<f;){var v=e[a],y=u?u(v,a,e):v;(r?!a||h[h.length-1]!==y:0>l(h,y))&&((u||g)&&h.push(y),c.push(v))}return g?(p(h.b),s(h)):u&&p(h),c}function ut(n){return function(t,e,r){var u={};if(e=y.createCallback(e,r,3),qe(t)){r=-1;for(var o=t.length;++r<o;){var a=t[r];n(u,a,e(a,r,t),t) break}if(!a){var c;e&&(l=e(f,t),c=typeof l!="undefined")&&(f=l),c||(f=i?Je(f)?f:[]:ar(f)?f:{}),r.push(t),u.push(f),c||ut(f,t,e,r,u)}}else e&&(l=e(f,t),typeof l=="undefined"&&(l=t)),typeof l!="undefined"&&(f=l);n[o]=f})}function at(e,r,u){var a=-1,l=st(),f=e?e.length:0,c=[],g=!r&&f>=w&&l===n,h=u||g?i():c;if(g){var v=o(h);v?(l=t,h=v):(g=!1,h=u?h:(p(h),c))}for(;++a<f;){var v=e[a],y=u?u(v,a,e):v;(r?!a||h[h.length-1]!==y:0>l(h,y))&&((u||g)&&h.push(y),c.push(v))}return g?(p(h.k),s(h)):u&&p(h),c}function it(n){return function(t,e,r){var u={};
}}else Xe(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function ot(n,t,e,r,u,o){var a=1&t,i=2&t,l=4&t,f=8&t,c=16&t,p=32&t,s=n;if(!i&&!yt(n))throw new re;c&&!e.length&&(t&=-17,c=e=!1),p&&!r.length&&(t&=-33,p=r=!1);var g=n&&n.__bindData__;if(g)return!a||1&g[1]||(g[4]=u),!a&&1&g[1]&&(t|=8),!l||4&g[1]||(g[5]=o),c&&ye.apply(g[2]||(g[2]=[]),e),p&&ye.apply(g[3]||(g[3]=[]),r),g[1]|=t,ot.apply(null,g);if(!a||i||l||p||!(Le.fastBind||xe&&c))v=function(){var g=arguments,h=a?u:this;return(l||c||p)&&(g=Pe.call(g),c&&je.apply(g,e),p&&ye.apply(g,r),l&&g.length<o)?(t|=16,ot(n,f?t:-4&t,g,null,u,o)):(i&&(n=h[s]),this instanceof v?(h=it(n.prototype),g=n.apply(h,g),mt(g)?g:h):n.apply(h,g)) if(e=y.createCallback(e,r,3),Je(t)){r=-1;for(var o=t.length;++r<o;){var a=t[r];n(u,a,e(a,r,t),t)}}else tr(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function lt(n,t,e,r,u,o){var a=1&t,i=2&t,l=4&t,f=8&t,c=16&t,p=32&t,s=n;if(!i&&!_t(n))throw new ae;c&&!e.length&&(t&=-17,c=e=!1),p&&!r.length&&(t&=-33,p=r=!1);var g=n&&n.__bindData__;if(g)return!a||1&g[1]||(g[4]=u),!a&&1&g[1]&&(t|=8),!l||4&g[1]||(g[5]=o),c&&be.apply(g[2]||(g[2]=[]),e),p&&be.apply(g[3]||(g[3]=[]),r),g[1]|=t,lt.apply(null,g);if(!a||i||l||p||!(We.fastBind||Se&&c))v=function(){var g=arguments,h=a?u:this;
};else{if(c){var h=[u];ye.apply(h,e)}var v=c?xe.apply(n,h):xe.call(n,u)}return Te(v,Pe.call(arguments)),v}function at(){var n=l();n.h=$,n.b=n.c=n.g=n.i="",n.e="t",n.j=!0;for(var t,e=0;t=arguments[e];e++)for(var r in t)n[r]=t[r];e=n.a,n.d=/^[^,]+/.exec(e)[0],t=Xt,e="return function("+e+"){",r="var n,t="+n.d+",E="+n.e+";if(!t)return E;"+n.i+";",n.b?(r+="var u=t.length;n=-1;if("+n.b+"){",Le.unindexedChars&&(r+="if(s(t)){t=t.split('')}"),r+="while(++n<u){"+n.g+";}}else{"):Le.nonEnumArgs&&(r+="var u=t.length;n=-1;if(u&&p(t)){while(++n<u){n+='';"+n.g+";}}else{"),Le.enumPrototypes&&(r+="var G=typeof t=='function';"),Le.enumErrorProps&&(r+="var F=t===k||t instanceof Error;"); return(l||c||p)&&(g=Le.call(g),c&&Ee.apply(g,e),p&&be.apply(g,r),l&&g.length<o)?(t|=16,lt(n,f?t:-4&t,g,null,u,o)):(i&&(n=h[s]),this instanceof v?(h=ct(n.prototype),g=n.apply(h,g),bt(g)?g:h):n.apply(h,g))};else{if(c){var h=[u];be.apply(h,e)}var v=c?Se.apply(n,h):Se.call(n,u)}return Ge(v,Le.call(arguments)),v}function ft(){X.h=$,X.b=X.c=X.g=X.i="",X.e="t",X.j=!0;for(var n,t=0;n=arguments[t];t++)for(var e in n)X[e]=n[e];t=X.a,X.d=/^[^,]+/.exec(t)[0],n=ne,t="return function("+t+"){",e=X;var r="var n,t="+e.d+",E="+e.e+";if(!t)return E;"+e.i+";";
var u=[];if(Le.enumPrototypes&&u.push('!(G&&n=="prototype")'),Le.enumErrorProps&&u.push('!(F&&(n=="message"||n=="name"))'),n.j&&n.f)r+="var C=-1,D=B[typeof t]&&v(t),u=D?D.length:0;while(++C<u){n=D[C];",u.length&&(r+="if("+u.join("&&")+"){"),r+=n.g+";",u.length&&(r+="}"),r+="}";else if(r+="for(n in t){",n.j&&u.push("m.call(t, n)"),u.length&&(r+="if("+u.join("&&")+"){"),r+=n.g+";",u.length&&(r+="}"),r+="}",Le.nonEnumShadows){for(r+="if(t!==A){var i=t.constructor,r=t===(i&&i.prototype),f=t===J?I:t===k?j:L.call(t),x=y[f];",k=0;7>k;k++)r+="n='"+n.h[k]+"';if((!(r&&x[n])&&m.call(t,n))",n.j||(r+="||(!x[n]&&t[n]!==A[n])"),r+="){"+n.g+"}"; e.b?(r+="var u=t.length;n=-1;if("+e.b+"){",We.unindexedChars&&(r+="if(s(t)){t=t.split('')}"),r+="while(++n<u){"+e.g+";}}else{"):We.nonEnumArgs&&(r+="var u=t.length;n=-1;if(u&&p(t)){while(++n<u){n+='';"+e.g+";}}else{"),We.enumPrototypes&&(r+="var G=typeof t=='function';"),We.enumErrorProps&&(r+="var F=t===k||t instanceof Error;");var u=[];if(We.enumPrototypes&&u.push('!(G&&n=="prototype")'),We.enumErrorProps&&u.push('!(F&&(n=="message"||n=="name"))'),e.j&&e.f)r+="var C=-1,D=B[typeof t]&&v(t),u=D?D.length:0;while(++C<u){n=D[C];",u.length&&(r+="if("+u.join("&&")+"){"),r+=e.g+";",u.length&&(r+="}"),r+="}";
r+="}"}return(n.b||Le.nonEnumArgs)&&(r+="}"),r+=n.c+";return E",t=t("d,j,k,m,o,p,q,s,v,A,B,y,I,J,L",e+r+"}"),s(n),t(Q,K,oe,ve,_,st,qe,_t,n.f,ae,V,ze,H,ie,we)}function it(n){return mt(n)?Ce(n):{}}function lt(n){return He[n]}function ft(){var t=(t=y.indexOf)===Rt?n:t;return t}function ct(n){var t,e;return!n||we.call(n)!=J||(t=n.constructor,yt(t)&&!(t instanceof t))||!Le.argsClass&&st(n)||!Le.nodeClass&&f(n)?!1:Le.ownLast?(nr(n,function(n,t,r){return e=ve.call(r,t),!1}),false!==e):(nr(n,function(n,t){e=t else if(r+="for(n in t){",e.j&&u.push("m.call(t, n)"),u.length&&(r+="if("+u.join("&&")+"){"),r+=e.g+";",u.length&&(r+="}"),r+="}",We.nonEnumShadows){for(r+="if(t!==A){var i=t.constructor,r=t===(i&&i.prototype),f=t===J?I:t===k?j:L.call(t),x=y[f];",k=0;7>k;k++)r+="n='"+e.h[k]+"';if((!(r&&x[n])&&m.call(t,n))",e.j||(r+="||(!x[n]&&t[n]!==A[n])"),r+="){"+e.g+"}";r+="}"}return(e.b||We.nonEnumArgs)&&(r+="}"),r+=e.c+";return E",n("d,j,k,m,o,p,q,s,v,A,B,y,I,J,L",t+r+"}")(Z,K,le,de,_,vt,Je,jt,X.f,fe,Y,Ke,H,ce,ke)
}),typeof e=="undefined"||ve.call(n,e))}function pt(n){return Ue[n]}function st(n){return n&&typeof n=="object"?we.call(n)==z:!1}function gt(n,t,e){var r=We(n),u=r.length;for(t=Q(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function ht(n){var t=[];return nr(n,function(n,e){yt(n)&&t.push(e)}),t.sort()}function vt(n){for(var t=-1,e=We(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function yt(n){return typeof n=="function"}function mt(n){return!(!n||!V[typeof n])}function dt(n){return typeof n=="number"||we.call(n)==G }function ct(n){return bt(n)?Ie(n):{}}function pt(n){return Xe[n]}function st(){var t=(t=y.indexOf)===Lt?n:t;return t}function gt(n){var t,e;return!n||ke.call(n)!=J||(t=n.constructor,_t(t)&&!(t instanceof t))||!We.argsClass&&vt(n)||!We.nodeClass&&f(n)?!1:We.ownLast?(ur(n,function(n,t,r){return e=de.call(r,t),!1}),false!==e):(ur(n,function(n,t){e=t}),typeof e=="undefined"||de.call(n,e))}function ht(n){return Ye[n]}function vt(n){return n&&typeof n=="object"&&typeof n.length=="number"&&ke.call(n)==L||!1
}function _t(n){return typeof n=="string"||we.call(n)==H}function bt(n){for(var t=-1,e=We(n),r=e.length,u=Ut(r);++t<r;)u[t]=n[e[t]];return u}function wt(n,t,e){var r=-1,u=ft(),o=n?n.length:0,a=!1;return e=(0>e?Ie(0,o+e):e)||0,qe(n)?a=-1<u(n,t,e):typeof o=="number"?a=-1<(_t(n)?n.indexOf(t,e):u(n,t,e)):Xe(n,function(n){return++r<e?void 0:!(a=n===t)}),a}function jt(n,t,e){var r=!0;if(t=y.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u&&(r=!!t(n[e],e,n)););}else Xe(n,function(n,e,u){return r=!!t(n,e,u) }function yt(n,t,e){var r=He(n),u=r.length;for(t=Z(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function mt(n){var t=[];return ur(n,function(n,e){_t(n)&&t.push(e)}),t.sort()}function dt(n){for(var t=-1,e=He(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function _t(n){return typeof n=="function"}function bt(n){return!(!n||!Y[typeof n])}function wt(n){return typeof n=="number"||ke.call(n)==G}function jt(n){return typeof n=="string"||ke.call(n)==H}function xt(n){for(var t=-1,e=He(n),r=e.length,u=Xt(r);++t<r;)u[t]=n[e[t]];
});return r}function kt(n,t,e){var r=[];if(t=y.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}}else Xe(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function xt(n,t,e){if(t=y.createCallback(t,e,3),!qe(n)){var r;return Xe(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0}),r}e=-1;for(var u=n.length;++e<u;){var o=n[e];if(t(o,e,n))return o}}function Ct(n,t,e){if(t&&typeof e=="undefined"&&qe(n)){e=-1;for(var r=n.length;++e<r&&false!==t(n[e],e,n););}else Xe(n,t,e); return u}function Ct(n,t,e){var r=-1,u=st(),o=n?n.length:0,a=!1;return e=(0>e?Pe(0,o+e):e)||0,Je(n)?a=-1<u(n,t,e):typeof o=="number"?a=-1<(jt(n)?n.indexOf(t,e):u(n,t,e)):tr(n,function(n){return++r<e?void 0:!(a=n===t)}),a}function kt(n,t,e){var r=!0;if(t=y.createCallback(t,e,3),Je(n)){e=-1;for(var u=n.length;++e<u&&(r=!!t(n[e],e,n)););}else tr(n,function(n,e,u){return r=!!t(n,e,u)});return r}function Et(n,t,e){var r=[];if(t=y.createCallback(t,e,3),Je(n)){e=-1;for(var u=n.length;++e<u;){var o=n[e];
return n}function Et(n,t,e){var r=n,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:Q(t,e,3),qe(n))for(;u--&&false!==t(n[u],u,n););else{if(typeof u!="number")var o=We(n),u=o.length;else Le.unindexedChars&&_t(n)&&(r=n.split(""));Xe(n,function(n,e,a){return e=o?o[--u]:--u,t(r[e],e,a)})}return n}function Ot(n,t,e){var r=-1,u=n?n.length:0,o=Ut(typeof u=="number"?u:0);if(t=y.createCallback(t,e,3),qe(n))for(;++r<u;)o[r]=t(n[r],r,n);else Xe(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function St(n,t,e){var u=-1/0,o=u; t(o,e,n)&&r.push(o)}}else tr(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function Ot(n,t,e){if(t=y.createCallback(t,e,3),!Je(n)){var r;return tr(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0}),r}e=-1;for(var u=n.length;++e<u;){var o=n[e];if(t(o,e,n))return o}}function St(n,t,e){if(t&&typeof e=="undefined"&&Je(n)){e=-1;for(var r=n.length;++e<r&&false!==t(n[e],e,n););}else tr(n,t,e);return n}function It(n,t,e){var r=n,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:Z(t,e,3),Je(n))for(;u--&&false!==t(n[u],u,n););else{if(typeof u!="number")var o=He(n),u=o.length;
if(!t&&qe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i>o&&(o=i)}}else t=!t&&_t(n)?r:y.createCallback(t,e,3),Xe(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function At(n,t,e,r){var u=3>arguments.length;if(t=Q(t,r,4),qe(n)){var o=-1,a=n.length;for(u&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n)}else Xe(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)});return e}function It(n,t,e,r){var u=3>arguments.length;return t=Q(t,r,4),Et(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)}),e}function Bt(n){var t=-1,e=n?n.length:0,r=Ut(typeof e=="number"?e:0); else We.unindexedChars&&jt(n)&&(r=n.split(""));tr(n,function(n,e,a){return e=o?o[--u]:--u,t(r[e],e,a)})}return n}function At(n,t,e){var r=-1,u=n?n.length:0,o=Xt(typeof u=="number"?u:0);if(t=y.createCallback(t,e,3),Je(n))for(;++r<u;)o[r]=t(n[r],r,n);else tr(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function Nt(n,t,e){var u=-1/0,o=u;if(!t&&Je(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i>o&&(o=i)}}else t=!t&&jt(n)?r:y.createCallback(t,e,3),tr(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o
return Ct(n,function(n){var e=Mt(++t);r[t]=r[e],r[e]=n}),r}function Nt(n,t,e){var r;if(t=y.createCallback(t,e,3),qe(n)){e=-1;for(var u=n.length;++e<u&&!(r=t(n[e],e,n)););}else Xe(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function Dt(e){var r=-1,u=ft(),a=e?e.length:0,i=Y(arguments,!0,!0,1),l=[],f=a>=w&&u===n;if(f){var c=o(i);c?(u=t,i=c):f=!1}for(;++r<a;)c=e[r],0>u(i,c)&&l.push(c);return f&&s(i),l}function Pt(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;for(t=y.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++ }function Bt(n,t,e,r){var u=3>arguments.length;if(t=Z(t,r,4),Je(n)){var o=-1,a=n.length;for(u&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n)}else tr(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)});return e}function Dt(n,t,e,r){var u=3>arguments.length;return t=Z(t,r,4),It(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)}),e}function Pt(n){var t=-1,e=n?n.length:0,r=Xt(typeof e=="number"?e:0);return St(n,function(n){var e=Vt(++t);r[t]=r[e],r[e]=n}),r}function Rt(n,t,e){var r;if(t=y.createCallback(t,e,3),Je(n)){e=-1;for(var u=n.length;++e<u&&!(r=t(n[e],e,n)););}else tr(n,function(n,e,u){return!(r=t(n,e,u))
}else if(r=t,null==r||e)return n?n[0]:v;return g(n,0,Be(Ie(0,r),u))}function Rt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Ie(0,u+r):r||0}else if(r)return r=$t(t,e),t[r]===e?r:-1;return n(t,e,r)}function Ft(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=y.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Ie(0,t);return g(n,r)}function $t(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?y.createCallback(e,r,1):Gt,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r; });return!!r}function Ft(e){var r=-1,u=st(),a=e?e.length:0,i=tt(arguments,!0,!0,1),l=[],f=a>=w&&u===n;if(f){var c=o(i);c?(u=t,i=c):f=!1}for(;++r<a;)c=e[r],0>u(i,c)&&l.push(c);return f&&s(i),l}function $t(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;for(t=y.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[0]:v;return g(n,0,Re(Pe(0,r),u))}function Lt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Pe(0,u+r):r||0}else if(r)return r=zt(t,e),t[r]===e?r:-1;
return u}function zt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(e=y.createCallback(e,r,3)),rt(n,t,e)}function Lt(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?St(ar(n,"length")):0,r=Ut(0>e?0:e);++t<e;)r[t]=ar(n,t);return r}function Tt(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var o=n[e];t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function qt(n,t){return 2<arguments.length?ot(n,17,Pe.call(arguments,2),null,t):ot(n,1,null,null,t)}function Kt(n,t,e){function r(){c&&pe(c),a=c=p=v,(h||g!==t)&&(s=+new Qt,i=n.apply(f,o)) return n(t,e,r)}function Tt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=y.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Pe(0,t);return g(n,r)}function zt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?y.createCallback(e,r,1):Ht,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;return u}function qt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(e=y.createCallback(e,r,3)),at(n,t,e)}function Kt(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?Nt(cr(n,"length")):0,r=Xt(0>e?0:e);++t<e;)r[t]=cr(n,t);
}function u(){var e=t-(new Qt-l);0<e?c=_e(u,e):(a&&pe(a),e=p,a=c=p=v,e&&(s=+new Qt,i=n.apply(f,o)))}var o,a,i,l,f,c,p,s=0,g=!1,h=!0;if(!yt(n))throw new re;if(t=Ie(0,t)||0,true===e)var y=!0,h=!1;else mt(e)&&(y=e.leading,g="maxWait"in e&&(Ie(t,e.maxWait)||0),h="trailing"in e?e.trailing:h);return function(){if(o=arguments,l=+new Qt,f=this,p=h&&(c||!y),false===g)var e=y&&!c;else{a||y||(s=l);var v=g-(l-s);0<v?a||(a=_e(r,v)):(a&&(a=pe(a)),s=l,i=n.apply(f,o))}return c||t===g||(c=_e(u,t)),e&&(i=n.apply(f,o)),i return r}function Wt(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var o=n[e];t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function Gt(n,t){return 2<arguments.length?lt(n,17,Le.call(arguments,2),null,t):lt(n,1,null,null,t)}function Jt(n,t,e){function r(){c&&he(c),a=c=p=v,(h||g!==t)&&(s=_e(),i=n.apply(f,o))}function u(){var e=t-(_e()-l);0<e?c=xe(u,e):(a&&he(a),e=p,a=c=p=v,e&&(s=_e(),i=n.apply(f,o)))}var o,a,i,l,f,c,p,s=0,g=!1,h=!0;if(!_t(n))throw new ae;if(t=Pe(0,t)||0,true===e)var y=!0,h=!1;else bt(e)&&(y=e.leading,g="maxWait"in e&&(Pe(t,e.maxWait)||0),h="trailing"in e?e.trailing:h);
}}function Wt(n){if(!yt(n))throw new re;var t=Pe.call(arguments,1);return _e(function(){n.apply(v,t)},1)}function Gt(n){return n}function Jt(n,t){var e=n,r=!t||yt(e);t||(e=m,t=n,n=y),Ct(ht(t),function(u){var o=n[u]=t[u];r&&(e.prototype[u]=function(){var t=this.__wrapped__,r=[t];return ye.apply(r,arguments),r=o.apply(n,r),t&&typeof t=="object"&&t===r?this:new e(r)})})}function Mt(n,t){null==n&&null==t&&(t=1),n=+n||0,null==t?(t=n,n=0):t=+t||0;var e=De();return n%1||t%1?n+Be(e*(t-n+parseFloat("1e-"+((e+"").length-1))),t):n+se(e*(t-n+1)) return function(){if(o=arguments,l=_e(),f=this,p=h&&(c||!y),false===g)var e=y&&!c;else{a||y||(s=l);var v=g-(l-s);0<v?a||(a=xe(r,v)):(a&&(a=he(a)),s=l,i=n.apply(f,o))}return c||t===g||(c=xe(u,t)),e&&(i=n.apply(f,o)),i}}function Mt(n){if(!_t(n))throw new ae;var t=Le.call(arguments,1);return xe(function(){n.apply(v,t)},1)}function Ht(n){return n}function Ut(n,t){var e=n,r=!t||_t(e);t||(e=m,t=n,n=y),St(mt(t),function(u){var o=n[u]=t[u];r&&(e.prototype[u]=function(){var t=this.__wrapped__,r=[t];return be.apply(r,arguments),r=o.apply(n,r),t&&typeof t=="object"&&t===r?this:(r=new e(r),r.__chain__=this.__chain__,r)
}function Ht(){return this.__wrapped__}e=e?tt.defaults(X.Object(),e,tt.pick(X,F)):X;var Ut=e.Array,Vt=e.Boolean,Qt=e.Date,Xt=e.Function,Yt=e.Math,Zt=e.Number,ne=e.Object,te=e.RegExp,ee=e.String,re=e.TypeError,ue=[],oe=e.Error.prototype,ae=ne.prototype,ie=ee.prototype,le=e._,fe=te("^"+ee(ae.valueOf).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),ce=Yt.ceil,pe=e.clearTimeout,se=Yt.floor,ge=Xt.prototype.toString,he=fe.test(he=ne.getPrototypeOf)&&he,ve=ae.hasOwnProperty,ye=ue.push,me=ae.propertyIsEnumerable,de=e.setImmediate,_e=e.setTimeout,be=ue.splice,we=ae.toString,je=ue.unshift,ke=function(){try{var n={},t=fe.test(t=ne.defineProperty)&&t,e=t(n,n,n)&&t })})}function Vt(n,t,e){var r=null==n,u=null==t;return null==e&&(typeof n=="boolean"&&u?(e=n,n=1):u||typeof t!="boolean"||(e=t,u=!0)),r&&u&&(t=1),n=+n||0,u?(t=n,n=0):t=+t||0,r=$e(),e||n%1||t%1?Re(n+r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+ve(r*(t-n+1))}function Qt(){return this.__wrapped__}e=e?ot.defaults(nt.Object(),e,ot.pick(nt,F)):nt;var Xt=e.Array,Yt=e.Boolean,Zt=e.Date,ne=e.Function,te=e.Math,ee=e.Number,re=e.Object,ue=e.RegExp,oe=e.String,ae=e.TypeError,ie=[],le=e.Error.prototype,fe=re.prototype,ce=oe.prototype,pe=e._,se=ue("^"+oe(fe.valueOf).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),ge=te.ceil,he=e.clearTimeout,ve=te.floor,ye=ne.prototype.toString,me=se.test(me=re.getPrototypeOf)&&me,de=fe.hasOwnProperty,_e=se.test(_e=Zt.now)&&_e||function(){return+new Zt
}catch(r){}return e}(),xe=fe.test(xe=we.bind)&&xe,Ce=fe.test(Ce=ne.create)&&Ce,Ee=fe.test(Ee=Ut.isArray)&&Ee,Oe=e.isFinite,Se=e.isNaN,Ae=fe.test(Ae=ne.keys)&&Ae,Ie=Yt.max,Be=Yt.min,Ne=e.parseInt,De=Yt.random,Pe=ue.slice,Re=fe.test(e.attachEvent),Fe=xe&&!/\n|true/.test(xe+Re),$e={};$e[L]=Ut,$e[T]=Vt,$e[q]=Qt,$e[W]=Xt,$e[J]=ne,$e[G]=Zt,$e[M]=te,$e[H]=ee;var ze={};ze[L]=ze[q]=ze[G]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},ze[T]=ze[H]={constructor:!0,toString:!0,valueOf:!0},ze[K]=ze[W]=ze[M]={constructor:!0,toString:!0},ze[J]={constructor:!0},function(){for(var n=$.length;n--;){var t,e=$[n]; },be=ie.push,we=fe.propertyIsEnumerable,je=e.setImmediate,xe=e.setTimeout,Ce=ie.splice,ke=fe.toString,Ee=ie.unshift,Oe=function(){try{var n={},t=se.test(t=re.defineProperty)&&t,e=t(n,n,n)&&t}catch(r){}return e}(),Se=se.test(Se=ke.bind)&&Se,Ie=se.test(Ie=re.create)&&Ie,Ae=se.test(Ae=Xt.isArray)&&Ae,Ne=e.isFinite,Be=e.isNaN,De=se.test(De=re.keys)&&De,Pe=te.max,Re=te.min,Fe=e.parseInt,$e=te.random,Le=ie.slice,Te=se.test(e.attachEvent),ze=Se&&!/\n|true/.test(Se+Te),qe={};qe[T]=Xt,qe[z]=Yt,qe[q]=Zt,qe[W]=ne,qe[J]=re,qe[G]=ee,qe[M]=ue,qe[H]=oe;
for(t in ze)ve.call(ze,t)&&!ve.call(ze[t],e)&&(ze[t][e]=!1)}}(),m.prototype=y.prototype;var Le=y.support={};!function(){function n(){this.x=1}var t={0:1,length:1},e=[];n.prototype={valueOf:1};for(var r in new n)e.push(r);for(r in arguments);Le.argsObject=arguments.constructor==ne&&!(arguments instanceof Ut),Le.argsClass=we.call(arguments)==z,Le.enumErrorProps=me.call(oe,"message")||me.call(oe,"name"),Le.enumPrototypes=me.call(n,"prototype"),Le.fastBind=xe&&!Fe,Le.o=typeof Xt.name=="string",Le.ownLast="x"!=e[0],Le.nonEnumArgs=0!=r,Le.nonEnumShadows=!/valueOf/.test(e),Le.spliceObjects=(ue.splice.call(t,0,1),!t[0]),Le.unindexedChars="xx"!="x"[0]+ne("x")[0]; var Ke={};Ke[T]=Ke[q]=Ke[G]={constructor:!0,toLocaleString:!0,toString:!0,valueOf:!0},Ke[z]=Ke[H]={constructor:!0,toString:!0,valueOf:!0},Ke[K]=Ke[W]=Ke[M]={constructor:!0,toString:!0},Ke[J]={constructor:!0},function(){for(var n=$.length;n--;){var t,e=$[n];for(t in Ke)de.call(Ke,t)&&!de.call(Ke[t],e)&&(Ke[t][e]=!1)}}(),m.prototype=y.prototype;var We=y.support={};!function(){function n(){this.x=1}var t={0:1,length:1},r=[];n.prototype={valueOf:1};for(var u in new n)r.push(u);for(u in arguments);We.argsClass=ke.call(arguments)==L,We.argsObject=arguments.constructor==re&&!(arguments instanceof Xt),We.enumErrorProps=we.call(le,"message")||we.call(le,"name"),We.enumPrototypes=we.call(n,"prototype"),We.fastBind=Se&&!ze,We.funcDecomp=!se.test(e.p)&&P.test(h),We.funcNames=typeof ne.name=="string",We.nonEnumArgs=0!=u,We.nonEnumShadows=!/valueOf/.test(r),We.ownLast="x"!=r[0],We.spliceObjects=(ie.splice.call(t,0,1),!t[0]),We.unindexedChars="xx"!="x"[0]+re("x")[0];
try{Le.nodeClass=!(we.call(document)==J&&!({toString:0}+""))}catch(u){Le.nodeClass=!0}}(1),y.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:B,variable:"",imports:{_:y}},Ce||(it=function(n){if(mt(n)){c.prototype=n;var t=new c;c.prototype=null}return t||{}});var Te=ke?function(n,t){var e=l();e.value=t,ke(n,"__bindData__",e),s(e)}:c;Le.argsClass||(st=function(n){return n&&typeof n=="object"?ve.call(n,"callee"):!1});var qe=Ee||function(n){return n&&typeof n=="object"?we.call(n)==L:!1 try{We.nodeClass=!(ke.call(document)==J&&!({toString:0}+""))}catch(o){We.nodeClass=!0}}(1),y.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:N,variable:"",imports:{_:y}},Ie||(ct=function(n){if(bt(n)){c.prototype=n;var t=new c;c.prototype=null}return t||{}});var Ge=Oe?function(n,t){Q.value=t,Oe(n,"__bindData__",Q)}:c;We.argsClass||(vt=function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&de.call(n,"callee")||!1});var Je=Ae||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&ke.call(n)==T||!1
},Ke=at({a:"z",e:"[]",i:"if(!(B[typeof z]))return E",g:"E.push(n)"}),We=Ae?function(n){return mt(n)?Le.enumPrototypes&&typeof n=="function"||Le.nonEnumArgs&&n.length&&st(n)?Ke(n):Ae(n):[]}:Ke,Ge={a:"g,e,K",i:"e=e&&typeof K=='undefined'?e:d(e,K,3)",b:"typeof u=='number'",v:We,g:"if(e(t[n],n,g)===false)return E"},Je={a:"z,H,l",i:"var a=arguments,b=0,c=typeof l=='number'?2:a.length;while(++b<c){t=a[b];if(t&&B[typeof t]){",v:We,g:"if(typeof E[n]=='undefined')E[n]=t[n]",c:"}}"},Me={i:"if(!B[typeof t])return E;"+Ge.i,b:!1},He={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Ue=vt(He),Ve=te("("+We(Ue).join("|")+")","g"),Qe=te("["+We(He).join("")+"]","g"),Xe=at(Ge),Ye=at(Je,{i:Je.i.replace(";",";if(c>3&&typeof a[c-2]=='function'){var e=d(a[--c-1],a[c--],2)}else if(c>2&&typeof a[c-1]=='function'){e=a[--c]}"),g:"E[n]=e?e(E[n],t[n]):t[n]"}),Ze=at(Je),nr=at(Ge,Me,{j:!1}),tr=at(Ge,Me); },Me=ft({a:"z",e:"[]",i:"if(!(B[typeof z]))return E",g:"E.push(n)"}),He=De?function(n){return bt(n)?We.enumPrototypes&&typeof n=="function"||We.nonEnumArgs&&n.length&&vt(n)?Me(n):De(n):[]}:Me,Ue={a:"g,e,K",i:"e=e&&typeof K=='undefined'?e:d(e,K,3)",b:"typeof u=='number'",v:He,g:"if(e(t[n],n,g)===false)return E"},Ve={a:"z,H,l",i:"var a=arguments,b=0,c=typeof l=='number'?2:a.length;while(++b<c){t=a[b];if(t&&B[typeof t]){",v:He,g:"if(typeof E[n]=='undefined')E[n]=t[n]",c:"}}"},Qe={i:"if(!B[typeof t])return E;"+Ue.i,b:!1},Xe={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Ye=dt(Xe),Ze=ue("("+He(Ye).join("|")+")","g"),nr=ue("["+He(Xe).join("")+"]","g"),tr=ft(Ue),er=ft(Ve,{i:Ve.i.replace(";",";if(c>3&&typeof a[c-2]=='function'){var e=d(a[--c-1],a[c--],2)}else if(c>2&&typeof a[c-1]=='function'){e=a[--c]}"),g:"E[n]=e?e(E[n],t[n]):t[n]"}),rr=ft(Ve),ur=ft(Ue,Qe,{j:!1}),or=ft(Ue,Qe);
yt(/x/)&&(yt=function(n){return typeof n=="function"&&we.call(n)==W});var er=he?function(n){if(!n||we.call(n)!=J||!Le.argsClass&&st(n))return!1;var t=n.valueOf,e=typeof t=="function"&&(e=he(t))&&he(e);return e?n==e||he(n)==e:ct(n)}:ct,rr=ut(function(n,t,e){ve.call(n,e)?n[e]++:n[e]=1}),ur=ut(function(n,t,e){(ve.call(n,e)?n[e]:n[e]=[]).push(t)}),or=ut(function(n,t,e){n[e]=t}),ar=Ot;Fe&&Z&&typeof de=="function"&&(Wt=function(n){if(!yt(n))throw new re;return de.apply(e,arguments)});var ir=8==Ne(x+"08")?Ne:function(n,t){return Ne(_t(n)?n.replace(N,""):n,t||0) _t(/x/)&&(_t=function(n){return typeof n=="function"&&ke.call(n)==W});var ar=me?function(n){if(!n||ke.call(n)!=J||!We.argsClass&&vt(n))return!1;var t=n.valueOf,e=typeof t=="function"&&(e=me(t))&&me(e);return e?n==e||me(n)==e:gt(n)}:gt,ir=it(function(n,t,e){de.call(n,e)?n[e]++:n[e]=1}),lr=it(function(n,t,e){(de.call(n,e)?n[e]:n[e]=[]).push(t)}),fr=it(function(n,t,e){n[e]=t}),cr=At;ze&&rt&&typeof je=="function"&&(Mt=function(n){if(!_t(n))throw new ae;return je.apply(e,arguments)});var pr=8==Fe(x+"08")?Fe:function(n,t){return Fe(jt(n)?n.replace(B,""):n,t||0)
};return y.after=function(n,t){if(!yt(t))throw new re;return function(){return 1>--n?t.apply(this,arguments):void 0}},y.assign=Ye,y.at=function(n){var t=arguments,e=-1,r=Y(t,!0,!1,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=Ut(t);for(Le.unindexedChars&&_t(n)&&(n=n.split(""));++e<t;)u[e]=n[r[e]];return u},y.bind=qt,y.bindAll=function(n){for(var t=1<arguments.length?Y(arguments,!0,!1,1):ht(n),e=-1,r=t.length;++e<r;){var u=t[e];n[u]=ot(n[u],1,null,null,n)}return n},y.bindKey=function(n,t){return 2<arguments.length?ot(t,19,Pe.call(arguments,2),null,n):ot(t,3,null,null,n) };return y.after=function(n,t){if(!_t(t))throw new ae;return function(){return 1>--n?t.apply(this,arguments):void 0}},y.assign=er,y.at=function(n){var t=arguments,e=-1,r=tt(t,!0,!1,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=Xt(t);for(We.unindexedChars&&jt(n)&&(n=n.split(""));++e<t;)u[e]=n[r[e]];return u},y.bind=Gt,y.bindAll=function(n){for(var t=1<arguments.length?tt(arguments,!0,!1,1):mt(n),e=-1,r=t.length;++e<r;){var u=t[e];n[u]=lt(n[u],1,null,null,n)}return n},y.bindKey=function(n,t){return 2<arguments.length?lt(t,19,Le.call(arguments,2),null,n):lt(t,3,null,null,n)
},y.chain=function(n){return n=new m(n),n.__chain__=!0,n},y.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},y.compose=function(){for(var n=arguments,t=n.length||1;t--;)if(!yt(n[t]))throw new re;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},y.countBy=rr,y.createCallback=function(n,t,e){var r=typeof n;if(null==n||"function"==r)return Q(n,t,e);if("object"!=r)return function(t){return t[n]};var u=We(n),o=u[0],a=n[o]; },y.chain=function(n){return n=new m(n),n.__chain__=!0,n},y.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},y.compose=function(){for(var n=arguments,t=n.length;t--;)if(!_t(n[t]))throw new ae;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},y.countBy=ir,y.createCallback=function(n,t,e){var r=typeof n;if(null==n||"function"==r)return Z(n,t,e);if("object"!=r)return function(t){return t[n]};var u=He(n),o=u[0],a=n[o];
return 1!=u.length||a!==a||mt(a)?function(t){for(var e=u.length,r=!1;e--&&(r=nt(t[u[e]],n[u[e]],null,!0)););return r}:function(n){return n=n[o],a===n&&(0!==a||1/a==1/n)}},y.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,ot(n,4,null,null,null,t)},y.debounce=Kt,y.defaults=Ze,y.defer=Wt,y.delay=function(n,t){if(!yt(n))throw new re;var e=Pe.call(arguments,2);return _e(function(){n.apply(v,e)},t)},y.difference=Dt,y.filter=kt,y.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(n=Ot(n,e,r)),Y(n,t) return 1!=u.length||a!==a||bt(a)?function(t){for(var e=u.length,r=!1;e--&&(r=et(t[u[e]],n[u[e]],null,!0)););return r}:function(n){return n=n[o],a===n&&(0!==a||1/a==1/n)}},y.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,lt(n,4,null,null,null,t)},y.debounce=Jt,y.defaults=rr,y.defer=Mt,y.delay=function(n,t){if(!_t(n))throw new ae;var e=Le.call(arguments,2);return xe(function(){n.apply(v,e)},t)},y.difference=Ft,y.filter=Et,y.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(n=At(n,e,r)),tt(n,t)
},y.forEach=Ct,y.forEachRight=Et,y.forIn=nr,y.forInRight=function(n,t,e){var r=[];nr(n,function(n,t){r.push(t,n)});var u=r.length;for(t=Q(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},y.forOwn=tr,y.forOwnRight=gt,y.functions=ht,y.groupBy=ur,y.indexBy=or,y.initial=function(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=u;for(t=y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return g(n,0,Be(Ie(0,u-r),u))},y.intersection=function(e){for(var r=arguments,u=r.length,a=-1,l=i(),f=-1,c=ft(),g=e?e.length:0,h=[],v=i();++a<u;){var y=r[a]; },y.forEach=St,y.forEachRight=It,y.forIn=ur,y.forInRight=function(n,t,e){var r=[];ur(n,function(n,t){r.push(t,n)});var u=r.length;for(t=Z(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},y.forOwn=or,y.forOwnRight=yt,y.functions=mt,y.groupBy=lr,y.indexBy=fr,y.initial=function(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=u;for(t=y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return g(n,0,Re(Pe(0,u-r),u))},y.intersection=function(e){for(var r=arguments,u=r.length,a=-1,l=i(),f=-1,c=st(),g=e?e.length:0,h=[],v=i();++a<u;){var y=r[a];
l[a]=c===n&&(y?y.length:0)>=w&&o(a?r[a]:v)}n:for(;++f<g;){var m=l[0],y=e[f];if(0>(m?t(m,y):c(v,y))){for(a=u,(m||v).push(y);--a;)if(m=l[a],0>(m?t(m,y):c(r[a],y)))continue n;h.push(y)}}for(;u--;)(m=l[u])&&s(m);return p(l),p(v),h},y.invert=vt,y.invoke=function(n,t){var e=Pe.call(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,a=Ut(typeof o=="number"?o:0);return Ct(n,function(n){a[++r]=(u?t:n[t]).apply(n,e)}),a},y.keys=We,y.map=Ot,y.max=St,y.memoize=function(n,t){function e(){var r=e.cache,u=t?t.apply(this,arguments):b+arguments[0]; l[a]=c===n&&(y?y.length:0)>=w&&o(a?r[a]:v)}n:for(;++f<g;){var m=l[0],y=e[f];if(0>(m?t(m,y):c(v,y))){for(a=u,(m||v).push(y);--a;)if(m=l[a],0>(m?t(m,y):c(r[a],y)))continue n;h.push(y)}}for(;u--;)(m=l[u])&&s(m);return p(l),p(v),h},y.invert=dt,y.invoke=function(n,t){var e=Le.call(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,a=Xt(typeof o=="number"?o:0);return St(n,function(n){a[++r]=(u?t:n[t]).apply(n,e)}),a},y.keys=He,y.map=At,y.max=Nt,y.memoize=function(n,t){function e(){var r=e.cache,u=t?t.apply(this,arguments):b+arguments[0];
return ve.call(r,u)?r[u]:r[u]=n.apply(this,arguments)}if(!yt(n))throw new re;return e.cache={},e},y.merge=function(n){var t=arguments,e=2;if(!mt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=Q(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=Pe.call(arguments,1,e),u=-1,o=i(),a=i();++u<e;)et(n,t[u],r,o,a);return p(o),p(a),n},y.min=function(n,t,e){var u=1/0,o=u;if(!t&&qe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i<o&&(o=i)}}else t=!t&&_t(n)?r:y.createCallback(t,e,3),Xe(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n) return de.call(r,u)?r[u]:r[u]=n.apply(this,arguments)}if(!_t(n))throw new ae;return e.cache={},e},y.merge=function(n){var t=arguments,e=2;if(!bt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=Z(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=Le.call(arguments,1,e),u=-1,o=i(),a=i();++u<e;)ut(n,t[u],r,o,a);return p(o),p(a),n},y.min=function(n,t,e){var u=1/0,o=u;if(!t&&Je(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i<o&&(o=i)}}else t=!t&&jt(n)?r:y.createCallback(t,e,3),tr(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n)
});return o},y.omit=function(n,t,e){var r=ft(),u=typeof t=="function",o={};if(u)t=y.createCallback(t,e,3);else var a=Y(arguments,!0,!1,1);return nr(n,function(n,e,i){(u?!t(n,e,i):0>r(a,e))&&(o[e]=n)}),o},y.once=function(n){var t,e;if(!yt(n))throw new re;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},y.pairs=function(n){for(var t=-1,e=We(n),r=e.length,u=Ut(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u},y.partial=function(n){return ot(n,16,Pe.call(arguments,1))},y.partialRight=function(n){return ot(n,32,null,Pe.call(arguments,1)) });return o},y.omit=function(n,t,e){var r=st(),u=typeof t=="function",o={};if(u)t=y.createCallback(t,e,3);else var a=tt(arguments,!0,!1,1);return ur(n,function(n,e,i){(u?!t(n,e,i):0>r(a,e))&&(o[e]=n)}),o},y.once=function(n){var t,e;if(!_t(n))throw new ae;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},y.pairs=function(n){for(var t=-1,e=He(n),r=e.length,u=Xt(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u},y.partial=function(n){return lt(n,16,Le.call(arguments,1))},y.partialRight=function(n){return lt(n,32,null,Le.call(arguments,1))
},y.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=Y(arguments,!0,!1,1),a=mt(n)?o.length:0;++u<a;){var i=o[u];i in n&&(r[i]=n[i])}else t=y.createCallback(t,e,3),nr(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},y.pluck=ar,y.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,a=t[e];++o<u;)n[o]===a&&(be.call(n,o--,1),u--);return n},y.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Ie(0,ce((t-n)/(e||1))); },y.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=tt(arguments,!0,!1,1),a=bt(n)?o.length:0;++u<a;){var i=o[u];i in n&&(r[i]=n[i])}else t=y.createCallback(t,e,3),ur(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},y.pluck=cr,y.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,a=t[e];++o<u;)n[o]===a&&(Ce.call(n,o--,1),u--);return n},y.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Pe(0,ge((t-n)/(e||1)));
for(var u=Ut(t);++r<t;)u[r]=n,n+=e;return u},y.reject=function(n,t,e){return t=y.createCallback(t,e,3),kt(n,function(n,e,r){return!t(n,e,r)})},y.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];for(t=y.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),be.call(n,r--,1),u--);return o},y.rest=Ft,y.shuffle=Bt,y.sortBy=function(n,t,e){var r=-1,o=n?n.length:0,a=Ut(typeof o=="number"?o:0);for(t=y.createCallback(t,e,3),Ct(n,function(n,e,u){var o=a[++r]=l();o.l=t(n,e,u),o.m=r,o.n=n}),o=a.length,a.sort(u);o--;)n=a[o],a[o]=n.n,s(n); for(var u=Xt(t);++r<t;)u[r]=n,n+=e;return u},y.reject=function(n,t,e){return t=y.createCallback(t,e,3),Et(n,function(n,e,r){return!t(n,e,r)})},y.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];for(t=y.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),Ce.call(n,r--,1),u--);return o},y.rest=Tt,y.shuffle=Pt,y.sortBy=function(n,t,e){var r=-1,o=n?n.length:0,a=Xt(typeof o=="number"?o:0);for(t=y.createCallback(t,e,3),St(n,function(n,e,u){var o=a[++r]=l();o.m=t(n,e,u),o.n=r,o.o=n}),o=a.length,a.sort(u);o--;)n=a[o],a[o]=n.o,s(n);
return a},y.tap=function(n,t){return t(n),n},y.throttle=function(n,t,e){var r=!0,u=!0;if(!yt(n))throw new re;return false===e?r=!1:mt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),e=l(),e.leading=r,e.maxWait=t,e.trailing=u,n=Kt(n,t,e),s(e),n},y.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=Ut(n);for(t=Q(t,e,1);++r<n;)u[r]=t(r);return u},y.toArray=function(n){return n&&typeof n.length=="number"?Le.unindexedChars&&_t(n)?n.split(""):g(n):bt(n)},y.transform=function(n,t,e,r){var u=qe(n); return a},y.tap=function(n,t){return t(n),n},y.throttle=function(n,t,e){var r=!0,u=!0;if(!_t(n))throw new ae;return false===e?r=!1:bt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),V.leading=r,V.maxWait=t,V.trailing=u,Jt(n,t,V)},y.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=Xt(n);for(t=Z(t,e,1);++r<n;)u[r]=t(r);return u},y.toArray=function(n){return n&&typeof n.length=="number"?We.unindexedChars&&jt(n)?n.split(""):g(n):xt(n)},y.transform=function(n,t,e,r){var u=Je(n);return t=Z(t,r,4),null==e&&(u?e=[]:(r=n&&n.constructor,e=ct(r&&r.prototype))),(u?tr:or)(n,function(n,r,u){return t(e,n,r,u)
return t=Q(t,r,4),null==e&&(u?e=[]:(r=n&&n.constructor,e=it(r&&r.prototype))),(u?Xe:tr)(n,function(n,r,u){return t(e,n,r,u)}),e},y.union=function(){return rt(Y(arguments,!0,!0))},y.uniq=zt,y.values=bt,y.where=kt,y.without=function(n){return Dt(n,Pe.call(arguments,1))},y.wrap=function(n,t){if(!yt(t))throw new re;return function(){var e=[n];return ye.apply(e,arguments),t.apply(this,e)}},y.zip=Lt,y.zipObject=Tt,y.collect=Ot,y.drop=Ft,y.each=Ct,y.p=Et,y.extend=Ye,y.methods=ht,y.object=Tt,y.select=kt,y.tail=Ft,y.unique=zt,y.unzip=Lt,Jt(y),y.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1),j(n,t,typeof e=="function"&&Q(e,r,1)) }),e},y.union=function(){return at(tt(arguments,!0,!0))},y.uniq=qt,y.values=xt,y.where=Et,y.without=function(n){return Ft(n,Le.call(arguments,1))},y.wrap=function(n,t){if(!_t(t))throw new ae;return function(){var e=[n];return be.apply(e,arguments),t.apply(this,e)}},y.zip=Kt,y.zipObject=Wt,y.collect=At,y.drop=Tt,y.each=St,y.q=It,y.extend=er,y.methods=mt,y.object=Wt,y.select=Et,y.tail=Tt,y.unique=qt,y.unzip=Kt,Ut(y),y.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1),j(n,t,typeof e=="function"&&Z(e,r,1))
},y.cloneDeep=function(n,t,e){return j(n,!0,typeof t=="function"&&Q(t,e,1))},y.contains=wt,y.escape=function(n){return null==n?"":ee(n).replace(Qe,lt)},y.every=jt,y.find=xt,y.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=y.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},y.findKey=function(n,t,e){var r;return t=y.createCallback(t,e,3),tr(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},y.findLast=function(n,t,e){var r;return t=y.createCallback(t,e,3),Et(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0 },y.cloneDeep=function(n,t,e){return j(n,!0,typeof t=="function"&&Z(t,e,1))},y.contains=Ct,y.escape=function(n){return null==n?"":oe(n).replace(nr,pt)},y.every=kt,y.find=Ot,y.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=y.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},y.findKey=function(n,t,e){var r;return t=y.createCallback(t,e,3),or(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},y.findLast=function(n,t,e){var r;return t=y.createCallback(t,e,3),It(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0
}),r},y.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=y.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;return-1},y.findLastKey=function(n,t,e){var r;return t=y.createCallback(t,e,3),gt(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},y.has=function(n,t){return n?ve.call(n,t):!1},y.identity=Gt,y.indexOf=Rt,y.isArguments=st,y.isArray=qe,y.isBoolean=function(n){return true===n||false===n||we.call(n)==T},y.isDate=function(n){return n?typeof n=="object"&&we.call(n)==q:!1},y.isElement=function(n){return n?1===n.nodeType:!1 }),r},y.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=y.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;return-1},y.findLastKey=function(n,t,e){var r;return t=y.createCallback(t,e,3),yt(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},y.has=function(n,t){return n?de.call(n,t):!1},y.identity=Ht,y.indexOf=Lt,y.isArguments=vt,y.isArray=Je,y.isBoolean=function(n){return true===n||false===n||ke.call(n)==z},y.isDate=function(n){return n?typeof n=="object"&&ke.call(n)==q:!1},y.isElement=function(n){return n?1===n.nodeType:!1
},y.isEmpty=function(n){var t=!0;if(!n)return t;var e=we.call(n),r=n.length;return e==L||e==H||(Le.argsClass?e==z:st(n))||e==J&&typeof r=="number"&&yt(n.splice)?!r:(tr(n,function(){return t=!1}),t)},y.isEqual=function(n,t,e,r){return nt(n,t,typeof e=="function"&&Q(e,r,2))},y.isFinite=function(n){return Oe(n)&&!Se(parseFloat(n))},y.isFunction=yt,y.isNaN=function(n){return dt(n)&&n!=+n},y.isNull=function(n){return null===n},y.isNumber=dt,y.isObject=mt,y.isPlainObject=er,y.isRegExp=function(n){return n&&V[typeof n]?we.call(n)==M:!1 },y.isEmpty=function(n){var t=!0;if(!n)return t;var e=ke.call(n),r=n.length;return e==T||e==H||(We.argsClass?e==L:vt(n))||e==J&&typeof r=="number"&&_t(n.splice)?!r:(or(n,function(){return t=!1}),t)},y.isEqual=function(n,t,e,r){return et(n,t,typeof e=="function"&&Z(e,r,2))},y.isFinite=function(n){return Ne(n)&&!Be(parseFloat(n))},y.isFunction=_t,y.isNaN=function(n){return wt(n)&&n!=+n},y.isNull=function(n){return null===n},y.isNumber=wt,y.isObject=bt,y.isPlainObject=ar,y.isRegExp=function(n){return n&&Y[typeof n]?ke.call(n)==M:!1
},y.isString=_t,y.isUndefined=function(n){return typeof n=="undefined"},y.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Ie(0,r+e):Be(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},y.mixin=Jt,y.noConflict=function(){return e._=le,this},y.parseInt=ir,y.random=Mt,y.reduce=At,y.reduceRight=It,y.result=function(n,t){if(n){var e=n[t];return yt(e)?n[t]():e}},y.runInContext=h,y.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:We(n).length},y.some=Nt,y.sortedIndex=$t,y.template=function(n,t,e){var r=y.templateSettings; },y.isString=jt,y.isUndefined=function(n){return typeof n=="undefined"},y.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Pe(0,r+e):Re(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},y.mixin=Ut,y.noConflict=function(){return e._=pe,this},y.parseInt=pr,y.random=Vt,y.reduce=Bt,y.reduceRight=Dt,y.result=function(n,t){if(n){var e=n[t];return _t(e)?n[t]():e}},y.runInContext=h,y.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:He(n).length},y.some=Rt,y.sortedIndex=zt,y.template=function(n,t,e){var r=y.templateSettings;
n||(n=""),e=Ze({},e,r);var u,o=Ze({},e.imports,r.imports),r=We(o),o=bt(o),i=0,l=e.interpolate||D,f="__p+='",l=te((e.escape||D).source+"|"+l.source+"|"+(l===B?S:D).source+"|"+(e.evaluate||D).source+"|$","g");n.replace(l,function(t,e,r,o,l,c){return r||(r=o),f+=n.slice(i,c).replace(R,a),e&&(f+="'+__e("+e+")+'"),l&&(u=!0,f+="';"+l+";__p+='"),r&&(f+="'+((__t=("+r+"))==null?'':__t)+'"),i=c+t.length,t}),f+="';\n",l=e=e.variable,l||(e="obj",f="with("+e+"){"+f+"}"),f=(u?f.replace(C,""):f).replace(E,"$1").replace(O,"$1;"),f="function("+e+"){"+(l?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+f+"return __p}"; n||(n=""),e=rr({},e,r);var u,o=rr({},e.imports,r.imports),r=He(o),o=xt(o),i=0,l=e.interpolate||D,f="__p+='",l=ue((e.escape||D).source+"|"+l.source+"|"+(l===N?S:D).source+"|"+(e.evaluate||D).source+"|$","g");n.replace(l,function(t,e,r,o,l,c){return r||(r=o),f+=n.slice(i,c).replace(R,a),e&&(f+="'+__e("+e+")+'"),l&&(u=!0,f+="';"+l+";__p+='"),r&&(f+="'+((__t=("+r+"))==null?'':__t)+'"),i=c+t.length,t}),f+="';\n",l=e=e.variable,l||(e="obj",f="with("+e+"){"+f+"}"),f=(u?f.replace(C,""):f).replace(E,"$1").replace(O,"$1;"),f="function("+e+"){"+(l?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+f+"return __p}";
try{var c=Xt(r,"return "+f).apply(v,o)}catch(p){throw p.source=f,p}return t?c(t):(c.source=f,c)},y.unescape=function(n){return null==n?"":ee(n).replace(Ve,pt)},y.uniqueId=function(n){var t=++d;return ee(null==n?"":n)+t},y.all=jt,y.any=Nt,y.detect=xt,y.findWhere=xt,y.foldl=At,y.foldr=It,y.include=wt,y.inject=At,tr(y,function(n,t){y.prototype[t]||(y.prototype[t]=function(){var t=[this.__wrapped__],e=this.__chain__;return ye.apply(t,arguments),t=n.apply(y,t),e?new m(t,e):t})}),y.first=Pt,y.last=function(n,t,e){var r=0,u=n?n.length:0; try{var c=ne(r,"return "+f).apply(v,o)}catch(p){throw p.source=f,p}return t?c(t):(c.source=f,c)},y.unescape=function(n){return null==n?"":oe(n).replace(Ze,ht)},y.uniqueId=function(n){var t=++d;return oe(null==n?"":n)+t},y.all=kt,y.any=Rt,y.detect=Ot,y.findWhere=Ot,y.foldl=Bt,y.foldr=Dt,y.include=Ct,y.inject=Bt,or(y,function(n,t){y.prototype[t]||(y.prototype[t]=function(){var t=[this.__wrapped__],e=this.__chain__;return be.apply(t,arguments),t=n.apply(y,t),e?new m(t,e):t})}),y.first=$t,y.last=function(n,t,e){var r=0,u=n?n.length:0;
if(typeof t!="number"&&null!=t){var o=u;for(t=y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:v;return g(n,Ie(0,u-r))},y.sample=function(n,t,e){var r=n?n.length:0;return typeof r!="number"?n=bt(n):Le.unindexedChars&&_t(n)&&(n=n.split("")),null==t||e?n?n[Mt(r-1)]:v:(n=Bt(n),n.length=Be(Ie(0,t),n.length),n)},y.take=Pt,y.head=Pt,tr(y,function(n,t){var e="sample"!==t;y.prototype[t]||(y.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new m(o,u):o if(typeof t!="number"&&null!=t){var o=u;for(t=y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:v;return g(n,Pe(0,u-r))},y.sample=function(n,t,e){var r=n?n.length:0;return typeof r!="number"?n=xt(n):We.unindexedChars&&jt(n)&&(n=n.split("")),null==t||e?n?n[Vt(r-1)]:v:(n=Pt(n),n.length=Re(Pe(0,t),n.length),n)},y.take=$t,y.head=$t,or(y,function(n,t){var e="sample"!==t;y.prototype[t]||(y.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new m(o,u):o
})}),y.VERSION="2.0.0",y.prototype.chain=function(){return this.__chain__=!0,this},y.prototype.toString=function(){return ee(this.__wrapped__)},y.prototype.value=Ht,y.prototype.valueOf=Ht,Xe(["join","pop","shift"],function(n){var t=ue[n];y.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);return n?new m(e,n):e}}),Xe(["push","reverse","sort","unshift"],function(n){var t=ue[n];y.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),Xe(["concat","slice","splice"],function(n){var t=ue[n]; })}),y.VERSION="2.2.1",y.prototype.chain=function(){return this.__chain__=!0,this},y.prototype.toString=function(){return oe(this.__wrapped__)},y.prototype.value=Qt,y.prototype.valueOf=Qt,tr(["join","pop","shift"],function(n){var t=ie[n];y.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);return n?new m(e,n):e}}),tr(["push","reverse","sort","unshift"],function(n){var t=ie[n];y.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),tr(["concat","slice","splice"],function(n){var t=ie[n];
y.prototype[n]=function(){return new m(t.apply(this.__wrapped__,arguments),this.__chain__)}}),Le.spliceObjects||Xe(["pop","shift","splice"],function(n){var t=ue[n],e="splice"==n;y.prototype[n]=function(){var n=this.__chain__,r=this.__wrapped__,u=t.apply(r,arguments);return 0===r.length&&delete r[0],n||e?new m(u,n):u}}),y}var v,y=[],m=[],d=0,_={},b=+new Date+"",w=75,j=40,x=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",C=/\b__p\+='';/g,E=/\b(__p\+=)''\+/g,O=/(__e\(.*?\)|\b__t\))\+'';/g,S=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,A=/\w*$/,I=/^function[ \n\r\t]+\w/,B=/<%=([\s\S]+?)%>/g,N=RegExp("^["+x+"]*0+(?=.$)"),D=/($^)/,P=(P=/\bthis\b/)&&P.test(h)&&P,R=/['\n\r\t\u2028\u2029\\]/g,F="Array Boolean Date Error Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),$="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),z="[object Arguments]",L="[object Array]",T="[object Boolean]",q="[object Date]",K="[object Error]",W="[object Function]",G="[object Number]",J="[object Object]",M="[object RegExp]",H="[object String]",U={}; y.prototype[n]=function(){return new m(t.apply(this.__wrapped__,arguments),this.__chain__)}}),We.spliceObjects||tr(["pop","shift","splice"],function(n){var t=ie[n],e="splice"==n;y.prototype[n]=function(){var n=this.__chain__,r=this.__wrapped__,u=t.apply(r,arguments);return 0===r.length&&delete r[0],n||e?new m(u,n):u}}),y}var v,y=[],m=[],d=0,_={},b=+new Date+"",w=75,j=40,x=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",C=/\b__p\+='';/g,E=/\b(__p\+=)''\+/g,O=/(__e\(.*?\)|\b__t\))\+'';/g,S=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,I=/\w*$/,A=/^function[ \n\r\t]+\w/,N=/<%=([\s\S]+?)%>/g,B=RegExp("^["+x+"]*0+(?=.$)"),D=/($^)/,P=/\bthis\b/,R=/['\n\r\t\u2028\u2029\\]/g,F="Array Boolean Date Error Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),$="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),L="[object Arguments]",T="[object Array]",z="[object Boolean]",q="[object Date]",K="[object Error]",W="[object Function]",G="[object Number]",J="[object Object]",M="[object RegExp]",H="[object String]",U={};
U[W]=!1,U[z]=U[L]=U[T]=U[q]=U[G]=U[J]=U[M]=U[H]=!0;var V={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},Q={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},X=V[typeof window]&&window||this,Y=V[typeof exports]&&exports,Z=V[typeof module]&&module&&module.exports==Y&&module,nt=V[typeof global]&&global;!nt||nt.global!==nt&&nt.window!==nt||(X=nt);var tt=h();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(X._=tt, define(function(){return tt U[W]=!1,U[L]=U[T]=U[z]=U[q]=U[G]=U[J]=U[M]=U[H]=!0;var V={leading:!1,maxWait:0,trailing:!1},Q={configurable:!1,enumerable:!1,value:null,writable:!1},X={a:"",b:null,c:"",d:"",e:"",v:null,g:"",h:null,support:null,i:"",j:!1},Y={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},Z={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},nt=Y[typeof window]&&window||this,tt=Y[typeof exports]&&exports&&!exports.nodeType&&exports,et=Y[typeof module]&&module&&!module.nodeType&&module,rt=et&&et.exports===tt&&tt,ut=Y[typeof global]&&global;
})):Y&&!Y.nodeType?Z?(Z.exports=tt)._=tt:Y._=tt:X._=tt}).call(this); !ut||ut.global!==ut&&ut.window!==ut||(nt=ut);var ot=h();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(nt._=ot, define(function(){return ot})):tt&&et?rt?(et.exports=ot)._=ot:tt._=ot:nt._=ot}).call(this);

318
dist/lodash.js vendored
View File

@@ -1,6 +1,6 @@
/** /**
* @license * @license
* Lo-Dash 2.0.0 (Custom Build) <http://lodash.com/> * Lo-Dash 2.2.1 (Custom Build) <http://lodash.com/>
* Build: `lodash modern -o ./dist/lodash.js` * Build: `lodash modern -o ./dist/lodash.js`
* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/> * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE> * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
@@ -67,7 +67,7 @@
var reNoMatch = /($^)/; var reNoMatch = /($^)/;
/** Used to detect functions containing a `this` reference */ /** Used to detect functions containing a `this` reference */
var reThis = (reThis = /\bthis\b/) && reThis.test(runInContext) && reThis; var reThis = /\bthis\b/;
/** Used to match unescaped characters in compiled string literals */ /** Used to match unescaped characters in compiled string literals */
var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g; var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
@@ -101,6 +101,21 @@
cloneableClasses[numberClass] = cloneableClasses[objectClass] = cloneableClasses[numberClass] = cloneableClasses[objectClass] =
cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true; cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
/** Used as an internal `_.debounce` options object */
var debounceOptions = {
'leading': false,
'maxWait': 0,
'trailing': false
};
/** Used as the property descriptor for `__bindData__` */
var descriptor = {
'configurable': false,
'enumerable': false,
'value': null,
'writable': false
};
/** Used to determine if values are of the language type Object */ /** Used to determine if values are of the language type Object */
var objectTypes = { var objectTypes = {
'boolean': false, 'boolean': false,
@@ -126,10 +141,13 @@
var root = (objectTypes[typeof window] && window) || this; var root = (objectTypes[typeof window] && window) || this;
/** Detect free variable `exports` */ /** Detect free variable `exports` */
var freeExports = objectTypes[typeof exports] && exports; var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
/** Detect free variable `module` */ /** Detect free variable `module` */
var freeModule = objectTypes[typeof module] && module && module.exports == freeExports && module; var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
/** Detect the popular CommonJS extension `module.exports` */
var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
/** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */
var freeGlobal = objectTypes[typeof global] && global; var freeGlobal = objectTypes[typeof global] && global;
@@ -189,7 +207,7 @@
} }
/** /**
* Adds a given `value` to the corresponding cache object. * Adds a given value to the corresponding cache object.
* *
* @private * @private
* @param {*} value The value to add to the cache. * @param {*} value The value to add to the cache.
@@ -268,9 +286,11 @@
var index = -1, var index = -1,
length = array.length, length = array.length,
first = array[0], first = array[0],
mid = array[(length / 2) | 0],
last = array[length - 1]; last = array[length - 1];
if (first && typeof first == 'object' && last && typeof last == 'object') { if (first && typeof first == 'object' &&
mid && typeof mid == 'object' && last && typeof last == 'object') {
return false; return false;
} }
var cache = getObject(); var cache = getObject();
@@ -319,23 +339,17 @@
return objectPool.pop() || { return objectPool.pop() || {
'array': null, 'array': null,
'cache': null, 'cache': null,
'configurable': false,
'criteria': null, 'criteria': null,
'enumerable': false,
'false': false, 'false': false,
'index': 0, 'index': 0,
'leading': false,
'maxWait': 0,
'null': false, 'null': false,
'number': null, 'number': null,
'object': null, 'object': null,
'push': null, 'push': null,
'string': null, 'string': null,
'trailing': false,
'true': false, 'true': false,
'undefined': false, 'undefined': false,
'value': null, 'value': null
'writable': false
}; };
} }
@@ -409,7 +423,7 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Create a new `lodash` function using the given `context` object. * Create a new `lodash` function using the given context object.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -512,8 +526,8 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Creates a `lodash` object which wraps the given value to enable method * Creates a `lodash` object which wraps the given value to enable intuitive
* chaining. * method chaining.
* *
* In addition to Lo-Dash methods, wrappers also have the following `Array` methods: * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
* `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
@@ -547,6 +561,8 @@
* The wrapper functions `first` and `last` return wrapped values when `n` is * The wrapper functions `first` and `last` return wrapped values when `n` is
* provided, otherwise they return unwrapped values. * provided, otherwise they return unwrapped values.
* *
* Explicit chaining can be enabled by using the `_.chain` method.
*
* @name _ * @name _
* @constructor * @constructor
* @category Chaining * @category Chaining
@@ -612,6 +628,15 @@
*/ */
support.fastBind = nativeBind && !isV8; support.fastBind = nativeBind && !isV8;
/**
* Detect if functions can be decompiled by `Function#toString`
* (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).
*
* @memberOf _.support
* @type boolean
*/
support.funcDecomp = !reNative.test(context.WinRTError) && reThis.test(runInContext);
/** /**
* Detect if `Function#name` is supported (all but IE). * Detect if `Function#name` is supported (all but IE).
* *
@@ -689,64 +714,62 @@
* *
* @private * @private
* @param {*} value The value to clone. * @param {*} value The value to clone.
* @param {boolean} [deep=false] A flag to indicate a deep clone. * @param {boolean} [deep=false] Specify a deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {Array} [stackA=[]] Tracks traversed source objects. * @param {Array} [stackA=[]] Tracks traversed source objects.
* @param {Array} [stackB=[]] Associates clones with source counterparts. * @param {Array} [stackB=[]] Associates clones with source counterparts.
* @returns {*} Returns the cloned `value`. * @returns {*} Returns the cloned value.
*/ */
function baseClone(value, deep, callback, stackA, stackB) { function baseClone(value, deep, callback, stackA, stackB) {
var result = value;
if (callback) { if (callback) {
result = callback(result); var result = callback(value);
if (typeof result != 'undefined') { if (typeof result != 'undefined') {
return result; return result;
} }
result = value;
} }
// inspect [[Class]] // inspect [[Class]]
var isObj = isObject(result); var isObj = isObject(value);
if (isObj) { if (isObj) {
var className = toString.call(result); var className = toString.call(value);
if (!cloneableClasses[className]) { if (!cloneableClasses[className]) {
return result; return value;
} }
var isArr = isArray(result); var ctor = ctorByClass[className];
} switch (className) {
// shallow clone case boolClass:
if (!isObj || !deep) { case dateClass:
return isObj return new ctor(+value);
? (isArr ? slice(result) : assign({}, result))
: result;
}
var ctor = ctorByClass[className];
switch (className) {
case boolClass:
case dateClass:
return new ctor(+result);
case numberClass: case numberClass:
case stringClass: case stringClass:
return new ctor(result); return new ctor(value);
case regexpClass: case regexpClass:
return ctor(result.source, reFlags.exec(result)); result = ctor(value.source, reFlags.exec(value));
} result.lastIndex = value.lastIndex;
// check for circular references and return corresponding clone return result;
var initedStack = !stackA;
stackA || (stackA = getArray());
stackB || (stackB = getArray());
var length = stackA.length;
while (length--) {
if (stackA[length] == value) {
return stackB[length];
} }
} else {
return value;
} }
// init cloned object var isArr = isArray(value);
result = isArr ? ctor(result.length) : {}; if (deep) {
// check for circular references and return corresponding clone
var initedStack = !stackA;
stackA || (stackA = getArray());
stackB || (stackB = getArray());
var length = stackA.length;
while (length--) {
if (stackA[length] == value) {
return stackB[length];
}
}
result = isArr ? ctor(value.length) : {};
}
else {
result = isArr ? slice(value) : assign({}, value);
}
// add array properties assigned by `RegExp#exec` // add array properties assigned by `RegExp#exec`
if (isArr) { if (isArr) {
if (hasOwnProperty.call(value, 'index')) { if (hasOwnProperty.call(value, 'index')) {
@@ -756,6 +779,10 @@
result.input = value.input; result.input = value.input;
} }
} }
// exit for shallow clone
if (!deep) {
return result;
}
// add the source value to the stack of traversed objects // add the source value to the stack of traversed objects
// and associate it with its clone // and associate it with its clone
stackA.push(value); stackA.push(value);
@@ -799,7 +826,7 @@
} }
if (support.funcNames || !bindData) { if (support.funcNames || !bindData) {
// checks if `func` references the `this` keyword and stores the result // checks if `func` references the `this` keyword and stores the result
bindData = !reThis || reThis.test(source); bindData = !support.funcDecomp || reThis.test(source);
setBindData(func, bindData); setBindData(func, bindData);
} }
} }
@@ -842,9 +869,21 @@
while (++index < length) { while (++index < length) {
var value = array[index]; var value = array[index];
// recursively flatten arrays (susceptible to call stack limits)
if (value && typeof value == 'object' && (isArray(value) || isArguments(value))) { if (value && typeof value == 'object' && typeof value.length == 'number'
push.apply(result, isShallow ? value : baseFlatten(value, isShallow, isArgArrays)); && (isArray(value) || isArguments(value))) {
// recursively flatten arrays (susceptible to call stack limits)
if (!isShallow) {
value = baseFlatten(value, isShallow, isArgArrays);
}
var valIndex = -1,
valLength = value.length,
resIndex = result.length;
result.length += valLength;
while (++valIndex < valLength) {
result[resIndex++] = value[valIndex];
}
} else if (!isArgArrays) { } else if (!isArgArrays) {
result.push(value); result.push(value);
} }
@@ -1293,6 +1332,17 @@
function createObject(prototype) { function createObject(prototype) {
return isObject(prototype) ? nativeCreate(prototype) : {}; return isObject(prototype) ? nativeCreate(prototype) : {};
} }
// fallback for browsers without `Object.create`
if (!nativeCreate) {
createObject = function(prototype) {
if (isObject(prototype)) {
noop.prototype = prototype;
var result = new noop;
noop.prototype = null;
}
return result || {};
};
}
/** /**
* Used by `escape` to convert characters to HTML entities. * Used by `escape` to convert characters to HTML entities.
@@ -1325,11 +1375,9 @@
* @param {Function} func The function to set data on. * @param {Function} func The function to set data on.
* @param {*} value The value to set. * @param {*} value The value to set.
*/ */
var setBindData = function(func, value) { var setBindData = !defineProperty ? noop : function(func, value) {
var descriptor = getObject();
descriptor.value = value; descriptor.value = value;
defineProperty(func, '__bindData__', descriptor); defineProperty(func, '__bindData__', descriptor);
releaseObject(descriptor);
}; };
/** /**
@@ -1390,7 +1438,8 @@
* // => false * // => false
*/ */
function isArguments(value) { function isArguments(value) {
return (value && typeof value == 'object') ? toString.call(value) == argsClass : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == argsClass || false;
} }
/** /**
@@ -1411,7 +1460,8 @@
* // => true * // => true
*/ */
var isArray = nativeIsArray || function(value) { var isArray = nativeIsArray || function(value) {
return (value && typeof value == 'object') ? toString.call(value) == arrayClass : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == arrayClass || false;
}; };
/** /**
@@ -1548,10 +1598,10 @@
* @memberOf _ * @memberOf _
* @category Objects * @category Objects
* @param {*} value The value to clone. * @param {*} value The value to clone.
* @param {boolean} [deep=false] A flag to indicate a deep clone. * @param {boolean} [deep=false] Specify a deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {*} [thisArg] The `this` binding of `callback`. * @param {*} [thisArg] The `this` binding of `callback`.
* @returns {*} Returns the cloned `value`. * @returns {*} Returns the cloned value.
* @example * @example
* *
* var stooges = [ * var stooges = [
@@ -1605,7 +1655,7 @@
* @param {*} value The value to deep clone. * @param {*} value The value to deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {*} [thisArg] The `this` binding of `callback`. * @param {*} [thisArg] The `this` binding of `callback`.
* @returns {*} Returns the deep cloned `value`. * @returns {*} Returns the deep cloned value.
* @example * @example
* *
* var stooges = [ * var stooges = [
@@ -3209,10 +3259,11 @@
} }
/** /**
* Retrieves the maximum value of an array. If a callback is provided it * Retrieves the maximum value of a collection. If the collection is empty or
* will be executed for each value in the array to generate the criterion by * falsey `-Infinity` is returned. If a callback is provided it will be executed
* which the value is ranked. The callback is bound to `thisArg` and invoked * for each value in the collection to generate the criterion by which the value
* with three arguments; (value, index, collection). * is ranked. The callback is bound to `thisArg` and invoked with three
* arguments; (value, index, collection).
* *
* If a property name is provided for `callback` the created "_.pluck" style * If a property name is provided for `callback` the created "_.pluck" style
* callback will return the property value of the given element. * callback will return the property value of the given element.
@@ -3278,10 +3329,11 @@
} }
/** /**
* Retrieves the minimum value of an array. If a callback is provided it * Retrieves the minimum value of a collection. If the collection is empty or
* will be executed for each value in the array to generate the criterion by * falsey `Infinity` is returned. If a callback is provided it will be executed
* which the value is ranked. The callback is bound to `thisArg` and invoked * for each value in the collection to generate the criterion by which the value
* with three arguments; (value, index, collection). * is ranked. The callback is bound to `thisArg` and invoked with three
* arguments; (value, index, collection).
* *
* If a property name is provided for `callback` the created "_.pluck" style * If a property name is provided for `callback` the created "_.pluck" style
* callback will return the property value of the given element. * callback will return the property value of the given element.
@@ -3745,16 +3797,16 @@
* @category Collections * @category Collections
* @param {Array|Object|string} collection The collection to iterate over. * @param {Array|Object|string} collection The collection to iterate over.
* @param {Object} properties The object of property values to filter by. * @param {Object} properties The object of property values to filter by.
* @returns {Array} Returns a new array of elements that have the given `properties`. * @returns {Array} Returns a new array of elements that have the given properties.
* @example * @example
* *
* var stooges = [ * var stooges = [
* { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }, * { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
* { 'name': 'moe', 'age': '40', 'quotes': ['Spread out!', 'You knucklehead!'] } * { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }
* ]; * ];
* *
* _.where(stooges, { 'age': 40 }); * _.where(stooges, { 'age': 40 });
* // => [{ 'name': 'moe', 'age': '40', 'quotes': ['Spread out!', 'You knucklehead!'] }] * // => [{ 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }]
* *
* _.where(stooges, { 'quotes': ['Poifect!'] }); * _.where(stooges, { 'quotes': ['Poifect!'] });
* // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }] * // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }]
@@ -4906,7 +4958,7 @@
*/ */
function compose() { function compose() {
var funcs = arguments, var funcs = arguments,
length = funcs.length || 1; length = funcs.length;
while (length--) { while (length--) {
if (!isFunction(funcs[length])) { if (!isFunction(funcs[length])) {
@@ -5173,7 +5225,7 @@
return setTimeout(function() { func.apply(undefined, args); }, 1); return setTimeout(function() { func.apply(undefined, args); }, 1);
} }
// use `setImmediate` if available in Node.js // use `setImmediate` if available in Node.js
if (isV8 && freeModule && typeof setImmediate == 'function') { if (isV8 && moduleExports && typeof setImmediate == 'function') {
defer = function(func) { defer = function(func) {
if (!isFunction(func)) { if (!isFunction(func)) {
throw new TypeError; throw new TypeError;
@@ -5391,13 +5443,11 @@
leading = 'leading' in options ? options.leading : leading; leading = 'leading' in options ? options.leading : leading;
trailing = 'trailing' in options ? options.trailing : trailing; trailing = 'trailing' in options ? options.trailing : trailing;
} }
options = getObject(); debounceOptions.leading = leading;
options.leading = leading; debounceOptions.maxWait = wait;
options.maxWait = wait; debounceOptions.trailing = trailing;
options.trailing = trailing;
var result = debounce(func, wait, options); var result = debounce(func, wait, debounceOptions);
releaseObject(options);
return result; return result;
} }
@@ -5512,9 +5562,12 @@
push.apply(args, arguments); push.apply(args, arguments);
var result = func.apply(object, args); var result = func.apply(object, args);
return (value && typeof value == 'object' && value === result) if (value && typeof value == 'object' && value === result) {
? this return this;
: new ctor(result); }
result = new ctor(result);
result.__chain__ = this.__chain__;
return result;
}; };
} }
}); });
@@ -5538,7 +5591,7 @@
} }
/** /**
* Converts the given `value` into an integer of the specified `radix`. * Converts the given value into an integer of the specified radix.
* If `radix` is `undefined` or `0` a `radix` of `10` is used unless the * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the
* `value` is a hexadecimal, in which case a `radix` of `16` is used. * `value` is a hexadecimal, in which case a `radix` of `16` is used.
* *
@@ -5564,36 +5617,57 @@
/** /**
* Produces a random number between `min` and `max` (inclusive). If only one * Produces a random number between `min` and `max` (inclusive). If only one
* argument is provided a number between `0` and the given number will be * argument is provided a number between `0` and the given number will be
* returned. * returned. If `floating` is truey or either `min` or `max` are floats a
* floating-point number will be returned instead of an integer.
* *
* @static * @static
* @memberOf _ * @memberOf _
* @category Utilities * @category Utilities
* @param {number} [min=0] The minimum possible value. * @param {number} [min=0] The minimum possible value.
* @param {number} [max=1] The maximum possible value. * @param {number} [max=1] The maximum possible value.
* @param {boolean} [floating=false] Specify returning a floating-point number.
* @returns {number} Returns a random number. * @returns {number} Returns a random number.
* @example * @example
* *
* _.random(0, 5); * _.random(0, 5);
* // => a number between 0 and 5 * // => an integer between 0 and 5
* *
* _.random(5); * _.random(5);
* // => also a number between 0 and 5 * // => also an integer between 0 and 5
*
* _.random(5, true);
* // => a floating-point number between 0 and 5
*
* _.random(1.2, 5.2);
* // => a floating-point number between 1.2 and 5.2
*/ */
function random(min, max) { function random(min, max, floating) {
if (min == null && max == null) { var noMin = min == null,
noMax = max == null;
if (floating == null) {
if (typeof min == 'boolean' && noMax) {
floating = min;
min = 1;
}
else if (!noMax && typeof max == 'boolean') {
floating = max;
noMax = true;
}
}
if (noMin && noMax) {
max = 1; max = 1;
} }
min = +min || 0; min = +min || 0;
if (max == null) { if (noMax) {
max = min; max = min;
min = 0; min = 0;
} else { } else {
max = +max || 0; max = +max || 0;
} }
var rand = nativeRandom(); var rand = nativeRandom();
return (min % 1 || max % 1) return (floating || min % 1 || max % 1)
? min + nativeMin(rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1))), max) ? nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max)
: min + floor(rand * (max - min + 1)); : min + floor(rand * (max - min + 1));
} }
@@ -5691,8 +5765,8 @@
* // => 'hello mustache!' * // => 'hello mustache!'
* *
* // using the `imports` option to import jQuery * // using the `imports` option to import jQuery
* var list = '<% $.each(people, function(name) { %><li><%= name %></li><% }); %>'; * var list = '<% $.each(people, function(name) { %><li><%- name %></li><% }); %>';
* _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery }); * _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery } });
* // => '<li>moe</li><li>larry</li>' * // => '<li>moe</li><li>larry</li>'
* *
* // using the `sourceURL` option to specify a custom sourceURL for the template * // using the `sourceURL` option to specify a custom sourceURL for the template
@@ -5810,7 +5884,7 @@
if (data) { if (data) {
return result(data); return result(data);
} }
// provide the compiled function's source via its `toString` method, in // provide the compiled function's source by its `toString` method, in
// supported environments, or the `source` property as a convenience for // supported environments, or the `source` property as a convenience for
// inlining compiled templates during the build process // inlining compiled templates during the build process
result.source = source; result.source = source;
@@ -5895,7 +5969,8 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Creates a `lodash` object that wraps the given `value`. * Creates a `lodash` object that wraps the given value with explicit
* method chaining enabled.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -5911,9 +5986,10 @@
* ]; * ];
* *
* var youngest = _.chain(stooges) * var youngest = _.chain(stooges)
* .sortBy(function(stooge) { return stooge.age; }) * .sortBy('age')
* .map(function(stooge) { return stooge.name + ' is ' + stooge.age; }) * .map(function(stooge) { return stooge.name + ' is ' + stooge.age; })
* .first(); * .first()
* .value();
* // => 'moe is 40' * // => 'moe is 40'
*/ */
function chain(value) { function chain(value) {
@@ -5950,7 +6026,7 @@
} }
/** /**
* Enables method chaining on the wrapper object. * Enables explicit method chaining on the wrapper object.
* *
* @name chain * @name chain
* @memberOf _ * @memberOf _
@@ -5958,11 +6034,21 @@
* @returns {*} Returns the wrapper object. * @returns {*} Returns the wrapper object.
* @example * @example
* *
* var sum = _([1, 2, 3]) * var stooges = [
* .chain() * { 'name': 'moe', 'age': 40 },
* .reduce(function(sum, num) { return sum + num; }) * { 'name': 'larry', 'age': 50 }
* .value() * ];
* // => 6` *
* // without explicit chaining
* _(stooges).first();
* // => { 'name': 'moe', 'age': 40 }
*
* // with explicit chaining
* _(stooges).chain()
* .first()
* .pick('age')
* .value()
* // => { 'age': 40 }
*/ */
function wrapperChain() { function wrapperChain() {
this.__chain__ = true; this.__chain__ = true;
@@ -6196,7 +6282,7 @@
* @memberOf _ * @memberOf _
* @type string * @type string
*/ */
lodash.VERSION = '2.0.0'; lodash.VERSION = '2.2.1';
// add "Chaining" functions to the wrapper // add "Chaining" functions to the wrapper
lodash.prototype.chain = wrapperChain; lodash.prototype.chain = wrapperChain;
@@ -6247,7 +6333,7 @@
// Expose Lo-Dash to the global object even when an AMD loader is present in // Expose Lo-Dash to the global object even when an AMD loader is present in
// case Lo-Dash was injected by a third-party script and not intended to be // case Lo-Dash was injected by a third-party script and not intended to be
// loaded as a module. The global assignment can be reverted in the Lo-Dash // loaded as a module. The global assignment can be reverted in the Lo-Dash
// module via its `noConflict()` method. // module by its `noConflict()` method.
root._ = _; root._ = _;
// define as an anonymous module so, through path mapping, it can be // define as an anonymous module so, through path mapping, it can be
@@ -6257,12 +6343,12 @@
}); });
} }
// check for `exports` after `define` in case a build optimizer adds an `exports` object // check for `exports` after `define` in case a build optimizer adds an `exports` object
else if (freeExports && !freeExports.nodeType) { else if (freeExports && freeModule) {
// in Node.js or RingoJS v0.8.0+ // in Node.js or RingoJS
if (freeModule) { if (moduleExports) {
(freeModule.exports = _)._ = _; (freeModule.exports = _)._ = _;
} }
// in Narwhal or RingoJS v0.7.0- // in Narwhal or Rhino -require
else { else {
freeExports._ = _; freeExports._ = _;
} }

98
dist/lodash.min.js vendored
View File

@@ -1,52 +1,54 @@
/** /**
* @license * @license
* Lo-Dash 2.0.0 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE * Lo-Dash 2.2.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
* Build: `lodash modern -o ./dist/lodash.js` * Build: `lodash modern -o ./dist/lodash.js`
*/ */
;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.k,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:m+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.k,e=typeof n;if("boolean"==e||null==n)t[n]=!0;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:m+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=!0 ;(function(){function n(n,t,e){e=(e||0)-1;for(var r=n?n.length:0;++e<r;)if(n[e]===t)return e;return-1}function t(t,e){var r=typeof e;if(t=t.l,"boolean"==r||null==e)return t[e]?0:-1;"number"!=r&&"string"!=r&&(r="object");var u="number"==r?e:_+e;return t=(t=t[r])&&t[u],"object"==r?t&&-1<n(t,e)?0:-1:t?0:-1}function e(n){var t=this.l,e=typeof n;if("boolean"==e||null==n)t[n]=!0;else{"number"!=e&&"string"!=e&&(e="object");var r="number"==e?n:_+n,t=t[e]||(t[e]={});"object"==e?(t[r]||(t[r]=[])).push(n):t[r]=!0
}}function r(n){return n.charCodeAt(0)}function u(n,t){var e=n.l,r=t.l;if(e!==r){if(e>r||typeof e=="undefined")return 1;if(e<r||typeof r=="undefined")return-1}return n.m-t.m}function o(n){var t=-1,r=n.length,u=n[0],o=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object")return!1;for(u=f(),u["false"]=u["null"]=u["true"]=u.undefined=!1,o=f(),o.b=n,o.k=u,o.push=e;++t<r;)o.push(n[t]);return o}function a(n){return"\\"+M[n]}function i(){return h.pop()||[]}function f(){return g.pop()||{b:null,k:null,configurable:!1,l:null,enumerable:!1,"false":!1,m:0,leading:!1,maxWait:0,"null":!1,number:null,z:null,push:null,string:null,trailing:!1,"true":!1,undefined:!1,n:null,writable:!1} }}function r(n){return n.charCodeAt(0)}function u(n,t){var e=n.m,r=t.m;if(e!==r){if(e>r||typeof e=="undefined")return 1;if(e<r||typeof r=="undefined")return-1}return n.n-t.n}function o(n){var t=-1,r=n.length,u=n[0],o=n[0|r/2],a=n[r-1];if(u&&typeof u=="object"&&o&&typeof o=="object"&&a&&typeof a=="object")return!1;for(u=f(),u["false"]=u["null"]=u["true"]=u.undefined=!1,o=f(),o.k=n,o.l=u,o.push=e;++t<r;)o.push(n[t]);return o}function a(n){return"\\"+G[n]}function i(){return g.pop()||[]}function f(){return y.pop()||{k:null,l:null,m:null,"false":!1,n:0,"null":!1,number:null,object:null,push:null,string:null,"true":!1,undefined:!1,o:null}
}function l(n){n.length=0,h.length<b&&h.push(n)}function c(n){var t=n.k;t&&c(t),n.b=n.k=n.l=n.object=n.number=n.string=n.n=null,g.length<b&&g.push(n)}function p(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function s(e){function h(n){if(!n||be.call(n)!=q)return!1;var t=n.valueOf,e=typeof t=="function"&&(e=se(t))&&se(e);return e?n==e||se(n)==e:lt(n)}function g(n,t,e){if(!n||!L[typeof n])return n;t=t&&typeof e=="undefined"?t:nt(t,e,3); }function l(){}function c(n){n.length=0,g.length<d&&g.push(n)}function p(n){var t=n.l;t&&p(t),n.k=n.l=n.m=n.object=n.number=n.string=n.o=null,y.length<d&&y.push(n)}function s(n,t,e){t||(t=0),typeof e=="undefined"&&(e=n?n.length:0);var r=-1;e=e-t||0;for(var u=Array(0>e?0:e);++r<e;)u[r]=n[t+r];return u}function v(e){function g(n){if(!n||je.call(n)!=z)return!1;var t=n.valueOf,e=typeof t=="function"&&(e=ge(t))&&ge(e);return e?n==e||ge(n)==e:st(n)}function y(n,t,e){if(!n||!V[typeof n])return n;t=t&&typeof e=="undefined"?t:et(t,e,3);
for(var r=-1,u=L[typeof n]&&ze(n),o=u?u.length:0;++r<o&&(e=u[r],false!==t(n[e],e,n)););return n}function b(n,t,e){var r;if(!n||!L[typeof n])return n;t=t&&typeof e=="undefined"?t:nt(t,e,3);for(r in n)if(false===t(n[r],r,n))break;return n}function M(n,t,e){var r,u=n,o=u;if(!u)return o;for(var a=arguments,i=0,f=typeof e=="number"?2:a.length;++i<f;)if((u=a[i])&&L[typeof u])for(var l=-1,c=L[typeof u]&&ze(u),p=c?c.length:0;++l<p;)r=c[l],"undefined"==typeof o[r]&&(o[r]=u[r]);return o}function V(n,t,e){var r,u=n,o=u; for(var r=-1,u=V[typeof n]&&Ke(n),o=u?u.length:0;++r<o&&(e=u[r],false!==t(n[e],e,n)););return n}function d(n,t,e){var r;if(!n||!V[typeof n])return n;t=t&&typeof e=="undefined"?t:et(t,e,3);for(r in n)if(false===t(n[r],r,n))break;return n}function G(n,t,e){var r,u=n,o=u;if(!u)return o;for(var a=arguments,i=0,f=typeof e=="number"?2:a.length;++i<f;)if((u=a[i])&&V[typeof u])for(var l=-1,c=V[typeof u]&&Ke(u),p=c?c.length:0;++l<p;)r=c[l],"undefined"==typeof o[r]&&(o[r]=u[r]);return o}function J(n,t,e){var r,u=n,o=u;
if(!u)return o;var a=arguments,i=0,f=typeof e=="number"?2:a.length;if(3<f&&"function"==typeof a[f-2])var l=nt(a[--f-1],a[f--],2);else 2<f&&"function"==typeof a[f-1]&&(l=a[--f]);for(;++i<f;)if((u=a[i])&&L[typeof u])for(var c=-1,p=L[typeof u]&&ze(u),s=p?p.length:0;++c<s;)r=p[c],o[r]=l?l(o[r],u[r]):u[r];return o}function H(n){var t,e=[];if(!n||!L[typeof n])return e;for(t in n)ve.call(n,t)&&e.push(t);return e}function Q(n,t){var e=f();e.value=t,we(n,"__bindData__",e),c(e)}function X(n){return n&&typeof n=="object"&&!Te(n)&&ve.call(n,"__wrapped__")?n:new Y(n) if(!u)return o;var a=arguments,i=0,f=typeof e=="number"?2:a.length;if(3<f&&"function"==typeof a[f-2])var l=et(a[--f-1],a[f--],2);else 2<f&&"function"==typeof a[f-1]&&(l=a[--f]);for(;++i<f;)if((u=a[i])&&V[typeof u])for(var c=-1,p=V[typeof u]&&Ke(u),s=p?p.length:0;++c<s;)r=p[c],o[r]=l?l(o[r],u[r]):u[r];return o}function Q(n){var t,e=[];if(!n||!V[typeof n])return e;for(t in n)ye.call(n,t)&&e.push(t);return e}function Y(n){return n&&typeof n=="object"&&!Pe(n)&&ye.call(n,"__wrapped__")?n:new nt(n)}function nt(n,t){this.__chain__=!!t,this.__wrapped__=n
}function Y(n,t){this.__chain__=!!t,this.__wrapped__=n}function Z(n,t,e,r,u){var o=n;if(e){if(o=e(o),typeof o!="undefined")return o;o=n}var a=yt(o);if(a){var f=be.call(o);if(!K[f])return o;var c=Te(o)}if(!a||!t)return a?c?p(o):V({},o):o;switch(a=De[f],f){case D:case F:return new a(+o);case z:case P:return new a(o);case W:return a(o.source,C.exec(o))}f=!r,r||(r=i()),u||(u=i());for(var s=r.length;s--;)if(r[s]==n)return u[s];return o=c?a(o.length):{},c&&(ve.call(n,"index")&&(o.index=n.index),ve.call(n,"input")&&(o.input=n.input)),r.push(n),u.push(o),(c?xt:g)(n,function(n,a){o[a]=Z(n,t,e,r,u) }function tt(n,t,e,r,u){if(e){var o=e(n);if(typeof o!="undefined")return o}if(!bt(n))return n;var a=je.call(n);if(!L[a])return n;var f=We[a];switch(a){case F:case T:return new f(+n);case q:case K:return new f(n);case P:return o=f(n.source,O.exec(n)),o.lastIndex=n.lastIndex,o}if(a=Pe(n),t){var l=!r;r||(r=i()),u||(u=i());for(var p=r.length;p--;)if(r[p]==n)return u[p];o=a?f(n.length):{}}else o=a?s(n):J({},n);return a&&(ye.call(n,"index")&&(o.index=n.index),ye.call(n,"input")&&(o.input=n.input)),t?(r.push(n),u.push(o),(a?It:y)(n,function(n,a){o[a]=tt(n,t,e,r,u)
}),f&&(l(r),l(u)),o}function nt(n,t,e){if(typeof n!="function")return Mt;if(typeof t=="undefined")return n;var r=n.__bindData__||Fe.a&&!n.name;if(typeof r=="undefined"){var u=S&&pe.call(n);Fe.a||!u||O.test(u)||(r=!0),(Fe.a||!r)&&(r=!S||S.test(u),Q(n,r))}if(true!==r&&r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)} }),l&&(c(r),c(u)),o):o}function et(n,t,e){if(typeof n!="function")return Gt;if(typeof t=="undefined")return n;var r=n.__bindData__||qe.funcNames&&!n.name;if(typeof r=="undefined"){var u=R&&he.call(n);qe.funcNames||!u||I.test(u)||(r=!0),(qe.funcNames||!r)&&(r=!qe.funcDecomp||R.test(u),ze(n,r))}if(true!==r&&r&&1&r[1])return n;switch(e){case 1:return function(e){return n.call(t,e)};case 2:return function(e,r){return n.call(t,e,r)};case 3:return function(e,r,u){return n.call(t,e,r,u)};case 4:return function(e,r,u,o){return n.call(t,e,r,u,o)
}return Pt(n,t)}function tt(n,t,e,r){r=(r||0)-1;for(var u=n?n.length:0,o=[];++r<u;){var a=n[r];a&&typeof a=="object"&&(Te(a)||pt(a))?ge.apply(o,t?a:tt(a,t,e)):e||o.push(a)}return o}function et(n,t,e,r,u,o){if(e){var a=e(n,t);if(typeof a!="undefined")return!!a}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&L[typeof n]||t&&L[typeof t]))return!1;if(null==n||null==t)return n===t;var f=be.call(n),c=be.call(t);if(f==B&&(f=q),c==B&&(c=q),f!=c)return!1;switch(f){case D:case F:return+n==+t;case z:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t; }}return Mt(n,t)}function rt(n,t,e,r){r=(r||0)-1;for(var u=n?n.length:0,o=[];++r<u;){var a=n[r];if(a&&typeof a=="object"&&typeof a.length=="number"&&(Pe(a)||ht(a))){t||(a=rt(a,t,e));var i=-1,f=a.length,l=o.length;for(o.length+=f;++i<f;)o[l++]=a[i]}else e||o.push(a)}return o}function ut(n,t,e,r,u,o){if(e){var a=e(n,t);if(typeof a!="undefined")return!!a}if(n===t)return 0!==n||1/n==1/t;if(n===n&&!(n&&V[typeof n]||t&&V[typeof t]))return!1;if(null==n||null==t)return n===t;var f=je.call(n),l=je.call(t);
case W:case P:return n==ee(t)}if(c=f==$,!c){if(ve.call(n,"__wrapped__")||ve.call(t,"__wrapped__"))return et(n.__wrapped__||n,t.__wrapped__||t,e,r,u,o);if(f!=q)return!1;var f=n.constructor,p=t.constructor;if(f!=p&&!(gt(f)&&f instanceof f&&gt(p)&&p instanceof p))return!1}for(p=!u,u||(u=i()),o||(o=i()),f=u.length;f--;)if(u[f]==n)return o[f]==t;var s=0,a=!0;if(u.push(n),o.push(t),c){if(f=n.length,s=t.length,a=s==n.length,!a&&!r)return a;for(;s--;)if(c=f,p=t[s],r)for(;c--&&!(a=et(n[c],p,e,r,u,o)););else if(!(a=et(n[s],p,e,r,u,o)))break; if(f==B&&(f=z),l==B&&(l=z),f!=l)return!1;switch(f){case F:case T:return+n==+t;case q:return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case P:case K:return n==oe(t)}if(l=f==$,!l){if(ye.call(n,"__wrapped__")||ye.call(t,"__wrapped__"))return ut(n.__wrapped__||n,t.__wrapped__||t,e,r,u,o);if(f!=z)return!1;var f=n.constructor,p=t.constructor;if(f!=p&&!(_t(f)&&f instanceof f&&_t(p)&&p instanceof p))return!1}for(p=!u,u||(u=i()),o||(o=i()),f=u.length;f--;)if(u[f]==n)return o[f]==t;var s=0,a=!0;if(u.push(n),o.push(t),l){if(f=n.length,s=t.length,a=s==n.length,!a&&!r)return a;
return a}return b(t,function(t,i,f){return ve.call(f,i)?(s++,a=ve.call(n,i)&&et(n[i],t,e,r,u,o)):void 0}),a&&!r&&b(n,function(n,t,e){return ve.call(e,t)?a=-1<--s:void 0}),p&&(l(u),l(o)),a}function rt(n,t,e,r,u){(Te(t)?xt:g)(t,function(t,o){var a,i,f=t,l=n[o];if(t&&((i=Te(t))||h(t))){for(f=r.length;f--;)if(a=r[f]==t){l=u[f];break}if(!a){var c;e&&(f=e(l,t),c=typeof f!="undefined")&&(l=f),c||(l=i?Te(l)?l:[]:h(l)?l:{}),r.push(t),u.push(l),c||rt(l,t,e,r,u)}}else e&&(f=e(l,t),typeof f=="undefined"&&(f=t)),typeof f!="undefined"&&(l=f); for(;s--;)if(l=f,p=t[s],r)for(;l--&&!(a=ut(n[l],p,e,r,u,o)););else if(!(a=ut(n[s],p,e,r,u,o)))break;return a}return d(t,function(t,i,f){return ye.call(f,i)?(s++,a=ye.call(n,i)&&ut(n[i],t,e,r,u,o)):void 0}),a&&!r&&d(n,function(n,t,e){return ye.call(e,t)?a=-1<--s:void 0}),p&&(c(u),c(o)),a}function ot(n,t,e,r,u){(Pe(t)?It:y)(t,function(t,o){var a,i,f=t,l=n[o];if(t&&((i=Pe(t))||g(t))){for(f=r.length;f--;)if(a=r[f]==t){l=u[f];break}if(!a){var c;e&&(f=e(l,t),c=typeof f!="undefined")&&(l=f),c||(l=i?Pe(l)?l:[]:g(l)?l:{}),r.push(t),u.push(l),c||ot(l,t,e,r,u)
n[o]=l})}function ut(e,r,u){var a=-1,f=ft(),p=e?e.length:0,s=[],v=!r&&p>=_&&f===n,h=u||v?i():s;if(v){var g=o(h);g?(f=t,h=g):(v=!1,h=u?h:(l(h),s))}for(;++a<p;){var g=e[a],y=u?u(g,a,e):g;(r?!a||h[h.length-1]!==y:0>f(h,y))&&((u||v)&&h.push(y),s.push(g))}return v?(l(h.b),c(h)):u&&l(h),s}function ot(n){return function(t,e,r){var u={};e=X.createCallback(e,r,3),r=-1;var o=t?t.length:0;if(typeof o=="number")for(;++r<o;){var a=t[r];n(u,a,e(a,r,t),t)}else g(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function at(n,t,e,r,u,o){var a=1&t,i=2&t,f=4&t,l=8&t,c=16&t,p=32&t,s=n; }}else e&&(f=e(l,t),typeof f=="undefined"&&(f=t)),typeof f!="undefined"&&(l=f);n[o]=l})}function at(e,r,u){var a=-1,f=pt(),l=e?e.length:0,s=[],v=!r&&l>=b&&f===n,h=u||v?i():s;if(v){var g=o(h);g?(f=t,h=g):(v=!1,h=u?h:(c(h),s))}for(;++a<l;){var g=e[a],y=u?u(g,a,e):g;(r?!a||h[h.length-1]!==y:0>f(h,y))&&((u||v)&&h.push(y),s.push(g))}return v?(c(h.k),p(h)):u&&c(h),s}function it(n){return function(t,e,r){var u={};e=Y.createCallback(e,r,3),r=-1;var o=t?t.length:0;if(typeof o=="number")for(;++r<o;){var a=t[r];
if(!i&&!gt(n))throw new re;c&&!e.length&&(t&=-17,c=e=!1),p&&!r.length&&(t&=-33,p=r=!1);var v=n&&n.__bindData__;if(v)return!a||1&v[1]||(v[4]=u),!a&&1&v[1]&&(t|=8),!f||4&v[1]||(v[5]=o),c&&ge.apply(v[2]||(v[2]=[]),e),p&&ge.apply(v[3]||(v[3]=[]),r),v[1]|=t,at.apply(null,v);if(!a||i||f||p||!(Fe.fastBind||je&&c))g=function(){var v=arguments,h=a?u:this;return(f||c||p)&&(v=Re.call(v),c&&de.apply(v,e),p&&ge.apply(v,r),f&&v.length<o)?(t|=16,at(n,l?t:-4&t,v,null,u,o)):(i&&(n=h[s]),this instanceof g?(h=yt(n.prototype)?ke(n.prototype):{},v=n.apply(h,v),yt(v)?v:h):n.apply(h,v)) n(u,a,e(a,r,t),t)}else y(t,function(t,r,o){n(u,t,e(t,r,o),o)});return u}}function ft(n,t,e,r,u,o){var a=1&t,i=2&t,f=4&t,l=8&t,c=16&t,p=32&t,s=n;if(!i&&!_t(n))throw new ae;c&&!e.length&&(t&=-17,c=e=!1),p&&!r.length&&(t&=-33,p=r=!1);var v=n&&n.__bindData__;if(v)return!a||1&v[1]||(v[4]=u),!a&&1&v[1]&&(t|=8),!f||4&v[1]||(v[5]=o),c&&_e.apply(v[2]||(v[2]=[]),e),p&&_e.apply(v[3]||(v[3]=[]),r),v[1]|=t,ft.apply(null,v);if(!a||i||f||p||!(qe.fastBind||Ce&&c))g=function(){var v=arguments,h=a?u:this;return(f||c||p)&&(v=$e.call(v),c&&ke.apply(v,e),p&&_e.apply(v,r),f&&v.length<o)?(t|=16,ft(n,l?t:-4&t,v,null,u,o)):(i&&(n=h[s]),this instanceof g?(h=lt(n.prototype),v=n.apply(h,v),bt(v)?v:h):n.apply(h,v))
};else{if(c){var h=[u];ge.apply(h,e)}var g=c?je.apply(n,h):je.call(n,u)}return Q(g,Re.call(arguments)),g}function it(n){return qe[n]}function ft(){var t=(t=X.indexOf)===Dt?n:t;return t}function lt(n){var t,e;return n&&be.call(n)==q&&(t=n.constructor,!gt(t)||t instanceof t)?(b(n,function(n,t){e=t}),typeof e=="undefined"||ve.call(n,e)):!1}function ct(n){return We[n]}function pt(n){return n&&typeof n=="object"?be.call(n)==B:!1}function st(n,t,e){var r=ze(n),u=r.length;for(t=nt(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n };else{if(c){var h=[u];_e.apply(h,e)}var g=c?Ce.apply(n,h):Ce.call(n,u)}return ze(g,$e.call(arguments)),g}function lt(n){return bt(n)?Oe(n):{}}function ct(n){return Le[n]}function pt(){var t=(t=Y.indexOf)===Wt?n:t;return t}function st(n){var t,e;return n&&je.call(n)==z&&(t=n.constructor,!_t(t)||t instanceof t)?(d(n,function(n,t){e=t}),typeof e=="undefined"||ye.call(n,e)):!1}function vt(n){return Me[n]}function ht(n){return n&&typeof n=="object"&&typeof n.length=="number"&&je.call(n)==B||!1}function gt(n,t,e){var r=Ke(n),u=r.length;
}function vt(n){var t=[];return b(n,function(n,e){gt(n)&&t.push(e)}),t.sort()}function ht(n){for(var t=-1,e=ze(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function gt(n){return typeof n=="function"}function yt(n){return!(!n||!L[typeof n])}function mt(n){return typeof n=="number"||be.call(n)==z}function _t(n){return typeof n=="string"||be.call(n)==P}function bt(n){for(var t=-1,e=ze(n),r=e.length,u=Ht(r);++t<r;)u[t]=n[e[t]];return u}function dt(n,t,e){var r=-1,u=ft(),o=n?n.length:0,a=!1;return e=(0>e?Ee(0,o+e):e)||0,Te(n)?a=-1<u(n,t,e):typeof o=="number"?a=-1<(_t(n)?n.indexOf(t,e):u(n,t,e)):g(n,function(n){return++r<e?void 0:!(a=n===t) for(t=et(t,e,3);u--&&(e=r[u],false!==t(n[e],e,n)););return n}function yt(n){var t=[];return d(n,function(n,e){_t(n)&&t.push(e)}),t.sort()}function mt(n){for(var t=-1,e=Ke(n),r=e.length,u={};++t<r;){var o=e[t];u[n[o]]=o}return u}function _t(n){return typeof n=="function"}function bt(n){return!(!n||!V[typeof n])}function dt(n){return typeof n=="number"||je.call(n)==q}function wt(n){return typeof n=="string"||je.call(n)==K}function jt(n){for(var t=-1,e=Ke(n),r=e.length,u=Xt(r);++t<r;)u[t]=n[e[t]];return u
}),a}function wt(n,t,e){var r=!0;t=X.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&(r=!!t(n[e],e,n)););else g(n,function(n,e,u){return r=!!t(n,e,u)});return r}function jt(n,t,e){var r=[];t=X.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u;){var o=n[e];t(o,e,n)&&r.push(o)}else g(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function kt(n,t,e){t=X.createCallback(t,e,3),e=-1;var r=n?n.length:0;if(typeof r!="number"){var u;return g(n,function(n,e,r){return t(n,e,r)?(u=n,!1):void 0 }function kt(n,t,e){var r=-1,u=pt(),o=n?n.length:0,a=!1;return e=(0>e?Re(0,o+e):e)||0,Pe(n)?a=-1<u(n,t,e):typeof o=="number"?a=-1<(wt(n)?n.indexOf(t,e):u(n,t,e)):y(n,function(n){return++r<e?void 0:!(a=n===t)}),a}function xt(n,t,e){var r=!0;t=Y.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&(r=!!t(n[e],e,n)););else y(n,function(n,e,u){return r=!!t(n,e,u)});return r}function Ct(n,t,e){var r=[];t=Y.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u;){var o=n[e];
}),u}for(;++e<r;){var o=n[e];if(t(o,e,n))return o}}function xt(n,t,e){var r=-1,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:nt(t,e,3),typeof u=="number")for(;++r<u&&false!==t(n[r],r,n););else g(n,t);return n}function Ct(n,t,e){var r=n?n.length:0;if(t=t&&typeof e=="undefined"?t:nt(t,e,3),typeof r=="number")for(;r--&&false!==t(n[r],r,n););else{var u=ze(n),r=u.length;g(n,function(n,e,o){return e=u?u[--r]:--r,t(o[e],e,o)})}return n}function Ot(n,t,e){var r=-1,u=n?n.length:0;if(t=X.createCallback(t,e,3),typeof u=="number")for(var o=Ht(u);++r<u;)o[r]=t(n[r],r,n); t(o,e,n)&&r.push(o)}else y(n,function(n,e,u){t(n,e,u)&&r.push(n)});return r}function Ot(n,t,e){t=Y.createCallback(t,e,3),e=-1;var r=n?n.length:0;if(typeof r!="number"){var u;return y(n,function(n,e,r){return t(n,e,r)?(u=n,!1):void 0}),u}for(;++e<r;){var o=n[e];if(t(o,e,n))return o}}function It(n,t,e){var r=-1,u=n?n.length:0;if(t=t&&typeof e=="undefined"?t:et(t,e,3),typeof u=="number")for(;++r<u&&false!==t(n[r],r,n););else y(n,t);return n}function Nt(n,t,e){var r=n?n.length:0;if(t=t&&typeof e=="undefined"?t:et(t,e,3),typeof r=="number")for(;r--&&false!==t(n[r],r,n););else{var u=Ke(n),r=u.length;
else o=[],g(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function Nt(n,t,e){var u=-1/0,o=u;if(!t&&Te(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i>o&&(o=i)}}else t=!t&&_t(n)?r:X.createCallback(t,e,3),xt(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function Et(n,t){var e=-1,r=n?n.length:0;if(typeof r=="number")for(var u=Ht(r);++e<r;)u[e]=n[e][t];return u||Ot(n,t)}function It(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=nt(t,r,4);var o=-1,a=n.length;if(typeof a=="number")for(u&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n); y(n,function(n,e,o){return e=u?u[--r]:--r,t(o[e],e,o)})}return n}function Et(n,t,e){var r=-1,u=n?n.length:0;if(t=Y.createCallback(t,e,3),typeof u=="number")for(var o=Xt(u);++r<u;)o[r]=t(n[r],r,n);else o=[],y(n,function(n,e,u){o[++r]=t(n,e,u)});return o}function St(n,t,e){var u=-1/0,o=u;if(!t&&Pe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i>o&&(o=i)}}else t=!t&&wt(n)?r:Y.createCallback(t,e,3),It(n,function(n,e,r){e=t(n,e,r),e>u&&(u=e,o=n)});return o}function Rt(n,t){var e=-1,r=n?n.length:0;if(typeof r=="number")for(var u=Xt(r);++e<r;)u[e]=n[e][t];
else g(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)});return e}function St(n,t,e,r){var u=3>arguments.length;return t=nt(t,r,4),Ct(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)}),e}function At(n){var t=-1,e=n?n.length:0,r=Ht(typeof e=="number"?e:0);return xt(n,function(n){var e=Vt(++t);r[t]=r[e],r[e]=n}),r}function Rt(n,t,e){var r;t=X.createCallback(t,e,3),e=-1;var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&!(r=t(n[e],e,n)););else g(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function Bt(e){var r=-1,u=ft(),a=e?e.length:0,i=tt(arguments,!0,!0,1),f=[],l=a>=_&&u===n; return u||Et(n,t)}function At(n,t,e,r){if(!n)return e;var u=3>arguments.length;t=et(t,r,4);var o=-1,a=n.length;if(typeof a=="number")for(u&&(e=n[++o]);++o<a;)e=t(e,n[o],o,n);else y(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)});return e}function Dt(n,t,e,r){var u=3>arguments.length;return t=et(t,r,4),Nt(n,function(n,r,o){e=u?(u=!1,n):t(e,n,r,o)}),e}function Bt(n){var t=-1,e=n?n.length:0,r=Xt(typeof e=="number"?e:0);return It(n,function(n){var e=Jt(++t);r[t]=r[e],r[e]=n}),r}function $t(n,t,e){var r;t=Y.createCallback(t,e,3),e=-1;
if(l){var p=o(i);p?(u=t,i=p):l=!1}for(;++r<a;)p=e[r],0>u(i,p)&&f.push(p);return l&&c(i),f}function $t(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;for(t=X.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[0]:v;return p(n,0,Ie(Ee(0,r),u))}function Dt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Ee(0,u+r):r||0}else if(r)return r=Tt(t,e),t[r]===e?r:-1;return n(t,e,r)}function Ft(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0; var u=n?n.length:0;if(typeof u=="number")for(;++e<u&&!(r=t(n[e],e,n)););else y(n,function(n,e,u){return!(r=t(n,e,u))});return!!r}function Ft(e){var r=-1,u=pt(),a=e?e.length:0,i=rt(arguments,!0,!0,1),f=[],l=a>=b&&u===n;if(l){var c=o(i);c?(u=t,i=c):l=!1}for(;++r<a;)c=e[r],0>u(i,c)&&f.push(c);return l&&p(i),f}function Tt(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=-1;for(t=Y.createCallback(t,e,3);++o<u&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[0]:h;return s(n,0,Ae(Re(0,r),u))
for(t=X.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Ee(0,t);return p(n,r)}function Tt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?X.createCallback(e,r,1):Mt,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;return u}function zt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(e=X.createCallback(e,r,3)),ut(n,t,e)}function qt(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?Nt(Et(n,"length")):0,r=Ht(0>e?0:e);++t<e;)r[t]=Et(n,t);return r}function Wt(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var o=n[e]; }function Wt(t,e,r){if(typeof r=="number"){var u=t?t.length:0;r=0>r?Re(0,u+r):r||0}else if(r)return r=zt(t,e),t[r]===e?r:-1;return n(t,e,r)}function qt(n,t,e){if(typeof t!="number"&&null!=t){var r=0,u=-1,o=n?n.length:0;for(t=Y.createCallback(t,e,3);++u<o&&t(n[u],u,n);)r++}else r=null==t||e?1:Re(0,t);return s(n,r)}function zt(n,t,e,r){var u=0,o=n?n.length:u;for(e=e?Y.createCallback(e,r,1):Gt,t=e(t);u<o;)r=u+o>>>1,e(n[r])<t?u=r+1:o=r;return u}function Pt(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(e=Y.createCallback(e,r,3)),at(n,t,e)
t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function Pt(n,t){return 2<arguments.length?at(n,17,Re.call(arguments,2),null,t):at(n,1,null,null,t)}function Kt(n,t,e){function r(){c&&le(c),a=c=p=v,(g||h!==t)&&(s=he(),i=n.apply(l,o))}function u(){var e=t-(he()-f);0<e?c=me(u,e):(a&&le(a),e=p,a=c=p=v,e&&(s=he(),i=n.apply(l,o)))}var o,a,i,f,l,c,p,s=0,h=!1,g=!0;if(!gt(n))throw new re;if(t=Ee(0,t)||0,true===e)var y=!0,g=!1;else yt(e)&&(y=e.leading,h="maxWait"in e&&(Ee(t,e.maxWait)||0),g="trailing"in e?e.trailing:g); }function Kt(){for(var n=1<arguments.length?arguments:arguments[0],t=-1,e=n?St(Rt(n,"length")):0,r=Xt(0>e?0:e);++t<e;)r[t]=Rt(n,t);return r}function Lt(n,t){for(var e=-1,r=n?n.length:0,u={};++e<r;){var o=n[e];t?u[o]=t[e]:o&&(u[o[0]]=o[1])}return u}function Mt(n,t){return 2<arguments.length?ft(n,17,$e.call(arguments,2),null,t):ft(n,1,null,null,t)}function Ut(n,t,e){function r(){c&&se(c),a=c=p=h,(g||v!==t)&&(s=me(),i=n.apply(l,o))}function u(){var e=t-(me()-f);0<e?c=de(u,e):(a&&se(a),e=p,a=c=p=h,e&&(s=me(),i=n.apply(l,o)))
return function(){if(o=arguments,f=he(),l=this,p=g&&(c||!y),false===h)var e=y&&!c;else{a||y||(s=f);var v=h-(f-s);0<v?a||(a=me(r,v)):(a&&(a=le(a)),s=f,i=n.apply(l,o))}return c||t===h||(c=me(u,t)),e&&(i=n.apply(l,o)),i}}function Lt(n){if(!gt(n))throw new re;var t=Re.call(arguments,1);return me(function(){n.apply(v,t)},1)}function Mt(n){return n}function Ut(n,t){var e=n,r=!t||gt(e);t||(e=Y,t=n,n=X),xt(vt(t),function(u){var o=n[u]=t[u];r&&(e.prototype[u]=function(){var t=this.__wrapped__,r=[t];return ge.apply(r,arguments),r=o.apply(n,r),t&&typeof t=="object"&&t===r?this:new e(r) }var o,a,i,f,l,c,p,s=0,v=!1,g=!0;if(!_t(n))throw new ae;if(t=Re(0,t)||0,true===e)var y=!0,g=!1;else bt(e)&&(y=e.leading,v="maxWait"in e&&(Re(t,e.maxWait)||0),g="trailing"in e?e.trailing:g);return function(){if(o=arguments,f=me(),l=this,p=g&&(c||!y),false===v)var e=y&&!c;else{a||y||(s=f);var h=v-(f-s);0<h?a||(a=de(r,h)):(a&&(a=se(a)),s=f,i=n.apply(l,o))}return c||t===v||(c=de(u,t)),e&&(i=n.apply(l,o)),i}}function Vt(n){if(!_t(n))throw new ae;var t=$e.call(arguments,1);return de(function(){n.apply(h,t)},1)
})})}function Vt(n,t){null==n&&null==t&&(t=1),n=+n||0,null==t?(t=n,n=0):t=+t||0;var e=Ae();return n%1||t%1?n+Ie(e*(t-n+parseFloat("1e-"+((e+"").length-1))),t):n+ce(e*(t-n+1))}function Gt(){return this.__wrapped__}e=e?J.defaults(U.Object(),e,J.pick(U,R)):U;var Ht=e.Array,Jt=e.Boolean,Qt=e.Date,Xt=e.Function,Yt=e.Math,Zt=e.Number,ne=e.Object,te=e.RegExp,ee=e.String,re=e.TypeError,ue=[],oe=ne.prototype,ae=e._,ie=te("^"+ee(oe.valueOf).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),fe=Yt.ceil,le=e.clearTimeout,ce=Yt.floor,pe=Xt.prototype.toString,se=ie.test(se=ne.getPrototypeOf)&&se,ve=oe.hasOwnProperty,he=ie.test(he=Qt.now)&&he||function(){return+new Qt }function Gt(n){return n}function Ht(n,t){var e=n,r=!t||_t(e);t||(e=nt,t=n,n=Y),It(yt(t),function(u){var o=n[u]=t[u];r&&(e.prototype[u]=function(){var t=this.__wrapped__,r=[t];return _e.apply(r,arguments),r=o.apply(n,r),t&&typeof t=="object"&&t===r?this:(r=new e(r),r.__chain__=this.__chain__,r)})})}function Jt(n,t,e){var r=null==n,u=null==t;return null==e&&(typeof n=="boolean"&&u?(e=n,n=1):u||typeof t!="boolean"||(e=t,u=!0)),r&&u&&(t=1),n=+n||0,u?(t=n,n=0):t=+t||0,r=Be(),e||n%1||t%1?Ae(n+r*(t-n+parseFloat("1e-"+((r+"").length-1))),t):n+ve(r*(t-n+1))
},ge=ue.push,ye=e.setImmediate,me=e.setTimeout,_e=ue.splice,be=oe.toString,de=ue.unshift,we=function(){try{var n={},t=ie.test(t=ne.defineProperty)&&t,e=t(n,n,n)&&t}catch(r){}return e}(),je=ie.test(je=be.bind)&&je,ke=ie.test(ke=ne.create)&&ke,xe=ie.test(xe=Ht.isArray)&&xe,Ce=e.isFinite,Oe=e.isNaN,Ne=ie.test(Ne=ne.keys)&&Ne,Ee=Yt.max,Ie=Yt.min,Se=e.parseInt,Ae=Yt.random,Re=ue.slice,Be=ie.test(e.attachEvent),$e=je&&!/\n|true/.test(je+Be),De={};De[$]=Ht,De[D]=Jt,De[F]=Qt,De[T]=Xt,De[q]=ne,De[z]=Zt,De[W]=te,De[P]=ee,Y.prototype=X.prototype; }function Qt(){return this.__wrapped__}e=e?Z.defaults(H.Object(),e,Z.pick(H,D)):H;var Xt=e.Array,Yt=e.Boolean,Zt=e.Date,ne=e.Function,te=e.Math,ee=e.Number,re=e.Object,ue=e.RegExp,oe=e.String,ae=e.TypeError,ie=[],fe=re.prototype,le=e._,ce=ue("^"+oe(fe.valueOf).replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),pe=te.ceil,se=e.clearTimeout,ve=te.floor,he=ne.prototype.toString,ge=ce.test(ge=re.getPrototypeOf)&&ge,ye=fe.hasOwnProperty,me=ce.test(me=Zt.now)&&me||function(){return+new Zt
var Fe=X.support={};Fe.fastBind=je&&!$e,Fe.a=typeof Xt.name=="string",X.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:N,variable:"",imports:{_:X}};var Te=xe||function(n){return n&&typeof n=="object"?be.call(n)==$:!1},ze=Ne?function(n){return yt(n)?Ne(n):[]}:H,qe={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},We=ht(qe),Pe=te("("+ze(We).join("|")+")","g"),Ke=te("["+ze(qe).join("")+"]","g"),Le=ot(function(n,t,e){ve.call(n,e)?n[e]++:n[e]=1}),Me=ot(function(n,t,e){(ve.call(n,e)?n[e]:n[e]=[]).push(t) },_e=ie.push,be=e.setImmediate,de=e.setTimeout,we=ie.splice,je=fe.toString,ke=ie.unshift,xe=function(){try{var n={},t=ce.test(t=re.defineProperty)&&t,e=t(n,n,n)&&t}catch(r){}return e}(),Ce=ce.test(Ce=je.bind)&&Ce,Oe=ce.test(Oe=re.create)&&Oe,Ie=ce.test(Ie=Xt.isArray)&&Ie,Ne=e.isFinite,Ee=e.isNaN,Se=ce.test(Se=re.keys)&&Se,Re=te.max,Ae=te.min,De=e.parseInt,Be=te.random,$e=ie.slice,Fe=ce.test(e.attachEvent),Te=Ce&&!/\n|true/.test(Ce+Fe),We={};We[$]=Xt,We[F]=Yt,We[T]=Zt,We[W]=ne,We[z]=re,We[q]=ee,We[P]=ue,We[K]=oe,nt.prototype=Y.prototype;
}),Ue=ot(function(n,t,e){n[e]=t});$e&&G&&typeof ye=="function"&&(Lt=function(n){if(!gt(n))throw new re;return ye.apply(e,arguments)});var Ve=8==Se(d+"08")?Se:function(n,t){return Se(_t(n)?n.replace(E,""):n,t||0)};return X.after=function(n,t){if(!gt(t))throw new re;return function(){return 1>--n?t.apply(this,arguments):void 0}},X.assign=V,X.at=function(n){for(var t=arguments,e=-1,r=tt(t,!0,!1,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=Ht(t);++e<t;)u[e]=n[r[e]];return u},X.bind=Pt,X.bindAll=function(n){for(var t=1<arguments.length?tt(arguments,!0,!1,1):vt(n),e=-1,r=t.length;++e<r;){var u=t[e]; var qe=Y.support={};qe.fastBind=Ce&&!Te,qe.funcDecomp=!ce.test(e.a)&&R.test(v),qe.funcNames=typeof ne.name=="string",Y.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:N,variable:"",imports:{_:Y}},Oe||(lt=function(n){if(bt(n)){l.prototype=n;var t=new l;l.prototype=null}return t||{}});var ze=xe?function(n,t){U.value=t,xe(n,"__bindData__",U)}:l,Pe=Ie||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&je.call(n)==$||!1},Ke=Se?function(n){return bt(n)?Se(n):[]
n[u]=at(n[u],1,null,null,n)}return n},X.bindKey=function(n,t){return 2<arguments.length?at(t,19,Re.call(arguments,2),null,n):at(t,3,null,null,n)},X.chain=function(n){return n=new Y(n),n.__chain__=!0,n},X.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},X.compose=function(){for(var n=arguments,t=n.length||1;t--;)if(!gt(n[t]))throw new re;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},X.countBy=Le,X.createCallback=function(n,t,e){var r=typeof n; }:Q,Le={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Me=mt(Le),Ue=ue("("+Ke(Me).join("|")+")","g"),Ve=ue("["+Ke(Le).join("")+"]","g"),Ge=it(function(n,t,e){ye.call(n,e)?n[e]++:n[e]=1}),He=it(function(n,t,e){(ye.call(n,e)?n[e]:n[e]=[]).push(t)}),Je=it(function(n,t,e){n[e]=t});Te&&X&&typeof be=="function"&&(Vt=function(n){if(!_t(n))throw new ae;return be.apply(e,arguments)});var Qe=8==De(w+"08")?De:function(n,t){return De(wt(n)?n.replace(E,""):n,t||0)};return Y.after=function(n,t){if(!_t(t))throw new ae;
if(null==n||"function"==r)return nt(n,t,e);if("object"!=r)return function(t){return t[n]};var u=ze(n),o=u[0],a=n[o];return 1!=u.length||a!==a||yt(a)?function(t){for(var e=u.length,r=!1;e--&&(r=et(t[u[e]],n[u[e]],null,!0)););return r}:function(n){return n=n[o],a===n&&(0!==a||1/a==1/n)}},X.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,at(n,4,null,null,null,t)},X.debounce=Kt,X.defaults=M,X.defer=Lt,X.delay=function(n,t){if(!gt(n))throw new re;var e=Re.call(arguments,2);return me(function(){n.apply(v,e) return function(){return 1>--n?t.apply(this,arguments):void 0}},Y.assign=J,Y.at=function(n){for(var t=arguments,e=-1,r=rt(t,!0,!1,1),t=t[2]&&t[2][t[1]]===n?1:r.length,u=Xt(t);++e<t;)u[e]=n[r[e]];return u},Y.bind=Mt,Y.bindAll=function(n){for(var t=1<arguments.length?rt(arguments,!0,!1,1):yt(n),e=-1,r=t.length;++e<r;){var u=t[e];n[u]=ft(n[u],1,null,null,n)}return n},Y.bindKey=function(n,t){return 2<arguments.length?ft(t,19,$e.call(arguments,2),null,n):ft(t,3,null,null,n)},Y.chain=function(n){return n=new nt(n),n.__chain__=!0,n
},t)},X.difference=Bt,X.filter=jt,X.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(n=Ot(n,e,r)),tt(n,t)},X.forEach=xt,X.forEachRight=Ct,X.forIn=b,X.forInRight=function(n,t,e){var r=[];b(n,function(n,t){r.push(t,n)});var u=r.length;for(t=nt(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},X.forOwn=g,X.forOwnRight=st,X.functions=vt,X.groupBy=Me,X.indexBy=Ue,X.initial=function(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=u; },Y.compact=function(n){for(var t=-1,e=n?n.length:0,r=[];++t<e;){var u=n[t];u&&r.push(u)}return r},Y.compose=function(){for(var n=arguments,t=n.length;t--;)if(!_t(n[t]))throw new ae;return function(){for(var t=arguments,e=n.length;e--;)t=[n[e].apply(this,t)];return t[0]}},Y.countBy=Ge,Y.createCallback=function(n,t,e){var r=typeof n;if(null==n||"function"==r)return et(n,t,e);if("object"!=r)return function(t){return t[n]};var u=Ke(n),o=u[0],a=n[o];return 1!=u.length||a!==a||bt(a)?function(t){for(var e=u.length,r=!1;e--&&(r=ut(t[u[e]],n[u[e]],null,!0)););return r
for(t=X.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return p(n,0,Ie(Ee(0,u-r),u))},X.intersection=function(e){for(var r=arguments,u=r.length,a=-1,f=i(),p=-1,s=ft(),v=e?e.length:0,h=[],g=i();++a<u;){var y=r[a];f[a]=s===n&&(y?y.length:0)>=_&&o(a?r[a]:g)}n:for(;++p<v;){var m=f[0],y=e[p];if(0>(m?t(m,y):s(g,y))){for(a=u,(m||g).push(y);--a;)if(m=f[a],0>(m?t(m,y):s(r[a],y)))continue n;h.push(y)}}for(;u--;)(m=f[u])&&c(m);return l(f),l(g),h},X.invert=ht,X.invoke=function(n,t){var e=Re.call(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,a=Ht(typeof o=="number"?o:0); }:function(n){return n=n[o],a===n&&(0!==a||1/a==1/n)}},Y.curry=function(n,t){return t=typeof t=="number"?t:+t||n.length,ft(n,4,null,null,null,t)},Y.debounce=Ut,Y.defaults=G,Y.defer=Vt,Y.delay=function(n,t){if(!_t(n))throw new ae;var e=$e.call(arguments,2);return de(function(){n.apply(h,e)},t)},Y.difference=Ft,Y.filter=Ct,Y.flatten=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(e=(r=e)&&r[t]===n?null:t,t=!1),null!=e&&(n=Et(n,e,r)),rt(n,t)},Y.forEach=It,Y.forEachRight=Nt,Y.forIn=d,Y.forInRight=function(n,t,e){var r=[];
return xt(n,function(n){a[++r]=(u?t:n[t]).apply(n,e)}),a},X.keys=ze,X.map=Ot,X.max=Nt,X.memoize=function(n,t){function e(){var r=e.cache,u=t?t.apply(this,arguments):m+arguments[0];return ve.call(r,u)?r[u]:r[u]=n.apply(this,arguments)}if(!gt(n))throw new re;return e.cache={},e},X.merge=function(n){var t=arguments,e=2;if(!yt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=nt(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=Re.call(arguments,1,e),u=-1,o=i(),a=i();++u<e;)rt(n,t[u],r,o,a); d(n,function(n,t){r.push(t,n)});var u=r.length;for(t=et(t,e,3);u--&&false!==t(r[u--],r[u],n););return n},Y.forOwn=y,Y.forOwnRight=gt,Y.functions=yt,Y.groupBy=He,Y.indexBy=Je,Y.initial=function(n,t,e){var r=0,u=n?n.length:0;if(typeof t!="number"&&null!=t){var o=u;for(t=Y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else r=null==t||e?1:t||r;return s(n,0,Ae(Re(0,u-r),u))},Y.intersection=function(e){for(var r=arguments,u=r.length,a=-1,f=i(),l=-1,s=pt(),v=e?e.length:0,h=[],g=i();++a<u;){var y=r[a];f[a]=s===n&&(y?y.length:0)>=b&&o(a?r[a]:g)
return l(o),l(a),n},X.min=function(n,t,e){var u=1/0,o=u;if(!t&&Te(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i<o&&(o=i)}}else t=!t&&_t(n)?r:X.createCallback(t,e,3),xt(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n)});return o},X.omit=function(n,t,e){var r=ft(),u=typeof t=="function",o={};if(u)t=X.createCallback(t,e,3);else var a=tt(arguments,!0,!1,1);return b(n,function(n,e,i){(u?!t(n,e,i):0>r(a,e))&&(o[e]=n)}),o},X.once=function(n){var t,e;if(!gt(n))throw new re;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e) }n:for(;++l<v;){var m=f[0],y=e[l];if(0>(m?t(m,y):s(g,y))){for(a=u,(m||g).push(y);--a;)if(m=f[a],0>(m?t(m,y):s(r[a],y)))continue n;h.push(y)}}for(;u--;)(m=f[u])&&p(m);return c(f),c(g),h},Y.invert=mt,Y.invoke=function(n,t){var e=$e.call(arguments,2),r=-1,u=typeof t=="function",o=n?n.length:0,a=Xt(typeof o=="number"?o:0);return It(n,function(n){a[++r]=(u?t:n[t]).apply(n,e)}),a},Y.keys=Ke,Y.map=Et,Y.max=St,Y.memoize=function(n,t){function e(){var r=e.cache,u=t?t.apply(this,arguments):_+arguments[0];return ye.call(r,u)?r[u]:r[u]=n.apply(this,arguments)
}},X.pairs=function(n){for(var t=-1,e=ze(n),r=e.length,u=Ht(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u},X.partial=function(n){return at(n,16,Re.call(arguments,1))},X.partialRight=function(n){return at(n,32,null,Re.call(arguments,1))},X.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=tt(arguments,!0,!1,1),a=yt(n)?o.length:0;++u<a;){var i=o[u];i in n&&(r[i]=n[i])}else t=X.createCallback(t,e,3),b(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},X.pluck=Et,X.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,a=t[e];++o<u;)n[o]===a&&(_e.call(n,o--,1),u--); }if(!_t(n))throw new ae;return e.cache={},e},Y.merge=function(n){var t=arguments,e=2;if(!bt(n))return n;if("number"!=typeof t[2]&&(e=t.length),3<e&&"function"==typeof t[e-2])var r=et(t[--e-1],t[e--],2);else 2<e&&"function"==typeof t[e-1]&&(r=t[--e]);for(var t=$e.call(arguments,1,e),u=-1,o=i(),a=i();++u<e;)ot(n,t[u],r,o,a);return c(o),c(a),n},Y.min=function(n,t,e){var u=1/0,o=u;if(!t&&Pe(n)){e=-1;for(var a=n.length;++e<a;){var i=n[e];i<o&&(o=i)}}else t=!t&&wt(n)?r:Y.createCallback(t,e,3),It(n,function(n,e,r){e=t(n,e,r),e<u&&(u=e,o=n)
return n},X.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Ee(0,fe((t-n)/(e||1)));for(var u=Ht(t);++r<t;)u[r]=n,n+=e;return u},X.reject=function(n,t,e){return t=X.createCallback(t,e,3),jt(n,function(n,e,r){return!t(n,e,r)})},X.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];for(t=X.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),_e.call(n,r--,1),u--);return o},X.rest=Ft,X.shuffle=At,X.sortBy=function(n,t,e){var r=-1,o=n?n.length:0,a=Ht(typeof o=="number"?o:0); });return o},Y.omit=function(n,t,e){var r=pt(),u=typeof t=="function",o={};if(u)t=Y.createCallback(t,e,3);else var a=rt(arguments,!0,!1,1);return d(n,function(n,e,i){(u?!t(n,e,i):0>r(a,e))&&(o[e]=n)}),o},Y.once=function(n){var t,e;if(!_t(n))throw new ae;return function(){return t?e:(t=!0,e=n.apply(this,arguments),n=null,e)}},Y.pairs=function(n){for(var t=-1,e=Ke(n),r=e.length,u=Xt(r);++t<r;){var o=e[t];u[t]=[o,n[o]]}return u},Y.partial=function(n){return ft(n,16,$e.call(arguments,1))},Y.partialRight=function(n){return ft(n,32,null,$e.call(arguments,1))
for(t=X.createCallback(t,e,3),xt(n,function(n,e,u){var o=a[++r]=f();o.l=t(n,e,u),o.m=r,o.n=n}),o=a.length,a.sort(u);o--;)n=a[o],a[o]=n.n,c(n);return a},X.tap=function(n,t){return t(n),n},X.throttle=function(n,t,e){var r=!0,u=!0;if(!gt(n))throw new re;return false===e?r=!1:yt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),e=f(),e.leading=r,e.maxWait=t,e.trailing=u,n=Kt(n,t,e),c(e),n},X.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=Ht(n);for(t=nt(t,e,1);++r<n;)u[r]=t(r);return u},X.toArray=function(n){return n&&typeof n.length=="number"?p(n):bt(n) },Y.pick=function(n,t,e){var r={};if(typeof t!="function")for(var u=-1,o=rt(arguments,!0,!1,1),a=bt(n)?o.length:0;++u<a;){var i=o[u];i in n&&(r[i]=n[i])}else t=Y.createCallback(t,e,3),d(n,function(n,e,u){t(n,e,u)&&(r[e]=n)});return r},Y.pluck=Rt,Y.pull=function(n){for(var t=arguments,e=0,r=t.length,u=n?n.length:0;++e<r;)for(var o=-1,a=t[e];++o<u;)n[o]===a&&(we.call(n,o--,1),u--);return n},Y.range=function(n,t,e){n=+n||0,e=typeof e=="number"?e:+e||1,null==t&&(t=n,n=0);var r=-1;t=Re(0,pe((t-n)/(e||1)));
},X.transform=function(n,t,e,r){var u=Te(n);return t=nt(t,r,4),null==e&&(u?e=[]:(r=n&&n.constructor,e=yt(r&&r.prototype)?ke(r&&r.prototype):{})),(u?xt:g)(n,function(n,r,u){return t(e,n,r,u)}),e},X.union=function(){return ut(tt(arguments,!0,!0))},X.uniq=zt,X.values=bt,X.where=jt,X.without=function(n){return Bt(n,Re.call(arguments,1))},X.wrap=function(n,t){if(!gt(t))throw new re;return function(){var e=[n];return ge.apply(e,arguments),t.apply(this,e)}},X.zip=qt,X.zipObject=Wt,X.collect=Ot,X.drop=Ft,X.each=xt,X.c=Ct,X.extend=V,X.methods=vt,X.object=Wt,X.select=jt,X.tail=Ft,X.unique=zt,X.unzip=qt,Ut(X),X.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1),Z(n,t,typeof e=="function"&&nt(e,r,1)) for(var u=Xt(t);++r<t;)u[r]=n,n+=e;return u},Y.reject=function(n,t,e){return t=Y.createCallback(t,e,3),Ct(n,function(n,e,r){return!t(n,e,r)})},Y.remove=function(n,t,e){var r=-1,u=n?n.length:0,o=[];for(t=Y.createCallback(t,e,3);++r<u;)e=n[r],t(e,r,n)&&(o.push(e),we.call(n,r--,1),u--);return o},Y.rest=qt,Y.shuffle=Bt,Y.sortBy=function(n,t,e){var r=-1,o=n?n.length:0,a=Xt(typeof o=="number"?o:0);for(t=Y.createCallback(t,e,3),It(n,function(n,e,u){var o=a[++r]=f();o.m=t(n,e,u),o.n=r,o.o=n}),o=a.length,a.sort(u);o--;)n=a[o],a[o]=n.o,p(n);
},X.cloneDeep=function(n,t,e){return Z(n,!0,typeof t=="function"&&nt(t,e,1))},X.contains=dt,X.escape=function(n){return null==n?"":ee(n).replace(Ke,it)},X.every=wt,X.find=kt,X.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=X.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},X.findKey=function(n,t,e){var r;return t=X.createCallback(t,e,3),g(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},X.findLast=function(n,t,e){var r;return t=X.createCallback(t,e,3),Ct(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0 return a},Y.tap=function(n,t){return t(n),n},Y.throttle=function(n,t,e){var r=!0,u=!0;if(!_t(n))throw new ae;return false===e?r=!1:bt(e)&&(r="leading"in e?e.leading:r,u="trailing"in e?e.trailing:u),M.leading=r,M.maxWait=t,M.trailing=u,Ut(n,t,M)},Y.times=function(n,t,e){n=-1<(n=+n)?n:0;var r=-1,u=Xt(n);for(t=et(t,e,1);++r<n;)u[r]=t(r);return u},Y.toArray=function(n){return n&&typeof n.length=="number"?s(n):jt(n)},Y.transform=function(n,t,e,r){var u=Pe(n);return t=et(t,r,4),null==e&&(u?e=[]:(r=n&&n.constructor,e=lt(r&&r.prototype))),(u?It:y)(n,function(n,r,u){return t(e,n,r,u)
}),r},X.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=X.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;return-1},X.findLastKey=function(n,t,e){var r;return t=X.createCallback(t,e,3),st(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},X.has=function(n,t){return n?ve.call(n,t):!1},X.identity=Mt,X.indexOf=Dt,X.isArguments=pt,X.isArray=Te,X.isBoolean=function(n){return true===n||false===n||be.call(n)==D},X.isDate=function(n){return n?typeof n=="object"&&be.call(n)==F:!1},X.isElement=function(n){return n?1===n.nodeType:!1 }),e},Y.union=function(){return at(rt(arguments,!0,!0))},Y.uniq=Pt,Y.values=jt,Y.where=Ct,Y.without=function(n){return Ft(n,$e.call(arguments,1))},Y.wrap=function(n,t){if(!_t(t))throw new ae;return function(){var e=[n];return _e.apply(e,arguments),t.apply(this,e)}},Y.zip=Kt,Y.zipObject=Lt,Y.collect=Et,Y.drop=qt,Y.each=It,Y.b=Nt,Y.extend=J,Y.methods=yt,Y.object=Lt,Y.select=Ct,Y.tail=qt,Y.unique=Pt,Y.unzip=Kt,Ht(Y),Y.clone=function(n,t,e,r){return typeof t!="boolean"&&null!=t&&(r=e,e=t,t=!1),tt(n,t,typeof e=="function"&&et(e,r,1))
},X.isEmpty=function(n){var t=!0;if(!n)return t;var e=be.call(n),r=n.length;return e==$||e==P||e==B||e==q&&typeof r=="number"&&gt(n.splice)?!r:(g(n,function(){return t=!1}),t)},X.isEqual=function(n,t,e,r){return et(n,t,typeof e=="function"&&nt(e,r,2))},X.isFinite=function(n){return Ce(n)&&!Oe(parseFloat(n))},X.isFunction=gt,X.isNaN=function(n){return mt(n)&&n!=+n},X.isNull=function(n){return null===n},X.isNumber=mt,X.isObject=yt,X.isPlainObject=h,X.isRegExp=function(n){return n?typeof n=="object"&&be.call(n)==W:!1 },Y.cloneDeep=function(n,t,e){return tt(n,!0,typeof t=="function"&&et(t,e,1))},Y.contains=kt,Y.escape=function(n){return null==n?"":oe(n).replace(Ve,ct)},Y.every=xt,Y.find=Ot,Y.findIndex=function(n,t,e){var r=-1,u=n?n.length:0;for(t=Y.createCallback(t,e,3);++r<u;)if(t(n[r],r,n))return r;return-1},Y.findKey=function(n,t,e){var r;return t=Y.createCallback(t,e,3),y(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},Y.findLast=function(n,t,e){var r;return t=Y.createCallback(t,e,3),Nt(n,function(n,e,u){return t(n,e,u)?(r=n,!1):void 0
},X.isString=_t,X.isUndefined=function(n){return typeof n=="undefined"},X.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Ee(0,r+e):Ie(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},X.mixin=Ut,X.noConflict=function(){return e._=ae,this},X.parseInt=Ve,X.random=Vt,X.reduce=It,X.reduceRight=St,X.result=function(n,t){if(n){var e=n[t];return gt(e)?n[t]():e}},X.runInContext=s,X.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:ze(n).length},X.some=Rt,X.sortedIndex=Tt,X.template=function(n,t,e){var r=X.templateSettings; }),r},Y.findLastIndex=function(n,t,e){var r=n?n.length:0;for(t=Y.createCallback(t,e,3);r--;)if(t(n[r],r,n))return r;return-1},Y.findLastKey=function(n,t,e){var r;return t=Y.createCallback(t,e,3),gt(n,function(n,e,u){return t(n,e,u)?(r=e,!1):void 0}),r},Y.has=function(n,t){return n?ye.call(n,t):!1},Y.identity=Gt,Y.indexOf=Wt,Y.isArguments=ht,Y.isArray=Pe,Y.isBoolean=function(n){return true===n||false===n||je.call(n)==F},Y.isDate=function(n){return n?typeof n=="object"&&je.call(n)==T:!1},Y.isElement=function(n){return n?1===n.nodeType:!1
n||(n=""),e=M({},e,r);var u,o=M({},e.imports,r.imports),r=ze(o),o=bt(o),i=0,f=e.interpolate||I,l="__p+='",f=te((e.escape||I).source+"|"+f.source+"|"+(f===N?x:I).source+"|"+(e.evaluate||I).source+"|$","g");n.replace(f,function(t,e,r,o,f,c){return r||(r=o),l+=n.slice(i,c).replace(A,a),e&&(l+="'+__e("+e+")+'"),f&&(u=!0,l+="';"+f+";__p+='"),r&&(l+="'+((__t=("+r+"))==null?'':__t)+'"),i=c+t.length,t}),l+="';\n",f=e=e.variable,f||(e="obj",l="with("+e+"){"+l+"}"),l=(u?l.replace(w,""):l).replace(j,"$1").replace(k,"$1;"),l="function("+e+"){"+(f?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}"; },Y.isEmpty=function(n){var t=!0;if(!n)return t;var e=je.call(n),r=n.length;return e==$||e==K||e==B||e==z&&typeof r=="number"&&_t(n.splice)?!r:(y(n,function(){return t=!1}),t)},Y.isEqual=function(n,t,e,r){return ut(n,t,typeof e=="function"&&et(e,r,2))},Y.isFinite=function(n){return Ne(n)&&!Ee(parseFloat(n))},Y.isFunction=_t,Y.isNaN=function(n){return dt(n)&&n!=+n},Y.isNull=function(n){return null===n},Y.isNumber=dt,Y.isObject=bt,Y.isPlainObject=g,Y.isRegExp=function(n){return n?typeof n=="object"&&je.call(n)==P:!1
try{var c=Xt(r,"return "+l).apply(v,o)}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},X.unescape=function(n){return null==n?"":ee(n).replace(Pe,ct)},X.uniqueId=function(n){var t=++y;return ee(null==n?"":n)+t},X.all=wt,X.any=Rt,X.detect=kt,X.findWhere=kt,X.foldl=It,X.foldr=St,X.include=dt,X.inject=It,g(X,function(n,t){X.prototype[t]||(X.prototype[t]=function(){var t=[this.__wrapped__],e=this.__chain__;return ge.apply(t,arguments),t=n.apply(X,t),e?new Y(t,e):t})}),X.first=$t,X.last=function(n,t,e){var r=0,u=n?n.length:0; },Y.isString=wt,Y.isUndefined=function(n){return typeof n=="undefined"},Y.lastIndexOf=function(n,t,e){var r=n?n.length:0;for(typeof e=="number"&&(r=(0>e?Re(0,r+e):Ae(e,r-1))+1);r--;)if(n[r]===t)return r;return-1},Y.mixin=Ht,Y.noConflict=function(){return e._=le,this},Y.parseInt=Qe,Y.random=Jt,Y.reduce=At,Y.reduceRight=Dt,Y.result=function(n,t){if(n){var e=n[t];return _t(e)?n[t]():e}},Y.runInContext=v,Y.size=function(n){var t=n?n.length:0;return typeof t=="number"?t:Ke(n).length},Y.some=$t,Y.sortedIndex=zt,Y.template=function(n,t,e){var r=Y.templateSettings;
if(typeof t!="number"&&null!=t){var o=u;for(t=X.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:v;return p(n,Ee(0,u-r))},X.sample=function(n,t,e){var r=n?n.length:0;return typeof r!="number"&&(n=bt(n)),null==t||e?n?n[Vt(r-1)]:v:(n=At(n),n.length=Ie(Ee(0,t),n.length),n)},X.take=$t,X.head=$t,g(X,function(n,t){var e="sample"!==t;X.prototype[t]||(X.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new Y(o,u):o n||(n=""),e=G({},e,r);var u,o=G({},e.imports,r.imports),r=Ke(o),o=jt(o),i=0,f=e.interpolate||S,l="__p+='",f=ue((e.escape||S).source+"|"+f.source+"|"+(f===N?C:S).source+"|"+(e.evaluate||S).source+"|$","g");n.replace(f,function(t,e,r,o,f,c){return r||(r=o),l+=n.slice(i,c).replace(A,a),e&&(l+="'+__e("+e+")+'"),f&&(u=!0,l+="';"+f+";__p+='"),r&&(l+="'+((__t=("+r+"))==null?'':__t)+'"),i=c+t.length,t}),l+="';\n",f=e=e.variable,f||(e="obj",l="with("+e+"){"+l+"}"),l=(u?l.replace(j,""):l).replace(k,"$1").replace(x,"$1;"),l="function("+e+"){"+(f?"":e+"||("+e+"={});")+"var __t,__p='',__e=_.escape"+(u?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}";
})}),X.VERSION="2.0.0",X.prototype.chain=function(){return this.__chain__=!0,this},X.prototype.toString=function(){return ee(this.__wrapped__)},X.prototype.value=Gt,X.prototype.valueOf=Gt,xt(["join","pop","shift"],function(n){var t=ue[n];X.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);return n?new Y(e,n):e}}),xt(["push","reverse","sort","unshift"],function(n){var t=ue[n];X.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),xt(["concat","slice","splice"],function(n){var t=ue[n]; try{var c=ne(r,"return "+l).apply(h,o)}catch(p){throw p.source=l,p}return t?c(t):(c.source=l,c)},Y.unescape=function(n){return null==n?"":oe(n).replace(Ue,vt)},Y.uniqueId=function(n){var t=++m;return oe(null==n?"":n)+t},Y.all=xt,Y.any=$t,Y.detect=Ot,Y.findWhere=Ot,Y.foldl=At,Y.foldr=Dt,Y.include=kt,Y.inject=At,y(Y,function(n,t){Y.prototype[t]||(Y.prototype[t]=function(){var t=[this.__wrapped__],e=this.__chain__;return _e.apply(t,arguments),t=n.apply(Y,t),e?new nt(t,e):t})}),Y.first=Tt,Y.last=function(n,t,e){var r=0,u=n?n.length:0;
X.prototype[n]=function(){return new Y(t.apply(this.__wrapped__,arguments),this.__chain__)}}),X}var v,h=[],g=[],y=0,m=+new Date+"",_=75,b=40,d=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",w=/\b__p\+='';/g,j=/\b(__p\+=)''\+/g,k=/(__e\(.*?\)|\b__t\))\+'';/g,x=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,C=/\w*$/,O=/^function[ \n\r\t]+\w/,N=/<%=([\s\S]+?)%>/g,E=RegExp("^["+d+"]*0+(?=.$)"),I=/($^)/,S=(S=/\bthis\b/)&&S.test(s)&&S,A=/['\n\r\t\u2028\u2029\\]/g,R="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),B="[object Arguments]",$="[object Array]",D="[object Boolean]",F="[object Date]",T="[object Function]",z="[object Number]",q="[object Object]",W="[object RegExp]",P="[object String]",K={}; if(typeof t!="number"&&null!=t){var o=u;for(t=Y.createCallback(t,e,3);o--&&t(n[o],o,n);)r++}else if(r=t,null==r||e)return n?n[u-1]:h;return s(n,Re(0,u-r))},Y.sample=function(n,t,e){var r=n?n.length:0;return typeof r!="number"&&(n=jt(n)),null==t||e?n?n[Jt(r-1)]:h:(n=Bt(n),n.length=Ae(Re(0,t),n.length),n)},Y.take=Tt,Y.head=Tt,y(Y,function(n,t){var e="sample"!==t;Y.prototype[t]||(Y.prototype[t]=function(t,r){var u=this.__chain__,o=n(this.__wrapped__,t,r);return u||null!=t&&(!r||e&&typeof t=="function")?new nt(o,u):o
K[T]=!1,K[B]=K[$]=K[D]=K[F]=K[z]=K[q]=K[W]=K[P]=!0;var L={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},M={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},U=L[typeof window]&&window||this,V=L[typeof exports]&&exports,G=L[typeof module]&&module&&module.exports==V&&module,H=L[typeof global]&&global;!H||H.global!==H&&H.window!==H||(U=H);var J=s();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(U._=J, define(function(){return J })}),Y.VERSION="2.2.1",Y.prototype.chain=function(){return this.__chain__=!0,this},Y.prototype.toString=function(){return oe(this.__wrapped__)},Y.prototype.value=Qt,Y.prototype.valueOf=Qt,It(["join","pop","shift"],function(n){var t=ie[n];Y.prototype[n]=function(){var n=this.__chain__,e=t.apply(this.__wrapped__,arguments);return n?new nt(e,n):e}}),It(["push","reverse","sort","unshift"],function(n){var t=ie[n];Y.prototype[n]=function(){return t.apply(this.__wrapped__,arguments),this}}),It(["concat","slice","splice"],function(n){var t=ie[n];
})):V&&!V.nodeType?G?(G.exports=J)._=J:V._=J:U._=J}).call(this); Y.prototype[n]=function(){return new nt(t.apply(this.__wrapped__,arguments),this.__chain__)}}),Y}var h,g=[],y=[],m=0,_=+new Date+"",b=75,d=40,w=" \t\x0B\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",j=/\b__p\+='';/g,k=/\b(__p\+=)''\+/g,x=/(__e\(.*?\)|\b__t\))\+'';/g,C=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,O=/\w*$/,I=/^function[ \n\r\t]+\w/,N=/<%=([\s\S]+?)%>/g,E=RegExp("^["+w+"]*0+(?=.$)"),S=/($^)/,R=/\bthis\b/,A=/['\n\r\t\u2028\u2029\\]/g,D="Array Boolean Date Function Math Number Object RegExp String _ attachEvent clearTimeout isFinite isNaN parseInt setImmediate setTimeout".split(" "),B="[object Arguments]",$="[object Array]",F="[object Boolean]",T="[object Date]",W="[object Function]",q="[object Number]",z="[object Object]",P="[object RegExp]",K="[object String]",L={};
L[W]=!1,L[B]=L[$]=L[F]=L[T]=L[q]=L[z]=L[P]=L[K]=!0;var M={leading:!1,maxWait:0,trailing:!1},U={configurable:!1,enumerable:!1,value:null,writable:!1},V={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},G={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},H=V[typeof window]&&window||this,J=V[typeof exports]&&exports&&!exports.nodeType&&exports,Q=V[typeof module]&&module&&!module.nodeType&&module,X=Q&&Q.exports===J&&J,Y=V[typeof global]&&global;!Y||Y.global!==Y&&Y.window!==Y||(H=Y);
var Z=v();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(H._=Z, define(function(){return Z})):J&&Q?X?(Q.exports=Z)._=Z:J._=Z:H._=Z}).call(this);

View File

@@ -1,6 +1,6 @@
/** /**
* @license * @license
* Lo-Dash 2.0.0 (Custom Build) <http://lodash.com/> * Lo-Dash 2.2.1 (Custom Build) <http://lodash.com/>
* Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js` * Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js`
* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/> * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE> * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
@@ -66,10 +66,13 @@
var root = (objectTypes[typeof window] && window) || this; var root = (objectTypes[typeof window] && window) || this;
/** Detect free variable `exports` */ /** Detect free variable `exports` */
var freeExports = objectTypes[typeof exports] && exports; var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
/** Detect free variable `module` */ /** Detect free variable `module` */
var freeModule = objectTypes[typeof module] && module && module.exports == freeExports && module; var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
/** Detect the popular CommonJS extension `module.exports` */
var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
/** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */
var freeGlobal = objectTypes[typeof global] && global; var freeGlobal = objectTypes[typeof global] && global;
@@ -179,6 +182,7 @@
var ceil = Math.ceil, var ceil = Math.ceil,
floor = Math.floor, floor = Math.floor,
hasOwnProperty = objectProto.hasOwnProperty, hasOwnProperty = objectProto.hasOwnProperty,
now = reNative.test(now = Date.now) && now || function() { return +new Date; },
push = arrayRef.push, push = arrayRef.push,
toString = objectProto.toString, toString = objectProto.toString,
unshift = arrayRef.unshift; unshift = arrayRef.unshift;
@@ -202,8 +206,8 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Creates a `lodash` object which wraps the given value to enable method * Creates a `lodash` object which wraps the given value to enable intuitive
* chaining. * method chaining.
* *
* In addition to Lo-Dash methods, wrappers also have the following `Array` methods: * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
* `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
@@ -237,6 +241,8 @@
* The wrapper functions `first` and `last` return wrapped values when `n` is * The wrapper functions `first` and `last` return wrapped values when `n` is
* provided, otherwise they return unwrapped values. * provided, otherwise they return unwrapped values.
* *
* Explicit chaining can be enabled by using the `_.chain` method.
*
* @name _ * @name _
* @constructor * @constructor
* @category Chaining * @category Chaining
@@ -418,9 +424,21 @@
while (++index < length) { while (++index < length) {
var value = array[index]; var value = array[index];
// recursively flatten arrays (susceptible to call stack limits)
if (value && typeof value == 'object' && (isArray(value) || isArguments(value))) { if (value && typeof value == 'object' && typeof value.length == 'number'
push.apply(result, isShallow ? value : baseFlatten(value, isShallow, isArgArrays)); && (isArray(value) || isArguments(value))) {
// recursively flatten arrays (susceptible to call stack limits)
if (!isShallow) {
value = baseFlatten(value, isShallow, isArgArrays);
}
var valIndex = -1,
valLength = value.length,
resIndex = result.length;
result.length += valLength;
while (++valIndex < valLength) {
result[resIndex++] = value[valIndex];
}
} else if (!isArgArrays) { } else if (!isArgArrays) {
result.push(value); result.push(value);
} }
@@ -773,12 +791,14 @@
* // => false * // => false
*/ */
function isArguments(value) { function isArguments(value) {
return (value && typeof value == 'object') ? toString.call(value) == argsClass : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == argsClass || false;
} }
// fallback for browsers that can't detect `arguments` objects by [[Class]] // fallback for browsers that can't detect `arguments` objects by [[Class]]
if (!isArguments(arguments)) { if (!isArguments(arguments)) {
isArguments = function(value) { isArguments = function(value) {
return (value && typeof value == 'object') ? hasOwnProperty.call(value, 'callee') : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
hasOwnProperty.call(value, 'callee') || false;
}; };
} }
@@ -800,7 +820,8 @@
* // => true * // => true
*/ */
var isArray = nativeIsArray || function(value) { var isArray = nativeIsArray || function(value) {
return (value && typeof value == 'object') ? toString.call(value) == arrayClass : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == arrayClass || false;
}; };
/** /**
@@ -925,10 +946,10 @@
* @memberOf _ * @memberOf _
* @category Objects * @category Objects
* @param {*} value The value to clone. * @param {*} value The value to clone.
* @param {boolean} [deep=false] A flag to indicate a deep clone. * @param {boolean} [deep=false] Specify a deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {*} [thisArg] The `this` binding of `callback`. * @param {*} [thisArg] The `this` binding of `callback`.
* @returns {*} Returns the cloned `value`. * @returns {*} Returns the cloned value.
* @example * @example
* *
* var stooges = [ * var stooges = [
@@ -1882,7 +1903,7 @@
/** /**
* Examines each element in a `collection`, returning the first that * Examines each element in a `collection`, returning the first that
* has the given `properties`. When checking `properties`, this method * has the given properties. When checking `properties`, this method
* performs a deep comparison between values to determine if they are * performs a deep comparison between values to determine if they are
* equivalent to each other. * equivalent to each other.
* *
@@ -2156,10 +2177,11 @@
} }
/** /**
* Retrieves the maximum value of an array. If a callback is provided it * Retrieves the maximum value of a collection. If the collection is empty or
* will be executed for each value in the array to generate the criterion by * falsey `-Infinity` is returned. If a callback is provided it will be executed
* which the value is ranked. The callback is bound to `thisArg` and invoked * for each value in the collection to generate the criterion by which the value
* with three arguments; (value, index, collection). * is ranked. The callback is bound to `thisArg` and invoked with three
* arguments; (value, index, collection).
* *
* If a property name is provided for `callback` the created "_.pluck" style * If a property name is provided for `callback` the created "_.pluck" style
* callback will return the property value of the given element. * callback will return the property value of the given element.
@@ -2223,10 +2245,11 @@
} }
/** /**
* Retrieves the minimum value of an array. If a callback is provided it * Retrieves the minimum value of a collection. If the collection is empty or
* will be executed for each value in the array to generate the criterion by * falsey `Infinity` is returned. If a callback is provided it will be executed
* which the value is ranked. The callback is bound to `thisArg` and invoked * for each value in the collection to generate the criterion by which the value
* with three arguments; (value, index, collection). * is ranked. The callback is bound to `thisArg` and invoked with three
* arguments; (value, index, collection).
* *
* If a property name is provided for `callback` the created "_.pluck" style * If a property name is provided for `callback` the created "_.pluck" style
* callback will return the property value of the given element. * callback will return the property value of the given element.
@@ -2690,16 +2713,16 @@
* @category Collections * @category Collections
* @param {Array|Object|string} collection The collection to iterate over. * @param {Array|Object|string} collection The collection to iterate over.
* @param {Object} properties The object of property values to filter by. * @param {Object} properties The object of property values to filter by.
* @returns {Array} Returns a new array of elements that have the given `properties`. * @returns {Array} Returns a new array of elements that have the given properties.
* @example * @example
* *
* var stooges = [ * var stooges = [
* { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }, * { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
* { 'name': 'moe', 'age': '40', 'quotes': ['Spread out!', 'You knucklehead!'] } * { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }
* ]; * ];
* *
* _.where(stooges, { 'age': 40 }); * _.where(stooges, { 'age': 40 });
* // => [{ 'name': 'moe', 'age': '40', 'quotes': ['Spread out!', 'You knucklehead!'] }] * // => [{ 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }]
* *
* _.where(stooges, { 'quotes': ['Poifect!'] }); * _.where(stooges, { 'quotes': ['Poifect!'] });
* // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }] * // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }]
@@ -3621,7 +3644,7 @@
*/ */
function compose() { function compose() {
var funcs = arguments, var funcs = arguments,
length = funcs.length || 1; length = funcs.length;
while (length--) { while (length--) {
if (!isFunction(funcs[length])) { if (!isFunction(funcs[length])) {
@@ -3759,7 +3782,7 @@
trailing = 'trailing' in options ? options.trailing : trailing; trailing = 'trailing' in options ? options.trailing : trailing;
} }
var delayed = function() { var delayed = function() {
var remaining = wait - (new Date - stamp); var remaining = wait - (now() - stamp);
if (remaining <= 0) { if (remaining <= 0) {
if (maxTimeoutId) { if (maxTimeoutId) {
clearTimeout(maxTimeoutId); clearTimeout(maxTimeoutId);
@@ -3767,7 +3790,7 @@
var isCalled = trailingCall; var isCalled = trailingCall;
maxTimeoutId = timeoutId = trailingCall = undefined; maxTimeoutId = timeoutId = trailingCall = undefined;
if (isCalled) { if (isCalled) {
lastCalled = +new Date; lastCalled = now();
result = func.apply(thisArg, args); result = func.apply(thisArg, args);
} }
} else { } else {
@@ -3781,14 +3804,14 @@
} }
maxTimeoutId = timeoutId = trailingCall = undefined; maxTimeoutId = timeoutId = trailingCall = undefined;
if (trailing || (maxWait !== wait)) { if (trailing || (maxWait !== wait)) {
lastCalled = +new Date; lastCalled = now();
result = func.apply(thisArg, args); result = func.apply(thisArg, args);
} }
}; };
return function() { return function() {
args = arguments; args = arguments;
stamp = +new Date; stamp = now();
thisArg = this; thisArg = this;
trailingCall = trailing && (timeoutId || !leading); trailingCall = trailing && (timeoutId || !leading);
@@ -4125,11 +4148,9 @@
push.apply(args, arguments); push.apply(args, arguments);
var result = func.apply(lodash, args); var result = func.apply(lodash, args);
if (this.__chain__) { return this.__chain__
result = new lodashWrapper(result); ? new lodashWrapper(result, true)
result.__chain__ = true; : result;
}
return result;
}; };
}); });
} }
@@ -4154,21 +4175,29 @@
/** /**
* Produces a random number between `min` and `max` (inclusive). If only one * Produces a random number between `min` and `max` (inclusive). If only one
* argument is provided a number between `0` and the given number will be * argument is provided a number between `0` and the given number will be
* returned. * returned. If `floating` is truey or either `min` or `max` are floats a
* floating-point number will be returned instead of an integer.
* *
* @static * @static
* @memberOf _ * @memberOf _
* @category Utilities * @category Utilities
* @param {number} [min=0] The minimum possible value. * @param {number} [min=0] The minimum possible value.
* @param {number} [max=1] The maximum possible value. * @param {number} [max=1] The maximum possible value.
* @param {boolean} [floating=false] Specify returning a floating-point number.
* @returns {number} Returns a random number. * @returns {number} Returns a random number.
* @example * @example
* *
* _.random(0, 5); * _.random(0, 5);
* // => a number between 0 and 5 * // => an integer between 0 and 5
* *
* _.random(5); * _.random(5);
* // => also a number between 0 and 5 * // => also an integer between 0 and 5
*
* _.random(5, true);
* // => a floating-point number between 0 and 5
*
* _.random(1.2, 5.2);
* // => a floating-point number between 1.2 and 5.2
*/ */
function random(min, max) { function random(min, max) {
if (min == null && max == null) { if (min == null && max == null) {
@@ -4181,10 +4210,7 @@
} else { } else {
max = +max || 0; max = +max || 0;
} }
var rand = nativeRandom(); return min + floor(nativeRandom() * (max - min + 1));
return (min % 1 || max % 1)
? min + nativeMin(rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1))), max)
: min + floor(rand * (max - min + 1));
} }
/** /**
@@ -4281,8 +4307,8 @@
* // => 'hello mustache!' * // => 'hello mustache!'
* *
* // using the `imports` option to import jQuery * // using the `imports` option to import jQuery
* var list = '<% $.each(people, function(name) { %><li><%= name %></li><% }); %>'; * var list = '<% $.each(people, function(name) { %><li><%- name %></li><% }); %>';
* _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery }); * _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery } });
* // => '<li>moe</li><li>larry</li>' * // => '<li>moe</li><li>larry</li>'
* *
* // using the `sourceURL` option to specify a custom sourceURL for the template * // using the `sourceURL` option to specify a custom sourceURL for the template
@@ -4441,7 +4467,8 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Creates a `lodash` object that wraps the given `value`. * Creates a `lodash` object that wraps the given value with explicit
* method chaining enabled.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -4457,9 +4484,10 @@
* ]; * ];
* *
* var youngest = _.chain(stooges) * var youngest = _.chain(stooges)
* .sortBy(function(stooge) { return stooge.age; }) * .sortBy('age')
* .map(function(stooge) { return stooge.name + ' is ' + stooge.age; }) * .map(function(stooge) { return stooge.name + ' is ' + stooge.age; })
* .first(); * .first()
* .value();
* // => 'moe is 40' * // => 'moe is 40'
*/ */
function chain(value) { function chain(value) {
@@ -4496,7 +4524,7 @@
} }
/** /**
* Enables method chaining on the wrapper object. * Enables explicit method chaining on the wrapper object.
* *
* @name chain * @name chain
* @memberOf _ * @memberOf _
@@ -4504,11 +4532,21 @@
* @returns {*} Returns the wrapper object. * @returns {*} Returns the wrapper object.
* @example * @example
* *
* var sum = _([1, 2, 3]) * var stooges = [
* .chain() * { 'name': 'moe', 'age': 40 },
* .reduce(function(sum, num) { return sum + num; }) * { 'name': 'larry', 'age': 50 }
* .value() * ];
* // => 6` *
* // without explicit chaining
* _(stooges).first();
* // => { 'name': 'moe', 'age': 40 }
*
* // with explicit chaining
* _(stooges).chain()
* .first()
* .pick('age')
* .value()
* // => { 'age': 40 }
*/ */
function wrapperChain() { function wrapperChain() {
this.__chain__ = true; this.__chain__ = true;
@@ -4670,7 +4708,7 @@
* @memberOf _ * @memberOf _
* @type string * @type string
*/ */
lodash.VERSION = '2.0.0'; lodash.VERSION = '2.2.1';
// add "Chaining" functions to the wrapper // add "Chaining" functions to the wrapper
lodash.prototype.chain = wrapperChain; lodash.prototype.chain = wrapperChain;
@@ -4714,7 +4752,7 @@
// Expose Lo-Dash to the global object even when an AMD loader is present in // Expose Lo-Dash to the global object even when an AMD loader is present in
// case Lo-Dash was injected by a third-party script and not intended to be // case Lo-Dash was injected by a third-party script and not intended to be
// loaded as a module. The global assignment can be reverted in the Lo-Dash // loaded as a module. The global assignment can be reverted in the Lo-Dash
// module via its `noConflict()` method. // module by its `noConflict()` method.
root._ = lodash; root._ = lodash;
// define as an anonymous module so, through path mapping, it can be // define as an anonymous module so, through path mapping, it can be
@@ -4724,12 +4762,12 @@
}); });
} }
// check for `exports` after `define` in case a build optimizer adds an `exports` object // check for `exports` after `define` in case a build optimizer adds an `exports` object
else if (freeExports && !freeExports.nodeType) { else if (freeExports && freeModule) {
// in Node.js or RingoJS v0.8.0+ // in Node.js or RingoJS
if (freeModule) { if (moduleExports) {
(freeModule.exports = lodash)._ = lodash; (freeModule.exports = lodash)._ = lodash;
} }
// in Narwhal or RingoJS v0.7.0- // in Narwhal or Rhino -require
else { else {
freeExports._ = lodash; freeExports._ = lodash;
} }

View File

@@ -1,37 +1,38 @@
/** /**
* @license * @license
* Lo-Dash 2.0.0 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE * Lo-Dash 2.2.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
* Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js` * Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js`
*/ */
;(function(){function n(n,r,t){t=(t||0)-1;for(var e=n?n.length:0;++t<e;)if(n[t]===r)return t;return-1}function r(n,r){var t=n.l,e=r.l;if(t!==e){if(t>e||typeof t=="undefined")return 1;if(t<e||typeof e=="undefined")return-1}return n.m-r.m}function t(n){return"\\"+hr[n]}function e(){}function u(n){return n instanceof u?n:new o(n)}function o(n,r){this.__chain__=!!r,this.__wrapped__=n}function i(n,r,t){if(typeof n!="function")return Q;if(typeof r=="undefined")return n;switch(t){case 1:return function(t){return n.call(r,t) ;(function(){function n(n,r,t){t=(t||0)-1;for(var e=n?n.length:0;++t<e;)if(n[t]===r)return t;return-1}function r(n,r){var t=n.m,e=r.m;if(t!==e){if(t>e||typeof t=="undefined")return 1;if(t<e||typeof e=="undefined")return-1}return n.n-r.n}function t(n){return"\\"+vr[n]}function e(){}function u(n){return n instanceof u?n:new o(n)}function o(n,r){this.__chain__=!!r,this.__wrapped__=n}function i(n,r,t){if(typeof n!="function")return Q;if(typeof r=="undefined")return n;switch(t){case 1:return function(t){return n.call(r,t)
};case 2:return function(t,e){return n.call(r,t,e)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return J(n,r)}function f(n,r,t,e){e=(e||0)-1;for(var u=n?n.length:0,o=[];++e<u;){var i=n[e];i&&typeof i=="object"&&(Pr(i)||y(i))?Tr.apply(o,r?i:f(i,r,t)):t||o.push(i)}return o}function a(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(n===n&&!(n&&vr[typeof n]||r&&vr[typeof r]))return!1;if(null==n||null==r)return n===r;var o=Or.call(n),i=Or.call(r); };case 2:return function(t,e){return n.call(r,t,e)};case 3:return function(t,e,u){return n.call(r,t,e,u)};case 4:return function(t,e,u,o){return n.call(r,t,e,u,o)}}return J(n,r)}function f(n,r,t,e){e=(e||0)-1;for(var u=n?n.length:0,o=[];++e<u;){var i=n[e];if(i&&typeof i=="object"&&typeof i.length=="number"&&(Vr(i)||y(i))){r||(i=f(i,r,t));var a=-1,l=i.length,c=o.length;for(o.length+=l;++a<l;)o[c++]=i[a]}else t||o.push(i)}return o}function a(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(n===n&&!(n&&hr[typeof n]||r&&hr[typeof r]))return!1;
if(o!=i)return!1;switch(o){case fr:case ar:return+n==+r;case lr:return n!=+n?r!=+r:0==n?1/n==1/r:n==+r;case pr:case sr:return n==r+""}if(i=o==ir,!i){if(Ar.call(n,"__wrapped__")||r instanceof u)return a(n.__wrapped__||n,r.__wrapped__||r,t,e);if(o!=cr)return!1;var o=n.constructor,f=r.constructor;if(o!=f&&!(j(o)&&o instanceof o&&j(f)&&f instanceof f))return!1}for(t||(t=[]),e||(e=[]),o=t.length;o--;)if(t[o]==n)return e[o]==r;var l=!0,c=0;if(t.push(n),e.push(r),i){if(c=r.length,l=c==n.length)for(;c--&&(l=a(n[c],r[c],t,e)););return l if(null==n||null==r)return n===r;var o=Br.call(n),i=Br.call(r);if(o!=i)return!1;switch(o){case fr:case ar:return+n==+r;case lr:return n!=+n?r!=+r:0==n?1/n==1/r:n==+r;case pr:case sr:return n==r+""}if(i=o==ir,!i){if(Ar.call(n,"__wrapped__")||r instanceof u)return a(n.__wrapped__||n,r.__wrapped__||r,t,e);if(o!=cr)return!1;var o=n.constructor,f=r.constructor;if(o!=f&&!(j(o)&&o instanceof o&&j(f)&&f instanceof f))return!1}for(t||(t=[]),e||(e=[]),o=t.length;o--;)if(t[o]==n)return e[o]==r;var l=!0,c=0;
}return Lr(r,function(r,u,o){return Ar.call(o,u)?(c++,!(l=Ar.call(n,u)&&a(n[u],r,t,e))&&rr):void 0}),l&&Lr(n,function(n,r,t){return Ar.call(t,r)?!(l=-1<--c)&&rr:void 0}),l}function l(n,r,t){for(var e=-1,u=h(),o=n?n.length:0,i=[],f=t?[]:i;++e<o;){var a=n[e],l=t?t(a,e,n):a;(r?!e||f[f.length-1]!==l:0>u(f,l))&&(t&&f.push(l),i.push(a))}return i}function c(n){return function(r,t,e){var u={};t=K(t,e,3),e=-1;var o=r?r.length:0;if(typeof o=="number")for(;++e<o;){var i=r[e];n(u,i,t(i,e,r),r)}else Qr(r,function(r,e,o){n(u,r,t(r,e,o),o) if(t.push(n),e.push(r),i){if(c=r.length,l=c==n.length)for(;c--&&(l=a(n[c],r[c],t,e)););return l}return Xr(r,function(r,u,o){return Ar.call(o,u)?(c++,!(l=Ar.call(n,u)&&a(n[u],r,t,e))&&rr):void 0}),l&&Xr(n,function(n,r,t){return Ar.call(t,r)?!(l=-1<--c)&&rr:void 0}),l}function l(n,r,t){for(var e=-1,u=v(),o=n?n.length:0,i=[],f=t?[]:i;++e<o;){var a=n[e],l=t?t(a,e,n):a;(r?!e||f[f.length-1]!==l:0>u(f,l))&&(t&&f.push(l),i.push(a))}return i}function c(n){return function(r,t,e){var u={};t=K(t,e,3),e=-1;var o=r?r.length:0;
});return u}}function p(n,r,t,e,u,o){var i=1&r,f=2&r,a=4&r,l=8&r,c=16&r,v=32&r,h=n;if(!f&&!j(n))throw new TypeError;if(c&&!t.length&&(r&=-17,c=t=!1),v&&!e.length&&(r&=-33,v=e=!1),!i||f||a||v||!(Cr.fastBind||Br&&c))y=function(){var g=arguments,m=i?u:this;return(a||c||v)&&(g=Ir.call(g),c&&Sr.apply(g,t),v&&Tr.apply(g,e),a&&g.length<o)?(r|=16,p(n,l?r:-4&r,g,null,u,o)):(f&&(n=m[h]),this instanceof y?(m=s(n.prototype),g=n.apply(m,g),x(g)?g:m):n.apply(m,g))};else{if(c){var g=[u];Tr.apply(g,t)}var y=c?Br.apply(n,g):Br.call(n,u) if(typeof o=="number")for(;++e<o;){var i=r[e];n(u,i,t(i,e,r),r)}else Yr(r,function(r,e,o){n(u,r,t(r,e,o),o)});return u}}function p(n,r,t,e,u,o){var i=1&r,f=2&r,a=4&r,l=8&r,c=16&r,h=32&r,v=n;if(!f&&!j(n))throw new TypeError;if(c&&!t.length&&(r&=-17,c=t=!1),h&&!e.length&&(r&=-33,h=e=!1),!i||f||a||h||!(Ur.fastBind||Rr&&c))y=function(){var g=arguments,m=i?u:this;return(a||c||h)&&(g=zr.call(g),c&&Nr.apply(g,t),h&&Sr.apply(g,e),a&&g.length<o)?(r|=16,p(n,l?r:-4&r,g,null,u,o)):(f&&(n=m[v]),this instanceof y?(m=s(n.prototype),g=n.apply(m,g),x(g)?g:m):n.apply(m,g))
}return y}function s(n){return x(n)?Nr(n):{}}function v(n){return Gr[n]}function h(){var r=(r=u.indexOf)===U?n:r;return r}function g(n){return Hr[n]}function y(n){return n&&typeof n=="object"?Or.call(n)==or:!1}function m(n){if(!n)return n;for(var r=1,t=arguments.length;r<t;r++){var e=arguments[r];if(e)for(var u in e)n[u]=e[u]}return n}function _(n){if(!n)return n;for(var r=1,t=arguments.length;r<t;r++){var e=arguments[r];if(e)for(var u in e)"undefined"==typeof n[u]&&(n[u]=e[u])}return n}function d(n){var r=[]; };else{if(c){var g=[u];Sr.apply(g,t)}var y=c?Rr.apply(n,g):Rr.call(n,u)}return y}function s(n){return x(n)?kr(n):{}}function h(n){return Jr[n]}function v(){var r=(r=u.indexOf)===U?n:r;return r}function g(n){return Kr[n]}function y(n){return n&&typeof n=="object"&&typeof n.length=="number"&&Br.call(n)==or||!1}function m(n){if(!n)return n;for(var r=1,t=arguments.length;r<t;r++){var e=arguments[r];if(e)for(var u in e)n[u]=e[u]}return n}function _(n){if(!n)return n;for(var r=1,t=arguments.length;r<t;r++){var e=arguments[r];
return Lr(n,function(n,t){j(n)&&r.push(t)}),r.sort()}function b(n){for(var r=-1,t=Vr(n),e=t.length,u={};++r<e;){var o=t[r];u[n[o]]=o}return u}function w(n){if(!n)return!0;if(Pr(n)||A(n))return!n.length;for(var r in n)if(Ar.call(n,r))return!1;return!0}function j(n){return typeof n=="function"}function x(n){return!(!n||!vr[typeof n])}function E(n){return typeof n=="number"||Or.call(n)==lr}function A(n){return typeof n=="string"||Or.call(n)==sr}function T(n){for(var r=-1,t=Vr(n),e=t.length,u=Array(e);++r<e;)u[r]=n[t[r]]; if(e)for(var u in e)"undefined"==typeof n[u]&&(n[u]=e[u])}return n}function d(n){var r=[];return Xr(n,function(n,t){j(n)&&r.push(t)}),r.sort()}function b(n){for(var r=-1,t=Hr(n),e=t.length,u={};++r<e;){var o=t[r];u[n[o]]=o}return u}function w(n){if(!n)return!0;if(Vr(n)||T(n))return!n.length;for(var r in n)if(Ar.call(n,r))return!1;return!0}function j(n){return typeof n=="function"}function x(n){return!(!n||!hr[typeof n])}function E(n){return typeof n=="number"||Br.call(n)==lr}function T(n){return typeof n=="string"||Br.call(n)==sr
return u}function O(n,r){var t=h(),e=n?n.length:0,u=!1;return e&&typeof e=="number"?u=-1<t(n,r):Qr(n,function(n){return(u=n===r)&&rr}),u}function S(n,r,t){var e=!0;r=K(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u&&(e=!!r(n[t],t,n)););else Qr(n,function(n,t,u){return!(e=!!r(n,t,u))&&rr});return e}function B(n,r,t){var e=[];r=K(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u;){var o=n[t];r(o,t,n)&&e.push(o)}else Qr(n,function(n,t,u){r(n,t,u)&&e.push(n)});return e}function N(n,r,t){r=K(r,t,3),t=-1; }function A(n){for(var r=-1,t=Hr(n),e=t.length,u=Array(e);++r<e;)u[r]=n[t[r]];return u}function O(n,r){var t=v(),e=n?n.length:0,u=!1;return e&&typeof e=="number"?u=-1<t(n,r):Yr(n,function(n){return(u=n===r)&&rr}),u}function S(n,r,t){var e=!0;r=K(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u&&(e=!!r(n[t],t,n)););else Yr(n,function(n,t,u){return!(e=!!r(n,t,u))&&rr});return e}function B(n,r,t){var e=[];r=K(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u;){var o=n[t];
var e=n?n.length:0;if(typeof e!="number"){var u;return Qr(n,function(n,t,e){return r(n,t,e)?(u=n,rr):void 0}),u}for(;++t<e;){var o=n[t];if(r(o,t,n))return o}}function R(n,r,t){var e=-1,u=n?n.length:0;if(r=r&&typeof t=="undefined"?r:i(r,t,3),typeof u=="number")for(;++e<u&&r(n[e],e,n)!==rr;);else Qr(n,r)}function D(n,r){var t=n?n.length:0;if(typeof t=="number")for(;t--&&false!==r(n[t],t,n););else{var e=Vr(n),t=e.length;Qr(n,function(n,u,o){return u=e?e[--t]:--t,false===r(o[u],u,o)&&rr})}}function F(n,r,t){var e=-1,u=n?n.length:0; r(o,t,n)&&e.push(o)}else Yr(n,function(n,t,u){r(n,t,u)&&e.push(n)});return e}function N(n,r,t){r=K(r,t,3),t=-1;var e=n?n.length:0;if(typeof e!="number"){var u;return Yr(n,function(n,t,e){return r(n,t,e)?(u=n,rr):void 0}),u}for(;++t<e;){var o=n[t];if(r(o,t,n))return o}}function R(n,r,t){var e=-1,u=n?n.length:0;if(r=r&&typeof t=="undefined"?r:i(r,t,3),typeof u=="number")for(;++e<u&&r(n[e],e,n)!==rr;);else Yr(n,r)}function k(n,r){var t=n?n.length:0;if(typeof t=="number")for(;t--&&false!==r(n[t],t,n););else{var e=Hr(n),t=e.length;
if(r=K(r,t,3),typeof u=="number")for(var o=Array(u);++e<u;)o[e]=r(n[e],e,n);else o=[],Qr(n,function(n,t,u){o[++e]=r(n,t,u)});return o}function k(n,r,t){var e=-1/0,u=e,o=-1,i=n?n.length:0;if(r||typeof i!="number")r=K(r,t,3),R(n,function(n,t,o){t=r(n,t,o),t>e&&(e=t,u=n)});else for(;++o<i;)t=n[o],t>u&&(u=t);return u}function q(n,r){var t=-1,e=n?n.length:0;if(typeof e=="number")for(var u=Array(e);++t<e;)u[t]=n[t][r];return u||F(n,r)}function M(n,r,t,e){if(!n)return t;var u=3>arguments.length;r=i(r,e,4); Yr(n,function(n,u,o){return u=e?e[--t]:--t,false===r(o[u],u,o)&&rr})}}function F(n,r,t){var e=-1,u=n?n.length:0;if(r=K(r,t,3),typeof u=="number")for(var o=Array(u);++e<u;)o[e]=r(n[e],e,n);else o=[],Yr(n,function(n,t,u){o[++e]=r(n,t,u)});return o}function q(n,r,t){var e=-1/0,u=e,o=-1,i=n?n.length:0;if(r||typeof i!="number")r=K(r,t,3),R(n,function(n,t,o){t=r(n,t,o),t>e&&(e=t,u=n)});else for(;++o<i;)t=n[o],t>u&&(u=t);return u}function D(n,r){var t=-1,e=n?n.length:0;if(typeof e=="number")for(var u=Array(e);++t<e;)u[t]=n[t][r];
var o=-1,f=n.length;if(typeof f=="number")for(u&&(t=n[++o]);++o<f;)t=r(t,n[o],o,n);else Qr(n,function(n,e,o){t=u?(u=!1,n):r(t,n,e,o)});return t}function $(n,r,t,e){var u=3>arguments.length;return r=i(r,e,4),D(n,function(n,e,o){t=u?(u=!1,n):r(t,n,e,o)}),t}function I(n){var r=-1,t=n?n.length:0,e=Array(typeof t=="number"?t:0);return R(n,function(n){var t=Y(++r);e[r]=e[t],e[t]=n}),e}function W(n,r,t){var e;r=K(r,t,3),t=-1;var u=n?n.length:0;if(typeof u=="number")for(;++t<u&&!(e=r(n[t],t,n)););else Qr(n,function(n,t,u){return(e=r(n,t,u))&&rr return u||F(n,r)}function M(n,r,t,e){if(!n)return t;var u=3>arguments.length;r=i(r,e,4);var o=-1,f=n.length;if(typeof f=="number")for(u&&(t=n[++o]);++o<f;)t=r(t,n[o],o,n);else Yr(n,function(n,e,o){t=u?(u=!1,n):r(t,n,e,o)});return t}function $(n,r,t,e){var u=3>arguments.length;return r=i(r,e,4),k(n,function(n,e,o){t=u?(u=!1,n):r(t,n,e,o)}),t}function I(n){var r=-1,t=n?n.length:0,e=Array(typeof t=="number"?t:0);return R(n,function(n){var t=Y(++r);e[r]=e[t],e[t]=n}),e}function W(n,r,t){var e;r=K(r,t,3),t=-1;
});return!!e}function z(n,r,t){return t&&w(r)?Z:(t?N:B)(n,r)}function C(n){for(var r=-1,t=h(),e=n.length,u=f(arguments,!0,!0,1),o=[];++r<e;){var i=n[r];0>t(u,i)&&o.push(i)}return o}function P(n,r,t){var e=0,u=n?n.length:0;if(typeof r!="number"&&null!=r){var o=-1;for(r=K(r,t,3);++o<u&&r(n[o],o,n);)e++}else if(e=r,null==e||t)return n?n[0]:Z;return Ir.call(n,0,Mr(qr(0,e),u))}function U(r,t,e){if(typeof e=="number"){var u=r?r.length:0;e=0>e?qr(0,u+e):e||0}else if(e)return e=G(r,t),r[e]===t?e:-1;return n(r,t,e) var u=n?n.length:0;if(typeof u=="number")for(;++t<u&&!(e=r(n[t],t,n)););else Yr(n,function(n,t,u){return(e=r(n,t,u))&&rr});return!!e}function z(n,r,t){return t&&w(r)?Z:(t?N:B)(n,r)}function C(n){for(var r=-1,t=v(),e=n.length,u=f(arguments,!0,!0,1),o=[];++r<e;){var i=n[r];0>t(u,i)&&o.push(i)}return o}function P(n,r,t){var e=0,u=n?n.length:0;if(typeof r!="number"&&null!=r){var o=-1;for(r=K(r,t,3);++o<u&&r(n[o],o,n);)e++}else if(e=r,null==e||t)return n?n[0]:Z;return zr.call(n,0,Ir($r(0,e),u))}function U(r,t,e){if(typeof e=="number"){var u=r?r.length:0;
}function V(n,r,t){if(typeof r!="number"&&null!=r){var e=0,u=-1,o=n?n.length:0;for(r=K(r,t,3);++u<o&&r(n[u],u,n);)e++}else e=null==r||t?1:qr(0,r);return Ir.call(n,e)}function G(n,r,t,e){var u=0,o=n?n.length:u;for(t=t?K(t,e,1):Q,r=t(r);u<o;)e=u+o>>>1,t(n[e])<r?u=e+1:o=e;return u}function H(n,r,t,e){return typeof r!="boolean"&&null!=r&&(t=(e=t)&&e[r]===n?null:r,r=!1),null!=t&&(t=K(t,e,3)),l(n,r,t)}function J(n,r){return 2<arguments.length?p(n,17,Ir.call(arguments,2),null,r):p(n,1,null,null,r)}function K(n,r,t){var e=typeof n; e=0>e?$r(0,u+e):e||0}else if(e)return e=G(r,t),r[e]===t?e:-1;return n(r,t,e)}function V(n,r,t){if(typeof r!="number"&&null!=r){var e=0,u=-1,o=n?n.length:0;for(r=K(r,t,3);++u<o&&r(n[u],u,n);)e++}else e=null==r||t?1:$r(0,r);return zr.call(n,e)}function G(n,r,t,e){var u=0,o=n?n.length:u;for(t=t?K(t,e,1):Q,r=t(r);u<o;)e=u+o>>>1,t(n[e])<r?u=e+1:o=e;return u}function H(n,r,t,e){return typeof r!="boolean"&&null!=r&&(t=(e=t)&&e[r]===n?null:r,r=!1),null!=t&&(t=K(t,e,3)),l(n,r,t)}function J(n,r){return 2<arguments.length?p(n,17,zr.call(arguments,2),null,r):p(n,1,null,null,r)
if(null==n||"function"==e)return i(n,r,t);if("object"!=e)return function(r){return r[n]};var u=Vr(n);return function(r){for(var t=u.length,e=!1;t--&&(e=r[u[t]]===n[u[t]]););return e}}function L(n,r,t){var e,u,o,i,f,a,l,c=0,p=!1,s=!0;if(!j(n))throw new TypeError;if(r=qr(0,r)||0,true===t)var v=!0,s=!1;else x(t)&&(v=t.leading,p="maxWait"in t&&(qr(r,t.maxWait)||0),s="trailing"in t?t.trailing:s);var h=function(){var t=r-(new Date-i);0<t?a=setTimeout(h,t):(u&&clearTimeout(u),t=l,u=a=l=Z,t&&(c=+new Date,o=n.apply(f,e))) }function K(n,r,t){var e=typeof n;if(null==n||"function"==e)return i(n,r,t);if("object"!=e)return function(r){return r[n]};var u=Hr(n);return function(r){for(var t=u.length,e=!1;t--&&(e=r[u[t]]===n[u[t]]););return e}}function L(n,r,t){var e,u,o,i,f,a,l,c=0,p=!1,s=!0;if(!j(n))throw new TypeError;if(r=$r(0,r)||0,true===t)var h=!0,s=!1;else x(t)&&(h=t.leading,p="maxWait"in t&&($r(r,t.maxWait)||0),s="trailing"in t?t.trailing:s);var v=function(){var t=r-(Or()-i);0<t?a=setTimeout(v,t):(u&&clearTimeout(u),t=l,u=a=l=Z,t&&(c=Or(),o=n.apply(f,e)))
},g=function(){a&&clearTimeout(a),u=a=l=Z,(s||p!==r)&&(c=+new Date,o=n.apply(f,e))};return function(){if(e=arguments,i=+new Date,f=this,l=s&&(a||!v),false===p)var t=v&&!a;else{u||v||(c=i);var y=p-(i-c);0<y?u||(u=setTimeout(g,y)):(u&&(u=clearTimeout(u)),c=i,o=n.apply(f,e))}return a||r===p||(a=setTimeout(h,r)),t&&(o=n.apply(f,e)),o}}function Q(n){return n}function X(n){R(d(n),function(r){var t=u[r]=n[r];u.prototype[r]=function(){var n=[this.__wrapped__];return Tr.apply(n,arguments),n=t.apply(u,n),this.__chain__&&(n=new o(n),n.__chain__=!0),n },g=function(){a&&clearTimeout(a),u=a=l=Z,(s||p!==r)&&(c=Or(),o=n.apply(f,e))};return function(){if(e=arguments,i=Or(),f=this,l=s&&(a||!h),false===p)var t=h&&!a;else{u||h||(c=i);var y=p-(i-c);0<y?u||(u=setTimeout(g,y)):(u&&(u=clearTimeout(u)),c=i,o=n.apply(f,e))}return a||r===p||(a=setTimeout(v,r)),t&&(o=n.apply(f,e)),o}}function Q(n){return n}function X(n){R(d(n),function(r){var t=u[r]=n[r];u.prototype[r]=function(){var n=[this.__wrapped__];return Sr.apply(n,arguments),n=t.apply(u,n),this.__chain__?new o(n,!0):n
}})}function Y(n,r){null==n&&null==r&&(r=1),n=+n||0,null==r?(r=n,n=0):r=+r||0;var t=$r();return n%1||r%1?n+Mr(t*(r-n+parseFloat("1e-"+((t+"").length-1))),r):n+Er(t*(r-n+1))}var Z,nr=0,rr={},tr=+new Date+"",er=/($^)/,ur=/['\n\r\t\u2028\u2029\\]/g,or="[object Arguments]",ir="[object Array]",fr="[object Boolean]",ar="[object Date]",lr="[object Number]",cr="[object Object]",pr="[object RegExp]",sr="[object String]",vr={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},hr={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},gr=vr[typeof window]&&window||this,yr=vr[typeof exports]&&exports,mr=vr[typeof module]&&module&&module.exports==yr&&module,_r=vr[typeof global]&&global; }})}function Y(n,r){return null==n&&null==r&&(r=1),n=+n||0,null==r?(r=n,n=0):r=+r||0,n+Tr(Wr()*(r-n+1))}var Z,nr=0,rr={},tr=+new Date+"",er=/($^)/,ur=/['\n\r\t\u2028\u2029\\]/g,or="[object Arguments]",ir="[object Array]",fr="[object Boolean]",ar="[object Date]",lr="[object Number]",cr="[object Object]",pr="[object RegExp]",sr="[object String]",hr={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},vr={"\\":"\\","'":"'","\n":"n","\r":"r","\t":"t","\u2028":"u2028","\u2029":"u2029"},gr=hr[typeof window]&&window||this,yr=hr[typeof exports]&&exports&&!exports.nodeType&&exports,mr=hr[typeof module]&&module&&!module.nodeType&&module,_r=mr&&mr.exports===yr&&yr,dr=hr[typeof global]&&global;
!_r||_r.global!==_r&&_r.window!==_r||(gr=_r);var dr=[],br=Object.prototype,wr=gr._,jr=RegExp("^"+(br.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),xr=Math.ceil,Er=Math.floor,Ar=br.hasOwnProperty,Tr=dr.push,Or=br.toString,Sr=dr.unshift,Br=jr.test(Br=Or.bind)&&Br,Nr=jr.test(Nr=Object.create)&&Nr,Rr=jr.test(Rr=Array.isArray)&&Rr,Dr=gr.isFinite,Fr=gr.isNaN,kr=jr.test(kr=Object.keys)&&kr,qr=Math.max,Mr=Math.min,$r=Math.random,Ir=dr.slice,Wr=jr.test(gr.attachEvent),zr=Br&&!/\n|true/.test(Br+Wr); !dr||dr.global!==dr&&dr.window!==dr||(gr=dr);var br=[],wr=Object.prototype,jr=gr._,xr=RegExp("^"+(wr.valueOf+"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&").replace(/valueOf|for [^\]]+/g,".+?")+"$"),Er=Math.ceil,Tr=Math.floor,Ar=wr.hasOwnProperty,Or=xr.test(Or=Date.now)&&Or||function(){return+new Date},Sr=br.push,Br=wr.toString,Nr=br.unshift,Rr=xr.test(Rr=Br.bind)&&Rr,kr=xr.test(kr=Object.create)&&kr,Fr=xr.test(Fr=Array.isArray)&&Fr,qr=gr.isFinite,Dr=gr.isNaN,Mr=xr.test(Mr=Object.keys)&&Mr,$r=Math.max,Ir=Math.min,Wr=Math.random,zr=br.slice,Cr=xr.test(gr.attachEvent),Pr=Rr&&!/\n|true/.test(Rr+Cr);
o.prototype=u.prototype;var Cr={};!function(){var n={0:1,length:1};Cr.fastBind=Br&&!zr,Cr.spliceObjects=(dr.splice.call(n,0,1),!n[0])}(1),u.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},Nr||(s=function(n){if(x(n)){e.prototype=n;var r=new e;e.prototype=null}return r||{}}),y(arguments)||(y=function(n){return n&&typeof n=="object"?Ar.call(n,"callee"):!1});var Pr=Rr||function(n){return n&&typeof n=="object"?Or.call(n)==ir:!1},Ur=function(n){var r,t=[]; o.prototype=u.prototype;var Ur={};!function(){var n={0:1,length:1};Ur.fastBind=Rr&&!Pr,Ur.spliceObjects=(br.splice.call(n,0,1),!n[0])}(1),u.templateSettings={escape:/<%-([\s\S]+?)%>/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,variable:""},kr||(s=function(n){if(x(n)){e.prototype=n;var r=new e;e.prototype=null}return r||{}}),y(arguments)||(y=function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&Ar.call(n,"callee")||!1});var Vr=Fr||function(n){return n&&typeof n=="object"&&typeof n.length=="number"&&Br.call(n)==ir||!1
if(!n||!vr[typeof n])return t;for(r in n)Ar.call(n,r)&&t.push(r);return t},Vr=kr?function(n){return x(n)?kr(n):[]}:Ur,Gr={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;"},Hr=b(Gr),Jr=RegExp("("+Vr(Hr).join("|")+")","g"),Kr=RegExp("["+Vr(Gr).join("")+"]","g"),Lr=function(n,r){var t;if(!n||!vr[typeof n])return n;for(t in n)if(r(n[t],t,n)===rr)break;return n},Qr=function(n,r){var t;if(!n||!vr[typeof n])return n;for(t in n)if(Ar.call(n,t)&&r(n[t],t,n)===rr)break;return n};j(/x/)&&(j=function(n){return typeof n=="function"&&"[object Function]"==Or.call(n) },Gr=function(n){var r,t=[];if(!n||!hr[typeof n])return t;for(r in n)Ar.call(n,r)&&t.push(r);return t},Hr=Mr?function(n){return x(n)?Mr(n):[]}:Gr,Jr={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;"},Kr=b(Jr),Lr=RegExp("("+Hr(Kr).join("|")+")","g"),Qr=RegExp("["+Hr(Jr).join("")+"]","g"),Xr=function(n,r){var t;if(!n||!hr[typeof n])return n;for(t in n)if(r(n[t],t,n)===rr)break;return n},Yr=function(n,r){var t;if(!n||!hr[typeof n])return n;for(t in n)if(Ar.call(n,t)&&r(n[t],t,n)===rr)break;
});var Xr=c(function(n,r,t){Ar.call(n,t)?n[t]++:n[t]=1}),Yr=c(function(n,r,t){(Ar.call(n,t)?n[t]:n[t]=[]).push(r)}),Zr=c(function(n,r,t){n[t]=r});u.after=function(n,r){if(!j(r))throw new TypeError;return function(){return 1>--n?r.apply(this,arguments):void 0}},u.bind=J,u.bindAll=function(n){for(var r=1<arguments.length?f(arguments,!0,!1,1):d(n),t=-1,e=r.length;++t<e;){var u=r[t];n[u]=p(n[u],1,null,null,n)}return n},u.chain=function(n){return n=new o(n),n.__chain__=!0,n},u.compact=function(n){for(var r=-1,t=n?n.length:0,e=[];++r<t;){var u=n[r]; return n};j(/x/)&&(j=function(n){return typeof n=="function"&&"[object Function]"==Br.call(n)});var Zr=c(function(n,r,t){Ar.call(n,t)?n[t]++:n[t]=1}),nt=c(function(n,r,t){(Ar.call(n,t)?n[t]:n[t]=[]).push(r)}),rt=c(function(n,r,t){n[t]=r});u.after=function(n,r){if(!j(r))throw new TypeError;return function(){return 1>--n?r.apply(this,arguments):void 0}},u.bind=J,u.bindAll=function(n){for(var r=1<arguments.length?f(arguments,!0,!1,1):d(n),t=-1,e=r.length;++t<e;){var u=r[t];n[u]=p(n[u],1,null,null,n)}return n
u&&e.push(u)}return e},u.compose=function(){for(var n=arguments,r=n.length||1;r--;)if(!j(n[r]))throw new TypeError;return function(){for(var r=arguments,t=n.length;t--;)r=[n[t].apply(this,r)];return r[0]}},u.countBy=Xr,u.debounce=L,u.defaults=_,u.defer=function(n){if(!j(n))throw new TypeError;var r=Ir.call(arguments,1);return setTimeout(function(){n.apply(Z,r)},1)},u.delay=function(n,r){if(!j(n))throw new TypeError;var t=Ir.call(arguments,2);return setTimeout(function(){n.apply(Z,t)},r)},u.difference=C,u.filter=B,u.flatten=function(n,r){return f(n,r) },u.chain=function(n){return n=new o(n),n.__chain__=!0,n},u.compact=function(n){for(var r=-1,t=n?n.length:0,e=[];++r<t;){var u=n[r];u&&e.push(u)}return e},u.compose=function(){for(var n=arguments,r=n.length;r--;)if(!j(n[r]))throw new TypeError;return function(){for(var r=arguments,t=n.length;t--;)r=[n[t].apply(this,r)];return r[0]}},u.countBy=Zr,u.debounce=L,u.defaults=_,u.defer=function(n){if(!j(n))throw new TypeError;var r=zr.call(arguments,1);return setTimeout(function(){n.apply(Z,r)},1)},u.delay=function(n,r){if(!j(n))throw new TypeError;
},u.forEach=R,u.functions=d,u.groupBy=Yr,u.indexBy=Zr,u.initial=function(n,r,t){var e=0,u=n?n.length:0;if(typeof r!="number"&&null!=r){var o=u;for(r=K(r,t,3);o--&&r(n[o],o,n);)e++}else e=null==r||t?1:r||e;return Ir.call(n,0,Mr(qr(0,u-e),u))},u.intersection=function(n){var r=arguments,t=r.length,e=-1,u=h(),o=n?n.length:0,i=[];n:for(;++e<o;){var f=n[e];if(0>u(i,f)){for(var a=t;--a;)if(0>u(r[a],f))continue n;i.push(f)}}return i},u.invert=b,u.invoke=function(n,r){var t=Ir.call(arguments,2),e=-1,u=typeof r=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0); var t=zr.call(arguments,2);return setTimeout(function(){n.apply(Z,t)},r)},u.difference=C,u.filter=B,u.flatten=function(n,r){return f(n,r)},u.forEach=R,u.functions=d,u.groupBy=nt,u.indexBy=rt,u.initial=function(n,r,t){var e=0,u=n?n.length:0;if(typeof r!="number"&&null!=r){var o=u;for(r=K(r,t,3);o--&&r(n[o],o,n);)e++}else e=null==r||t?1:r||e;return zr.call(n,0,Ir($r(0,u-e),u))},u.intersection=function(n){var r=arguments,t=r.length,e=-1,u=v(),o=n?n.length:0,i=[];n:for(;++e<o;){var f=n[e];if(0>u(i,f)){for(var a=t;--a;)if(0>u(r[a],f))continue n;
return R(n,function(n){i[++e]=(u?r:n[r]).apply(n,t)}),i},u.keys=Vr,u.map=F,u.max=k,u.memoize=function(n,r){var t={};return function(){var e=r?r.apply(this,arguments):tr+arguments[0];return Ar.call(t,e)?t[e]:t[e]=n.apply(this,arguments)}},u.min=function(n,r,t){var e=1/0,u=e,o=-1,i=n?n.length:0;if(r||typeof i!="number")r=K(r,t,3),R(n,function(n,t,o){t=r(n,t,o),t<e&&(e=t,u=n)});else for(;++o<i;)t=n[o],t<u&&(u=t);return u},u.omit=function(n){var r=h(),t=f(arguments,!0,!1,1),e={};return Lr(n,function(n,u){0>r(t,u)&&(e[u]=n) i.push(f)}}return i},u.invert=b,u.invoke=function(n,r){var t=zr.call(arguments,2),e=-1,u=typeof r=="function",o=n?n.length:0,i=Array(typeof o=="number"?o:0);return R(n,function(n){i[++e]=(u?r:n[r]).apply(n,t)}),i},u.keys=Hr,u.map=F,u.max=q,u.memoize=function(n,r){var t={};return function(){var e=r?r.apply(this,arguments):tr+arguments[0];return Ar.call(t,e)?t[e]:t[e]=n.apply(this,arguments)}},u.min=function(n,r,t){var e=1/0,u=e,o=-1,i=n?n.length:0;if(r||typeof i!="number")r=K(r,t,3),R(n,function(n,t,o){t=r(n,t,o),t<e&&(e=t,u=n)
}),e},u.once=function(n){var r,t;if(!j(n))throw new TypeError;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},u.pairs=function(n){for(var r=-1,t=Vr(n),e=t.length,u=Array(e);++r<e;){var o=t[r];u[r]=[o,n[o]]}return u},u.partial=function(n){return p(n,16,Ir.call(arguments,1))},u.pick=function(n){for(var r=-1,t=f(arguments,!0,!1,1),e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u},u.pluck=q,u.range=function(n,r,t){n=+n||0,t=+t||1,null==r&&(r=n,n=0);var e=-1;r=qr(0,xr((r-n)/t)); });else for(;++o<i;)t=n[o],t<u&&(u=t);return u},u.omit=function(n){var r=v(),t=f(arguments,!0,!1,1),e={};return Xr(n,function(n,u){0>r(t,u)&&(e[u]=n)}),e},u.once=function(n){var r,t;if(!j(n))throw new TypeError;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},u.pairs=function(n){for(var r=-1,t=Hr(n),e=t.length,u=Array(e);++r<e;){var o=t[r];u[r]=[o,n[o]]}return u},u.partial=function(n){return p(n,16,zr.call(arguments,1))},u.pick=function(n){for(var r=-1,t=f(arguments,!0,!1,1),e=t.length,u={};++r<e;){var o=t[r];
for(var u=Array(r);++e<r;)u[e]=n,n+=t;return u},u.reject=function(n,r,t){return r=K(r,t,3),B(n,function(n,t,e){return!r(n,t,e)})},u.rest=V,u.shuffle=I,u.sortBy=function(n,t,e){var u=-1,o=n?n.length:0,i=Array(typeof o=="number"?o:0);for(t=K(t,e,3),R(n,function(n,r,e){i[++u]={l:t(n,r,e),m:u,n:n}}),o=i.length,i.sort(r);o--;)i[o]=i[o].n;return i},u.tap=function(n,r){return r(n),n},u.throttle=function(n,r,t){var e=!0,u=!0;if(!j(n))throw new TypeError;return false===t?e=!1:x(t)&&(e="leading"in t?t.leading:e,u="trailing"in t?t.trailing:u),t={},t.leading=e,t.maxWait=r,t.trailing=u,L(n,r,t) o in n&&(u[o]=n[o])}return u},u.pluck=D,u.range=function(n,r,t){n=+n||0,t=+t||1,null==r&&(r=n,n=0);var e=-1;r=$r(0,Er((r-n)/t));for(var u=Array(r);++e<r;)u[e]=n,n+=t;return u},u.reject=function(n,r,t){return r=K(r,t,3),B(n,function(n,t,e){return!r(n,t,e)})},u.rest=V,u.shuffle=I,u.sortBy=function(n,t,e){var u=-1,o=n?n.length:0,i=Array(typeof o=="number"?o:0);for(t=K(t,e,3),R(n,function(n,r,e){i[++u]={m:t(n,r,e),n:u,o:n}}),o=i.length,i.sort(r);o--;)i[o]=i[o].o;return i},u.tap=function(n,r){return r(n),n
},u.times=function(n,r,t){n=-1<(n=+n)?n:0;var e=-1,u=Array(n);for(r=i(r,t,1);++e<n;)u[e]=r(e);return u},u.toArray=function(n){return Pr(n)?Ir.call(n):n&&typeof n.length=="number"?F(n):T(n)},u.union=function(){return l(f(arguments,!0,!0))},u.uniq=H,u.values=T,u.where=z,u.without=function(n){return C(n,Ir.call(arguments,1))},u.wrap=function(n,r){if(!j(r))throw new TypeError;return function(){var t=[n];return Tr.apply(t,arguments),r.apply(this,t)}},u.zip=function(){for(var n=-1,r=k(q(arguments,"length")),t=Array(0>r?0:r);++n<r;)t[n]=q(arguments,n); },u.throttle=function(n,r,t){var e=!0,u=!0;if(!j(n))throw new TypeError;return false===t?e=!1:x(t)&&(e="leading"in t?t.leading:e,u="trailing"in t?t.trailing:u),t={},t.leading=e,t.maxWait=r,t.trailing=u,L(n,r,t)},u.times=function(n,r,t){n=-1<(n=+n)?n:0;var e=-1,u=Array(n);for(r=i(r,t,1);++e<n;)u[e]=r(e);return u},u.toArray=function(n){return Vr(n)?zr.call(n):n&&typeof n.length=="number"?F(n):A(n)},u.union=function(){return l(f(arguments,!0,!0))},u.uniq=H,u.values=A,u.where=z,u.without=function(n){return C(n,zr.call(arguments,1))
return t},u.collect=F,u.drop=V,u.each=R,u.extend=m,u.methods=d,u.object=function(n,r){for(var t=-1,e=n?n.length:0,u={};++t<e;){var o=n[t];r?u[o]=r[t]:o&&(u[o[0]]=o[1])}return u},u.select=B,u.tail=V,u.unique=H,u.clone=function(n){return x(n)?Pr(n)?Ir.call(n):m({},n):n},u.contains=O,u.escape=function(n){return null==n?"":(n+"").replace(Kr,v)},u.every=S,u.find=N,u.has=function(n,r){return n?Ar.call(n,r):!1},u.identity=Q,u.indexOf=U,u.isArguments=y,u.isArray=Pr,u.isBoolean=function(n){return true===n||false===n||Or.call(n)==fr },u.wrap=function(n,r){if(!j(r))throw new TypeError;return function(){var t=[n];return Sr.apply(t,arguments),r.apply(this,t)}},u.zip=function(){for(var n=-1,r=q(D(arguments,"length")),t=Array(0>r?0:r);++n<r;)t[n]=D(arguments,n);return t},u.collect=F,u.drop=V,u.each=R,u.extend=m,u.methods=d,u.object=function(n,r){for(var t=-1,e=n?n.length:0,u={};++t<e;){var o=n[t];r?u[o]=r[t]:o&&(u[o[0]]=o[1])}return u},u.select=B,u.tail=V,u.unique=H,u.clone=function(n){return x(n)?Vr(n)?zr.call(n):m({},n):n},u.contains=O,u.escape=function(n){return null==n?"":(n+"").replace(Qr,h)
},u.isDate=function(n){return n?typeof n=="object"&&Or.call(n)==ar:!1},u.isElement=function(n){return n?1===n.nodeType:!1},u.isEmpty=w,u.isEqual=function(n,r){return a(n,r)},u.isFinite=function(n){return Dr(n)&&!Fr(parseFloat(n))},u.isFunction=j,u.isNaN=function(n){return E(n)&&n!=+n},u.isNull=function(n){return null===n},u.isNumber=E,u.isObject=x,u.isRegExp=function(n){return n&&vr[typeof n]?Or.call(n)==pr:!1},u.isString=A,u.isUndefined=function(n){return typeof n=="undefined"},u.lastIndexOf=function(n,r,t){var e=n?n.length:0; },u.every=S,u.find=N,u.has=function(n,r){return n?Ar.call(n,r):!1},u.identity=Q,u.indexOf=U,u.isArguments=y,u.isArray=Vr,u.isBoolean=function(n){return true===n||false===n||Br.call(n)==fr},u.isDate=function(n){return n?typeof n=="object"&&Br.call(n)==ar:!1},u.isElement=function(n){return n?1===n.nodeType:!1},u.isEmpty=w,u.isEqual=function(n,r){return a(n,r)},u.isFinite=function(n){return qr(n)&&!Dr(parseFloat(n))},u.isFunction=j,u.isNaN=function(n){return E(n)&&n!=+n},u.isNull=function(n){return null===n
for(typeof t=="number"&&(e=(0>t?qr(0,e+t):Mr(t,e-1))+1);e--;)if(n[e]===r)return e;return-1},u.mixin=X,u.noConflict=function(){return gr._=wr,this},u.random=Y,u.reduce=M,u.reduceRight=$,u.result=function(n,r){if(n){var t=n[r];return j(t)?n[r]():t}},u.size=function(n){var r=n?n.length:0;return typeof r=="number"?r:Vr(n).length},u.some=W,u.sortedIndex=G,u.template=function(n,r,e){var o=u,i=o.templateSettings;n||(n=""),e=_({},e,i);var f=0,a="__p+='",i=e.variable;n.replace(RegExp((e.escape||er).source+"|"+(e.interpolate||er).source+"|"+(e.evaluate||er).source+"|$","g"),function(r,e,u,o,i){return a+=n.slice(f,i).replace(ur,t),e&&(a+="'+_.escape("+e+")+'"),o&&(a+="';"+o+";__p+='"),u&&(a+="'+((__t=("+u+"))==null?'':__t)+'"),f=i+r.length,r },u.isNumber=E,u.isObject=x,u.isRegExp=function(n){return n&&hr[typeof n]?Br.call(n)==pr:!1},u.isString=T,u.isUndefined=function(n){return typeof n=="undefined"},u.lastIndexOf=function(n,r,t){var e=n?n.length:0;for(typeof t=="number"&&(e=(0>t?$r(0,e+t):Ir(t,e-1))+1);e--;)if(n[e]===r)return e;return-1},u.mixin=X,u.noConflict=function(){return gr._=jr,this},u.random=Y,u.reduce=M,u.reduceRight=$,u.result=function(n,r){if(n){var t=n[r];return j(t)?n[r]():t}},u.size=function(n){var r=n?n.length:0;return typeof r=="number"?r:Hr(n).length
}),a+="';\n",i||(i="obj",a="with("+i+"||{}){"+a+"}"),a="function("+i+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+a+"return __p}";try{var l=Function("_","return "+a)(o)}catch(c){throw c.source=a,c}return r?l(r):(l.source=a,l)},u.unescape=function(n){return null==n?"":(n+"").replace(Jr,g)},u.uniqueId=function(n){var r=++nr+"";return n?n+r:r},u.all=S,u.any=W,u.detect=N,u.findWhere=function(n,r){return z(n,r,!0)},u.foldl=M,u.foldr=$,u.include=O,u.inject=M,u.first=P,u.last=function(n,r,t){var e=0,u=n?n.length:0; },u.some=W,u.sortedIndex=G,u.template=function(n,r,e){var o=u,i=o.templateSettings;n||(n=""),e=_({},e,i);var f=0,a="__p+='",i=e.variable;n.replace(RegExp((e.escape||er).source+"|"+(e.interpolate||er).source+"|"+(e.evaluate||er).source+"|$","g"),function(r,e,u,o,i){return a+=n.slice(f,i).replace(ur,t),e&&(a+="'+_.escape("+e+")+'"),o&&(a+="';"+o+";__p+='"),u&&(a+="'+((__t=("+u+"))==null?'':__t)+'"),f=i+r.length,r}),a+="';\n",i||(i="obj",a="with("+i+"||{}){"+a+"}"),a="function("+i+"){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}"+a+"return __p}";
if(typeof r!="number"&&null!=r){var o=u;for(r=K(r,t,3);o--&&r(n[o],o,n);)e++}else if(e=r,null==e||t)return n?n[u-1]:Z;return Ir.call(n,qr(0,u-e))},u.sample=function(n,r,t){var e=n?n.length:0;return typeof e!="number"&&(n=T(n)),null==r||t?n?n[Y(e-1)]:Z:(n=I(n),n.length=Mr(qr(0,r),n.length),n)},u.take=P,u.head=P,X(u),u.VERSION="2.0.0",u.prototype.chain=function(){return this.__chain__=!0,this},u.prototype.value=function(){return this.__wrapped__},R("pop push reverse shift sort splice unshift".split(" "),function(n){var r=dr[n]; try{var l=Function("_","return "+a)(o)}catch(c){throw c.source=a,c}return r?l(r):(l.source=a,l)},u.unescape=function(n){return null==n?"":(n+"").replace(Lr,g)},u.uniqueId=function(n){var r=++nr+"";return n?n+r:r},u.all=S,u.any=W,u.detect=N,u.findWhere=function(n,r){return z(n,r,!0)},u.foldl=M,u.foldr=$,u.include=O,u.inject=M,u.first=P,u.last=function(n,r,t){var e=0,u=n?n.length:0;if(typeof r!="number"&&null!=r){var o=u;for(r=K(r,t,3);o--&&r(n[o],o,n);)e++}else if(e=r,null==e||t)return n?n[u-1]:Z;
u.prototype[n]=function(){var n=this.__wrapped__;return r.apply(n,arguments),Cr.spliceObjects||0!==n.length||delete n[0],this}}),R(["concat","join","slice"],function(n){var r=dr[n];u.prototype[n]=function(){var n=r.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new o(n),n.__chain__=!0),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(gr._=u, define(function(){return u})):yr&&!yr.nodeType?mr?(mr.exports=u)._=u:yr._=u:gr._=u}).call(this); return zr.call(n,$r(0,u-e))},u.sample=function(n,r,t){var e=n?n.length:0;return typeof e!="number"&&(n=A(n)),null==r||t?n?n[Y(e-1)]:Z:(n=I(n),n.length=Ir($r(0,r),n.length),n)},u.take=P,u.head=P,X(u),u.VERSION="2.2.1",u.prototype.chain=function(){return this.__chain__=!0,this},u.prototype.value=function(){return this.__wrapped__},R("pop push reverse shift sort splice unshift".split(" "),function(n){var r=br[n];u.prototype[n]=function(){var n=this.__wrapped__;return r.apply(n,arguments),Ur.spliceObjects||0!==n.length||delete n[0],this
}}),R(["concat","join","slice"],function(n){var r=br[n];u.prototype[n]=function(){var n=r.apply(this.__wrapped__,arguments);return this.__chain__&&(n=new o(n),n.__chain__=!0),n}}),typeof define=="function"&&typeof define.amd=="object"&&define.amd?(gr._=u, define(function(){return u})):yr&&mr?_r?(mr.exports=u)._=u:yr._=u:gr._=u}).call(this);

File diff suppressed because it is too large Load Diff

View File

@@ -1,36 +1,38 @@
<?php <?php
// cleanup requested filepath // cleanup requested file path
$file = isset($_GET['f']) ? $_GET['f'] : 'lodash'; $filePath = isset($_GET['f']) ? $_GET['f'] : 'lodash';
$file = preg_replace('#(\.*[\/])+#', '', $file); $filePath = preg_replace('#(\.*[\/])+#', '', $filePath);
$file .= preg_match('/\.[a-z]+$/', $file) ? '' : '.js'; $filePath .= preg_match('/\.[a-z]+$/', $filePath) ? '' : '.js';
// output filename // output filename
if (isset($_GET['o'])) { if (isset($_GET['o'])) {
$output = $_GET['o']; $outputName = $_GET['o'];
} else if (isset($_SERVER['argv'][1])) { } else if (isset($_SERVER['argv'][1])) {
$output = $_SERVER['argv'][1]; $outputName = $_SERVER['argv'][1];
} else { } else {
$output = basename($file); $outputName = basename($filePath);
} }
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
require('../vendor/docdown/docdown.php'); require('../vendor/docdown/docdown.php');
// get package version
$version = json_decode(file_get_contents('../package.json'))->version;
// generate Markdown // generate Markdown
$markdown = docdown(array( $markdown = docdown(array(
'path' => '../' . $file, 'path' => '../' . $filePath,
'title' => 'Lo-Dash <span>v2.0.0</span>', 'title' => 'Lo-Dash <span>v' . $version . '</span>',
'toc' => 'categories', 'toc' => 'categories',
'url' => 'https://github.com/lodash/lodash/blob/2.0.0/lodash.js' 'url' => 'https://github.com/lodash/lodash/blob/' . $version . '/lodash.js'
)); ));
// save to a .md file // save to a `.md` file
file_put_contents($output . '.md', $markdown); file_put_contents($outputName . '.md', $markdown);
// print // print
header('Content-Type: text/plain;charset=utf-8'); header('Content-Type: text/plain;charset=utf-8');
echo $markdown . PHP_EOL; echo $markdown . PHP_EOL;
?> ?>

400
lodash.js
View File

@@ -1,6 +1,6 @@
/** /**
* @license * @license
* Lo-Dash 2.0.0 <http://lodash.com/> * Lo-Dash 2.2.1 <http://lodash.com/>
* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/> * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE> * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
@@ -69,7 +69,7 @@
var reNoMatch = /($^)/; var reNoMatch = /($^)/;
/** Used to detect functions containing a `this` reference */ /** Used to detect functions containing a `this` reference */
var reThis = (reThis = /\bthis\b/) && reThis.test(runInContext) && reThis; var reThis = /\bthis\b/;
/** Used to match unescaped characters in compiled string literals */ /** Used to match unescaped characters in compiled string literals */
var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g; var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
@@ -110,6 +110,36 @@
cloneableClasses[numberClass] = cloneableClasses[objectClass] = cloneableClasses[numberClass] = cloneableClasses[objectClass] =
cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true; cloneableClasses[regexpClass] = cloneableClasses[stringClass] = true;
/** Used as an internal `_.debounce` options object */
var debounceOptions = {
'leading': false,
'maxWait': 0,
'trailing': false
};
/** Used as the property descriptor for `__bindData__` */
var descriptor = {
'configurable': false,
'enumerable': false,
'value': null,
'writable': false
};
/** Used as the data object for `iteratorTemplate` */
var iteratorData = {
'args': '',
'array': null,
'bottom': '',
'firstArg': '',
'init': '',
'keys': null,
'loop': '',
'shadowedProps': null,
'support': null,
'top': '',
'useHas': false
};
/** Used to determine if values are of the language type Object */ /** Used to determine if values are of the language type Object */
var objectTypes = { var objectTypes = {
'boolean': false, 'boolean': false,
@@ -135,10 +165,13 @@
var root = (objectTypes[typeof window] && window) || this; var root = (objectTypes[typeof window] && window) || this;
/** Detect free variable `exports` */ /** Detect free variable `exports` */
var freeExports = objectTypes[typeof exports] && exports; var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
/** Detect free variable `module` */ /** Detect free variable `module` */
var freeModule = objectTypes[typeof module] && module && module.exports == freeExports && module; var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
/** Detect the popular CommonJS extension `module.exports` */
var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
/** Detect free variable `global` from Node.js or Browserified code and use it as `root` */ /** Detect free variable `global` from Node.js or Browserified code and use it as `root` */
var freeGlobal = objectTypes[typeof global] && global; var freeGlobal = objectTypes[typeof global] && global;
@@ -198,7 +231,7 @@
} }
/** /**
* Adds a given `value` to the corresponding cache object. * Adds a given value to the corresponding cache object.
* *
* @private * @private
* @param {*} value The value to add to the cache. * @param {*} value The value to add to the cache.
@@ -277,9 +310,11 @@
var index = -1, var index = -1,
length = array.length, length = array.length,
first = array[0], first = array[0],
mid = array[(length / 2) | 0],
last = array[length - 1]; last = array[length - 1];
if (first && typeof first == 'object' && last && typeof last == 'object') { if (first && typeof first == 'object' &&
mid && typeof mid == 'object' && last && typeof last == 'object') {
return false; return false;
} }
var cache = getObject(); var cache = getObject();
@@ -326,35 +361,19 @@
*/ */
function getObject() { function getObject() {
return objectPool.pop() || { return objectPool.pop() || {
'args': '',
'array': null, 'array': null,
'bottom': '',
'cache': null, 'cache': null,
'configurable': false,
'criteria': null, 'criteria': null,
'enumerable': false,
'false': false, 'false': false,
'firstArg': '',
'index': 0, 'index': 0,
'init': '',
'keys': null,
'leading': false,
'loop': '',
'maxWait': 0,
'null': false, 'null': false,
'number': null, 'number': null,
'object': null, 'object': null,
'push': null, 'push': null,
'shadowedProps': null,
'string': null, 'string': null,
'support': null,
'top': '',
'trailing': false,
'true': false, 'true': false,
'undefined': false, 'undefined': false,
'useHas': false, 'value': null
'value': null,
'writable': false
}; };
} }
@@ -441,7 +460,7 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Create a new `lodash` function using the given `context` object. * Create a new `lodash` function using the given context object.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -567,8 +586,8 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Creates a `lodash` object which wraps the given value to enable method * Creates a `lodash` object which wraps the given value to enable intuitive
* chaining. * method chaining.
* *
* In addition to Lo-Dash methods, wrappers also have the following `Array` methods: * In addition to Lo-Dash methods, wrappers also have the following `Array` methods:
* `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`, * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`, `splice`,
@@ -602,6 +621,8 @@
* The wrapper functions `first` and `last` return wrapped values when `n` is * The wrapper functions `first` and `last` return wrapped values when `n` is
* provided, otherwise they return unwrapped values. * provided, otherwise they return unwrapped values.
* *
* Explicit chaining can be enabled by using the `_.chain` method.
*
* @name _ * @name _
* @constructor * @constructor
* @category Chaining * @category Chaining
@@ -668,14 +689,6 @@
for (var prop in new ctor) { props.push(prop); } for (var prop in new ctor) { props.push(prop); }
for (prop in arguments) { } for (prop in arguments) { }
/**
* Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5).
*
* @memberOf _.support
* @type boolean
*/
support.argsObject = arguments.constructor == Object && !(arguments instanceof Array);
/** /**
* Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9). * Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9).
* *
@@ -684,6 +697,14 @@
*/ */
support.argsClass = toString.call(arguments) == argsClass; support.argsClass = toString.call(arguments) == argsClass;
/**
* Detect if `arguments` objects are `Object` objects (all but Narwhal and Opera < 10.5).
*
* @memberOf _.support
* @type boolean
*/
support.argsObject = arguments.constructor == Object && !(arguments instanceof Array);
/** /**
* Detect if `name` or `message` properties of `Error.prototype` are * Detect if `name` or `message` properties of `Error.prototype` are
* enumerable by default. (IE < 9, Safari < 5.1) * enumerable by default. (IE < 9, Safari < 5.1)
@@ -714,6 +735,14 @@
*/ */
support.fastBind = nativeBind && !isV8; support.fastBind = nativeBind && !isV8;
/**
* Detect if functions can be decompiled by `Function#toString`
* (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).
*
* @memberOf _.support
* @type boolean
*/
support.funcDecomp = !reNative.test(context.WinRTError) && reThis.test(runInContext);
/** /**
* Detect if `Function#name` is supported (all but IE). * Detect if `Function#name` is supported (all but IE).
@@ -723,14 +752,6 @@
*/ */
support.funcNames = typeof Function.name == 'string'; support.funcNames = typeof Function.name == 'string';
/**
* Detect if own properties are iterated after inherited properties (all but IE < 9).
*
* @memberOf _.support
* @type boolean
*/
support.ownLast = props[0] != 'x';
/** /**
* Detect if `arguments` object indexes are non-enumerable * Detect if `arguments` object indexes are non-enumerable
* (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1). * (Firefox < 4, IE < 9, PhantomJS, Safari < 5.1).
@@ -751,6 +772,14 @@
*/ */
support.nonEnumShadows = !/valueOf/.test(props); support.nonEnumShadows = !/valueOf/.test(props);
/**
* Detect if own properties are iterated after inherited properties (all but IE < 9).
*
* @memberOf _.support
* @type boolean
*/
support.ownLast = props[0] != 'x';
/** /**
* Detect if `Array#shift` and `Array#splice` augment array-like objects correctly. * Detect if `Array#shift` and `Array#splice` augment array-like objects correctly.
* *
@@ -977,64 +1006,62 @@
* *
* @private * @private
* @param {*} value The value to clone. * @param {*} value The value to clone.
* @param {boolean} [deep=false] A flag to indicate a deep clone. * @param {boolean} [deep=false] Specify a deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {Array} [stackA=[]] Tracks traversed source objects. * @param {Array} [stackA=[]] Tracks traversed source objects.
* @param {Array} [stackB=[]] Associates clones with source counterparts. * @param {Array} [stackB=[]] Associates clones with source counterparts.
* @returns {*} Returns the cloned `value`. * @returns {*} Returns the cloned value.
*/ */
function baseClone(value, deep, callback, stackA, stackB) { function baseClone(value, deep, callback, stackA, stackB) {
var result = value;
if (callback) { if (callback) {
result = callback(result); var result = callback(value);
if (typeof result != 'undefined') { if (typeof result != 'undefined') {
return result; return result;
} }
result = value;
} }
// inspect [[Class]] // inspect [[Class]]
var isObj = isObject(result); var isObj = isObject(value);
if (isObj) { if (isObj) {
var className = toString.call(result); var className = toString.call(value);
if (!cloneableClasses[className] || (!support.nodeClass && isNode(result))) { if (!cloneableClasses[className] || (!support.nodeClass && isNode(value))) {
return result; return value;
} }
var isArr = isArray(result); var ctor = ctorByClass[className];
} switch (className) {
// shallow clone case boolClass:
if (!isObj || !deep) { case dateClass:
return isObj return new ctor(+value);
? (isArr ? slice(result) : assign({}, result))
: result;
}
var ctor = ctorByClass[className];
switch (className) {
case boolClass:
case dateClass:
return new ctor(+result);
case numberClass: case numberClass:
case stringClass: case stringClass:
return new ctor(result); return new ctor(value);
case regexpClass: case regexpClass:
return ctor(result.source, reFlags.exec(result)); result = ctor(value.source, reFlags.exec(value));
} result.lastIndex = value.lastIndex;
// check for circular references and return corresponding clone return result;
var initedStack = !stackA;
stackA || (stackA = getArray());
stackB || (stackB = getArray());
var length = stackA.length;
while (length--) {
if (stackA[length] == value) {
return stackB[length];
} }
} else {
return value;
} }
// init cloned object var isArr = isArray(value);
result = isArr ? ctor(result.length) : {}; if (deep) {
// check for circular references and return corresponding clone
var initedStack = !stackA;
stackA || (stackA = getArray());
stackB || (stackB = getArray());
var length = stackA.length;
while (length--) {
if (stackA[length] == value) {
return stackB[length];
}
}
result = isArr ? ctor(value.length) : {};
}
else {
result = isArr ? slice(value) : assign({}, value);
}
// add array properties assigned by `RegExp#exec` // add array properties assigned by `RegExp#exec`
if (isArr) { if (isArr) {
if (hasOwnProperty.call(value, 'index')) { if (hasOwnProperty.call(value, 'index')) {
@@ -1044,6 +1071,10 @@
result.input = value.input; result.input = value.input;
} }
} }
// exit for shallow clone
if (!deep) {
return result;
}
// add the source value to the stack of traversed objects // add the source value to the stack of traversed objects
// and associate it with its clone // and associate it with its clone
stackA.push(value); stackA.push(value);
@@ -1087,7 +1118,7 @@
} }
if (support.funcNames || !bindData) { if (support.funcNames || !bindData) {
// checks if `func` references the `this` keyword and stores the result // checks if `func` references the `this` keyword and stores the result
bindData = !reThis || reThis.test(source); bindData = !support.funcDecomp || reThis.test(source);
setBindData(func, bindData); setBindData(func, bindData);
} }
} }
@@ -1130,9 +1161,21 @@
while (++index < length) { while (++index < length) {
var value = array[index]; var value = array[index];
// recursively flatten arrays (susceptible to call stack limits)
if (value && typeof value == 'object' && (isArray(value) || isArguments(value))) { if (value && typeof value == 'object' && typeof value.length == 'number'
push.apply(result, isShallow ? value : baseFlatten(value, isShallow, isArgArrays)); && (isArray(value) || isArguments(value))) {
// recursively flatten arrays (susceptible to call stack limits)
if (!isShallow) {
value = baseFlatten(value, isShallow, isArgArrays);
}
var valIndex = -1,
valLength = value.length,
resIndex = result.length;
result.length += valLength;
while (++valIndex < valLength) {
result[resIndex++] = value[valIndex];
}
} else if (!isArgArrays) { } else if (!isArgArrays) {
result.push(value); result.push(value);
} }
@@ -1586,40 +1629,36 @@
* @returns {Function} Returns the compiled function. * @returns {Function} Returns the compiled function.
*/ */
function createIterator() { function createIterator() {
var data = getObject();
// data properties // data properties
data.shadowedProps = shadowedProps; iteratorData.shadowedProps = shadowedProps;
data.support = support; iteratorData.support = support;
// iterator options // iterator options
data.array = data.bottom = data.loop = data.top = ''; iteratorData.array = iteratorData.bottom = iteratorData.loop = iteratorData.top = '';
data.init = 'iterable'; iteratorData.init = 'iterable';
data.useHas = true; iteratorData.useHas = true;
// merge options into a template data object // merge options into a template data object
for (var object, index = 0; object = arguments[index]; index++) { for (var object, index = 0; object = arguments[index]; index++) {
for (var key in object) { for (var key in object) {
data[key] = object[key]; iteratorData[key] = object[key];
} }
} }
var args = data.args; var args = iteratorData.args;
data.firstArg = /^[^,]+/.exec(args)[0]; iteratorData.firstArg = /^[^,]+/.exec(args)[0];
// create the function factory // create the function factory
var factory = Function( var factory = Function(
'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' + 'baseCreateCallback, errorClass, errorProto, hasOwnProperty, ' +
'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' + 'indicatorObject, isArguments, isArray, isString, keys, objectProto, ' +
'objectTypes, nonEnumProps, stringClass, stringProto, toString', 'objectTypes, nonEnumProps, stringClass, stringProto, toString',
'return function(' + args + ') {\n' + iteratorTemplate(data) + '\n}' 'return function(' + args + ') {\n' + iteratorTemplate(iteratorData) + '\n}'
); );
releaseObject(data);
// return the compiled function // return the compiled function
return factory( return factory(
baseCreateCallback, errorClass, errorProto, hasOwnProperty, baseCreateCallback, errorClass, errorProto, hasOwnProperty,
indicatorObject, isArguments, isArray, isString, data.keys, objectProto, indicatorObject, isArguments, isArray, isString, iteratorData.keys, objectProto,
objectTypes, nonEnumProps, stringClass, stringProto, toString objectTypes, nonEnumProps, stringClass, stringProto, toString
); );
} }
@@ -1678,10 +1717,8 @@
* @param {*} value The value to set. * @param {*} value The value to set.
*/ */
var setBindData = !defineProperty ? noop : function(func, value) { var setBindData = !defineProperty ? noop : function(func, value) {
var descriptor = getObject();
descriptor.value = value; descriptor.value = value;
defineProperty(func, '__bindData__', descriptor); defineProperty(func, '__bindData__', descriptor);
releaseObject(descriptor);
}; };
/** /**
@@ -1754,12 +1791,14 @@
* // => false * // => false
*/ */
function isArguments(value) { function isArguments(value) {
return (value && typeof value == 'object') ? toString.call(value) == argsClass : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == argsClass || false;
} }
// fallback for browsers that can't detect `arguments` objects by [[Class]] // fallback for browsers that can't detect `arguments` objects by [[Class]]
if (!support.argsClass) { if (!support.argsClass) {
isArguments = function(value) { isArguments = function(value) {
return (value && typeof value == 'object') ? hasOwnProperty.call(value, 'callee') : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
hasOwnProperty.call(value, 'callee') || false;
}; };
} }
@@ -1781,7 +1820,8 @@
* // => true * // => true
*/ */
var isArray = nativeIsArray || function(value) { var isArray = nativeIsArray || function(value) {
return (value && typeof value == 'object') ? toString.call(value) == arrayClass : false; return value && typeof value == 'object' && typeof value.length == 'number' &&
toString.call(value) == arrayClass || false;
}; };
/** /**
@@ -1949,10 +1989,10 @@
* @memberOf _ * @memberOf _
* @category Objects * @category Objects
* @param {*} value The value to clone. * @param {*} value The value to clone.
* @param {boolean} [deep=false] A flag to indicate a deep clone. * @param {boolean} [deep=false] Specify a deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {*} [thisArg] The `this` binding of `callback`. * @param {*} [thisArg] The `this` binding of `callback`.
* @returns {*} Returns the cloned `value`. * @returns {*} Returns the cloned value.
* @example * @example
* *
* var stooges = [ * var stooges = [
@@ -2006,7 +2046,7 @@
* @param {*} value The value to deep clone. * @param {*} value The value to deep clone.
* @param {Function} [callback] The function to customize cloning values. * @param {Function} [callback] The function to customize cloning values.
* @param {*} [thisArg] The `this` binding of `callback`. * @param {*} [thisArg] The `this` binding of `callback`.
* @returns {*} Returns the deep cloned `value`. * @returns {*} Returns the deep cloned value.
* @example * @example
* *
* var stooges = [ * var stooges = [
@@ -3583,10 +3623,11 @@
} }
/** /**
* Retrieves the maximum value of an array. If a callback is provided it * Retrieves the maximum value of a collection. If the collection is empty or
* will be executed for each value in the array to generate the criterion by * falsey `-Infinity` is returned. If a callback is provided it will be executed
* which the value is ranked. The callback is bound to `thisArg` and invoked * for each value in the collection to generate the criterion by which the value
* with three arguments; (value, index, collection). * is ranked. The callback is bound to `thisArg` and invoked with three
* arguments; (value, index, collection).
* *
* If a property name is provided for `callback` the created "_.pluck" style * If a property name is provided for `callback` the created "_.pluck" style
* callback will return the property value of the given element. * callback will return the property value of the given element.
@@ -3652,10 +3693,11 @@
} }
/** /**
* Retrieves the minimum value of an array. If a callback is provided it * Retrieves the minimum value of a collection. If the collection is empty or
* will be executed for each value in the array to generate the criterion by * falsey `Infinity` is returned. If a callback is provided it will be executed
* which the value is ranked. The callback is bound to `thisArg` and invoked * for each value in the collection to generate the criterion by which the value
* with three arguments; (value, index, collection). * is ranked. The callback is bound to `thisArg` and invoked with three
* arguments; (value, index, collection).
* *
* If a property name is provided for `callback` the created "_.pluck" style * If a property name is provided for `callback` the created "_.pluck" style
* callback will return the property value of the given element. * callback will return the property value of the given element.
@@ -4111,16 +4153,16 @@
* @category Collections * @category Collections
* @param {Array|Object|string} collection The collection to iterate over. * @param {Array|Object|string} collection The collection to iterate over.
* @param {Object} properties The object of property values to filter by. * @param {Object} properties The object of property values to filter by.
* @returns {Array} Returns a new array of elements that have the given `properties`. * @returns {Array} Returns a new array of elements that have the given properties.
* @example * @example
* *
* var stooges = [ * var stooges = [
* { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }, * { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] },
* { 'name': 'moe', 'age': '40', 'quotes': ['Spread out!', 'You knucklehead!'] } * { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }
* ]; * ];
* *
* _.where(stooges, { 'age': 40 }); * _.where(stooges, { 'age': 40 });
* // => [{ 'name': 'moe', 'age': '40', 'quotes': ['Spread out!', 'You knucklehead!'] }] * // => [{ 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }]
* *
* _.where(stooges, { 'quotes': ['Poifect!'] }); * _.where(stooges, { 'quotes': ['Poifect!'] });
* // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }] * // => [{ 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }]
@@ -5272,7 +5314,7 @@
*/ */
function compose() { function compose() {
var funcs = arguments, var funcs = arguments,
length = funcs.length || 1; length = funcs.length;
while (length--) { while (length--) {
if (!isFunction(funcs[length])) { if (!isFunction(funcs[length])) {
@@ -5455,7 +5497,7 @@
trailing = 'trailing' in options ? options.trailing : trailing; trailing = 'trailing' in options ? options.trailing : trailing;
} }
var delayed = function() { var delayed = function() {
var remaining = wait - (new Date - stamp); var remaining = wait - (now() - stamp);
if (remaining <= 0) { if (remaining <= 0) {
if (maxTimeoutId) { if (maxTimeoutId) {
clearTimeout(maxTimeoutId); clearTimeout(maxTimeoutId);
@@ -5463,7 +5505,7 @@
var isCalled = trailingCall; var isCalled = trailingCall;
maxTimeoutId = timeoutId = trailingCall = undefined; maxTimeoutId = timeoutId = trailingCall = undefined;
if (isCalled) { if (isCalled) {
lastCalled = +new Date; lastCalled = now();
result = func.apply(thisArg, args); result = func.apply(thisArg, args);
} }
} else { } else {
@@ -5477,14 +5519,14 @@
} }
maxTimeoutId = timeoutId = trailingCall = undefined; maxTimeoutId = timeoutId = trailingCall = undefined;
if (trailing || (maxWait !== wait)) { if (trailing || (maxWait !== wait)) {
lastCalled = +new Date; lastCalled = now();
result = func.apply(thisArg, args); result = func.apply(thisArg, args);
} }
}; };
return function() { return function() {
args = arguments; args = arguments;
stamp = +new Date; stamp = now();
thisArg = this; thisArg = this;
trailingCall = trailing && (timeoutId || !leading); trailingCall = trailing && (timeoutId || !leading);
@@ -5539,7 +5581,7 @@
return setTimeout(function() { func.apply(undefined, args); }, 1); return setTimeout(function() { func.apply(undefined, args); }, 1);
} }
// use `setImmediate` if available in Node.js // use `setImmediate` if available in Node.js
if (isV8 && freeModule && typeof setImmediate == 'function') { if (isV8 && moduleExports && typeof setImmediate == 'function') {
defer = function(func) { defer = function(func) {
if (!isFunction(func)) { if (!isFunction(func)) {
throw new TypeError; throw new TypeError;
@@ -5757,13 +5799,11 @@
leading = 'leading' in options ? options.leading : leading; leading = 'leading' in options ? options.leading : leading;
trailing = 'trailing' in options ? options.trailing : trailing; trailing = 'trailing' in options ? options.trailing : trailing;
} }
options = getObject(); debounceOptions.leading = leading;
options.leading = leading; debounceOptions.maxWait = wait;
options.maxWait = wait; debounceOptions.trailing = trailing;
options.trailing = trailing;
var result = debounce(func, wait, options); var result = debounce(func, wait, debounceOptions);
releaseObject(options);
return result; return result;
} }
@@ -5878,9 +5918,12 @@
push.apply(args, arguments); push.apply(args, arguments);
var result = func.apply(object, args); var result = func.apply(object, args);
return (value && typeof value == 'object' && value === result) if (value && typeof value == 'object' && value === result) {
? this return this;
: new ctor(result); }
result = new ctor(result);
result.__chain__ = this.__chain__;
return result;
}; };
} }
}); });
@@ -5904,7 +5947,7 @@
} }
/** /**
* Converts the given `value` into an integer of the specified `radix`. * Converts the given value into an integer of the specified radix.
* If `radix` is `undefined` or `0` a `radix` of `10` is used unless the * If `radix` is `undefined` or `0` a `radix` of `10` is used unless the
* `value` is a hexadecimal, in which case a `radix` of `16` is used. * `value` is a hexadecimal, in which case a `radix` of `16` is used.
* *
@@ -5930,36 +5973,57 @@
/** /**
* Produces a random number between `min` and `max` (inclusive). If only one * Produces a random number between `min` and `max` (inclusive). If only one
* argument is provided a number between `0` and the given number will be * argument is provided a number between `0` and the given number will be
* returned. * returned. If `floating` is truey or either `min` or `max` are floats a
* floating-point number will be returned instead of an integer.
* *
* @static * @static
* @memberOf _ * @memberOf _
* @category Utilities * @category Utilities
* @param {number} [min=0] The minimum possible value. * @param {number} [min=0] The minimum possible value.
* @param {number} [max=1] The maximum possible value. * @param {number} [max=1] The maximum possible value.
* @param {boolean} [floating=false] Specify returning a floating-point number.
* @returns {number} Returns a random number. * @returns {number} Returns a random number.
* @example * @example
* *
* _.random(0, 5); * _.random(0, 5);
* // => a number between 0 and 5 * // => an integer between 0 and 5
* *
* _.random(5); * _.random(5);
* // => also a number between 0 and 5 * // => also an integer between 0 and 5
*
* _.random(5, true);
* // => a floating-point number between 0 and 5
*
* _.random(1.2, 5.2);
* // => a floating-point number between 1.2 and 5.2
*/ */
function random(min, max) { function random(min, max, floating) {
if (min == null && max == null) { var noMin = min == null,
noMax = max == null;
if (floating == null) {
if (typeof min == 'boolean' && noMax) {
floating = min;
min = 1;
}
else if (!noMax && typeof max == 'boolean') {
floating = max;
noMax = true;
}
}
if (noMin && noMax) {
max = 1; max = 1;
} }
min = +min || 0; min = +min || 0;
if (max == null) { if (noMax) {
max = min; max = min;
min = 0; min = 0;
} else { } else {
max = +max || 0; max = +max || 0;
} }
var rand = nativeRandom(); var rand = nativeRandom();
return (min % 1 || max % 1) return (floating || min % 1 || max % 1)
? min + nativeMin(rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1))), max) ? nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand +'').length - 1)))), max)
: min + floor(rand * (max - min + 1)); : min + floor(rand * (max - min + 1));
} }
@@ -6057,8 +6121,8 @@
* // => 'hello mustache!' * // => 'hello mustache!'
* *
* // using the `imports` option to import jQuery * // using the `imports` option to import jQuery
* var list = '<% $.each(people, function(name) { %><li><%= name %></li><% }); %>'; * var list = '<% $.each(people, function(name) { %><li><%- name %></li><% }); %>';
* _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery }); * _.template(list, { 'people': ['moe', 'larry'] }, { 'imports': { '$': jQuery } });
* // => '<li>moe</li><li>larry</li>' * // => '<li>moe</li><li>larry</li>'
* *
* // using the `sourceURL` option to specify a custom sourceURL for the template * // using the `sourceURL` option to specify a custom sourceURL for the template
@@ -6176,7 +6240,7 @@
if (data) { if (data) {
return result(data); return result(data);
} }
// provide the compiled function's source via its `toString` method, in // provide the compiled function's source by its `toString` method, in
// supported environments, or the `source` property as a convenience for // supported environments, or the `source` property as a convenience for
// inlining compiled templates during the build process // inlining compiled templates during the build process
result.source = source; result.source = source;
@@ -6261,7 +6325,8 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
/** /**
* Creates a `lodash` object that wraps the given `value`. * Creates a `lodash` object that wraps the given value with explicit
* method chaining enabled.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -6277,9 +6342,10 @@
* ]; * ];
* *
* var youngest = _.chain(stooges) * var youngest = _.chain(stooges)
* .sortBy(function(stooge) { return stooge.age; }) * .sortBy('age')
* .map(function(stooge) { return stooge.name + ' is ' + stooge.age; }) * .map(function(stooge) { return stooge.name + ' is ' + stooge.age; })
* .first(); * .first()
* .value();
* // => 'moe is 40' * // => 'moe is 40'
*/ */
function chain(value) { function chain(value) {
@@ -6316,7 +6382,7 @@
} }
/** /**
* Enables method chaining on the wrapper object. * Enables explicit method chaining on the wrapper object.
* *
* @name chain * @name chain
* @memberOf _ * @memberOf _
@@ -6324,11 +6390,21 @@
* @returns {*} Returns the wrapper object. * @returns {*} Returns the wrapper object.
* @example * @example
* *
* var sum = _([1, 2, 3]) * var stooges = [
* .chain() * { 'name': 'moe', 'age': 40 },
* .reduce(function(sum, num) { return sum + num; }) * { 'name': 'larry', 'age': 50 }
* .value() * ];
* // => 6` *
* // without explicit chaining
* _(stooges).first();
* // => { 'name': 'moe', 'age': 40 }
*
* // with explicit chaining
* _(stooges).chain()
* .first()
* .pick('age')
* .value()
* // => { 'age': 40 }
*/ */
function wrapperChain() { function wrapperChain() {
this.__chain__ = true; this.__chain__ = true;
@@ -6562,7 +6638,7 @@
* @memberOf _ * @memberOf _
* @type string * @type string
*/ */
lodash.VERSION = '2.0.0'; lodash.VERSION = '2.2.1';
// add "Chaining" functions to the wrapper // add "Chaining" functions to the wrapper
lodash.prototype.chain = wrapperChain; lodash.prototype.chain = wrapperChain;
@@ -6601,7 +6677,7 @@
}); });
// avoid array-like object bugs with `Array#shift` and `Array#splice` // avoid array-like object bugs with `Array#shift` and `Array#splice`
// in Firefox < 10 and IE < 9 // in IE < 9, Firefox < 10, Narwhal, and RingoJS
if (!support.spliceObjects) { if (!support.spliceObjects) {
baseEach(['pop', 'shift', 'splice'], function(methodName) { baseEach(['pop', 'shift', 'splice'], function(methodName) {
var func = arrayRef[methodName], var func = arrayRef[methodName],
@@ -6640,7 +6716,7 @@
// Expose Lo-Dash to the global object even when an AMD loader is present in // Expose Lo-Dash to the global object even when an AMD loader is present in
// case Lo-Dash was injected by a third-party script and not intended to be // case Lo-Dash was injected by a third-party script and not intended to be
// loaded as a module. The global assignment can be reverted in the Lo-Dash // loaded as a module. The global assignment can be reverted in the Lo-Dash
// module via its `noConflict()` method. // module by its `noConflict()` method.
root._ = _; root._ = _;
// define as an anonymous module so, through path mapping, it can be // define as an anonymous module so, through path mapping, it can be
@@ -6650,12 +6726,12 @@
}); });
} }
// check for `exports` after `define` in case a build optimizer adds an `exports` object // check for `exports` after `define` in case a build optimizer adds an `exports` object
else if (freeExports && !freeExports.nodeType) { else if (freeExports && freeModule) {
// in Node.js or RingoJS v0.8.0+ // in Node.js or RingoJS
if (freeModule) { if (moduleExports) {
(freeModule.exports = _)._ = _; (freeModule.exports = _)._ = _;
} }
// in Narwhal or RingoJS v0.7.0- // in Narwhal or Rhino -require
else { else {
freeExports._ = _; freeExports._ = _;
} }

View File

@@ -1,11 +1,11 @@
{ {
"name": "lodash", "name": "lodash",
"version": "2.0.0", "version": "2.2.1",
"description": "A utility library delivering consistency, customization, performance, and extras.", "description": "A utility library delivering consistency, customization, performance, & extras.",
"homepage": "http://lodash.com/", "homepage": "http://lodash.com/",
"license": "MIT", "license": "MIT",
"main": "dist/lodash.js", "main": "dist/lodash.js",
"keywords": ["amd", "browser", "client", "customize", "functional", "performance", "server", "speed", "util"], "keywords": ["amd", "browser", "client", "customize", "functional", "server", "util"],
"author": "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)", "author": "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
"contributors": [ "contributors": [
"John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)", "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
@@ -27,7 +27,16 @@
"dist/lodash.underscore.min.js" "dist/lodash.underscore.min.js"
], ],
"jam": { "jam": {
"main": "dist/lodash.compat.js" "main": "dist/lodash.compat.js",
"include": [
"LICENSE.txt",
"dist/lodash.js",
"dist/lodash.min.js",
"dist/lodash.compat.js",
"dist/lodash.compat.min.js",
"dist/lodash.underscore.js",
"dist/lodash.underscore.min.js"
]
}, },
"volo": { "volo": {
"type": "directory", "type": "directory",

View File

@@ -5,10 +5,10 @@
var basePath = '../'; var basePath = '../';
/** The Lo-Dash build to load */ /** The Lo-Dash build to load */
var build = (/build=([^&]+)/.exec(location.search) || [])[1]; var build = (build = /build=([^&]+)/.exec(location.search)) && decodeURIComponent(build[1]);
/** The other library to load */ /** The other library to load */
var other = (/other=([^&]+)/.exec(location.search) || [])[1]; var other = (other = /other=([^&]+)/.exec(location.search)) && decodeURIComponent(other[1]);
/** The `ui` object */ /** The `ui` object */
var ui = {}; var ui = {};
@@ -51,7 +51,7 @@
case 'lodash-custom-dev': result = 'lodash.custom.js'; break; case 'lodash-custom-dev': result = 'lodash.custom.js'; break;
case 'lodash-custom': result = 'lodash.custom.min.js'; break; case 'lodash-custom': result = 'lodash.custom.min.js'; break;
case 'lodash-modern': case 'lodash-modern':
case undefined: result = 'dist/lodash.min.js'; break; case null: result = 'dist/lodash.min.js'; break;
default: return build; default: return build;
} }
return basePath + result; return basePath + result;
@@ -70,7 +70,7 @@
case 'lodash-custom': result = 'lodash.custom.min.js'; break; case 'lodash-custom': result = 'lodash.custom.min.js'; break;
case 'underscore-dev': result = 'vendor/underscore/underscore.js'; break; case 'underscore-dev': result = 'vendor/underscore/underscore.js'; break;
case 'underscore': case 'underscore':
case undefined: result = 'vendor/underscore/underscore-min.js'; break; case null: result = 'vendor/underscore/underscore-min.js'; break;
default: return other; default: return other;
} }
return basePath + result; return basePath + result;
@@ -141,7 +141,7 @@
case 'lodash-custom-dev': return 5; case 'lodash-custom-dev': return 5;
case 'lodash-custom': return 6; case 'lodash-custom': return 6;
case 'lodash-modern': case 'lodash-modern':
case undefined: return 3; case null: return 3;
} }
return -1; return -1;
}()); }());
@@ -157,7 +157,7 @@
case 'lodash-custom-dev': return 7; case 'lodash-custom-dev': return 7;
case 'lodash-custom': return 8; case 'lodash-custom': return 8;
case 'underscore': case 'underscore':
case undefined: return 1; case null: return 1;
} }
return -1; return -1;
}()); }());

View File

@@ -270,6 +270,7 @@
numbers = Array(limit),\ numbers = Array(limit),\
fourNumbers = [5, 25, 10, 30],\ fourNumbers = [5, 25, 10, 30],\
nestedNumbers = [1, [2], [3, [[4]]]],\ nestedNumbers = [1, [2], [3, [[4]]]],\
nestedObjects = [{}, [{}], [{}, [[{}]]]],\
twoNumbers = [12, 23];\ twoNumbers = [12, 23];\
\ \
for (index = 0; index < limit; index++) {\ for (index = 0; index < limit; index++) {\
@@ -1025,6 +1026,16 @@
) )
); );
suites.push(
Benchmark.Suite('`_.flatten` with objects')
.add(buildName, '\
lodash.flatten(nestedObjects)'
)
.add(otherName, '\
_.flatten(nestedObjects)'
)
);
suites.push( suites.push(
Benchmark.Suite('`_.flatten` with `shallow`') Benchmark.Suite('`_.flatten` with `shallow`')
.add(buildName, '\ .add(buildName, '\

View File

@@ -5,10 +5,10 @@
var basePath = '../'; var basePath = '../';
/** The Lo-Dash build to load */ /** The Lo-Dash build to load */
var build = (/build=([^&]+)/.exec(location.search) || [])[1]; var build = (build = /build=([^&]+)/.exec(location.search)) && decodeURIComponent(build[1]);
/** The module loader to use */ /** The module loader to use */
var loader = (/loader=([^&]+)/.exec(location.search) || [])[1]; var loader = (loader = /loader=([^&]+)/.exec(location.search)) && decodeURIComponent(loader[1]);
/** The `ui` object */ /** The `ui` object */
var ui = {}; var ui = {};
@@ -49,12 +49,11 @@
case 'lodash-modern': result = 'dist/lodash.min.js'; break; case 'lodash-modern': result = 'dist/lodash.min.js'; break;
case 'lodash-legacy': result = 'dist/lodash.legacy.min.js'; break; case 'lodash-legacy': result = 'dist/lodash.legacy.min.js'; break;
case 'lodash-mobile': result = 'dist/lodash.mobile.min.js'; break; case 'lodash-mobile': result = 'dist/lodash.mobile.min.js'; break;
case 'lodash-modularize': result = 'modularize/lodash.js'; break;
case 'lodash-underscore': result = 'dist/lodash.underscore.min.js'; break; case 'lodash-underscore': result = 'dist/lodash.underscore.min.js'; break;
case 'lodash-custom-dev': result = 'lodash.custom.js'; break; case 'lodash-custom-dev': result = 'lodash.custom.js'; break;
case 'lodash-custom': result = 'lodash.custom.min.js'; break; case 'lodash-custom': result = 'lodash.custom.min.js'; break;
case 'lodash-compat-dev': case 'lodash-compat-dev':
case undefined: result = 'lodash.js'; break; case null: result = 'lodash.js'; break;
default: return build; default: return build;
} }
return basePath + result; return basePath + result;
@@ -67,14 +66,14 @@
case 'curl': result = 'vendor/curl/dist/curl-kitchen-sink/curl.js'; break; case 'curl': result = 'vendor/curl/dist/curl-kitchen-sink/curl.js'; break;
case 'dojo': result = 'vendor/dojo/dojo.js'; break; case 'dojo': result = 'vendor/dojo/dojo.js'; break;
case 'requirejs': case 'requirejs':
case undefined: result = 'vendor/requirejs/require.js'; break; case null: result = 'vendor/requirejs/require.js'; break;
default: return loader; default: return loader;
} }
return basePath + result; return basePath + result;
}()); }());
// used to indicate testing a modularized build // used to indicate testing a modularized build
ui.isModularize = /\b(?:lodash-(?:amd|node)|modularize)\b/.test([location.pathname, location.search, ui.buildPath]); ui.isModularize = /\b(?:commonjs|(index|main)\.js|lodash-(?:amd|node)|modularize|npm)\b/.test([location.pathname, location.search, ui.buildPath]);
// initialize controls // initialize controls
addListener(window, 'load', function() { addListener(window, 'load', function() {
@@ -108,12 +107,11 @@
case 'lodash-modern': return 3; case 'lodash-modern': return 3;
case 'lodash-legacy': return 4; case 'lodash-legacy': return 4;
case 'lodash-mobile': return 5; case 'lodash-mobile': return 5;
case 'lodash-modularize': return 6; case 'lodash-underscore': return 6;
case 'lodash-underscore': return 7; case 'lodash-custom-dev': return 7;
case 'lodash-custom-dev': return 8; case 'lodash-custom': return 8;
case 'lodash-custom': return 9;
case 'lodash-compat-dev': case 'lodash-compat-dev':
case undefined: return 0; case null: return 0;
} }
return -1; return -1;
}()); }());
@@ -124,7 +122,7 @@
case 'curl': return 1; case 'curl': return 1;
case 'dojo': return 2; case 'dojo': return 2;
case 'requirejs': case 'requirejs':
case undefined: return 3; case null: return 3;
} }
return -1; return -1;
}()); }());
@@ -148,7 +146,6 @@
'<option value="lodash-modern">Lo-Dash (modern production)</option>' + '<option value="lodash-modern">Lo-Dash (modern production)</option>' +
'<option value="lodash-legacy">Lo-Dash (legacy)</option>' + '<option value="lodash-legacy">Lo-Dash (legacy)</option>' +
'<option value="lodash-mobile">Lo-Dash (mobile)</option>' + '<option value="lodash-mobile">Lo-Dash (mobile)</option>' +
'<option value="lodash-modularize">Lo-Dash (modularize)</option>' +
'<option value="lodash-underscore">Lo-Dash (underscore)</option>' + '<option value="lodash-underscore">Lo-Dash (underscore)</option>' +
'<option value="lodash-custom-dev">Lo-Dash (custom development)</option>' + '<option value="lodash-custom-dev">Lo-Dash (custom development)</option>' +
'<option value="lodash-custom">Lo-Dash (custom production)</option>' + '<option value="lodash-custom">Lo-Dash (custom production)</option>' +

View File

@@ -1,6 +1,6 @@
addEventListener('message', function(e) { addEventListener('message', function(e) {
if (e.data) { if (e.data) {
importScripts(e.data); importScripts('../' + e.data);
postMessage(_.VERSION); postMessage(_.VERSION);
} }
}, false); }, false);

View File

@@ -22,7 +22,7 @@
<script src="../vendor/jquery/jquery.js"></script> <script src="../vendor/jquery/jquery.js"></script>
<script src="../vendor/platform.js/platform.js"></script> <script src="../vendor/platform.js/platform.js"></script>
<script src="../vendor/qunit/qunit/qunit.js"></script> <script src="../vendor/qunit/qunit/qunit.js"></script>
<script src="test-ui.js"></script> <script src="./asset/test-ui.js"></script>
<script src="../lodash.js"></script> <script src="../lodash.js"></script>
<script> <script>
var lodash = _.noConflict(); var lodash = _.noConflict();
@@ -31,7 +31,8 @@
<script> <script>
_.mixin({ _.mixin({
'debounce': _.debounce || lodash.debounce, 'debounce': _.debounce || lodash.debounce,
'defer': _.defer || lodash.defer 'defer': _.defer || lodash.defer,
'pluck': _.pluck || lodash.pluck
}); });
</script> </script>
<script src="../vendor/backbone/backbone.js"></script> <script src="../vendor/backbone/backbone.js"></script>

View File

@@ -13,11 +13,23 @@
<body> <body>
<script src="../vendor/qunit/qunit/qunit.js"></script> <script src="../vendor/qunit/qunit/qunit.js"></script>
<script src="../vendor/platform.js/platform.js"></script> <script src="../vendor/platform.js/platform.js"></script>
<script src="test-ui.js"></script> <script src="./asset/test-ui.js"></script>
<div id="qunit"></div> <div id="qunit"></div>
<div id="exports"></div> <div id="exports"></div>
<script> <script>
// set a bad shim // set bad shims
Array._isArray = Array.isArray;
Array.isArray = function() { return false; };
Function.prototype._bind = Function.prototype.bind;
Function.prototype.bind = function() { return function() {}; };
Object._create = Object.create;
Object.create = function() {};
Object._defineProperty = Object.defineProperty;
Object.defineProperty = function() {};
Object._keys = Object.keys; Object._keys = Object.keys;
Object.keys = function() { return []; }; Object.keys = function() { return []; };
@@ -28,8 +40,36 @@
// store Lo-Dash to test for bad shim detection // store Lo-Dash to test for bad shim detection
var lodashBadShim = window._; var lodashBadShim = window._;
// restore nativeKeys // restore native methods
Object.keys = Object._keys; if (Array._isArray) {
Array.isArray = Array._isArray;
} else {
delete Array.isArray;
}
if (Function.prototype._bind) {
Function.prototype.bind = Function.prototype._bind;
} else {
delete Function.prototype.bind;
}
if (Object._create) {
Object.create = Object._create;
} else {
delete Object.create;
}
if (Object._defineProperty) {
Object.defineProperty = Object._defineProperty;
} else {
delete Object.defineProperty;
}
if (Object._keys) {
Object.keys = Object._keys;
} else {
delete Object.keys;
}
delete Array._isArray;
delete Function.prototype._bind;
delete Object._create;
delete Object._defineProperty;
delete Object._keys; delete Object._keys;
// load Lo-Dash again to overwrite the existing `_` value // load Lo-Dash again to overwrite the existing `_` value

File diff suppressed because it is too large Load Diff

View File

@@ -22,7 +22,7 @@
<script src="../vendor/qunit/qunit/qunit.js"></script> <script src="../vendor/qunit/qunit/qunit.js"></script>
<script src="../vendor/jquery/jquery.js"></script> <script src="../vendor/jquery/jquery.js"></script>
<script src="../vendor/platform.js/platform.js"></script> <script src="../vendor/platform.js/platform.js"></script>
<script src="test-ui.js"></script> <script src="./asset/test-ui.js"></script>
<script> <script>
function init(lodash) { function init(lodash) {
var arrayRef = [], var arrayRef = [],

View File

@@ -553,20 +553,6 @@
(/^[\s(]*function[^(]*\(([^\s,)]+)/.exec(fn) || 0)[1]) || ''; (/^[\s(]*function[^(]*\(([^\s,)]+)/.exec(fn) || 0)[1]) || '';
} }
/**
* Computes the geometric mean (log-average) of a sample.
* See http://en.wikipedia.org/wiki/Geometric_mean#Relationship_with_arithmetic_mean_of_logarithms.
*
* @private
* @param {Array} sample The sample.
* @returns {number} The geometric mean.
*/
function getGeometricMean(sample) {
return pow(Math.E, _.reduce(sample, function(sum, x) {
return sum + log(x);
}) / sample.length) || 0;
}
/** /**
* Computes the arithmetic mean of a sample. * Computes the arithmetic mean of a sample.
* *

View File

@@ -142,7 +142,10 @@ class Entry {
$params = $this->getParams(); $params = $this->getParams();
foreach ($params as $param) { foreach ($params as $param) {
$result[] = $param[1]; // skip params that are properties of other params (e.g. `options.leading`)
if (!preg_match('/\w+\.[\w.]+\s*=/', $param[1])) {
$result[] = $param[1];
}
} }
// format // format
$result = $name .'('. implode(array_slice($result, 1), ', ') .')'; $result = $name .'('. implode(array_slice($result, 1), ', ') .')';

View File

@@ -195,7 +195,7 @@ class MarkdownGenerator {
if (count($aliases = $entry->getAliases())) { if (count($aliases = $entry->getAliases())) {
array_push($result, '', '#### Aliases'); array_push($result, '', '#### Aliases');
foreach ($aliases as $index => $alias) { foreach ($aliases as $index => $alias) {
$aliases[$index] = $alias->getName(); $aliases[$index] = MarkdownGenerator::interpolate('#{member}#{separator}#{name}', $alias);
} }
$result[] = '*' . implode(', ', $aliases) . '*'; $result[] = '*' . implode(', ', $aliases) . '*';
} }
@@ -349,7 +349,7 @@ class MarkdownGenerator {
$entry->href = $this->getLineUrl($entry); $entry->href = $this->getLineUrl($entry);
$member = $entry->getMembers(0); $member = $entry->getMembers(0);
$member = ($member ? $member . ($entry->isPlugin() ? '.prototype.' : '.') : '') . $entry->getName(); $member = ($member ? $member . $this->getSeparator($entry) : '') . $entry->getName();
$entry->member = preg_replace('/' . $entry->getName() . '$/', '', $member); $entry->member = preg_replace('/' . $entry->getName() . '$/', '', $member);
// add properties to static and plugin sub-entries // add properties to static and plugin sub-entries

View File

@@ -108,14 +108,48 @@
/*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/
/** Used to report the test module for failing tests */
var moduleName,
modulePrinted;
/** Add `console.log()` support for Narwhal, Rhino, and RingoJS */ /** Add `console.log()` support for Narwhal, Rhino, and RingoJS */
var console = context.console || (context.console = { 'log': context.print }); var console = context.console || (context.console = { 'log': context.print });
/** Used as a horizontal rule in console output */
var hr = '----------------------------------------';
/** Used by `logInline` to clear previously logged messages */
var prevLine = '';
/** Shorten `context.QUnit.QUnit` to `context.QUnit` */ /** Shorten `context.QUnit.QUnit` to `context.QUnit` */
var QUnit = context.QUnit = context.QUnit.QUnit || context.QUnit; var QUnit = context.QUnit = context.QUnit.QUnit || context.QUnit;
/** Used as a horizontal rule in console output */ /**
var hr = '----------------------------------------'; * Logs an inline message to standard output.
*
* @private
* @param {string} text The text to log.
*/
var logInline = (function() {
// exit early if not Node.js
if (!(typeof process == 'object' && process &&
process.on && process.stdout && process.platform != 'win32')) {
return function() {};
}
// cleanup any inline logs when exited via `ctrl+c`
process.on('SIGINT', function() {
logInline('');
process.exit();
});
return function(text) {
var blankLine = Array(prevLine.length + 1).join(' ');
if (text.length > hr.length) {
text = text.slice(0, hr.length - 3) + '...';
}
prevLine = text;
process.stdout.write(text + blankLine.slice(text.length) + '\r');
}
}());
/** /**
* A logging callback triggered when all testing is completed. * A logging callback triggered when all testing is completed.
@@ -133,12 +167,13 @@
} }
ran = true; ran = true;
logInline('');
console.log(hr); console.log(hr);
console.log(' PASS: ' + details.passed + ' FAIL: ' + details.failed + ' TOTAL: ' + details.total); console.log(' PASS: ' + details.passed + ' FAIL: ' + details.failed + ' TOTAL: ' + details.total);
console.log(' Finished in ' + details.runtime + ' milliseconds.'); console.log(' Finished in ' + details.runtime + ' milliseconds.');
console.log(hr); console.log(hr);
// exit out of Narhwal, Rhino, or Ringo // exit out of Narhwal, Rhino, or RingoJS
try { try {
quit(); quit();
} catch(e) { } } catch(e) { }
@@ -186,9 +221,11 @@
* @param {Object} details An object with property `name`. * @param {Object} details An object with property `name`.
*/ */
QUnit.moduleStart(function(details) { QUnit.moduleStart(function(details) {
console.log(hr); var newModuleName = details.name;
console.log(details.name); if (moduleName != newModuleName) {
console.log(hr); moduleName = newModuleName;
modulePrinted = false;
}
}); });
/** /**
@@ -224,13 +261,19 @@
testName = details.name; testName = details.name;
if (details.failed > 0) { if (details.failed > 0) {
logInline('');
if (!modulePrinted) {
modulePrinted = true;
console.log(hr);
console.log(moduleName);
console.log(hr);
}
console.log(' FAIL - '+ testName); console.log(' FAIL - '+ testName);
assertions.forEach(function(value) { assertions.forEach(function(value) {
console.log(' ' + value); console.log(' ' + value);
}); });
} } else {
else { logInline('Testing ' + moduleName + '...');
console.log(' PASS - ' + testName);
} }
assertions.length = 0; assertions.length = 0;
}); });
@@ -244,7 +287,7 @@
QUnit.config.testStats = { QUnit.config.testStats = {
/** /**
* An array of test summaries (pipe separated). * An array of test summaries.
* *
* @memberOf QUnit.config.testStats * @memberOf QUnit.config.testStats
* @type Array * @type Array