cordova-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From shaz...@apache.org
Subject [cordova-ios] branch master updated: Updated cordova-common to 2.1.0 and other bundled node_modules (#336)
Date Wed, 06 Sep 2017 01:41:24 GMT
This is an automated email from the ASF dual-hosted git repository.

shazron pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-ios.git


The following commit(s) were added to refs/heads/master by this push:
     new 6c3b932  Updated cordova-common to 2.1.0 and other bundled node_modules (#336)
6c3b932 is described below

commit 6c3b93296c809ffd9e796dedf8979d2825628e11
Author: Steve Gill <stevengill97@gmail.com>
AuthorDate: Tue Sep 5 18:41:21 2017 -0700

    Updated cordova-common to 2.1.0 and other bundled node_modules (#336)
---
 node_modules/.bin/uuid                             |    2 +-
 node_modules/abbrev/abbrev.js                      |    1 -
 node_modules/abbrev/package.json                   |   36 +-
 node_modules/ansi/package.json                     |    9 +-
 node_modules/balanced-match/index.js               |    1 +
 node_modules/balanced-match/package.json           |   47 +-
 node_modules/base64-js/package.json                |    9 +-
 node_modules/big-integer/BigInteger.d.ts           | 2364 ++++++++++++++++++++
 node_modules/big-integer/BigInteger.js             |   75 +-
 node_modules/big-integer/BigInteger.min.js         |    2 +-
 node_modules/big-integer/README.md                 |   11 +-
 node_modules/big-integer/bower.json                |    1 -
 node_modules/big-integer/package.json              |   40 +-
 node_modules/big-integer/tsconfig.json             |   25 +
 node_modules/bplist-creator/package.json           |    9 +-
 node_modules/bplist-parser/package.json            |   12 +-
 node_modules/brace-expansion/README.md             |    1 +
 node_modules/brace-expansion/index.js              |    2 +-
 node_modules/brace-expansion/package.json          |   49 +-
 node_modules/concat-map/package.json               |   11 +-
 node_modules/cordova-common/.eslintignore          |    1 +
 node_modules/cordova-common/.eslintrc.yml          |   11 +
 node_modules/cordova-common/.jshintignore          |    1 -
 node_modules/cordova-common/.ratignore             |    1 +
 node_modules/cordova-common/.travis.yml            |   15 +
 node_modules/cordova-common/README.md              |    4 +
 node_modules/cordova-common/RELEASENOTES.md        |   15 +
 .../simctl => cordova-common}/appveyor.yml         |    3 +-
 node_modules/cordova-common/package.json           |  145 +-
 node_modules/cordova-common/src/.jshintrc          |   10 -
 node_modules/cordova-common/src/ActionStack.js     |   30 +-
 .../src/ConfigChanges/ConfigChanges.js             |  141 +-
 .../cordova-common/src/ConfigChanges/ConfigFile.js |   94 +-
 .../src/ConfigChanges/ConfigKeeper.js              |    9 +-
 .../cordova-common/src/ConfigChanges/munge-util.js |   45 +-
 .../src/ConfigParser/ConfigParser.js               |  259 ++-
 node_modules/cordova-common/src/CordovaCheck.js    |   14 +-
 .../src/CordovaError/CordovaError.js               |   25 +-
 .../CordovaExternalToolErrorContext.js             |    6 +-
 node_modules/cordova-common/src/CordovaLogger.js   |   18 +-
 node_modules/cordova-common/src/FileUpdater.js     |  141 +-
 node_modules/cordova-common/src/PlatformJson.js    |   71 +-
 .../cordova-common/src/PluginInfo/PluginInfo.js    |  195 +-
 .../src/PluginInfo/PluginInfoProvider.js           |   14 +-
 node_modules/cordova-common/src/PluginManager.js   |   93 +-
 node_modules/cordova-common/src/events.js          |    3 +-
 node_modules/cordova-common/src/superspawn.js      |   25 +-
 .../cordova-common/src/util/addProperty.js         |    4 +-
 .../cordova-common/src/util/plist-helpers.js       |   51 +-
 .../cordova-common/src/util/xml-helpers.js         |  137 +-
 node_modules/cordova-registry-mapper/package.json  |    9 +-
 node_modules/elementtree/package.json              |   29 +-
 node_modules/glob/package.json                     |    9 +-
 node_modules/inflight/package.json                 |    9 +-
 node_modules/inherits/package.json                 |    9 +-
 node_modules/ios-sim/node_modules/.bin/shjs        |    1 -
 .../node_modules/bplist-parser/package.json        |   99 +-
 .../ios-sim/node_modules/nopt/package.json         |  102 +-
 .../ios-sim/node_modules/shelljs/.documentup.json  |    6 -
 .../ios-sim/node_modules/shelljs/.jshintrc         |    7 -
 .../ios-sim/node_modules/shelljs/.npmignore        |    2 -
 .../ios-sim/node_modules/shelljs/.travis.yml       |    5 -
 node_modules/ios-sim/node_modules/shelljs/LICENSE  |   26 -
 .../ios-sim/node_modules/shelljs/README.md         |  552 -----
 node_modules/ios-sim/node_modules/shelljs/bin/shjs |   51 -
 .../ios-sim/node_modules/shelljs/global.js         |    3 -
 node_modules/ios-sim/node_modules/shelljs/make.js  |   47 -
 .../ios-sim/node_modules/shelljs/package.json      |   93 -
 .../node_modules/shelljs/scripts/generate-docs.js  |   21 -
 .../node_modules/shelljs/scripts/run-tests.js      |   50 -
 node_modules/ios-sim/node_modules/shelljs/shell.js |  153 --
 .../ios-sim/node_modules/shelljs/src/cat.js        |   43 -
 .../ios-sim/node_modules/shelljs/src/cd.js         |   19 -
 .../ios-sim/node_modules/shelljs/src/chmod.js      |  208 --
 .../ios-sim/node_modules/shelljs/src/common.js     |  189 --
 .../ios-sim/node_modules/shelljs/src/cp.js         |  200 --
 .../ios-sim/node_modules/shelljs/src/dirs.js       |  191 --
 .../ios-sim/node_modules/shelljs/src/echo.js       |   20 -
 .../ios-sim/node_modules/shelljs/src/error.js      |   10 -
 .../ios-sim/node_modules/shelljs/src/exec.js       |  181 --
 .../ios-sim/node_modules/shelljs/src/find.js       |   51 -
 .../ios-sim/node_modules/shelljs/src/grep.js       |   52 -
 .../ios-sim/node_modules/shelljs/src/ls.js         |  126 --
 .../ios-sim/node_modules/shelljs/src/mkdir.js      |   68 -
 .../ios-sim/node_modules/shelljs/src/mv.js         |   80 -
 .../ios-sim/node_modules/shelljs/src/popd.js       |    1 -
 .../ios-sim/node_modules/shelljs/src/pushd.js      |    1 -
 .../ios-sim/node_modules/shelljs/src/pwd.js        |   11 -
 .../ios-sim/node_modules/shelljs/src/rm.js         |  145 --
 .../ios-sim/node_modules/shelljs/src/sed.js        |   43 -
 .../ios-sim/node_modules/shelljs/src/tempdir.js    |   56 -
 .../ios-sim/node_modules/shelljs/src/test.js       |   85 -
 .../ios-sim/node_modules/shelljs/src/to.js         |   29 -
 .../ios-sim/node_modules/shelljs/src/toEnd.js      |   29 -
 .../ios-sim/node_modules/shelljs/src/which.js      |   79 -
 node_modules/ios-sim/node_modules/simctl/.jscsrc   |   40 -
 .../ios-sim/node_modules/simctl/.npmignore         |    1 -
 node_modules/ios-sim/node_modules/simctl/LICENSE   |   22 -
 node_modules/ios-sim/node_modules/simctl/README.md |   10 -
 .../node_modules/simctl/lib/simctl-extensions.js   |   63 -
 .../ios-sim/node_modules/simctl/package.json       |   99 -
 node_modules/ios-sim/node_modules/simctl/simctl.js |  196 --
 node_modules/ios-sim/package.json                  |   10 +-
 node_modules/lodash/package.json                   |    9 +-
 node_modules/minimatch/package.json                |   41 +-
 node_modules/node-uuid/.npmignore                  |    4 -
 node_modules/node-uuid/LICENSE.md                  |   21 -
 node_modules/node-uuid/README.md                   |  254 ---
 node_modules/node-uuid/benchmark/README.md         |   53 -
 node_modules/node-uuid/benchmark/bench.gnu         |  174 --
 node_modules/node-uuid/benchmark/bench.sh          |   34 -
 .../node-uuid/benchmark/benchmark-native.c         |   34 -
 node_modules/node-uuid/benchmark/benchmark.js      |   84 -
 node_modules/node-uuid/bin/uuid                    |   26 -
 node_modules/node-uuid/bower.json                  |   23 -
 node_modules/node-uuid/component.json              |   25 -
 node_modules/node-uuid/package.json                |  114 -
 node_modules/node-uuid/test/compare_v1.js          |   63 -
 node_modules/node-uuid/test/test.html              |   17 -
 node_modules/node-uuid/test/test.js                |  231 --
 node_modules/node-uuid/uuid.js                     |  272 ---
 node_modules/nopt/package.json                     |    9 +-
 node_modules/once/package.json                     |    9 +-
 node_modules/os-homedir/package.json               |    9 +-
 node_modules/os-tmpdir/package.json                |    9 +-
 node_modules/osenv/package.json                    |   33 +-
 node_modules/osenv/test/unix.js                    |   10 +-
 node_modules/path-is-absolute/package.json         |    9 +-
 node_modules/pegjs/package.json                    |    6 +-
 node_modules/plist/package.json                    |   12 +-
 node_modules/q/CHANGES.md                          |    6 +
 node_modules/q/LICENSE                             |    2 +-
 node_modules/q/README.md                           |   19 +-
 node_modules/q/package.json                        |   36 +-
 node_modules/q/q.js                                |   53 +-
 node_modules/sax/package.json                      |    7 +-
 node_modules/semver/README.md                      |   90 +-
 node_modules/semver/package.json                   |   36 +-
 node_modules/semver/semver.js                      |  119 +-
 node_modules/shelljs/package.json                  |    9 +-
 .../{ios-sim/node_modules => }/simctl/.travis.yml  |    0
 node_modules/simctl/README.md                      |    9 +-
 .../{ios-sim/node_modules => }/simctl/appveyor.yml |    0
 node_modules/simctl/lib/simctl-list-parser.js      |  220 --
 .../simctl/node_modules/shelljs/package.json       |    9 +-
 node_modules/simctl/package.json                   |   45 +-
 node_modules/simctl/simctl.js                      |   14 +-
 .../simctl/spec/fixture/list.json                  |    0
 .../simctl/spec/simctl-list-parser.spec.js         |  357 ---
 .../node_modules/base64-js/package.json            |    9 +-
 .../simple-plist/node_modules/plist/package.json   |    9 +-
 .../node_modules/xmlbuilder/package.json           |    9 +-
 node_modules/simple-plist/package.json             |    9 +-
 node_modules/stream-buffers/package.json           |    9 +-
 node_modules/tail/package.json                     |    9 +-
 node_modules/underscore/package.json               |    9 +-
 node_modules/unorm/package.json                    |   11 +-
 node_modules/util-deprecate/package.json           |    7 +-
 .../{xcode/node_modules => }/uuid/.npmignore       |    0
 .../{xcode/node_modules => }/uuid/.travis.yml      |    0
 node_modules/{xcode/node_modules => }/uuid/AUTHORS |    0
 .../{xcode/node_modules => }/uuid/HISTORY.md       |    0
 .../{xcode/node_modules => }/uuid/LICENSE.md       |    0
 .../{xcode/node_modules => }/uuid/README.md        |    0
 .../{xcode/node_modules => }/uuid/bin/uuid         |    0
 .../{xcode/node_modules => }/uuid/index.js         |    0
 .../node_modules => }/uuid/lib/bytesToUuid.js      |    0
 .../node_modules => }/uuid/lib/rng-browser.js      |    0
 .../{xcode/node_modules => }/uuid/lib/rng.js       |    0
 node_modules/uuid/package.json                     |  123 +
 .../{xcode/node_modules => }/uuid/test/mocha.opts  |    0
 .../{xcode/node_modules => }/uuid/test/test.js     |    0
 node_modules/{xcode/node_modules => }/uuid/v1.js   |    0
 node_modules/{xcode/node_modules => }/uuid/v4.js   |    0
 node_modules/wrappy/package.json                   |    9 +-
 node_modules/xcode/node_modules/.bin/uuid          |    1 -
 node_modules/xcode/node_modules/uuid/package.json  |  122 -
 node_modules/xcode/package.json                    |    9 +-
 node_modules/xml-escape/.npmignore                 |   15 +
 node_modules/xml-escape/package.json               |    8 +-
 node_modules/xmlbuilder/package.json               |    7 +-
 node_modules/xmldom/package.json                   |   31 +-
 package.json                                       |    2 +-
 183 files changed, 4201 insertions(+), 6752 deletions(-)

diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid
index 80eb14a..b3e45bc 120000
--- a/node_modules/.bin/uuid
+++ b/node_modules/.bin/uuid
@@ -1 +1 @@
-../node-uuid/bin/uuid
\ No newline at end of file
+../uuid/bin/uuid
\ No newline at end of file
diff --git a/node_modules/abbrev/abbrev.js b/node_modules/abbrev/abbrev.js
index 69cfeac..7b1dc5d 100644
--- a/node_modules/abbrev/abbrev.js
+++ b/node_modules/abbrev/abbrev.js
@@ -1,4 +1,3 @@
-
 module.exports = exports = abbrev.abbrev = abbrev
 
 abbrev.monkeyPatch = monkeyPatch
diff --git a/node_modules/abbrev/package.json b/node_modules/abbrev/package.json
index affedf4..51459d5 100644
--- a/node_modules/abbrev/package.json
+++ b/node_modules/abbrev/package.json
@@ -10,23 +10,23 @@
         "spec": ">=1.0.0 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/ios-sim/node_modules/nopt"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/ios-sim/node_modules/nopt"
     ]
   ],
   "_from": "abbrev@>=1.0.0 <2.0.0",
-  "_id": "abbrev@1.0.9",
+  "_id": "abbrev@1.1.0",
   "_inCache": true,
   "_location": "/abbrev",
-  "_nodeVersion": "4.4.4",
+  "_nodeVersion": "8.0.0-pre",
   "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/abbrev-1.0.9.tgz_1466016055839_0.7825860097073019"
+    "host": "packages-12-west.internal.npmjs.com",
+    "tmp": "tmp/abbrev-1.1.0.tgz_1487054000015_0.9229173036292195"
   },
   "_npmUser": {
     "name": "isaacs",
     "email": "i@izs.me"
   },
-  "_npmVersion": "3.9.1",
+  "_npmVersion": "4.3.0",
   "_phantomChildren": {},
   "_requested": {
     "raw": "abbrev@1",
@@ -41,11 +41,11 @@
     "/ios-sim/nopt",
     "/nopt"
   ],
-  "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
-  "_shasum": "91b4792588a7738c25f35dd6f63752a2f8776135",
+  "_resolved": "http://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
+  "_shasum": "d0554c2256636e2f56e7c2e5ad183f859428d81f",
   "_shrinkwrap": null,
   "_spec": "abbrev@1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/ios-sim/node_modules/nopt",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/ios-sim/node_modules/nopt",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me"
@@ -56,17 +56,17 @@
   "dependencies": {},
   "description": "Like ruby's abbrev module, but in js",
   "devDependencies": {
-    "tap": "^5.7.2"
+    "tap": "^10.1"
   },
   "directories": {},
   "dist": {
-    "shasum": "91b4792588a7738c25f35dd6f63752a2f8776135",
-    "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz"
+    "shasum": "d0554c2256636e2f56e7c2e5ad183f859428d81f",
+    "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz"
   },
   "files": [
     "abbrev.js"
   ],
-  "gitHead": "c386cd9dbb1d8d7581718c54d4ba944cc9298d6f",
+  "gitHead": "7136d4d95449dc44115d4f78b80ec907724f64e0",
   "homepage": "https://github.com/isaacs/abbrev-js#readme",
   "license": "ISC",
   "main": "abbrev.js",
@@ -78,13 +78,17 @@
   ],
   "name": "abbrev",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# abbrev-js\n\nJust like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n    var abbrev = require(\"abbrev\");\n    abbrev(\"foo\", \"fool\", \"folding\", \"flop\");\n    \n    // returns:\n    { fl: 'flop'\n    , flo: 'flop'\n    , flop: 'flop'\n    , fol: 'folding'\n    , fold: 'folding'\n    , foldi: 'folding'\n    , foldin: 'folding'\n    , folding: 'folding'\n    , foo: 'foo'\n    , fool: 'fool'\n    }\n\nThis is handy for command-line scripts, or other ca [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+ssh://git@github.com/isaacs/abbrev-js.git"
   },
   "scripts": {
-    "test": "tap test.js --cov"
+    "postpublish": "git push origin --all; git push origin --tags",
+    "postversion": "npm publish",
+    "preversion": "npm test",
+    "test": "tap test.js --100"
   },
-  "version": "1.0.9"
+  "version": "1.1.0"
 }
diff --git a/node_modules/ansi/package.json b/node_modules/ansi/package.json
index 0c41baa..af1026d 100644
--- a/node_modules/ansi/package.json
+++ b/node_modules/ansi/package.json
@@ -10,7 +10,7 @@
         "spec": ">=0.3.1 <0.4.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
   "_from": "ansi@>=0.3.1 <0.4.0",
@@ -36,11 +36,11 @@
   "_requiredBy": [
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
+  "_resolved": "http://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
   "_shasum": "0c42d4fb17160d5a9af1e484bace1c66922c1b21",
   "_shrinkwrap": null,
   "_spec": "ansi@^0.3.1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "author": {
     "name": "Nathan Rajlich",
     "email": "nathan@tootallnate.net",
@@ -83,7 +83,8 @@
   ],
   "name": "ansi",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "ansi.js\n=========\n### Advanced ANSI formatting tool for Node.js\n\n`ansi.js` is a module for Node.js that provides an easy-to-use API for\nwriting ANSI escape codes to `Stream` instances. ANSI escape codes are used to do\nfancy things in a terminal window, like render text in colors, delete characters,\nlines, the entire window, or hide and show the cursor, and lots more!\n\n#### Features:\n\n * 256 color support for the terminal!\n * Make a beep sound from your terminal!\ [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/TooTallNate/ansi.js.git"
diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js
index e8d8587..1685a76 100644
--- a/node_modules/balanced-match/index.js
+++ b/node_modules/balanced-match/index.js
@@ -1,3 +1,4 @@
+'use strict';
 module.exports = balanced;
 function balanced(a, b, str) {
   if (a instanceof RegExp) a = maybeMatch(a, str);
diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json
index 47b2cbd..7564233 100644
--- a/node_modules/balanced-match/package.json
+++ b/node_modules/balanced-match/package.json
@@ -2,49 +2,49 @@
   "_args": [
     [
       {
-        "raw": "balanced-match@^0.4.1",
+        "raw": "balanced-match@^1.0.0",
         "scope": null,
         "escapedName": "balanced-match",
         "name": "balanced-match",
-        "rawSpec": "^0.4.1",
-        "spec": ">=0.4.1 <0.5.0",
+        "rawSpec": "^1.0.0",
+        "spec": ">=1.0.0 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/brace-expansion"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/brace-expansion"
     ]
   ],
-  "_from": "balanced-match@>=0.4.1 <0.5.0",
-  "_id": "balanced-match@0.4.2",
+  "_from": "balanced-match@>=1.0.0 <2.0.0",
+  "_id": "balanced-match@1.0.0",
   "_inCache": true,
   "_location": "/balanced-match",
-  "_nodeVersion": "4.4.7",
+  "_nodeVersion": "7.8.0",
   "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/balanced-match-0.4.2.tgz_1468834991581_0.6590619895141572"
+    "host": "s3://npm-registry-packages",
+    "tmp": "tmp/balanced-match-1.0.0.tgz_1497251909645_0.8755026108119637"
   },
   "_npmUser": {
     "name": "juliangruber",
     "email": "julian@juliangruber.com"
   },
-  "_npmVersion": "2.15.8",
+  "_npmVersion": "4.2.0",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "balanced-match@^0.4.1",
+    "raw": "balanced-match@^1.0.0",
     "scope": null,
     "escapedName": "balanced-match",
     "name": "balanced-match",
-    "rawSpec": "^0.4.1",
-    "spec": ">=0.4.1 <0.5.0",
+    "rawSpec": "^1.0.0",
+    "spec": ">=1.0.0 <2.0.0",
     "type": "range"
   },
   "_requiredBy": [
     "/brace-expansion"
   ],
-  "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
-  "_shasum": "cb3f3e3c732dc0f01ee70b403f302e61d7709838",
+  "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+  "_shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767",
   "_shrinkwrap": null,
-  "_spec": "balanced-match@^0.4.1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/brace-expansion",
+  "_spec": "balanced-match@^1.0.0",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/brace-expansion",
   "author": {
     "name": "Julian Gruber",
     "email": "mail@juliangruber.com",
@@ -56,14 +56,15 @@
   "dependencies": {},
   "description": "Match balanced character pairs, like \"{\" and \"}\"",
   "devDependencies": {
+    "matcha": "^0.7.0",
     "tape": "^4.6.0"
   },
   "directories": {},
   "dist": {
-    "shasum": "cb3f3e3c732dc0f01ee70b403f302e61d7709838",
-    "tarball": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz"
+    "shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767",
+    "tarball": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
   },
-  "gitHead": "57c2ea29d89a2844ae3bdcc637c6e2cbb73725e2",
+  "gitHead": "d701a549a7653a874eebce7eca25d3577dc868ac",
   "homepage": "https://github.com/juliangruber/balanced-match",
   "keywords": [
     "match",
@@ -82,12 +83,14 @@
   ],
   "name": "balanced-match",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# balanced-match\n\nMatch balanced string pairs, like `{` and `}` or `<b>` and `</b>`. Supports regular expressions as well!\n\n[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)\n[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)\n\n[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/julia [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/juliangruber/balanced-match.git"
   },
   "scripts": {
+    "bench": "make bench",
     "test": "make test"
   },
   "testling": {
@@ -106,5 +109,5 @@
       "android-browser/4.2..latest"
     ]
   },
-  "version": "0.4.2"
+  "version": "1.0.0"
 }
diff --git a/node_modules/base64-js/package.json b/node_modules/base64-js/package.json
index d2cc725..093c263 100644
--- a/node_modules/base64-js/package.json
+++ b/node_modules/base64-js/package.json
@@ -10,7 +10,7 @@
         "spec": "0.0.8",
         "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/plist"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/plist"
     ]
   ],
   "_from": "base64-js@0.0.8",
@@ -40,7 +40,7 @@
   "_shasum": "1101e9544f4a76b1bc3b26d452ca96d7a35e7978",
   "_shrinkwrap": null,
   "_spec": "base64-js@0.0.8",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/plist",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/plist",
   "author": {
     "name": "T. Jameson Little",
     "email": "t.jameson.little@gmail.com"
@@ -62,7 +62,7 @@
     "node": ">= 0.4"
   },
   "gitHead": "b4a8a5fa9b0caeddb5ad94dd1108253d8f2a315f",
-  "homepage": "https://github.com/beatgammit/base64-js",
+  "homepage": "https://github.com/beatgammit/base64-js#readme",
   "license": "MIT",
   "main": "lib/b64.js",
   "maintainers": [
@@ -77,7 +77,8 @@
   ],
   "name": "base64-js",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "base64-js\n=========\n\n`base64-js` does basic base64 encoding/decoding in pure JS.\n\n[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js)\n\n[![testling badge](https://ci.testling.com/beatgammit/base64-js.png)](https://ci.testling.com/beatgammit/base64-js)\n\nMany browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data.\n\nSometimes encoding/decoding bi [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/beatgammit/base64-js.git"
diff --git a/node_modules/big-integer/BigInteger.d.ts b/node_modules/big-integer/BigInteger.d.ts
new file mode 100644
index 0000000..3cd4c0e
--- /dev/null
+++ b/node_modules/big-integer/BigInteger.d.ts
@@ -0,0 +1,2364 @@
+/**
+ * Type definitions for BigInteger.js
+ * Definitions by: Tommy Frazier <https://github.com/toefraz>
+ */
+export = bigInt;
+export as namespace bigInt;
+
+declare var bigInt: bigInt.BigIntegerStatic;
+
+declare namespace bigInt {
+    type BigNumber = number | string | BigInteger;
+
+    interface BigIntegerStatic {
+        /**
+         * Equivalent to bigInt(0).
+         */
+        (): BigInteger;
+
+        /**
+         * Parse a Javascript number into a bigInt.
+         */
+        (number: number): BigInteger;
+
+        /**
+         * Parse a string into a bigInt.
+         */
+        (string: string, base?: BigNumber): BigInteger;
+
+        /**
+         * no-op.
+         */
+        (bigInt: BigInteger): BigInteger;
+
+        /**
+         * Constructs a bigInt from an array of digits in specified base.
+         * The optional isNegative flag will make the number negative.
+         */
+        fromArray: (digits: BigNumber[], base?: BigNumber, isNegative?: boolean) => BigInteger;
+
+        /**
+         * Finds the greatest common denominator of a and b.
+         */
+        gcd: (a: BigNumber, b: BigNumber) => BigInteger;
+
+
+        /**
+         * Returns true if x is a BigInteger, false otherwise.
+         */
+        isInstance: (x: any) => boolean;
+
+        /**
+         * Finds the least common multiple of a and b.
+         */
+        lcm: (a: BigNumber, b: BigNumber) => BigInteger;
+
+        /**
+         * Returns the largest of a and b.
+         */
+        max: (a: BigNumber, b: BigNumber) => BigInteger;
+
+        /**
+         * Returns the smallest of a and b.
+         */
+        min: (a: BigNumber, b: BigNumber) => BigInteger;
+
+        /**
+         * Equivalent to bigInt(-1).
+         */
+        minusOne:  BigInteger;
+
+        /**
+         * Equivalent to bigInt(1).
+         */
+        one:  BigInteger;
+
+        /**
+         * Returns a random number between min and max.
+         */
+        randBetween: (min: BigNumber, max: BigNumber) => BigInteger;
+
+        /**
+         * Equivalent to bigInt(0).
+         */
+        zero: BigInteger;
+    }
+
+    interface BigInteger {
+        /**
+         * Returns the absolute value of a bigInt.
+         */
+        abs(): BigInteger;
+
+        /**
+         * Performs addition.
+         */
+        add(number: BigNumber): BigInteger;
+
+        /**
+         * Performs the bitwise AND operation.
+         */
+        and(number: BigNumber): BigInteger;
+
+        /**
+         * Performs a comparison between two numbers. If the numbers are equal, it returns 0.
+         * If the first number is greater, it returns 1. If the first number is lesser, it returns -1.
+         */
+        compare(number: BigNumber): number;
+
+        /**
+         * Performs a comparison between the absolute value of two numbers.
+         */
+        compareAbs(number: BigNumber): number;
+
+        /**
+         * Alias for the compare method.
+         */
+        compareTo(number: BigNumber): number;
+
+        /**
+         * Performs integer division, disregarding the remainder.
+         */
+        divide(number: BigNumber): BigInteger;
+
+        /**
+         * Performs division and returns an object with two properties: quotient and remainder.
+         * The sign of the remainder will match the sign of the dividend.
+         */
+        divmod(number: BigNumber): {quotient: BigInteger, remainder: BigInteger};
+
+        /**
+         * Alias for the equals method.
+         */
+        eq(number: BigNumber): boolean;
+
+        /**
+         * Checks if two numbers are equal.
+         */
+        equals(number: BigNumber): boolean;
+
+        /**
+         * Alias for the greaterOrEquals method.
+         */
+        geq(number: BigNumber): boolean;
+
+        /**
+         * Checks if the first number is greater than the second.
+         */
+        greater(number: BigNumber): boolean;
+
+        /**
+         * Checks if the first number is greater than or equal to the second.
+         */
+        greaterOrEquals(number: BigNumber): boolean;
+
+        /**
+         * Alias for the greater method.
+         */
+        gt(number: BigNumber): boolean;
+
+        /**
+         * Returns true if the first number is divisible by the second number, false otherwise.
+         */
+        isDivisibleBy(number: BigNumber): boolean;
+
+        /**
+         * Returns true if the number is even, false otherwise.
+         */
+        isEven(): boolean;
+
+        /**
+         * Returns true if the number is negative, false otherwise.
+         * Returns false for 0 and true for -0.
+         */
+        isNegative(): boolean;
+
+        /**
+         * Returns true if the number is odd, false otherwise.
+         */
+        isOdd(): boolean;
+
+        /**
+         * Return true if the number is positive, false otherwise.
+         * Returns true for 0 and false for -0.
+         */
+        isPositive(): boolean;
+
+        /**
+         * Returns true if the number is prime, false otherwise.
+         */
+        isPrime(): boolean;
+
+        /**
+         * Returns true if the number is very likely to be prime, false otherwise.
+         */
+        isProbablePrime(iterations?: number): boolean;
+
+        /**
+         * Returns true if the number is 1 or -1, false otherwise.
+         */
+        isUnit(): boolean;
+
+        /**
+         * Return true if the number is 0 or -0, false otherwise.
+         */
+        isZero(): boolean;
+
+        /**
+         * Alias for the lesserOrEquals method.
+         */
+        leq(number: BigNumber): boolean;
+
+        /**
+         * Checks if the first number is lesser than the second.
+         */
+        lesser(number: BigNumber): boolean;
+
+        /**
+         * Checks if the first number is less than or equal to the second.
+         */
+        lesserOrEquals(number: BigNumber): boolean;
+
+        /**
+         * Alias for the lesser method.
+         */
+        lt(number: BigNumber): boolean;
+
+        /**
+         * Alias for the subtract method.
+         */
+        minus(number: BigNumber): BigInteger;
+
+        /**
+         * Performs division and returns the remainder, disregarding the quotient.
+         * The sign of the remainder will match the sign of the dividend.
+         */
+        mod(number: BigNumber): BigInteger;
+
+        /**
+         * Finds the multiplicative inverse of the number modulo mod.
+         */
+        modInv(number: BigNumber): BigInteger;
+
+        /**
+         * Takes the number to the power exp modulo mod.
+         */
+        modPow(exp: BigNumber, mod: BigNumber): BigInteger;
+
+        /**
+         * Performs multiplication.
+         */
+        multiply(number: BigNumber): BigInteger;
+
+        /**
+         * Reverses the sign of the number.
+         */
+        negate(): BigInteger;
+
+        /**
+         * Alias for the notEquals method.
+         */
+        neq(number: BigNumber): boolean;
+
+        /**
+         * Adds one to the number.
+         */
+        next(): BigInteger;
+
+        /**
+         * Performs the bitwise NOT operation.
+         */
+        not(): BigInteger;
+
+        /**
+         * Checks if two numbers are not equal.
+         */
+        notEquals(number: BigNumber): boolean;
+
+        /**
+         * Performs the bitwise OR operation.
+         */
+        or(number: BigNumber): BigInteger;
+
+        /**
+         * Alias for the divide method.
+         */
+        over(number: BigNumber): BigInteger;
+
+        /**
+         * Alias for the add method.
+         */
+        plus(number: BigNumber): BigInteger;
+
+        /**
+         * Performs exponentiation. If the exponent is less than 0, pow returns 0.
+         * bigInt.zero.pow(0) returns 1.
+         */
+        pow(number: BigNumber): BigInteger;
+
+        /**
+         * Subtracts one from the number.
+         */
+        prev(): BigInteger;
+
+        /**
+         * Alias for the mod method.
+         */
+        remainder(number: BigNumber): BigInteger;
+
+        /**
+         * Shifts the number left by n places in its binary representation.
+         * If a negative number is provided, it will shift right.
+         *
+         * Throws an error if number is outside of the range [-9007199254740992, 9007199254740992].
+         */
+        shiftLeft(number: BigNumber): BigInteger;
+
+        /**
+         * Shifts the number right by n places in its binary representation.
+         * If a negative number is provided, it will shift left.
+         *
+         * Throws an error if number is outside of the range [-9007199254740992, 9007199254740992].
+         */
+        shiftRight(number: BigNumber): BigInteger;
+
+        /**
+         * Squares the number.
+         */
+        square(): BigInteger;
+
+        /**
+         * Performs subtraction.
+         */
+        subtract(number: BigNumber): BigInteger;
+
+        /**
+         * Alias for the multiply method.
+         */
+        times(number: BigNumber): BigInteger;
+
+        /**
+         * Converts a bigInt into a native Javascript number. Loses precision for numbers outside the range.
+         */
+        toJSNumber(): number;
+
+        /**
+         * Converts a bigInt to a string.
+         */
+        toString(radix?: number): string;
+
+        /**
+         * Converts a bigInt to a native Javascript number. This override allows you to use native
+         * arithmetic operators without explicit conversion.
+         */
+        valueOf(): number;
+
+        /**
+         * Performs the bitwise XOR operation.
+         */
+        xor(number: BigNumber): BigInteger;
+    }
+
+    // Array constant accessors
+    interface BigIntegerStatic {
+        '-999': BigInteger;
+        '-998': BigInteger;
+        '-997': BigInteger;
+        '-996': BigInteger;
+        '-995': BigInteger;
+        '-994': BigInteger;
+        '-993': BigInteger;
+        '-992': BigInteger;
+        '-991': BigInteger;
+        '-990': BigInteger;
+        '-989': BigInteger;
+        '-988': BigInteger;
+        '-987': BigInteger;
+        '-986': BigInteger;
+        '-985': BigInteger;
+        '-984': BigInteger;
+        '-983': BigInteger;
+        '-982': BigInteger;
+        '-981': BigInteger;
+        '-980': BigInteger;
+        '-979': BigInteger;
+        '-978': BigInteger;
+        '-977': BigInteger;
+        '-976': BigInteger;
+        '-975': BigInteger;
+        '-974': BigInteger;
+        '-973': BigInteger;
+        '-972': BigInteger;
+        '-971': BigInteger;
+        '-970': BigInteger;
+        '-969': BigInteger;
+        '-968': BigInteger;
+        '-967': BigInteger;
+        '-966': BigInteger;
+        '-965': BigInteger;
+        '-964': BigInteger;
+        '-963': BigInteger;
+        '-962': BigInteger;
+        '-961': BigInteger;
+        '-960': BigInteger;
+        '-959': BigInteger;
+        '-958': BigInteger;
+        '-957': BigInteger;
+        '-956': BigInteger;
+        '-955': BigInteger;
+        '-954': BigInteger;
+        '-953': BigInteger;
+        '-952': BigInteger;
+        '-951': BigInteger;
+        '-950': BigInteger;
+        '-949': BigInteger;
+        '-948': BigInteger;
+        '-947': BigInteger;
+        '-946': BigInteger;
+        '-945': BigInteger;
+        '-944': BigInteger;
+        '-943': BigInteger;
+        '-942': BigInteger;
+        '-941': BigInteger;
+        '-940': BigInteger;
+        '-939': BigInteger;
+        '-938': BigInteger;
+        '-937': BigInteger;
+        '-936': BigInteger;
+        '-935': BigInteger;
+        '-934': BigInteger;
+        '-933': BigInteger;
+        '-932': BigInteger;
+        '-931': BigInteger;
+        '-930': BigInteger;
+        '-929': BigInteger;
+        '-928': BigInteger;
+        '-927': BigInteger;
+        '-926': BigInteger;
+        '-925': BigInteger;
+        '-924': BigInteger;
+        '-923': BigInteger;
+        '-922': BigInteger;
+        '-921': BigInteger;
+        '-920': BigInteger;
+        '-919': BigInteger;
+        '-918': BigInteger;
+        '-917': BigInteger;
+        '-916': BigInteger;
+        '-915': BigInteger;
+        '-914': BigInteger;
+        '-913': BigInteger;
+        '-912': BigInteger;
+        '-911': BigInteger;
+        '-910': BigInteger;
+        '-909': BigInteger;
+        '-908': BigInteger;
+        '-907': BigInteger;
+        '-906': BigInteger;
+        '-905': BigInteger;
+        '-904': BigInteger;
+        '-903': BigInteger;
+        '-902': BigInteger;
+        '-901': BigInteger;
+        '-900': BigInteger;
+        '-899': BigInteger;
+        '-898': BigInteger;
+        '-897': BigInteger;
+        '-896': BigInteger;
+        '-895': BigInteger;
+        '-894': BigInteger;
+        '-893': BigInteger;
+        '-892': BigInteger;
+        '-891': BigInteger;
+        '-890': BigInteger;
+        '-889': BigInteger;
+        '-888': BigInteger;
+        '-887': BigInteger;
+        '-886': BigInteger;
+        '-885': BigInteger;
+        '-884': BigInteger;
+        '-883': BigInteger;
+        '-882': BigInteger;
+        '-881': BigInteger;
+        '-880': BigInteger;
+        '-879': BigInteger;
+        '-878': BigInteger;
+        '-877': BigInteger;
+        '-876': BigInteger;
+        '-875': BigInteger;
+        '-874': BigInteger;
+        '-873': BigInteger;
+        '-872': BigInteger;
+        '-871': BigInteger;
+        '-870': BigInteger;
+        '-869': BigInteger;
+        '-868': BigInteger;
+        '-867': BigInteger;
+        '-866': BigInteger;
+        '-865': BigInteger;
+        '-864': BigInteger;
+        '-863': BigInteger;
+        '-862': BigInteger;
+        '-861': BigInteger;
+        '-860': BigInteger;
+        '-859': BigInteger;
+        '-858': BigInteger;
+        '-857': BigInteger;
+        '-856': BigInteger;
+        '-855': BigInteger;
+        '-854': BigInteger;
+        '-853': BigInteger;
+        '-852': BigInteger;
+        '-851': BigInteger;
+        '-850': BigInteger;
+        '-849': BigInteger;
+        '-848': BigInteger;
+        '-847': BigInteger;
+        '-846': BigInteger;
+        '-845': BigInteger;
+        '-844': BigInteger;
+        '-843': BigInteger;
+        '-842': BigInteger;
+        '-841': BigInteger;
+        '-840': BigInteger;
+        '-839': BigInteger;
+        '-838': BigInteger;
+        '-837': BigInteger;
+        '-836': BigInteger;
+        '-835': BigInteger;
+        '-834': BigInteger;
+        '-833': BigInteger;
+        '-832': BigInteger;
+        '-831': BigInteger;
+        '-830': BigInteger;
+        '-829': BigInteger;
+        '-828': BigInteger;
+        '-827': BigInteger;
+        '-826': BigInteger;
+        '-825': BigInteger;
+        '-824': BigInteger;
+        '-823': BigInteger;
+        '-822': BigInteger;
+        '-821': BigInteger;
+        '-820': BigInteger;
+        '-819': BigInteger;
+        '-818': BigInteger;
+        '-817': BigInteger;
+        '-816': BigInteger;
+        '-815': BigInteger;
+        '-814': BigInteger;
+        '-813': BigInteger;
+        '-812': BigInteger;
+        '-811': BigInteger;
+        '-810': BigInteger;
+        '-809': BigInteger;
+        '-808': BigInteger;
+        '-807': BigInteger;
+        '-806': BigInteger;
+        '-805': BigInteger;
+        '-804': BigInteger;
+        '-803': BigInteger;
+        '-802': BigInteger;
+        '-801': BigInteger;
+        '-800': BigInteger;
+        '-799': BigInteger;
+        '-798': BigInteger;
+        '-797': BigInteger;
+        '-796': BigInteger;
+        '-795': BigInteger;
+        '-794': BigInteger;
+        '-793': BigInteger;
+        '-792': BigInteger;
+        '-791': BigInteger;
+        '-790': BigInteger;
+        '-789': BigInteger;
+        '-788': BigInteger;
+        '-787': BigInteger;
+        '-786': BigInteger;
+        '-785': BigInteger;
+        '-784': BigInteger;
+        '-783': BigInteger;
+        '-782': BigInteger;
+        '-781': BigInteger;
+        '-780': BigInteger;
+        '-779': BigInteger;
+        '-778': BigInteger;
+        '-777': BigInteger;
+        '-776': BigInteger;
+        '-775': BigInteger;
+        '-774': BigInteger;
+        '-773': BigInteger;
+        '-772': BigInteger;
+        '-771': BigInteger;
+        '-770': BigInteger;
+        '-769': BigInteger;
+        '-768': BigInteger;
+        '-767': BigInteger;
+        '-766': BigInteger;
+        '-765': BigInteger;
+        '-764': BigInteger;
+        '-763': BigInteger;
+        '-762': BigInteger;
+        '-761': BigInteger;
+        '-760': BigInteger;
+        '-759': BigInteger;
+        '-758': BigInteger;
+        '-757': BigInteger;
+        '-756': BigInteger;
+        '-755': BigInteger;
+        '-754': BigInteger;
+        '-753': BigInteger;
+        '-752': BigInteger;
+        '-751': BigInteger;
+        '-750': BigInteger;
+        '-749': BigInteger;
+        '-748': BigInteger;
+        '-747': BigInteger;
+        '-746': BigInteger;
+        '-745': BigInteger;
+        '-744': BigInteger;
+        '-743': BigInteger;
+        '-742': BigInteger;
+        '-741': BigInteger;
+        '-740': BigInteger;
+        '-739': BigInteger;
+        '-738': BigInteger;
+        '-737': BigInteger;
+        '-736': BigInteger;
+        '-735': BigInteger;
+        '-734': BigInteger;
+        '-733': BigInteger;
+        '-732': BigInteger;
+        '-731': BigInteger;
+        '-730': BigInteger;
+        '-729': BigInteger;
+        '-728': BigInteger;
+        '-727': BigInteger;
+        '-726': BigInteger;
+        '-725': BigInteger;
+        '-724': BigInteger;
+        '-723': BigInteger;
+        '-722': BigInteger;
+        '-721': BigInteger;
+        '-720': BigInteger;
+        '-719': BigInteger;
+        '-718': BigInteger;
+        '-717': BigInteger;
+        '-716': BigInteger;
+        '-715': BigInteger;
+        '-714': BigInteger;
+        '-713': BigInteger;
+        '-712': BigInteger;
+        '-711': BigInteger;
+        '-710': BigInteger;
+        '-709': BigInteger;
+        '-708': BigInteger;
+        '-707': BigInteger;
+        '-706': BigInteger;
+        '-705': BigInteger;
+        '-704': BigInteger;
+        '-703': BigInteger;
+        '-702': BigInteger;
+        '-701': BigInteger;
+        '-700': BigInteger;
+        '-699': BigInteger;
+        '-698': BigInteger;
+        '-697': BigInteger;
+        '-696': BigInteger;
+        '-695': BigInteger;
+        '-694': BigInteger;
+        '-693': BigInteger;
+        '-692': BigInteger;
+        '-691': BigInteger;
+        '-690': BigInteger;
+        '-689': BigInteger;
+        '-688': BigInteger;
+        '-687': BigInteger;
+        '-686': BigInteger;
+        '-685': BigInteger;
+        '-684': BigInteger;
+        '-683': BigInteger;
+        '-682': BigInteger;
+        '-681': BigInteger;
+        '-680': BigInteger;
+        '-679': BigInteger;
+        '-678': BigInteger;
+        '-677': BigInteger;
+        '-676': BigInteger;
+        '-675': BigInteger;
+        '-674': BigInteger;
+        '-673': BigInteger;
+        '-672': BigInteger;
+        '-671': BigInteger;
+        '-670': BigInteger;
+        '-669': BigInteger;
+        '-668': BigInteger;
+        '-667': BigInteger;
+        '-666': BigInteger;
+        '-665': BigInteger;
+        '-664': BigInteger;
+        '-663': BigInteger;
+        '-662': BigInteger;
+        '-661': BigInteger;
+        '-660': BigInteger;
+        '-659': BigInteger;
+        '-658': BigInteger;
+        '-657': BigInteger;
+        '-656': BigInteger;
+        '-655': BigInteger;
+        '-654': BigInteger;
+        '-653': BigInteger;
+        '-652': BigInteger;
+        '-651': BigInteger;
+        '-650': BigInteger;
+        '-649': BigInteger;
+        '-648': BigInteger;
+        '-647': BigInteger;
+        '-646': BigInteger;
+        '-645': BigInteger;
+        '-644': BigInteger;
+        '-643': BigInteger;
+        '-642': BigInteger;
+        '-641': BigInteger;
+        '-640': BigInteger;
+        '-639': BigInteger;
+        '-638': BigInteger;
+        '-637': BigInteger;
+        '-636': BigInteger;
+        '-635': BigInteger;
+        '-634': BigInteger;
+        '-633': BigInteger;
+        '-632': BigInteger;
+        '-631': BigInteger;
+        '-630': BigInteger;
+        '-629': BigInteger;
+        '-628': BigInteger;
+        '-627': BigInteger;
+        '-626': BigInteger;
+        '-625': BigInteger;
+        '-624': BigInteger;
+        '-623': BigInteger;
+        '-622': BigInteger;
+        '-621': BigInteger;
+        '-620': BigInteger;
+        '-619': BigInteger;
+        '-618': BigInteger;
+        '-617': BigInteger;
+        '-616': BigInteger;
+        '-615': BigInteger;
+        '-614': BigInteger;
+        '-613': BigInteger;
+        '-612': BigInteger;
+        '-611': BigInteger;
+        '-610': BigInteger;
+        '-609': BigInteger;
+        '-608': BigInteger;
+        '-607': BigInteger;
+        '-606': BigInteger;
+        '-605': BigInteger;
+        '-604': BigInteger;
+        '-603': BigInteger;
+        '-602': BigInteger;
+        '-601': BigInteger;
+        '-600': BigInteger;
+        '-599': BigInteger;
+        '-598': BigInteger;
+        '-597': BigInteger;
+        '-596': BigInteger;
+        '-595': BigInteger;
+        '-594': BigInteger;
+        '-593': BigInteger;
+        '-592': BigInteger;
+        '-591': BigInteger;
+        '-590': BigInteger;
+        '-589': BigInteger;
+        '-588': BigInteger;
+        '-587': BigInteger;
+        '-586': BigInteger;
+        '-585': BigInteger;
+        '-584': BigInteger;
+        '-583': BigInteger;
+        '-582': BigInteger;
+        '-581': BigInteger;
+        '-580': BigInteger;
+        '-579': BigInteger;
+        '-578': BigInteger;
+        '-577': BigInteger;
+        '-576': BigInteger;
+        '-575': BigInteger;
+        '-574': BigInteger;
+        '-573': BigInteger;
+        '-572': BigInteger;
+        '-571': BigInteger;
+        '-570': BigInteger;
+        '-569': BigInteger;
+        '-568': BigInteger;
+        '-567': BigInteger;
+        '-566': BigInteger;
+        '-565': BigInteger;
+        '-564': BigInteger;
+        '-563': BigInteger;
+        '-562': BigInteger;
+        '-561': BigInteger;
+        '-560': BigInteger;
+        '-559': BigInteger;
+        '-558': BigInteger;
+        '-557': BigInteger;
+        '-556': BigInteger;
+        '-555': BigInteger;
+        '-554': BigInteger;
+        '-553': BigInteger;
+        '-552': BigInteger;
+        '-551': BigInteger;
+        '-550': BigInteger;
+        '-549': BigInteger;
+        '-548': BigInteger;
+        '-547': BigInteger;
+        '-546': BigInteger;
+        '-545': BigInteger;
+        '-544': BigInteger;
+        '-543': BigInteger;
+        '-542': BigInteger;
+        '-541': BigInteger;
+        '-540': BigInteger;
+        '-539': BigInteger;
+        '-538': BigInteger;
+        '-537': BigInteger;
+        '-536': BigInteger;
+        '-535': BigInteger;
+        '-534': BigInteger;
+        '-533': BigInteger;
+        '-532': BigInteger;
+        '-531': BigInteger;
+        '-530': BigInteger;
+        '-529': BigInteger;
+        '-528': BigInteger;
+        '-527': BigInteger;
+        '-526': BigInteger;
+        '-525': BigInteger;
+        '-524': BigInteger;
+        '-523': BigInteger;
+        '-522': BigInteger;
+        '-521': BigInteger;
+        '-520': BigInteger;
+        '-519': BigInteger;
+        '-518': BigInteger;
+        '-517': BigInteger;
+        '-516': BigInteger;
+        '-515': BigInteger;
+        '-514': BigInteger;
+        '-513': BigInteger;
+        '-512': BigInteger;
+        '-511': BigInteger;
+        '-510': BigInteger;
+        '-509': BigInteger;
+        '-508': BigInteger;
+        '-507': BigInteger;
+        '-506': BigInteger;
+        '-505': BigInteger;
+        '-504': BigInteger;
+        '-503': BigInteger;
+        '-502': BigInteger;
+        '-501': BigInteger;
+        '-500': BigInteger;
+        '-499': BigInteger;
+        '-498': BigInteger;
+        '-497': BigInteger;
+        '-496': BigInteger;
+        '-495': BigInteger;
+        '-494': BigInteger;
+        '-493': BigInteger;
+        '-492': BigInteger;
+        '-491': BigInteger;
+        '-490': BigInteger;
+        '-489': BigInteger;
+        '-488': BigInteger;
+        '-487': BigInteger;
+        '-486': BigInteger;
+        '-485': BigInteger;
+        '-484': BigInteger;
+        '-483': BigInteger;
+        '-482': BigInteger;
+        '-481': BigInteger;
+        '-480': BigInteger;
+        '-479': BigInteger;
+        '-478': BigInteger;
+        '-477': BigInteger;
+        '-476': BigInteger;
+        '-475': BigInteger;
+        '-474': BigInteger;
+        '-473': BigInteger;
+        '-472': BigInteger;
+        '-471': BigInteger;
+        '-470': BigInteger;
+        '-469': BigInteger;
+        '-468': BigInteger;
+        '-467': BigInteger;
+        '-466': BigInteger;
+        '-465': BigInteger;
+        '-464': BigInteger;
+        '-463': BigInteger;
+        '-462': BigInteger;
+        '-461': BigInteger;
+        '-460': BigInteger;
+        '-459': BigInteger;
+        '-458': BigInteger;
+        '-457': BigInteger;
+        '-456': BigInteger;
+        '-455': BigInteger;
+        '-454': BigInteger;
+        '-453': BigInteger;
+        '-452': BigInteger;
+        '-451': BigInteger;
+        '-450': BigInteger;
+        '-449': BigInteger;
+        '-448': BigInteger;
+        '-447': BigInteger;
+        '-446': BigInteger;
+        '-445': BigInteger;
+        '-444': BigInteger;
+        '-443': BigInteger;
+        '-442': BigInteger;
+        '-441': BigInteger;
+        '-440': BigInteger;
+        '-439': BigInteger;
+        '-438': BigInteger;
+        '-437': BigInteger;
+        '-436': BigInteger;
+        '-435': BigInteger;
+        '-434': BigInteger;
+        '-433': BigInteger;
+        '-432': BigInteger;
+        '-431': BigInteger;
+        '-430': BigInteger;
+        '-429': BigInteger;
+        '-428': BigInteger;
+        '-427': BigInteger;
+        '-426': BigInteger;
+        '-425': BigInteger;
+        '-424': BigInteger;
+        '-423': BigInteger;
+        '-422': BigInteger;
+        '-421': BigInteger;
+        '-420': BigInteger;
+        '-419': BigInteger;
+        '-418': BigInteger;
+        '-417': BigInteger;
+        '-416': BigInteger;
+        '-415': BigInteger;
+        '-414': BigInteger;
+        '-413': BigInteger;
+        '-412': BigInteger;
+        '-411': BigInteger;
+        '-410': BigInteger;
+        '-409': BigInteger;
+        '-408': BigInteger;
+        '-407': BigInteger;
+        '-406': BigInteger;
+        '-405': BigInteger;
+        '-404': BigInteger;
+        '-403': BigInteger;
+        '-402': BigInteger;
+        '-401': BigInteger;
+        '-400': BigInteger;
+        '-399': BigInteger;
+        '-398': BigInteger;
+        '-397': BigInteger;
+        '-396': BigInteger;
+        '-395': BigInteger;
+        '-394': BigInteger;
+        '-393': BigInteger;
+        '-392': BigInteger;
+        '-391': BigInteger;
+        '-390': BigInteger;
+        '-389': BigInteger;
+        '-388': BigInteger;
+        '-387': BigInteger;
+        '-386': BigInteger;
+        '-385': BigInteger;
+        '-384': BigInteger;
+        '-383': BigInteger;
+        '-382': BigInteger;
+        '-381': BigInteger;
+        '-380': BigInteger;
+        '-379': BigInteger;
+        '-378': BigInteger;
+        '-377': BigInteger;
+        '-376': BigInteger;
+        '-375': BigInteger;
+        '-374': BigInteger;
+        '-373': BigInteger;
+        '-372': BigInteger;
+        '-371': BigInteger;
+        '-370': BigInteger;
+        '-369': BigInteger;
+        '-368': BigInteger;
+        '-367': BigInteger;
+        '-366': BigInteger;
+        '-365': BigInteger;
+        '-364': BigInteger;
+        '-363': BigInteger;
+        '-362': BigInteger;
+        '-361': BigInteger;
+        '-360': BigInteger;
+        '-359': BigInteger;
+        '-358': BigInteger;
+        '-357': BigInteger;
+        '-356': BigInteger;
+        '-355': BigInteger;
+        '-354': BigInteger;
+        '-353': BigInteger;
+        '-352': BigInteger;
+        '-351': BigInteger;
+        '-350': BigInteger;
+        '-349': BigInteger;
+        '-348': BigInteger;
+        '-347': BigInteger;
+        '-346': BigInteger;
+        '-345': BigInteger;
+        '-344': BigInteger;
+        '-343': BigInteger;
+        '-342': BigInteger;
+        '-341': BigInteger;
+        '-340': BigInteger;
+        '-339': BigInteger;
+        '-338': BigInteger;
+        '-337': BigInteger;
+        '-336': BigInteger;
+        '-335': BigInteger;
+        '-334': BigInteger;
+        '-333': BigInteger;
+        '-332': BigInteger;
+        '-331': BigInteger;
+        '-330': BigInteger;
+        '-329': BigInteger;
+        '-328': BigInteger;
+        '-327': BigInteger;
+        '-326': BigInteger;
+        '-325': BigInteger;
+        '-324': BigInteger;
+        '-323': BigInteger;
+        '-322': BigInteger;
+        '-321': BigInteger;
+        '-320': BigInteger;
+        '-319': BigInteger;
+        '-318': BigInteger;
+        '-317': BigInteger;
+        '-316': BigInteger;
+        '-315': BigInteger;
+        '-314': BigInteger;
+        '-313': BigInteger;
+        '-312': BigInteger;
+        '-311': BigInteger;
+        '-310': BigInteger;
+        '-309': BigInteger;
+        '-308': BigInteger;
+        '-307': BigInteger;
+        '-306': BigInteger;
+        '-305': BigInteger;
+        '-304': BigInteger;
+        '-303': BigInteger;
+        '-302': BigInteger;
+        '-301': BigInteger;
+        '-300': BigInteger;
+        '-299': BigInteger;
+        '-298': BigInteger;
+        '-297': BigInteger;
+        '-296': BigInteger;
+        '-295': BigInteger;
+        '-294': BigInteger;
+        '-293': BigInteger;
+        '-292': BigInteger;
+        '-291': BigInteger;
+        '-290': BigInteger;
+        '-289': BigInteger;
+        '-288': BigInteger;
+        '-287': BigInteger;
+        '-286': BigInteger;
+        '-285': BigInteger;
+        '-284': BigInteger;
+        '-283': BigInteger;
+        '-282': BigInteger;
+        '-281': BigInteger;
+        '-280': BigInteger;
+        '-279': BigInteger;
+        '-278': BigInteger;
+        '-277': BigInteger;
+        '-276': BigInteger;
+        '-275': BigInteger;
+        '-274': BigInteger;
+        '-273': BigInteger;
+        '-272': BigInteger;
+        '-271': BigInteger;
+        '-270': BigInteger;
+        '-269': BigInteger;
+        '-268': BigInteger;
+        '-267': BigInteger;
+        '-266': BigInteger;
+        '-265': BigInteger;
+        '-264': BigInteger;
+        '-263': BigInteger;
+        '-262': BigInteger;
+        '-261': BigInteger;
+        '-260': BigInteger;
+        '-259': BigInteger;
+        '-258': BigInteger;
+        '-257': BigInteger;
+        '-256': BigInteger;
+        '-255': BigInteger;
+        '-254': BigInteger;
+        '-253': BigInteger;
+        '-252': BigInteger;
+        '-251': BigInteger;
+        '-250': BigInteger;
+        '-249': BigInteger;
+        '-248': BigInteger;
+        '-247': BigInteger;
+        '-246': BigInteger;
+        '-245': BigInteger;
+        '-244': BigInteger;
+        '-243': BigInteger;
+        '-242': BigInteger;
+        '-241': BigInteger;
+        '-240': BigInteger;
+        '-239': BigInteger;
+        '-238': BigInteger;
+        '-237': BigInteger;
+        '-236': BigInteger;
+        '-235': BigInteger;
+        '-234': BigInteger;
+        '-233': BigInteger;
+        '-232': BigInteger;
+        '-231': BigInteger;
+        '-230': BigInteger;
+        '-229': BigInteger;
+        '-228': BigInteger;
+        '-227': BigInteger;
+        '-226': BigInteger;
+        '-225': BigInteger;
+        '-224': BigInteger;
+        '-223': BigInteger;
+        '-222': BigInteger;
+        '-221': BigInteger;
+        '-220': BigInteger;
+        '-219': BigInteger;
+        '-218': BigInteger;
+        '-217': BigInteger;
+        '-216': BigInteger;
+        '-215': BigInteger;
+        '-214': BigInteger;
+        '-213': BigInteger;
+        '-212': BigInteger;
+        '-211': BigInteger;
+        '-210': BigInteger;
+        '-209': BigInteger;
+        '-208': BigInteger;
+        '-207': BigInteger;
+        '-206': BigInteger;
+        '-205': BigInteger;
+        '-204': BigInteger;
+        '-203': BigInteger;
+        '-202': BigInteger;
+        '-201': BigInteger;
+        '-200': BigInteger;
+        '-199': BigInteger;
+        '-198': BigInteger;
+        '-197': BigInteger;
+        '-196': BigInteger;
+        '-195': BigInteger;
+        '-194': BigInteger;
+        '-193': BigInteger;
+        '-192': BigInteger;
+        '-191': BigInteger;
+        '-190': BigInteger;
+        '-189': BigInteger;
+        '-188': BigInteger;
+        '-187': BigInteger;
+        '-186': BigInteger;
+        '-185': BigInteger;
+        '-184': BigInteger;
+        '-183': BigInteger;
+        '-182': BigInteger;
+        '-181': BigInteger;
+        '-180': BigInteger;
+        '-179': BigInteger;
+        '-178': BigInteger;
+        '-177': BigInteger;
+        '-176': BigInteger;
+        '-175': BigInteger;
+        '-174': BigInteger;
+        '-173': BigInteger;
+        '-172': BigInteger;
+        '-171': BigInteger;
+        '-170': BigInteger;
+        '-169': BigInteger;
+        '-168': BigInteger;
+        '-167': BigInteger;
+        '-166': BigInteger;
+        '-165': BigInteger;
+        '-164': BigInteger;
+        '-163': BigInteger;
+        '-162': BigInteger;
+        '-161': BigInteger;
+        '-160': BigInteger;
+        '-159': BigInteger;
+        '-158': BigInteger;
+        '-157': BigInteger;
+        '-156': BigInteger;
+        '-155': BigInteger;
+        '-154': BigInteger;
+        '-153': BigInteger;
+        '-152': BigInteger;
+        '-151': BigInteger;
+        '-150': BigInteger;
+        '-149': BigInteger;
+        '-148': BigInteger;
+        '-147': BigInteger;
+        '-146': BigInteger;
+        '-145': BigInteger;
+        '-144': BigInteger;
+        '-143': BigInteger;
+        '-142': BigInteger;
+        '-141': BigInteger;
+        '-140': BigInteger;
+        '-139': BigInteger;
+        '-138': BigInteger;
+        '-137': BigInteger;
+        '-136': BigInteger;
+        '-135': BigInteger;
+        '-134': BigInteger;
+        '-133': BigInteger;
+        '-132': BigInteger;
+        '-131': BigInteger;
+        '-130': BigInteger;
+        '-129': BigInteger;
+        '-128': BigInteger;
+        '-127': BigInteger;
+        '-126': BigInteger;
+        '-125': BigInteger;
+        '-124': BigInteger;
+        '-123': BigInteger;
+        '-122': BigInteger;
+        '-121': BigInteger;
+        '-120': BigInteger;
+        '-119': BigInteger;
+        '-118': BigInteger;
+        '-117': BigInteger;
+        '-116': BigInteger;
+        '-115': BigInteger;
+        '-114': BigInteger;
+        '-113': BigInteger;
+        '-112': BigInteger;
+        '-111': BigInteger;
+        '-110': BigInteger;
+        '-109': BigInteger;
+        '-108': BigInteger;
+        '-107': BigInteger;
+        '-106': BigInteger;
+        '-105': BigInteger;
+        '-104': BigInteger;
+        '-103': BigInteger;
+        '-102': BigInteger;
+        '-101': BigInteger;
+        '-100': BigInteger;
+        '-99': BigInteger;
+        '-98': BigInteger;
+        '-97': BigInteger;
+        '-96': BigInteger;
+        '-95': BigInteger;
+        '-94': BigInteger;
+        '-93': BigInteger;
+        '-92': BigInteger;
+        '-91': BigInteger;
+        '-90': BigInteger;
+        '-89': BigInteger;
+        '-88': BigInteger;
+        '-87': BigInteger;
+        '-86': BigInteger;
+        '-85': BigInteger;
+        '-84': BigInteger;
+        '-83': BigInteger;
+        '-82': BigInteger;
+        '-81': BigInteger;
+        '-80': BigInteger;
+        '-79': BigInteger;
+        '-78': BigInteger;
+        '-77': BigInteger;
+        '-76': BigInteger;
+        '-75': BigInteger;
+        '-74': BigInteger;
+        '-73': BigInteger;
+        '-72': BigInteger;
+        '-71': BigInteger;
+        '-70': BigInteger;
+        '-69': BigInteger;
+        '-68': BigInteger;
+        '-67': BigInteger;
+        '-66': BigInteger;
+        '-65': BigInteger;
+        '-64': BigInteger;
+        '-63': BigInteger;
+        '-62': BigInteger;
+        '-61': BigInteger;
+        '-60': BigInteger;
+        '-59': BigInteger;
+        '-58': BigInteger;
+        '-57': BigInteger;
+        '-56': BigInteger;
+        '-55': BigInteger;
+        '-54': BigInteger;
+        '-53': BigInteger;
+        '-52': BigInteger;
+        '-51': BigInteger;
+        '-50': BigInteger;
+        '-49': BigInteger;
+        '-48': BigInteger;
+        '-47': BigInteger;
+        '-46': BigInteger;
+        '-45': BigInteger;
+        '-44': BigInteger;
+        '-43': BigInteger;
+        '-42': BigInteger;
+        '-41': BigInteger;
+        '-40': BigInteger;
+        '-39': BigInteger;
+        '-38': BigInteger;
+        '-37': BigInteger;
+        '-36': BigInteger;
+        '-35': BigInteger;
+        '-34': BigInteger;
+        '-33': BigInteger;
+        '-32': BigInteger;
+        '-31': BigInteger;
+        '-30': BigInteger;
+        '-29': BigInteger;
+        '-28': BigInteger;
+        '-27': BigInteger;
+        '-26': BigInteger;
+        '-25': BigInteger;
+        '-24': BigInteger;
+        '-23': BigInteger;
+        '-22': BigInteger;
+        '-21': BigInteger;
+        '-20': BigInteger;
+        '-19': BigInteger;
+        '-18': BigInteger;
+        '-17': BigInteger;
+        '-16': BigInteger;
+        '-15': BigInteger;
+        '-14': BigInteger;
+        '-13': BigInteger;
+        '-12': BigInteger;
+        '-11': BigInteger;
+        '-10': BigInteger;
+        '-9': BigInteger;
+        '-8': BigInteger;
+        '-7': BigInteger;
+        '-6': BigInteger;
+        '-5': BigInteger;
+        '-4': BigInteger;
+        '-3': BigInteger;
+        '-2': BigInteger;
+        '-1': BigInteger;
+        '0': BigInteger;
+        '1': BigInteger;
+        '2': BigInteger;
+        '3': BigInteger;
+        '4': BigInteger;
+        '5': BigInteger;
+        '6': BigInteger;
+        '7': BigInteger;
+        '8': BigInteger;
+        '9': BigInteger;
+        '10': BigInteger;
+        '11': BigInteger;
+        '12': BigInteger;
+        '13': BigInteger;
+        '14': BigInteger;
+        '15': BigInteger;
+        '16': BigInteger;
+        '17': BigInteger;
+        '18': BigInteger;
+        '19': BigInteger;
+        '20': BigInteger;
+        '21': BigInteger;
+        '22': BigInteger;
+        '23': BigInteger;
+        '24': BigInteger;
+        '25': BigInteger;
+        '26': BigInteger;
+        '27': BigInteger;
+        '28': BigInteger;
+        '29': BigInteger;
+        '30': BigInteger;
+        '31': BigInteger;
+        '32': BigInteger;
+        '33': BigInteger;
+        '34': BigInteger;
+        '35': BigInteger;
+        '36': BigInteger;
+        '37': BigInteger;
+        '38': BigInteger;
+        '39': BigInteger;
+        '40': BigInteger;
+        '41': BigInteger;
+        '42': BigInteger;
+        '43': BigInteger;
+        '44': BigInteger;
+        '45': BigInteger;
+        '46': BigInteger;
+        '47': BigInteger;
+        '48': BigInteger;
+        '49': BigInteger;
+        '50': BigInteger;
+        '51': BigInteger;
+        '52': BigInteger;
+        '53': BigInteger;
+        '54': BigInteger;
+        '55': BigInteger;
+        '56': BigInteger;
+        '57': BigInteger;
+        '58': BigInteger;
+        '59': BigInteger;
+        '60': BigInteger;
+        '61': BigInteger;
+        '62': BigInteger;
+        '63': BigInteger;
+        '64': BigInteger;
+        '65': BigInteger;
+        '66': BigInteger;
+        '67': BigInteger;
+        '68': BigInteger;
+        '69': BigInteger;
+        '70': BigInteger;
+        '71': BigInteger;
+        '72': BigInteger;
+        '73': BigInteger;
+        '74': BigInteger;
+        '75': BigInteger;
+        '76': BigInteger;
+        '77': BigInteger;
+        '78': BigInteger;
+        '79': BigInteger;
+        '80': BigInteger;
+        '81': BigInteger;
+        '82': BigInteger;
+        '83': BigInteger;
+        '84': BigInteger;
+        '85': BigInteger;
+        '86': BigInteger;
+        '87': BigInteger;
+        '88': BigInteger;
+        '89': BigInteger;
+        '90': BigInteger;
+        '91': BigInteger;
+        '92': BigInteger;
+        '93': BigInteger;
+        '94': BigInteger;
+        '95': BigInteger;
+        '96': BigInteger;
+        '97': BigInteger;
+        '98': BigInteger;
+        '99': BigInteger;
+        '100': BigInteger;
+        '101': BigInteger;
+        '102': BigInteger;
+        '103': BigInteger;
+        '104': BigInteger;
+        '105': BigInteger;
+        '106': BigInteger;
+        '107': BigInteger;
+        '108': BigInteger;
+        '109': BigInteger;
+        '110': BigInteger;
+        '111': BigInteger;
+        '112': BigInteger;
+        '113': BigInteger;
+        '114': BigInteger;
+        '115': BigInteger;
+        '116': BigInteger;
+        '117': BigInteger;
+        '118': BigInteger;
+        '119': BigInteger;
+        '120': BigInteger;
+        '121': BigInteger;
+        '122': BigInteger;
+        '123': BigInteger;
+        '124': BigInteger;
+        '125': BigInteger;
+        '126': BigInteger;
+        '127': BigInteger;
+        '128': BigInteger;
+        '129': BigInteger;
+        '130': BigInteger;
+        '131': BigInteger;
+        '132': BigInteger;
+        '133': BigInteger;
+        '134': BigInteger;
+        '135': BigInteger;
+        '136': BigInteger;
+        '137': BigInteger;
+        '138': BigInteger;
+        '139': BigInteger;
+        '140': BigInteger;
+        '141': BigInteger;
+        '142': BigInteger;
+        '143': BigInteger;
+        '144': BigInteger;
+        '145': BigInteger;
+        '146': BigInteger;
+        '147': BigInteger;
+        '148': BigInteger;
+        '149': BigInteger;
+        '150': BigInteger;
+        '151': BigInteger;
+        '152': BigInteger;
+        '153': BigInteger;
+        '154': BigInteger;
+        '155': BigInteger;
+        '156': BigInteger;
+        '157': BigInteger;
+        '158': BigInteger;
+        '159': BigInteger;
+        '160': BigInteger;
+        '161': BigInteger;
+        '162': BigInteger;
+        '163': BigInteger;
+        '164': BigInteger;
+        '165': BigInteger;
+        '166': BigInteger;
+        '167': BigInteger;
+        '168': BigInteger;
+        '169': BigInteger;
+        '170': BigInteger;
+        '171': BigInteger;
+        '172': BigInteger;
+        '173': BigInteger;
+        '174': BigInteger;
+        '175': BigInteger;
+        '176': BigInteger;
+        '177': BigInteger;
+        '178': BigInteger;
+        '179': BigInteger;
+        '180': BigInteger;
+        '181': BigInteger;
+        '182': BigInteger;
+        '183': BigInteger;
+        '184': BigInteger;
+        '185': BigInteger;
+        '186': BigInteger;
+        '187': BigInteger;
+        '188': BigInteger;
+        '189': BigInteger;
+        '190': BigInteger;
+        '191': BigInteger;
+        '192': BigInteger;
+        '193': BigInteger;
+        '194': BigInteger;
+        '195': BigInteger;
+        '196': BigInteger;
+        '197': BigInteger;
+        '198': BigInteger;
+        '199': BigInteger;
+        '200': BigInteger;
+        '201': BigInteger;
+        '202': BigInteger;
+        '203': BigInteger;
+        '204': BigInteger;
+        '205': BigInteger;
+        '206': BigInteger;
+        '207': BigInteger;
+        '208': BigInteger;
+        '209': BigInteger;
+        '210': BigInteger;
+        '211': BigInteger;
+        '212': BigInteger;
+        '213': BigInteger;
+        '214': BigInteger;
+        '215': BigInteger;
+        '216': BigInteger;
+        '217': BigInteger;
+        '218': BigInteger;
+        '219': BigInteger;
+        '220': BigInteger;
+        '221': BigInteger;
+        '222': BigInteger;
+        '223': BigInteger;
+        '224': BigInteger;
+        '225': BigInteger;
+        '226': BigInteger;
+        '227': BigInteger;
+        '228': BigInteger;
+        '229': BigInteger;
+        '230': BigInteger;
+        '231': BigInteger;
+        '232': BigInteger;
+        '233': BigInteger;
+        '234': BigInteger;
+        '235': BigInteger;
+        '236': BigInteger;
+        '237': BigInteger;
+        '238': BigInteger;
+        '239': BigInteger;
+        '240': BigInteger;
+        '241': BigInteger;
+        '242': BigInteger;
+        '243': BigInteger;
+        '244': BigInteger;
+        '245': BigInteger;
+        '246': BigInteger;
+        '247': BigInteger;
+        '248': BigInteger;
+        '249': BigInteger;
+        '250': BigInteger;
+        '251': BigInteger;
+        '252': BigInteger;
+        '253': BigInteger;
+        '254': BigInteger;
+        '255': BigInteger;
+        '256': BigInteger;
+        '257': BigInteger;
+        '258': BigInteger;
+        '259': BigInteger;
+        '260': BigInteger;
+        '261': BigInteger;
+        '262': BigInteger;
+        '263': BigInteger;
+        '264': BigInteger;
+        '265': BigInteger;
+        '266': BigInteger;
+        '267': BigInteger;
+        '268': BigInteger;
+        '269': BigInteger;
+        '270': BigInteger;
+        '271': BigInteger;
+        '272': BigInteger;
+        '273': BigInteger;
+        '274': BigInteger;
+        '275': BigInteger;
+        '276': BigInteger;
+        '277': BigInteger;
+        '278': BigInteger;
+        '279': BigInteger;
+        '280': BigInteger;
+        '281': BigInteger;
+        '282': BigInteger;
+        '283': BigInteger;
+        '284': BigInteger;
+        '285': BigInteger;
+        '286': BigInteger;
+        '287': BigInteger;
+        '288': BigInteger;
+        '289': BigInteger;
+        '290': BigInteger;
+        '291': BigInteger;
+        '292': BigInteger;
+        '293': BigInteger;
+        '294': BigInteger;
+        '295': BigInteger;
+        '296': BigInteger;
+        '297': BigInteger;
+        '298': BigInteger;
+        '299': BigInteger;
+        '300': BigInteger;
+        '301': BigInteger;
+        '302': BigInteger;
+        '303': BigInteger;
+        '304': BigInteger;
+        '305': BigInteger;
+        '306': BigInteger;
+        '307': BigInteger;
+        '308': BigInteger;
+        '309': BigInteger;
+        '310': BigInteger;
+        '311': BigInteger;
+        '312': BigInteger;
+        '313': BigInteger;
+        '314': BigInteger;
+        '315': BigInteger;
+        '316': BigInteger;
+        '317': BigInteger;
+        '318': BigInteger;
+        '319': BigInteger;
+        '320': BigInteger;
+        '321': BigInteger;
+        '322': BigInteger;
+        '323': BigInteger;
+        '324': BigInteger;
+        '325': BigInteger;
+        '326': BigInteger;
+        '327': BigInteger;
+        '328': BigInteger;
+        '329': BigInteger;
+        '330': BigInteger;
+        '331': BigInteger;
+        '332': BigInteger;
+        '333': BigInteger;
+        '334': BigInteger;
+        '335': BigInteger;
+        '336': BigInteger;
+        '337': BigInteger;
+        '338': BigInteger;
+        '339': BigInteger;
+        '340': BigInteger;
+        '341': BigInteger;
+        '342': BigInteger;
+        '343': BigInteger;
+        '344': BigInteger;
+        '345': BigInteger;
+        '346': BigInteger;
+        '347': BigInteger;
+        '348': BigInteger;
+        '349': BigInteger;
+        '350': BigInteger;
+        '351': BigInteger;
+        '352': BigInteger;
+        '353': BigInteger;
+        '354': BigInteger;
+        '355': BigInteger;
+        '356': BigInteger;
+        '357': BigInteger;
+        '358': BigInteger;
+        '359': BigInteger;
+        '360': BigInteger;
+        '361': BigInteger;
+        '362': BigInteger;
+        '363': BigInteger;
+        '364': BigInteger;
+        '365': BigInteger;
+        '366': BigInteger;
+        '367': BigInteger;
+        '368': BigInteger;
+        '369': BigInteger;
+        '370': BigInteger;
+        '371': BigInteger;
+        '372': BigInteger;
+        '373': BigInteger;
+        '374': BigInteger;
+        '375': BigInteger;
+        '376': BigInteger;
+        '377': BigInteger;
+        '378': BigInteger;
+        '379': BigInteger;
+        '380': BigInteger;
+        '381': BigInteger;
+        '382': BigInteger;
+        '383': BigInteger;
+        '384': BigInteger;
+        '385': BigInteger;
+        '386': BigInteger;
+        '387': BigInteger;
+        '388': BigInteger;
+        '389': BigInteger;
+        '390': BigInteger;
+        '391': BigInteger;
+        '392': BigInteger;
+        '393': BigInteger;
+        '394': BigInteger;
+        '395': BigInteger;
+        '396': BigInteger;
+        '397': BigInteger;
+        '398': BigInteger;
+        '399': BigInteger;
+        '400': BigInteger;
+        '401': BigInteger;
+        '402': BigInteger;
+        '403': BigInteger;
+        '404': BigInteger;
+        '405': BigInteger;
+        '406': BigInteger;
+        '407': BigInteger;
+        '408': BigInteger;
+        '409': BigInteger;
+        '410': BigInteger;
+        '411': BigInteger;
+        '412': BigInteger;
+        '413': BigInteger;
+        '414': BigInteger;
+        '415': BigInteger;
+        '416': BigInteger;
+        '417': BigInteger;
+        '418': BigInteger;
+        '419': BigInteger;
+        '420': BigInteger;
+        '421': BigInteger;
+        '422': BigInteger;
+        '423': BigInteger;
+        '424': BigInteger;
+        '425': BigInteger;
+        '426': BigInteger;
+        '427': BigInteger;
+        '428': BigInteger;
+        '429': BigInteger;
+        '430': BigInteger;
+        '431': BigInteger;
+        '432': BigInteger;
+        '433': BigInteger;
+        '434': BigInteger;
+        '435': BigInteger;
+        '436': BigInteger;
+        '437': BigInteger;
+        '438': BigInteger;
+        '439': BigInteger;
+        '440': BigInteger;
+        '441': BigInteger;
+        '442': BigInteger;
+        '443': BigInteger;
+        '444': BigInteger;
+        '445': BigInteger;
+        '446': BigInteger;
+        '447': BigInteger;
+        '448': BigInteger;
+        '449': BigInteger;
+        '450': BigInteger;
+        '451': BigInteger;
+        '452': BigInteger;
+        '453': BigInteger;
+        '454': BigInteger;
+        '455': BigInteger;
+        '456': BigInteger;
+        '457': BigInteger;
+        '458': BigInteger;
+        '459': BigInteger;
+        '460': BigInteger;
+        '461': BigInteger;
+        '462': BigInteger;
+        '463': BigInteger;
+        '464': BigInteger;
+        '465': BigInteger;
+        '466': BigInteger;
+        '467': BigInteger;
+        '468': BigInteger;
+        '469': BigInteger;
+        '470': BigInteger;
+        '471': BigInteger;
+        '472': BigInteger;
+        '473': BigInteger;
+        '474': BigInteger;
+        '475': BigInteger;
+        '476': BigInteger;
+        '477': BigInteger;
+        '478': BigInteger;
+        '479': BigInteger;
+        '480': BigInteger;
+        '481': BigInteger;
+        '482': BigInteger;
+        '483': BigInteger;
+        '484': BigInteger;
+        '485': BigInteger;
+        '486': BigInteger;
+        '487': BigInteger;
+        '488': BigInteger;
+        '489': BigInteger;
+        '490': BigInteger;
+        '491': BigInteger;
+        '492': BigInteger;
+        '493': BigInteger;
+        '494': BigInteger;
+        '495': BigInteger;
+        '496': BigInteger;
+        '497': BigInteger;
+        '498': BigInteger;
+        '499': BigInteger;
+        '500': BigInteger;
+        '501': BigInteger;
+        '502': BigInteger;
+        '503': BigInteger;
+        '504': BigInteger;
+        '505': BigInteger;
+        '506': BigInteger;
+        '507': BigInteger;
+        '508': BigInteger;
+        '509': BigInteger;
+        '510': BigInteger;
+        '511': BigInteger;
+        '512': BigInteger;
+        '513': BigInteger;
+        '514': BigInteger;
+        '515': BigInteger;
+        '516': BigInteger;
+        '517': BigInteger;
+        '518': BigInteger;
+        '519': BigInteger;
+        '520': BigInteger;
+        '521': BigInteger;
+        '522': BigInteger;
+        '523': BigInteger;
+        '524': BigInteger;
+        '525': BigInteger;
+        '526': BigInteger;
+        '527': BigInteger;
+        '528': BigInteger;
+        '529': BigInteger;
+        '530': BigInteger;
+        '531': BigInteger;
+        '532': BigInteger;
+        '533': BigInteger;
+        '534': BigInteger;
+        '535': BigInteger;
+        '536': BigInteger;
+        '537': BigInteger;
+        '538': BigInteger;
+        '539': BigInteger;
+        '540': BigInteger;
+        '541': BigInteger;
+        '542': BigInteger;
+        '543': BigInteger;
+        '544': BigInteger;
+        '545': BigInteger;
+        '546': BigInteger;
+        '547': BigInteger;
+        '548': BigInteger;
+        '549': BigInteger;
+        '550': BigInteger;
+        '551': BigInteger;
+        '552': BigInteger;
+        '553': BigInteger;
+        '554': BigInteger;
+        '555': BigInteger;
+        '556': BigInteger;
+        '557': BigInteger;
+        '558': BigInteger;
+        '559': BigInteger;
+        '560': BigInteger;
+        '561': BigInteger;
+        '562': BigInteger;
+        '563': BigInteger;
+        '564': BigInteger;
+        '565': BigInteger;
+        '566': BigInteger;
+        '567': BigInteger;
+        '568': BigInteger;
+        '569': BigInteger;
+        '570': BigInteger;
+        '571': BigInteger;
+        '572': BigInteger;
+        '573': BigInteger;
+        '574': BigInteger;
+        '575': BigInteger;
+        '576': BigInteger;
+        '577': BigInteger;
+        '578': BigInteger;
+        '579': BigInteger;
+        '580': BigInteger;
+        '581': BigInteger;
+        '582': BigInteger;
+        '583': BigInteger;
+        '584': BigInteger;
+        '585': BigInteger;
+        '586': BigInteger;
+        '587': BigInteger;
+        '588': BigInteger;
+        '589': BigInteger;
+        '590': BigInteger;
+        '591': BigInteger;
+        '592': BigInteger;
+        '593': BigInteger;
+        '594': BigInteger;
+        '595': BigInteger;
+        '596': BigInteger;
+        '597': BigInteger;
+        '598': BigInteger;
+        '599': BigInteger;
+        '600': BigInteger;
+        '601': BigInteger;
+        '602': BigInteger;
+        '603': BigInteger;
+        '604': BigInteger;
+        '605': BigInteger;
+        '606': BigInteger;
+        '607': BigInteger;
+        '608': BigInteger;
+        '609': BigInteger;
+        '610': BigInteger;
+        '611': BigInteger;
+        '612': BigInteger;
+        '613': BigInteger;
+        '614': BigInteger;
+        '615': BigInteger;
+        '616': BigInteger;
+        '617': BigInteger;
+        '618': BigInteger;
+        '619': BigInteger;
+        '620': BigInteger;
+        '621': BigInteger;
+        '622': BigInteger;
+        '623': BigInteger;
+        '624': BigInteger;
+        '625': BigInteger;
+        '626': BigInteger;
+        '627': BigInteger;
+        '628': BigInteger;
+        '629': BigInteger;
+        '630': BigInteger;
+        '631': BigInteger;
+        '632': BigInteger;
+        '633': BigInteger;
+        '634': BigInteger;
+        '635': BigInteger;
+        '636': BigInteger;
+        '637': BigInteger;
+        '638': BigInteger;
+        '639': BigInteger;
+        '640': BigInteger;
+        '641': BigInteger;
+        '642': BigInteger;
+        '643': BigInteger;
+        '644': BigInteger;
+        '645': BigInteger;
+        '646': BigInteger;
+        '647': BigInteger;
+        '648': BigInteger;
+        '649': BigInteger;
+        '650': BigInteger;
+        '651': BigInteger;
+        '652': BigInteger;
+        '653': BigInteger;
+        '654': BigInteger;
+        '655': BigInteger;
+        '656': BigInteger;
+        '657': BigInteger;
+        '658': BigInteger;
+        '659': BigInteger;
+        '660': BigInteger;
+        '661': BigInteger;
+        '662': BigInteger;
+        '663': BigInteger;
+        '664': BigInteger;
+        '665': BigInteger;
+        '666': BigInteger;
+        '667': BigInteger;
+        '668': BigInteger;
+        '669': BigInteger;
+        '670': BigInteger;
+        '671': BigInteger;
+        '672': BigInteger;
+        '673': BigInteger;
+        '674': BigInteger;
+        '675': BigInteger;
+        '676': BigInteger;
+        '677': BigInteger;
+        '678': BigInteger;
+        '679': BigInteger;
+        '680': BigInteger;
+        '681': BigInteger;
+        '682': BigInteger;
+        '683': BigInteger;
+        '684': BigInteger;
+        '685': BigInteger;
+        '686': BigInteger;
+        '687': BigInteger;
+        '688': BigInteger;
+        '689': BigInteger;
+        '690': BigInteger;
+        '691': BigInteger;
+        '692': BigInteger;
+        '693': BigInteger;
+        '694': BigInteger;
+        '695': BigInteger;
+        '696': BigInteger;
+        '697': BigInteger;
+        '698': BigInteger;
+        '699': BigInteger;
+        '700': BigInteger;
+        '701': BigInteger;
+        '702': BigInteger;
+        '703': BigInteger;
+        '704': BigInteger;
+        '705': BigInteger;
+        '706': BigInteger;
+        '707': BigInteger;
+        '708': BigInteger;
+        '709': BigInteger;
+        '710': BigInteger;
+        '711': BigInteger;
+        '712': BigInteger;
+        '713': BigInteger;
+        '714': BigInteger;
+        '715': BigInteger;
+        '716': BigInteger;
+        '717': BigInteger;
+        '718': BigInteger;
+        '719': BigInteger;
+        '720': BigInteger;
+        '721': BigInteger;
+        '722': BigInteger;
+        '723': BigInteger;
+        '724': BigInteger;
+        '725': BigInteger;
+        '726': BigInteger;
+        '727': BigInteger;
+        '728': BigInteger;
+        '729': BigInteger;
+        '730': BigInteger;
+        '731': BigInteger;
+        '732': BigInteger;
+        '733': BigInteger;
+        '734': BigInteger;
+        '735': BigInteger;
+        '736': BigInteger;
+        '737': BigInteger;
+        '738': BigInteger;
+        '739': BigInteger;
+        '740': BigInteger;
+        '741': BigInteger;
+        '742': BigInteger;
+        '743': BigInteger;
+        '744': BigInteger;
+        '745': BigInteger;
+        '746': BigInteger;
+        '747': BigInteger;
+        '748': BigInteger;
+        '749': BigInteger;
+        '750': BigInteger;
+        '751': BigInteger;
+        '752': BigInteger;
+        '753': BigInteger;
+        '754': BigInteger;
+        '755': BigInteger;
+        '756': BigInteger;
+        '757': BigInteger;
+        '758': BigInteger;
+        '759': BigInteger;
+        '760': BigInteger;
+        '761': BigInteger;
+        '762': BigInteger;
+        '763': BigInteger;
+        '764': BigInteger;
+        '765': BigInteger;
+        '766': BigInteger;
+        '767': BigInteger;
+        '768': BigInteger;
+        '769': BigInteger;
+        '770': BigInteger;
+        '771': BigInteger;
+        '772': BigInteger;
+        '773': BigInteger;
+        '774': BigInteger;
+        '775': BigInteger;
+        '776': BigInteger;
+        '777': BigInteger;
+        '778': BigInteger;
+        '779': BigInteger;
+        '780': BigInteger;
+        '781': BigInteger;
+        '782': BigInteger;
+        '783': BigInteger;
+        '784': BigInteger;
+        '785': BigInteger;
+        '786': BigInteger;
+        '787': BigInteger;
+        '788': BigInteger;
+        '789': BigInteger;
+        '790': BigInteger;
+        '791': BigInteger;
+        '792': BigInteger;
+        '793': BigInteger;
+        '794': BigInteger;
+        '795': BigInteger;
+        '796': BigInteger;
+        '797': BigInteger;
+        '798': BigInteger;
+        '799': BigInteger;
+        '800': BigInteger;
+        '801': BigInteger;
+        '802': BigInteger;
+        '803': BigInteger;
+        '804': BigInteger;
+        '805': BigInteger;
+        '806': BigInteger;
+        '807': BigInteger;
+        '808': BigInteger;
+        '809': BigInteger;
+        '810': BigInteger;
+        '811': BigInteger;
+        '812': BigInteger;
+        '813': BigInteger;
+        '814': BigInteger;
+        '815': BigInteger;
+        '816': BigInteger;
+        '817': BigInteger;
+        '818': BigInteger;
+        '819': BigInteger;
+        '820': BigInteger;
+        '821': BigInteger;
+        '822': BigInteger;
+        '823': BigInteger;
+        '824': BigInteger;
+        '825': BigInteger;
+        '826': BigInteger;
+        '827': BigInteger;
+        '828': BigInteger;
+        '829': BigInteger;
+        '830': BigInteger;
+        '831': BigInteger;
+        '832': BigInteger;
+        '833': BigInteger;
+        '834': BigInteger;
+        '835': BigInteger;
+        '836': BigInteger;
+        '837': BigInteger;
+        '838': BigInteger;
+        '839': BigInteger;
+        '840': BigInteger;
+        '841': BigInteger;
+        '842': BigInteger;
+        '843': BigInteger;
+        '844': BigInteger;
+        '845': BigInteger;
+        '846': BigInteger;
+        '847': BigInteger;
+        '848': BigInteger;
+        '849': BigInteger;
+        '850': BigInteger;
+        '851': BigInteger;
+        '852': BigInteger;
+        '853': BigInteger;
+        '854': BigInteger;
+        '855': BigInteger;
+        '856': BigInteger;
+        '857': BigInteger;
+        '858': BigInteger;
+        '859': BigInteger;
+        '860': BigInteger;
+        '861': BigInteger;
+        '862': BigInteger;
+        '863': BigInteger;
+        '864': BigInteger;
+        '865': BigInteger;
+        '866': BigInteger;
+        '867': BigInteger;
+        '868': BigInteger;
+        '869': BigInteger;
+        '870': BigInteger;
+        '871': BigInteger;
+        '872': BigInteger;
+        '873': BigInteger;
+        '874': BigInteger;
+        '875': BigInteger;
+        '876': BigInteger;
+        '877': BigInteger;
+        '878': BigInteger;
+        '879': BigInteger;
+        '880': BigInteger;
+        '881': BigInteger;
+        '882': BigInteger;
+        '883': BigInteger;
+        '884': BigInteger;
+        '885': BigInteger;
+        '886': BigInteger;
+        '887': BigInteger;
+        '888': BigInteger;
+        '889': BigInteger;
+        '890': BigInteger;
+        '891': BigInteger;
+        '892': BigInteger;
+        '893': BigInteger;
+        '894': BigInteger;
+        '895': BigInteger;
+        '896': BigInteger;
+        '897': BigInteger;
+        '898': BigInteger;
+        '899': BigInteger;
+        '900': BigInteger;
+        '901': BigInteger;
+        '902': BigInteger;
+        '903': BigInteger;
+        '904': BigInteger;
+        '905': BigInteger;
+        '906': BigInteger;
+        '907': BigInteger;
+        '908': BigInteger;
+        '909': BigInteger;
+        '910': BigInteger;
+        '911': BigInteger;
+        '912': BigInteger;
+        '913': BigInteger;
+        '914': BigInteger;
+        '915': BigInteger;
+        '916': BigInteger;
+        '917': BigInteger;
+        '918': BigInteger;
+        '919': BigInteger;
+        '920': BigInteger;
+        '921': BigInteger;
+        '922': BigInteger;
+        '923': BigInteger;
+        '924': BigInteger;
+        '925': BigInteger;
+        '926': BigInteger;
+        '927': BigInteger;
+        '928': BigInteger;
+        '929': BigInteger;
+        '930': BigInteger;
+        '931': BigInteger;
+        '932': BigInteger;
+        '933': BigInteger;
+        '934': BigInteger;
+        '935': BigInteger;
+        '936': BigInteger;
+        '937': BigInteger;
+        '938': BigInteger;
+        '939': BigInteger;
+        '940': BigInteger;
+        '941': BigInteger;
+        '942': BigInteger;
+        '943': BigInteger;
+        '944': BigInteger;
+        '945': BigInteger;
+        '946': BigInteger;
+        '947': BigInteger;
+        '948': BigInteger;
+        '949': BigInteger;
+        '950': BigInteger;
+        '951': BigInteger;
+        '952': BigInteger;
+        '953': BigInteger;
+        '954': BigInteger;
+        '955': BigInteger;
+        '956': BigInteger;
+        '957': BigInteger;
+        '958': BigInteger;
+        '959': BigInteger;
+        '960': BigInteger;
+        '961': BigInteger;
+        '962': BigInteger;
+        '963': BigInteger;
+        '964': BigInteger;
+        '965': BigInteger;
+        '966': BigInteger;
+        '967': BigInteger;
+        '968': BigInteger;
+        '969': BigInteger;
+        '970': BigInteger;
+        '971': BigInteger;
+        '972': BigInteger;
+        '973': BigInteger;
+        '974': BigInteger;
+        '975': BigInteger;
+        '976': BigInteger;
+        '977': BigInteger;
+        '978': BigInteger;
+        '979': BigInteger;
+        '980': BigInteger;
+        '981': BigInteger;
+        '982': BigInteger;
+        '983': BigInteger;
+        '984': BigInteger;
+        '985': BigInteger;
+        '986': BigInteger;
+        '987': BigInteger;
+        '988': BigInteger;
+        '989': BigInteger;
+        '990': BigInteger;
+        '991': BigInteger;
+        '992': BigInteger;
+        '993': BigInteger;
+        '994': BigInteger;
+        '995': BigInteger;
+        '996': BigInteger;
+        '997': BigInteger;
+        '998': BigInteger;
+        '999': BigInteger;
+    }
+}
diff --git a/node_modules/big-integer/BigInteger.js b/node_modules/big-integer/BigInteger.js
index ad29f97..56e3792 100644
--- a/node_modules/big-integer/BigInteger.js
+++ b/node_modules/big-integer/BigInteger.js
@@ -118,7 +118,7 @@ var bigInt = (function (undefined) {
     }
 
     BigInteger.prototype.add = function (v) {
-        var value, n = parseValue(v);
+        var n = parseValue(v);
         if (this.sign !== n.sign) {
             return this.subtract(n.negate());
         }
@@ -177,7 +177,7 @@ var bigInt = (function (undefined) {
     }
 
     function subtractAny(a, b, sign) {
-        var value, isSmall;
+        var value;
         if (compareAbs(a, b) >= 0) {
             value = subtract(a,b);
         } else {
@@ -326,7 +326,7 @@ var bigInt = (function (undefined) {
     }
 
     BigInteger.prototype.multiply = function (v) {
-        var value, n = parseValue(v),
+        var n = parseValue(v),
             a = this.value, b = n.value,
             sign = this.sign !== n.sign,
             abs;
@@ -467,6 +467,7 @@ var bigInt = (function (undefined) {
             guess, xlen, highx, highy, check;
         while (a_l) {
             part.unshift(a[--a_l]);
+            trim(part);
             if (compareAbs(part, b) < 0) {
                 result.push(0);
                 continue;
@@ -825,20 +826,24 @@ var bigInt = (function (undefined) {
     BigInteger.prototype.modInv = function (n) {
         var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;
         while (!newR.equals(bigInt.zero)) {
-        	q = r.divide(newR);
-          lastT = t;
-          lastR = r;
-          t = newT;
-          r = newR;
-          newT = lastT.subtract(q.multiply(newT));
-          newR = lastR.subtract(q.multiply(newR));
+            q = r.divide(newR);
+            lastT = t;
+            lastR = r;
+            t = newT;
+            r = newR;
+            newT = lastT.subtract(q.multiply(newT));
+            newR = lastR.subtract(q.multiply(newR));
         }
         if (!r.equals(1)) throw new Error(this.toString() + " and " + n.toString() + " are not co-prime");
         if (t.compare(0) === -1) {
-        	t = t.add(n);
+            t = t.add(n);
+        }
+        if (this.isNegative()) {
+            return t.negate();
         }
         return t;
-    }
+    };
+
     SmallInteger.prototype.modInv = BigInteger.prototype.modInv;
 
     BigInteger.prototype.next = function () {
@@ -977,7 +982,7 @@ var bigInt = (function (undefined) {
         b = parseValue(b);
         return a.greater(b) ? a : b;
     }
-    function min(a,b) {
+    function min(a, b) {
         a = parseValue(a);
         b = parseValue(b);
         return a.lesser(b) ? a : b;
@@ -1032,16 +1037,32 @@ var bigInt = (function (undefined) {
         return low.add(typeof result === "number" ? new SmallInteger(result) : new BigInteger(result, false));
     }
     var parseBase = function (text, base) {
-        var val = Integer[0], pow = Integer[1],
-            length = text.length;
+        var length = text.length;
+		var i;
+		var absBase = Math.abs(base);
+		for(var i = 0; i < length; i++) {
+			var c = text[i].toLowerCase();
+			if(c === "-") continue;
+			if(/[a-z0-9]/.test(c)) {
+			    if(/[0-9]/.test(c) && +c >= absBase) {
+					if(c === "1" && absBase === 1) continue;
+                    throw new Error(c + " is not a valid digit in base " + base + ".");
+				} else if(c.charCodeAt(0) - 87 >= absBase) {
+					throw new Error(c + " is not a valid digit in base " + base + ".");
+				}
+			}
+		}
         if (2 <= base && base <= 36) {
             if (length <= LOG_MAX_INT / Math.log(base)) {
+				var result = parseInt(text, base);
+				if(isNaN(result)) {
+					throw new Error(c + " is not a valid digit in base " + base + ".");
+				}
                 return new SmallInteger(parseInt(text, base));
             }
         }
         base = parseValue(base);
         var digits = [];
-        var i;
         var isNegative = text[0] === "-";
         for (i = isNegative ? 1 : 0; i < text.length; i++) {
             var c = text[i].toLowerCase(),
@@ -1055,13 +1076,17 @@ var bigInt = (function (undefined) {
             }
             else throw new Error(c + " is not a valid character");
         }
-        digits.reverse();
-        for (i = 0; i < digits.length; i++) {
+        return parseBaseFromArray(digits, base, isNegative);
+    };
+
+    function parseBaseFromArray(digits, base, isNegative) {
+        var val = Integer[0], pow = Integer[1], i;
+        for (i = digits.length - 1; i >= 0; i--) {
             val = val.add(digits[i].times(pow));
             pow = pow.times(base);
         }
         return isNegative ? val.negate() : val;
-    };
+    }
 
     function stringify(digit) {
         var v = digit.value;
@@ -1205,6 +1230,11 @@ var bigInt = (function (undefined) {
     Integer.lcm = lcm;
     Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger; };
     Integer.randBetween = randBetween;
+
+    Integer.fromArray = function (digits, base, isNegative) {
+        return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);
+    };
+
     return Integer;
 })();
 
@@ -1212,3 +1242,10 @@ var bigInt = (function (undefined) {
 if (typeof module !== "undefined" && module.hasOwnProperty("exports")) {
     module.exports = bigInt;
 }
+
+//amd check
+if ( typeof define === "function" && define.amd ) {
+  define( "big-integer", [], function() {
+    return bigInt;
+  });
+}
diff --git a/node_modules/big-integer/BigInteger.min.js b/node_modules/big-integer/BigInteger.min.js
index 908d242..8ee9a89 100644
--- a/node_modules/big-integer/BigInteger.min.js
+++ b/node_modules/big-integer/BigInteger.min.js
@@ -1 +1 @@
-var bigInt=function(e){"use strict";function o(e,t){return typeof e=="undefined"?o[0]:typeof t!="undefined"?+t===10?Y(e):$(e,t):Y(e)}function u(e,t){this.value=e,this.sign=t,this.isSmall=!1}function a(e){this.value=e,this.sign=e<0,this.isSmall=!0}function f(e){return-r<e&&e<r}function l(e){return e<1e7?[e]:e<1e14?[e%1e7,Math.floor(e/1e7)]:[e%1e7,Math.floor(e/1e7)%1e7,Math.floor(e/1e14)]}function c(e){h(e);var n=e.length;if(n<4&&_(e,i)<0)switch(n){case 0:return 0;case 1:return e[0];case 2 [...]
\ No newline at end of file
+var bigInt=function(undefined){"use strict";var BASE=1e7,LOG_BASE=7,MAX_INT=9007199254740992,MAX_INT_ARR=smallToArray(MAX_INT),LOG_MAX_INT=Math.log(MAX_INT);function Integer(v,radix){if(typeof v==="undefined")return Integer[0];if(typeof radix!=="undefined")return+radix===10?parseValue(v):parseBase(v,radix);return parseValue(v)}function BigInteger(value,sign){this.value=value;this.sign=sign;this.isSmall=false}BigInteger.prototype=Object.create(Integer.prototype);function SmallInteger(valu [...]
\ No newline at end of file
diff --git a/node_modules/big-integer/README.md b/node_modules/big-integer/README.md
index 51eb657..5824f7e 100644
--- a/node_modules/big-integer/README.md
+++ b/node_modules/big-integer/README.md
@@ -211,7 +211,7 @@ Returns `true` if the number is prime, `false` otherwise.
 
 #### `isProbablePrime([iterations])`
 
-Returns `true` if the number is very likely to be positive, `false` otherwise.
+Returns `true` if the number is very likely to be prime, `false` otherwise.
 Argument is optional and determines the amount of iterations of the test (default: `5`). The more iterations, the lower chance of getting a false positive.
 This uses the [Fermat primality test](https://en.wikipedia.org/wiki/Fermat_primality_test).
 
@@ -421,6 +421,13 @@ Performs the bitwise XOR operation. The operands are treated as if they were rep
  
 ### Static Methods
 
+#### `fromArray(digits, base = 10, isNegative?)`
+
+Constructs a bigInt from an array of digits in base `base`. The optional `isNegative` flag will make the number negative.
+
+ - `bigInt.fromArray([1, 2, 3, 4, 5], 10)` => `12345`
+ - `bigInt.fromArray([1, 0, 0], 2, true)` => `-4`
+
 #### `gcd(a, b)`
 
 Finds the greatest common denominator of `a` and `b`.
@@ -510,4 +517,4 @@ There are performance benchmarks that can be viewed from the `benchmarks/index.h
 
 ## License
 
-This project is public domain. For more details, read about the [Unlicense](http://unlicense.org/).
\ No newline at end of file
+This project is public domain. For more details, read about the [Unlicense](http://unlicense.org/).
diff --git a/node_modules/big-integer/bower.json b/node_modules/big-integer/bower.json
index c7c7291..22dc58f 100644
--- a/node_modules/big-integer/bower.json
+++ b/node_modules/big-integer/bower.json
@@ -24,7 +24,6 @@
     "bower_components",
     "test",
     "coverage",
-    "spec",
     "tests"
   ]
 }
diff --git a/node_modules/big-integer/package.json b/node_modules/big-integer/package.json
index 71042a8..d14842e 100644
--- a/node_modules/big-integer/package.json
+++ b/node_modules/big-integer/package.json
@@ -10,23 +10,23 @@
         "spec": ">=1.6.7 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/bplist-parser"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/bplist-parser"
     ]
   ],
   "_from": "big-integer@>=1.6.7 <2.0.0",
-  "_id": "big-integer@1.6.17",
+  "_id": "big-integer@1.6.24",
   "_inCache": true,
   "_location": "/big-integer",
-  "_nodeVersion": "4.4.5",
+  "_nodeVersion": "6.10.3",
   "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/big-integer-1.6.17.tgz_1478721202721_0.8068355675786734"
+    "host": "s3://npm-registry-packages",
+    "tmp": "tmp/big-integer-1.6.24.tgz_1503027511676_0.881959781749174"
   },
   "_npmUser": {
     "name": "peterolson",
     "email": "peter.e.c.olson+npm@gmail.com"
   },
-  "_npmVersion": "2.15.5",
+  "_npmVersion": "3.10.10",
   "_phantomChildren": {},
   "_requested": {
     "raw": "big-integer@^1.6.7",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/bplist-parser"
   ],
-  "_resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.17.tgz",
-  "_shasum": "f0dcf5109a949e42a993ee3e8fb2070452817b51",
+  "_resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.24.tgz",
+  "_shasum": "1ed84d018ac3c1c72b307e7f7d94008e8ee20311",
   "_shrinkwrap": null,
   "_spec": "big-integer@^1.6.7",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/bplist-parser",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/bplist-parser",
   "author": {
     "name": "Peter Olson",
     "email": "peter.e.c.olson+npm@gmail.com"
@@ -57,23 +57,28 @@
   "dependencies": {},
   "description": "An arbitrary length integer library for Javascript",
   "devDependencies": {
+    "@types/lodash": "^4.14.64",
+    "@types/node": "^7.0.22",
     "coveralls": "^2.11.4",
     "jasmine": "2.1.x",
     "jasmine-core": "^2.3.4",
     "karma": "^0.13.3",
     "karma-coverage": "^0.4.2",
     "karma-jasmine": "^0.3.6",
-    "karma-phantomjs-launcher": "~0.1"
+    "karma-phantomjs-launcher": "^1.0.4",
+    "lodash": "^4.17.4",
+    "typescript": "^2.3.3",
+    "uglifyjs": "^2.4.10"
   },
   "directories": {},
   "dist": {
-    "shasum": "f0dcf5109a949e42a993ee3e8fb2070452817b51",
-    "tarball": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.17.tgz"
+    "shasum": "1ed84d018ac3c1c72b307e7f7d94008e8ee20311",
+    "tarball": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.24.tgz"
   },
   "engines": {
     "node": ">=0.6"
   },
-  "gitHead": "d25d0bfcd96f31001ec8572c8d01de4770d99e63",
+  "gitHead": "8ac5ef5b7c4abce8e943776fa2f18d3d41697988",
   "homepage": "https://github.com/peterolson/BigInteger.js#readme",
   "keywords": [
     "math",
@@ -96,13 +101,16 @@
   ],
   "name": "big-integer",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# BigInteger.js [![Build Status][travis-img]][travis-url] [![Coverage Status][coveralls-img]][coveralls-url] [![Monthly Downloads][downloads-img]][downloads-url]\r\n\r\n[travis-url]: https://travis-ci.org/peterolson/BigInteger.js\r\n[travis-img]: https://travis-ci.org/peterolson/BigInteger.js.svg?branch=master\r\n[coveralls-url]: https://coveralls.io/github/peterolson/BigInteger.js?branch=master\r\n[coveralls-img]: https://coveralls.io/repos/peterolson/BigInteger.js/badge.sv [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+ssh://git@github.com/peterolson/BigInteger.js.git"
   },
   "scripts": {
-    "test": "karma start my.conf.js"
+    "minify": "uglifyjs BigInteger.js -o BigInteger.min.js",
+    "test": "tsc && node_modules/.bin/karma start my.conf.js && node spec/tsDefinitions.js"
   },
-  "version": "1.6.17"
+  "typings": "./BigInteger.d.ts",
+  "version": "1.6.24"
 }
diff --git a/node_modules/big-integer/tsconfig.json b/node_modules/big-integer/tsconfig.json
new file mode 100644
index 0000000..62636e8
--- /dev/null
+++ b/node_modules/big-integer/tsconfig.json
@@ -0,0 +1,25 @@
+{
+    "compilerOptions": {
+        "module": "commonjs",
+        "lib": [
+            "es6"
+        ],
+        "noImplicitAny": true,
+        "noImplicitThis": true,
+        "strictNullChecks": false,
+        "baseUrl": "./",
+        "moduleResolution": "node",
+        "allowJs": true,
+        "typeRoots": [
+            "./"
+        ],
+        "types": [
+            "node"
+        ],
+        "forceConsistentCasingInFileNames": true
+    },
+    "files": [
+        "BigInteger.d.ts",
+        "spec/tsDefinitions.ts"
+    ]
+}
\ No newline at end of file
diff --git a/node_modules/bplist-creator/package.json b/node_modules/bplist-creator/package.json
index 49da4fc..895537e 100644
--- a/node_modules/bplist-creator/package.json
+++ b/node_modules/bplist-creator/package.json
@@ -10,7 +10,7 @@
         "spec": "0.0.7",
         "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simple-plist"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/simple-plist"
     ]
   ],
   "_from": "bplist-creator@0.0.7",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/simple-plist"
   ],
-  "_resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
+  "_resolved": "http://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.7.tgz",
   "_shasum": "37df1536092824b87c42f957b01344117372ae45",
   "_shrinkwrap": null,
   "_spec": "bplist-creator@0.0.7",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simple-plist",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/simple-plist",
   "author": {
     "name": "https://github.com/nearinfinity/node-bplist-parser.git"
   },
@@ -81,7 +81,8 @@
   ],
   "name": "bplist-creator",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "bplist-parser\n=============\n\nBinary Mac OS X Plist (property list) creator.\n\n## Installation\n\n```bash\n$ npm install bplist-creator\n```\n\n## Quick Examples\n\n```javascript\nvar bplist = require('bplist-creator');\n\nvar buffer = bplist({\n  key1: [1, 2, 3]\n});\n```\n\n## Real/Double/Float handling\n\nJavascript don't have different types for `1` and `1.0`. This package\nwill automatically store numbers as the appropriate type, but can't\ndetect floats that is also [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/nearinfinity/node-bplist-creator.git"
diff --git a/node_modules/bplist-parser/package.json b/node_modules/bplist-parser/package.json
index f9ef738..669a2e7 100644
--- a/node_modules/bplist-parser/package.json
+++ b/node_modules/bplist-parser/package.json
@@ -10,7 +10,7 @@
         "spec": ">=0.1.0 <0.2.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
   "_from": "bplist-parser@>=0.1.0 <0.2.0",
@@ -34,13 +34,14 @@
     "type": "range"
   },
   "_requiredBy": [
-    "/cordova-common"
+    "/cordova-common",
+    "/simple-plist"
   ],
-  "_resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
+  "_resolved": "http://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
   "_shasum": "d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6",
   "_shrinkwrap": null,
   "_spec": "bplist-parser@^0.1.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "author": {
     "name": "Joe Ferner",
     "email": "joe.ferner@nearinfinity.com"
@@ -77,7 +78,8 @@
   ],
   "name": "bplist-parser",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "bplist-parser\n=============\n\nBinary Mac OS X Plist (property list) parser.\n\n## Installation\n\n```bash\n$ npm install bplist-parser\n```\n\n## Quick Examples\n\n```javascript\nvar bplist = require('bplist-parser');\n\nbplist.parseFile('myPlist.bplist', function(err, obj) {\n  if (err) throw err;\n\n  console.log(JSON.stringify(obj));\n});\n```\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2012 Near Infinity Corporation\n\nPermission is hereby granted, free of char [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/nearinfinity/node-bplist-parser.git"
diff --git a/node_modules/brace-expansion/README.md b/node_modules/brace-expansion/README.md
index 1793929..ed2ec1f 100644
--- a/node_modules/brace-expansion/README.md
+++ b/node_modules/brace-expansion/README.md
@@ -5,6 +5,7 @@ as known from sh/bash, in JavaScript.
 
 [![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion)
 [![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion)
+[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/)
 
 [![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion)
 
diff --git a/node_modules/brace-expansion/index.js b/node_modules/brace-expansion/index.js
index 955f27c..0478be8 100644
--- a/node_modules/brace-expansion/index.js
+++ b/node_modules/brace-expansion/index.js
@@ -106,7 +106,7 @@ function expand(str, isTop) {
   var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
   var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
   var isSequence = isNumericSequence || isAlphaSequence;
-  var isOptions = /^(.*,)+(.+)?$/.test(m.body);
+  var isOptions = m.body.indexOf(',') >= 0;
   if (!isSequence && !isOptions) {
     // {a},b}
     if (m.post.match(/,.*\}/)) {
diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json
index 4e02fe2..91ae108 100644
--- a/node_modules/brace-expansion/package.json
+++ b/node_modules/brace-expansion/package.json
@@ -2,49 +2,49 @@
   "_args": [
     [
       {
-        "raw": "brace-expansion@^1.0.0",
+        "raw": "brace-expansion@^1.1.7",
         "scope": null,
         "escapedName": "brace-expansion",
         "name": "brace-expansion",
-        "rawSpec": "^1.0.0",
-        "spec": ">=1.0.0 <2.0.0",
+        "rawSpec": "^1.1.7",
+        "spec": ">=1.1.7 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/minimatch"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/minimatch"
     ]
   ],
-  "_from": "brace-expansion@>=1.0.0 <2.0.0",
-  "_id": "brace-expansion@1.1.6",
+  "_from": "brace-expansion@>=1.1.7 <2.0.0",
+  "_id": "brace-expansion@1.1.8",
   "_inCache": true,
   "_location": "/brace-expansion",
-  "_nodeVersion": "4.4.7",
+  "_nodeVersion": "7.8.0",
   "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/brace-expansion-1.1.6.tgz_1469047715600_0.9362958471756428"
+    "host": "s3://npm-registry-packages",
+    "tmp": "tmp/brace-expansion-1.1.8.tgz_1497251980593_0.6575565172825009"
   },
   "_npmUser": {
     "name": "juliangruber",
     "email": "julian@juliangruber.com"
   },
-  "_npmVersion": "2.15.8",
+  "_npmVersion": "4.2.0",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "brace-expansion@^1.0.0",
+    "raw": "brace-expansion@^1.1.7",
     "scope": null,
     "escapedName": "brace-expansion",
     "name": "brace-expansion",
-    "rawSpec": "^1.0.0",
-    "spec": ">=1.0.0 <2.0.0",
+    "rawSpec": "^1.1.7",
+    "spec": ">=1.1.7 <2.0.0",
     "type": "range"
   },
   "_requiredBy": [
     "/minimatch"
   ],
-  "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
-  "_shasum": "7197d7eaa9b87e648390ea61fc66c84427420df9",
+  "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+  "_shasum": "c07b211c7c952ec1f8efd51a77ef0d1d3990a292",
   "_shrinkwrap": null,
-  "_spec": "brace-expansion@^1.0.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/minimatch",
+  "_spec": "brace-expansion@^1.1.7",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/minimatch",
   "author": {
     "name": "Julian Gruber",
     "email": "mail@juliangruber.com",
@@ -54,19 +54,20 @@
     "url": "https://github.com/juliangruber/brace-expansion/issues"
   },
   "dependencies": {
-    "balanced-match": "^0.4.1",
+    "balanced-match": "^1.0.0",
     "concat-map": "0.0.1"
   },
   "description": "Brace expansion as known from sh/bash",
   "devDependencies": {
+    "matcha": "^0.7.0",
     "tape": "^4.6.0"
   },
   "directories": {},
   "dist": {
-    "shasum": "7197d7eaa9b87e648390ea61fc66c84427420df9",
-    "tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz"
+    "shasum": "c07b211c7c952ec1f8efd51a77ef0d1d3990a292",
+    "tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz"
   },
-  "gitHead": "791262fa06625e9c5594cde529a21d82086af5f2",
+  "gitHead": "8f59e68bd5c915a0d624e8e39354e1ccf672edf6",
   "homepage": "https://github.com/juliangruber/brace-expansion",
   "keywords": [],
   "license": "MIT",
@@ -83,12 +84,14 @@
   ],
   "name": "brace-expansion",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# brace-expansion\n\n[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), \nas known from sh/bash, in JavaScript.\n\n[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion)\n[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion)\n[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expan [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/juliangruber/brace-expansion.git"
   },
   "scripts": {
+    "bench": "matcha test/perf/bench.js",
     "gentest": "bash test/generate.sh",
     "test": "tape test/*.js"
   },
@@ -108,5 +111,5 @@
       "android-browser/4.2..latest"
     ]
   },
-  "version": "1.1.6"
+  "version": "1.1.8"
 }
diff --git a/node_modules/concat-map/package.json b/node_modules/concat-map/package.json
index dcf9698..a098eeb 100644
--- a/node_modules/concat-map/package.json
+++ b/node_modules/concat-map/package.json
@@ -10,7 +10,7 @@
         "spec": "0.0.1",
         "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/brace-expansion"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/brace-expansion"
     ]
   ],
   "_from": "concat-map@0.0.1",
@@ -35,11 +35,11 @@
   "_requiredBy": [
     "/brace-expansion"
   ],
-  "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+  "_resolved": "http://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
   "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
   "_shrinkwrap": null,
   "_spec": "concat-map@0.0.1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/brace-expansion",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/brace-expansion",
   "author": {
     "name": "James Halliday",
     "email": "mail@substack.net",
@@ -61,7 +61,7 @@
     "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
     "tarball": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
   },
-  "homepage": "https://github.com/substack/node-concat-map",
+  "homepage": "https://github.com/substack/node-concat-map#readme",
   "keywords": [
     "concat",
     "concatMap",
@@ -79,7 +79,8 @@
   ],
   "name": "concat-map",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "concat-map\n==========\n\nConcatenative mapdashery.\n\n[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map)\n\n[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map)\n\nexample\n=======\n\n``` js\nvar concatMap = require('concat-map');\nvar xs = [ 1, 2, 3, 4, 5, 6 ];\nvar ys = concatMap(xs, function (x) {\n    return x % 2 ? [ x - 0.1, x, [...]
+  "readmeFilename": "README.markdown",
   "repository": {
     "type": "git",
     "url": "git://github.com/substack/node-concat-map.git"
diff --git a/node_modules/cordova-common/.eslintignore b/node_modules/cordova-common/.eslintignore
new file mode 100644
index 0000000..161d0c6
--- /dev/null
+++ b/node_modules/cordova-common/.eslintignore
@@ -0,0 +1 @@
+spec/fixtures/*
\ No newline at end of file
diff --git a/node_modules/cordova-common/.eslintrc.yml b/node_modules/cordova-common/.eslintrc.yml
new file mode 100644
index 0000000..7701c82
--- /dev/null
+++ b/node_modules/cordova-common/.eslintrc.yml
@@ -0,0 +1,11 @@
+root: true
+extends: semistandard
+rules:
+  indent:
+    - error
+    - 4
+  camelcase: off
+  padded-blocks: off
+  operator-linebreak: off
+  no-throw-literal: off
+  
\ No newline at end of file
diff --git a/node_modules/cordova-common/.jshintignore b/node_modules/cordova-common/.jshintignore
deleted file mode 100644
index d606f61..0000000
--- a/node_modules/cordova-common/.jshintignore
+++ /dev/null
@@ -1 +0,0 @@
-spec/fixtures/*
diff --git a/node_modules/cordova-common/.ratignore b/node_modules/cordova-common/.ratignore
index d9f5e52..f107416 100644
--- a/node_modules/cordova-common/.ratignore
+++ b/node_modules/cordova-common/.ratignore
@@ -1,3 +1,4 @@
 fixtures
 coverage
 jasmine.json
+appveyor.yml
diff --git a/node_modules/cordova-common/.travis.yml b/node_modules/cordova-common/.travis.yml
new file mode 100644
index 0000000..459273a
--- /dev/null
+++ b/node_modules/cordova-common/.travis.yml
@@ -0,0 +1,15 @@
+language: node_js
+sudo: false
+git:
+  depth: 10
+node_js:
+  - "4"
+  - "6"
+install:
+  - npm install
+  - npm install -g codecov
+script:
+  - npm test
+  - npm run cover
+after_script:
+  - codecov
diff --git a/node_modules/cordova-common/README.md b/node_modules/cordova-common/README.md
index c5dcfd5..5659c57 100644
--- a/node_modules/cordova-common/README.md
+++ b/node_modules/cordova-common/README.md
@@ -19,6 +19,10 @@
 #
 -->
 
+[![Build status](https://ci.appveyor.com/api/projects/status/wxkmo0jalsr8gane?svg=true)](https://ci.appveyor.com/project/ApacheSoftwareFoundation/cordova-common/branch/master)
+[![Build Status](https://travis-ci.org/apache/cordova-common.svg?branch=master)](https://travis-ci.org/apache/cordova-common)
+[![NPM](https://nodei.co/npm/cordova-common.png)](https://nodei.co/npm/cordova-common/)
+
 # cordova-common
 Expoeses shared functionality used by [cordova-lib](https://github.com/apache/cordova-lib/) and Cordova platforms.
 ## Exposed APIs
diff --git a/node_modules/cordova-common/RELEASENOTES.md b/node_modules/cordova-common/RELEASENOTES.md
index ffd0248..5dc4460 100644
--- a/node_modules/cordova-common/RELEASENOTES.md
+++ b/node_modules/cordova-common/RELEASENOTES.md
@@ -20,6 +20,21 @@
 -->
 # Cordova-common Release Notes
 
+### 2.1.0 (August 30, 2017)
+* [CB-13145](https://issues.apache.org/jira/browse/CB-13145) added variable replacing to `framework` tag
+* [CB-13211](https://issues.apache.org/jira/browse/CB-13211) Add `allows-arbitrary-loads-for-media` attribute parsing for `getAccesses`
+* [CB-11968](https://issues.apache.org/jira/browse/CB-11968) Added support for `<config-file>` in `config.xml`
+* [CB-12895](https://issues.apache.org/jira/browse/CB-12895) set up `eslint` and removed `jshint`
+* [CB-12785](https://issues.apache.org/jira/browse/CB-12785) added `.gitignore`, `travis`, and `appveyor` support
+* [CB-12250](https://issues.apache.org/jira/browse/CB-12250) & [CB-12409](https://issues.apache.org/jira/browse/CB-12409) *iOS*: Fix bug with escaping properties from `plist` file
+* [CB-12762](https://issues.apache.org/jira/browse/CB-12762) updated `common`, `fetch`, and `serve` `pkgJson` to point `pkgJson` repo items to github mirrors
+* [CB-12766](https://issues.apache.org/jira/browse/CB-12766) Consistently write `JSON` with 2 spaces indentation
+
+### 2.0.3 (May 02, 2017)
+* [CB-8978](https://issues.apache.org/jira/browse/CB-8978) Add option to get `resource-file` from `root`
+* [CB-11908](https://issues.apache.org/jira/browse/CB-11908) Add tests for `edit-config` in `config.xml`
+* [CB-12665](https://issues.apache.org/jira/browse/CB-12665) removed `enginestrict` since it is deprecated
+
 ### 2.0.2 (Apr 14, 2017)
 * [CB-11233](https://issues.apache.org/jira/browse/CB-11233) - Support installing frameworks into 'Embedded Binaries' section of the Xcode project
 * [CB-10438](https://issues.apache.org/jira/browse/CB-10438) - Install correct dependency version. Removed shell.remove, added pkg.json to dependency tests 1-3, and updated install.js (.replace) to fix tests in uninstall.spec.js and update to workw with jasmine 2.0
diff --git a/node_modules/ios-sim/node_modules/simctl/appveyor.yml b/node_modules/cordova-common/appveyor.yml
similarity index 98%
copy from node_modules/ios-sim/node_modules/simctl/appveyor.yml
copy to node_modules/cordova-common/appveyor.yml
index cfdd06b..94714f2 100644
--- a/node_modules/ios-sim/node_modules/simctl/appveyor.yml
+++ b/node_modules/cordova-common/appveyor.yml
@@ -1,10 +1,11 @@
 # appveyor file
 # http://www.appveyor.com/docs/appveyor-yml
+
 environment:
   matrix:
   - nodejs_version: "4"
   - nodejs_version: "6"
-
+  
 install:
   - ps: Install-Product node $env:nodejs_version
   - npm install
diff --git a/node_modules/cordova-common/package.json b/node_modules/cordova-common/package.json
index b725474..ddf1bb5 100644
--- a/node_modules/cordova-common/package.json
+++ b/node_modules/cordova-common/package.json
@@ -1,35 +1,63 @@
 {
+  "_args": [
+    [
+      {
+        "raw": "cordova-common@2.1.0",
+        "scope": null,
+        "escapedName": "cordova-common",
+        "name": "cordova-common",
+        "rawSpec": "2.1.0",
+        "spec": "2.1.0",
+        "type": "version"
+      },
+      "/Users/steveng/repo/cordova/cordova-ios"
+    ]
+  ],
+  "_from": "cordova-common@2.1.0",
+  "_id": "cordova-common@2.1.0",
+  "_inCache": true,
+  "_location": "/cordova-common",
+  "_nodeVersion": "6.6.0",
+  "_npmOperationalInternal": {
+    "host": "s3://npm-registry-packages",
+    "tmp": "tmp/cordova-common-2.1.0.tgz_1504306462859_0.04064799007028341"
+  },
+  "_npmUser": {
+    "name": "audreyso",
+    "email": "audreyeso@gmail.com"
+  },
+  "_npmVersion": "4.6.1",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "cordova-common@2.1.0",
+    "scope": null,
+    "escapedName": "cordova-common",
+    "name": "cordova-common",
+    "rawSpec": "2.1.0",
+    "spec": "2.1.0",
+    "type": "version"
+  },
+  "_requiredBy": [
+    "/"
+  ],
+  "_resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.1.0.tgz",
+  "_shasum": "bb357ee1b9825031ed9db3c56b592efe973d1640",
+  "_shrinkwrap": null,
+  "_spec": "cordova-common@2.1.0",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios",
   "author": {
     "name": "Apache Software Foundation"
   },
-  "name": "cordova-common",
-  "description": "Apache Cordova tools and platforms shared routines",
-  "license": "Apache-2.0",
-  "version": "2.0.2",
-  "repository": {
-    "type": "git",
-    "url": "git://git-wip-us.apache.org/repos/asf/cordova-common.git"
-  },
   "bugs": {
     "url": "https://issues.apache.org/jira/browse/CB",
     "email": "dev@cordova.apache.org"
   },
-  "main": "cordova-common.js",
-  "engines": {
-    "node": ">=4.0.0"
-  },
-  "engineStrict": true,
-  "scripts": {
-    "test": "npm run jshint && npm run jasmine",
-    "jshint": "jshint src && jshint spec",
-    "jasmine": "jasmine --captureExceptions --color",
-    "cover": "istanbul cover --root src --print detail jasmine"
-  },
+  "contributors": [],
   "dependencies": {
     "ansi": "^0.3.1",
     "bplist-parser": "^0.1.0",
     "cordova-registry-mapper": "^1.1.8",
-    "elementtree": "^0.1.6",
+    "elementtree": "0.1.6",
     "glob": "^5.0.13",
     "minimatch": "^3.0.0",
     "osenv": "^0.1.3",
@@ -40,61 +68,82 @@
     "underscore": "^1.8.3",
     "unorm": "^1.3.3"
   },
+  "description": "Apache Cordova tools and platforms shared routines",
   "devDependencies": {
+    "eslint": "^4.0.0",
+    "eslint-config-semistandard": "^11.0.0",
+    "eslint-config-standard": "^10.2.1",
+    "eslint-plugin-import": "^2.3.0",
+    "eslint-plugin-node": "^5.0.0",
+    "eslint-plugin-promise": "^3.5.0",
+    "eslint-plugin-standard": "^3.0.1",
     "istanbul": "^0.4.5",
     "jasmine": "^2.5.2",
-    "jshint": "^2.8.0",
     "promise-matchers": "^0.9.6",
     "rewire": "^2.5.1"
   },
-  "contributors": [],
-  "_id": "cordova-common@2.0.2",
-  "_shasum": "57467976b8afd5e0bd0a13111b66a420441601cb",
-  "_resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.0.2.tgz",
-  "_from": "cordova-common@2.0.2",
-  "_npmVersion": "2.15.11",
-  "_nodeVersion": "4.7.3",
-  "_npmUser": {
-    "name": "shazron",
-    "email": "shazron@gmail.com"
-  },
+  "directories": {},
   "dist": {
-    "shasum": "57467976b8afd5e0bd0a13111b66a420441601cb",
-    "tarball": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.0.2.tgz"
+    "shasum": "bb357ee1b9825031ed9db3c56b592efe973d1640",
+    "tarball": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.1.0.tgz"
+  },
+  "engines": {
+    "node": ">=4.0.0"
   },
+  "homepage": "https://github.com/apache/cordova-lib#readme",
+  "license": "Apache-2.0",
+  "main": "cordova-common.js",
   "maintainers": [
     {
-      "name": "bowserj",
-      "email": "bowserj@apache.org"
+      "name": "audreyso",
+      "email": "audreyeso@gmail.com"
     },
     {
-      "name": "filmaj",
-      "email": "maj.fil@gmail.com"
+      "name": "apachebuilds",
+      "email": "root@apache.org"
     },
     {
-      "name": "kotikov.vladimir",
-      "email": "kotikov.vladimir@gmail.com"
+      "name": "filmaj",
+      "email": "maj.fil@gmail.com"
     },
     {
-      "name": "purplecabbage",
-      "email": "purplecabbage@gmail.com"
+      "name": "timbarham",
+      "email": "npmjs@barhams.info"
     },
     {
       "name": "shazron",
       "email": "shazron@gmail.com"
     },
     {
+      "name": "bowserj",
+      "email": "bowserj@apache.org"
+    },
+    {
+      "name": "purplecabbage",
+      "email": "purplecabbage@gmail.com"
+    },
+    {
       "name": "stevegill",
       "email": "stevengill97@gmail.com"
     },
     {
-      "name": "timbarham",
-      "email": "npmjs@barhams.info"
+      "name": "kotikov.vladimir",
+      "email": "kotikov.vladimir@gmail.com"
     }
   ],
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/cordova-common-2.0.2.tgz_1492453798445_0.6290795875247568"
+  "name": "cordova-common",
+  "optionalDependencies": {},
+  "readme": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2. [...]
+  "readmeFilename": "README.md",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/apache/cordova-lib.git"
+  },
+  "scripts": {
+    "cover": "istanbul cover --root src --print detail jasmine",
+    "eslint": "eslint src && eslint spec",
+    "jasmine": "jasmine JASMINE_CONFIG_PATH=spec/support/jasmine.json",
+    "test": "npm run eslint && npm run jasmine"
   },
-  "directories": {}
+  "version": "2.1.0"
 }
diff --git a/node_modules/cordova-common/src/.jshintrc b/node_modules/cordova-common/src/.jshintrc
deleted file mode 100644
index 89a121c..0000000
--- a/node_modules/cordova-common/src/.jshintrc
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    "node": true
-  , "bitwise": true
-  , "undef": true
-  , "trailing": true
-  , "quotmark": true
-  , "indent": 4
-  , "unused": "vars"
-  , "latedef": "nofunc"
-}
diff --git a/node_modules/cordova-common/src/ActionStack.js b/node_modules/cordova-common/src/ActionStack.js
index 5ef6f84..6983c5c 100644
--- a/node_modules/cordova-common/src/ActionStack.js
+++ b/node_modules/cordova-common/src/ActionStack.js
@@ -19,32 +19,32 @@
 
 /* jshint quotmark:false */
 
-var events = require('./events'),
-    Q = require('q');
+var events = require('./events');
+var Q = require('q');
 
-function ActionStack() {
+function ActionStack () {
     this.stack = [];
     this.completed = [];
 }
 
 ActionStack.prototype = {
-    createAction:function(handler, action_params, reverter, revert_params) {
+    createAction: function (handler, action_params, reverter, revert_params) {
         return {
-            handler:{
-                run:handler,
-                params:action_params
+            handler: {
+                run: handler,
+                params: action_params
             },
-            reverter:{
-                run:reverter,
-                params:revert_params
+            reverter: {
+                run: reverter,
+                params: revert_params
             }
         };
     },
-    push:function(tx) {
+    push: function (tx) {
         this.stack.push(tx);
     },
     // Returns a promise.
-    process:function(platform) {
+    process: function (platform) {
         events.emit('verbose', 'Beginning processing of action stack for ' + platform + ' project...');
 
         while (this.stack.length) {
@@ -54,19 +54,19 @@ ActionStack.prototype = {
 
             try {
                 handler.apply(null, action_params);
-            } catch(e) {
+            } catch (e) {
                 events.emit('warn', 'Error during processing of action! Attempting to revert...');
                 this.stack.unshift(action);
                 var issue = 'Uh oh!\n';
                 // revert completed tasks
-                while(this.completed.length) {
+                while (this.completed.length) {
                     var undo = this.completed.shift();
                     var revert = undo.reverter.run;
                     var revert_params = undo.reverter.params;
 
                     try {
                         revert.apply(null, revert_params);
-                    } catch(err) {
+                    } catch (err) {
                         events.emit('warn', 'Error during reversion of action! We probably really messed up your project now, sorry! D:');
                         issue += 'A reversion action failed: ' + err.message + '\n';
                     }
diff --git a/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js b/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
index 4a58132..e0af8a9 100644
--- a/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
+++ b/node_modules/cordova-common/src/ConfigChanges/ConfigChanges.js
@@ -15,7 +15,7 @@
     KIND, either express or implied.  See the License for the
     specific language governing permissions and limitations
     under the License.
-*/ 
+*/
 
 /*
  * This module deals with shared configuration / dependency "stuff". That is:
@@ -29,19 +29,17 @@
  * reference counts.
  */
 
-/* jshint sub:true */
-
-var path = require('path'),
-    et   = require('elementtree'),
-    ConfigKeeper = require('./ConfigKeeper'),
-    CordovaLogger = require('../CordovaLogger');
+var path = require('path');
+var et = require('elementtree');
+var ConfigKeeper = require('./ConfigKeeper');
+var CordovaLogger = require('../CordovaLogger');
 
 var mungeutil = require('./munge-util');
 var xml_helpers = require('../util/xml-helpers');
 
 exports.PlatformMunger = PlatformMunger;
 
-exports.process = function(plugins_dir, project_dir, platform, platformJson, pluginInfoProvider) {
+exports.process = function (plugins_dir, project_dir, platform, platformJson, pluginInfoProvider) {
     var munger = new PlatformMunger(platform, project_dir, platformJson, pluginInfoProvider);
     munger.process(plugins_dir);
     munger.save_all();
@@ -53,7 +51,7 @@ exports.process = function(plugins_dir, project_dir, platform, platformJson, plu
 * Can deal with config file of a single project.
 * Parsed config files are cached in a ConfigKeeper object.
 ******************************************************************************/
-function PlatformMunger(platform, project_dir, platformJson, pluginInfoProvider) {
+function PlatformMunger (platform, project_dir, platformJson, pluginInfoProvider) {
     this.platform = platform;
     this.project_dir = project_dir;
     this.config_keeper = new ConfigKeeper(project_dir);
@@ -63,7 +61,7 @@ function PlatformMunger(platform, project_dir, platformJson, pluginInfoProvider)
 
 // Write out all unsaved files.
 PlatformMunger.prototype.save_all = PlatformMunger_save_all;
-function PlatformMunger_save_all() {
+function PlatformMunger_save_all () {
     this.config_keeper.save_all();
     this.platformJson.save();
 }
@@ -71,7 +69,7 @@ function PlatformMunger_save_all() {
 // Apply a munge object to a single config file.
 // The remove parameter tells whether to add the change or remove it.
 PlatformMunger.prototype.apply_file_munge = PlatformMunger_apply_file_munge;
-function PlatformMunger_apply_file_munge(file, munge, remove) {
+function PlatformMunger_apply_file_munge (file, munge, remove) {
     var self = this;
 
     for (var selector in munge.parents) {
@@ -86,16 +84,15 @@ function PlatformMunger_apply_file_munge(file, munge, remove) {
     }
 }
 
-
 PlatformMunger.prototype.remove_plugin_changes = remove_plugin_changes;
-function remove_plugin_changes(pluginInfo, is_top_level) {
+function remove_plugin_changes (pluginInfo, is_top_level) {
     var self = this;
     var platform_config = self.platformJson.root;
     var plugin_vars = is_top_level ?
         platform_config.installed_plugins[pluginInfo.id] :
         platform_config.dependent_plugins[pluginInfo.id];
     var edit_config_changes = null;
-    if(pluginInfo.getEditConfigs) {
+    if (pluginInfo.getEditConfigs) {
         edit_config_changes = pluginInfo.getEditConfigs(self.platform);
     }
 
@@ -114,14 +111,13 @@ function remove_plugin_changes(pluginInfo, is_top_level) {
     return self;
 }
 
-
 PlatformMunger.prototype.add_plugin_changes = add_plugin_changes;
-function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increment, plugin_force) {
+function add_plugin_changes (pluginInfo, plugin_vars, is_top_level, should_increment, plugin_force) {
     var self = this;
     var platform_config = self.platformJson.root;
 
     var edit_config_changes = null;
-    if(pluginInfo.getEditConfigs) {
+    if (pluginInfo.getEditConfigs) {
         edit_config_changes = pluginInfo.getEditConfigs(self.platform);
     }
 
@@ -130,8 +126,7 @@ function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increm
     if (!edit_config_changes || edit_config_changes.length === 0) {
         // get config munge, aka how should this plugin change various config files
         config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars);
-    }
-    else {
+    } else {
         var isConflictingInfo = is_conflicting(edit_config_changes, platform_config.config_munge, self, plugin_force);
 
         if (isConflictingInfo.conflictWithConfigxml) {
@@ -149,13 +144,11 @@ function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increm
 
             // force add new munges
             config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars, edit_config_changes);
-        }
-        else if(isConflictingInfo.conflictFound) {
+        } else if (isConflictingInfo.conflictFound) {
             throw new Error('There was a conflict trying to modify attributes with <edit-config> in plugin ' + pluginInfo.id +
             '. The conflicting plugin, ' + isConflictingInfo.conflictingPlugin + ', already modified the same attributes. The conflict must be resolved before ' +
             pluginInfo.id + ' can be added. You may use --force to add the plugin and overwrite the conflicting attributes.');
-        }
-        else {
+        } else {
             // no conflicts, will handle edit-config
             config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars, edit_config_changes);
         }
@@ -168,27 +161,32 @@ function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increm
     return self;
 }
 
-
 // Handle edit-config changes from config.xml
 PlatformMunger.prototype.add_config_changes = add_config_changes;
-function add_config_changes(config, should_increment) {
+function add_config_changes (config, should_increment) {
     var self = this;
     var platform_config = self.platformJson.root;
 
     var config_munge;
-    var edit_config_changes = null;
-    if(config.getEditConfigs) {
-        edit_config_changes = config.getEditConfigs(self.platform);
+    var changes = [];
+
+    if (config.getEditConfigs) {
+        var edit_config_changes = config.getEditConfigs(self.platform);
+        if (edit_config_changes) {
+            changes = changes.concat(edit_config_changes);
+        }
     }
 
-    if (!edit_config_changes || edit_config_changes.length === 0) {
-        // There are no edit-config changes to add, return here
-        return self;
+    if (config.getConfigFiles) {
+        var config_files_changes = config.getConfigFiles(self.platform);
+        if (config_files_changes) {
+            changes = changes.concat(config_files_changes);
+        }
     }
-    else {
-        var isConflictingInfo = is_conflicting(edit_config_changes, platform_config.config_munge, self, true /*always force overwrite other edit-config*/);
 
-        if(isConflictingInfo.conflictFound) {
+    if (changes && changes.length > 0) {
+        var isConflictingInfo = is_conflicting(changes, platform_config.config_munge, self, true /* always force overwrite other edit-config */);
+        if (isConflictingInfo.conflictFound) {
             var conflict_munge;
             var conflict_file;
 
@@ -209,17 +207,17 @@ function add_config_changes(config, should_increment) {
                 }
             }
         }
-        // Add config.xml edit-config munges
-        config_munge = self.generate_config_xml_munge(config, edit_config_changes, 'config.xml');
     }
 
+    // Add config.xml edit-config and config-file munges
+    config_munge = self.generate_config_xml_munge(config, changes, 'config.xml');
     self = munge_helper(should_increment, self, platform_config, config_munge);
 
     // Move to installed/dependent_plugins
     return self;
 }
 
-function munge_helper(should_increment, self, platform_config, config_munge) {
+function munge_helper (should_increment, self, platform_config, config_munge) {
     // global munge looks at all changes to config files
 
     // TODO: The should_increment param is only used by cordova-cli and is going away soon.
@@ -241,11 +239,10 @@ function munge_helper(should_increment, self, platform_config, config_munge) {
     return self;
 }
 
-
 // Load the global munge from platform json and apply all of it.
 // Used by cordova prepare to re-generate some config file from platform
 // defaults and the global munge.
-PlatformMunger.prototype.reapply_global_munge = reapply_global_munge ;
+PlatformMunger.prototype.reapply_global_munge = reapply_global_munge;
 function reapply_global_munge () {
     var self = this;
 
@@ -261,58 +258,56 @@ function reapply_global_munge () {
 // generate_plugin_config_munge
 // Generate the munge object from config.xml
 PlatformMunger.prototype.generate_config_xml_munge = generate_config_xml_munge;
-function generate_config_xml_munge(config, edit_config_changes, type) {
-
+function generate_config_xml_munge (config, config_changes, type) {
     var munge = { files: {} };
-    var changes = edit_config_changes;
     var id;
 
-    if(!changes) {
+    if (!config_changes) {
         return munge;
     }
 
     if (type === 'config.xml') {
         id = type;
-    }
-    else {
+    } else {
         id = config.id;
     }
 
-    changes.forEach(function(change) {
-        change.xmls.forEach(function(xml) {
+    config_changes.forEach(function (change) {
+        change.xmls.forEach(function (xml) {
             // 1. stringify each xml
-            var stringified = (new et.ElementTree(xml)).write({xml_declaration:false});
+            var stringified = (new et.ElementTree(xml)).write({xml_declaration: false});
             // 2. add into munge
             if (change.mode) {
                 mungeutil.deep_add(munge, change.file, change.target, { xml: stringified, count: 1, mode: change.mode, id: id });
+            } else {
+                mungeutil.deep_add(munge, change.target, change.parent, { xml: stringified, count: 1, after: change.after });
             }
         });
     });
     return munge;
 }
 
-
 // generate_plugin_config_munge
 // Generate the munge object from plugin.xml + vars
 PlatformMunger.prototype.generate_plugin_config_munge = generate_plugin_config_munge;
-function generate_plugin_config_munge(pluginInfo, vars, edit_config_changes) {
+function generate_plugin_config_munge (pluginInfo, vars, edit_config_changes) {
     var self = this;
 
     vars = vars || {};
     var munge = { files: {} };
     var changes = pluginInfo.getConfigFiles(self.platform);
 
-    if(edit_config_changes) {
+    if (edit_config_changes) {
         Array.prototype.push.apply(changes, edit_config_changes);
     }
 
-    changes.forEach(function(change) {
-        change.xmls.forEach(function(xml) {
+    changes.forEach(function (change) {
+        change.xmls.forEach(function (xml) {
             // 1. stringify each xml
-            var stringified = (new et.ElementTree(xml)).write({xml_declaration:false});
+            var stringified = (new et.ElementTree(xml)).write({xml_declaration: false});
             // interp vars
             if (vars) {
-                Object.keys(vars).forEach(function(key) {
+                Object.keys(vars).forEach(function (key) {
                     var regExp = new RegExp('\\$' + key, 'g');
                     stringified = stringified.replace(regExp, vars[key]);
                 });
@@ -322,8 +317,7 @@ function generate_plugin_config_munge(pluginInfo, vars, edit_config_changes) {
                 if (change.mode !== 'remove') {
                     mungeutil.deep_add(munge, change.file, change.target, { xml: stringified, count: 1, mode: change.mode, plugin: pluginInfo.id });
                 }
-            }
-            else {
+            } else {
                 mungeutil.deep_add(munge, change.target, change.parent, { xml: stringified, count: 1, after: change.after });
             }
         });
@@ -331,7 +325,7 @@ function generate_plugin_config_munge(pluginInfo, vars, edit_config_changes) {
     return munge;
 }
 
-function is_conflicting(editchanges, config_munge, self, force) {
+function is_conflicting (editchanges, config_munge, self, force) {
     var files = config_munge.files;
     var conflictFound = false;
     var conflictWithConfigxml = false;
@@ -340,7 +334,7 @@ function is_conflicting(editchanges, config_munge, self, force) {
     var conflictingParent;
     var conflictingPlugin;
 
-    editchanges.forEach(function(editchange) {
+    editchanges.forEach(function (editchange) {
         if (files[editchange.file]) {
             var parents = files[editchange.file].parents;
             var target = parents[editchange.target];
@@ -361,8 +355,7 @@ function is_conflicting(editchanges, config_munge, self, force) {
                         }
                     }
                 }
-            }
-            else {
+            } else {
                 conflictingParent = editchange.target;
             }
 
@@ -374,13 +367,11 @@ function is_conflicting(editchanges, config_munge, self, force) {
                     if (target[0].id === 'config.xml') {
                         // Keep track of config.xml/config.xml edit-config conflicts
                         mungeutil.deep_add(configxmlMunge, editchange.file, conflictingParent, target[0]);
-                    }
-                    else {
+                    } else {
                         // Keep track of config.xml x plugin.xml edit-config conflicts
                         mungeutil.deep_add(conflictingMunge, editchange.file, conflictingParent, target[0]);
                     }
-                }
-                else {
+                } else {
                     if (target[0].id === 'config.xml') {
                         // plugin.xml cannot overwrite config.xml changes even if --force is used
                         conflictWithConfigxml = true;
@@ -390,36 +381,38 @@ function is_conflicting(editchanges, config_munge, self, force) {
                     if (force) {
                         // Need to find all conflicts when --force is used, track conflicting munges
                         mungeutil.deep_add(conflictingMunge, editchange.file, conflictingParent, target[0]);
-                    }
-                    else {
+                    } else {
                         // plugin cannot overwrite other plugin changes without --force
                         conflictingPlugin = target[0].plugin;
-                        return;
+
                     }
                 }
             }
         }
     });
 
-    return {conflictFound: conflictFound, conflictingPlugin: conflictingPlugin, conflictingMunge: conflictingMunge,
-        configxmlMunge: configxmlMunge, conflictWithConfigxml:conflictWithConfigxml};
+    return {conflictFound: conflictFound,
+        conflictingPlugin: conflictingPlugin,
+        conflictingMunge: conflictingMunge,
+        configxmlMunge: configxmlMunge,
+        conflictWithConfigxml: conflictWithConfigxml};
 }
 
 // Go over the prepare queue and apply the config munges for each plugin
 // that has been (un)installed.
 PlatformMunger.prototype.process = PlatformMunger_process;
-function PlatformMunger_process(plugins_dir) {
+function PlatformMunger_process (plugins_dir) {
     var self = this;
     var platform_config = self.platformJson.root;
 
     // Uninstallation first
-    platform_config.prepare_queue.uninstalled.forEach(function(u) {
+    platform_config.prepare_queue.uninstalled.forEach(function (u) {
         var pluginInfo = self.pluginInfoProvider.get(path.join(plugins_dir, u.plugin));
         self.remove_plugin_changes(pluginInfo, u.topLevel);
     });
 
     // Now handle installation
-    platform_config.prepare_queue.installed.forEach(function(u) {
+    platform_config.prepare_queue.installed.forEach(function (u) {
         var pluginInfo = self.pluginInfoProvider.get(path.join(plugins_dir, u.plugin));
         self.add_plugin_changes(pluginInfo, u.vars, u.topLevel, true, u.force);
     });
@@ -428,4 +421,4 @@ function PlatformMunger_process(plugins_dir) {
     platform_config.prepare_queue.uninstalled = [];
     platform_config.prepare_queue.installed = [];
 }
-/**** END of PlatformMunger ****/
+/** ** END of PlatformMunger ****/
diff --git a/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js b/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
index 4a58008..a4a7331 100644
--- a/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
+++ b/node_modules/cordova-common/src/ConfigChanges/ConfigFile.js
@@ -14,6 +14,8 @@
  *
 */
 
+/* eslint no-control-regex: 0 */
+
 var fs = require('fs');
 var path = require('path');
 
@@ -42,7 +44,7 @@ addProperty(module, 'xml_helpers', '../util/xml-helpers', modules);
 * TODO: Consider moving it out to a separate file and maybe partially with
 * overrides in platform handlers.
 ******************************************************************************/
-function ConfigFile(project_dir, platform, file_tag) {
+function ConfigFile (project_dir, platform, file_tag) {
     this.project_dir = project_dir;
     this.platform = platform;
     this.file_tag = file_tag;
@@ -53,13 +55,13 @@ function ConfigFile(project_dir, platform, file_tag) {
 
 // ConfigFile.load()
 ConfigFile.prototype.load = ConfigFile_load;
-function ConfigFile_load() {
+function ConfigFile_load () {
     var self = this;
 
     // config file may be in a place not exactly specified in the target
     var filepath = self.filepath = resolveConfigFilePath(self.project_dir, self.platform, self.file_tag);
 
-    if ( !filepath || !fs.existsSync(filepath) ) {
+    if (!filepath || !fs.existsSync(filepath)) {
         self.exists = false;
         return;
     }
@@ -69,7 +71,7 @@ function ConfigFile_load() {
     var ext = path.extname(filepath);
     // Windows8 uses an appxmanifest, and wp8 will likely use
     // the same in a future release
-    if (ext == '.xml' || ext == '.appxmanifest') {
+    if (ext === '.xml' || ext === '.appxmanifest') {
         self.type = 'xml';
         self.data = modules.xml_helpers.parseElementtreeSync(filepath);
     } else {
@@ -80,12 +82,12 @@ function ConfigFile_load() {
         //       Do we still need to support binary plist?
         //       If yes, use plist.parseStringSync() and read the file once.
         self.data = isBinaryPlist(filepath) ?
-                modules.bplist.parseBuffer(fs.readFileSync(filepath)) :
-                modules.plist.parse(fs.readFileSync(filepath, 'utf8'));
+            modules.bplist.parseBuffer(fs.readFileSync(filepath)) :
+            modules.plist.parse(fs.readFileSync(filepath, 'utf8'));
     }
 }
 
-ConfigFile.prototype.save = function ConfigFile_save() {
+ConfigFile.prototype.save = function ConfigFile_save () {
     var self = this;
     if (self.type === 'xml') {
         fs.writeFileSync(self.filepath, self.data.write({indent: 4}), 'utf-8');
@@ -97,54 +99,54 @@ ConfigFile.prototype.save = function ConfigFile_save() {
     self.is_changed = false;
 };
 
-ConfigFile.prototype.graft_child = function ConfigFile_graft_child(selector, xml_child) {
+ConfigFile.prototype.graft_child = function ConfigFile_graft_child (selector, xml_child) {
     var self = this;
     var filepath = self.filepath;
     var result;
     if (self.type === 'xml') {
         var xml_to_graft = [modules.et.XML(xml_child.xml)];
         switch (xml_child.mode) {
-            case 'merge':
-                result = modules.xml_helpers.graftXMLMerge(self.data, xml_to_graft, selector, xml_child);
-                break;
-            case 'overwrite':
-                result = modules.xml_helpers.graftXMLOverwrite(self.data, xml_to_graft, selector, xml_child);
-                break;
-            case 'remove':
-                result= true;
-                break;
-            default:
-                result = modules.xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after);
+        case 'merge':
+            result = modules.xml_helpers.graftXMLMerge(self.data, xml_to_graft, selector, xml_child);
+            break;
+        case 'overwrite':
+            result = modules.xml_helpers.graftXMLOverwrite(self.data, xml_to_graft, selector, xml_child);
+            break;
+        case 'remove':
+            result = modules.xml_helpers.pruneXMLRemove(self.data, selector, xml_to_graft);
+            break;
+        default:
+            result = modules.xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after);
         }
-        if ( !result) {
+        if (!result) {
             throw new Error('Unable to graft xml at selector "' + selector + '" from "' + filepath + '" during config install');
         }
     } else {
         // plist file
         result = modules.plist_helpers.graftPLIST(self.data, xml_child.xml, selector);
-        if ( !result ) {
+        if (!result) {
             throw new Error('Unable to graft plist "' + filepath + '" during config install');
         }
     }
     self.is_changed = true;
 };
 
-ConfigFile.prototype.prune_child = function ConfigFile_prune_child(selector, xml_child) {
+ConfigFile.prototype.prune_child = function ConfigFile_prune_child (selector, xml_child) {
     var self = this;
     var filepath = self.filepath;
     var result;
     if (self.type === 'xml') {
         var xml_to_graft = [modules.et.XML(xml_child.xml)];
         switch (xml_child.mode) {
-            case 'merge':
-            case 'overwrite':
-                result = modules.xml_helpers.pruneXMLRestore(self.data, selector, xml_child);
-                break;
-            case 'remove':
-                result = modules.xml_helpers.prunXMLRemove(self.data, selector, xml_to_graft);
-                break;
-            default:
-                result = modules.xml_helpers.pruneXML(self.data, xml_to_graft, selector);
+        case 'merge':
+        case 'overwrite':
+            result = modules.xml_helpers.pruneXMLRestore(self.data, selector, xml_child);
+            break;
+        case 'remove':
+            result = modules.xml_helpers.pruneXMLRemove(self.data, selector, xml_to_graft);
+            break;
+        default:
+            result = modules.xml_helpers.pruneXML(self.data, xml_to_graft, selector);
         }
     } else {
         // plist file
@@ -160,7 +162,7 @@ ConfigFile.prototype.prune_child = function ConfigFile_prune_child(selector, xml
 // Some config-file target attributes are not qualified with a full leading directory, or contain wildcards.
 // Resolve to a real path in this function.
 // TODO: getIOSProjectname is slow because of glob, try to avoid calling it several times per project.
-function resolveConfigFilePath(project_dir, platform, file) {
+function resolveConfigFilePath (project_dir, platform, file) {
     var filepath = path.join(project_dir, file);
     var matches;
 
@@ -170,10 +172,10 @@ function resolveConfigFilePath(project_dir, platform, file) {
         if (matches.length) filepath = matches[0];
 
         // [CB-5989] multiple Info.plist files may exist. default to $PROJECT_NAME-Info.plist
-        if(matches.length > 1 && file.indexOf('-Info.plist')>-1){
-            var plistName =  getIOSProjectname(project_dir)+'-Info.plist';
-            for (var i=0; i < matches.length; i++) {
-                if(matches[i].indexOf(plistName) > -1){
+        if (matches.length > 1 && file.indexOf('-Info.plist') > -1) {
+            var plistName = getIOSProjectname(project_dir) + '-Info.plist';
+            for (var i = 0; i < matches.length; i++) {
+                if (matches[i].indexOf(plistName) > -1) {
                     filepath = matches[i];
                     break;
                 }
@@ -184,13 +186,13 @@ function resolveConfigFilePath(project_dir, platform, file) {
 
     // special-case config.xml target that is just "config.xml". This should be resolved to the real location of the file.
     // TODO: move the logic that contains the locations of config.xml from cordova CLI into plugman.
-    if (file == 'config.xml') {
-        if (platform == 'ubuntu') {
+    if (file === 'config.xml') {
+        if (platform === 'ubuntu') {
             filepath = path.join(project_dir, 'config.xml');
-        } else if (platform == 'ios') {
+        } else if (platform === 'ios') {
             var iospath = getIOSProjectname(project_dir);
-            filepath = path.join(project_dir,iospath, 'config.xml');
-        } else if (platform == 'android') {
+            filepath = path.join(project_dir, iospath, 'config.xml');
+        } else if (platform === 'android') {
             filepath = path.join(project_dir, 'res', 'xml', 'config.xml');
         } else {
             matches = modules.glob.sync(path.join(project_dir, '**', 'config.xml'));
@@ -201,8 +203,8 @@ function resolveConfigFilePath(project_dir, platform, file) {
 
     // XXX this checks for android studio projects
     // only if none of the options above are satisfied does this get called
-    if(platform === 'android' && !fs.existsSync(filepath)) {
-      filepath = path.join(project_dir, 'app', 'src', 'main', 'res', 'xml', 'config.xml');
+    if (platform === 'android' && !fs.existsSync(filepath)) {
+        filepath = path.join(project_dir, 'app', 'src', 'main', 'res', 'xml', 'config.xml');
     }
 
     // None of the special cases matched, returning project_dir/file.
@@ -211,11 +213,11 @@ function resolveConfigFilePath(project_dir, platform, file) {
 
 // Find out the real name of an iOS project
 // TODO: glob is slow, need a better way or caching, or avoid using more than once.
-function getIOSProjectname(project_dir) {
+function getIOSProjectname (project_dir) {
     var matches = modules.glob.sync(path.join(project_dir, '*.xcodeproj'));
     var iospath;
     if (matches.length === 1) {
-        iospath = path.basename(matches[0],'.xcodeproj');
+        iospath = path.basename(matches[0], '.xcodeproj');
     } else {
         var msg;
         if (matches.length === 0) {
@@ -229,7 +231,7 @@ function getIOSProjectname(project_dir) {
 }
 
 // determine if a plist file is binary
-function isBinaryPlist(filename) {
+function isBinaryPlist (filename) {
     // I wish there was a synchronous way to read only the first 6 bytes of a
     // file. This is wasteful :/
     var buf = '' + fs.readFileSync(filename, 'utf8');
diff --git a/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js b/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js
index 894e922..0ef0435 100644
--- a/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js
+++ b/node_modules/cordova-common/src/ConfigChanges/ConfigKeeper.js
@@ -28,18 +28,18 @@ var ConfigFile = require('./ConfigFile');
 * project_dir/platform/file
 * where file is the name used for the file in config munges.
 ******************************************************************************/
-function ConfigKeeper(project_dir, plugins_dir) {
+function ConfigKeeper (project_dir, plugins_dir) {
     this.project_dir = project_dir;
     this.plugins_dir = plugins_dir;
     this._cached = {};
 }
 
-ConfigKeeper.prototype.get = function ConfigKeeper_get(project_dir, platform, file) {
+ConfigKeeper.prototype.get = function ConfigKeeper_get (project_dir, platform, file) {
     var self = this;
 
     // This fixes a bug with older plugins - when specifying config xml instead of res/xml/config.xml
     // https://issues.apache.org/jira/browse/CB-6414
-    if(file == 'config.xml' && platform == 'android'){
+    if (file === 'config.xml' && platform === 'android') {
         file = 'res/xml/config.xml';
     }
     var fake_path = path.join(project_dir, platform, file);
@@ -53,8 +53,7 @@ ConfigKeeper.prototype.get = function ConfigKeeper_get(project_dir, platform, fi
     return config_file;
 };
 
-
-ConfigKeeper.prototype.save_all = function ConfigKeeper_save_all() {
+ConfigKeeper.prototype.save_all = function ConfigKeeper_save_all () {
     var self = this;
     Object.keys(self._cached).forEach(function (fake_path) {
         var config_file = self._cached[fake_path];
diff --git a/node_modules/cordova-common/src/ConfigChanges/munge-util.js b/node_modules/cordova-common/src/ConfigChanges/munge-util.js
index 0149bab..62648d8 100644
--- a/node_modules/cordova-common/src/ConfigChanges/munge-util.js
+++ b/node_modules/cordova-common/src/ConfigChanges/munge-util.js
@@ -19,14 +19,14 @@ var _ = require('underscore');
 
 // add the count of [key1][key2]...[keyN] to obj
 // return true if it didn't exist before
-exports.deep_add = function deep_add(obj, keys /* or key1, key2 .... */ ) {
-    if ( !Array.isArray(keys) ) {
+exports.deep_add = function deep_add (obj, keys /* or key1, key2 .... */) {
+    if (!Array.isArray(keys)) {
         keys = Array.prototype.slice.call(arguments, 1);
     }
 
-    return exports.process_munge(obj, true/*createParents*/, function (parentArray, k) {
-        var found = _.find(parentArray, function(element) {
-            return element.xml == k.xml;
+    return exports.process_munge(obj, true/* createParents */, function (parentArray, k) {
+        var found = _.find(parentArray, function (element) {
+            return element.xml === k.xml;
         });
         if (found) {
             found.after = found.after || k.after;
@@ -40,16 +40,16 @@ exports.deep_add = function deep_add(obj, keys /* or key1, key2 .... */ ) {
 
 // decrement the count of [key1][key2]...[keyN] from obj and remove if it reaches 0
 // return true if it was removed or not found
-exports.deep_remove = function deep_remove(obj, keys /* or key1, key2 .... */ ) {
-    if ( !Array.isArray(keys) ) {
+exports.deep_remove = function deep_remove (obj, keys /* or key1, key2 .... */) {
+    if (!Array.isArray(keys)) {
         keys = Array.prototype.slice.call(arguments, 1);
     }
 
-    var result = exports.process_munge(obj, false/*createParents*/, function (parentArray, k) {
+    var result = exports.process_munge(obj, false/* createParents */, function (parentArray, k) {
         var index = -1;
         var found = _.find(parentArray, function (element) {
             index++;
-            return element.xml == k.xml;
+            return element.xml === k.xml;
         });
         if (found) {
             if (parentArray[index].oldAttrib) {
@@ -58,8 +58,7 @@ exports.deep_remove = function deep_remove(obj, keys /* or key1, key2 .... */ )
             found.count -= k.count;
             if (found.count > 0) {
                 return false;
-            }
-            else {
+            } else {
                 parentArray.splice(index, 1);
             }
         }
@@ -71,14 +70,14 @@ exports.deep_remove = function deep_remove(obj, keys /* or key1, key2 .... */ )
 
 // search for [key1][key2]...[keyN]
 // return the object or undefined if not found
-exports.deep_find = function deep_find(obj, keys /* or key1, key2 .... */ ) {
-    if ( !Array.isArray(keys) ) {
+exports.deep_find = function deep_find (obj, keys /* or key1, key2 .... */) {
+    if (!Array.isArray(keys)) {
         keys = Array.prototype.slice.call(arguments, 1);
     }
 
-    return exports.process_munge(obj, false/*createParents?*/, function (parentArray, k) {
+    return exports.process_munge(obj, false/* createParents? */, function (parentArray, k) {
         return _.find(parentArray, function (element) {
-            return element.xml == (k.xml || k);
+            return element.xml === (k.xml || k);
         });
     }, keys);
 };
@@ -87,20 +86,20 @@ exports.deep_find = function deep_find(obj, keys /* or key1, key2 .... */ ) {
 // When createParents is true, add the file and parent items  they are missing
 // When createParents is false, stop and return undefined if the file and/or parent items are missing
 
-exports.process_munge = function process_munge(obj, createParents, func, keys /* or key1, key2 .... */ ) {
-    if ( !Array.isArray(keys) ) {
+exports.process_munge = function process_munge (obj, createParents, func, keys /* or key1, key2 .... */) {
+    if (!Array.isArray(keys)) {
         keys = Array.prototype.slice.call(arguments, 1);
     }
     var k = keys[0];
-    if (keys.length == 1) {
+    if (keys.length === 1) {
         return func(obj, k);
-    } else if (keys.length == 2) {
+    } else if (keys.length === 2) {
         if (!obj.parents[k] && !createParents) {
             return undefined;
         }
         obj.parents[k] = obj.parents[k] || [];
         return exports.process_munge(obj.parents[k], createParents, func, keys.slice(1));
-    } else if (keys.length == 3){
+    } else if (keys.length === 3) {
         if (!obj.files[k] && !createParents) {
             return undefined;
         }
@@ -115,7 +114,7 @@ exports.process_munge = function process_munge(obj, createParents, func, keys /*
 // base[file][selector][child] += munge[file][selector][child]
 // Returns a munge object containing values that exist in munge
 // but not in base.
-exports.increment_munge = function increment_munge(base, munge) {
+exports.increment_munge = function increment_munge (base, munge) {
     var diff = { files: {} };
 
     for (var file in munge.files) {
@@ -138,7 +137,7 @@ exports.increment_munge = function increment_munge(base, munge) {
 // base[file][selector][child] -= munge[file][selector][child]
 // nodes that reached zero value are removed from base and added to the returned munge
 // object.
-exports.decrement_munge = function decrement_munge(base, munge) {
+exports.decrement_munge = function decrement_munge (base, munge) {
     var zeroed = { files: {} };
 
     for (var file in munge.files) {
@@ -158,6 +157,6 @@ exports.decrement_munge = function decrement_munge(base, munge) {
 };
 
 // For better readability where used
-exports.clone_munge = function clone_munge(munge) {
+exports.clone_munge = function clone_munge (munge) {
     return exports.increment_munge({}, munge);
 };
diff --git a/node_modules/cordova-common/src/ConfigParser/ConfigParser.js b/node_modules/cordova-common/src/ConfigParser/ConfigParser.js
index cd718de..9c3943e 100644
--- a/node_modules/cordova-common/src/ConfigParser/ConfigParser.js
+++ b/node_modules/cordova-common/src/ConfigParser/ConfigParser.js
@@ -17,24 +17,21 @@
     under the License.
 */
 
-/* jshint sub:true */
-
-var et = require('elementtree'),
-    xml= require('../util/xml-helpers'),
-    CordovaError = require('../CordovaError/CordovaError'),
-    fs = require('fs'),
-    events = require('../events');
-
+var et = require('elementtree');
+var xml = require('../util/xml-helpers');
+var CordovaError = require('../CordovaError/CordovaError');
+var fs = require('fs');
+var events = require('../events');
 
 /** Wraps a config.xml file */
-function ConfigParser(path) {
+function ConfigParser (path) {
     this.path = path;
     try {
         this.doc = xml.parseElementtreeSync(path);
         this.cdvNamespacePrefix = getCordovaNamespacePrefix(this.doc);
         et.register_namespace(this.cdvNamespacePrefix, 'http://cordova.apache.org/ns/1.0');
     } catch (e) {
-        console.error('Parsing '+path+' failed');
+        console.error('Parsing ' + path + ' failed');
         throw e;
     }
     var r = this.doc.getroot();
@@ -43,11 +40,11 @@ function ConfigParser(path) {
     }
 }
 
-function getNodeTextSafe(el) {
+function getNodeTextSafe (el) {
     return el && el.text && el.text.trim();
 }
 
-function findOrCreate(doc, name) {
+function findOrCreate (doc, name) {
     var ret = doc.find(name);
     if (!ret) {
         ret = new et.Element(name);
@@ -56,12 +53,12 @@ function findOrCreate(doc, name) {
     return ret;
 }
 
-function getCordovaNamespacePrefix(doc){
+function getCordovaNamespacePrefix (doc) {
     var rootAtribs = Object.getOwnPropertyNames(doc.getroot().attrib);
     var prefix = 'cdv';
-    for (var j = 0; j < rootAtribs.length; j++ ) {
-        if(rootAtribs[j].indexOf('xmlns:') === 0 &&
-            doc.getroot().attrib[rootAtribs[j]] === 'http://cordova.apache.org/ns/1.0'){
+    for (var j = 0; j < rootAtribs.length; j++) {
+        if (rootAtribs[j].indexOf('xmlns:') === 0 &&
+            doc.getroot().attrib[rootAtribs[j]] === 'http://cordova.apache.org/ns/1.0') {
             var strings = rootAtribs[j].split(':');
             prefix = strings[1];
             break;
@@ -76,7 +73,7 @@ function getCordovaNamespacePrefix(doc){
  * @param  {Array}  elems         An array of ElementTree nodes
  * @return {String}
  */
-function findElementAttributeValue(attributeName, elems) {
+function findElementAttributeValue (attributeName, elems) {
 
     elems = Array.isArray(elems) ? elems : [ elems ];
 
@@ -86,69 +83,69 @@ function findElementAttributeValue(attributeName, elems) {
         return filteredElems.attrib.value;
     }).pop();
 
-    return value ? value : '';
+    return value || '';
 }
 
 ConfigParser.prototype = {
-    getAttribute: function(attr) {
+    getAttribute: function (attr) {
         return this.doc.getroot().attrib[attr];
     },
 
-    packageName: function(id) {
+    packageName: function (id) {
         return this.getAttribute('id');
     },
-    setPackageName: function(id) {
+    setPackageName: function (id) {
         this.doc.getroot().attrib['id'] = id;
     },
-    android_packageName: function() {
+    android_packageName: function () {
         return this.getAttribute('android-packageName');
     },
-    android_activityName: function() {
+    android_activityName: function () {
         return this.getAttribute('android-activityName');
     },
-    ios_CFBundleIdentifier: function() {
+    ios_CFBundleIdentifier: function () {
         return this.getAttribute('ios-CFBundleIdentifier');
     },
-    name: function() {
+    name: function () {
         return getNodeTextSafe(this.doc.find('name'));
     },
-    setName: function(name) {
+    setName: function (name) {
         var el = findOrCreate(this.doc, 'name');
         el.text = name;
     },
-    shortName: function() {
+    shortName: function () {
         return this.doc.find('name').attrib['short'] || this.name();
     },
-    setShortName: function(shortname) {
+    setShortName: function (shortname) {
         var el = findOrCreate(this.doc, 'name');
         if (!el.text) {
             el.text = shortname;
         }
         el.attrib['short'] = shortname;
     },
-    description: function() {
+    description: function () {
         return getNodeTextSafe(this.doc.find('description'));
     },
-    setDescription: function(text) {
+    setDescription: function (text) {
         var el = findOrCreate(this.doc, 'description');
         el.text = text;
     },
-    version: function() {
+    version: function () {
         return this.getAttribute('version');
     },
-    windows_packageVersion: function() {
+    windows_packageVersion: function () {
         return this.getAttribute('windows-packageVersion');
     },
-    android_versionCode: function() {
+    android_versionCode: function () {
         return this.getAttribute('android-versionCode');
     },
-    ios_CFBundleVersion: function() {
+    ios_CFBundleVersion: function () {
         return this.getAttribute('ios-CFBundleVersion');
     },
-    setVersion: function(value) {
+    setVersion: function (value) {
         this.doc.getroot().attrib['version'] = value;
     },
-    author: function() {
+    author: function () {
         return getNodeTextSafe(this.doc.find('author'));
     },
     getGlobalPreference: function (name) {
@@ -166,7 +163,7 @@ ConfigParser.prototype = {
     getPlatformPreference: function (name, platform) {
         return findElementAttributeValue(name, this.doc.findall('platform[@name=\'' + platform + '\']/preference'));
     },
-    getPreference: function(name, platform) {
+    getPreference: function (name, platform) {
 
         var platformPreference = '';
 
@@ -174,7 +171,7 @@ ConfigParser.prototype = {
             platformPreference = this.getPlatformPreference(name, platform);
         }
 
-        return platformPreference ? platformPreference : this.getGlobalPreference(name);
+        return platformPreference || this.getGlobalPreference(name);
 
     },
     /**
@@ -184,11 +181,11 @@ ConfigParser.prototype = {
      *                               "icon" and "splash" currently supported.
      * @return {Array}               Resources for the platform specified.
      */
-    getStaticResources: function(platform, resourceName) {
-        var ret = [],
-            staticResources = [];
+    getStaticResources: function (platform, resourceName) {
+        var ret = [];
+        var staticResources = [];
         if (platform) { // platform specific icons
-            this.doc.findall('platform[@name=\'' + platform + '\']/' + resourceName).forEach(function(elt){
+            this.doc.findall('platform[@name=\'' + platform + '\']/' + resourceName).forEach(function (elt) {
                 elt.platform = platform; // mark as platform specific resource
                 staticResources.push(elt);
             });
@@ -201,7 +198,7 @@ ConfigParser.prototype = {
             var res = {};
             res.src = elt.attrib.src;
             res.target = elt.attrib.target || undefined;
-            res.density = elt.attrib['density'] || elt.attrib[that.cdvNamespacePrefix+':density'] || elt.attrib['gap:density'];
+            res.density = elt.attrib['density'] || elt.attrib[that.cdvNamespacePrefix + ':density'] || elt.attrib['gap:density'];
             res.platform = elt.platform || null; // null means icon represents default icon (shared between platforms)
             res.width = +elt.attrib.width || undefined;
             res.height = +elt.attrib.height || undefined;
@@ -219,13 +216,13 @@ ConfigParser.prototype = {
          * @param  {number} height Height of resource.
          * @return {Resource} Resource object or null if not found.
          */
-        ret.getBySize = function(width, height) {
-            return ret.filter(function(res) {
+        ret.getBySize = function (width, height) {
+            return ret.filter(function (res) {
                 if (!res.width && !res.height) {
                     return false;
                 }
-                return ((!res.width || (width == res.width)) &&
-                    (!res.height || (height == res.height)));
+                return ((!res.width || (width === res.width)) &&
+                    (!res.height || (height === res.height)));
             })[0] || null;
         };
 
@@ -234,14 +231,14 @@ ConfigParser.prototype = {
          * @param  {string} density Density of resource.
          * @return {Resource}       Resource object or null if not found.
          */
-        ret.getByDensity = function(density) {
-            return ret.filter(function(res) {
-                return res.density == density;
+        ret.getByDensity = function (density) {
+            return ret.filter(function (res) {
+                return res.density === density;
             })[0] || null;
         };
 
         /** Returns default icons */
-        ret.getDefault = function() {
+        ret.getDefault = function () {
             return ret.defaultResource;
         };
 
@@ -253,7 +250,7 @@ ConfigParser.prototype = {
      * @param  {string} platform Platform name
      * @return {Resource[]}      Array of icon objects.
      */
-    getIcons: function(platform) {
+    getIcons: function (platform) {
         return this.getStaticResources(platform, 'icon');
     },
 
@@ -262,20 +259,22 @@ ConfigParser.prototype = {
      * @param  {string} platform Platform name
      * @return {Resource[]}      Array of Splash objects.
      */
-    getSplashScreens: function(platform) {
+    getSplashScreens: function (platform) {
         return this.getStaticResources(platform, 'splash');
     },
 
     /**
      * Returns all resource-files for a specific platform.
      * @param  {string} platform Platform name
+     * @param  {boolean} includeGlobal Whether to return resource-files at the
+     *                                 root level.
      * @return {Resource[]}      Array of resource file objects.
      */
-    getFileResources: function(platform) {
+    getFileResources: function (platform, includeGlobal) {
         var fileResources = [];
 
         if (platform) { // platform specific resources
-            fileResources = this.doc.findall('platform[@name=\'' + platform + '\']/resource-file').map(function(tag) {
+            fileResources = this.doc.findall('platform[@name=\'' + platform + '\']/resource-file').map(function (tag) {
                 return {
                     platform: platform,
                     src: tag.attrib.src,
@@ -287,6 +286,19 @@ ConfigParser.prototype = {
             });
         }
 
+        if (includeGlobal) {
+            this.doc.findall('resource-file').forEach(function (tag) {
+                fileResources.push({
+                    platform: platform || null,
+                    src: tag.attrib.src,
+                    target: tag.attrib.target,
+                    versions: tag.attrib.versions,
+                    deviceTarget: tag.attrib['device-target'],
+                    arch: tag.attrib.arch
+                });
+            });
+        }
+
         return fileResources;
     },
 
@@ -296,23 +308,23 @@ ConfigParser.prototype = {
      * @param {Array}  platforms Platforms to look for scripts into (root scripts will be included as well).
      * @return {Array}               Script elements.
      */
-    getHookScripts: function(hook, platforms) {
+    getHookScripts: function (hook, platforms) {
         var self = this;
         var scriptElements = self.doc.findall('./hook');
 
-        if(platforms) {
+        if (platforms) {
             platforms.forEach(function (platform) {
                 scriptElements = scriptElements.concat(self.doc.findall('./platform[@name="' + platform + '"]/hook'));
             });
         }
 
-        function filterScriptByHookType(el) {
+        function filterScriptByHookType (el) {
             return el.attrib.src && el.attrib.type && el.attrib.type.toLowerCase() === hook;
         }
 
         return scriptElements.filter(filterScriptByHookType);
     },
-   /**
+    /**
     * Returns a list of plugin (IDs).
     *
     * This function also returns any plugin's that
@@ -321,13 +333,13 @@ ConfigParser.prototype = {
     */
     getPluginIdList: function () {
         var plugins = this.doc.findall('plugin');
-        var result = plugins.map(function(plugin){
+        var result = plugins.map(function (plugin) {
             return plugin.attrib.name;
         });
         var features = this.doc.findall('feature');
-        features.forEach(function(element ){
+        features.forEach(function (element) {
             var idTag = element.find('./param[@name="id"]');
-            if(idTag){
+            if (idTag) {
                 result.push(idTag.attrib.value);
             }
         });
@@ -356,9 +368,9 @@ ConfigParser.prototype = {
         // support arbitrary object as variables source
         if (variables && typeof variables === 'object' && !Array.isArray(variables)) {
             variables = Object.keys(variables)
-            .map(function (variableName) {
-                return {name: variableName, value: variables[variableName]};
-            });
+                .map(function (variableName) {
+                    return {name: variableName, value: variables[variableName]};
+                });
         }
 
         if (variables) {
@@ -378,15 +390,15 @@ ConfigParser.prototype = {
      * @param {String} id
      * @returns {object} plugin including any variables
      */
-    getPlugin: function(id){
-        if(!id){
+    getPlugin: function (id) {
+        if (!id) {
             return undefined;
         }
         var pluginElement = this.doc.find('./plugin/[@name="' + id + '"]');
-        if (null === pluginElement) {
-            var legacyFeature =  this.doc.find('./feature/param[@name="id"][@value="' + id + '"]/..');
-            if(legacyFeature){
-                 events.emit('log', 'Found deprecated feature entry for ' + id +' in config.xml.');
+        if (pluginElement === null) {
+            var legacyFeature = this.doc.find('./feature/param[@name="id"][@value="' + id + '"]/..');
+            if (legacyFeature) {
+                events.emit('log', 'Found deprecated feature entry for ' + id + ' in config.xml.');
                 return featureToPlugin(legacyFeature);
             }
             return undefined;
@@ -397,10 +409,10 @@ ConfigParser.prototype = {
         plugin.spec = pluginElement.attrib.spec || pluginElement.attrib.src || pluginElement.attrib.version;
         plugin.variables = {};
         var variableElements = pluginElement.findall('variable');
-        variableElements.forEach(function(varElement){
+        variableElements.forEach(function (varElement) {
             var name = varElement.attrib.name;
             var value = varElement.attrib.value;
-            if(name){
+            if (name) {
                 plugin.variables[name] = value;
             }
         });
@@ -415,8 +427,8 @@ ConfigParser.prototype = {
      * @function
      * @param id name of the plugin
      */
-    removePlugin: function(id){
-        if(id){
+    removePlugin: function (id) {
+        if (id) {
             var plugins = this.doc.findall('./plugin/[@name="' + id + '"]')
                 .concat(this.doc.findall('./feature/param[@name="id"][@value="' + id + '"]/..'));
             var children = this.doc.getroot().getchildren();
@@ -430,7 +442,7 @@ ConfigParser.prototype = {
     },
 
     // Add any element to the root
-    addElement: function(name, attributes) {
+    addElement: function (name, attributes) {
         var el = et.Element(name);
         for (var a in attributes) {
             el.attrib[a] = attributes[a];
@@ -443,11 +455,11 @@ ConfigParser.prototype = {
      * @param  {String} name the engine name
      * @param  {String} spec engine source location or version (optional)
      */
-    addEngine: function(name, spec){
-        if(!name) return;
+    addEngine: function (name, spec) {
+        if (!name) return;
         var el = et.Element('engine');
         el.attrib.name = name;
-        if(spec){
+        if (spec) {
             el.attrib.spec = spec;
         }
         this.doc.getroot().append(el);
@@ -456,52 +468,54 @@ ConfigParser.prototype = {
      * Removes all the engines with given name
      * @param  {String} name the engine name.
      */
-    removeEngine: function(name){
-        var engines = this.doc.findall('./engine/[@name="' +name+'"]');
-        for(var i=0; i < engines.length; i++){
+    removeEngine: function (name) {
+        var engines = this.doc.findall('./engine/[@name="' + name + '"]');
+        for (var i = 0; i < engines.length; i++) {
             var children = this.doc.getroot().getchildren();
             var idx = children.indexOf(engines[i]);
-            if(idx > -1){
-                children.splice(idx,1);
+            if (idx > -1) {
+                children.splice(idx, 1);
             }
         }
     },
-    getEngines: function(){
+    getEngines: function () {
         var engines = this.doc.findall('./engine');
-        return engines.map(function(engine){
+        return engines.map(function (engine) {
             var spec = engine.attrib.spec || engine.attrib.version;
             return {
                 'name': engine.attrib.name,
-                'spec': spec ? spec : null
+                'spec': spec || null
             };
         });
     },
     /* Get all the access tags */
-    getAccesses: function() {
+    getAccesses: function () {
         var accesses = this.doc.findall('./access');
-        return accesses.map(function(access){
+        return accesses.map(function (access) {
             var minimum_tls_version = access.attrib['minimum-tls-version']; /* String */
             var requires_forward_secrecy = access.attrib['requires-forward-secrecy']; /* Boolean */
             var requires_certificate_transparency = access.attrib['requires-certificate-transparency']; /* Boolean */
             var allows_arbitrary_loads_in_web_content = access.attrib['allows-arbitrary-loads-in-web-content']; /* Boolean */
-            var allows_arbitrary_loads_in_media = access.attrib['allows-arbitrary-loads-in-media']; /* Boolean */
+            var allows_arbitrary_loads_in_media = access.attrib['allows-arbitrary-loads-in-media']; /* Boolean (DEPRECATED) */
+            var allows_arbitrary_loads_for_media = access.attrib['allows-arbitrary-loads-for-media']; /* Boolean */
             var allows_local_networking = access.attrib['allows-local-networking']; /* Boolean */
-            
+
             return {
                 'origin': access.attrib.origin,
                 'minimum_tls_version': minimum_tls_version,
-                'requires_forward_secrecy' : requires_forward_secrecy,
-                'requires_certificate_transparency' : requires_certificate_transparency,
-                'allows_arbitrary_loads_in_web_content' : allows_arbitrary_loads_in_web_content,
-                'allows_arbitrary_loads_in_media' : allows_arbitrary_loads_in_media,
-                'allows_local_networking' : allows_local_networking
+                'requires_forward_secrecy': requires_forward_secrecy,
+                'requires_certificate_transparency': requires_certificate_transparency,
+                'allows_arbitrary_loads_in_web_content': allows_arbitrary_loads_in_web_content,
+                'allows_arbitrary_loads_in_media': allows_arbitrary_loads_in_media,
+                'allows_arbitrary_loads_for_media': allows_arbitrary_loads_for_media,
+                'allows_local_networking': allows_local_networking
             };
         });
     },
     /* Get all the allow-navigation tags */
-    getAllowNavigations: function() {
+    getAllowNavigations: function () {
         var allow_navigations = this.doc.findall('./allow-navigation');
-        return allow_navigations.map(function(allow_navigation){
+        return allow_navigations.map(function (allow_navigation) {
             var minimum_tls_version = allow_navigation.attrib['minimum-tls-version']; /* String */
             var requires_forward_secrecy = allow_navigation.attrib['requires-forward-secrecy']; /* Boolean */
             var requires_certificate_transparency = allow_navigation.attrib['requires-certificate-transparency']; /* Boolean */
@@ -509,45 +523,68 @@ ConfigParser.prototype = {
             return {
                 'href': allow_navigation.attrib.href,
                 'minimum_tls_version': minimum_tls_version,
-                'requires_forward_secrecy' : requires_forward_secrecy,
-                'requires_certificate_transparency' : requires_certificate_transparency
+                'requires_forward_secrecy': requires_forward_secrecy,
+                'requires_certificate_transparency': requires_certificate_transparency
             };
         });
     },
     /* Get all the allow-intent tags */
-    getAllowIntents: function() {
+    getAllowIntents: function () {
         var allow_intents = this.doc.findall('./allow-intent');
-        return allow_intents.map(function(allow_intent){
+        return allow_intents.map(function (allow_intent) {
             return {
                 'href': allow_intent.attrib.href
             };
         });
     },
     /* Get all edit-config tags */
-    getEditConfigs: function(platform) {
+    getEditConfigs: function (platform) {
         var platform_tag = this.doc.find('./platform[@name="' + platform + '"]');
         var platform_edit_configs = platform_tag ? platform_tag.findall('edit-config') : [];
 
         var edit_configs = this.doc.findall('edit-config').concat(platform_edit_configs);
 
-        return edit_configs.map(function(tag) {
+        return edit_configs.map(function (tag) {
             var editConfig =
                 {
-                    file : tag.attrib['file'],
-                    target : tag.attrib['target'],
-                    mode : tag.attrib['mode'],
-                    id : 'config.xml',
-                    xmls : tag.getchildren()
+                    file: tag.attrib['file'],
+                    target: tag.attrib['target'],
+                    mode: tag.attrib['mode'],
+                    id: 'config.xml',
+                    xmls: tag.getchildren()
                 };
             return editConfig;
         });
     },
-    write:function() {
+
+    /* Get all config-file tags */
+    getConfigFiles: function (platform) {
+        var platform_tag = this.doc.find('./platform[@name="' + platform + '"]');
+        var platform_config_files = platform_tag ? platform_tag.findall('config-file') : [];
+
+        var config_files = this.doc.findall('config-file').concat(platform_config_files);
+
+        return config_files.map(function (tag) {
+            var configFile =
+                {
+                    target: tag.attrib['target'],
+                    parent: tag.attrib['parent'],
+                    after: tag.attrib['after'],
+                    xmls: tag.getchildren(),
+                    // To support demuxing via versions
+                    versions: tag.attrib['versions'],
+                    deviceTarget: tag.attrib['device-target']
+                };
+            return configFile;
+        });
+    },
+
+    write: function () {
         fs.writeFileSync(this.path, this.doc.write({indent: 4}), 'utf-8');
     }
 };
 
-function featureToPlugin(featureElement) {
+function featureToPlugin (featureElement) {
     var plugin = {};
     plugin.variables = [];
     var pluginVersion,
diff --git a/node_modules/cordova-common/src/CordovaCheck.js b/node_modules/cordova-common/src/CordovaCheck.js
index 46e733f..28f629d 100644
--- a/node_modules/cordova-common/src/CordovaCheck.js
+++ b/node_modules/cordova-common/src/CordovaCheck.js
@@ -17,10 +17,10 @@
     under the License.
 */
 
-var fs = require('fs'),
-    path = require('path');
+var fs = require('fs');
+var path = require('path');
 
-function isRootDir(dir) {
+function isRootDir (dir) {
     if (fs.existsSync(path.join(dir, 'www'))) {
         if (fs.existsSync(path.join(dir, 'config.xml'))) {
             // For sure is.
@@ -41,12 +41,12 @@ function isRootDir(dir) {
 // Runs up the directory chain looking for a .cordova directory.
 // IF it is found we are in a Cordova project.
 // Omit argument to use CWD.
-function isCordova(dir) {
+function isCordova (dir) {
     if (!dir) {
         // Prefer PWD over cwd so that symlinked dirs within your PWD work correctly (CB-5687).
         var pwd = process.env.PWD;
         var cwd = process.cwd();
-        if (pwd && pwd != cwd && pwd != 'undefined') {
+        if (pwd && pwd !== cwd && pwd !== 'undefined') {
             return isCordova(pwd) || isCordova(cwd);
         }
         return isCordova(cwd);
@@ -62,7 +62,7 @@ function isCordova(dir) {
         }
         var parentDir = path.normalize(path.join(dir, '..'));
         // Detect fs root.
-        if (parentDir == dir) {
+        if (parentDir === dir) {
             return bestReturnValueSoFar;
         }
         dir = parentDir;
@@ -72,5 +72,5 @@ function isCordova(dir) {
 }
 
 module.exports = {
-    findProjectRoot : isCordova
+    findProjectRoot: isCordova
 };
diff --git a/node_modules/cordova-common/src/CordovaError/CordovaError.js b/node_modules/cordova-common/src/CordovaError/CordovaError.js
index 7262448..24de6af 100644
--- a/node_modules/cordova-common/src/CordovaError/CordovaError.js
+++ b/node_modules/cordova-common/src/CordovaError/CordovaError.js
@@ -17,7 +17,7 @@
     under the License.
 */
 
-/* jshint proto:true */
+/* eslint no-proto: 0 */
 
 var EOL = require('os').EOL;
 
@@ -30,7 +30,7 @@ var EOL = require('os').EOL;
  * @param {CordovaExternalToolErrorContext} [context] External tool error context object
  * @constructor
  */
-function CordovaError(message, code, context) {
+function CordovaError (message, code, context) {
     Error.captureStackTrace(this, this.constructor);
     this.name = this.constructor.name;
     this.message = message;
@@ -47,10 +47,10 @@ CordovaError.EXTERNAL_TOOL_ERROR = 1;
  * Translates instance's error code number into error code name, e.g. 0 -> UNKNOWN_ERROR
  * @returns {string} Error code string name
  */
-CordovaError.prototype.getErrorCodeName = function() {
-    for(var key in CordovaError) {
-        if(CordovaError.hasOwnProperty(key)) {
-            if(CordovaError[key] === this.code) {
+CordovaError.prototype.getErrorCodeName = function () {
+    for (var key in CordovaError) {
+        if (CordovaError.hasOwnProperty(key)) {
+            if (CordovaError[key] === this.code) {
                 return key;
             }
         }
@@ -63,16 +63,17 @@ CordovaError.prototype.getErrorCodeName = function() {
  *   details including information about error code name and context
  * @return  {String}              Stringified error representation
  */
-CordovaError.prototype.toString = function(isVerbose) {
-    var message = '', codePrefix = '';
+CordovaError.prototype.toString = function (isVerbose) {
+    var message = '';
+    var codePrefix = '';
 
-    if(this.code !== CordovaError.UNKNOWN_ERROR) {
+    if (this.code !== CordovaError.UNKNOWN_ERROR) {
         codePrefix = 'code: ' + this.code + (isVerbose ? (' (' + this.getErrorCodeName() + ')') : '') + ' ';
     }
 
-    if(this.code === CordovaError.EXTERNAL_TOOL_ERROR) {
-        if(typeof this.context !== 'undefined') {
-            if(isVerbose) {
+    if (this.code === CordovaError.EXTERNAL_TOOL_ERROR) {
+        if (typeof this.context !== 'undefined') {
+            if (isVerbose) {
                 message = codePrefix + EOL + this.context.toString(isVerbose) + '\n failed with an error: ' +
                     this.message + EOL + 'Stack trace: ' + this.stack;
             } else {
diff --git a/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js b/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js
index ca9a4aa..30699b4 100644
--- a/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js
+++ b/node_modules/cordova-common/src/CordovaError/CordovaExternalToolErrorContext.js
@@ -27,7 +27,7 @@ var path = require('path');
  * @param {String} [cwd] Command working directory
  * @constructor
  */
-function CordovaExternalToolErrorContext(cmd, args, cwd) {
+function CordovaExternalToolErrorContext (cmd, args, cwd) {
     this.cmd = cmd;
     // Helper field for readability
     this.cmdShortName = path.basename(cmd);
@@ -35,8 +35,8 @@ function CordovaExternalToolErrorContext(cmd, args, cwd) {
     this.cwd = cwd;
 }
 
-CordovaExternalToolErrorContext.prototype.toString = function(isVerbose) {
-    if(isVerbose) {
+CordovaExternalToolErrorContext.prototype.toString = function (isVerbose) {
+    if (isVerbose) {
         return 'External tool \'' + this.cmdShortName + '\'' +
             '\nCommand full path: ' + this.cmd + '\nCommand args: ' + this.args +
             (typeof this.cwd !== 'undefined' ? '\nCommand cwd: ' + this.cwd : '');
diff --git a/node_modules/cordova-common/src/CordovaLogger.js b/node_modules/cordova-common/src/CordovaLogger.js
index 71bc7e8..ea6e9ce 100644
--- a/node_modules/cordova-common/src/CordovaLogger.js
+++ b/node_modules/cordova-common/src/CordovaLogger.js
@@ -41,11 +41,11 @@ function CordovaLogger () {
     this.stderrCursor = ansi(this.stderr);
 
     this.addLevel('verbose', 1000, 'grey');
-    this.addLevel('normal' , 2000);
-    this.addLevel('warn'   , 2000, 'yellow');
-    this.addLevel('info'   , 3000, 'blue');
-    this.addLevel('error'  , 5000, 'red');
-    this.addLevel('results' , 10000);
+    this.addLevel('normal', 2000);
+    this.addLevel('warn', 2000, 'yellow');
+    this.addLevel('info', 3000, 'blue');
+    this.addLevel('error', 5000, 'red');
+    this.addLevel('results', 10000);
 
     this.setLevel('normal');
 }
@@ -82,9 +82,10 @@ CordovaLogger.RESULTS = 'results';
 CordovaLogger.prototype.log = function (logLevel, message) {
     // if there is no such logLevel defined, or provided level has
     // less severity than active level, then just ignore this call and return
-    if (!this.levels[logLevel] || this.levels[logLevel] < this.levels[this.logLevel])
+    if (!this.levels[logLevel] || this.levels[logLevel] < this.levels[this.logLevel]) {
         // return instance to allow to chain calls
         return this;
+    }
 
     var isVerbose = this.logLevel === 'verbose';
     var cursor = this.stdoutCursor;
@@ -179,8 +180,7 @@ CordovaLogger.prototype.adjustLevel = function (opts) {
  */
 CordovaLogger.prototype.subscribe = function (eventEmitter) {
 
-    if (!(eventEmitter instanceof EventEmitter))
-        throw new Error('Subscribe method only accepts an EventEmitter instance as argument');
+    if (!(eventEmitter instanceof EventEmitter)) { throw new Error('Subscribe method only accepts an EventEmitter instance as argument'); }
 
     eventEmitter.on('verbose', this.verbose)
         .on('log', this.normal)
@@ -193,7 +193,7 @@ CordovaLogger.prototype.subscribe = function (eventEmitter) {
     return this;
 };
 
-function formatError(error, isVerbose) {
+function formatError (error, isVerbose) {
     var message = '';
 
     if (error instanceof CordovaError) {
diff --git a/node_modules/cordova-common/src/FileUpdater.js b/node_modules/cordova-common/src/FileUpdater.js
index 8b6876b..c4eeb97 100644
--- a/node_modules/cordova-common/src/FileUpdater.js
+++ b/node_modules/cordova-common/src/FileUpdater.js
@@ -17,12 +17,12 @@
     under the License.
 */
 
-"use strict";
+'use strict';
 
-var fs = require("fs");
-var path = require("path");
-var shell = require("shelljs");
-var minimatch = require("minimatch");
+var fs = require('fs');
+var path = require('path');
+var shell = require('shelljs');
+var minimatch = require('minimatch');
 
 /**
  * Logging callback used in the FileUpdater methods.
@@ -55,27 +55,27 @@ var minimatch = require("minimatch");
  * @return {boolean} true if any changes were made, or false if the force flag is not set
  *     and everything was up to date
  */
-function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, options, log) {
+function updatePathWithStats (sourcePath, sourceStats, targetPath, targetStats, options, log) {
     var updated = false;
 
-    var rootDir = (options && options.rootDir) || "";
+    var rootDir = (options && options.rootDir) || '';
     var copyAll = (options && options.all) || false;
 
-    var targetFullPath = path.join(rootDir || "", targetPath);
+    var targetFullPath = path.join(rootDir || '', targetPath);
 
     if (sourceStats) {
-        var sourceFullPath = path.join(rootDir || "", sourcePath);
+        var sourceFullPath = path.join(rootDir || '', sourcePath);
 
         if (targetStats) {
             // The target exists. But if the directory status doesn't match the source, delete it.
             if (targetStats.isDirectory() && !sourceStats.isDirectory()) {
-                log("rmdir  " + targetPath + " (source is a file)");
-                shell.rm("-rf", targetFullPath);
+                log('rmdir  ' + targetPath + ' (source is a file)');
+                shell.rm('-rf', targetFullPath);
                 targetStats = null;
                 updated = true;
             } else if (!targetStats.isDirectory() && sourceStats.isDirectory()) {
-                log("delete " + targetPath + " (source is a directory)");
-                shell.rm("-f", targetFullPath);
+                log('delete ' + targetPath + ' (source is a directory)');
+                shell.rm('-f', targetFullPath);
                 targetStats = null;
                 updated = true;
             }
@@ -84,21 +84,21 @@ function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, o
         if (!targetStats) {
             if (sourceStats.isDirectory()) {
                 // The target directory does not exist, so it should be created.
-                log("mkdir " + targetPath);
-                shell.mkdir("-p", targetFullPath);
+                log('mkdir ' + targetPath);
+                shell.mkdir('-p', targetFullPath);
                 updated = true;
             } else if (sourceStats.isFile()) {
                 // The target file does not exist, so it should be copied from the source.
-                log("copy  " + sourcePath + " " + targetPath + (copyAll ? "" : " (new file)"));
-                shell.cp("-f", sourceFullPath, targetFullPath);
+                log('copy  ' + sourcePath + ' ' + targetPath + (copyAll ? '' : ' (new file)'));
+                shell.cp('-f', sourceFullPath, targetFullPath);
                 updated = true;
             }
         } else if (sourceStats.isFile() && targetStats.isFile()) {
             // The source and target paths both exist and are files.
             if (copyAll) {
                 // The caller specified all files should be copied.
-                log("copy  " + sourcePath + " " + targetPath);
-                shell.cp("-f", sourceFullPath, targetFullPath);
+                log('copy  ' + sourcePath + ' ' + targetPath);
+                shell.cp('-f', sourceFullPath, targetFullPath);
                 updated = true;
             } else {
                 // Copy if the source has been modified since it was copied to the target, or if
@@ -107,8 +107,8 @@ function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, o
                 // for timestamps lacking sub-second precision in some filesystems.
                 if (sourceStats.mtime.getTime() >= targetStats.mtime.getTime() ||
                         sourceStats.size !== targetStats.size) {
-                    log("copy  " + sourcePath + " " + targetPath + " (updated file)");
-                    shell.cp("-f", sourceFullPath, targetFullPath);
+                    log('copy  ' + sourcePath + ' ' + targetPath + ' (updated file)');
+                    shell.cp('-f', sourceFullPath, targetFullPath);
                     updated = true;
                 }
             }
@@ -116,11 +116,11 @@ function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, o
     } else if (targetStats) {
         // The target exists but the source is null, so the target should be deleted.
         if (targetStats.isDirectory()) {
-            log("rmdir  " + targetPath + (copyAll ? "" : " (no source)"));
-            shell.rm("-rf", targetFullPath);
+            log('rmdir  ' + targetPath + (copyAll ? '' : ' (no source)'));
+            shell.rm('-rf', targetFullPath);
         } else {
-            log("delete " + targetPath + (copyAll ? "" : " (no source)"));
-            shell.rm("-f", targetFullPath);
+            log('delete ' + targetPath + (copyAll ? '' : ' (no source)'));
+            shell.rm('-f', targetFullPath);
         }
         updated = true;
     }
@@ -132,8 +132,8 @@ function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, o
  * Helper for updatePath and updatePaths functions. Queries stats for source and target
  * and ensures target directory exists before copying a file.
  */
-function updatePathInternal(sourcePath, targetPath, options, log) {
-    var rootDir = (options && options.rootDir) || "";
+function updatePathInternal (sourcePath, targetPath, options, log) {
+    var rootDir = (options && options.rootDir) || '';
     var targetFullPath = path.join(rootDir, targetPath);
     var targetStats = fs.existsSync(targetFullPath) ? fs.statSync(targetFullPath) : null;
     var sourceStats = null;
@@ -142,7 +142,7 @@ function updatePathInternal(sourcePath, targetPath, options, log) {
         // A non-null source path was specified. It should exist.
         var sourceFullPath = path.join(rootDir, sourcePath);
         if (!fs.existsSync(sourceFullPath)) {
-            throw new Error("Source path does not exist: " + sourcePath);
+            throw new Error('Source path does not exist: ' + sourcePath);
         }
 
         sourceStats = fs.statSync(sourceFullPath);
@@ -150,7 +150,7 @@ function updatePathInternal(sourcePath, targetPath, options, log) {
         // Create the target's parent directory if it doesn't exist.
         var parentDir = path.dirname(targetFullPath);
         if (!fs.existsSync(parentDir)) {
-            shell.mkdir("-p", parentDir);
+            shell.mkdir('-p', parentDir);
         }
     }
 
@@ -177,16 +177,16 @@ function updatePathInternal(sourcePath, targetPath, options, log) {
  * @return {boolean} true if any changes were made, or false if the force flag is not set
  *     and everything was up to date
  */
-function updatePath(sourcePath, targetPath, options, log) {
-    if (sourcePath !== null && typeof sourcePath !== "string") {
-        throw new Error("A source path (or null) is required.");
+function updatePath (sourcePath, targetPath, options, log) {
+    if (sourcePath !== null && typeof sourcePath !== 'string') {
+        throw new Error('A source path (or null) is required.');
     }
 
-    if (!targetPath || typeof targetPath !== "string") {
-        throw new Error("A target path is required.");
+    if (!targetPath || typeof targetPath !== 'string') {
+        throw new Error('A target path is required.');
     }
 
-    log = log || function(message) { };
+    log = log || function (message) { };
 
     return updatePathInternal(sourcePath, targetPath, options, log);
 }
@@ -208,12 +208,12 @@ function updatePath(sourcePath, targetPath, options, log) {
  * @return {boolean} true if any changes were made, or false if the force flag is not set
  *     and everything was up to date
  */
-function updatePaths(pathMap, options, log) {
-    if (!pathMap || typeof pathMap !== "object" || Array.isArray(pathMap)) {
-        throw new Error("An object mapping from target paths to source paths is required.");
+function updatePaths (pathMap, options, log) {
+    if (!pathMap || typeof pathMap !== 'object' || Array.isArray(pathMap)) {
+        throw new Error('An object mapping from target paths to source paths is required.');
     }
 
-    log = log || function(message) { };
+    log = log || function (message) { };
 
     var updated = false;
 
@@ -255,44 +255,44 @@ function updatePaths(pathMap, options, log) {
  * @return {boolean} true if any changes were made, or false if the force flag is not set
  *     and everything was up to date
  */
-function mergeAndUpdateDir(sourceDirs, targetDir, options, log) {
-    if (sourceDirs && typeof sourceDirs === "string") {
+function mergeAndUpdateDir (sourceDirs, targetDir, options, log) {
+    if (sourceDirs && typeof sourceDirs === 'string') {
         sourceDirs = [ sourceDirs ];
     } else if (!Array.isArray(sourceDirs)) {
-        throw new Error("A source directory path or array of paths is required.");
+        throw new Error('A source directory path or array of paths is required.');
     }
 
-    if (!targetDir || typeof targetDir !== "string") {
-        throw new Error("A target directory path is required.");
+    if (!targetDir || typeof targetDir !== 'string') {
+        throw new Error('A target directory path is required.');
     }
 
-    log = log || function(message) { };
+    log = log || function (message) { };
 
-    var rootDir = (options && options.rootDir) || "";
+    var rootDir = (options && options.rootDir) || '';
 
-    var include = (options && options.include) || [ "**" ];
-    if (typeof include === "string") {
+    var include = (options && options.include) || [ '**' ];
+    if (typeof include === 'string') {
         include = [ include ];
     } else if (!Array.isArray(include)) {
-        throw new Error("Include parameter must be a glob string or array of glob strings.");
+        throw new Error('Include parameter must be a glob string or array of glob strings.');
     }
 
     var exclude = (options && options.exclude) || [];
-    if (typeof exclude === "string") {
+    if (typeof exclude === 'string') {
         exclude = [ exclude ];
     } else if (!Array.isArray(exclude)) {
-        throw new Error("Exclude parameter must be a glob string or array of glob strings.");
+        throw new Error('Exclude parameter must be a glob string or array of glob strings.');
     }
 
     // Scan the files in each of the source directories.
     var sourceMaps = sourceDirs.map(function (sourceDir) {
-            return path.join(rootDir, sourceDir);
-        }).map(function (sourcePath) {
-            if (!fs.existsSync(sourcePath)) {
-                throw new Error("Source directory does not exist: " + sourcePath);
-            }
-            return mapDirectory(rootDir, path.relative(rootDir, sourcePath), include, exclude);
-        });
+        return path.join(rootDir, sourceDir);
+    }).map(function (sourcePath) {
+        if (!fs.existsSync(sourcePath)) {
+            throw new Error('Source directory does not exist: ' + sourcePath);
+        }
+        return mapDirectory(rootDir, path.relative(rootDir, sourcePath), include, exclude);
+    });
 
     // Scan the files in the target directory, if it exists.
     var targetMap = {};
@@ -323,18 +323,18 @@ function mergeAndUpdateDir(sourceDirs, targetDir, options, log) {
 /**
  * Creates a dictionary map of all files and directories under a path.
  */
-function mapDirectory(rootDir, subDir, include, exclude) {
-    var dirMap = { "": { subDir: subDir, stats: fs.statSync(path.join(rootDir, subDir)) } };
-    mapSubdirectory(rootDir, subDir, "", include, exclude, dirMap);
+function mapDirectory (rootDir, subDir, include, exclude) {
+    var dirMap = { '': { subDir: subDir, stats: fs.statSync(path.join(rootDir, subDir)) } };
+    mapSubdirectory(rootDir, subDir, '', include, exclude, dirMap);
     return dirMap;
 
-    function mapSubdirectory(rootDir, subDir, relativeDir, include, exclude, dirMap) {
+    function mapSubdirectory (rootDir, subDir, relativeDir, include, exclude, dirMap) {
         var itemMapped = false;
         var items = fs.readdirSync(path.join(rootDir, subDir, relativeDir));
 
-        items.forEach(function(item) {
+        items.forEach(function (item) {
             var relativePath = path.join(relativeDir, item);
-            if(!matchGlobArray(relativePath, exclude)) {
+            if (!matchGlobArray(relativePath, exclude)) {
                 // Stats obtained here (required at least to know where to recurse in directories)
                 // are saved for later, where the modified times may also be used. This minimizes
                 // the number of file I/O operations performed.
@@ -361,9 +361,9 @@ function mapDirectory(rootDir, subDir, include, exclude) {
         return itemMapped;
     }
 
-    function matchGlobArray(path, globs) {
-        return globs.some(function(elem) {
-            return minimatch(path, elem, {dot:true});
+    function matchGlobArray (path, globs) {
+        return globs.some(function (elem) {
+            return minimatch(path, elem, {dot: true});
         });
     }
 }
@@ -372,13 +372,13 @@ function mapDirectory(rootDir, subDir, include, exclude) {
  * Merges together multiple source maps and a target map into a single mapping from
  * relative paths to objects with target and source paths and stats.
  */
-function mergePathMaps(sourceMaps, targetMap, targetDir) {
+function mergePathMaps (sourceMaps, targetMap, targetDir) {
     // Merge multiple source maps together, along with target path info.
     // Entries in later source maps override those in earlier source maps.
     // Target stats will be filled in below for targets that exist.
     var pathMap = {};
     sourceMaps.forEach(function (sourceMap) {
-        Object.keys(sourceMap).forEach(function(sourceSubPath){
+        Object.keys(sourceMap).forEach(function (sourceSubPath) {
             var sourceEntry = sourceMap[sourceSubPath];
             pathMap[sourceSubPath] = {
                 targetPath: path.join(targetDir, sourceSubPath),
@@ -391,7 +391,7 @@ function mergePathMaps(sourceMaps, targetMap, targetDir) {
 
     // Fill in target stats for targets that exist, and create entries
     // for targets that don't have any corresponding sources.
-    Object.keys(targetMap).forEach(function(subPath){
+    Object.keys(targetMap).forEach(function (subPath) {
         var entry = pathMap[subPath];
         if (entry) {
             entry.targetStats = targetMap[subPath].stats;
@@ -413,4 +413,3 @@ module.exports = {
     updatePaths: updatePaths,
     mergeAndUpdateDir: mergeAndUpdateDir
 };
-
diff --git a/node_modules/cordova-common/src/PlatformJson.js b/node_modules/cordova-common/src/PlatformJson.js
index ab94b5f..7eaf1a2 100644
--- a/node_modules/cordova-common/src/PlatformJson.js
+++ b/node_modules/cordova-common/src/PlatformJson.js
@@ -13,7 +13,6 @@
  * under the License.
  *
 */
-/* jshint sub:true */
 
 var fs = require('fs');
 var path = require('path');
@@ -22,13 +21,13 @@ var mungeutil = require('./ConfigChanges/munge-util');
 var pluginMappernto = require('cordova-registry-mapper').newToOld;
 var pluginMapperotn = require('cordova-registry-mapper').oldToNew;
 
-function PlatformJson(filePath, platform, root) {
+function PlatformJson (filePath, platform, root) {
     this.filePath = filePath;
     this.platform = platform;
     this.root = fix_munge(root || {});
 }
 
-PlatformJson.load = function(plugins_dir, platform) {
+PlatformJson.load = function (plugins_dir, platform) {
     var filePath = path.join(plugins_dir, platform + '.json');
     var root = null;
     if (fs.existsSync(filePath)) {
@@ -37,9 +36,9 @@ PlatformJson.load = function(plugins_dir, platform) {
     return new PlatformJson(filePath, platform, root);
 };
 
-PlatformJson.prototype.save = function() {
+PlatformJson.prototype.save = function () {
     shelljs.mkdir('-p', path.dirname(this.filePath));
-    fs.writeFileSync(this.filePath, JSON.stringify(this.root, null, 4), 'utf-8');
+    fs.writeFileSync(this.filePath, JSON.stringify(this.root, null, 2), 'utf-8');
 };
 
 /**
@@ -49,7 +48,7 @@ PlatformJson.prototype.save = function() {
  * @param  {String} pluginId A plugin id to check for.
  * @return {Boolean} true if plugin installed as top-level, otherwise false.
  */
-PlatformJson.prototype.isPluginTopLevel = function(pluginId) {
+PlatformJson.prototype.isPluginTopLevel = function (pluginId) {
     var installedPlugins = this.root.installed_plugins;
     return installedPlugins[pluginId] ||
         installedPlugins[pluginMappernto[pluginId]] ||
@@ -63,7 +62,7 @@ PlatformJson.prototype.isPluginTopLevel = function(pluginId) {
  * @param  {String} pluginId A plugin id to check for.
  * @return {Boolean} true if plugin installed as a dependency, otherwise false.
  */
-PlatformJson.prototype.isPluginDependent = function(pluginId) {
+PlatformJson.prototype.isPluginDependent = function (pluginId) {
     var dependentPlugins = this.root.dependent_plugins;
     return dependentPlugins[pluginId] ||
         dependentPlugins[pluginMappernto[pluginId]] ||
@@ -76,12 +75,12 @@ PlatformJson.prototype.isPluginDependent = function(pluginId) {
  * @param  {String} pluginId A plugin id to check for.
  * @return {Boolean} true if plugin installed, otherwise false.
  */
-PlatformJson.prototype.isPluginInstalled = function(pluginId) {
+PlatformJson.prototype.isPluginInstalled = function (pluginId) {
     return this.isPluginTopLevel(pluginId) ||
         this.isPluginDependent(pluginId);
 };
 
-PlatformJson.prototype.addPlugin = function(pluginId, variables, isTopLevel) {
+PlatformJson.prototype.addPlugin = function (pluginId, variables, isTopLevel) {
     var pluginsList = isTopLevel ?
         this.root.installed_plugins :
         this.root.dependent_plugins;
@@ -107,13 +106,13 @@ PlatformJson.prototype.addPluginMetadata = function (pluginInfo) {
     });
 
     var modulesToInstall = pluginInfo.getJsModules(this.platform)
-    .map(function (module) {
-        return new ModuleMetadata(pluginInfo.id, module);
-    })
-    .filter(function (metadata) {
-        // Filter out modules which are already added to metadata
-        return installedPaths.indexOf(metadata.file) === -1;
-    });
+        .map(function (module) {
+            return new ModuleMetadata(pluginInfo.id, module);
+        })
+        .filter(function (metadata) {
+            // Filter out modules which are already added to metadata
+            return installedPaths.indexOf(metadata.file) === -1;
+        });
 
     this.root.modules = installedModules.concat(modulesToInstall);
 
@@ -123,7 +122,7 @@ PlatformJson.prototype.addPluginMetadata = function (pluginInfo) {
     return this;
 };
 
-PlatformJson.prototype.removePlugin = function(pluginId, isTopLevel) {
+PlatformJson.prototype.removePlugin = function (pluginId, isTopLevel) {
     var pluginsList = isTopLevel ?
         this.root.installed_plugins :
         this.root.dependent_plugins;
@@ -144,16 +143,16 @@ PlatformJson.prototype.removePlugin = function(pluginId, isTopLevel) {
  */
 PlatformJson.prototype.removePluginMetadata = function (pluginInfo) {
     var modulesToRemove = pluginInfo.getJsModules(this.platform)
-    .map(function (jsModule) {
-        return  ['plugins', pluginInfo.id, jsModule.src].join('/');
-    });
+        .map(function (jsModule) {
+            return ['plugins', pluginInfo.id, jsModule.src].join('/');
+        });
 
     var installedModules = this.root.modules || [];
     this.root.modules = installedModules
-    .filter(function (installedModule) {
-        // Leave only those metadatas which 'file' is not in removed modules
-        return (modulesToRemove.indexOf(installedModule.file) === -1);
-    });
+        .filter(function (installedModule) {
+            // Leave only those metadatas which 'file' is not in removed modules
+            return (modulesToRemove.indexOf(installedModule.file) === -1);
+        });
 
     if (this.root.plugin_metadata) {
         delete this.root.plugin_metadata[pluginInfo.id];
@@ -162,12 +161,12 @@ PlatformJson.prototype.removePluginMetadata = function (pluginInfo) {
     return this;
 };
 
-PlatformJson.prototype.addInstalledPluginToPrepareQueue = function(pluginDirName, vars, is_top_level, force) {
-    this.root.prepare_queue.installed.push({'plugin':pluginDirName, 'vars':vars, 'topLevel':is_top_level, 'force':force});
+PlatformJson.prototype.addInstalledPluginToPrepareQueue = function (pluginDirName, vars, is_top_level, force) {
+    this.root.prepare_queue.installed.push({'plugin': pluginDirName, 'vars': vars, 'topLevel': is_top_level, 'force': force});
 };
 
-PlatformJson.prototype.addUninstalledPluginToPrepareQueue = function(pluginId, is_top_level) {
-    this.root.prepare_queue.uninstalled.push({'plugin':pluginId, 'id':pluginId, 'topLevel':is_top_level});
+PlatformJson.prototype.addUninstalledPluginToPrepareQueue = function (pluginId, is_top_level) {
+    this.root.prepare_queue.uninstalled.push({'plugin': pluginId, 'id': pluginId, 'topLevel': is_top_level});
 };
 
 /**
@@ -177,7 +176,7 @@ PlatformJson.prototype.addUninstalledPluginToPrepareQueue = function(pluginId, i
  * @param  {String} pluginId A plugin id to make top-level.
  * @return {PlatformJson} PlatformJson instance.
  */
-PlatformJson.prototype.makeTopLevel = function(pluginId) {
+PlatformJson.prototype.makeTopLevel = function (pluginId) {
     var plugin = this.root.dependent_plugins[pluginId];
     if (plugin) {
         delete this.root.dependent_plugins[pluginId];
@@ -195,10 +194,10 @@ PlatformJson.prototype.makeTopLevel = function(pluginId) {
 PlatformJson.prototype.generateMetadata = function () {
     return [
         'cordova.define(\'cordova/plugin_list\', function(require, exports, module) {',
-        'module.exports = ' + JSON.stringify(this.root.modules, null, 4) + ';',
+        'module.exports = ' + JSON.stringify(this.root.modules, null, 2) + ';',
         'module.exports.metadata = ',
         '// TOP OF METADATA',
-        JSON.stringify(this.root.plugin_metadata, null, 4) + ';',
+        JSON.stringify(this.root.plugin_metadata, null, 2) + ';',
         '// BOTTOM OF METADATA',
         '});' // Close cordova.define.
     ].join('\n');
@@ -220,8 +219,8 @@ PlatformJson.prototype.generateAndSaveMetadata = function (destination) {
 };
 
 // convert a munge from the old format ([file][parent][xml] = count) to the current one
-function fix_munge(root) {
-    root.prepare_queue = root.prepare_queue || {installed:[], uninstalled:[]};
+function fix_munge (root) {
+    root.prepare_queue = root.prepare_queue || {installed: [], uninstalled: []};
     root.config_munge = root.config_munge || {files: {}};
     root.installed_plugins = root.installed_plugins || {};
     root.dependent_plugins = root.dependent_plugins || {};
@@ -260,15 +259,15 @@ function ModuleMetadata (pluginId, jsModule) {
     if (!pluginId) throw new TypeError('pluginId argument must be a valid plugin id');
     if (!jsModule.src && !jsModule.name) throw new TypeError('jsModule argument must contain src or/and name properties');
 
-    this.id  = pluginId + '.' + ( jsModule.name || jsModule.src.match(/([^\/]+)\.js/)[1] );
+    this.id = pluginId + '.' + (jsModule.name || jsModule.src.match(/([^\/]+)\.js/)[1]); /* eslint no-useless-escape: 0 */
     this.file = ['plugins', pluginId, jsModule.src].join('/');
     this.pluginId = pluginId;
 
     if (jsModule.clobbers && jsModule.clobbers.length > 0) {
-        this.clobbers = jsModule.clobbers.map(function(o) { return o.target; });
+        this.clobbers = jsModule.clobbers.map(function (o) { return o.target; });
     }
     if (jsModule.merges && jsModule.merges.length > 0) {
-        this.merges = jsModule.merges.map(function(o) { return o.target; });
+        this.merges = jsModule.merges.map(function (o) { return o.target; });
     }
     if (jsModule.runs) {
         this.runs = true;
diff --git a/node_modules/cordova-common/src/PluginInfo/PluginInfo.js b/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
index 4817470..4d77cbc 100644
--- a/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
+++ b/node_modules/cordova-common/src/PluginInfo/PluginInfo.js
@@ -17,8 +17,6 @@
     under the License.
 */
 
-/* jshint sub:true, laxcomma:true, laxbreak:true */
-
 /*
 A class for holidng the information currently stored in plugin.xml
 It should also be able to answer questions like whether the plugin
@@ -27,14 +25,12 @@ is compatible with a given engine version.
 TODO (kamrik): refactor this to not use sync functions and return promises.
 */
 
+var path = require('path');
+var fs = require('fs');
+var xml_helpers = require('../util/xml-helpers');
+var CordovaError = require('../CordovaError/CordovaError');
 
-var path = require('path')
-  , fs = require('fs')
-  , xml_helpers = require('../util/xml-helpers')
-  , CordovaError = require('../CordovaError/CordovaError')
-  ;
-
-function PluginInfo(dirname) {
+function PluginInfo (dirname) {
     var self = this;
 
     // METHODS
@@ -45,15 +41,15 @@ function PluginInfo(dirname) {
     // Used to require a variable to be specified via --variable when installing the plugin.
     // returns { key : default | null}
     self.getPreferences = getPreferences;
-    function getPreferences(platform) {
+    function getPreferences (platform) {
         return _getTags(self._et, 'preference', platform, _parsePreference)
-        .reduce(function (preferences, pref) {
-            preferences[pref.preference] = pref.default;
-            return preferences;
-        }, {});
+            .reduce(function (preferences, pref) {
+                preferences[pref.preference] = pref.default;
+                return preferences;
+            }, {});
     }
 
-    function _parsePreference(prefTag) {
+    function _parsePreference (prefTag) {
         var name = prefTag.attrib.name.toUpperCase();
         var def = prefTag.attrib.default || null;
         return {preference: name, default: def};
@@ -61,16 +57,16 @@ function PluginInfo(dirname) {
 
     // <asset>
     self.getAssets = getAssets;
-    function getAssets(platform) {
+    function getAssets (platform) {
         var assets = _getTags(self._et, 'asset', platform, _parseAsset);
         return assets;
     }
 
-    function _parseAsset(tag) {
+    function _parseAsset (tag) {
         var src = tag.attrib.src;
         var target = tag.attrib.target;
 
-        if ( !src || !target) {
+        if (!src || !target) {
             var msg =
                 'Malformed <asset> tag. Both "src" and "target" attributes'
                 + 'must be specified in\n'
@@ -87,7 +83,6 @@ function PluginInfo(dirname) {
         return asset;
     }
 
-
     // <dependency>
     // Example:
     // <dependency id="com.plugin.id"
@@ -95,28 +90,28 @@ function PluginInfo(dirname) {
     //     commit="428931ada3891801"
     //     subdir="some/path/here" />
     self.getDependencies = getDependencies;
-    function getDependencies(platform) {
+    function getDependencies (platform) {
         var deps = _getTags(
-                self._et,
-                'dependency',
-                platform,
-                _parseDependency
+            self._et,
+            'dependency',
+            platform,
+            _parseDependency
         );
         return deps;
     }
 
-    function _parseDependency(tag) {
+    function _parseDependency (tag) {
         var dep =
-            { id : tag.attrib.id
-            , version: tag.attrib.version || ''
-            , url : tag.attrib.url || ''
-            , subdir : tag.attrib.subdir || ''
-            , commit : tag.attrib.commit
+            { id: tag.attrib.id,
+                version: tag.attrib.version || '',
+                url: tag.attrib.url || '',
+                subdir: tag.attrib.subdir || '',
+                commit: tag.attrib.commit
             };
 
         dep.git_ref = dep.commit;
 
-        if ( !dep.id ) {
+        if (!dep.id) {
             var msg =
                 '<dependency> tag is missing id attribute in '
                 + self.filepath
@@ -126,52 +121,51 @@ function PluginInfo(dirname) {
         return dep;
     }
 
-
     // <config-file> tag
     self.getConfigFiles = getConfigFiles;
-    function getConfigFiles(platform) {
+    function getConfigFiles (platform) {
         var configFiles = _getTags(self._et, 'config-file', platform, _parseConfigFile);
         return configFiles;
     }
 
-    function _parseConfigFile(tag) {
+    function _parseConfigFile (tag) {
         var configFile =
-            { target : tag.attrib['target']
-            , parent : tag.attrib['parent']
-            , after : tag.attrib['after']
-            , xmls : tag.getchildren()
-            // To support demuxing via versions
-            , versions : tag.attrib['versions']
-            , deviceTarget: tag.attrib['device-target']
+            { target: tag.attrib['target'],
+                parent: tag.attrib['parent'],
+                after: tag.attrib['after'],
+                xmls: tag.getchildren(),
+                // To support demuxing via versions
+                versions: tag.attrib['versions'],
+                deviceTarget: tag.attrib['device-target']
             };
         return configFile;
     }
 
     self.getEditConfigs = getEditConfigs;
-    function getEditConfigs(platform) {
+    function getEditConfigs (platform) {
         var editConfigs = _getTags(self._et, 'edit-config', platform, _parseEditConfigs);
         return editConfigs;
     }
 
-    function _parseEditConfigs(tag) {
+    function _parseEditConfigs (tag) {
         var editConfig =
-        { file : tag.attrib['file']
-        , target : tag.attrib['target']
-        , mode : tag.attrib['mode']
-        , xmls : tag.getchildren()
-        };
+            { file: tag.attrib['file'],
+                target: tag.attrib['target'],
+                mode: tag.attrib['mode'],
+                xmls: tag.getchildren()
+            };
         return editConfig;
     }
 
     // <info> tags, both global and within a <platform>
     // TODO (kamrik): Do we ever use <info> under <platform>? Example wanted.
     self.getInfo = getInfo;
-    function getInfo(platform) {
+    function getInfo (platform) {
         var infos = _getTags(
-                self._et,
-                'info',
-                platform,
-                function(elem) { return elem.text; }
+            self._et,
+            'info',
+            platform,
+            function (elem) { return elem.text; }
         );
         // Filter out any undefined or empty strings.
         infos = infos.filter(Boolean);
@@ -183,12 +177,12 @@ function PluginInfo(dirname) {
     // <source-file src="src/ios/someLib.a" framework="true" />
     // <source-file src="src/ios/someLib.a" compiler-flags="-fno-objc-arc" />
     self.getSourceFiles = getSourceFiles;
-    function getSourceFiles(platform) {
+    function getSourceFiles (platform) {
         var sourceFiles = _getTagsInPlatform(self._et, 'source-file', platform, _parseSourceFile);
         return sourceFiles;
     }
 
-    function _parseSourceFile(tag) {
+    function _parseSourceFile (tag) {
         return {
             itemType: 'source-file',
             src: tag.attrib.src,
@@ -203,8 +197,8 @@ function PluginInfo(dirname) {
     // Example:
     // <header-file src="CDVFoo.h" />
     self.getHeaderFiles = getHeaderFiles;
-    function getHeaderFiles(platform) {
-        var headerFiles = _getTagsInPlatform(self._et, 'header-file', platform, function(tag) {
+    function getHeaderFiles (platform) {
+        var headerFiles = _getTagsInPlatform(self._et, 'header-file', platform, function (tag) {
             return {
                 itemType: 'header-file',
                 src: tag.attrib.src,
@@ -218,8 +212,8 @@ function PluginInfo(dirname) {
     // Example:
     // <resource-file src="FooPluginStrings.xml" target="res/values/FooPluginStrings.xml" device-target="win" arch="x86" versions="&gt;=8.1" />
     self.getResourceFiles = getResourceFiles;
-    function getResourceFiles(platform) {
-        var resourceFiles = _getTagsInPlatform(self._et, 'resource-file', platform, function(tag) {
+    function getResourceFiles (platform) {
+        var resourceFiles = _getTagsInPlatform(self._et, 'resource-file', platform, function (tag) {
             return {
                 itemType: 'resource-file',
                 src: tag.attrib.src,
@@ -237,8 +231,8 @@ function PluginInfo(dirname) {
     // Example:
     // <lib-file src="src/BlackBerry10/native/device/libfoo.so" arch="device" />
     self.getLibFiles = getLibFiles;
-    function getLibFiles(platform) {
-        var libFiles = _getTagsInPlatform(self._et, 'lib-file', platform, function(tag) {
+    function getLibFiles (platform) {
+        var libFiles = _getTagsInPlatform(self._et, 'lib-file', platform, function (tag) {
             return {
                 itemType: 'lib-file',
                 src: tag.attrib.src,
@@ -255,16 +249,16 @@ function PluginInfo(dirname) {
     // Example:
     // <hook type="before_build" src="scripts/beforeBuild.js" />
     self.getHookScripts = getHookScripts;
-    function getHookScripts(hook, platforms) {
-        var scriptElements =  self._et.findall('./hook');
+    function getHookScripts (hook, platforms) {
+        var scriptElements = self._et.findall('./hook');
 
-        if(platforms) {
+        if (platforms) {
             platforms.forEach(function (platform) {
                 scriptElements = scriptElements.concat(self._et.findall('./platform[@name="' + platform + '"]/hook'));
             });
         }
 
-        function filterScriptByHookType(el) {
+        function filterScriptByHookType (el) {
             return el.attrib.src && el.attrib.type && el.attrib.type.toLowerCase() === hook;
         }
 
@@ -272,26 +266,26 @@ function PluginInfo(dirname) {
     }
 
     self.getJsModules = getJsModules;
-    function getJsModules(platform) {
+    function getJsModules (platform) {
         var modules = _getTags(self._et, 'js-module', platform, _parseJsModule);
         return modules;
     }
 
-    function _parseJsModule(tag) {
+    function _parseJsModule (tag) {
         var ret = {
             itemType: 'js-module',
             name: tag.attrib.name,
             src: tag.attrib.src,
-            clobbers: tag.findall('clobbers').map(function(tag) { return { target: tag.attrib.target }; }),
-            merges: tag.findall('merges').map(function(tag) { return { target: tag.attrib.target }; }),
+            clobbers: tag.findall('clobbers').map(function (tag) { return { target: tag.attrib.target }; }),
+            merges: tag.findall('merges').map(function (tag) { return { target: tag.attrib.target }; }),
             runs: tag.findall('runs').length > 0
         };
 
         return ret;
     }
 
-    self.getEngines = function() {
-        return self._et.findall('engines/engine').map(function(n) {
+    self.getEngines = function () {
+        return self._et.findall('engines/engine').map(function (n) {
             return {
                 name: n.attrib.name,
                 version: n.attrib.version,
@@ -301,26 +295,40 @@ function PluginInfo(dirname) {
         });
     };
 
-    self.getPlatforms = function() {
-        return self._et.findall('platform').map(function(n) {
+    self.getPlatforms = function () {
+        return self._et.findall('platform').map(function (n) {
             return { name: n.attrib.name };
         });
     };
 
-    self.getPlatformsArray = function() {
-        return self._et.findall('platform').map(function(n) {
+    self.getPlatformsArray = function () {
+        return self._et.findall('platform').map(function (n) {
             return n.attrib.name;
         });
     };
-    self.getFrameworks = function(platform) {
-        return _getTags(self._et, 'framework', platform, function(el) {
+
+    self.getFrameworks = function (platform, options) {
+        return _getTags(self._et, 'framework', platform, function (el) {
+            var src = el.attrib.src;
+            if (options) {
+                var vars = options.cli_variables || {};
+                var regExp;
+                // Iterate over plugin variables.
+                // Replace them in framework src if they exist
+                Object.keys(vars).forEach(function (name) {
+                    if (vars[name]) {
+                        regExp = new RegExp('\\$' + name, 'g');
+                        src = src.replace(regExp, vars[name]);
+                    }
+                });
+            }
             var ret = {
                 itemType: 'framework',
                 type: el.attrib.type,
                 parent: el.attrib.parent,
                 custom: isStrTrue(el.attrib.custom),
                 embed: isStrTrue(el.attrib.embed),
-                src: el.attrib.src,
+                src: src,
                 spec: el.attrib.spec,
                 weak: isStrTrue(el.attrib.weak),
                 versions: el.attrib.versions,
@@ -334,22 +342,21 @@ function PluginInfo(dirname) {
     };
 
     self.getFilesAndFrameworks = getFilesAndFrameworks;
-    function getFilesAndFrameworks(platform) {
+    function getFilesAndFrameworks (platform, options) {
         // Please avoid changing the order of the calls below, files will be
         // installed in this order.
         var items = [].concat(
             self.getSourceFiles(platform),
             self.getHeaderFiles(platform),
             self.getResourceFiles(platform),
-            self.getFrameworks(platform),
+            self.getFrameworks(platform, options),
             self.getLibFiles(platform)
         );
         return items;
     }
-    ///// End of PluginInfo methods /////
-
+    /// // End of PluginInfo methods /////
 
-    ///// PluginInfo Constructor logic  /////
+    /// // PluginInfo Constructor logic  /////
     self.filepath = path.join(dirname, 'plugin.xml');
     if (!fs.existsSync(self.filepath)) {
         throw new CordovaError('Cannot find plugin.xml for plugin "' + path.basename(dirname) + '". Please try adding it again.');
@@ -370,18 +377,18 @@ function PluginInfo(dirname) {
     self.keywords = pelem.findtext('keywords');
     self.info = pelem.findtext('info');
     if (self.keywords) {
-        self.keywords = self.keywords.split(',').map( function(s) { return s.trim(); } );
+        self.keywords = self.keywords.split(',').map(function (s) { return s.trim(); });
     }
     self.getKeywordsAndPlatforms = function () {
         var ret = self.keywords || [];
         return ret.concat('ecosystem:cordova').concat(addCordova(self.getPlatformsArray()));
     };
-}  // End of PluginInfo constructor.
+} // End of PluginInfo constructor.
 
 // Helper function used to prefix every element of an array with cordova-
 // Useful when we want to modify platforms to be cordova-platform
-function addCordova(someArray) {
-    var newArray = someArray.map(function(element) {
+function addCordova (someArray) {
+    var newArray = someArray.map(function (element) {
         return 'cordova-' + element;
     });
     return newArray;
@@ -391,37 +398,37 @@ function addCordova(someArray) {
 // Get all elements of a given name. Both in root and in platform sections
 // for the given platform. If transform is given and is a function, it is
 // applied to each element.
-function _getTags(pelem, tag, platform, transform) {
+function _getTags (pelem, tag, platform, transform) {
     var platformTag = pelem.find('./platform[@name="' + platform + '"]');
     var tagsInRoot = pelem.findall(tag);
     tagsInRoot = tagsInRoot || [];
     var tagsInPlatform = platformTag ? platformTag.findall(tag) : [];
     var tags = tagsInRoot.concat(tagsInPlatform);
-    if ( typeof transform === 'function' ) {
+    if (typeof transform === 'function') {
         tags = tags.map(transform);
     }
     return tags;
 }
 
 // Same as _getTags() but only looks inside a platform section.
-function _getTagsInPlatform(pelem, tag, platform, transform) {
+function _getTagsInPlatform (pelem, tag, platform, transform) {
     var platformTag = pelem.find('./platform[@name="' + platform + '"]');
     var tags = platformTag ? platformTag.findall(tag) : [];
-    if ( typeof transform === 'function' ) {
+    if (typeof transform === 'function') {
         tags = tags.map(transform);
     }
     return tags;
 }
 
 // Check if x is a string 'true'.
-function isStrTrue(x) {
-    return String(x).toLowerCase() == 'true';
+function isStrTrue (x) {
+    return String(x).toLowerCase() === 'true';
 }
 
 module.exports = PluginInfo;
 // Backwards compat:
 PluginInfo.PluginInfo = PluginInfo;
-PluginInfo.loadPluginsDir = function(dir) {
+PluginInfo.loadPluginsDir = function (dir) {
     var PluginInfoProvider = require('./PluginInfoProvider');
     return new PluginInfoProvider().getAllWithinSearchPath(dir);
 };
diff --git a/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js b/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js
index 6240119..5d3f329 100644
--- a/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js
+++ b/node_modules/cordova-common/src/PluginInfo/PluginInfoProvider.js
@@ -24,12 +24,12 @@ var path = require('path');
 var PluginInfo = require('./PluginInfo');
 var events = require('../events');
 
-function PluginInfoProvider() {
+function PluginInfoProvider () {
     this._cache = {};
     this._getAllCache = {};
 }
 
-PluginInfoProvider.prototype.get = function(dirName) {
+PluginInfoProvider.prototype.get = function (dirName) {
     var absPath = path.resolve(dirName);
     if (!this._cache[absPath]) {
         this._cache[absPath] = new PluginInfo(dirName);
@@ -39,7 +39,7 @@ PluginInfoProvider.prototype.get = function(dirName) {
 
 // Normally you don't need to put() entries, but it's used
 // when copying plugins, and in unit tests.
-PluginInfoProvider.prototype.put = function(pluginInfo) {
+PluginInfoProvider.prototype.put = function (pluginInfo) {
     var absPath = path.resolve(pluginInfo.dir);
     this._cache[absPath] = pluginInfo;
 };
@@ -48,7 +48,7 @@ PluginInfoProvider.prototype.put = function(pluginInfo) {
 // Given a dir containing multiple plugins, create a PluginInfo object for
 // each of them and return as array.
 // Should load them all in parallel and return a promise, but not yet.
-PluginInfoProvider.prototype.getAllWithinSearchPath = function(dirName) {
+PluginInfoProvider.prototype.getAllWithinSearchPath = function (dirName) {
     var absPath = path.resolve(dirName);
     if (!this._getAllCache[absPath]) {
         this._getAllCache[absPath] = getAllHelper(absPath, this);
@@ -56,8 +56,8 @@ PluginInfoProvider.prototype.getAllWithinSearchPath = function(dirName) {
     return this._getAllCache[absPath];
 };
 
-function getAllHelper(absPath, provider) {
-    if (!fs.existsSync(absPath)){
+function getAllHelper (absPath, provider) {
+    if (!fs.existsSync(absPath)) {
         return [];
     }
     // If dir itself is a plugin, return it in an array with one element.
@@ -66,7 +66,7 @@ function getAllHelper(absPath, provider) {
     }
     var subdirs = fs.readdirSync(absPath);
     var plugins = [];
-    subdirs.forEach(function(subdir) {
+    subdirs.forEach(function (subdir) {
         var d = path.join(absPath, subdir);
         if (fs.existsSync(path.join(d, 'plugin.xml'))) {
             try {
diff --git a/node_modules/cordova-common/src/PluginManager.js b/node_modules/cordova-common/src/PluginManager.js
index e8968f1..0097db4 100644
--- a/node_modules/cordova-common/src/PluginManager.js
+++ b/node_modules/cordova-common/src/PluginManager.js
@@ -36,7 +36,7 @@ var PluginInfoProvider = require('./PluginInfo/PluginInfoProvider');
  * @param {Object} locations - Platform files and directories
  * @param {IDEProject} ideProject The IDE project to add/remove plugin changes to/from
  */
-function PluginManager(platform, locations, ideProject) {
+function PluginManager (platform, locations, ideProject) {
     this.platform = platform;
     this.locations = locations;
     this.project = ideProject;
@@ -45,7 +45,6 @@ function PluginManager(platform, locations, ideProject) {
     this.munger = new PlatformMunger(platform, locations.root, platformJson, new PluginInfoProvider());
 }
 
-
 /**
  * @constructs PluginManager
  * A convenience shortcut to new PluginManager(...)
@@ -55,7 +54,7 @@ function PluginManager(platform, locations, ideProject) {
  * @param {IDEProject} ideProject The IDE project to add/remove plugin changes to/from
  * @returns new PluginManager instance
  */
-PluginManager.get = function(platform, locations, ideProject) {
+PluginManager.get = function (platform, locations, ideProject) {
     return new PluginManager(platform, locations, ideProject);
 };
 
@@ -82,11 +81,9 @@ module.exports = PluginManager;
  * @returns {Promise} Returns a Q promise, either resolved in case of success, rejected otherwise.
  */
 PluginManager.prototype.doOperation = function (operation, plugin, options) {
-    if (operation !== PluginManager.INSTALL && operation !== PluginManager.UNINSTALL)
-        return Q.reject(new CordovaError('The parameter is incorrect. The opeation must be either "add" or "remove"'));
+    if (operation !== PluginManager.INSTALL && operation !== PluginManager.UNINSTALL) { return Q.reject(new CordovaError('The parameter is incorrect. The opeation must be either "add" or "remove"')); }
 
-    if (!plugin || plugin.constructor.name !== 'PluginInfo')
-        return Q.reject(new CordovaError('The parameter is incorrect. The first parameter should be a PluginInfo instance'));
+    if (!plugin || plugin.constructor.name !== 'PluginInfo') { return Q.reject(new CordovaError('The parameter is incorrect. The first parameter should be a PluginInfo instance')); }
 
     // Set default to empty object to play safe when accesing properties
     options = options || {};
@@ -95,52 +92,52 @@ PluginManager.prototype.doOperation = function (operation, plugin, options) {
     var actions = new ActionStack();
 
     // gather all files need to be handled during operation ...
-    plugin.getFilesAndFrameworks(this.platform)
+    plugin.getFilesAndFrameworks(this.platform, options)
         .concat(plugin.getAssets(this.platform))
         .concat(plugin.getJsModules(this.platform))
-    // ... put them into stack ...
-    .forEach(function(item) {
-        var installer = self.project.getInstaller(item.itemType);
-        var uninstaller = self.project.getUninstaller(item.itemType);
-        var actionArgs = [item, plugin, self.project, options];
-
-        var action;
-        if (operation === PluginManager.INSTALL) {
-            action = actions.createAction.apply(actions, [installer, actionArgs, uninstaller, actionArgs]);
-        } else /* op === PluginManager.UNINSTALL */{
-            action = actions.createAction.apply(actions, [uninstaller, actionArgs, installer, actionArgs]);
-        }
-        actions.push(action);
-    });
+        // ... put them into stack ...
+        .forEach(function (item) {
+            var installer = self.project.getInstaller(item.itemType);
+            var uninstaller = self.project.getUninstaller(item.itemType);
+            var actionArgs = [item, plugin, self.project, options];
+
+            var action;
+            if (operation === PluginManager.INSTALL) {
+                action = actions.createAction.apply(actions, [installer, actionArgs, uninstaller, actionArgs]); /* eslint no-useless-call: 0 */
+            } else /* op === PluginManager.UNINSTALL */{
+                action = actions.createAction.apply(actions, [uninstaller, actionArgs, installer, actionArgs]); /* eslint no-useless-call: 0 */
+            }
+            actions.push(action);
+        });
 
     // ... and run through the action stack
     return actions.process(this.platform)
-    .then(function () {
-        if (self.project.write) {
-            self.project.write();
-        }
-
-        if (operation === PluginManager.INSTALL) {
-            // Ignore passed `is_top_level` option since platform itself doesn't know
-            // anything about managing dependencies - it's responsibility of caller.
-            self.munger.add_plugin_changes(plugin, options.variables, /*is_top_level=*/true, /*should_increment=*/true, options.force);
-            self.munger.platformJson.addPluginMetadata(plugin);
-        } else {
-            self.munger.remove_plugin_changes(plugin, /*is_top_level=*/true);
-            self.munger.platformJson.removePluginMetadata(plugin);
-        }
-
-        // Save everything (munge and plugin/modules metadata)
-        self.munger.save_all();
-
-        var metadata = self.munger.platformJson.generateMetadata();
-        fs.writeFileSync(path.join(self.locations.www, 'cordova_plugins.js'), metadata, 'utf-8');
-
-        // CB-11022 save plugin metadata to both www and platform_www if options.usePlatformWww is specified
-        if (options.usePlatformWww) {
-            fs.writeFileSync(path.join(self.locations.platformWww, 'cordova_plugins.js'), metadata, 'utf-8');
-        }
-    });
+        .then(function () {
+            if (self.project.write) {
+                self.project.write();
+            }
+
+            if (operation === PluginManager.INSTALL) {
+                // Ignore passed `is_top_level` option since platform itself doesn't know
+                // anything about managing dependencies - it's responsibility of caller.
+                self.munger.add_plugin_changes(plugin, options.variables, /* is_top_level= */true, /* should_increment= */true, options.force);
+                self.munger.platformJson.addPluginMetadata(plugin);
+            } else {
+                self.munger.remove_plugin_changes(plugin, /* is_top_level= */true);
+                self.munger.platformJson.removePluginMetadata(plugin);
+            }
+
+            // Save everything (munge and plugin/modules metadata)
+            self.munger.save_all();
+
+            var metadata = self.munger.platformJson.generateMetadata();
+            fs.writeFileSync(path.join(self.locations.www, 'cordova_plugins.js'), metadata, 'utf-8');
+
+            // CB-11022 save plugin metadata to both www and platform_www if options.usePlatformWww is specified
+            if (options.usePlatformWww) {
+                fs.writeFileSync(path.join(self.locations.platformWww, 'cordova_plugins.js'), metadata, 'utf-8');
+            }
+        });
 };
 
 PluginManager.prototype.addPlugin = function (plugin, installOptions) {
diff --git a/node_modules/cordova-common/src/events.js b/node_modules/cordova-common/src/events.js
index 3080416..7038643 100644
--- a/node_modules/cordova-common/src/events.js
+++ b/node_modules/cordova-common/src/events.js
@@ -40,8 +40,7 @@ module.exports.forwardEventsTo = function (eventEmitter) {
         return;
     }
 
-    if (!(eventEmitter instanceof EventEmitter))
-        throw new Error('Cordova events can be redirected to another EventEmitter instance only');
+    if (!(eventEmitter instanceof EventEmitter)) { throw new Error('Cordova events can be redirected to another EventEmitter instance only'); }
 
     // CB-10940 Skipping forwarding to self to avoid infinite recursion.
     // This is the case when the modules are npm-linked.
diff --git a/node_modules/cordova-common/src/superspawn.js b/node_modules/cordova-common/src/superspawn.js
index 96ec09d..424934e 100644
--- a/node_modules/cordova-common/src/superspawn.js
+++ b/node_modules/cordova-common/src/superspawn.js
@@ -24,12 +24,12 @@ var _ = require('underscore');
 var Q = require('q');
 var shell = require('shelljs');
 var events = require('./events');
-var iswin32 = process.platform == 'win32';
+var iswin32 = process.platform === 'win32';
 
 // On Windows, spawn() for batch files requires absolute path & having the extension.
-function resolveWindowsExe(cmd) {
+function resolveWindowsExe (cmd) {
     var winExtensions = ['.exe', '.bat', '.cmd', '.js', '.vbs'];
-    function isValidExe(c) {
+    function isValidExe (c) {
         return winExtensions.indexOf(path.extname(c)) !== -1 && fs.existsSync(c);
     }
     if (isValidExe(cmd)) {
@@ -37,7 +37,7 @@ function resolveWindowsExe(cmd) {
     }
     cmd = shell.which(cmd) || cmd;
     if (!isValidExe(cmd)) {
-        winExtensions.some(function(ext) {
+        winExtensions.some(function (ext) {
             if (fs.existsSync(cmd + ext)) {
                 cmd = cmd + ext;
                 return true;
@@ -47,7 +47,7 @@ function resolveWindowsExe(cmd) {
     return cmd;
 }
 
-function maybeQuote(a) {
+function maybeQuote (a) {
     if (/^[^"].*[ &].*[^"]/.test(a)) return '"' + a + '"';
     return a;
 }
@@ -85,7 +85,7 @@ function maybeQuote(a) {
  *       'stderr': ...
  *   }
  */
-exports.spawn = function(cmd, args, opts) {
+exports.spawn = function (cmd, args, opts) {
     args = args || [];
     opts = opts || {};
     var spawnOpts = {};
@@ -95,7 +95,7 @@ exports.spawn = function(cmd, args, opts) {
         cmd = resolveWindowsExe(cmd);
         // If we couldn't find the file, likely we'll end up failing,
         // but for things like "del", cmd will do the trick.
-        if (path.extname(cmd) != '.exe') {
+        if (path.extname(cmd) !== '.exe') {
             var cmdArgs = '"' + [cmd].concat(args).map(maybeQuote).join(' ') + '"';
             // We need to use /s to ensure that spaces are parsed properly with cmd spawned content
             args = [['/s', '/c', cmdArgs].join(' ')];
@@ -137,7 +137,7 @@ exports.spawn = function(cmd, args, opts) {
 
     if (child.stdout) {
         child.stdout.setEncoding('utf8');
-        child.stdout.on('data', function(data) {
+        child.stdout.on('data', function (data) {
             capturedOut += data;
             d.notify({'stdout': data});
         });
@@ -145,7 +145,7 @@ exports.spawn = function(cmd, args, opts) {
 
     if (child.stderr) {
         child.stderr.setEncoding('utf8');
-        child.stderr.on('data', function(data) {
+        child.stderr.on('data', function (data) {
             capturedErr += data;
             d.notify({'stderr': data});
         });
@@ -153,10 +153,10 @@ exports.spawn = function(cmd, args, opts) {
 
     child.on('close', whenDone);
     child.on('error', whenDone);
-    function whenDone(arg) {
+    function whenDone (arg) {
         child.removeListener('close', whenDone);
         child.removeListener('error', whenDone);
-        var code = typeof arg == 'number' ? arg : arg && arg.code;
+        var code = typeof arg === 'number' ? arg : arg && arg.code;
 
         events.emit('verbose', 'Command finished with error code ' + code + ': ' + cmd + ' ' + args);
         if (code === 0) {
@@ -181,10 +181,9 @@ exports.spawn = function(cmd, args, opts) {
     return d.promise;
 };
 
-exports.maybeSpawn = function(cmd, args, opts) {
+exports.maybeSpawn = function (cmd, args, opts) {
     if (fs.existsSync(cmd)) {
         return exports.spawn(cmd, args, opts);
     }
     return Q(null);
 };
-
diff --git a/node_modules/cordova-common/src/util/addProperty.js b/node_modules/cordova-common/src/util/addProperty.js
index 7dc4dc1..3e48174 100644
--- a/node_modules/cordova-common/src/util/addProperty.js
+++ b/node_modules/cordova-common/src/util/addProperty.js
@@ -17,8 +17,8 @@
        under the License.
 */
 
-module.exports = function addProperty(module, property, modulePath, obj) {
-    
+module.exports = function addProperty (module, property, modulePath, obj) {
+
     obj = obj || module.exports;
     // Add properties as getter to delay load the modules on first invocation
     Object.defineProperty(obj, property, {
diff --git a/node_modules/cordova-common/src/util/plist-helpers.js b/node_modules/cordova-common/src/util/plist-helpers.js
index 38eb31b..5ec4c1d 100644
--- a/node_modules/cordova-common/src/util/plist-helpers.js
+++ b/node_modules/cordova-common/src/util/plist-helpers.js
@@ -15,32 +15,32 @@
     KIND, either express or implied.  See the License for the
     specific language governing permissions and limitations
     under the License.
-*/ 
+*/
+/* eslint no-useless-escape: 0 */
 
 // contains PLIST utility functions
-var __     = require('underscore');
+var __ = require('underscore');
 var plist = require('plist');
 
 // adds node to doc at selector
 module.exports.graftPLIST = graftPLIST;
-function graftPLIST(doc, xml, selector) {
-    var obj = plist.parse('<plist>'+xml+'</plist>');
+function graftPLIST (doc, xml, selector) {
+    var obj = plist.parse('<plist>' + xml + '</plist>');
 
     var node = doc[selector];
-    if (node && Array.isArray(node) && Array.isArray(obj)){
+    if (node && Array.isArray(node) && Array.isArray(obj)) {
         node = node.concat(obj);
-        for (var i =0;i<node.length; i++){
-            for (var j=i+1; j<node.length; ++j) {
-              if (nodeEqual(node[i], node[j]))
-                    node.splice(j--,1);
+        for (var i = 0; i < node.length; i++) {
+            for (var j = i + 1; j < node.length; ++j) {
+                if (nodeEqual(node[i], node[j])) { node.splice(j--, 1); }
             }
         }
         doc[selector] = node;
     } else {
-        //plist uses objects for <dict>. If we have two dicts we merge them instead of
+        // plist uses objects for <dict>. If we have two dicts we merge them instead of
         // overriding the old one. See CB-6472
-        if (node && __.isObject(node) && __.isObject(obj) && !__.isDate(node) && !__.isDate(obj)){//arrays checked above
-            __.extend(obj,node);
+        if (node && __.isObject(node) && __.isObject(obj) && !__.isDate(node) && !__.isDate(obj)) { // arrays checked above
+            __.extend(obj, node);
         }
         doc[selector] = obj;
     }
@@ -50,15 +50,15 @@ function graftPLIST(doc, xml, selector) {
 
 // removes node from doc at selector
 module.exports.prunePLIST = prunePLIST;
-function prunePLIST(doc, xml, selector) {
-    var obj = plist.parse('<plist>'+xml+'</plist>');
+function prunePLIST (doc, xml, selector) {
+    var obj = plist.parse('<plist>' + xml + '</plist>');
 
     pruneOBJECT(doc, selector, obj);
 
     return true;
 }
 
-function pruneOBJECT(doc, selector, fragment) {
+function pruneOBJECT (doc, selector, fragment) {
     if (Array.isArray(fragment) && Array.isArray(doc[selector])) {
         var empty = true;
         for (var i in fragment) {
@@ -66,13 +66,11 @@ function pruneOBJECT(doc, selector, fragment) {
                 empty = pruneOBJECT(doc[selector], j, fragment[i]) && empty;
             }
         }
-        if (empty)
-        {
+        if (empty) {
             delete doc[selector];
             return true;
         }
-    }
-    else if (nodeEqual(doc[selector], fragment)) {
+    } else if (nodeEqual(doc[selector], fragment)) {
         delete doc[selector];
         return true;
     }
@@ -80,14 +78,11 @@ function pruneOBJECT(doc, selector, fragment) {
     return false;
 }
 
-function nodeEqual(node1, node2) {
-    if (typeof node1 != typeof node2)
-        return false;
-    else if (typeof node1 == 'string') {
-        node2 = escapeRE(node2).replace(new RegExp('\\$[a-zA-Z0-9-_]+','gm'),'(.*?)');
+function nodeEqual (node1, node2) {
+    if (typeof node1 !== typeof node2) { return false; } else if (typeof node1 === 'string') {
+        node2 = escapeRE(node2).replace(/\\\$\S+/gm, '(.*?)');
         return new RegExp('^' + node2 + '$').test(node1);
-    }
-    else {
+    } else {
         for (var key in node2) {
             if (!nodeEqual(node1[key], node2[key])) return false;
         }
@@ -96,6 +91,6 @@ function nodeEqual(node1, node2) {
 }
 
 // escape string for use in regex
-function escapeRE(str) {
-    return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '$&');
+function escapeRE (str) {
+    return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
 }
diff --git a/node_modules/cordova-common/src/util/xml-helpers.js b/node_modules/cordova-common/src/util/xml-helpers.js
index b4b0490..e2c8fd3 100644
--- a/node_modules/cordova-common/src/util/xml-helpers.js
+++ b/node_modules/cordova-common/src/util/xml-helpers.js
@@ -15,32 +15,31 @@
     KIND, either express or implied.  See the License for the
     specific language governing permissions and limitations
     under the License.
-*/ 
-
-/* jshint sub:true, laxcomma:true */
+*/
 
 /**
  * contains XML utility functions, some of which are specific to elementtree
  */
 
-var fs = require('fs')
-  , path = require('path')
-  , _ = require('underscore')
-  , et = require('elementtree')
-  ;
+var fs = require('fs');
+var path = require('path');
+var _ = require('underscore');
+var et = require('elementtree');
 
-  var ROOT = /^\/([^\/]*)/,
-      ABSOLUTE = /^\/([^\/]*)\/(.*)/;
+/* eslint-disable no-useless-escape */
+var ROOT = /^\/([^\/]*)/;
+var ABSOLUTE = /^\/([^\/]*)\/(.*)/;
+/* eslint-enable no-useless-escape */
 
 module.exports = {
     // compare two et.XML nodes, see if they match
     // compares tagName, text, attributes and children (recursively)
-    equalNodes: function(one, two) {
-        if (one.tag != two.tag) {
+    equalNodes: function (one, two) {
+        if (one.tag !== two.tag) {
             return false;
-        } else if (one.text.trim() != two.text.trim()) {
+        } else if (one.text.trim() !== two.text.trim()) {
             return false;
-        } else if (one._children.length != two._children.length) {
+        } else if (one._children.length !== two._children.length) {
             return false;
         }
 
@@ -56,13 +55,13 @@ module.exports = {
     },
 
     // adds node to doc at selector, creating parent if it doesn't exist
-    graftXML: function(doc, nodes, selector, after) {
+    graftXML: function (doc, nodes, selector, after) {
         var parent = module.exports.resolveParent(doc, selector);
         if (!parent) {
-            //Try to create the parent recursively if necessary
+            // Try to create the parent recursively if necessary
             try {
-                var parentToCreate = et.XML('<' + path.basename(selector) + '>'),
-                    parentSelector = path.dirname(selector);
+                var parentToCreate = et.XML('<' + path.basename(selector) + '>');
+                var parentSelector = path.dirname(selector);
 
                 this.graftXML(doc, [parentToCreate], parentSelector);
             } catch (e) {
@@ -78,7 +77,7 @@ module.exports = {
                 var children = parent.getchildren();
                 var insertIdx = after ? findInsertIdx(children, after) : children.length;
 
-                //TODO: replace with parent.insert after the bug in ElementTree is fixed
+                // TODO: replace with parent.insert after the bug in ElementTree is fixed
                 parent.getchildren().splice(insertIdx, 0, node);
             }
         });
@@ -88,7 +87,7 @@ module.exports = {
 
     // adds new attributes to doc at selector
     // Will only merge if attribute has not been modified already or --force is used
-    graftXMLMerge: function(doc, nodes, selector, xml) {
+    graftXMLMerge: function (doc, nodes, selector, xml) {
         var target = module.exports.resolveParent(doc, selector);
         if (!target) return false;
 
@@ -107,7 +106,7 @@ module.exports = {
 
     // overwrite all attributes to doc at selector with new attributes
     // Will only overwrite if attribute has not been modified already or --force is used
-    graftXMLOverwrite: function(doc, nodes, selector, xml) {
+    graftXMLOverwrite: function (doc, nodes, selector, xml) {
         var target = module.exports.resolveParent(doc, selector);
         if (!target) return false;
 
@@ -132,7 +131,7 @@ module.exports = {
     },
 
     // removes node from doc at selector
-    pruneXML: function(doc, nodes, selector) {
+    pruneXML: function (doc, nodes, selector) {
         var parent = module.exports.resolveParent(doc, selector);
         if (!parent) return false;
 
@@ -149,7 +148,7 @@ module.exports = {
     },
 
     // restores attributes from doc at selector
-    pruneXMLRestore: function(doc, selector, xml) {
+    pruneXMLRestore: function (doc, selector, xml) {
         var target = module.exports.resolveParent(doc, selector);
         if (!target) return false;
 
@@ -160,7 +159,7 @@ module.exports = {
         return true;
     },
 
-    prunXMLRemove: function(doc, selector, nodes) {
+    pruneXMLRemove: function (doc, selector, nodes) {
         var target = module.exports.resolveParent(doc, selector);
         if (!target) return false;
 
@@ -177,11 +176,10 @@ module.exports = {
 
     },
 
-
     parseElementtreeSync: function (filename) {
         var contents = fs.readFileSync(filename, 'utf-8');
-        if(contents) {
-            //Windows is the BOM. Skip the Byte Order Mark.
+        if (contents) {
+            // Windows is the BOM. Skip the Byte Order Mark.
             contents = contents.substring(contents.indexOf('<'));
         }
         return new et.ElementTree(et.XML(contents));
@@ -194,7 +192,7 @@ module.exports = {
         if (ROOT.test(selector)) {
             tagName = selector.match(ROOT)[1];
             // test for wildcard "any-tag" root selector
-            if (tagName == '*' || tagName === doc._root.tag) {
+            if (tagName === '*' || tagName === doc._root.tag) {
                 parent = doc._root;
 
                 // could be an absolute path, but not selecting the root
@@ -212,11 +210,12 @@ module.exports = {
     }
 };
 
-function findChild(node, parent) {
-    var matchingKids = parent.findall(node.tag)
-      , i, j;
+function findChild (node, parent) {
+    var matchingKids = parent.findall(node.tag);
+    var i;
+    var j;
 
-    for (i = 0, j = matchingKids.length ; i < j ; i++) {
+    for (i = 0, j = matchingKids.length; i < j; i++) {
         if (module.exports.equalNodes(node, matchingKids[i])) {
             return matchingKids[i];
         }
@@ -224,13 +223,13 @@ function findChild(node, parent) {
     return null;
 }
 
-function uniqueChild(node, parent) {
-    var matchingKids = parent.findall(node.tag)
-      , i = 0;
+function uniqueChild (node, parent) {
+    var matchingKids = parent.findall(node.tag);
+    var i = 0;
 
     if (matchingKids.length === 0) {
         return true;
-    } else  {
+    } else {
         for (i; i < matchingKids.length; i++) {
             if (module.exports.equalNodes(node, matchingKids[i])) {
                 return false;
@@ -244,51 +243,51 @@ function uniqueChild(node, parent) {
 // of tags after which the insertion should be made. E.g. If we need to
 // insert an element C, and the rule is that the order of children has to be
 // As, Bs, Cs. After will be equal to "C;B;A".
-function findInsertIdx(children, after) {
-    var childrenTags = children.map(function(child) { return child.tag; });
+function findInsertIdx (children, after) {
+    var childrenTags = children.map(function (child) { return child.tag; });
     var afters = after.split(';');
-    var afterIndexes = afters.map(function(current) { return childrenTags.lastIndexOf(current); });
-    var foundIndex = _.find(afterIndexes, function(index) { return index != -1; });
+    var afterIndexes = afters.map(function (current) { return childrenTags.lastIndexOf(current); });
+    var foundIndex = _.find(afterIndexes, function (index) { return index !== -1; });
 
-    //add to the beginning if no matching nodes are found
-    return typeof foundIndex === 'undefined' ? 0 : foundIndex+1;
+    // add to the beginning if no matching nodes are found
+    return typeof foundIndex === 'undefined' ? 0 : foundIndex + 1;
 }
 
-var BLACKLIST = ['platform', 'feature','plugin','engine'];
+var BLACKLIST = ['platform', 'feature', 'plugin', 'engine'];
 var SINGLETONS = ['content', 'author', 'name'];
-function mergeXml(src, dest, platform, clobber) {
+function mergeXml (src, dest, platform, clobber) {
     // Do nothing for blacklisted tags.
-    if (BLACKLIST.indexOf(src.tag) != -1) return;
+    if (BLACKLIST.indexOf(src.tag) !== -1) return;
 
-    //Handle attributes
+    // Handle attributes
     Object.getOwnPropertyNames(src.attrib).forEach(function (attribute) {
         if (clobber || !dest.attrib[attribute]) {
             dest.attrib[attribute] = src.attrib[attribute];
         }
     });
-    //Handle text
+    // Handle text
     if (src.text && (clobber || !dest.text)) {
         dest.text = src.text;
     }
-    //Handle children
+    // Handle children
     src.getchildren().forEach(mergeChild);
 
-    //Handle platform
+    // Handle platform
     if (platform) {
         src.findall('platform[@name="' + platform + '"]').forEach(function (platformElement) {
             platformElement.getchildren().forEach(mergeChild);
         });
     }
 
-    //Handle duplicate preference tags (by name attribute)
+    // Handle duplicate preference tags (by name attribute)
     removeDuplicatePreferences(dest);
 
     function mergeChild (srcChild) {
-        var srcTag = srcChild.tag,
-            destChild = new et.Element(srcTag),
-            foundChild,
-            query = srcTag + '',
-            shouldMerge = true;
+        var srcTag = srcChild.tag;
+        var destChild = new et.Element(srcTag);
+        var foundChild;
+        var query = srcTag + '';
+        var shouldMerge = true;
 
         if (BLACKLIST.indexOf(srcTag) !== -1) return;
 
@@ -299,11 +298,11 @@ function mergeXml(src, dest, platform, clobber) {
                 dest.remove(destChild);
             }
         } else {
-            //Check for an exact match and if you find one don't add
+            // Check for an exact match and if you find one don't add
             var mergeCandidates = dest.findall(query)
-            .filter(function (foundChild) {
-                return foundChild && textMatch(srcChild, foundChild) && attribMatch(srcChild, foundChild);
-            });
+                .filter(function (foundChild) {
+                    return foundChild && textMatch(srcChild, foundChild) && attribMatch(srcChild, foundChild);
+                });
 
             if (mergeCandidates.length > 0) {
                 destChild = mergeCandidates[0];
@@ -316,20 +315,20 @@ function mergeXml(src, dest, platform, clobber) {
         dest.append(destChild);
     }
 
-    function removeDuplicatePreferences(xml) {
+    function removeDuplicatePreferences (xml) {
         // reduce preference tags to a hashtable to remove dupes
-        var prefHash = xml.findall('preference[@name][@value]').reduce(function(previousValue, currentValue) {
+        var prefHash = xml.findall('preference[@name][@value]').reduce(function (previousValue, currentValue) {
             previousValue[ currentValue.attrib.name ] = currentValue.attrib.value;
             return previousValue;
         }, {});
 
         // remove all preferences
-        xml.findall('preference[@name][@value]').forEach(function(pref) {
+        xml.findall('preference[@name][@value]').forEach(function (pref) {
             xml.remove(pref);
         });
 
         // write new preferences
-        Object.keys(prefHash).forEach(function(key, index) {
+        Object.keys(prefHash).forEach(function (key, index) {
             var element = et.SubElement(xml, 'preference');
             element.set('name', key);
             element.set('value', this[key]);
@@ -340,24 +339,24 @@ function mergeXml(src, dest, platform, clobber) {
 // Expose for testing.
 module.exports.mergeXml = mergeXml;
 
-function textMatch(elm1, elm2) {
-    var text1 = elm1.text ? elm1.text.replace(/\s+/, '') : '',
-        text2 = elm2.text ? elm2.text.replace(/\s+/, '') : '';
+function textMatch (elm1, elm2) {
+    var text1 = elm1.text ? elm1.text.replace(/\s+/, '') : '';
+    var text2 = elm2.text ? elm2.text.replace(/\s+/, '') : '';
     return (text1 === '' || text1 === text2);
 }
 
-function attribMatch(one, two) {
+function attribMatch (one, two) {
     var oneAttribKeys = Object.keys(one.attrib);
     var twoAttribKeys = Object.keys(two.attrib);
 
-    if (oneAttribKeys.length != twoAttribKeys.length) {
+    if (oneAttribKeys.length !== twoAttribKeys.length) {
         return false;
     }
 
     for (var i = 0; i < oneAttribKeys.length; i++) {
         var attribName = oneAttribKeys[i];
 
-        if (one.attrib[attribName] != two.attrib[attribName]) {
+        if (one.attrib[attribName] !== two.attrib[attribName]) {
             return false;
         }
     }
diff --git a/node_modules/cordova-registry-mapper/package.json b/node_modules/cordova-registry-mapper/package.json
index 7c43b3b..256e33b 100644
--- a/node_modules/cordova-registry-mapper/package.json
+++ b/node_modules/cordova-registry-mapper/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.1.8 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
   "_from": "cordova-registry-mapper@>=1.1.8 <2.0.0",
@@ -36,11 +36,11 @@
   "_requiredBy": [
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
+  "_resolved": "http://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz",
   "_shasum": "e244b9185b8175473bff6079324905115f83dc7c",
   "_shrinkwrap": null,
   "_spec": "cordova-registry-mapper@^1.1.8",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "author": {
     "name": "Steve Gill"
   },
@@ -73,7 +73,8 @@
   ],
   "name": "cordova-registry-mapper",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "[![Build Status](https://travis-ci.org/stevengill/cordova-registry-mapper.svg?branch=master)](https://travis-ci.org/stevengill/cordova-registry-mapper)\n\n#Cordova Registry Mapper\n\nThis module is used to map Cordova plugin ids to package names and vice versa.\n\nWhen Cordova users add plugins to their projects using ids\n(e.g. `cordova plugin add org.apache.cordova.device`),\nthis module will map that id to the corresponding package name so `cordova-lib` knows what to fetc [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/stevengill/cordova-registry-mapper.git"
diff --git a/node_modules/elementtree/package.json b/node_modules/elementtree/package.json
index d22e3ca..d309262 100644
--- a/node_modules/elementtree/package.json
+++ b/node_modules/elementtree/package.json
@@ -2,18 +2,18 @@
   "_args": [
     [
       {
-        "raw": "elementtree@^0.1.6",
+        "raw": "elementtree@0.1.6",
         "scope": null,
         "escapedName": "elementtree",
         "name": "elementtree",
-        "rawSpec": "^0.1.6",
-        "spec": ">=0.1.6 <0.2.0",
-        "type": "range"
+        "rawSpec": "0.1.6",
+        "spec": "0.1.6",
+        "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
-  "_from": "elementtree@>=0.1.6 <0.2.0",
+  "_from": "elementtree@0.1.6",
   "_id": "elementtree@0.1.6",
   "_inCache": true,
   "_location": "/elementtree",
@@ -24,22 +24,22 @@
   "_npmVersion": "1.3.24",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "elementtree@^0.1.6",
+    "raw": "elementtree@0.1.6",
     "scope": null,
     "escapedName": "elementtree",
     "name": "elementtree",
-    "rawSpec": "^0.1.6",
-    "spec": ">=0.1.6 <0.2.0",
-    "type": "range"
+    "rawSpec": "0.1.6",
+    "spec": "0.1.6",
+    "type": "version"
   },
   "_requiredBy": [
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
+  "_resolved": "http://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
   "_shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c",
   "_shrinkwrap": null,
-  "_spec": "elementtree@^0.1.6",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_spec": "elementtree@0.1.6",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "author": {
     "name": "Rackspace US, Inc."
   },
@@ -96,7 +96,8 @@
   ],
   "name": "elementtree",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "node-elementtree\n====================\n\nnode-elementtree is a [Node.js](http://nodejs.org) XML parser and serializer based upon the [Python ElementTree v1.3](http://effbot.org/zone/element-index.htm) module.\n\nInstallation\n====================\n\n    $ npm install elementtree\n    \nUsing the library\n====================\n\nFor the usage refer to the Python ElementTree library documentation - [http://effbot.org/zone/element-index.htm#usage](http://effbot.org/zone/elemen [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/racker/node-elementtree.git"
diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json
index 278fdb6..8c2a4bb 100644
--- a/node_modules/glob/package.json
+++ b/node_modules/glob/package.json
@@ -10,7 +10,7 @@
         "spec": ">=5.0.13 <6.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
   "_from": "glob@>=5.0.13 <6.0.0",
@@ -36,11 +36,11 @@
   "_requiredBy": [
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+  "_resolved": "http://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
   "_shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1",
   "_shrinkwrap": null,
   "_spec": "glob@^5.0.13",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -88,7 +88,8 @@
   ],
   "name": "glob",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/node-glob.git"
diff --git a/node_modules/inflight/package.json b/node_modules/inflight/package.json
index ec25ea5..171a7c4 100644
--- a/node_modules/inflight/package.json
+++ b/node_modules/inflight/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.0.4 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/glob"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/glob"
     ]
   ],
   "_from": "inflight@>=1.0.4 <2.0.0",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/glob"
   ],
-  "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+  "_resolved": "http://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
   "_shasum": "49bd6331d7d02d0c09bc910a1075ba8165b56df9",
   "_shrinkwrap": null,
   "_spec": "inflight@^1.0.4",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/glob",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/glob",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -93,7 +93,8 @@
   ],
   "name": "inflight",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# inflight\n\nAdd callbacks to requests in flight to avoid async duplication\n\n## USAGE\n\n```javascript\nvar inflight = require('inflight')\n\n// some request that does some stuff\nfunction req(key, callback) {\n  // key is any random string.  like a url or filename or whatever.\n  //\n  // will return either a falsey value, indicating that the\n  // request for this key is already in flight, or a new callback\n  // which when called will call all callbacks passed to infli [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/npm/inflight.git"
diff --git a/node_modules/inherits/package.json b/node_modules/inherits/package.json
index 0c2fa45..7c3b33a 100644
--- a/node_modules/inherits/package.json
+++ b/node_modules/inherits/package.json
@@ -10,7 +10,7 @@
         "spec": ">=2.0.0 <3.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/glob"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/glob"
     ]
   ],
   "_from": "inherits@>=2.0.0 <3.0.0",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/glob"
   ],
-  "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+  "_resolved": "http://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
   "_shasum": "633c2c83e3da42a502f52466022480f4208261de",
   "_shrinkwrap": null,
   "_spec": "inherits@2",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/glob",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/glob",
   "browser": "./inherits_browser.js",
   "bugs": {
     "url": "https://github.com/isaacs/inherits/issues"
@@ -85,7 +85,8 @@
   ],
   "name": "inherits",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule t [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/inherits.git"
diff --git a/node_modules/ios-sim/node_modules/.bin/shjs b/node_modules/ios-sim/node_modules/.bin/shjs
deleted file mode 120000
index a044997..0000000
--- a/node_modules/ios-sim/node_modules/.bin/shjs
+++ /dev/null
@@ -1 +0,0 @@
-../shelljs/bin/shjs
\ No newline at end of file
diff --git a/node_modules/ios-sim/node_modules/bplist-parser/package.json b/node_modules/ios-sim/node_modules/bplist-parser/package.json
index 48f072c..1497b6b 100644
--- a/node_modules/ios-sim/node_modules/bplist-parser/package.json
+++ b/node_modules/ios-sim/node_modules/bplist-parser/package.json
@@ -1,52 +1,87 @@
 {
-  "name": "bplist-parser",
-  "version": "0.0.6",
-  "description": "Binary plist parser.",
-  "main": "bplistParser.js",
-  "scripts": {
-    "test": "./node_modules/nodeunit/bin/nodeunit test"
+  "_args": [
+    [
+      {
+        "raw": "bplist-parser@^0.0.6",
+        "scope": null,
+        "escapedName": "bplist-parser",
+        "name": "bplist-parser",
+        "rawSpec": "^0.0.6",
+        "spec": ">=0.0.6 <0.0.7",
+        "type": "range"
+      },
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/ios-sim"
+    ]
+  ],
+  "_from": "bplist-parser@>=0.0.6 <0.0.7",
+  "_id": "bplist-parser@0.0.6",
+  "_inCache": true,
+  "_location": "/ios-sim/bplist-parser",
+  "_npmUser": {
+    "name": "joeferner",
+    "email": "joe@fernsroth.com"
   },
-  "keywords": [
-    "bplist",
-    "plist",
-    "parser"
+  "_npmVersion": "1.4.14",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "bplist-parser@^0.0.6",
+    "scope": null,
+    "escapedName": "bplist-parser",
+    "name": "bplist-parser",
+    "rawSpec": "^0.0.6",
+    "spec": ">=0.0.6 <0.0.7",
+    "type": "range"
+  },
+  "_requiredBy": [
+    "/ios-sim"
   ],
+  "_resolved": "http://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
+  "_shasum": "38da3471817df9d44ab3892e27707bbbd75a11b9",
+  "_shrinkwrap": null,
+  "_spec": "bplist-parser@^0.0.6",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/ios-sim",
   "author": {
     "name": "Joe Ferner",
     "email": "joe.ferner@nearinfinity.com"
   },
-  "license": "MIT",
+  "bugs": {
+    "url": "https://github.com/nearinfinity/node-bplist-parser/issues"
+  },
+  "dependencies": {},
+  "description": "Binary plist parser.",
   "devDependencies": {
     "nodeunit": "~0.7.4"
   },
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/nearinfinity/node-bplist-parser.git"
+  "directories": {},
+  "dist": {
+    "shasum": "38da3471817df9d44ab3892e27707bbbd75a11b9",
+    "tarball": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz"
   },
   "gitHead": "a2230a5df3c7014ffbe5761bcb091ea2d061b47b",
-  "bugs": {
-    "url": "https://github.com/nearinfinity/node-bplist-parser/issues"
-  },
-  "homepage": "https://github.com/nearinfinity/node-bplist-parser",
-  "_id": "bplist-parser@0.0.6",
-  "_shasum": "38da3471817df9d44ab3892e27707bbbd75a11b9",
-  "_from": "bplist-parser@>=0.0.6 <0.0.7",
-  "_npmVersion": "1.4.14",
-  "_npmUser": {
-    "name": "joeferner",
-    "email": "joe@fernsroth.com"
-  },
+  "homepage": "https://github.com/nearinfinity/node-bplist-parser#readme",
+  "keywords": [
+    "bplist",
+    "plist",
+    "parser"
+  ],
+  "license": "MIT",
+  "main": "bplistParser.js",
   "maintainers": [
     {
       "name": "joeferner",
       "email": "joe@fernsroth.com"
     }
   ],
-  "dist": {
-    "shasum": "38da3471817df9d44ab3892e27707bbbd75a11b9",
-    "tarball": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz"
+  "name": "bplist-parser",
+  "optionalDependencies": {},
+  "readme": "bplist-parser\n=============\n\nBinary Mac OS X Plist (property list) parser.\n\n## Installation\n\n```bash\n$ npm install bplist-parser\n```\n\n## Quick Examples\n\n```javascript\nvar bplist = require('bplist-parser');\n\nbplist.parseFile('myPlist.bplist', function(err, obj) {\n  if (err) throw err;\n\n  console.log(JSON.stringify(obj));\n});\n```\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2012 Near Infinity Corporation\n\nPermission is hereby granted, free of char [...]
+  "readmeFilename": "README.md",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/nearinfinity/node-bplist-parser.git"
   },
-  "directories": {},
-  "_resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
-  "readme": "ERROR: No README data found!"
+  "scripts": {
+    "test": "./node_modules/nodeunit/bin/nodeunit test"
+  },
+  "version": "0.0.6"
 }
diff --git a/node_modules/ios-sim/node_modules/nopt/package.json b/node_modules/ios-sim/node_modules/nopt/package.json
index b833b32..879e8cf 100644
--- a/node_modules/ios-sim/node_modules/nopt/package.json
+++ b/node_modules/ios-sim/node_modules/nopt/package.json
@@ -1,60 +1,94 @@
 {
-  "name": "nopt",
-  "version": "1.0.9",
-  "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
+  "_args": [
+    [
+      {
+        "raw": "nopt@1.0.9",
+        "scope": null,
+        "escapedName": "nopt",
+        "name": "nopt",
+        "rawSpec": "1.0.9",
+        "spec": "1.0.9",
+        "type": "version"
+      },
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/ios-sim"
+    ]
+  ],
+  "_defaultsLoaded": true,
+  "_engineSupported": true,
+  "_from": "nopt@1.0.9",
+  "_id": "nopt@1.0.9",
+  "_inCache": true,
+  "_location": "/ios-sim/nopt",
+  "_nodeVersion": "v0.5.8-pre",
+  "_npmUser": {
+    "name": "isaacs",
+    "email": "i@izs.me"
+  },
+  "_npmVersion": "1.0.30",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "nopt@1.0.9",
+    "scope": null,
+    "escapedName": "nopt",
+    "name": "nopt",
+    "rawSpec": "1.0.9",
+    "spec": "1.0.9",
+    "type": "version"
+  },
+  "_requiredBy": [
+    "/ios-sim"
+  ],
+  "_resolved": "http://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz",
+  "_shasum": "3bc0d7cba7bfb0d5a676dbed7c0ebe48a4fd454e",
+  "_shrinkwrap": null,
+  "_spec": "nopt@1.0.9",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/ios-sim",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
     "url": "http://blog.izs.me/"
   },
-  "main": "lib/nopt.js",
-  "scripts": {
-    "test": "node lib/nopt.js"
-  },
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/isaacs/nopt.git"
-  },
   "bin": {
     "nopt": "./bin/nopt.js"
   },
-  "license": {
-    "type": "MIT",
-    "url": "https://github.com/isaacs/nopt/raw/master/LICENSE"
+  "bugs": {
+    "url": "https://github.com/isaacs/nopt/issues"
   },
   "dependencies": {
     "abbrev": "1"
   },
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "_id": "nopt@1.0.9",
+  "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.",
   "devDependencies": {},
-  "engines": {
-    "node": "*"
-  },
-  "_engineSupported": true,
-  "_npmVersion": "1.0.30",
-  "_nodeVersion": "v0.5.8-pre",
-  "_defaultsLoaded": true,
+  "directories": {},
   "dist": {
     "shasum": "3bc0d7cba7bfb0d5a676dbed7c0ebe48a4fd454e",
     "tarball": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz"
   },
+  "engines": {
+    "node": "*"
+  },
+  "homepage": "https://github.com/isaacs/nopt#readme",
+  "license": {
+    "type": "MIT",
+    "url": "https://github.com/isaacs/nopt/raw/master/LICENSE"
+  },
+  "main": "lib/nopt.js",
   "maintainers": [
     {
       "name": "isaacs",
       "email": "i@izs.me"
     }
   ],
-  "directories": {},
-  "_shasum": "3bc0d7cba7bfb0d5a676dbed7c0ebe48a4fd454e",
-  "_resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz",
-  "_from": "nopt@1.0.9",
-  "bugs": {
-    "url": "https://github.com/isaacs/nopt/issues"
+  "name": "nopt",
+  "optionalDependencies": {},
+  "readme": "If you want to write an option parser, and have it be good, there are\ntwo ways to do it.  The Right Way, and the Wrong Way.\n\nThe Wrong Way is to sit down and write an option parser.  We've all done\nthat.\n\nThe Right Way is to write some complex configurable program with so many\noptions that you go half-insane just trying to manage them all, and put\nit off with duct-tape solutions until you see exactly to the core of the\nproblem, and finally snap and write an awesome  [...]
+  "readmeFilename": "README.md",
+  "repository": {
+    "type": "git",
+    "url": "git+ssh://git@github.com/isaacs/nopt.git"
+  },
+  "scripts": {
+    "test": "node lib/nopt.js"
   },
-  "readme": "ERROR: No README data found!",
-  "homepage": "https://github.com/isaacs/nopt#readme"
+  "version": "1.0.9"
 }
diff --git a/node_modules/ios-sim/node_modules/shelljs/.documentup.json b/node_modules/ios-sim/node_modules/shelljs/.documentup.json
deleted file mode 100644
index 57fe301..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/.documentup.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "name": "ShellJS",
-  "twitter": [
-    "r2r"
-  ]
-}
diff --git a/node_modules/ios-sim/node_modules/shelljs/.jshintrc b/node_modules/ios-sim/node_modules/shelljs/.jshintrc
deleted file mode 100644
index a80c559..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/.jshintrc
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "loopfunc": true,
-  "sub": true,
-  "undef": true,
-  "unused": true,
-  "node": true
-}
\ No newline at end of file
diff --git a/node_modules/ios-sim/node_modules/shelljs/.npmignore b/node_modules/ios-sim/node_modules/shelljs/.npmignore
deleted file mode 100644
index 6b20c38..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-test/
-tmp/
\ No newline at end of file
diff --git a/node_modules/ios-sim/node_modules/shelljs/.travis.yml b/node_modules/ios-sim/node_modules/shelljs/.travis.yml
deleted file mode 100644
index 99cdc74..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: node_js
-node_js:
-  - "0.8"
-  - "0.10"
-  - "0.11"
diff --git a/node_modules/ios-sim/node_modules/shelljs/LICENSE b/node_modules/ios-sim/node_modules/shelljs/LICENSE
deleted file mode 100644
index 1b35ee9..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright (c) 2012, Artur Adib <aadib@mozilla.com>
-All rights reserved.
-
-You may use this project under the terms of the New BSD license as follows:
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of Artur Adib nor the
-      names of the contributors may be used to endorse or promote products
-      derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
-ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/ios-sim/node_modules/shelljs/README.md b/node_modules/ios-sim/node_modules/shelljs/README.md
deleted file mode 100644
index 9120623..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/README.md
+++ /dev/null
@@ -1,552 +0,0 @@
-# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)
-
-ShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts!
-
-The project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in projects like:
-
-+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader
-+ [Firebug](http://getfirebug.com/) - Firefox's infamous debugger
-+ [JSHint](http://jshint.com) - Most popular JavaScript linter
-+ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers
-+ [Yeoman](http://yeoman.io/) - Web application stack and development tool
-+ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation
-
-and [many more](https://npmjs.org/browse/depended/shelljs).
-
-## Installing
-
-Via npm:
-
-```bash
-$ npm install [-g] shelljs
-```
-
-If the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to
-run ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder:
-
-```bash
-$ shjs my_script
-```
-
-You can also just copy `shell.js` into your project's directory, and `require()` accordingly.
-
-
-## Examples
-
-### JavaScript
-
-```javascript
-require('shelljs/global');
-
-if (!which('git')) {
-  echo('Sorry, this script requires git');
-  exit(1);
-}
-
-// Copy files to release dir
-mkdir('-p', 'out/Release');
-cp('-R', 'stuff/*', 'out/Release');
-
-// Replace macros in each .js file
-cd('lib');
-ls('*.js').forEach(function(file) {
-  sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
-  sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file);
-  sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file);
-});
-cd('..');
-
-// Run external tool synchronously
-if (exec('git commit -am "Auto-commit"').code !== 0) {
-  echo('Error: Git commit failed');
-  exit(1);
-}
-```
-
-### CoffeeScript
-
-```coffeescript
-require 'shelljs/global'
-
-if not which 'git'
-  echo 'Sorry, this script requires git'
-  exit 1
-
-# Copy files to release dir
-mkdir '-p', 'out/Release'
-cp '-R', 'stuff/*', 'out/Release'
-
-# Replace macros in each .js file
-cd 'lib'
-for file in ls '*.js'
-  sed '-i', 'BUILD_VERSION', 'v0.1.2', file
-  sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file
-  sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat 'macro.js', file
-cd '..'
-
-# Run external tool synchronously
-if (exec 'git commit -am "Auto-commit"').code != 0
-  echo 'Error: Git commit failed'
-  exit 1
-```
-
-## Global vs. Local
-
-The example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`.
-
-Example:
-
-```javascript
-var shell = require('shelljs');
-shell.echo('hello world');
-```
-
-## Make tool
-
-A convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. In this case all shell objects are global, and command line arguments will cause the script to execute only the corresponding function in the global `target` object. To avoid redundant calls, target functions are executed only once per script.
-
-Example (CoffeeScript):
-
-```coffeescript
-require 'shelljs/make'
-
-target.all = ->
-  target.bundle()
-  target.docs()
-
-target.bundle = ->
-  cd __dirname
-  mkdir 'build'
-  cd 'lib'
-  (cat '*.js').to '../build/output.js'
-
-target.docs = ->
-  cd __dirname
-  mkdir 'docs'
-  cd 'lib'
-  for file in ls '*.js'
-    text = grep '//@', file     # extract special comments
-    text.replace '//@', ''      # remove comment tags
-    text.to 'docs/my_docs.md'
-```
-
-To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so on.
-
-
-
-<!-- 
-
-  DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED
-
--->
-
-
-## Command reference
-
-
-All commands run synchronously, unless otherwise stated.
-
-
-### cd('dir')
-Changes to directory `dir` for the duration of the script
-
-
-### pwd()
-Returns the current directory.
-
-
-### ls([options ,] path [,path ...])
-### ls([options ,] path_array)
-Available options:
-
-+ `-R`: recursive
-+ `-A`: all files (include files beginning with `.`, except for `.` and `..`)
-
-Examples:
-
-```javascript
-ls('projs/*.js');
-ls('-R', '/users/me', '/tmp');
-ls('-R', ['/users/me', '/tmp']); // same as above
-```
-
-Returns array of files in the given path, or in current directory if no path provided.
-
-
-### find(path [,path ...])
-### find(path_array)
-Examples:
-
-```javascript
-find('src', 'lib');
-find(['src', 'lib']); // same as above
-find('.').filter(function(file) { return file.match(/\.js$/); });
-```
-
-Returns array of all files (however deep) in the given paths.
-
-The main difference from `ls('-R', path)` is that the resulting file names
-include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
-
-
-### cp([options ,] source [,source ...], dest)
-### cp([options ,] source_array, dest)
-Available options:
-
-+ `-f`: force
-+ `-r, -R`: recursive
-
-Examples:
-
-```javascript
-cp('file1', 'dir1');
-cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
-cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
-```
-
-Copies files. The wildcard `*` is accepted.
-
-
-### rm([options ,] file [, file ...])
-### rm([options ,] file_array)
-Available options:
-
-+ `-f`: force
-+ `-r, -R`: recursive
-
-Examples:
-
-```javascript
-rm('-rf', '/tmp/*');
-rm('some_file.txt', 'another_file.txt');
-rm(['some_file.txt', 'another_file.txt']); // same as above
-```
-
-Removes files. The wildcard `*` is accepted.
-
-
-### mv(source [, source ...], dest')
-### mv(source_array, dest')
-Available options:
-
-+ `f`: force
-
-Examples:
-
-```javascript
-mv('-f', 'file', 'dir/');
-mv('file1', 'file2', 'dir/');
-mv(['file1', 'file2'], 'dir/'); // same as above
-```
-
-Moves files. The wildcard `*` is accepted.
-
-
-### mkdir([options ,] dir [, dir ...])
-### mkdir([options ,] dir_array)
-Available options:
-
-+ `p`: full path (will create intermediate dirs if necessary)
-
-Examples:
-
-```javascript
-mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
-mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
-```
-
-Creates directories.
-
-
-### test(expression)
-Available expression primaries:
-
-+ `'-b', 'path'`: true if path is a block device
-+ `'-c', 'path'`: true if path is a character device
-+ `'-d', 'path'`: true if path is a directory
-+ `'-e', 'path'`: true if path exists
-+ `'-f', 'path'`: true if path is a regular file
-+ `'-L', 'path'`: true if path is a symboilc link
-+ `'-p', 'path'`: true if path is a pipe (FIFO)
-+ `'-S', 'path'`: true if path is a socket
-
-Examples:
-
-```javascript
-if (test('-d', path)) { /* do something with dir */ };
-if (!test('-f', path)) continue; // skip if it's a regular file
-```
-
-Evaluates expression using the available primaries and returns corresponding value.
-
-
-### cat(file [, file ...])
-### cat(file_array)
-
-Examples:
-
-```javascript
-var str = cat('file*.txt');
-var str = cat('file1', 'file2');
-var str = cat(['file1', 'file2']); // same as above
-```
-
-Returns a string containing the given file, or a concatenated string
-containing the files if more than one file is given (a new line character is
-introduced between each file). Wildcard `*` accepted.
-
-
-### 'string'.to(file)
-
-Examples:
-
-```javascript
-cat('input.txt').to('output.txt');
-```
-
-Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
-those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
-
-
-### 'string'.toEnd(file)
-
-Examples:
-
-```javascript
-cat('input.txt').toEnd('output.txt');
-```
-
-Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
-those returned by `cat`, `grep`, etc).
-
-
-### sed([options ,] search_regex, replace_str, file)
-Available options:
-
-+ `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
-
-Examples:
-
-```javascript
-sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
-sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
-```
-
-Reads an input string from `file` and performs a JavaScript `replace()` on the input
-using the given search regex and replacement string. Returns the new string after replacement.
-
-
-### grep([options ,] regex_filter, file [, file ...])
-### grep([options ,] regex_filter, file_array)
-Available options:
-
-+ `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
-
-Examples:
-
-```javascript
-grep('-v', 'GLOBAL_VARIABLE', '*.js');
-grep('GLOBAL_VARIABLE', '*.js');
-```
-
-Reads input string from given files and returns a string containing all lines of the
-file that match the given `regex_filter`. Wildcard `*` accepted.
-
-
-### which(command)
-
-Examples:
-
-```javascript
-var nodeExec = which('node');
-```
-
-Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
-Returns string containing the absolute path to the command.
-
-
-### echo(string [,string ...])
-
-Examples:
-
-```javascript
-echo('hello world');
-var str = echo('hello world');
-```
-
-Prints string to stdout, and returns string with additional utility methods
-like `.to()`.
-
-
-### pushd([options,] [dir | '-N' | '+N'])
-
-Available options:
-
-+ `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
-
-Arguments:
-
-+ `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
-+ `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-+ `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-
-Examples:
-
-```javascript
-// process.cwd() === '/usr'
-pushd('/etc'); // Returns /etc /usr
-pushd('+1');   // Returns /usr /etc
-```
-
-Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
-
-### popd([options,] ['-N' | '+N'])
-
-Available options:
-
-+ `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
-
-Arguments:
-
-+ `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
-+ `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
-
-Examples:
-
-```javascript
-echo(process.cwd()); // '/usr'
-pushd('/etc');       // '/etc /usr'
-echo(process.cwd()); // '/etc'
-popd();              // '/usr'
-echo(process.cwd()); // '/usr'
-```
-
-When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
-
-### dirs([options | '+N' | '-N'])
-
-Available options:
-
-+ `-c`: Clears the directory stack by deleting all of the elements.
-
-Arguments:
-
-+ `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
-+ `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
-
-Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
-
-See also: pushd, popd
-
-
-### exit(code)
-Exits the current process with the given exit code.
-
-### env['VAR_NAME']
-Object containing environment variables (both getter and setter). Shortcut to process.env.
-
-### exec(command [, options] [, callback])
-Available options (all `false` by default):
-
-+ `async`: Asynchronous execution. Defaults to true if a callback is provided.
-+ `silent`: Do not echo program output to console.
-
-Examples:
-
-```javascript
-var version = exec('node --version', {silent:true}).output;
-
-var child = exec('some_long_running_process', {async:true});
-child.stdout.on('data', function(data) {
-  /* ... do something with data ... */
-});
-
-exec('some_long_running_process', function(code, output) {
-  console.log('Exit code:', code);
-  console.log('Program output:', output);
-});
-```
-
-Executes the given `command` _synchronously_, unless otherwise specified.
-When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's
-`output` (stdout + stderr)  and its exit `code`. Otherwise returns the child process object, and
-the `callback` gets the arguments `(code, output)`.
-
-**Note:** For long-lived processes, it's best to run `exec()` asynchronously as
-the current synchronous implementation uses a lot of CPU. This should be getting
-fixed soon.
-
-
-### chmod(octal_mode || octal_string, file)
-### chmod(symbolic_mode, file)
-
-Available options:
-
-+ `-v`: output a diagnostic for every file processed
-+ `-c`: like verbose but report only when a change is made
-+ `-R`: change files and directories recursively
-
-Examples:
-
-```javascript
-chmod(755, '/Users/brandon');
-chmod('755', '/Users/brandon'); // same as above
-chmod('u+x', '/Users/brandon');
-```
-
-Alters the permissions of a file or directory by either specifying the
-absolute permissions in octal form or expressing the changes in symbols.
-This command tries to mimic the POSIX behavior as much as possible.
-Notable exceptions:
-
-+ In symbolic modes, 'a-r' and '-r' are identical.  No consideration is
-  given to the umask.
-+ There is no "quiet" option since default behavior is to run silent.
-
-
-## Non-Unix commands
-
-
-### tempdir()
-
-Examples:
-
-```javascript
-var tmp = tempdir(); // "/tmp" for most *nix platforms
-```
-
-Searches and returns string containing a writeable, platform-dependent temporary directory.
-Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
-
-
-### error()
-Tests if error occurred in the last command. Returns `null` if no error occurred,
-otherwise returns string explaining the error
-
-
-## Configuration
-
-
-### config.silent
-Example:
-
-```javascript
-var silentState = config.silent; // save old silent state
-config.silent = true;
-/* ... */
-config.silent = silentState; // restore old silent state
-```
-
-Suppresses all command output if `true`, except for `echo()` calls.
-Default is `false`.
-
-### config.fatal
-Example:
-
-```javascript
-config.fatal = true;
-cp('this_file_does_not_exist', '/dev/null'); // dies here
-/* more commands... */
-```
-
-If `true` the script will die on errors. Default is `false`.
diff --git a/node_modules/ios-sim/node_modules/shelljs/bin/shjs b/node_modules/ios-sim/node_modules/shelljs/bin/shjs
deleted file mode 100755
index d239a7a..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/bin/shjs
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env node
-require('../global');
-
-if (process.argv.length < 3) {
-  console.log('ShellJS: missing argument (script name)');
-  console.log();
-  process.exit(1);
-}
-
-var args,
-  scriptName = process.argv[2];
-env['NODE_PATH'] = __dirname + '/../..';
-
-if (!scriptName.match(/\.js/) && !scriptName.match(/\.coffee/)) {
-  if (test('-f', scriptName + '.js'))
-    scriptName += '.js';
-  if (test('-f', scriptName + '.coffee'))
-    scriptName += '.coffee';
-}
-
-if (!test('-f', scriptName)) {
-  console.log('ShellJS: script not found ('+scriptName+')');
-  console.log();
-  process.exit(1);
-}
-
-args = process.argv.slice(3);
-
-for (var i = 0, l = args.length; i < l; i++) {
-  if (args[i][0] !== "-"){
-    args[i] = '"' + args[i] + '"'; // fixes arguments with multiple words
-  }
-}
-
-if (scriptName.match(/\.coffee$/)) {
-  //
-  // CoffeeScript
-  //
-  if (which('coffee')) {
-    exec('coffee ' + scriptName + ' ' + args.join(' '), { async: true });
-  } else {
-    console.log('ShellJS: CoffeeScript interpreter not found');
-    console.log();
-    process.exit(1);
-  }
-} else {
-  //
-  // JavaScript
-  //
-  exec('node ' + scriptName + ' ' + args.join(' '), { async: true });
-}
diff --git a/node_modules/ios-sim/node_modules/shelljs/global.js b/node_modules/ios-sim/node_modules/shelljs/global.js
deleted file mode 100644
index 97f0033..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/global.js
+++ /dev/null
@@ -1,3 +0,0 @@
-var shell = require('./shell.js');
-for (var cmd in shell)
-  global[cmd] = shell[cmd];
diff --git a/node_modules/ios-sim/node_modules/shelljs/make.js b/node_modules/ios-sim/node_modules/shelljs/make.js
deleted file mode 100644
index 53e5e81..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/make.js
+++ /dev/null
@@ -1,47 +0,0 @@
-require('./global');
-
-global.config.fatal = true;
-global.target = {};
-
-// This ensures we only execute the script targets after the entire script has
-// been evaluated
-var args = process.argv.slice(2);
-setTimeout(function() {
-  var t;
-
-  if (args.length === 1 && args[0] === '--help') {
-    console.log('Available targets:');
-    for (t in global.target)
-      console.log('  ' + t);
-    return;
-  }
-
-  // Wrap targets to prevent duplicate execution
-  for (t in global.target) {
-    (function(t, oldTarget){
-
-      // Wrap it
-      global.target[t] = function(force) {
-        if (oldTarget.done && !force)
-          return;
-        oldTarget.done = true;
-        return oldTarget.apply(oldTarget, arguments);
-      };
-
-    })(t, global.target[t]);
-  }
-
-  // Execute desired targets
-  if (args.length > 0) {
-    args.forEach(function(arg) {
-      if (arg in global.target)
-        global.target[arg]();
-      else {
-        console.log('no such target: ' + arg);
-      }
-    });
-  } else if ('all' in global.target) {
-    global.target.all();
-  }
-
-}, 0);
diff --git a/node_modules/ios-sim/node_modules/shelljs/package.json b/node_modules/ios-sim/node_modules/shelljs/package.json
deleted file mode 100644
index d6aea40..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/package.json
+++ /dev/null
@@ -1,93 +0,0 @@
-{
-  "_args": [
-    [
-      {
-        "raw": "shelljs@^0.2.6",
-        "scope": null,
-        "escapedName": "shelljs",
-        "name": "shelljs",
-        "rawSpec": "^0.2.6",
-        "spec": ">=0.2.6 <0.3.0",
-        "type": "range"
-      },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/ios-sim/node_modules/simctl"
-    ]
-  ],
-  "_from": "shelljs@>=0.2.6 <0.3.0",
-  "_id": "shelljs@0.2.6",
-  "_inCache": true,
-  "_location": "/ios-sim/shelljs",
-  "_npmUser": {
-    "name": "artur",
-    "email": "arturadib@gmail.com"
-  },
-  "_npmVersion": "1.3.8",
-  "_phantomChildren": {},
-  "_requested": {
-    "raw": "shelljs@^0.2.6",
-    "scope": null,
-    "escapedName": "shelljs",
-    "name": "shelljs",
-    "rawSpec": "^0.2.6",
-    "spec": ">=0.2.6 <0.3.0",
-    "type": "range"
-  },
-  "_requiredBy": [
-    "/ios-sim/simctl"
-  ],
-  "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
-  "_shasum": "90492d72ffcc8159976baba62fb0f6884f0c3378",
-  "_shrinkwrap": null,
-  "_spec": "shelljs@^0.2.6",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/ios-sim/node_modules/simctl",
-  "author": {
-    "name": "Artur Adib",
-    "email": "aadib@mozilla.com"
-  },
-  "bin": {
-    "shjs": "./bin/shjs"
-  },
-  "bugs": {
-    "url": "https://github.com/arturadib/shelljs/issues"
-  },
-  "dependencies": {},
-  "description": "Portable Unix shell commands for Node.js",
-  "devDependencies": {
-    "jshint": "~2.1.11"
-  },
-  "directories": {},
-  "dist": {
-    "shasum": "90492d72ffcc8159976baba62fb0f6884f0c3378",
-    "tarball": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz"
-  },
-  "engines": {
-    "node": ">=0.8.0"
-  },
-  "homepage": "http://github.com/arturadib/shelljs",
-  "keywords": [
-    "unix",
-    "shell",
-    "makefile",
-    "make",
-    "jake",
-    "synchronous"
-  ],
-  "main": "./shell.js",
-  "maintainers": [
-    {
-      "name": "artur",
-      "email": "arturadib@gmail.com"
-    }
-  ],
-  "name": "shelljs",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
-  "repository": {
-    "type": "git",
-    "url": "git://github.com/arturadib/shelljs.git"
-  },
-  "scripts": {
-    "test": "node scripts/run-tests"
-  },
-  "version": "0.2.6"
-}
diff --git a/node_modules/ios-sim/node_modules/shelljs/scripts/generate-docs.js b/node_modules/ios-sim/node_modules/shelljs/scripts/generate-docs.js
deleted file mode 100755
index 532fed9..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/scripts/generate-docs.js
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env node
-require('../global');
-
-echo('Appending docs to README.md');
-
-cd(__dirname + '/..');
-
-// Extract docs from shell.js
-var docs = grep('//@', 'shell.js');
-
-docs = docs.replace(/\/\/\@include (.+)/g, function(match, path) {
-  var file = path.match('.js$') ? path : path+'.js';
-  return grep('//@', file);
-});
-
-// Remove '//@'
-docs = docs.replace(/\/\/\@ ?/g, '');
-// Append docs to README
-sed('-i', /## Command reference(.|\n)*/, '## Command reference\n\n' + docs, 'README.md');
-
-echo('All done.');
diff --git a/node_modules/ios-sim/node_modules/shelljs/scripts/run-tests.js b/node_modules/ios-sim/node_modules/shelljs/scripts/run-tests.js
deleted file mode 100755
index f9d31e0..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/scripts/run-tests.js
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env node
-require('../global');
-
-var path = require('path');
-
-var failed = false;
-
-//
-// Lint
-//
-JSHINT_BIN = './node_modules/jshint/bin/jshint';
-cd(__dirname + '/..');
-
-if (!test('-f', JSHINT_BIN)) {
-  echo('JSHint not found. Run `npm install` in the root dir first.');
-  exit(1);
-}
-
-if (exec(JSHINT_BIN + ' *.js test/*.js').code !== 0) {
-  failed = true;
-  echo('*** JSHINT FAILED! (return code != 0)');
-  echo();
-} else {
-  echo('All JSHint tests passed');
-  echo();
-}
-
-//
-// Unit tests
-//
-cd(__dirname + '/../test');
-ls('*.js').forEach(function(file) {
-  echo('Running test:', file);
-  if (exec('node ' + file).code !== 123) { // 123 avoids false positives (e.g. premature exit)
-    failed = true;
-    echo('*** TEST FAILED! (missing exit code "123")');
-    echo();
-  }
-});
-
-if (failed) {
-  echo();
-  echo('*******************************************************');
-  echo('WARNING: Some tests did not pass!');
-  echo('*******************************************************');
-  exit(1);
-} else {
-  echo();
-  echo('All tests passed.');
-}
diff --git a/node_modules/ios-sim/node_modules/shelljs/shell.js b/node_modules/ios-sim/node_modules/shelljs/shell.js
deleted file mode 100644
index e56c5de..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/shell.js
+++ /dev/null
@@ -1,153 +0,0 @@
-//
-// ShellJS
-// Unix shell commands on top of Node's API
-//
-// Copyright (c) 2012 Artur Adib
-// http://github.com/arturadib/shelljs
-//
-
-var common = require('./src/common');
-
-
-//@
-//@ All commands run synchronously, unless otherwise stated.
-//@
-
-//@include ./src/cd
-var _cd = require('./src/cd');
-exports.cd = common.wrap('cd', _cd);
-
-//@include ./src/pwd
-var _pwd = require('./src/pwd');
-exports.pwd = common.wrap('pwd', _pwd);
-
-//@include ./src/ls
-var _ls = require('./src/ls');
-exports.ls = common.wrap('ls', _ls);
-
-//@include ./src/find
-var _find = require('./src/find');
-exports.find = common.wrap('find', _find);
-
-//@include ./src/cp
-var _cp = require('./src/cp');
-exports.cp = common.wrap('cp', _cp);
-
-//@include ./src/rm
-var _rm = require('./src/rm');
-exports.rm = common.wrap('rm', _rm);
-
-//@include ./src/mv
-var _mv = require('./src/mv');
-exports.mv = common.wrap('mv', _mv);
-
-//@include ./src/mkdir
-var _mkdir = require('./src/mkdir');
-exports.mkdir = common.wrap('mkdir', _mkdir);
-
-//@include ./src/test
-var _test = require('./src/test');
-exports.test = common.wrap('test', _test);
-
-//@include ./src/cat
-var _cat = require('./src/cat');
-exports.cat = common.wrap('cat', _cat);
-
-//@include ./src/to
-var _to = require('./src/to');
-String.prototype.to = common.wrap('to', _to);
-
-//@include ./src/toEnd
-var _toEnd = require('./src/toEnd');
-String.prototype.toEnd = common.wrap('toEnd', _toEnd);
-
-//@include ./src/sed
-var _sed = require('./src/sed');
-exports.sed = common.wrap('sed', _sed);
-
-//@include ./src/grep
-var _grep = require('./src/grep');
-exports.grep = common.wrap('grep', _grep);
-
-//@include ./src/which
-var _which = require('./src/which');
-exports.which = common.wrap('which', _which);
-
-//@include ./src/echo
-var _echo = require('./src/echo');
-exports.echo = _echo; // don't common.wrap() as it could parse '-options'
-
-//@include ./src/dirs
-var _dirs = require('./src/dirs').dirs;
-exports.dirs = common.wrap("dirs", _dirs);
-var _pushd = require('./src/dirs').pushd;
-exports.pushd = common.wrap('pushd', _pushd);
-var _popd = require('./src/dirs').popd;
-exports.popd = common.wrap("popd", _popd);
-
-//@
-//@ ### exit(code)
-//@ Exits the current process with the given exit code.
-exports.exit = process.exit;
-
-//@
-//@ ### env['VAR_NAME']
-//@ Object containing environment variables (both getter and setter). Shortcut to process.env.
-exports.env = process.env;
-
-//@include ./src/exec
-var _exec = require('./src/exec');
-exports.exec = common.wrap('exec', _exec, {notUnix:true});
-
-//@include ./src/chmod
-var _chmod = require('./src/chmod');
-exports.chmod = common.wrap('chmod', _chmod);
-
-
-
-//@
-//@ ## Non-Unix commands
-//@
-
-//@include ./src/tempdir
-var _tempDir = require('./src/tempdir');
-exports.tempdir = common.wrap('tempdir', _tempDir);
-
-
-//@include ./src/error
-var _error = require('./src/error');
-exports.error = _error;
-
-
-
-//@
-//@ ## Configuration
-//@
-
-exports.config = common.config;
-
-//@
-//@ ### config.silent
-//@ Example:
-//@
-//@ ```javascript
-//@ var silentState = config.silent; // save old silent state
-//@ config.silent = true;
-//@ /* ... */
-//@ config.silent = silentState; // restore old silent state
-//@ ```
-//@
-//@ Suppresses all command output if `true`, except for `echo()` calls.
-//@ Default is `false`.
-
-//@
-//@ ### config.fatal
-//@ Example:
-//@
-//@ ```javascript
-//@ config.fatal = true;
-//@ cp('this_file_does_not_exist', '/dev/null'); // dies here
-//@ /* more commands... */
-//@ ```
-//@
-//@ If `true` the script will die on errors. Default is `false`.
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/cat.js b/node_modules/ios-sim/node_modules/shelljs/src/cat.js
deleted file mode 100644
index f6f4d25..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/cat.js
+++ /dev/null
@@ -1,43 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-//@
-//@ ### cat(file [, file ...])
-//@ ### cat(file_array)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var str = cat('file*.txt');
-//@ var str = cat('file1', 'file2');
-//@ var str = cat(['file1', 'file2']); // same as above
-//@ ```
-//@
-//@ Returns a string containing the given file, or a concatenated string
-//@ containing the files if more than one file is given (a new line character is
-//@ introduced between each file). Wildcard `*` accepted.
-function _cat(options, files) {
-  var cat = '';
-
-  if (!files)
-    common.error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  files = common.expand(files);
-
-  files.forEach(function(file) {
-    if (!fs.existsSync(file))
-      common.error('no such file or directory: ' + file);
-
-    cat += fs.readFileSync(file, 'utf8') + '\n';
-  });
-
-  if (cat[cat.length-1] === '\n')
-    cat = cat.substring(0, cat.length-1);
-
-  return common.ShellString(cat);
-}
-module.exports = _cat;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/cd.js b/node_modules/ios-sim/node_modules/shelljs/src/cd.js
deleted file mode 100644
index 230f432..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/cd.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var fs = require('fs');
-var common = require('./common');
-
-//@
-//@ ### cd('dir')
-//@ Changes to directory `dir` for the duration of the script
-function _cd(options, dir) {
-  if (!dir)
-    common.error('directory not specified');
-
-  if (!fs.existsSync(dir))
-    common.error('no such file or directory: ' + dir);
-
-  if (!fs.statSync(dir).isDirectory())
-    common.error('not a directory: ' + dir);
-
-  process.chdir(dir);
-}
-module.exports = _cd;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/chmod.js b/node_modules/ios-sim/node_modules/shelljs/src/chmod.js
deleted file mode 100644
index f288893..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/chmod.js
+++ /dev/null
@@ -1,208 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-var PERMS = (function (base) {
-  return {
-    OTHER_EXEC  : base.EXEC,
-    OTHER_WRITE : base.WRITE,
-    OTHER_READ  : base.READ,
-
-    GROUP_EXEC  : base.EXEC  << 3,
-    GROUP_WRITE : base.WRITE << 3,
-    GROUP_READ  : base.READ << 3,
-
-    OWNER_EXEC  : base.EXEC << 6,
-    OWNER_WRITE : base.WRITE << 6,
-    OWNER_READ  : base.READ << 6,
-
-    // Literal octal numbers are apparently not allowed in "strict" javascript.  Using parseInt is
-    // the preferred way, else a jshint warning is thrown.
-    STICKY      : parseInt('01000', 8),
-    SETGID      : parseInt('02000', 8),
-    SETUID      : parseInt('04000', 8),
-
-    TYPE_MASK   : parseInt('0770000', 8)
-  };
-})({
-  EXEC  : 1,
-  WRITE : 2,
-  READ  : 4
-});
-
-//@
-//@ ### chmod(octal_mode || octal_string, file)
-//@ ### chmod(symbolic_mode, file)
-//@
-//@ Available options:
-//@
-//@ + `-v`: output a diagnostic for every file processed//@
-//@ + `-c`: like verbose but report only when a change is made//@
-//@ + `-R`: change files and directories recursively//@
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ chmod(755, '/Users/brandon');
-//@ chmod('755', '/Users/brandon'); // same as above
-//@ chmod('u+x', '/Users/brandon');
-//@ ```
-//@
-//@ Alters the permissions of a file or directory by either specifying the
-//@ absolute permissions in octal form or expressing the changes in symbols.
-//@ This command tries to mimic the POSIX behavior as much as possible.
-//@ Notable exceptions:
-//@
-//@ + In symbolic modes, 'a-r' and '-r' are identical.  No consideration is
-//@   given to the umask.
-//@ + There is no "quiet" option since default behavior is to run silent.
-function _chmod(options, mode, filePattern) {
-  if (!filePattern) {
-    if (options.length > 0 && options.charAt(0) === '-') {
-      // Special case where the specified file permissions started with - to subtract perms, which
-      // get picked up by the option parser as command flags.
-      // If we are down by one argument and options starts with -, shift everything over.
-      filePattern = mode;
-      mode = options;
-      options = '';
-    }
-    else {
-      common.error('You must specify a file.');
-    }
-  }
-
-  options = common.parseOptions(options, {
-    'R': 'recursive',
-    'c': 'changes',
-    'v': 'verbose'
-  });
-
-  if (typeof filePattern === 'string') {
-    filePattern = [ filePattern ];
-  }
-
-  var files;
-
-  if (options.recursive) {
-    files = [];
-    common.expand(filePattern).forEach(function addFile(expandedFile) {
-      var stat = fs.lstatSync(expandedFile);
-
-      if (!stat.isSymbolicLink()) {
-        files.push(expandedFile);
-
-        if (stat.isDirectory()) {  // intentionally does not follow symlinks.
-          fs.readdirSync(expandedFile).forEach(function (child) {
-            addFile(expandedFile + '/' + child);
-          });
-        }
-      }
-    });
-  }
-  else {
-    files = common.expand(filePattern);
-  }
-
-  files.forEach(function innerChmod(file) {
-    file = path.resolve(file);
-    if (!fs.existsSync(file)) {
-      common.error('File not found: ' + file);
-    }
-
-    // When recursing, don't follow symlinks.
-    if (options.recursive && fs.lstatSync(file).isSymbolicLink()) {
-      return;
-    }
-
-    var perms = fs.statSync(file).mode;
-    var type = perms & PERMS.TYPE_MASK;
-
-    var newPerms = perms;
-
-    if (isNaN(parseInt(mode, 8))) {
-      // parse options
-      mode.split(',').forEach(function (symbolicMode) {
-        /*jshint regexdash:true */
-        var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i;
-        var matches = pattern.exec(symbolicMode);
-
-        if (matches) {
-          var applyTo = matches[1];
-          var operator = matches[2];
-          var change = matches[3];
-
-          var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === '';
-          var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === '';
-          var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === '';
-
-          var changeRead   = change.indexOf('r') != -1;
-          var changeWrite  = change.indexOf('w') != -1;
-          var changeExec   = change.indexOf('x') != -1;
-          var changeSticky = change.indexOf('t') != -1;
-          var changeSetuid = change.indexOf('s') != -1;
-
-          var mask = 0;
-          if (changeOwner) {
-            mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0);
-          }
-          if (changeGroup) {
-            mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0);
-          }
-          if (changeOther) {
-            mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0);
-          }
-
-          // Sticky bit is special - it's not tied to user, group or other.
-          if (changeSticky) {
-            mask |= PERMS.STICKY;
-          }
-
-          switch (operator) {
-            case '+':
-              newPerms |= mask;
-              break;
-
-            case '-':
-              newPerms &= ~mask;
-              break;
-
-            case '=':
-              newPerms = type + mask;
-
-              // According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared.
-              if (fs.statSync(file).isDirectory()) {
-                newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
-              }
-              break;
-          }
-
-          if (options.verbose) {
-            log(file + ' -> ' + newPerms.toString(8));
-          }
-
-          if (perms != newPerms) {
-            if (!options.verbose && options.changes) {
-              log(file + ' -> ' + newPerms.toString(8));
-            }
-            fs.chmodSync(file, newPerms);
-          }
-        }
-        else {
-          common.error('Invalid symbolic mode change: ' + symbolicMode);
-        }
-      });
-    }
-    else {
-      // they gave us a full number
-      newPerms = type + parseInt(mode, 8);
-
-      // POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared.
-      if (fs.statSync(file).isDirectory()) {
-        newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms;
-      }
-
-      fs.chmodSync(file, newPerms);
-    }
-  });
-}
-module.exports = _chmod;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/common.js b/node_modules/ios-sim/node_modules/shelljs/src/common.js
deleted file mode 100644
index fe20871..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/common.js
+++ /dev/null
@@ -1,189 +0,0 @@
-var os = require('os');
-var fs = require('fs');
-var _ls = require('./ls');
-
-// Module globals
-var config = {
-  silent: false,
-  fatal: false
-};
-exports.config = config;
-
-var state = {
-  error: null,
-  currentCmd: 'shell.js',
-  tempDir: null
-};
-exports.state = state;
-
-var platform = os.type().match(/^Win/) ? 'win' : 'unix';
-exports.platform = platform;
-
-function log() {
-  if (!config.silent)
-    console.log.apply(this, arguments);
-}
-exports.log = log;
-
-// Shows error message. Throws unless _continue or config.fatal are true
-function error(msg, _continue) {
-  if (state.error === null)
-    state.error = '';
-  state.error += state.currentCmd + ': ' + msg + '\n';
-
-  if (msg.length > 0)
-    log(state.error);
-
-  if (config.fatal)
-    process.exit(1);
-
-  if (!_continue)
-    throw '';
-}
-exports.error = error;
-
-// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings.
-// For now, this is a dummy function to bookmark places we need such strings
-function ShellString(str) {
-  return str;
-}
-exports.ShellString = ShellString;
-
-// Returns {'alice': true, 'bob': false} when passed a dictionary, e.g.:
-//   parseOptions('-a', {'a':'alice', 'b':'bob'});
-function parseOptions(str, map) {
-  if (!map)
-    error('parseOptions() internal error: no map given');
-
-  // All options are false by default
-  var options = {};
-  for (var letter in map)
-    options[map[letter]] = false;
-
-  if (!str)
-    return options; // defaults
-
-  if (typeof str !== 'string')
-    error('parseOptions() internal error: wrong str');
-
-  // e.g. match[1] = 'Rf' for str = '-Rf'
-  var match = str.match(/^\-(.+)/);
-  if (!match)
-    return options;
-
-  // e.g. chars = ['R', 'f']
-  var chars = match[1].split('');
-
-  chars.forEach(function(c) {
-    if (c in map)
-      options[map[c]] = true;
-    else
-      error('option not recognized: '+c);
-  });
-
-  return options;
-}
-exports.parseOptions = parseOptions;
-
-// Expands wildcards with matching (ie. existing) file names.
-// For example:
-//   expand(['file*.js']) = ['file1.js', 'file2.js', ...]
-//   (if the files 'file1.js', 'file2.js', etc, exist in the current dir)
-function expand(list) {
-  var expanded = [];
-  list.forEach(function(listEl) {
-    // Wildcard present?
-    if (listEl.search(/\*/) > -1) {
-      _ls('', listEl).forEach(function(file) {
-        expanded.push(file);
-      });
-    } else {
-      expanded.push(listEl);
-    }
-  });
-  return expanded;
-}
-exports.expand = expand;
-
-// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e.
-// file can be unlinked even if it's read-only, see https://github.com/joyent/node/issues/3006
-function unlinkSync(file) {
-  try {
-    fs.unlinkSync(file);
-  } catch(e) {
-    // Try to override file permission
-    if (e.code === 'EPERM') {
-      fs.chmodSync(file, '0666');
-      fs.unlinkSync(file);
-    } else {
-      throw e;
-    }
-  }
-}
-exports.unlinkSync = unlinkSync;
-
-// e.g. 'shelljs_a5f185d0443ca...'
-function randomFileName() {
-  function randomHash(count) {
-    if (count === 1)
-      return parseInt(16*Math.random(), 10).toString(16);
-    else {
-      var hash = '';
-      for (var i=0; i<count; i++)
-        hash += randomHash(1);
-      return hash;
-    }
-  }
-
-  return 'shelljs_'+randomHash(20);
-}
-exports.randomFileName = randomFileName;
-
-// extend(target_obj, source_obj1 [, source_obj2 ...])
-// Shallow extend, e.g.:
-//    extend({A:1}, {b:2}, {c:3}) returns {A:1, b:2, c:3}
-function extend(target) {
-  var sources = [].slice.call(arguments, 1);
-  sources.forEach(function(source) {
-    for (var key in source)
-      target[key] = source[key];
-  });
-
-  return target;
-}
-exports.extend = extend;
-
-// Common wrapper for all Unix-like commands
-function wrap(cmd, fn, options) {
-  return function() {
-    var retValue = null;
-
-    state.currentCmd = cmd;
-    state.error = null;
-
-    try {
-      var args = [].slice.call(arguments, 0);
-
-      if (options && options.notUnix) {
-        retValue = fn.apply(this, args);
-      } else {
-        if (args.length === 0 || typeof args[0] !== 'string' || args[0][0] !== '-')
-          args.unshift(''); // only add dummy option if '-option' not already present
-        retValue = fn.apply(this, args);
-      }
-    } catch (e) {
-      if (!state.error) {
-        // If state.error hasn't been set it's an error thrown by Node, not us - probably a bug...
-        console.log('shell.js: internal error');
-        console.log(e.stack || e);
-        process.exit(1);
-      }
-      if (config.fatal)
-        throw e;
-    }
-
-    state.currentCmd = 'shell.js';
-    return retValue;
-  };
-} // wrap
-exports.wrap = wrap;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/cp.js b/node_modules/ios-sim/node_modules/shelljs/src/cp.js
deleted file mode 100644
index a1bc529..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/cp.js
+++ /dev/null
@@ -1,200 +0,0 @@
-var fs = require('fs');
-var path = require('path');
-var common = require('./common');
-
-// Buffered file copy, synchronous
-// (Using readFileSync() + writeFileSync() could easily cause a memory overflow
-//  with large files)
-function copyFileSync(srcFile, destFile) {
-  if (!fs.existsSync(srcFile))
-    common.error('copyFileSync: no such file or directory: ' + srcFile);
-
-  var BUF_LENGTH = 64*1024,
-      buf = new Buffer(BUF_LENGTH),
-      bytesRead = BUF_LENGTH,
-      pos = 0,
-      fdr = null,
-      fdw = null;
-
-  try {
-    fdr = fs.openSync(srcFile, 'r');
-  } catch(e) {
-    common.error('copyFileSync: could not read src file ('+srcFile+')');
-  }
-
-  try {
-    fdw = fs.openSync(destFile, 'w');
-  } catch(e) {
-    common.error('copyFileSync: could not write to dest file (code='+e.code+'):'+destFile);
-  }
-
-  while (bytesRead === BUF_LENGTH) {
-    bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos);
-    fs.writeSync(fdw, buf, 0, bytesRead);
-    pos += bytesRead;
-  }
-
-  fs.closeSync(fdr);
-  fs.closeSync(fdw);
-
-  fs.chmodSync(destFile, fs.statSync(srcFile).mode);
-}
-
-// Recursively copies 'sourceDir' into 'destDir'
-// Adapted from https://github.com/ryanmcgrath/wrench-js
-//
-// Copyright (c) 2010 Ryan McGrath
-// Copyright (c) 2012 Artur Adib
-//
-// Licensed under the MIT License
-// http://www.opensource.org/licenses/mit-license.php
-function cpdirSyncRecursive(sourceDir, destDir, opts) {
-  if (!opts) opts = {};
-
-  /* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */
-  var checkDir = fs.statSync(sourceDir);
-  try {
-    fs.mkdirSync(destDir, checkDir.mode);
-  } catch (e) {
-    //if the directory already exists, that's okay
-    if (e.code !== 'EEXIST') throw e;
-  }
-
-  var files = fs.readdirSync(sourceDir);
-
-  for (var i = 0; i < files.length; i++) {
-    var srcFile = sourceDir + "/" + files[i];
-    var destFile = destDir + "/" + files[i];
-    var srcFileStat = fs.lstatSync(srcFile);
-
-    if (srcFileStat.isDirectory()) {
-      /* recursion this thing right on back. */
-      cpdirSyncRecursive(srcFile, destFile, opts);
-    } else if (srcFileStat.isSymbolicLink()) {
-      var symlinkFull = fs.readlinkSync(srcFile);
-      fs.symlinkSync(symlinkFull, destFile);
-    } else {
-      /* At this point, we've hit a file actually worth copying... so copy it on over. */
-      if (fs.existsSync(destFile) && !opts.force) {
-        common.log('skipping existing file: ' + files[i]);
-      } else {
-        copyFileSync(srcFile, destFile);
-      }
-    }
-
-  } // for files
-} // cpdirSyncRecursive
-
-
-//@
-//@ ### cp([options ,] source [,source ...], dest)
-//@ ### cp([options ,] source_array, dest)
-//@ Available options:
-//@
-//@ + `-f`: force
-//@ + `-r, -R`: recursive
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cp('file1', 'dir1');
-//@ cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
-//@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
-//@ ```
-//@
-//@ Copies files. The wildcard `*` is accepted.
-function _cp(options, sources, dest) {
-  options = common.parseOptions(options, {
-    'f': 'force',
-    'R': 'recursive',
-    'r': 'recursive'
-  });
-
-  // Get sources, dest
-  if (arguments.length < 3) {
-    common.error('missing <source> and/or <dest>');
-  } else if (arguments.length > 3) {
-    sources = [].slice.call(arguments, 1, arguments.length - 1);
-    dest = arguments[arguments.length - 1];
-  } else if (typeof sources === 'string') {
-    sources = [sources];
-  } else if ('length' in sources) {
-    sources = sources; // no-op for array
-  } else {
-    common.error('invalid arguments');
-  }
-
-  var exists = fs.existsSync(dest),
-      stats = exists && fs.statSync(dest);
-
-  // Dest is not existing dir, but multiple sources given
-  if ((!exists || !stats.isDirectory()) && sources.length > 1)
-    common.error('dest is not a directory (too many sources)');
-
-  // Dest is an existing file, but no -f given
-  if (exists && stats.isFile() && !options.force)
-    common.error('dest file already exists: ' + dest);
-
-  if (options.recursive) {
-    // Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*"
-    // (see Github issue #15)
-    sources.forEach(function(src, i) {
-      if (src[src.length - 1] === '/')
-        sources[i] += '*';
-    });
-
-    // Create dest
-    try {
-      fs.mkdirSync(dest, parseInt('0777', 8));
-    } catch (e) {
-      // like Unix's cp, keep going even if we can't create dest dir
-    }
-  }
-
-  sources = common.expand(sources);
-
-  sources.forEach(function(src) {
-    if (!fs.existsSync(src)) {
-      common.error('no such file or directory: '+src, true);
-      return; // skip file
-    }
-
-    // If here, src exists
-    if (fs.statSync(src).isDirectory()) {
-      if (!options.recursive) {
-        // Non-Recursive
-        common.log(src + ' is a directory (not copied)');
-      } else {
-        // Recursive
-        // 'cp /a/source dest' should create 'source' in 'dest'
-        var newDest = path.join(dest, path.basename(src)),
-            checkDir = fs.statSync(src);
-        try {
-          fs.mkdirSync(newDest, checkDir.mode);
-        } catch (e) {
-          //if the directory already exists, that's okay
-          if (e.code !== 'EEXIST') throw e;
-        }
-
-        cpdirSyncRecursive(src, newDest, {force: options.force});
-      }
-      return; // done with dir
-    }
-
-    // If here, src is a file
-
-    // When copying to '/path/dir':
-    //    thisDest = '/path/dir/file1'
-    var thisDest = dest;
-    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
-      thisDest = path.normalize(dest + '/' + path.basename(src));
-
-    if (fs.existsSync(thisDest) && !options.force) {
-      common.error('dest file already exists: ' + thisDest, true);
-      return; // skip file
-    }
-
-    copyFileSync(src, thisDest);
-  }); // forEach(src)
-}
-module.exports = _cp;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/dirs.js b/node_modules/ios-sim/node_modules/shelljs/src/dirs.js
deleted file mode 100644
index 58fae8b..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/dirs.js
+++ /dev/null
@@ -1,191 +0,0 @@
-var common = require('./common');
-var _cd = require('./cd');
-var path = require('path');
-
-// Pushd/popd/dirs internals
-var _dirStack = [];
-
-function _isStackIndex(index) {
-  return (/^[\-+]\d+$/).test(index);
-}
-
-function _parseStackIndex(index) {
-  if (_isStackIndex(index)) {
-    if (Math.abs(index) < _dirStack.length + 1) { // +1 for pwd
-      return (/^-/).test(index) ? Number(index) - 1 : Number(index);
-    } else {
-      common.error(index + ': directory stack index out of range');
-    }
-  } else {
-    common.error(index + ': invalid number');
-  }
-}
-
-function _actualDirStack() {
-  return [process.cwd()].concat(_dirStack);
-}
-
-//@
-//@ ### pushd([options,] [dir | '-N' | '+N'])
-//@
-//@ Available options:
-//@
-//@ + `-n`: Suppresses the normal change of directory when adding directories to the stack, so that only the stack is manipulated.
-//@
-//@ Arguments:
-//@
-//@ + `dir`: Makes the current working directory be the top of the stack, and then executes the equivalent of `cd dir`.
-//@ + `+N`: Brings the Nth directory (counting from the left of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-//@ + `-N`: Brings the Nth directory (counting from the right of the list printed by dirs, starting with zero) to the top of the list by rotating the stack.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ // process.cwd() === '/usr'
-//@ pushd('/etc'); // Returns /etc /usr
-//@ pushd('+1');   // Returns /usr /etc
-//@ ```
-//@
-//@ Save the current directory on the top of the directory stack and then cd to `dir`. With no arguments, pushd exchanges the top two directories. Returns an array of paths in the stack.
-function _pushd(options, dir) {
-  if (_isStackIndex(options)) {
-    dir = options;
-    options = '';
-  }
-
-  options = common.parseOptions(options, {
-    'n' : 'no-cd'
-  });
-
-  var dirs = _actualDirStack();
-
-  if (dir === '+0') {
-    return dirs; // +0 is a noop
-  } else if (!dir) {
-    if (dirs.length > 1) {
-      dirs = dirs.splice(1, 1).concat(dirs);
-    } else {
-      return common.error('no other directory');
-    }
-  } else if (_isStackIndex(dir)) {
-    var n = _parseStackIndex(dir);
-    dirs = dirs.slice(n).concat(dirs.slice(0, n));
-  } else {
-    if (options['no-cd']) {
-      dirs.splice(1, 0, dir);
-    } else {
-      dirs.unshift(dir);
-    }
-  }
-
-  if (options['no-cd']) {
-    dirs = dirs.slice(1);
-  } else {
-    dir = path.resolve(dirs.shift());
-    _cd('', dir);
-  }
-
-  _dirStack = dirs;
-  return _dirs('');
-}
-exports.pushd = _pushd;
-
-//@
-//@ ### popd([options,] ['-N' | '+N'])
-//@
-//@ Available options:
-//@
-//@ + `-n`: Suppresses the normal change of directory when removing directories from the stack, so that only the stack is manipulated.
-//@
-//@ Arguments:
-//@
-//@ + `+N`: Removes the Nth directory (counting from the left of the list printed by dirs), starting with zero.
-//@ + `-N`: Removes the Nth directory (counting from the right of the list printed by dirs), starting with zero.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ echo(process.cwd()); // '/usr'
-//@ pushd('/etc');       // '/etc /usr'
-//@ echo(process.cwd()); // '/etc'
-//@ popd();              // '/usr'
-//@ echo(process.cwd()); // '/usr'
-//@ ```
-//@
-//@ When no arguments are given, popd removes the top directory from the stack and performs a cd to the new top directory. The elements are numbered from 0 starting at the first directory listed with dirs; i.e., popd is equivalent to popd +0. Returns an array of paths in the stack.
-function _popd(options, index) {
-  if (_isStackIndex(options)) {
-    index = options;
-    options = '';
-  }
-
-  options = common.parseOptions(options, {
-    'n' : 'no-cd'
-  });
-
-  if (!_dirStack.length) {
-    return common.error('directory stack empty');
-  }
-
-  index = _parseStackIndex(index || '+0');
-
-  if (options['no-cd'] || index > 0 || _dirStack.length + index === 0) {
-    index = index > 0 ? index - 1 : index;
-    _dirStack.splice(index, 1);
-  } else {
-    var dir = path.resolve(_dirStack.shift());
-    _cd('', dir);
-  }
-
-  return _dirs('');
-}
-exports.popd = _popd;
-
-//@
-//@ ### dirs([options | '+N' | '-N'])
-//@
-//@ Available options:
-//@
-//@ + `-c`: Clears the directory stack by deleting all of the elements.
-//@
-//@ Arguments:
-//@
-//@ + `+N`: Displays the Nth directory (counting from the left of the list printed by dirs when invoked without options), starting with zero.
-//@ + `-N`: Displays the Nth directory (counting from the right of the list printed by dirs when invoked without options), starting with zero.
-//@
-//@ Display the list of currently remembered directories. Returns an array of paths in the stack, or a single path if +N or -N was specified.
-//@
-//@ See also: pushd, popd
-function _dirs(options, index) {
-  if (_isStackIndex(options)) {
-    index = options;
-    options = '';
-  }
-
-  options = common.parseOptions(options, {
-    'c' : 'clear'
-  });
-
-  if (options['clear']) {
-    _dirStack = [];
-    return _dirStack;
-  }
-
-  var stack = _actualDirStack();
-
-  if (index) {
-    index = _parseStackIndex(index);
-
-    if (index < 0) {
-      index = stack.length + index;
-    }
-
-    common.log(stack[index]);
-    return stack[index];
-  }
-
-  common.log(stack.join(' '));
-
-  return stack;
-}
-exports.dirs = _dirs;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/echo.js b/node_modules/ios-sim/node_modules/shelljs/src/echo.js
deleted file mode 100644
index 760ea84..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/echo.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var common = require('./common');
-
-//@
-//@ ### echo(string [,string ...])
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ echo('hello world');
-//@ var str = echo('hello world');
-//@ ```
-//@
-//@ Prints string to stdout, and returns string with additional utility methods
-//@ like `.to()`.
-function _echo() {
-  var messages = [].slice.call(arguments, 0);
-  console.log.apply(this, messages);
-  return common.ShellString(messages.join(' '));
-}
-module.exports = _echo;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/error.js b/node_modules/ios-sim/node_modules/shelljs/src/error.js
deleted file mode 100644
index cca3efb..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/error.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var common = require('./common');
-
-//@
-//@ ### error()
-//@ Tests if error occurred in the last command. Returns `null` if no error occurred,
-//@ otherwise returns string explaining the error
-function error() {
-  return common.state.error;
-};
-module.exports = error;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/exec.js b/node_modules/ios-sim/node_modules/shelljs/src/exec.js
deleted file mode 100644
index 7ccdbc0..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/exec.js
+++ /dev/null
@@ -1,181 +0,0 @@
-var common = require('./common');
-var _tempDir = require('./tempdir');
-var _pwd = require('./pwd');
-var path = require('path');
-var fs = require('fs');
-var child = require('child_process');
-
-// Hack to run child_process.exec() synchronously (sync avoids callback hell)
-// Uses a custom wait loop that checks for a flag file, created when the child process is done.
-// (Can't do a wait loop that checks for internal Node variables/messages as
-// Node is single-threaded; callbacks and other internal state changes are done in the
-// event loop).
-function execSync(cmd, opts) {
-  var tempDir = _tempDir();
-  var stdoutFile = path.resolve(tempDir+'/'+common.randomFileName()),
-      codeFile = path.resolve(tempDir+'/'+common.randomFileName()),
-      scriptFile = path.resolve(tempDir+'/'+common.randomFileName()),
-      sleepFile = path.resolve(tempDir+'/'+common.randomFileName());
-
-  var options = common.extend({
-    silent: common.config.silent
-  }, opts);
-
-  var previousStdoutContent = '';
-  // Echoes stdout changes from running process, if not silent
-  function updateStdout() {
-    if (options.silent || !fs.existsSync(stdoutFile))
-      return;
-
-    var stdoutContent = fs.readFileSync(stdoutFile, 'utf8');
-    // No changes since last time?
-    if (stdoutContent.length <= previousStdoutContent.length)
-      return;
-
-    process.stdout.write(stdoutContent.substr(previousStdoutContent.length));
-    previousStdoutContent = stdoutContent;
-  }
-
-  function escape(str) {
-    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
-  }
-
-  cmd += ' > '+stdoutFile+' 2>&1'; // works on both win/unix
-
-  var script =
-   "var child = require('child_process')," +
-   "     fs = require('fs');" +
-   "child.exec('"+escape(cmd)+"', {env: process.env, maxBuffer: 20*1024*1024}, function(err) {" +
-   "  fs.writeFileSync('"+escape(codeFile)+"', err ? err.code.toString() : '0');" +
-   "});";
-
-  if (fs.existsSync(scriptFile)) common.unlinkSync(scriptFile);
-  if (fs.existsSync(stdoutFile)) common.unlinkSync(stdoutFile);
-  if (fs.existsSync(codeFile)) common.unlinkSync(codeFile);
-
-  fs.writeFileSync(scriptFile, script);
-  child.exec('"'+process.execPath+'" '+scriptFile, {
-    env: process.env,
-    cwd: _pwd(),
-    maxBuffer: 20*1024*1024
-  });
-
-  // The wait loop
-  // sleepFile is used as a dummy I/O op to mitigate unnecessary CPU usage
-  // (tried many I/O sync ops, writeFileSync() seems to be only one that is effective in reducing
-  // CPU usage, though apparently not so much on Windows)
-  while (!fs.existsSync(codeFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
-  while (!fs.existsSync(stdoutFile)) { updateStdout(); fs.writeFileSync(sleepFile, 'a'); }
-
-  // At this point codeFile exists, but it's not necessarily flushed yet.
-  // Keep reading it until it is.
-  var code = parseInt('', 10);
-  while (isNaN(code)) {
-    code = parseInt(fs.readFileSync(codeFile, 'utf8'), 10);
-  }
-
-  var stdout = fs.readFileSync(stdoutFile, 'utf8');
-
-  // No biggie if we can't erase the files now -- they're in a temp dir anyway
-  try { common.unlinkSync(scriptFile); } catch(e) {}
-  try { common.unlinkSync(stdoutFile); } catch(e) {}
-  try { common.unlinkSync(codeFile); } catch(e) {}
-  try { common.unlinkSync(sleepFile); } catch(e) {}
-
-  // some shell return codes are defined as errors, per http://tldp.org/LDP/abs/html/exitcodes.html
-  if (code === 1 || code === 2 || code >= 126)  {
-      common.error('', true); // unix/shell doesn't really give an error message after non-zero exit codes
-  }
-  // True if successful, false if not
-  var obj = {
-    code: code,
-    output: stdout
-  };
-  return obj;
-} // execSync()
-
-// Wrapper around exec() to enable echoing output to console in real time
-function execAsync(cmd, opts, callback) {
-  var output = '';
-
-  var options = common.extend({
-    silent: common.config.silent
-  }, opts);
-
-  var c = child.exec(cmd, {env: process.env, maxBuffer: 20*1024*1024}, function(err) {
-    if (callback)
-      callback(err ? err.code : 0, output);
-  });
-
-  c.stdout.on('data', function(data) {
-    output += data;
-    if (!options.silent)
-      process.stdout.write(data);
-  });
-
-  c.stderr.on('data', function(data) {
-    output += data;
-    if (!options.silent)
-      process.stdout.write(data);
-  });
-
-  return c;
-}
-
-//@
-//@ ### exec(command [, options] [, callback])
-//@ Available options (all `false` by default):
-//@
-//@ + `async`: Asynchronous execution. Defaults to true if a callback is provided.
-//@ + `silent`: Do not echo program output to console.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var version = exec('node --version', {silent:true}).output;
-//@
-//@ var child = exec('some_long_running_process', {async:true});
-//@ child.stdout.on('data', function(data) {
-//@   /* ... do something with data ... */
-//@ });
-//@
-//@ exec('some_long_running_process', function(code, output) {
-//@   console.log('Exit code:', code);
-//@   console.log('Program output:', output);
-//@ });
-//@ ```
-//@
-//@ Executes the given `command` _synchronously_, unless otherwise specified.
-//@ When in synchronous mode returns the object `{ code:..., output:... }`, containing the program's
-//@ `output` (stdout + stderr)  and its exit `code`. Otherwise returns the child process object, and
-//@ the `callback` gets the arguments `(code, output)`.
-//@
-//@ **Note:** For long-lived processes, it's best to run `exec()` asynchronously as
-//@ the current synchronous implementation uses a lot of CPU. This should be getting
-//@ fixed soon.
-function _exec(command, options, callback) {
-  if (!command)
-    common.error('must specify command');
-
-  // Callback is defined instead of options.
-  if (typeof options === 'function') {
-    callback = options;
-    options = { async: true };
-  }
-
-  // Callback is defined with options.
-  if (typeof options === 'object' && typeof callback === 'function') {
-    options.async = true;
-  }
-
-  options = common.extend({
-    silent: common.config.silent,
-    async: false
-  }, options);
-
-  if (options.async)
-    return execAsync(command, options, callback);
-  else
-    return execSync(command, options);
-}
-module.exports = _exec;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/find.js b/node_modules/ios-sim/node_modules/shelljs/src/find.js
deleted file mode 100644
index d9eeec2..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/find.js
+++ /dev/null
@@ -1,51 +0,0 @@
-var fs = require('fs');
-var common = require('./common');
-var _ls = require('./ls');
-
-//@
-//@ ### find(path [,path ...])
-//@ ### find(path_array)
-//@ Examples:
-//@
-//@ ```javascript
-//@ find('src', 'lib');
-//@ find(['src', 'lib']); // same as above
-//@ find('.').filter(function(file) { return file.match(/\.js$/); });
-//@ ```
-//@
-//@ Returns array of all files (however deep) in the given paths.
-//@
-//@ The main difference from `ls('-R', path)` is that the resulting file names
-//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
-function _find(options, paths) {
-  if (!paths)
-    common.error('no path specified');
-  else if (typeof paths === 'object')
-    paths = paths; // assume array
-  else if (typeof paths === 'string')
-    paths = [].slice.call(arguments, 1);
-
-  var list = [];
-
-  function pushFile(file) {
-    if (common.platform === 'win')
-      file = file.replace(/\\/g, '/');
-    list.push(file);
-  }
-
-  // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs
-  // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory
-
-  paths.forEach(function(file) {
-    pushFile(file);
-
-    if (fs.statSync(file).isDirectory()) {
-      _ls('-RA', file+'/*').forEach(function(subfile) {
-        pushFile(subfile);
-      });
-    }
-  });
-
-  return list;
-}
-module.exports = _find;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/grep.js b/node_modules/ios-sim/node_modules/shelljs/src/grep.js
deleted file mode 100644
index 00c7d6a..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/grep.js
+++ /dev/null
@@ -1,52 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-//@
-//@ ### grep([options ,] regex_filter, file [, file ...])
-//@ ### grep([options ,] regex_filter, file_array)
-//@ Available options:
-//@
-//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria.
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ grep('-v', 'GLOBAL_VARIABLE', '*.js');
-//@ grep('GLOBAL_VARIABLE', '*.js');
-//@ ```
-//@
-//@ Reads input string from given files and returns a string containing all lines of the
-//@ file that match the given `regex_filter`. Wildcard `*` accepted.
-function _grep(options, regex, files) {
-  options = common.parseOptions(options, {
-    'v': 'inverse'
-  });
-
-  if (!files)
-    common.error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 2);
-  // if it's array leave it as it is
-
-  files = common.expand(files);
-
-  var grep = '';
-  files.forEach(function(file) {
-    if (!fs.existsSync(file)) {
-      common.error('no such file or directory: ' + file, true);
-      return;
-    }
-
-    var contents = fs.readFileSync(file, 'utf8'),
-        lines = contents.split(/\r*\n/);
-    lines.forEach(function(line) {
-      var matched = line.match(regex);
-      if ((options.inverse && !matched) || (!options.inverse && matched))
-        grep += line + '\n';
-    });
-  });
-
-  return common.ShellString(grep);
-}
-module.exports = _grep;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/ls.js b/node_modules/ios-sim/node_modules/shelljs/src/ls.js
deleted file mode 100644
index 3345db4..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/ls.js
+++ /dev/null
@@ -1,126 +0,0 @@
-var path = require('path');
-var fs = require('fs');
-var common = require('./common');
-var _cd = require('./cd');
-var _pwd = require('./pwd');
-
-//@
-//@ ### ls([options ,] path [,path ...])
-//@ ### ls([options ,] path_array)
-//@ Available options:
-//@
-//@ + `-R`: recursive
-//@ + `-A`: all files (include files beginning with `.`, except for `.` and `..`)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ ls('projs/*.js');
-//@ ls('-R', '/users/me', '/tmp');
-//@ ls('-R', ['/users/me', '/tmp']); // same as above
-//@ ```
-//@
-//@ Returns array of files in the given path, or in current directory if no path provided.
-function _ls(options, paths) {
-  options = common.parseOptions(options, {
-    'R': 'recursive',
-    'A': 'all',
-    'a': 'all_deprecated'
-  });
-
-  if (options.all_deprecated) {
-    // We won't support the -a option as it's hard to image why it's useful
-    // (it includes '.' and '..' in addition to '.*' files)
-    // For backwards compatibility we'll dump a deprecated message and proceed as before
-    common.log('ls: Option -a is deprecated. Use -A instead');
-    options.all = true;
-  }
-
-  if (!paths)
-    paths = ['.'];
-  else if (typeof paths === 'object')
-    paths = paths; // assume array
-  else if (typeof paths === 'string')
-    paths = [].slice.call(arguments, 1);
-
-  var list = [];
-
-  // Conditionally pushes file to list - returns true if pushed, false otherwise
-  // (e.g. prevents hidden files to be included unless explicitly told so)
-  function pushFile(file, query) {
-    // hidden file?
-    if (path.basename(file)[0] === '.') {
-      // not explicitly asking for hidden files?
-      if (!options.all && !(path.basename(query)[0] === '.' && path.basename(query).length > 1))
-        return false;
-    }
-
-    if (common.platform === 'win')
-      file = file.replace(/\\/g, '/');
-
-    list.push(file);
-    return true;
-  }
-
-  paths.forEach(function(p) {
-    if (fs.existsSync(p)) {
-      var stats = fs.statSync(p);
-      // Simple file?
-      if (stats.isFile()) {
-        pushFile(p, p);
-        return; // continue
-      }
-
-      // Simple dir?
-      if (stats.isDirectory()) {
-        // Iterate over p contents
-        fs.readdirSync(p).forEach(function(file) {
-          if (!pushFile(file, p))
-            return;
-
-          // Recursive?
-          if (options.recursive) {
-            var oldDir = _pwd();
-            _cd('', p);
-            if (fs.statSync(file).isDirectory())
-              list = list.concat(_ls('-R'+(options.all?'A':''), file+'/*'));
-            _cd('', oldDir);
-          }
-        });
-        return; // continue
-      }
-    }
-
-    // p does not exist - possible wildcard present
-
-    var basename = path.basename(p);
-    var dirname = path.dirname(p);
-    // Wildcard present on an existing dir? (e.g. '/tmp/*.js')
-    if (basename.search(/\*/) > -1 && fs.existsSync(dirname) && fs.statSync(dirname).isDirectory) {
-      // Escape special regular expression chars
-      var regexp = basename.replace(/(\^|\$|\(|\)|<|>|\[|\]|\{|\}|\.|\+|\?)/g, '\\$1');
-      // Translates wildcard into regex
-      regexp = '^' + regexp.replace(/\*/g, '.*') + '$';
-      // Iterate over directory contents
-      fs.readdirSync(dirname).forEach(function(file) {
-        if (file.match(new RegExp(regexp))) {
-          if (!pushFile(path.normalize(dirname+'/'+file), basename))
-            return;
-
-          // Recursive?
-          if (options.recursive) {
-            var pp = dirname + '/' + file;
-            if (fs.lstatSync(pp).isDirectory())
-              list = list.concat(_ls('-R'+(options.all?'A':''), pp+'/*'));
-          } // recursive
-        } // if file matches
-      }); // forEach
-      return;
-    }
-
-    common.error('no such file or directory: ' + p, true);
-  });
-
-  return list;
-}
-module.exports = _ls;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/mkdir.js b/node_modules/ios-sim/node_modules/shelljs/src/mkdir.js
deleted file mode 100644
index 5a7088f..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/mkdir.js
+++ /dev/null
@@ -1,68 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-// Recursively creates 'dir'
-function mkdirSyncRecursive(dir) {
-  var baseDir = path.dirname(dir);
-
-  // Base dir exists, no recursion necessary
-  if (fs.existsSync(baseDir)) {
-    fs.mkdirSync(dir, parseInt('0777', 8));
-    return;
-  }
-
-  // Base dir does not exist, go recursive
-  mkdirSyncRecursive(baseDir);
-
-  // Base dir created, can create dir
-  fs.mkdirSync(dir, parseInt('0777', 8));
-}
-
-//@
-//@ ### mkdir([options ,] dir [, dir ...])
-//@ ### mkdir([options ,] dir_array)
-//@ Available options:
-//@
-//@ + `p`: full path (will create intermediate dirs if necessary)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
-//@ mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
-//@ ```
-//@
-//@ Creates directories.
-function _mkdir(options, dirs) {
-  options = common.parseOptions(options, {
-    'p': 'fullpath'
-  });
-  if (!dirs)
-    common.error('no paths given');
-
-  if (typeof dirs === 'string')
-    dirs = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  dirs.forEach(function(dir) {
-    if (fs.existsSync(dir)) {
-      if (!options.fullpath)
-          common.error('path already exists: ' + dir, true);
-      return; // skip dir
-    }
-
-    // Base dir does not exist, and no -p option given
-    var baseDir = path.dirname(dir);
-    if (!fs.existsSync(baseDir) && !options.fullpath) {
-      common.error('no such file or directory: ' + baseDir, true);
-      return; // skip dir
-    }
-
-    if (options.fullpath)
-      mkdirSyncRecursive(dir);
-    else
-      fs.mkdirSync(dir, parseInt('0777', 8));
-  });
-} // mkdir
-module.exports = _mkdir;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/mv.js b/node_modules/ios-sim/node_modules/shelljs/src/mv.js
deleted file mode 100644
index 11f9607..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/mv.js
+++ /dev/null
@@ -1,80 +0,0 @@
-var fs = require('fs');
-var path = require('path');
-var common = require('./common');
-
-//@
-//@ ### mv(source [, source ...], dest')
-//@ ### mv(source_array, dest')
-//@ Available options:
-//@
-//@ + `f`: force
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ mv('-f', 'file', 'dir/');
-//@ mv('file1', 'file2', 'dir/');
-//@ mv(['file1', 'file2'], 'dir/'); // same as above
-//@ ```
-//@
-//@ Moves files. The wildcard `*` is accepted.
-function _mv(options, sources, dest) {
-  options = common.parseOptions(options, {
-    'f': 'force'
-  });
-
-  // Get sources, dest
-  if (arguments.length < 3) {
-    common.error('missing <source> and/or <dest>');
-  } else if (arguments.length > 3) {
-    sources = [].slice.call(arguments, 1, arguments.length - 1);
-    dest = arguments[arguments.length - 1];
-  } else if (typeof sources === 'string') {
-    sources = [sources];
-  } else if ('length' in sources) {
-    sources = sources; // no-op for array
-  } else {
-    common.error('invalid arguments');
-  }
-
-  sources = common.expand(sources);
-
-  var exists = fs.existsSync(dest),
-      stats = exists && fs.statSync(dest);
-
-  // Dest is not existing dir, but multiple sources given
-  if ((!exists || !stats.isDirectory()) && sources.length > 1)
-    common.error('dest is not a directory (too many sources)');
-
-  // Dest is an existing file, but no -f given
-  if (exists && stats.isFile() && !options.force)
-    common.error('dest file already exists: ' + dest);
-
-  sources.forEach(function(src) {
-    if (!fs.existsSync(src)) {
-      common.error('no such file or directory: '+src, true);
-      return; // skip file
-    }
-
-    // If here, src exists
-
-    // When copying to '/path/dir':
-    //    thisDest = '/path/dir/file1'
-    var thisDest = dest;
-    if (fs.existsSync(dest) && fs.statSync(dest).isDirectory())
-      thisDest = path.normalize(dest + '/' + path.basename(src));
-
-    if (fs.existsSync(thisDest) && !options.force) {
-      common.error('dest file already exists: ' + thisDest, true);
-      return; // skip file
-    }
-
-    if (path.resolve(src) === path.dirname(path.resolve(thisDest))) {
-      common.error('cannot move to self: '+src, true);
-      return; // skip file
-    }
-
-    fs.renameSync(src, thisDest);
-  }); // forEach(src)
-} // mv
-module.exports = _mv;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/popd.js b/node_modules/ios-sim/node_modules/shelljs/src/popd.js
deleted file mode 100644
index 11ea24f..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/popd.js
+++ /dev/null
@@ -1 +0,0 @@
-// see dirs.js
\ No newline at end of file
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/pushd.js b/node_modules/ios-sim/node_modules/shelljs/src/pushd.js
deleted file mode 100644
index 11ea24f..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/pushd.js
+++ /dev/null
@@ -1 +0,0 @@
-// see dirs.js
\ No newline at end of file
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/pwd.js b/node_modules/ios-sim/node_modules/shelljs/src/pwd.js
deleted file mode 100644
index 41727bb..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/pwd.js
+++ /dev/null
@@ -1,11 +0,0 @@
-var path = require('path');
-var common = require('./common');
-
-//@
-//@ ### pwd()
-//@ Returns the current directory.
-function _pwd(options) {
-  var pwd = path.resolve(process.cwd());
-  return common.ShellString(pwd);
-}
-module.exports = _pwd;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/rm.js b/node_modules/ios-sim/node_modules/shelljs/src/rm.js
deleted file mode 100644
index 3abe6e1..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/rm.js
+++ /dev/null
@@ -1,145 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-// Recursively removes 'dir'
-// Adapted from https://github.com/ryanmcgrath/wrench-js
-//
-// Copyright (c) 2010 Ryan McGrath
-// Copyright (c) 2012 Artur Adib
-//
-// Licensed under the MIT License
-// http://www.opensource.org/licenses/mit-license.php
-function rmdirSyncRecursive(dir, force) {
-  var files;
-
-  files = fs.readdirSync(dir);
-
-  // Loop through and delete everything in the sub-tree after checking it
-  for(var i = 0; i < files.length; i++) {
-    var file = dir + "/" + files[i],
-        currFile = fs.lstatSync(file);
-
-    if(currFile.isDirectory()) { // Recursive function back to the beginning
-      rmdirSyncRecursive(file, force);
-    }
-
-    else if(currFile.isSymbolicLink()) { // Unlink symlinks
-      if (force || isWriteable(file)) {
-        try {
-          common.unlinkSync(file);
-        } catch (e) {
-          common.error('could not remove file (code '+e.code+'): ' + file, true);
-        }
-      }
-    }
-
-    else // Assume it's a file - perhaps a try/catch belongs here?
-      if (force || isWriteable(file)) {
-        try {
-          common.unlinkSync(file);
-        } catch (e) {
-          common.error('could not remove file (code '+e.code+'): ' + file, true);
-        }
-      }
-  }
-
-  // Now that we know everything in the sub-tree has been deleted, we can delete the main directory.
-  // Huzzah for the shopkeep.
-
-  var result;
-  try {
-    result = fs.rmdirSync(dir);
-  } catch(e) {
-    common.error('could not remove directory (code '+e.code+'): ' + dir, true);
-  }
-
-  return result;
-} // rmdirSyncRecursive
-
-// Hack to determine if file has write permissions for current user
-// Avoids having to check user, group, etc, but it's probably slow
-function isWriteable(file) {
-  var writePermission = true;
-  try {
-    var __fd = fs.openSync(file, 'a');
-    fs.closeSync(__fd);
-  } catch(e) {
-    writePermission = false;
-  }
-
-  return writePermission;
-}
-
-//@
-//@ ### rm([options ,] file [, file ...])
-//@ ### rm([options ,] file_array)
-//@ Available options:
-//@
-//@ + `-f`: force
-//@ + `-r, -R`: recursive
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ rm('-rf', '/tmp/*');
-//@ rm('some_file.txt', 'another_file.txt');
-//@ rm(['some_file.txt', 'another_file.txt']); // same as above
-//@ ```
-//@
-//@ Removes files. The wildcard `*` is accepted.
-function _rm(options, files) {
-  options = common.parseOptions(options, {
-    'f': 'force',
-    'r': 'recursive',
-    'R': 'recursive'
-  });
-  if (!files)
-    common.error('no paths given');
-
-  if (typeof files === 'string')
-    files = [].slice.call(arguments, 1);
-  // if it's array leave it as it is
-
-  files = common.expand(files);
-
-  files.forEach(function(file) {
-    if (!fs.existsSync(file)) {
-      // Path does not exist, no force flag given
-      if (!options.force)
-        common.error('no such file or directory: '+file, true);
-
-      return; // skip file
-    }
-
-    // If here, path exists
-
-    var stats = fs.lstatSync(file);
-    if (stats.isFile() || stats.isSymbolicLink()) {
-
-      // Do not check for file writing permissions
-      if (options.force) {
-        common.unlinkSync(file);
-        return;
-      }
-
-      if (isWriteable(file))
-        common.unlinkSync(file);
-      else
-        common.error('permission denied: '+file, true);
-
-      return;
-    } // simple file
-
-    // Path is an existing directory, but no -r flag given
-    if (stats.isDirectory() && !options.recursive) {
-      common.error('path is a directory', true);
-      return; // skip path
-    }
-
-    // Recursively remove existing directory
-    if (stats.isDirectory() && options.recursive) {
-      rmdirSyncRecursive(file, options.force);
-    }
-  }); // forEach(file)
-} // rm
-module.exports = _rm;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/sed.js b/node_modules/ios-sim/node_modules/shelljs/src/sed.js
deleted file mode 100644
index 9783252..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/sed.js
+++ /dev/null
@@ -1,43 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-//@
-//@ ### sed([options ,] search_regex, replace_str, file)
-//@ Available options:
-//@
-//@ + `-i`: Replace contents of 'file' in-place. _Note that no backups will be created!_
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ sed('-i', 'PROGRAM_VERSION', 'v0.1.3', 'source.js');
-//@ sed(/.*DELETE_THIS_LINE.*\n/, '', 'source.js');
-//@ ```
-//@
-//@ Reads an input string from `file` and performs a JavaScript `replace()` on the input
-//@ using the given search regex and replacement string. Returns the new string after replacement.
-function _sed(options, regex, replacement, file) {
-  options = common.parseOptions(options, {
-    'i': 'inplace'
-  });
-
-  if (typeof replacement === 'string')
-    replacement = replacement; // no-op
-  else if (typeof replacement === 'number')
-    replacement = replacement.toString(); // fallback
-  else
-    common.error('invalid replacement string');
-
-  if (!file)
-    common.error('no file given');
-
-  if (!fs.existsSync(file))
-    common.error('no such file or directory: ' + file);
-
-  var result = fs.readFileSync(file, 'utf8').replace(regex, replacement);
-  if (options.inplace)
-    fs.writeFileSync(file, result, 'utf8');
-
-  return common.ShellString(result);
-}
-module.exports = _sed;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/tempdir.js b/node_modules/ios-sim/node_modules/shelljs/src/tempdir.js
deleted file mode 100644
index 45953c2..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/tempdir.js
+++ /dev/null
@@ -1,56 +0,0 @@
-var common = require('./common');
-var os = require('os');
-var fs = require('fs');
-
-// Returns false if 'dir' is not a writeable directory, 'dir' otherwise
-function writeableDir(dir) {
-  if (!dir || !fs.existsSync(dir))
-    return false;
-
-  if (!fs.statSync(dir).isDirectory())
-    return false;
-
-  var testFile = dir+'/'+common.randomFileName();
-  try {
-    fs.writeFileSync(testFile, ' ');
-    common.unlinkSync(testFile);
-    return dir;
-  } catch (e) {
-    return false;
-  }
-}
-
-
-//@
-//@ ### tempdir()
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var tmp = tempdir(); // "/tmp" for most *nix platforms
-//@ ```
-//@
-//@ Searches and returns string containing a writeable, platform-dependent temporary directory.
-//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir).
-function _tempDir() {
-  var state = common.state;
-  if (state.tempDir)
-    return state.tempDir; // from cache
-
-  state.tempDir = writeableDir(os.tempDir && os.tempDir()) || // node 0.8+
-                  writeableDir(process.env['TMPDIR']) ||
-                  writeableDir(process.env['TEMP']) ||
-                  writeableDir(process.env['TMP']) ||
-                  writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS
-                  writeableDir('C:\\TEMP') || // Windows
-                  writeableDir('C:\\TMP') || // Windows
-                  writeableDir('\\TEMP') || // Windows
-                  writeableDir('\\TMP') || // Windows
-                  writeableDir('/tmp') ||
-                  writeableDir('/var/tmp') ||
-                  writeableDir('/usr/tmp') ||
-                  writeableDir('.'); // last resort
-
-  return state.tempDir;
-}
-module.exports = _tempDir;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/test.js b/node_modules/ios-sim/node_modules/shelljs/src/test.js
deleted file mode 100644
index 8a4ac7d..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/test.js
+++ /dev/null
@@ -1,85 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-
-//@
-//@ ### test(expression)
-//@ Available expression primaries:
-//@
-//@ + `'-b', 'path'`: true if path is a block device
-//@ + `'-c', 'path'`: true if path is a character device
-//@ + `'-d', 'path'`: true if path is a directory
-//@ + `'-e', 'path'`: true if path exists
-//@ + `'-f', 'path'`: true if path is a regular file
-//@ + `'-L', 'path'`: true if path is a symboilc link
-//@ + `'-p', 'path'`: true if path is a pipe (FIFO)
-//@ + `'-S', 'path'`: true if path is a socket
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ if (test('-d', path)) { /* do something with dir */ };
-//@ if (!test('-f', path)) continue; // skip if it's a regular file
-//@ ```
-//@
-//@ Evaluates expression using the available primaries and returns corresponding value.
-function _test(options, path) {
-  if (!path)
-    common.error('no path given');
-
-  // hack - only works with unary primaries
-  options = common.parseOptions(options, {
-    'b': 'block',
-    'c': 'character',
-    'd': 'directory',
-    'e': 'exists',
-    'f': 'file',
-    'L': 'link',
-    'p': 'pipe',
-    'S': 'socket'
-  });
-
-  var canInterpret = false;
-  for (var key in options)
-    if (options[key] === true) {
-      canInterpret = true;
-      break;
-    }
-
-  if (!canInterpret)
-    common.error('could not interpret expression');
-
-  if (options.link) {
-    try {
-      return fs.lstatSync(path).isSymbolicLink();
-    } catch(e) {
-      return false;
-    }
-  }
-
-  if (!fs.existsSync(path))
-    return false;
-
-  if (options.exists)
-    return true;
-
-  var stats = fs.statSync(path);
-
-  if (options.block)
-    return stats.isBlockDevice();
-
-  if (options.character)
-    return stats.isCharacterDevice();
-
-  if (options.directory)
-    return stats.isDirectory();
-
-  if (options.file)
-    return stats.isFile();
-
-  if (options.pipe)
-    return stats.isFIFO();
-
-  if (options.socket)
-    return stats.isSocket();
-} // test
-module.exports = _test;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/to.js b/node_modules/ios-sim/node_modules/shelljs/src/to.js
deleted file mode 100644
index f029999..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/to.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-//@
-//@ ### 'string'.to(file)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cat('input.txt').to('output.txt');
-//@ ```
-//@
-//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
-//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
-function _to(options, file) {
-  if (!file)
-    common.error('wrong arguments');
-
-  if (!fs.existsSync( path.dirname(file) ))
-      common.error('no such file or directory: ' + path.dirname(file));
-
-  try {
-    fs.writeFileSync(file, this.toString(), 'utf8');
-  } catch(e) {
-    common.error('could not write to file (code '+e.code+'): '+file, true);
-  }
-}
-module.exports = _to;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/toEnd.js b/node_modules/ios-sim/node_modules/shelljs/src/toEnd.js
deleted file mode 100644
index f6d099d..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/toEnd.js
+++ /dev/null
@@ -1,29 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-//@
-//@ ### 'string'.toEnd(file)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ cat('input.txt').toEnd('output.txt');
-//@ ```
-//@
-//@ Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
-//@ those returned by `cat`, `grep`, etc).
-function _toEnd(options, file) {
-  if (!file)
-    common.error('wrong arguments');
-
-  if (!fs.existsSync( path.dirname(file) ))
-      common.error('no such file or directory: ' + path.dirname(file));
-
-  try {
-    fs.appendFileSync(file, this.toString(), 'utf8');
-  } catch(e) {
-    common.error('could not append to file (code '+e.code+'): '+file, true);
-  }
-}
-module.exports = _toEnd;
diff --git a/node_modules/ios-sim/node_modules/shelljs/src/which.js b/node_modules/ios-sim/node_modules/shelljs/src/which.js
deleted file mode 100644
index fadb96c..0000000
--- a/node_modules/ios-sim/node_modules/shelljs/src/which.js
+++ /dev/null
@@ -1,79 +0,0 @@
-var common = require('./common');
-var fs = require('fs');
-var path = require('path');
-
-// Cross-platform method for splitting environment PATH variables
-function splitPath(p) {
-  for (i=1;i<2;i++) {}
-
-  if (!p)
-    return [];
-
-  if (common.platform === 'win')
-    return p.split(';');
-  else
-    return p.split(':');
-}
-
-//@
-//@ ### which(command)
-//@
-//@ Examples:
-//@
-//@ ```javascript
-//@ var nodeExec = which('node');
-//@ ```
-//@
-//@ Searches for `command` in the system's PATH. On Windows looks for `.exe`, `.cmd`, and `.bat` extensions.
-//@ Returns string containing the absolute path to the command.
-function _which(options, cmd) {
-  if (!cmd)
-    common.error('must specify command');
-
-  var pathEnv = process.env.path || process.env.Path || process.env.PATH,
-      pathArray = splitPath(pathEnv),
-      where = null;
-
-  // No relative/absolute paths provided?
-  if (cmd.search(/\//) === -1) {
-    // Search for command in PATH
-    pathArray.forEach(function(dir) {
-      if (where)
-        return; // already found it
-
-      var attempt = path.resolve(dir + '/' + cmd);
-      if (fs.existsSync(attempt)) {
-        where = attempt;
-        return;
-      }
-
-      if (common.platform === 'win') {
-        var baseAttempt = attempt;
-        attempt = baseAttempt + '.exe';
-        if (fs.existsSync(attempt)) {
-          where = attempt;
-          return;
-        }
-        attempt = baseAttempt + '.cmd';
-        if (fs.existsSync(attempt)) {
-          where = attempt;
-          return;
-        }
-        attempt = baseAttempt + '.bat';
-        if (fs.existsSync(attempt)) {
-          where = attempt;
-          return;
-        }
-      } // if 'win'
-    });
-  }
-
-  // Command not found anywhere?
-  if (!fs.existsSync(cmd) && !where)
-    return null;
-
-  where = where || path.resolve(cmd);
-
-  return common.ShellString(where);
-}
-module.exports = _which;
diff --git a/node_modules/ios-sim/node_modules/simctl/.jscsrc b/node_modules/ios-sim/node_modules/simctl/.jscsrc
deleted file mode 100644
index a0a41ff..0000000
--- a/node_modules/ios-sim/node_modules/simctl/.jscsrc
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-    "disallowTabs": true,
-    "preset": "google",
-    "fileExtensions": [".js", "jscs"],
-
-    "requireSemicolons": true,
-    "requireParenthesesAroundIIFE": true,
-    "maximumLineLength": 120,
-    "validateLineBreaks": "LF",
-    "validateIndentation": 4,
-    "disallowTrailingComma": true,
-    "disallowUnusedParams": true,
-
-    "disallowSpacesInsideObjectBrackets": null,
-    "disallowImplicitTypeConversion": ["string"],
-
-    "safeContextKeyword": "_this",
-    
-    "disallowMultipleVarDecl": {
-        allExcept: ['require']
-    },
-    
-    "requireCamelCaseOrUpperCaseIdentifiers" : false,
-
-    "jsDoc": {
-        "checkAnnotations": "closurecompiler",
-        "checkParamNames": true,
-        "requireParamTypes": true,
-        "checkRedundantParams": true,
-        "checkReturnTypes": true,
-        "checkRedundantReturns": true,
-        "requireReturnTypes": true,
-        "checkTypes": "capitalizedNativeCase",
-        "checkRedundantAccess": true,
-        "requireNewlineAfterDescription": true
-    },
-
-    "excludeFiles": [
-    ]
-}
\ No newline at end of file
diff --git a/node_modules/ios-sim/node_modules/simctl/.npmignore b/node_modules/ios-sim/node_modules/simctl/.npmignore
deleted file mode 100644
index b512c09..0000000
--- a/node_modules/ios-sim/node_modules/simctl/.npmignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
\ No newline at end of file
diff --git a/node_modules/ios-sim/node_modules/simctl/LICENSE b/node_modules/ios-sim/node_modules/simctl/LICENSE
deleted file mode 100644
index 3fdbf44..0000000
--- a/node_modules/ios-sim/node_modules/simctl/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2014 Shazron Abdullah
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/node_modules/ios-sim/node_modules/simctl/README.md b/node_modules/ios-sim/node_modules/simctl/README.md
deleted file mode 100644
index 61acb9d..0000000
--- a/node_modules/ios-sim/node_modules/simctl/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-[![Build status](https://ci.appveyor.com/api/projects/status/4p87ytoudwh7g132/branch/master?svg=true)](https://ci.appveyor.com/project/shazron/simctl/branch/master)
-[![Build Status](https://travis-ci.org/phonegap/ios-sim.svg?branch=master)](https://travis-ci.org/phonegap/simctl)
-
-## library wrapper for Xcode's simctl utility on OS X
-
-Used by [ios-sim](https://www.npmjs.com/package/ios-sim)
-
-## Requirements
-
-Xcode 8 or greater
diff --git a/node_modules/ios-sim/node_modules/simctl/lib/simctl-extensions.js b/node_modules/ios-sim/node_modules/simctl/lib/simctl-extensions.js
deleted file mode 100644
index 26eec67..0000000
--- a/node_modules/ios-sim/node_modules/simctl/lib/simctl-extensions.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2014 Shazron Abdullah.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-var shell = require('shelljs'),
-    path = require('path'),
-    fs = require('fs'),
-    util = require('util'),
-    Tail = require('tail').Tail;
-
-var extensions = {
-    start: function(deviceid) {
-         var command = util.format('xcrun instruments -w "%s"', deviceid);
-         return shell.exec(command, { silent: true });
-     },
-
-    log: function(deviceid, filepath) {
-        var tail = new Tail(
-            path.join(process.env.HOME, 'Library/Logs/CoreSimulator', deviceid, 'system.log')
-        );
-
-        tail.on('line', function(data) {
-            if (filepath) {
-                fs.appendFile(filepath, data + '\n', function(error) {
-                    if (error) {
-                        console.error('ERROR: ', error);
-                        throw error;
-                    }
-                });
-            } else {
-                console.log(data);
-            }
-        });
-
-        tail.on('error', function(error) {
-            console.error('ERROR: ', error);
-        });
-
-        return tail;
-    }
-};
-
-exports = module.exports = extensions;
diff --git a/node_modules/ios-sim/node_modules/simctl/package.json b/node_modules/ios-sim/node_modules/simctl/package.json
deleted file mode 100644
index 7be0b62..0000000
--- a/node_modules/ios-sim/node_modules/simctl/package.json
+++ /dev/null
@@ -1,99 +0,0 @@
-{
-  "_args": [
-    [
-      {
-        "raw": "simctl@^1.0.0",
-        "scope": null,
-        "escapedName": "simctl",
-        "name": "simctl",
-        "rawSpec": "^1.0.0",
-        "spec": ">=1.0.0 <2.0.0",
-        "type": "range"
-      },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/ios-sim"
-    ]
-  ],
-  "_from": "simctl@>=1.0.0 <2.0.0",
-  "_id": "simctl@1.0.1",
-  "_inCache": true,
-  "_location": "/ios-sim/simctl",
-  "_nodeVersion": "6.7.0",
-  "_npmOperationalInternal": {
-    "host": "s3://npm-registry-packages",
-    "tmp": "tmp/simctl-1.0.1.tgz_1497479983508_0.9374380426015705"
-  },
-  "_npmUser": {
-    "name": "shazron",
-    "email": "shazron@gmail.com"
-  },
-  "_npmVersion": "3.10.9",
-  "_phantomChildren": {},
-  "_requested": {
-    "raw": "simctl@^1.0.0",
-    "scope": null,
-    "escapedName": "simctl",
-    "name": "simctl",
-    "rawSpec": "^1.0.0",
-    "spec": ">=1.0.0 <2.0.0",
-    "type": "range"
-  },
-  "_requiredBy": [
-    "/ios-sim"
-  ],
-  "_resolved": "https://registry.npmjs.org/simctl/-/simctl-1.0.1.tgz",
-  "_shasum": "e73ce62891c952b2ae78499acdccbe3cf897a2e8",
-  "_shrinkwrap": null,
-  "_spec": "simctl@^1.0.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/ios-sim",
-  "author": {
-    "name": "Shazron Abdullah"
-  },
-  "bugs": {
-    "url": "https://github.com/phonegap/simctl/issues"
-  },
-  "dependencies": {
-    "shelljs": "^0.2.6",
-    "tail": "^0.4.0"
-  },
-  "description": "library for Xcode 8+ simctl utility on macOS",
-  "devDependencies": {
-    "jasmine-node": "^1.14.5",
-    "jscs": "^2.11.0",
-    "jshint": "^2.9.1"
-  },
-  "directories": {},
-  "dist": {
-    "shasum": "e73ce62891c952b2ae78499acdccbe3cf897a2e8",
-    "tarball": "https://registry.npmjs.org/simctl/-/simctl-1.0.1.tgz"
-  },
-  "gitHead": "27193e094e2293b06d5d3536d1f99c4785699fdc",
-  "homepage": "https://github.com/phonegap/simctl#readme",
-  "keywords": [
-    "simctl",
-    "iOS Simulator"
-  ],
-  "license": "MIT",
-  "main": "simctl.js",
-  "maintainers": [
-    {
-      "name": "shazron",
-      "email": "shazron@gmail.com"
-    }
-  ],
-  "name": "simctl",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/phonegap/simctl.git"
-  },
-  "scripts": {
-    "jasmine": "jasmine-node --captureExceptions --color spec",
-    "jscs": "jscs lib ./simctl.js",
-    "jshint": "jshint lib ./simctl.js",
-    "postjshint": "npm run jscs",
-    "posttest": "npm run jshint",
-    "test": "npm run jasmine"
-  },
-  "version": "1.0.1"
-}
diff --git a/node_modules/ios-sim/node_modules/simctl/simctl.js b/node_modules/ios-sim/node_modules/simctl/simctl.js
deleted file mode 100644
index 5cecea8..0000000
--- a/node_modules/ios-sim/node_modules/simctl/simctl.js
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2014 Shazron Abdullah.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-var shell = require('shelljs'),
-    path = require('path'),
-    util = require('util'),
-    Tail = require('tail').Tail,
-    SimCtlExtensions = require('./lib/simctl-extensions');
-
-exports = module.exports = {
-
-    set noxpc(b) {
-        this._noxpc = b;
-    },
-
-    get noxpc() {
-        return this._noxpc;
-    },
-
-    extensions: SimCtlExtensions,
-
-    check_prerequisites: function() {
-        var command = util.format('xcrun simctl help');
-        var obj = shell.exec(command, {silent: true});
-
-        if (obj.code !== 0) {
-            obj.output  = 'simctl was not found.\n';
-            obj.output += 'Check that you have Xcode 8.x installed:\n';
-            obj.output += '\txcodebuild --version';
-            obj.output += 'Check that you have Xcode 8.x selected:\n';
-            obj.output += '\txcode-select --print-path';
-        }
-
-        return obj;
-    },
-
-    create: function(name, device_type_id, runtime_id) {
-        var command = util.format('xcrun simctl create "%s" "%s" "%s"', name, device_type_id, runtime_id);
-        return shell.exec(command);
-    },
-
-    del: function(device) {
-        var command = util.format('xcrun simctl delete "%s"', device);
-        return shell.exec(command);
-    },
-
-    erase: function(device) {
-        var command = util.format('xcrun simctl erase "%s"', device);
-        return shell.exec(command);
-    },
-
-    boot: function(device) {
-        var command = util.format('xcrun simctl boot "%s"', device);
-        return shell.exec(command);
-    },
-
-    shutdown: function(device) {
-        var command = util.format('xcrun simctl shutdown "%s"', device);
-        return shell.exec(command);
-    },
-
-    rename: function(device, name) {
-        var command = util.format('xcrun simctl rename "%s" "%s"', device, name);
-        return shell.exec(command);
-    },
-
-    getenv: function(device, variable_name) {
-        var command = util.format('xcrun simctl getenv "%s" "%s"', device, variable_name);
-        return shell.exec(command);
-    },
-
-    openurl: function(device, url) {
-        var command = util.format('xcrun simctl openurl "%s" "%s"', device, url);
-        return shell.exec(command);
-    },
-
-    addphoto: function(device, path) {
-        var command = util.format('xcrun simctl addphoto "%s" "%s"', device, path);
-        return shell.exec(command);
-    },
-
-    install: function(device, path) {
-        var command = util.format('xcrun simctl install "%s" "%s"', device, path);
-        return shell.exec(command);
-    },
-
-    uninstall: function(device, app_identifier) {
-        var command = util.format('xcrun simctl uninstall "%s" "%s"', device, app_identifier);
-        return shell.exec(command);
-    },
-
-    launch: function(wait_for_debugger, device, app_identifier, argv) {
-        var wait_flag = '';
-        if (wait_for_debugger) {
-            wait_flag = '--wait-for-debugger';
-        }
-
-        var argv_expanded = '';
-        if (argv.length > 0) {
-            argv_expanded = argv.map(function(arg) {
-                return '\'' + arg + '\'';
-            }).join(' ');
-        }
-
-        var command = util.format('xcrun simctl launch %s "%s" "%s" %s',
-        wait_flag, device, app_identifier, argv_expanded);
-        return shell.exec(command);
-    },
-
-    spawn: function(wait_for_debugger, arch, device, path_to_executable, argv) {
-        var wait_flag = '';
-        if (wait_for_debugger) {
-            wait_flag = '--wait-for-debugger';
-        }
-
-        var arch_flag = '';
-        if (arch) {
-            arch_flag = util.format('--arch="%s"', arch);
-        }
-
-        var argv_expanded = '';
-        if (argv.length > 0) {
-            argv_expanded = argv.map(function(arg) {
-                return '\'' + arg + '\'';
-            }).join(' ');
-        }
-
-        var command = util.format('xcrun simctl spawn %s %s "%s" "%s" %s',
-        wait_flag, arch_flag, device, path_to_executable, argv_expanded);
-        return shell.exec(command);
-    },
-
-    list: function(options) {
-        var sublist = '';
-        options = options || {};
-
-        if (options.devices) {
-            sublist = 'devices';
-        } else if (options.devicetypes) {
-            sublist = 'devicetypes';
-        } else if (options.runtimes) {
-            sublist = 'runtimes';
-        } else if (options.pairs) {
-            sublist = 'pairs';
-        }
-
-        var command = util.format('xcrun simctl list %s --json', sublist);
-        var obj = shell.exec(command, { silent: options.silent });
-
-        if (obj.code === 0) {
-            try {
-                obj.json = JSON.parse(obj.output);
-            } catch (err) {
-                console.error(err.stack);
-            }
-        }
-
-        return obj;
-    },
-
-    notify_post: function(device, notification_name) {
-        var command = util.format('xcrun simctl notify_post "%s" "%s"', device, notification_name);
-        return shell.exec(command);
-    },
-
-    icloud_sync: function(device) {
-        var command = util.format('xcrun simctl icloud_sync "%s"', device);
-        return shell.exec(command);
-    },
-
-    help: function(subcommand) {
-        var command = util.format('xcrun simctl help "%s"', subcommand);
-        return shell.exec(command);
-    }
-};
diff --git a/node_modules/ios-sim/package.json b/node_modules/ios-sim/package.json
index 44a43f1..3903a84 100644
--- a/node_modules/ios-sim/package.json
+++ b/node_modules/ios-sim/package.json
@@ -10,7 +10,7 @@
         "spec": ">=6.0.0 <7.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios"
+      "/Users/steveng/repo/cordova/cordova-ios"
     ]
   ],
   "_from": "ios-sim@>=6.0.0 <7.0.0",
@@ -28,8 +28,7 @@
   },
   "_npmVersion": "3.10.9",
   "_phantomChildren": {
-    "abbrev": "1.0.9",
-    "tail": "0.4.0"
+    "abbrev": "1.1.0"
   },
   "_requested": {
     "raw": "ios-sim@^6.0.0",
@@ -47,7 +46,7 @@
   "_shasum": "6a8633f23ef43c43cd5f366e4115f358eef138ad",
   "_shrinkwrap": null,
   "_spec": "ios-sim@^6.0.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios",
   "author": {
     "name": "Shazron Abdullah"
   },
@@ -106,7 +105,8 @@
   "name": "ios-sim",
   "optionalDependencies": {},
   "preferGlobal": "true",
-  "readme": "ERROR: No README data found!",
+  "readme": "[![Build status](https://ci.appveyor.com/api/projects/status/0kw833771uu622fs?svg=true)](https://ci.appveyor.com/project/shazron/ios-sim)\n[![Build Status](https://travis-ci.org/phonegap/ios-sim.svg?branch=master)](https://travis-ci.org/phonegap/ios-sim)\n\nios-sim\n=======\n\nSupports Xcode 8 and greater only since version 5.x.\n\nThe ios-sim tool is a command-line utility that launches an iOS application on the iOS Simulator. This allows for niceties such as automated test [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/phonegap/ios-sim.git"
diff --git a/node_modules/lodash/package.json b/node_modules/lodash/package.json
index 414e3cb..3a220db 100644
--- a/node_modules/lodash/package.json
+++ b/node_modules/lodash/package.json
@@ -10,7 +10,7 @@
         "spec": ">=3.5.0 <4.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xmlbuilder"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/xmlbuilder"
     ]
   ],
   "_from": "lodash@>=3.5.0 <4.0.0",
@@ -36,11 +36,11 @@
   "_requiredBy": [
     "/xmlbuilder"
   ],
-  "_resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+  "_resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
   "_shasum": "5bf45e8e49ba4189e17d482789dfd15bd140b7b6",
   "_shrinkwrap": null,
   "_spec": "lodash@^3.5.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xmlbuilder",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/xmlbuilder",
   "author": {
     "name": "John-David Dalton",
     "email": "john.david.dalton@gmail.com",
@@ -117,7 +117,8 @@
   ],
   "name": "lodash",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# lodash v3.10.1\n\nThe [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash](https://lodash.com/) exported as [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) modules.\n\nGenerated using [lodash-cli](https://www.npmjs.com/package/lodash-cli):\n```bash\n$ lodash modularize modern exports=node -o ./\n$ lodash modern -d -o ./index.js\n```\n\n## Installation\n\nUsing npm:\n\n```bash\n$ {sudo -H} npm i -g npm\n$ npm i --save lodash\n```\n\nI [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/lodash/lodash.git"
diff --git a/node_modules/minimatch/package.json b/node_modules/minimatch/package.json
index dce59f8..3baedc8 100644
--- a/node_modules/minimatch/package.json
+++ b/node_modules/minimatch/package.json
@@ -10,23 +10,23 @@
         "spec": ">=3.0.0 <4.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
   "_from": "minimatch@>=3.0.0 <4.0.0",
-  "_id": "minimatch@3.0.3",
+  "_id": "minimatch@3.0.4",
   "_inCache": true,
   "_location": "/minimatch",
-  "_nodeVersion": "4.4.4",
+  "_nodeVersion": "8.0.0-pre",
   "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/minimatch-3.0.3.tgz_1470678322731_0.1892083385027945"
+    "host": "packages-18-east.internal.npmjs.com",
+    "tmp": "tmp/minimatch-3.0.4.tgz_1494180669024_0.22628829116001725"
   },
   "_npmUser": {
     "name": "isaacs",
     "email": "i@izs.me"
   },
-  "_npmVersion": "3.10.6",
+  "_npmVersion": "5.0.0-beta.43",
   "_phantomChildren": {},
   "_requested": {
     "raw": "minimatch@^3.0.0",
@@ -41,11 +41,11 @@
     "/cordova-common",
     "/glob"
   ],
-  "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
-  "_shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774",
+  "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+  "_shasum": "5166e286457f03306064be5497e8dbb0c3d32083",
   "_shrinkwrap": null,
   "_spec": "minimatch@^3.0.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -55,17 +55,17 @@
     "url": "https://github.com/isaacs/minimatch/issues"
   },
   "dependencies": {
-    "brace-expansion": "^1.0.0"
+    "brace-expansion": "^1.1.7"
   },
   "description": "a glob matcher in javascript",
   "devDependencies": {
-    "standard": "^3.7.2",
-    "tap": "^5.6.0"
+    "tap": "^10.3.2"
   },
   "directories": {},
   "dist": {
-    "shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774",
-    "tarball": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz"
+    "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+    "shasum": "5166e286457f03306064be5497e8dbb0c3d32083",
+    "tarball": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"
   },
   "engines": {
     "node": "*"
@@ -73,7 +73,7 @@
   "files": [
     "minimatch.js"
   ],
-  "gitHead": "eed89491bd4a4e6bc463aac0dfb5c29ef0d1dc13",
+  "gitHead": "e46989a323d5f0aa4781eff5e2e6e7aafa223321",
   "homepage": "https://github.com/isaacs/minimatch#readme",
   "license": "ISC",
   "main": "minimatch.js",
@@ -85,14 +85,17 @@
   ],
   "name": "minimatch",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# minimatch\n\nA minimal matching utility.\n\n[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.svg)](http://travis-ci.org/isaacs/minimatch)\n\n\nThis is the matching library used internally by npm.\n\nIt works by converting glob expressions into JavaScript `RegExp`\nobjects.\n\n## Usage\n\n```javascript\nvar minimatch = require(\"minimatch\")\n\nminimatch(\"bar.foo\", \"*.foo\") // true!\nminimatch(\"bar.foo\", \"*.bar\") // false!\nminimatch(\"bar.foo\", \"*.+ [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/minimatch.git"
   },
   "scripts": {
-    "posttest": "standard minimatch.js test/*.js",
-    "test": "tap test/*.js"
+    "postpublish": "git push origin --all; git push origin --tags",
+    "postversion": "npm publish",
+    "preversion": "npm test",
+    "test": "tap test/*.js --cov"
   },
-  "version": "3.0.3"
+  "version": "3.0.4"
 }
diff --git a/node_modules/node-uuid/.npmignore b/node_modules/node-uuid/.npmignore
deleted file mode 100644
index 8886139..0000000
--- a/node_modules/node-uuid/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-node_modules
-.DS_Store
-.nyc_output
-coverage
diff --git a/node_modules/node-uuid/LICENSE.md b/node_modules/node-uuid/LICENSE.md
deleted file mode 100644
index 652609b..0000000
--- a/node_modules/node-uuid/LICENSE.md
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c)  2010-2012 Robert Kieffer 
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/node-uuid/README.md b/node_modules/node-uuid/README.md
deleted file mode 100644
index 5cd8555..0000000
--- a/node_modules/node-uuid/README.md
+++ /dev/null
@@ -1,254 +0,0 @@
-# node-uuid
-
-Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.
-
-Features:
-
-* Generate RFC4122 version 1 or version 4 UUIDs
-* Runs in node.js and all browsers.
-* Registered as a [ComponentJS](https://github.com/component/component) [component](https://github.com/component/component/wiki/Components) ('broofa/node-uuid').
-* Cryptographically strong random # generation
-  * `crypto.randomBytes(n)` in node.js
-  * `window.crypto.getRandomValues(ta)` in [supported browsers](https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues#Browser_Compatibility)
-* 1.1K minified and gzip'ed  (Want something smaller?  Check this [crazy shit](https://gist.github.com/982883) out! )
-* [Annotated source code](http://broofa.github.com/node-uuid/docs/uuid.html)
-* Comes with a Command Line Interface for generating uuids on the command line
-
-## Getting Started
-
-Install it in your browser:
-
-```html
-<script src="uuid.js"></script>
-```
-
-Or in node.js:
-
-```
-npm install node-uuid
-```
-
-```javascript
-var uuid = require('node-uuid');
-```
-
-Then create some ids ...
-
-```javascript
-// Generate a v1 (time-based) id
-uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
-
-// Generate a v4 (random) id
-uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'
-```
-
-## API
-
-### uuid.v1([`options` [, `buffer` [, `offset`]]])
-
-Generate and return a RFC4122 v1 (timestamp-based) UUID.
-
-* `options` - (Object) Optional uuid state to apply. Properties may include:
-
-  * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID.  See note 1.
-  * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence.  Default: An internally maintained clockseq is used.
-  * `msecs` - (Number | Date) Time in milliseconds since unix Epoch.  Default: The current time is used.
-  * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2.
-
-* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
-* `offset` - (Number) Starting index in `buffer` at which to begin writing.
-
-Returns `buffer`, if specified, otherwise the string form of the UUID
-
-Notes:
-
-1. The randomly generated node id is only guaranteed to stay constant for the lifetime of the current JS runtime. (Future versions of this module may use persistent storage mechanisms to extend this guarantee.)
-
-Example: Generate string UUID with fully-specified options
-
-```javascript
-uuid.v1({
-  node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
-  clockseq: 0x1234,
-  msecs: new Date('2011-11-01').getTime(),
-  nsecs: 5678
-});   // -> "710b962e-041c-11e1-9234-0123456789ab"
-```
-
-Example: In-place generation of two binary IDs
-
-```javascript
-// Generate two ids in an array
-var arr = new Array(32); // -> []
-uuid.v1(null, arr, 0);   // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15]
-uuid.v1(null, arr, 16);  // -> [02 a2 ce 90 14 32 11 e1 85 58 0b 48 8e 4f c1 15 02 a3 1c b0 14 32 11 e1 85 58 0b 48 8e 4f c1 15]
-
-// Optionally use uuid.unparse() to get stringify the ids
-uuid.unparse(buffer);    // -> '02a2ce90-1432-11e1-8558-0b488e4fc115'
-uuid.unparse(buffer, 16) // -> '02a31cb0-1432-11e1-8558-0b488e4fc115'
-```
-
-### uuid.v4([`options` [, `buffer` [, `offset`]]])
-
-Generate and return a RFC4122 v4 UUID.
-
-* `options` - (Object) Optional uuid state to apply. Properties may include:
-
-  * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values
-  * `rng` - (Function) Random # generator to use.  Set to one of the built-in generators - `uuid.mathRNG` (all platforms), `uuid.nodeRNG` (node.js only), `uuid.whatwgRNG` (WebKit only) - or a custom function that returns an array[16] of byte values.
-
-* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written.
-* `offset` - (Number) Starting index in `buffer` at which to begin writing.
-
-Returns `buffer`, if specified, otherwise the string form of the UUID
-
-Example: Generate string UUID with fully-specified options
-
-```javascript
-uuid.v4({
-  random: [
-    0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,
-    0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36
-  ]
-});
-// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"
-```
-
-Example: Generate two IDs in a single buffer
-
-```javascript
-var buffer = new Array(32); // (or 'new Buffer' in node.js)
-uuid.v4(null, buffer, 0);
-uuid.v4(null, buffer, 16);
-```
-
-### uuid.parse(id[, buffer[, offset]])
-### uuid.unparse(buffer[, offset])
-
-Parse and unparse UUIDs
-
-  * `id` - (String) UUID(-like) string
-  * `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. Default: A new Array or Buffer is used
-  * `offset` - (Number) Starting index in `buffer` at which to begin writing. Default: 0
-
-Example parsing and unparsing a UUID string
-
-```javascript
-var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> <Buffer 79 7f f0 43 11 eb 11 e1 80 d6 51 09 98 75 5d 10>
-var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'
-```
-
-### uuid.noConflict()
-
-(Browsers only) Set `uuid` property back to it's previous value.
-
-Returns the node-uuid object.
-
-Example:
-
-```javascript
-var myUuid = uuid.noConflict();
-myUuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
-```
-
-## Deprecated APIs
-
-Support for the following v1.2 APIs is available in v1.3, but is deprecated and will be removed in the next major version.
-
-### uuid([format [, buffer [, offset]]])
-
-uuid() has become uuid.v4(), and the `format` argument is now implicit in the `buffer` argument. (i.e. if you specify a buffer, the format is assumed to be binary).
-
-### uuid.BufferClass
-
-The class of container created when generating binary uuid data if no buffer argument is specified.  This is expected to go away, with no replacement API.
-
-## Command Line Interface
-
-To use the executable, it's probably best to install this library globally.
-
-`npm install -g node-uuid`
-
-Usage:
-
-```
-USAGE: uuid [version] [options]
-
-
-options:
-
---help                     Display this message and exit
-```
-
-`version` must be an RFC4122 version that is supported by this library, which is currently version 1 and version 4 (denoted by "v1" and "v4", respectively). `version` defaults to version 4 when not supplied.
-
-### Examples
-
-```
-> uuid
-3a91f950-dec8-4688-ba14-5b7bbfc7a563
-```
-
-```
-> uuid v1
-9d0b43e0-7696-11e3-964b-250efa37a98e
-```
-
-```
-> uuid v4
-6790ac7c-24ac-4f98-8464-42f6d98a53ae
-```
-
-## Testing
-
-In node.js
-
-```
-npm test
-```
-
-In Browser
-
-```
-open test/test.html
-```
-
-### Benchmarking
-
-Requires node.js
-
-```
-npm install uuid uuid-js
-node benchmark/benchmark.js
-```
-
-For a more complete discussion of node-uuid performance, please see the `benchmark/README.md` file, and the [benchmark wiki](https://github.com/broofa/node-uuid/wiki/Benchmark)
-
-For browser performance [checkout the JSPerf tests](http://jsperf.com/node-uuid-performance).
-
-## Release notes
-
-### 1.4.6
-
-* Properly detect node crypto and whatwg crypto
-* Workaround phantomjs/browserify bug
-* Explicit check for `window` rather implicit this-global
-* Issue warning if Math.random() is being used
-* "use strict";
-* A few jshint / stylistic updates (=== and such)
-
-### 1.4.0
-
-* Improved module context detection
-* Removed public RNG functions
-
-### 1.3.2
-
-* Improve tests and handling of v1() options (Issue #24)
-* Expose RNG option to allow for perf testing with different generators
-
-### 1.3.0
-
-* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)!
-* Support for node.js crypto API
-* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code
diff --git a/node_modules/node-uuid/benchmark/README.md b/node_modules/node-uuid/benchmark/README.md
deleted file mode 100644
index aaeb2ea..0000000
--- a/node_modules/node-uuid/benchmark/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# node-uuid Benchmarks
-
-### Results
-
-To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark
-
-### Run them yourself
-
-node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`.
-
-To prepare and run the benchmark issue;
-
-```
-npm install uuid uuid-js
-node benchmark/benchmark.js
-```
-
-You'll see an output like this one:
-
-```
-# v4
-nodeuuid.v4(): 854700 uuids/second
-nodeuuid.v4('binary'): 788643 uuids/second
-nodeuuid.v4('binary', buffer): 1336898 uuids/second
-uuid(): 479386 uuids/second
-uuid('binary'): 582072 uuids/second
-uuidjs.create(4): 312304 uuids/second
-
-# v1
-nodeuuid.v1(): 938086 uuids/second
-nodeuuid.v1('binary'): 683060 uuids/second
-nodeuuid.v1('binary', buffer): 1644736 uuids/second
-uuidjs.create(1): 190621 uuids/second
-```
-
-* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library.
-* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK.
-
-If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file:
-
-```
-for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done;
-```
-
-If you're interested in how performance varies between different node versions, you can issue the above command multiple times.
-
-You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot:
-
-```
-(cd benchmark/ && ./bench.sh)
-```
-
-This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then.
diff --git a/node_modules/node-uuid/benchmark/bench.gnu b/node_modules/node-uuid/benchmark/bench.gnu
deleted file mode 100644
index a342fbb..0000000
--- a/node_modules/node-uuid/benchmark/bench.gnu
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/opt/local/bin/gnuplot -persist
-#
-#    
-#    	G N U P L O T
-#    	Version 4.4 patchlevel 3
-#    	last modified March 2011
-#    	System: Darwin 10.8.0
-#    
-#    	Copyright (C) 1986-1993, 1998, 2004, 2007-2010
-#    	Thomas Williams, Colin Kelley and many others
-#    
-#    	gnuplot home:     http://www.gnuplot.info
-#    	faq, bugs, etc:   type "help seeking-assistance"
-#    	immediate help:   type "help"
-#    	plot window:      hit 'h'
-set terminal postscript eps noenhanced defaultplex \
- leveldefault color colortext \
- solid linewidth 1.2 butt noclip \
- palfuncparam 2000,0.003 \
- "Helvetica" 14 
-set output 'bench.eps'
-unset clip points
-set clip one
-unset clip two
-set bar 1.000000 front
-set border 31 front linetype -1 linewidth 1.000
-set xdata
-set ydata
-set zdata
-set x2data
-set y2data
-set timefmt x "%d/%m/%y,%H:%M"
-set timefmt y "%d/%m/%y,%H:%M"
-set timefmt z "%d/%m/%y,%H:%M"
-set timefmt x2 "%d/%m/%y,%H:%M"
-set timefmt y2 "%d/%m/%y,%H:%M"
-set timefmt cb "%d/%m/%y,%H:%M"
-set boxwidth
-set style fill  empty border
-set style rectangle back fc lt -3 fillstyle   solid 1.00 border lt -1
-set style circle radius graph 0.02, first 0, 0 
-set dummy x,y
-set format x "% g"
-set format y "% g"
-set format x2 "% g"
-set format y2 "% g"
-set format z "% g"
-set format cb "% g"
-set angles radians
-unset grid
-set key title ""
-set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox
-set key noinvert samplen 4 spacing 1 width 0 height 0 
-set key maxcolumns 2 maxrows 0
-unset label
-unset arrow
-set style increment default
-unset style line
-set style line 1  linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0
-unset style arrow
-set style histogram clustered gap 2 title  offset character 0, 0, 0
-unset logscale
-set offsets graph 0.05, 0.15, 0, 0
-set pointsize 1.5
-set pointintervalbox 1
-set encoding default
-unset polar
-unset parametric
-unset decimalsign
-set view 60, 30, 1, 1
-set samples 100, 100
-set isosamples 10, 10
-set surface
-unset contour
-set clabel '%8.3g'
-set mapping cartesian
-set datafile separator whitespace
-unset hidden3d
-set cntrparam order 4
-set cntrparam linear
-set cntrparam levels auto 5
-set cntrparam points 5
-set size ratio 0 1,1
-set origin 0,0
-set style data points
-set style function lines
-set xzeroaxis linetype -2 linewidth 1.000
-set yzeroaxis linetype -2 linewidth 1.000
-set zzeroaxis linetype -2 linewidth 1.000
-set x2zeroaxis linetype -2 linewidth 1.000
-set y2zeroaxis linetype -2 linewidth 1.000
-set ticslevel 0.5
-set mxtics default
-set mytics default
-set mztics default
-set mx2tics default
-set my2tics default
-set mcbtics default
-set xtics border in scale 1,0.5 mirror norotate  offset character 0, 0, 0
-set xtics  norangelimit
-set xtics   ()
-set ytics border in scale 1,0.5 mirror norotate  offset character 0, 0, 0
-set ytics autofreq  norangelimit
-set ztics border in scale 1,0.5 nomirror norotate  offset character 0, 0, 0
-set ztics autofreq  norangelimit
-set nox2tics
-set noy2tics
-set cbtics border in scale 1,0.5 mirror norotate  offset character 0, 0, 0
-set cbtics autofreq  norangelimit
-set title "" 
-set title  offset character 0, 0, 0 font "" norotate
-set timestamp bottom 
-set timestamp "" 
-set timestamp  offset character 0, 0, 0 font "" norotate
-set rrange [ * : * ] noreverse nowriteback  # (currently [8.98847e+307:-8.98847e+307] )
-set autoscale rfixmin
-set autoscale rfixmax
-set trange [ * : * ] noreverse nowriteback  # (currently [-5.00000:5.00000] )
-set autoscale tfixmin
-set autoscale tfixmax
-set urange [ * : * ] noreverse nowriteback  # (currently [-10.0000:10.0000] )
-set autoscale ufixmin
-set autoscale ufixmax
-set vrange [ * : * ] noreverse nowriteback  # (currently [-10.0000:10.0000] )
-set autoscale vfixmin
-set autoscale vfixmax
-set xlabel "" 
-set xlabel  offset character 0, 0, 0 font "" textcolor lt -1 norotate
-set x2label "" 
-set x2label  offset character 0, 0, 0 font "" textcolor lt -1 norotate
-set xrange [ * : * ] noreverse nowriteback  # (currently [-0.150000:3.15000] )
-set autoscale xfixmin
-set autoscale xfixmax
-set x2range [ * : * ] noreverse nowriteback  # (currently [0.00000:3.00000] )
-set autoscale x2fixmin
-set autoscale x2fixmax
-set ylabel "" 
-set ylabel  offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set y2label "" 
-set y2label  offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback  # (currently [:] )
-set autoscale yfixmin
-set autoscale yfixmax
-set y2range [ * : * ] noreverse nowriteback  # (currently [0.00000:1.90000e+06] )
-set autoscale y2fixmin
-set autoscale y2fixmax
-set zlabel "" 
-set zlabel  offset character 0, 0, 0 font "" textcolor lt -1 norotate
-set zrange [ * : * ] noreverse nowriteback  # (currently [-10.0000:10.0000] )
-set autoscale zfixmin
-set autoscale zfixmax
-set cblabel "" 
-set cblabel  offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set cbrange [ * : * ] noreverse nowriteback  # (currently [8.98847e+307:-8.98847e+307] )
-set autoscale cbfixmin
-set autoscale cbfixmax
-set zero 1e-08
-set lmargin  -1
-set bmargin  -1
-set rmargin  -1
-set tmargin  -1
-set pm3d explicit at s
-set pm3d scansautomatic
-set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean
-set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB 
-set palette rgbformulae 7, 5, 15
-set colorbox default
-set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault
-set loadpath 
-set fontpath 
-set fit noerrorvariables
-GNUTERM = "aqua"
-plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2
-#    EOF
diff --git a/node_modules/node-uuid/benchmark/bench.sh b/node_modules/node-uuid/benchmark/bench.sh
deleted file mode 100755
index d870a0c..0000000
--- a/node_modules/node-uuid/benchmark/bench.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/bash
-
-# for a given node version run:
-# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done;
-
-PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte')
-FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es)
-INDICES=(2 3 2 3 2 2 2 2 2)
-VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " )
-TMPJOIN="tmp_join"
-OUTPUT="bench_results.txt"
-
-for I in ${!FILES[*]}; do
-  F=${FILES[$I]}
-  P=${PATTERNS[$I]}
-  INDEX=${INDICES[$I]}
-  echo "version $F" > $F
-  for V in $VERSIONS; do
-    (VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F
-  done
-  if [ $I == 0 ]; then
-    cat $F > $TMPJOIN
-  else
-    join $TMPJOIN $F > $OUTPUT
-    cp $OUTPUT $TMPJOIN
-  fi
-  rm $F
-done
-
-rm $TMPJOIN
-
-gnuplot bench.gnu
-convert -density 200 -resize 800x560 -flatten bench.eps bench.png
-rm bench.eps
diff --git a/node_modules/node-uuid/benchmark/benchmark-native.c b/node_modules/node-uuid/benchmark/benchmark-native.c
deleted file mode 100644
index dbfc75f..0000000
--- a/node_modules/node-uuid/benchmark/benchmark-native.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
-Test performance of native C UUID generation
-
-To Compile: cc -luuid benchmark-native.c -o benchmark-native
-*/
-
-#include <stdio.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <uuid/uuid.h>
-
-int main() {
-  uuid_t myid;
-  char buf[36+1];
-  int i;
-  struct timeval t;
-  double start, finish;
-
-  gettimeofday(&t, NULL);
-  start = t.tv_sec + t.tv_usec/1e6;
-
-  int n = 2e5;
-  for (i = 0; i < n; i++) {
-    uuid_generate(myid);
-    uuid_unparse(myid, buf);
-  }
-
-  gettimeofday(&t, NULL);
-  finish = t.tv_sec + t.tv_usec/1e6;
-  double dur = finish - start;
-
-  printf("%d uuids/sec", (int)(n/dur));
-  return 0;
-}
diff --git a/node_modules/node-uuid/benchmark/benchmark.js b/node_modules/node-uuid/benchmark/benchmark.js
deleted file mode 100644
index 40e6efb..0000000
--- a/node_modules/node-uuid/benchmark/benchmark.js
+++ /dev/null
@@ -1,84 +0,0 @@
-try {
-  var nodeuuid = require('../uuid');
-} catch (e) {
-  console.error('node-uuid require failed - skipping tests');
-}
-
-try {
-  var uuid = require('uuid');
-} catch (e) {
-  console.error('uuid require failed - skipping tests');
-}
-
-try {
-  var uuidjs = require('uuid-js');
-} catch (e) {
-  console.error('uuid-js require failed - skipping tests');
-}
-
-var N = 5e5;
-
-function rate(msg, t) {
-  console.log(msg + ': ' +
-    (N / (Date.now() - t) * 1e3 | 0) +
-    ' uuids/second');
-}
-
-console.log('# v4');
-
-// node-uuid - string form
-if (nodeuuid) {
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4();
-  rate('nodeuuid.v4() - using node.js crypto RNG', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG});
-  rate('nodeuuid.v4() - using Math.random() RNG', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary');
-  rate('nodeuuid.v4(\'binary\')', t);
-
-  var buffer = new nodeuuid.BufferClass(16);
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer);
-  rate('nodeuuid.v4(\'binary\', buffer)', t);
-}
-
-// libuuid - string form
-if (uuid) {
-  for (var i = 0, t = Date.now(); i < N; i++) uuid();
-  rate('uuid()', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) uuid('binary');
-  rate('uuid(\'binary\')', t);
-}
-
-// uuid-js - string form
-if (uuidjs) {
-  for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4);
-  rate('uuidjs.create(4)', t);
-}
-
-// 140byte.es
-for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)});
-rate('140byte.es_v4', t);
-
-console.log('');
-console.log('# v1');
-
-// node-uuid - v1 string form
-if (nodeuuid) {
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1();
-  rate('nodeuuid.v1()', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary');
-  rate('nodeuuid.v1(\'binary\')', t);
-
-  var buffer = new nodeuuid.BufferClass(16);
-  for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer);
-  rate('nodeuuid.v1(\'binary\', buffer)', t);
-}
-
-// uuid-js - v1 string form
-if (uuidjs) {
-  for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1);
-  rate('uuidjs.create(1)', t);
-}
diff --git a/node_modules/node-uuid/bin/uuid b/node_modules/node-uuid/bin/uuid
deleted file mode 100755
index f732e99..0000000
--- a/node_modules/node-uuid/bin/uuid
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/env node
-
-var path = require('path');
-var uuid = require(path.join(__dirname, '..'));
-
-var arg = process.argv[2];
-
-if ('--help' === arg) {
-  console.log('\n  USAGE: uuid [version] [options]\n\n');
-  console.log('  options:\n');
-  console.log('  --help                     Display this message and exit\n');
-  process.exit(0);
-}
-
-if (null == arg) {
-  console.log(uuid());
-  process.exit(0);
-}
-
-if ('v1' !== arg && 'v4' !== arg) {
-  console.error('Version must be RFC4122 version 1 or version 4, denoted as "v1" or "v4"');
-  process.exit(1);
-}
-
-console.log(uuid[arg]());
-process.exit(0);
diff --git a/node_modules/node-uuid/bower.json b/node_modules/node-uuid/bower.json
deleted file mode 100644
index c0925e1..0000000
--- a/node_modules/node-uuid/bower.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-  "name": "node-uuid",
-  "version": "1.4.7",
-  "homepage": "https://github.com/broofa/node-uuid",
-  "authors": [
-    "Robert Kieffer <robert@broofa.com>"
-  ],
-  "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.",
-  "main": "uuid.js",
-  "keywords": [
-    "uuid",
-    "gid",
-    "rfc4122"
-  ],
-  "license": "MIT",
-  "ignore": [
-    "**/.*",
-    "node_modules",
-    "bower_components",
-    "test",
-    "tests"
-  ]
-}
diff --git a/node_modules/node-uuid/component.json b/node_modules/node-uuid/component.json
deleted file mode 100644
index 3ff4633..0000000
--- a/node_modules/node-uuid/component.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
-  "name": "node-uuid",
-  "repo": "broofa/node-uuid",
-  "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.",
-  "version": "1.4.7",
-  "author": "Robert Kieffer <robert@broofa.com>",
-  "contributors": [
-    {
-      "name": "Christoph Tavan <dev@tavan.de>",
-      "github": "https://github.com/ctavan"
-    }
-  ],
-  "keywords": [
-    "uuid",
-    "guid",
-    "rfc4122"
-  ],
-  "dependencies": {},
-  "development": {},
-  "main": "uuid.js",
-  "scripts": [
-    "uuid.js"
-  ],
-  "license": "MIT"
-}
\ No newline at end of file
diff --git a/node_modules/node-uuid/package.json b/node_modules/node-uuid/package.json
deleted file mode 100644
index 6d448b7..0000000
--- a/node_modules/node-uuid/package.json
+++ /dev/null
@@ -1,114 +0,0 @@
-{
-  "_args": [
-    [
-      {
-        "raw": "node-uuid@1.4.7",
-        "scope": null,
-        "escapedName": "node-uuid",
-        "name": "node-uuid",
-        "rawSpec": "1.4.7",
-        "spec": "1.4.7",
-        "type": "version"
-      },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xcode"
-    ]
-  ],
-  "_from": "node-uuid@1.4.7",
-  "_id": "node-uuid@1.4.7",
-  "_inCache": true,
-  "_location": "/node-uuid",
-  "_nodeVersion": "5.0.0",
-  "_npmUser": {
-    "name": "coolaj86",
-    "email": "coolaj86@gmail.com"
-  },
-  "_npmVersion": "3.3.6",
-  "_phantomChildren": {},
-  "_requested": {
-    "raw": "node-uuid@1.4.7",
-    "scope": null,
-    "escapedName": "node-uuid",
-    "name": "node-uuid",
-    "rawSpec": "1.4.7",
-    "spec": "1.4.7",
-    "type": "version"
-  },
-  "_requiredBy": [
-    "/xcode"
-  ],
-  "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz",
-  "_shasum": "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f",
-  "_shrinkwrap": null,
-  "_spec": "node-uuid@1.4.7",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xcode",
-  "author": {
-    "name": "Robert Kieffer",
-    "email": "robert@broofa.com"
-  },
-  "bin": {
-    "uuid": "./bin/uuid"
-  },
-  "bugs": {
-    "url": "https://github.com/broofa/node-uuid/issues"
-  },
-  "contributors": [
-    {
-      "name": "AJ ONeal",
-      "email": "coolaj86@gmail.com"
-    },
-    {
-      "name": "Christoph Tavan",
-      "email": "dev@tavan.de"
-    }
-  ],
-  "dependencies": {},
-  "deprecated": "use uuid module instead",
-  "description": "Rigorous implementation of RFC4122 (v1 and v4) UUIDs.",
-  "devDependencies": {
-    "nyc": "^2.2.0"
-  },
-  "directories": {},
-  "dist": {
-    "shasum": "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f",
-    "tarball": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz"
-  },
-  "gitHead": "309512573ec1c60143c257157479a20f7f1f51cd",
-  "homepage": "https://github.com/broofa/node-uuid",
-  "installable": true,
-  "keywords": [
-    "guid",
-    "rfc4122",
-    "uuid"
-  ],
-  "lib": ".",
-  "licenses": [
-    {
-      "type": "MIT",
-      "url": "https://raw.github.com/broofa/node-uuid/master/LICENSE.md"
-    }
-  ],
-  "main": "./uuid.js",
-  "maintainers": [
-    {
-      "name": "broofa",
-      "email": "robert@broofa.com"
-    },
-    {
-      "name": "coolaj86",
-      "email": "coolaj86@gmail.com"
-    }
-  ],
-  "name": "node-uuid",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/broofa/node-uuid.git"
-  },
-  "scripts": {
-    "coverage": "nyc npm test && nyc report",
-    "test": "node test/test.js"
-  },
-  "url": "http://github.com/broofa/node-uuid",
-  "version": "1.4.7"
-}
diff --git a/node_modules/node-uuid/test/compare_v1.js b/node_modules/node-uuid/test/compare_v1.js
deleted file mode 100644
index 05af822..0000000
--- a/node_modules/node-uuid/test/compare_v1.js
+++ /dev/null
@@ -1,63 +0,0 @@
-var assert = require('assert'),
-    nodeuuid = require('../uuid'),
-    uuidjs = require('uuid-js'),
-    libuuid = require('uuid').generate,
-    util = require('util'),
-    exec = require('child_process').exec,
-    os = require('os');
-
-// On Mac Os X / macports there's only the ossp-uuid package that provides uuid
-// On Linux there's uuid-runtime which provides uuidgen
-var uuidCmd = os.type() === 'Darwin' ? 'uuid -1' : 'uuidgen -t';
-
-function compare(ids) {
-  console.log(ids);
-  for (var i = 0; i < ids.length; i++) {
-    var id = ids[i].split('-');
-    id = [id[2], id[1], id[0]].join('');
-    ids[i] = id;
-  }
-  var sorted = ([].concat(ids)).sort();
-
-  if (sorted.toString() !== ids.toString()) {
-    console.log('Warning: sorted !== ids');
-  } else {
-    console.log('everything in order!');
-  }
-}
-
-// Test time order of v1 uuids
-var ids = [];
-while (ids.length < 10e3) ids.push(nodeuuid.v1());
-
-var max = 10;
-console.log('node-uuid:');
-ids = [];
-for (var i = 0; i < max; i++) ids.push(nodeuuid.v1());
-compare(ids);
-
-console.log('');
-console.log('uuidjs:');
-ids = [];
-for (var i = 0; i < max; i++) ids.push(uuidjs.create(1).toString());
-compare(ids);
-
-console.log('');
-console.log('libuuid:');
-ids = [];
-var count = 0;
-var last = function() {
-  compare(ids);
-}
-var cb = function(err, stdout, stderr) {
-  ids.push(stdout.substring(0, stdout.length-1));
-  count++;
-  if (count < max) {
-    return next();
-  }
-  last();
-};
-var next = function() {
-  exec(uuidCmd, cb);
-};
-next();
diff --git a/node_modules/node-uuid/test/test.html b/node_modules/node-uuid/test/test.html
deleted file mode 100644
index d80326e..0000000
--- a/node_modules/node-uuid/test/test.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<html>
-  <head>
-    <style>
-      div {
-        font-family: monospace;
-        font-size: 8pt;
-      }
-      div.log {color: #444;}
-      div.warn {color: #550;}
-      div.error {color: #800; font-weight: bold;}
-    </style>
-    <script src="../uuid.js"></script>
-  </head>
-  <body>
-    <script src="./test.js"></script>
-  </body>
-</html>
diff --git a/node_modules/node-uuid/test/test.js b/node_modules/node-uuid/test/test.js
deleted file mode 100644
index 5f1113d..0000000
--- a/node_modules/node-uuid/test/test.js
+++ /dev/null
@@ -1,231 +0,0 @@
-if (!this.uuid) {
-  // node.js
-  uuid = require('../uuid');
-  if (!/_rb/.test(uuid._rng.toString())) {
-    throw new Error("should use crypto for node.js");
-  }
-}
-
-//
-// x-platform log/assert shims
-//
-
-function _log(msg, type) {
-  type = type || 'log';
-
-  if (typeof(document) != 'undefined') {
-    document.write('<div class="' + type + '">' + msg.replace(/\n/g, '<br />') + '</div>');
-  }
-  if (typeof(console) != 'undefined') {
-    var color = {
-      log: '\033[39m',
-      warn: '\033[33m',
-      error: '\033[31m'
-    };
-    console[type](color[type] + msg + color.log);
-  }
-}
-
-function log(msg) {_log(msg, 'log');}
-function warn(msg) {_log(msg, 'warn');}
-function error(msg) {_log(msg, 'error');}
-
-function assert(res, msg) {
-  if (!res) {
-    error('FAIL: ' + msg);
-  } else {
-    log('Pass: ' + msg);
-  }
-}
-
-//
-// Unit tests
-//
-
-// Verify ordering of v1 ids created with explicit times
-var TIME = 1321644961388; // 2011-11-18 11:36:01.388-08:00
-
-function compare(name, ids) {
-  ids = ids.map(function(id) {
-    return id.split('-').reverse().join('-');
-  }).sort();
-  var sorted = ([].concat(ids)).sort();
-
-  assert(sorted.toString() == ids.toString(), name + ' have expected order');
-}
-
-// Verify ordering of v1 ids created using default behavior
-compare('uuids with current time', [
-  uuid.v1(),
-  uuid.v1(),
-  uuid.v1(),
-  uuid.v1(),
-  uuid.v1()
-]);
-
-// Verify ordering of v1 ids created with explicit times
-compare('uuids with time option', [
-  uuid.v1({msecs: TIME - 10*3600*1000}),
-  uuid.v1({msecs: TIME - 1}),
-  uuid.v1({msecs: TIME}),
-  uuid.v1({msecs: TIME + 1}),
-  uuid.v1({msecs: TIME + 28*24*3600*1000})
-]);
-
-assert(
-  uuid.v1({msecs: TIME}) != uuid.v1({msecs: TIME}),
-  'IDs created at same msec are different'
-);
-
-// Verify throw if too many ids created
-var thrown = false;
-try {
-  uuid.v1({msecs: TIME, nsecs: 10000});
-} catch (e) {
-  thrown = true;
-}
-assert(thrown, 'Exception thrown when > 10K ids created in 1 ms');
-
-// Verify clock regression bumps clockseq
-var uidt = uuid.v1({msecs: TIME});
-var uidtb = uuid.v1({msecs: TIME - 1});
-assert(
-  parseInt(uidtb.split('-')[3], 16) - parseInt(uidt.split('-')[3], 16) === 1,
-  'Clock regression by msec increments the clockseq'
-);
-
-// Verify clock regression bumps clockseq
-var uidtn = uuid.v1({msecs: TIME, nsecs: 10});
-var uidtnb = uuid.v1({msecs: TIME, nsecs: 9});
-assert(
-  parseInt(uidtnb.split('-')[3], 16) - parseInt(uidtn.split('-')[3], 16) === 1,
-  'Clock regression by nsec increments the clockseq'
-);
-
-// Verify explicit options produce expected id
-var id = uuid.v1({
-  msecs: 1321651533573,
-  nsecs: 5432,
-  clockseq: 0x385c,
-  node: [ 0x61, 0xcd, 0x3c, 0xbb, 0x32, 0x10 ]
-});
-assert(id == 'd9428888-122b-11e1-b85c-61cd3cbb3210', 'Explicit options produce expected id');
-
-// Verify adjacent ids across a msec boundary are 1 time unit apart
-var u0 = uuid.v1({msecs: TIME, nsecs: 9999});
-var u1 = uuid.v1({msecs: TIME + 1, nsecs: 0});
-
-var before = u0.split('-')[0], after = u1.split('-')[0];
-var dt = parseInt(after, 16) - parseInt(before, 16);
-assert(dt === 1, 'Ids spanning 1ms boundary are 100ns apart');
-
-//
-// Test parse/unparse
-//
-
-id = '00112233445566778899aabbccddeeff';
-assert(uuid.unparse(uuid.parse(id.substr(0,10))) ==
-  '00112233-4400-0000-0000-000000000000', 'Short parse');
-assert(uuid.unparse(uuid.parse('(this is the uuid -> ' + id + id)) ==
-  '00112233-4455-6677-8899-aabbccddeeff', 'Dirty parse');
-
-//
-// Perf tests
-//
-
-var generators = {
-  v1: uuid.v1,
-  v4: uuid.v4
-};
-
-var UUID_FORMAT = {
-  v1: /[0-9a-f]{8}-[0-9a-f]{4}-1[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i,
-  v4: /[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/i
-};
-
-var N = 1e4;
-
-// Get %'age an actual value differs from the ideal value
-function divergence(actual, ideal) {
-  return Math.round(100*100*(actual - ideal)/ideal)/100;
-}
-
-function rate(msg, t) {
-  log(msg + ': ' + (N / (Date.now() - t) * 1e3 | 0) + ' uuids\/second');
-}
-
-for (var version in generators) {
-  var counts = {}, max = 0;
-  var generator = generators[version];
-  var format = UUID_FORMAT[version];
-
-  log('\nSanity check ' + N + ' ' + version + ' uuids');
-  for (var i = 0, ok = 0; i < N; i++) {
-    id = generator();
-    if (!format.test(id)) {
-      throw Error(id + ' is not a valid UUID string');
-    }
-
-    if (id != uuid.unparse(uuid.parse(id))) {
-      assert(fail, id + ' is not a valid id');
-    }
-
-    // Count digits for our randomness check
-    if (version == 'v4') {
-      var digits = id.replace(/-/g, '').split('');
-      for (var j = digits.length-1; j >= 0; j--) {
-        var c = digits[j];
-        max = Math.max(max, counts[c] = (counts[c] || 0) + 1);
-      }
-    }
-  }
-
-  // Check randomness for v4 UUIDs
-  if (version == 'v4') {
-    // Limit that we get worried about randomness. (Purely empirical choice, this!)
-    var limit = 2*100*Math.sqrt(1/N);
-
-    log('\nChecking v4 randomness.  Distribution of Hex Digits (% deviation from ideal)');
-
-    for (var i = 0; i < 16; i++) {
-      var c = i.toString(16);
-      var bar = '', n = counts[c], p = Math.round(n/max*100|0);
-
-      // 1-3,5-8, and D-F: 1:16 odds over 30 digits
-      var ideal = N*30/16;
-      if (i == 4) {
-        // 4: 1:1 odds on 1 digit, plus 1:16 odds on 30 digits
-        ideal = N*(1 + 30/16);
-      } else if (i >= 8 && i <= 11) {
-        // 8-B: 1:4 odds on 1 digit, plus 1:16 odds on 30 digits
-        ideal = N*(1/4 + 30/16);
-      } else {
-        // Otherwise: 1:16 odds on 30 digits
-        ideal = N*30/16;
-      }
-      var d = divergence(n, ideal);
-
-      // Draw bar using UTF squares (just for grins)
-      var s = n/max*50 | 0;
-      while (s--) bar += '=';
-
-      assert(Math.abs(d) < limit, c + ' |' + bar + '| ' + counts[c] + ' (' + d + '% < ' + limit + '%)');
-    }
-  }
-}
-
-// Perf tests
-for (var version in generators) {
-  log('\nPerformance testing ' + version + ' UUIDs');
-  var generator = generators[version];
-  var buf = new uuid.BufferClass(16);
-
-  for (var i = 0, t = Date.now(); i < N; i++) generator();
-  rate('uuid.' + version + '()', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) generator('binary');
-  rate('uuid.' + version + '(\'binary\')', t);
-
-  for (var i = 0, t = Date.now(); i < N; i++) generator('binary', buf);
-  rate('uuid.' + version + '(\'binary\', buffer)', t);
-}
diff --git a/node_modules/node-uuid/uuid.js b/node_modules/node-uuid/uuid.js
deleted file mode 100644
index 89c5b8f..0000000
--- a/node_modules/node-uuid/uuid.js
+++ /dev/null
@@ -1,272 +0,0 @@
-//     uuid.js
-//
-//     Copyright (c) 2010-2012 Robert Kieffer
-//     MIT License - http://opensource.org/licenses/mit-license.php
-
-/*global window, require, define */
-(function(_window) {
-  'use strict';
-
-  // Unique ID creation requires a high quality random # generator.  We feature
-  // detect to determine the best RNG source, normalizing to a function that
-  // returns 128-bits of randomness, since that's what's usually required
-  var _rng, _mathRNG, _nodeRNG, _whatwgRNG, _previousRoot;
-
-  function setupBrowser() {
-    // Allow for MSIE11 msCrypto
-    var _crypto = _window.crypto || _window.msCrypto;
-
-    if (!_rng && _crypto && _crypto.getRandomValues) {
-      // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto
-      //
-      // Moderately fast, high quality
-      try {
-        var _rnds8 = new Uint8Array(16);
-        _whatwgRNG = _rng = function whatwgRNG() {
-          _crypto.getRandomValues(_rnds8);
-          return _rnds8;
-        };
-        _rng();
-      } catch(e) {}
-    }
-
-    if (!_rng) {
-      // Math.random()-based (RNG)
-      //
-      // If all else fails, use Math.random().  It's fast, but is of unspecified
-      // quality.
-      var  _rnds = new Array(16);
-      _mathRNG = _rng = function() {
-        for (var i = 0, r; i < 16; i++) {
-          if ((i & 0x03) === 0) { r = Math.random() * 0x100000000; }
-          _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;
-        }
-
-        return _rnds;
-      };
-      if ('undefined' !== typeof console && console.warn) {
-        console.warn("[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()");
-      }
-    }
-  }
-
-  function setupNode() {
-    // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html
-    //
-    // Moderately fast, high quality
-    if ('function' === typeof require) {
-      try {
-        var _rb = require('crypto').randomBytes;
-        _nodeRNG = _rng = _rb && function() {return _rb(16);};
-        _rng();
-      } catch(e) {}
-    }
-  }
-
-  if (_window) {
-    setupBrowser();
-  } else {
-    setupNode();
-  }
-
-  // Buffer class to use
-  var BufferClass = ('function' === typeof Buffer) ? Buffer : Array;
-
-  // Maps for number <-> hex string conversion
-  var _byteToHex = [];
-  var _hexToByte = {};
-  for (var i = 0; i < 256; i++) {
-    _byteToHex[i] = (i + 0x100).toString(16).substr(1);
-    _hexToByte[_byteToHex[i]] = i;
-  }
-
-  // **`parse()` - Parse a UUID into it's component bytes**
-  function parse(s, buf, offset) {
-    var i = (buf && offset) || 0, ii = 0;
-
-    buf = buf || [];
-    s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {
-      if (ii < 16) { // Don't overflow!
-        buf[i + ii++] = _hexToByte[oct];
-      }
-    });
-
-    // Zero out remaining bytes if string was short
-    while (ii < 16) {
-      buf[i + ii++] = 0;
-    }
-
-    return buf;
-  }
-
-  // **`unparse()` - Convert UUID byte array (ala parse()) into a string**
-  function unparse(buf, offset) {
-    var i = offset || 0, bth = _byteToHex;
-    return  bth[buf[i++]] + bth[buf[i++]] +
-            bth[buf[i++]] + bth[buf[i++]] + '-' +
-            bth[buf[i++]] + bth[buf[i++]] + '-' +
-            bth[buf[i++]] + bth[buf[i++]] + '-' +
-            bth[buf[i++]] + bth[buf[i++]] + '-' +
-            bth[buf[i++]] + bth[buf[i++]] +
-            bth[buf[i++]] + bth[buf[i++]] +
-            bth[buf[i++]] + bth[buf[i++]];
-  }
-
-  // **`v1()` - Generate time-based UUID**
-  //
-  // Inspired by https://github.com/LiosK/UUID.js
-  // and http://docs.python.org/library/uuid.html
-
-  // random #'s we need to init node and clockseq
-  var _seedBytes = _rng();
-
-  // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
-  var _nodeId = [
-    _seedBytes[0] | 0x01,
-    _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]
-  ];
-
-  // Per 4.2.2, randomize (14 bit) clockseq
-  var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;
-
-  // Previous uuid creation time
-  var _lastMSecs = 0, _lastNSecs = 0;
-
-  // See https://github.com/broofa/node-uuid for API details
-  function v1(options, buf, offset) {
-    var i = buf && offset || 0;
-    var b = buf || [];
-
-    options = options || {};
-
-    var clockseq = (options.clockseq != null) ? options.clockseq : _clockseq;
-
-    // UUID timestamps are 100 nano-second units since the Gregorian epoch,
-    // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
-    // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
-    // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
-    var msecs = (options.msecs != null) ? options.msecs : new Date().getTime();
-
-    // Per 4.2.1.2, use count of uuid's generated during the current clock
-    // cycle to simulate higher resolution clock
-    var nsecs = (options.nsecs != null) ? options.nsecs : _lastNSecs + 1;
-
-    // Time since last uuid creation (in msecs)
-    var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;
-
-    // Per 4.2.1.2, Bump clockseq on clock regression
-    if (dt < 0 && options.clockseq == null) {
-      clockseq = clockseq + 1 & 0x3fff;
-    }
-
-    // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
-    // time interval
-    if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {
-      nsecs = 0;
-    }
-
-    // Per 4.2.1.2 Throw error if too many uuids are requested
-    if (nsecs >= 10000) {
-      throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
-    }
-
-    _lastMSecs = msecs;
-    _lastNSecs = nsecs;
-    _clockseq = clockseq;
-
-    // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
-    msecs += 12219292800000;
-
-    // `time_low`
-    var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
-    b[i++] = tl >>> 24 & 0xff;
-    b[i++] = tl >>> 16 & 0xff;
-    b[i++] = tl >>> 8 & 0xff;
-    b[i++] = tl & 0xff;
-
-    // `time_mid`
-    var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
-    b[i++] = tmh >>> 8 & 0xff;
-    b[i++] = tmh & 0xff;
-
-    // `time_high_and_version`
-    b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
-    b[i++] = tmh >>> 16 & 0xff;
-
-    // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
-    b[i++] = clockseq >>> 8 | 0x80;
-
-    // `clock_seq_low`
-    b[i++] = clockseq & 0xff;
-
-    // `node`
-    var node = options.node || _nodeId;
-    for (var n = 0; n < 6; n++) {
-      b[i + n] = node[n];
-    }
-
-    return buf ? buf : unparse(b);
-  }
-
-  // **`v4()` - Generate random UUID**
-
-  // See https://github.com/broofa/node-uuid for API details
-  function v4(options, buf, offset) {
-    // Deprecated - 'format' argument, as supported in v1.2
-    var i = buf && offset || 0;
-
-    if (typeof(options) === 'string') {
-      buf = (options === 'binary') ? new BufferClass(16) : null;
-      options = null;
-    }
-    options = options || {};
-
-    var rnds = options.random || (options.rng || _rng)();
-
-    // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
-    rnds[6] = (rnds[6] & 0x0f) | 0x40;
-    rnds[8] = (rnds[8] & 0x3f) | 0x80;
-
-    // Copy bytes to buffer, if provided
-    if (buf) {
-      for (var ii = 0; ii < 16; ii++) {
-        buf[i + ii] = rnds[ii];
-      }
-    }
-
-    return buf || unparse(rnds);
-  }
-
-  // Export public API
-  var uuid = v4;
-  uuid.v1 = v1;
-  uuid.v4 = v4;
-  uuid.parse = parse;
-  uuid.unparse = unparse;
-  uuid.BufferClass = BufferClass;
-  uuid._rng = _rng;
-  uuid._mathRNG = _mathRNG;
-  uuid._nodeRNG = _nodeRNG;
-  uuid._whatwgRNG = _whatwgRNG;
-
-  if (('undefined' !== typeof module) && module.exports) {
-    // Publish as node.js module
-    module.exports = uuid;
-  } else if (typeof define === 'function' && define.amd) {
-    // Publish as AMD module
-    define(function() {return uuid;});
-
-
-  } else {
-    // Publish as global (in browsers)
-    _previousRoot = _window.uuid;
-
-    // **`noConflict()` - (browser only) to reset global 'uuid' var**
-    uuid.noConflict = function() {
-      _window.uuid = _previousRoot;
-      return uuid;
-    };
-
-    _window.uuid = uuid;
-  }
-})('undefined' !== typeof window ? window : null);
diff --git a/node_modules/nopt/package.json b/node_modules/nopt/package.json
index 727d271..4963745 100644
--- a/node_modules/nopt/package.json
+++ b/node_modules/nopt/package.json
@@ -10,7 +10,7 @@
         "spec": ">=3.0.6 <4.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios"
+      "/Users/steveng/repo/cordova/cordova-ios"
     ]
   ],
   "_from": "nopt@>=3.0.6 <4.0.0",
@@ -36,11 +36,11 @@
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+  "_resolved": "http://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
   "_shasum": "c6465dbf08abcd4db359317f79ac68a646b28ff9",
   "_shrinkwrap": null,
   "_spec": "nopt@^3.0.6",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -84,7 +84,8 @@
   ],
   "name": "nopt",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "If you want to write an option parser, and have it be good, there are\ntwo ways to do it.  The Right Way, and the Wrong Way.\n\nThe Wrong Way is to sit down and write an option parser.  We've all done\nthat.\n\nThe Right Way is to write some complex configurable program with so many\noptions that you hit the limit of your frustration just trying to\nmanage them all, and defer it with duct-tape solutions until you see\nexactly to the core of the problem, and finally snap and  [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/npm/nopt.git"
diff --git a/node_modules/once/package.json b/node_modules/once/package.json
index abcdad4..53b53ca 100644
--- a/node_modules/once/package.json
+++ b/node_modules/once/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.3.0 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/glob"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/glob"
     ]
   ],
   "_from": "once@>=1.3.0 <2.0.0",
@@ -41,11 +41,11 @@
     "/glob",
     "/inflight"
   ],
-  "_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+  "_resolved": "http://registry.npmjs.org/once/-/once-1.4.0.tgz",
   "_shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1",
   "_shrinkwrap": null,
   "_spec": "once@^1.3.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/glob",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/glob",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -89,7 +89,8 @@
   ],
   "name": "once",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# once\n\nOnly call a function once.\n\n## usage\n\n```javascript\nvar once = require('once')\n\nfunction load (file, cb) {\n  cb = once(cb)\n  loader.load('file')\n  loader.once('load', cb)\n  loader.once('error', cb)\n}\n```\n\nOr add to the Function.prototype in a responsible way:\n\n```javascript\n// only has to be done once\nrequire('once').proto()\n\nfunction load (file, cb) {\n  cb = cb.once()\n  loader.load('file')\n  loader.once('load', cb)\n  loader.once('error', c [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/once.git"
diff --git a/node_modules/os-homedir/package.json b/node_modules/os-homedir/package.json
index b3cdd96..bf308c5 100644
--- a/node_modules/os-homedir/package.json
+++ b/node_modules/os-homedir/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.0.0 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/osenv"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/osenv"
     ]
   ],
   "_from": "os-homedir@>=1.0.0 <2.0.0",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/osenv"
   ],
-  "_resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+  "_resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
   "_shasum": "ffbc4988336e0e833de0c168c7ef152121aa7fb3",
   "_shrinkwrap": null,
   "_spec": "os-homedir@^1.0.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/osenv",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/osenv",
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
@@ -97,7 +97,8 @@
   ],
   "name": "os-homedir",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# os-homedir [![Build Status](https://travis-ci.org/sindresorhus/os-homedir.svg?branch=master)](https://travis-ci.org/sindresorhus/os-homedir)\n\n> Node.js 4 [`os.homedir()`](https://nodejs.org/api/os.html#os_os_homedir) [ponyfill](https://ponyfill.com)\n\n\n## Install\n\n```\n$ npm install --save os-homedir\n```\n\n\n## Usage\n\n```js\nconst osHomedir = require('os-homedir');\n\nconsole.log(osHomedir());\n//=> '/Users/sindresorhus'\n```\n\n\n## Related\n\n- [user-home](http [...]
+  "readmeFilename": "readme.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/sindresorhus/os-homedir.git"
diff --git a/node_modules/os-tmpdir/package.json b/node_modules/os-tmpdir/package.json
index b6dbd22..c6b65fb 100644
--- a/node_modules/os-tmpdir/package.json
+++ b/node_modules/os-tmpdir/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.0.0 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/osenv"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/osenv"
     ]
   ],
   "_from": "os-tmpdir@>=1.0.0 <2.0.0",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/osenv"
   ],
-  "_resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+  "_resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
   "_shasum": "bbe67406c79aa85c5cfec766fe5734555dfa1274",
   "_shrinkwrap": null,
   "_spec": "os-tmpdir@^1.0.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/osenv",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/osenv",
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
@@ -97,7 +97,8 @@
   ],
   "name": "os-tmpdir",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# os-tmpdir [![Build Status](https://travis-ci.org/sindresorhus/os-tmpdir.svg?branch=master)](https://travis-ci.org/sindresorhus/os-tmpdir)\n\n> Node.js [`os.tmpdir()`](https://nodejs.org/api/os.html#os_os_tmpdir) [ponyfill](https://ponyfill.com)\n\nUse this instead of `require('os').tmpdir()` to get a consistent behavior on different Node.js versions (even 0.8).\n\n\n## Install\n\n```\n$ npm install --save os-tmpdir\n```\n\n\n## Usage\n\n```js\nconst osTmpdir = require('os- [...]
+  "readmeFilename": "readme.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/sindresorhus/os-tmpdir.git"
diff --git a/node_modules/osenv/package.json b/node_modules/osenv/package.json
index 74f8f88..e4b4ad3 100644
--- a/node_modules/osenv/package.json
+++ b/node_modules/osenv/package.json
@@ -10,19 +10,23 @@
         "spec": ">=0.1.3 <0.2.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
   "_from": "osenv@>=0.1.3 <0.2.0",
-  "_id": "osenv@0.1.3",
+  "_id": "osenv@0.1.4",
   "_inCache": true,
   "_location": "/osenv",
-  "_nodeVersion": "2.2.1",
+  "_nodeVersion": "6.5.0",
+  "_npmOperationalInternal": {
+    "host": "packages-18-east.internal.npmjs.com",
+    "tmp": "tmp/osenv-0.1.4.tgz_1481655889868_0.3980878754518926"
+  },
   "_npmUser": {
     "name": "isaacs",
-    "email": "isaacs@npmjs.com"
+    "email": "i@izs.me"
   },
-  "_npmVersion": "3.0.0",
+  "_npmVersion": "3.10.9",
   "_phantomChildren": {},
   "_requested": {
     "raw": "osenv@^0.1.3",
@@ -36,11 +40,11 @@
   "_requiredBy": [
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz",
-  "_shasum": "83cf05c6d6458fc4d5ac6362ea325d92f2754217",
+  "_resolved": "http://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+  "_shasum": "42fe6d5953df06c8064be6f176c3d05aaaa34644",
   "_shrinkwrap": null,
   "_spec": "osenv@^0.1.3",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -55,16 +59,16 @@
   },
   "description": "Look up environment settings specific to different operating systems",
   "devDependencies": {
-    "tap": "^1.2.0"
+    "tap": "^8.0.1"
   },
   "directories": {
     "test": "test"
   },
   "dist": {
-    "shasum": "83cf05c6d6458fc4d5ac6362ea325d92f2754217",
-    "tarball": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz"
+    "shasum": "42fe6d5953df06c8064be6f176c3d05aaaa34644",
+    "tarball": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz"
   },
-  "gitHead": "f746b3405d8f9e28054d11b97e1436f6a15016c4",
+  "gitHead": "ef718f0d20e38d45ec452b7faeefc692d3cd1062",
   "homepage": "https://github.com/npm/osenv#readme",
   "keywords": [
     "environment",
@@ -97,7 +101,8 @@
   ],
   "name": "osenv",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# osenv\n\nLook up environment settings specific to different operating systems.\n\n## Usage\n\n```javascript\nvar osenv = require('osenv')\nvar path = osenv.path()\nvar user = osenv.user()\n// etc.\n\n// Some things are not reliably in the env, and have a fallback command:\nvar h = osenv.hostname(function (er, hostname) {\n  h = hostname\n})\n// This will still cause it to be memoized, so calling osenv.hostname()\n// is now an immediate operation.\n\n// You can always send  [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/npm/osenv.git"
@@ -105,5 +110,5 @@
   "scripts": {
     "test": "tap test/*.js"
   },
-  "version": "0.1.3"
+  "version": "0.1.4"
 }
diff --git a/node_modules/osenv/test/unix.js b/node_modules/osenv/test/unix.js
index f87cbfb..94d4aaa 100644
--- a/node_modules/osenv/test/unix.js
+++ b/node_modules/osenv/test/unix.js
@@ -2,13 +2,13 @@
 // pretending to be another platform is too hacky, since it breaks
 // how the underlying system looks up module paths and runs
 // child processes, and all that stuff is cached.
+var tap = require('tap')
+
+
 if (process.platform === 'win32') {
-  console.log('TAP Version 13\n' +
-              '1..0\n' +
-              '# Skip unix tests, this is not unix\n')
-  return
+  tap.plan(0, 'Skip unix tests, this is not unix')
+  process.exit(0)
 }
-var tap = require('tap')
 
 // like unix, but funny
 process.env.USER = 'sirUser'
diff --git a/node_modules/path-is-absolute/package.json b/node_modules/path-is-absolute/package.json
index c20949e..bb82439 100644
--- a/node_modules/path-is-absolute/package.json
+++ b/node_modules/path-is-absolute/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.0.0 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/glob"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/glob"
     ]
   ],
   "_from": "path-is-absolute@>=1.0.0 <2.0.0",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/glob"
   ],
-  "_resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+  "_resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
   "_shasum": "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f",
   "_shrinkwrap": null,
   "_spec": "path-is-absolute@^1.0.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/glob",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/glob",
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
@@ -99,7 +99,8 @@
   ],
   "name": "path-is-absolute",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute)\n\n> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com)\n\n\n## Install\n\n```\n$ npm install --save path-is-absolute\n```\n\n\n## Usage\n\n```js\nconst pathIsAbsolute = require('path-is-absolute');\n\n// Running on Linux\npathIsAbsolute('/ho [...]
+  "readmeFilename": "readme.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/sindresorhus/path-is-absolute.git"
diff --git a/node_modules/pegjs/package.json b/node_modules/pegjs/package.json
index 2f34eb4..12cd1f6 100644
--- a/node_modules/pegjs/package.json
+++ b/node_modules/pegjs/package.json
@@ -10,7 +10,7 @@
         "spec": ">=0.10.0 <0.11.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xcode"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/xcode"
     ]
   ],
   "_from": "pegjs@>=0.10.0 <0.11.0",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/xcode"
   ],
-  "_resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz",
+  "_resolved": "http://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz",
   "_shasum": "cf8bafae6eddff4b5a7efb185269eaaf4610ddbd",
   "_shrinkwrap": null,
   "_spec": "pegjs@^0.10.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xcode",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/xcode",
   "author": {
     "name": "David Majda",
     "email": "david@majda.cz",
diff --git a/node_modules/plist/package.json b/node_modules/plist/package.json
index 8c16d40..bcfc51c 100644
--- a/node_modules/plist/package.json
+++ b/node_modules/plist/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.2.0 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios"
+      "/Users/steveng/repo/cordova/cordova-ios"
     ]
   ],
   "_from": "plist@>=1.2.0 <2.0.0",
@@ -36,14 +36,13 @@
   "_requiredBy": [
     "/",
     "/cordova-common",
-    "/ios-sim",
-    "/simple-plist"
+    "/ios-sim"
   ],
-  "_resolved": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
+  "_resolved": "http://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
   "_shasum": "084b5093ddc92506e259f874b8d9b1afb8c79593",
   "_shrinkwrap": null,
   "_spec": "plist@^1.2.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios",
   "author": {
     "name": "Nathan Rajlich",
     "email": "nathan@tootallnate.net"
@@ -116,7 +115,8 @@
   ],
   "name": "plist",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "plist.js\n========\n### Mac OS X Plist parser/builder for Node.js and browsers\n\n[![Sauce Test Status](https://saucelabs.com/browser-matrix/plistjs.svg)](https://saucelabs.com/u/plistjs)\n\n[![Build Status](https://travis-ci.org/TooTallNate/plist.js.svg?branch=master)](https://travis-ci.org/TooTallNate/plist.js)\n\nProvides facilities for reading and writing Mac OS X Plist (property list)\nfiles. These are often used in programming OS X and iOS applications, as\nwell as the [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/TooTallNate/node-plist.git"
diff --git a/node_modules/q/CHANGES.md b/node_modules/q/CHANGES.md
index cd351fd..2d845a3 100644
--- a/node_modules/q/CHANGES.md
+++ b/node_modules/q/CHANGES.md
@@ -1,3 +1,9 @@
+## 1.5.0
+
+ - Q.any gives an error message from the last rejected promise
+ - Throw if callback supplied to "finally" is invalid (@grahamrhay)
+ - Long stack trace improvements, can now construct long stack traces
+   across rethrows.
 
 ## 1.4.1
 
diff --git a/node_modules/q/LICENSE b/node_modules/q/LICENSE
index 8a706b5..9ce1ea5 100644
--- a/node_modules/q/LICENSE
+++ b/node_modules/q/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2009–2014 Kristopher Michael Kowal. All rights reserved.
+Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved.
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to
 deal in the Software without restriction, including without limitation the
diff --git a/node_modules/q/README.md b/node_modules/q/README.md
index 9065bfa..d2f57a6 100644
--- a/node_modules/q/README.md
+++ b/node_modules/q/README.md
@@ -1,17 +1,10 @@
-[![Build Status](https://secure.travis-ci.org/kriskowal/q.png?branch=master)](http://travis-ci.org/kriskowal/q)
+[![Build Status](https://secure.travis-ci.org/kriskowal/q.svg?branch=master)](http://travis-ci.org/kriskowal/q)
+[![CDNJS](https://img.shields.io/cdnjs/v/q.js.svg)](https://cdnjs.com/libraries/q.js)
 
 <a href="http://promises-aplus.github.com/promises-spec">
-    <img src="http://kriskowal.github.io/q/q.png"
-         align="right" alt="Q logo" />
+    <img src="http://kriskowal.github.io/q/q.png" align="right" alt="Q logo" />
 </a>
 
-*This is Q version 1, from the `v1` branch in Git. This documentation applies to
-the latest of both the version 1 and version 0.9 release trains. These releases
-are stable. There will be no further releases of 0.9 after 0.9.7 which is nearly
-equivalent to version 1.0.0. All further releases of `q@~1.0` will be backward
-compatible. The version 2 release train introduces significant and
-backward-incompatible changes and is experimental at this time.*
-
 If a function cannot return a value or throw an exception without
 blocking, it can return a promise instead.  A promise is an object
 that represents the return value or the thrown exception that the
@@ -80,7 +73,7 @@ The Q module can be loaded as:
     the [q](https://npmjs.org/package/q) package
 -   An AMD module
 -   A [component](https://github.com/component/component) as ``microjs/q``
--   Using [bower](http://bower.io/) as `q#1.0.1`
+-   Using [bower](http://bower.io/) as `q#^1.4.1`
 -   Using [NuGet](http://nuget.org/) as [Q](https://nuget.org/packages/q)
 
 Q can exchange promises with jQuery, Dojo, When.js, WinJS, and more.
@@ -386,7 +379,7 @@ return funcs.reduce(Q.when, Q(initialVal));
 
 ### Handling Errors
 
-One sometimes-unintuive aspect of promises is that if you throw an
+One sometimes-unintuitive aspect of promises is that if you throw an
 exception in the fulfillment handler, it will not be caught by the error
 handler.
 
@@ -876,6 +869,6 @@ You can view the results of the Q test suite [in your browser][tests]!
 
 ## License
 
-Copyright 2009–2015 Kristopher Michael Kowal and contributors
+Copyright 2009–2017 Kristopher Michael Kowal and contributors
 MIT License (enclosed)
 
diff --git a/node_modules/q/package.json b/node_modules/q/package.json
index f17a937..8d5d500 100644
--- a/node_modules/q/package.json
+++ b/node_modules/q/package.json
@@ -10,19 +10,23 @@
         "spec": ">=1.4.1 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios"
+      "/Users/steveng/repo/cordova/cordova-ios"
     ]
   ],
   "_from": "q@>=1.4.1 <2.0.0",
-  "_id": "q@1.4.1",
+  "_id": "q@1.5.0",
   "_inCache": true,
   "_location": "/q",
-  "_nodeVersion": "1.8.1",
+  "_nodeVersion": "6.9.5",
+  "_npmOperationalInternal": {
+    "host": "packages-18-east.internal.npmjs.com",
+    "tmp": "tmp/q-1.5.0.tgz_1490148893963_0.4695124195422977"
+  },
   "_npmUser": {
     "name": "kriskowal",
     "email": "kris.kowal@cixar.com"
   },
-  "_npmVersion": "2.8.3",
+  "_npmVersion": "3.10.10",
   "_phantomChildren": {},
   "_requested": {
     "raw": "q@^1.4.1",
@@ -37,11 +41,11 @@
     "/",
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
-  "_shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e",
+  "_resolved": "http://registry.npmjs.org/q/-/q-1.5.0.tgz",
+  "_shasum": "dd01bac9d06d30e6f219aecb8253ee9ebdc308f1",
   "_shrinkwrap": null,
   "_spec": "q@^1.4.1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios",
   "author": {
     "name": "Kris Kowal",
     "email": "kris@cixar.com",
@@ -84,8 +88,8 @@
     "test": "./spec"
   },
   "dist": {
-    "shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e",
-    "tarball": "https://registry.npmjs.org/q/-/q-1.4.1.tgz"
+    "shasum": "dd01bac9d06d30e6f219aecb8253ee9ebdc308f1",
+    "tarball": "https://registry.npmjs.org/q/-/q-1.5.0.tgz"
   },
   "engines": {
     "node": ">=0.6.0",
@@ -96,7 +100,7 @@
     "q.js",
     "queue.js"
   ],
-  "gitHead": "d373079d3620152e3d60e82f27265a09ee0e81bd",
+  "gitHead": "4fecabe07ff9f3683a3d4548e7f81c2aba693326",
   "homepage": "https://github.com/kriskowal/q",
   "keywords": [
     "q",
@@ -112,10 +116,7 @@
     "browser",
     "node"
   ],
-  "license": {
-    "type": "MIT",
-    "url": "http://github.com/kriskowal/q/raw/master/LICENSE"
-  },
+  "license": "MIT",
   "main": "q.js",
   "maintainers": [
     {
@@ -136,7 +137,8 @@
       }
     }
   },
-  "readme": "ERROR: No README data found!",
+  "readme": "[![Build Status](https://secure.travis-ci.org/kriskowal/q.svg?branch=master)](http://travis-ci.org/kriskowal/q)\n[![CDNJS](https://img.shields.io/cdnjs/v/q.js.svg)](https://cdnjs.com/libraries/q.js)\n\n<a href=\"http://promises-aplus.github.com/promises-spec\">\n    <img src=\"http://kriskowal.github.io/q/q.png\" align=\"right\" alt=\"Q logo\" />\n</a>\n\nIf a function cannot return a value or throw an exception without\nblocking, it can return a promise instead.  A promise  [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/kriskowal/q.git"
@@ -147,8 +149,8 @@
     "lint": "jshint q.js",
     "minify": "grunt",
     "prepublish": "grunt",
-    "test": "jasmine-node spec && promises-aplus-tests spec/aplus-adapter",
+    "test": "npm ls -s && jasmine-node spec && promises-aplus-tests spec/aplus-adapter && npm run -s lint",
     "test-browser": "opener spec/q-spec.html"
   },
-  "version": "1.4.1"
+  "version": "1.5.0"
 }
diff --git a/node_modules/q/q.js b/node_modules/q/q.js
index cf5339e..14dc24a 100644
--- a/node_modules/q/q.js
+++ b/node_modules/q/q.js
@@ -1,8 +1,8 @@
 // vim:ts=4:sts=4:sw=4:
 /*!
  *
- * Copyright 2009-2012 Kris Kowal under the terms of the MIT
- * license found at http://github.com/kriskowal/q/raw/master/LICENSE
+ * Copyright 2009-2017 Kris Kowal under the terms of the MIT
+ * license found at https://github.com/kriskowal/q/blob/v1/LICENSE
  *
  * With parts by Tyler Close
  * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found
@@ -190,7 +190,7 @@ var nextTick =(function () {
         //   `setTimeout`. In this case `setImmediate` is preferred because
         //    it is faster. Browserify's `process.toString()` yields
         //   "[object Object]", while in a real Node environment
-        //   `process.nextTick()` yields "[object process]".
+        //   `process.toString()` yields "[object process]".
         isNodeJS = true;
 
         requestTick = function () {
@@ -327,6 +327,11 @@ var object_create = Object.create || function (prototype) {
     return new Type();
 };
 
+var object_defineProperty = Object.defineProperty || function (obj, prop, descriptor) {
+    obj[prop] = descriptor.value;
+    return obj;
+};
+
 var object_hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);
 
 var object_keys = Object.keys || function (object) {
@@ -377,19 +382,20 @@ function makeStackTraceLong(error, promise) {
         promise.stack &&
         typeof error === "object" &&
         error !== null &&
-        error.stack &&
-        error.stack.indexOf(STACK_JUMP_SEPARATOR) === -1
+        error.stack
     ) {
         var stacks = [];
         for (var p = promise; !!p; p = p.source) {
-            if (p.stack) {
+            if (p.stack && (!error.__minimumStackCounter__ || error.__minimumStackCounter__ > p.stackCounter)) {
+                object_defineProperty(error, "__minimumStackCounter__", {value: p.stackCounter, configurable: true});
                 stacks.unshift(p.stack);
             }
         }
         stacks.unshift(error.stack);
 
         var concatedStacks = stacks.join("\n" + STACK_JUMP_SEPARATOR + "\n");
-        error.stack = filterStackString(concatedStacks);
+        var stack = filterStackString(concatedStacks);
+        object_defineProperty(error, "stack", {value: stack, configurable: true});
     }
 }
 
@@ -516,6 +522,14 @@ Q.nextTick = nextTick;
  */
 Q.longStackSupport = false;
 
+/**
+ * The counter is used to determine the stopping point for building
+ * long stack traces. In makeStackTraceLong we walk backwards through
+ * the linked list of promises, only stacks which were created before
+ * the rejection are concatenated.
+ */
+var longStackCounter = 1;
+
 // enable long stacks if Q_DEBUG is set
 if (typeof process === "object" && process && process.env && process.env.Q_DEBUG) {
     Q.longStackSupport = true;
@@ -588,6 +602,7 @@ function defer() {
             // At the same time, cut off the first line; it's always just
             // "[object Promise]\n", as per the `toString`.
             promise.stack = e.stack.substring(e.stack.indexOf("\n") + 1);
+            promise.stackCounter = longStackCounter++;
         }
     }
 
@@ -597,7 +612,12 @@ function defer() {
 
     function become(newPromise) {
         resolvedPromise = newPromise;
-        promise.source = newPromise;
+
+        if (Q.longStackSupport && hasStacks) {
+            // Only hold a reference to the new promise if long stacks
+            // are enabled to reduce memory usage
+            promise.source = newPromise;
+        }
 
         array_reduce(messages, function (undefined, message) {
             Q.nextTick(function () {
@@ -725,7 +745,7 @@ Promise.prototype.join = function (that) {
             // TODO: "===" should be Object.is or equiv
             return x;
         } else {
-            throw new Error("Can't join: not the same: " + x + " " + y);
+            throw new Error("Q can't join: not the same: " + x + " " + y);
         }
     });
 };
@@ -1622,13 +1642,12 @@ function any(promises) {
         function onFulfilled(result) {
             deferred.resolve(result);
         }
-        function onRejected() {
+        function onRejected(err) {
             pendingCount--;
             if (pendingCount === 0) {
-                deferred.reject(new Error(
-                    "Can't get fulfillment value from any promise, all " +
-                    "promises were rejected."
-                ));
+                err.message = ("Q can't get fulfillment value from any promise, all " +
+                    "promises were rejected. Last error message: " + err.message);
+                deferred.reject(err);
             }
         }
         function onProgress(progress) {
@@ -1752,6 +1771,9 @@ Q["finally"] = function (object, callback) {
 
 Promise.prototype.fin = // XXX legacy
 Promise.prototype["finally"] = function (callback) {
+    if (!callback || typeof callback.apply !== "function") {
+        throw new Error("Q can't apply finally callback");
+    }
     callback = Q(callback);
     return this.then(function (value) {
         return callback.fcall().then(function () {
@@ -1915,6 +1937,9 @@ Promise.prototype.nfcall = function (/*...args*/) {
  */
 Q.nfbind =
 Q.denodeify = function (callback /*...args*/) {
+    if (callback === undefined) {
+        throw new Error("Q can't wrap an undefined function");
+    }
     var baseArgs = array_slice(arguments, 1);
     return function () {
         var nodeArgs = baseArgs.concat(array_slice(arguments));
diff --git a/node_modules/sax/package.json b/node_modules/sax/package.json
index d453f3b..a6ebf1a 100644
--- a/node_modules/sax/package.json
+++ b/node_modules/sax/package.json
@@ -10,7 +10,7 @@
         "spec": "0.3.5",
         "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/elementtree"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/elementtree"
     ]
   ],
   "_defaultsLoaded": true,
@@ -42,7 +42,7 @@
   "_shasum": "88fcfc1f73c0c8bbd5b7c776b6d3f3501eed073d",
   "_shrinkwrap": null,
   "_spec": "sax@0.3.5",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/elementtree",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/elementtree",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -110,7 +110,8 @@
   ],
   "name": "sax",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# sax js\n\nA sax-style parser for XML and HTML.\n\nDesigned with [node](http://nodejs.org/) in mind, but should work fine in\nthe browser or other CommonJS implementations.\n\n## What This Is\n\n* A very simple tool to parse through an XML string.\n* A stepping stone to a streaming HTML parser.\n* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML \n  docs.\n\n## What This Is (probably) Not\n\n* An HTML Parser - That's a fine goal, but this isn't it.  It' [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/sax-js.git"
diff --git a/node_modules/semver/README.md b/node_modules/semver/README.md
index cbd9565..fd5151a 100644
--- a/node_modules/semver/README.md
+++ b/node_modules/semver/README.md
@@ -1,55 +1,65 @@
 semver(1) -- The semantic versioner for npm
 ===========================================
 
+## Install
+
+```bash
+npm install --save semver
+````
+
 ## Usage
 
-    $ npm install semver
-    $ node
-    var semver = require('semver')
+As a node module:
 
-    semver.valid('1.2.3') // '1.2.3'
-    semver.valid('a.b.c') // null
-    semver.clean('  =v1.2.3   ') // '1.2.3'
-    semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
-    semver.gt('1.2.3', '9.8.7') // false
-    semver.lt('1.2.3', '9.8.7') // true
+```js
+const semver = require('semver')
+
+semver.valid('1.2.3') // '1.2.3'
+semver.valid('a.b.c') // null
+semver.clean('  =v1.2.3   ') // '1.2.3'
+semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
+semver.gt('1.2.3', '9.8.7') // false
+semver.lt('1.2.3', '9.8.7') // true
+```
 
 As a command-line utility:
 
-    $ semver -h
+```
+$ semver -h
 
-    SemVer 5.1.0
+SemVer 5.3.0
 
-    A JavaScript implementation of the http://semver.org/ specification
-    Copyright Isaac Z. Schlueter
+A JavaScript implementation of the http://semver.org/ specification
+Copyright Isaac Z. Schlueter
 
-    Usage: semver [options] <version> [<version> [...]]
-    Prints valid versions sorted by SemVer precedence
+Usage: semver [options] <version> [<version> [...]]
+Prints valid versions sorted by SemVer precedence
 
-    Options:
-    -r --range <range>
-            Print versions that match the specified range.
+Options:
+-r --range <range>
+        Print versions that match the specified range.
 
-    -i --increment [<level>]
-            Increment a version by the specified level.  Level can
-            be one of: major, minor, patch, premajor, preminor,
-            prepatch, or prerelease.  Default level is 'patch'.
-            Only one version may be specified.
+-i --increment [<level>]
+        Increment a version by the specified level.  Level can
+        be one of: major, minor, patch, premajor, preminor,
+        prepatch, or prerelease.  Default level is 'patch'.
+        Only one version may be specified.
 
-    --preid <identifier>
-            Identifier to be used to prefix premajor, preminor,
-            prepatch or prerelease version increments.
+--preid <identifier>
+        Identifier to be used to prefix premajor, preminor,
+        prepatch or prerelease version increments.
 
-    -l --loose
-            Interpret versions and ranges loosely
+-l --loose
+        Interpret versions and ranges loosely
 
-    Program exits successfully if any valid version satisfies
-    all supplied ranges, and prints all satisfying versions.
+Program exits successfully if any valid version satisfies
+all supplied ranges, and prints all satisfying versions.
 
-    If no satisfying versions are found, then exits failure.
+If no satisfying versions are found, then exits failure.
 
-    Versions are printed in ascending order, so supplying
-    multiple versions to the utility will just sort them.
+Versions are printed in ascending order, so supplying
+multiple versions to the utility will just sort them.
+```
 
 ## Versions
 
@@ -126,20 +136,20 @@ The method `.inc` takes an additional `identifier` string argument that
 will append the value of the string as a prerelease identifier:
 
 ```javascript
-> semver.inc('1.2.3', 'prerelease', 'beta')
-'1.2.4-beta.0'
+semver.inc('1.2.3', 'prerelease', 'beta')
+// '1.2.4-beta.0'
 ```
 
 command-line example:
 
-```shell
+```bash
 $ semver 1.2.3 -i prerelease --preid beta
 1.2.4-beta.0
 ```
 
 Which then can be used to increment further:
 
-```shell
+```bash
 $ semver 1.2.4-beta.0 -i prerelease
 1.2.4-beta.1
 ```
@@ -296,6 +306,8 @@ strings that they parse.
 * `major(v)`: Return the major version number.
 * `minor(v)`: Return the minor version number.
 * `patch(v)`: Return the patch version number.
+* `intersects(r1, r2, loose)`: Return true if the two supplied ranges
+  or comparators intersect.
 
 ### Comparison
 
@@ -319,6 +331,9 @@ strings that they parse.
   (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
   or null if the versions are the same.
 
+### Comparators
+
+* `intersects(comparator)`: Return true if the comparators intersect
 
 ### Ranges
 
@@ -337,6 +352,7 @@ strings that they parse.
   the bounds of the range in either the high or low direction.  The
   `hilo` argument must be either the string `'>'` or `'<'`.  (This is
   the function called by `gtr` and `ltr`.)
+* `intersects(range)`: Return true if any of the ranges comparators intersect
 
 Note that, since ranges may be non-contiguous, a version might not be
 greater than a range, less than a range, *or* satisfy a range!  For
diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json
index 5110bae..699ee97 100644
--- a/node_modules/semver/package.json
+++ b/node_modules/semver/package.json
@@ -10,23 +10,23 @@
         "spec": ">=5.0.1 <6.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
   "_from": "semver@>=5.0.1 <6.0.0",
-  "_id": "semver@5.3.0",
+  "_id": "semver@5.4.1",
   "_inCache": true,
   "_location": "/semver",
-  "_nodeVersion": "4.4.4",
+  "_nodeVersion": "8.2.1",
   "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/semver-5.3.0.tgz_1468515166602_0.9155273644719273"
+    "host": "s3://npm-registry-packages",
+    "tmp": "tmp/semver-5.4.1.tgz_1500922107643_0.5125251261051744"
   },
   "_npmUser": {
     "name": "isaacs",
     "email": "i@izs.me"
   },
-  "_npmVersion": "3.10.6",
+  "_npmVersion": "5.3.0",
   "_phantomChildren": {},
   "_requested": {
     "raw": "semver@^5.0.1",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
-  "_shasum": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f",
+  "_resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+  "_shasum": "e059c09d8571f0540823733433505d3a2f00b18e",
   "_shrinkwrap": null,
   "_spec": "semver@^5.0.1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "bin": {
     "semver": "./bin/semver"
   },
@@ -54,26 +54,27 @@
   "dependencies": {},
   "description": "The semantic version parser used by npm.",
   "devDependencies": {
-    "tap": "^2.0.0"
+    "tap": "^10.7.0"
   },
   "directories": {},
   "dist": {
-    "shasum": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f",
-    "tarball": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz"
+    "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+    "shasum": "e059c09d8571f0540823733433505d3a2f00b18e",
+    "tarball": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz"
   },
   "files": [
     "bin",
     "range.bnf",
     "semver.js"
   ],
-  "gitHead": "d21444a0658224b152ce54965d02dbe0856afb84",
+  "gitHead": "0877c942a6af00edcda5c16fdd934684e1b20a1c",
   "homepage": "https://github.com/npm/node-semver#readme",
   "license": "ISC",
   "main": "semver.js",
   "maintainers": [
     {
       "name": "isaacs",
-      "email": "isaacs@npmjs.com"
+      "email": "i@izs.me"
     },
     {
       "name": "othiym23",
@@ -82,13 +83,14 @@
   ],
   "name": "semver",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "semver(1) -- The semantic versioner for npm\n===========================================\n\n## Install\n\n```bash\nnpm install --save semver\n````\n\n## Usage\n\nAs a node module:\n\n```js\nconst semver = require('semver')\n\nsemver.valid('1.2.3') // '1.2.3'\nsemver.valid('a.b.c') // null\nsemver.clean('  =v1.2.3   ') // '1.2.3'\nsemver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\nsemver.gt('1.2.3', '9.8.7') // false\nsemver.lt('1.2.3', '9.8.7') // true\n`` [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/npm/node-semver.git"
   },
   "scripts": {
-    "test": "tap test/*.js"
+    "test": "tap test/*.js --cov -J"
   },
-  "version": "5.3.0"
+  "version": "5.4.1"
 }
diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js
index 5f1a3c5..389cb44 100644
--- a/node_modules/semver/semver.js
+++ b/node_modules/semver/semver.js
@@ -563,7 +563,7 @@ function patch(a, loose) {
 
 exports.compare = compare;
 function compare(a, b, loose) {
-  return new SemVer(a, loose).compare(b);
+  return new SemVer(a, loose).compare(new SemVer(b, loose));
 }
 
 exports.compareLoose = compareLoose;
@@ -704,11 +704,59 @@ Comparator.prototype.test = function(version) {
   return cmp(version, this.operator, this.semver, this.loose);
 };
 
+Comparator.prototype.intersects = function(comp, loose) {
+  if (!(comp instanceof Comparator)) {
+    throw new TypeError('a Comparator is required');
+  }
+
+  var rangeTmp;
+
+  if (this.operator === '') {
+    rangeTmp = new Range(comp.value, loose);
+    return satisfies(this.value, rangeTmp, loose);
+  } else if (comp.operator === '') {
+    rangeTmp = new Range(this.value, loose);
+    return satisfies(comp.semver, rangeTmp, loose);
+  }
+
+  var sameDirectionIncreasing =
+    (this.operator === '>=' || this.operator === '>') &&
+    (comp.operator === '>=' || comp.operator === '>');
+  var sameDirectionDecreasing =
+    (this.operator === '<=' || this.operator === '<') &&
+    (comp.operator === '<=' || comp.operator === '<');
+  var sameSemVer = this.semver.version === comp.semver.version;
+  var differentDirectionsInclusive =
+    (this.operator === '>=' || this.operator === '<=') &&
+    (comp.operator === '>=' || comp.operator === '<=');
+  var oppositeDirectionsLessThan =
+    cmp(this.semver, '<', comp.semver, loose) &&
+    ((this.operator === '>=' || this.operator === '>') &&
+    (comp.operator === '<=' || comp.operator === '<'));
+  var oppositeDirectionsGreaterThan =
+    cmp(this.semver, '>', comp.semver, loose) &&
+    ((this.operator === '<=' || this.operator === '<') &&
+    (comp.operator === '>=' || comp.operator === '>'));
+
+  return sameDirectionIncreasing || sameDirectionDecreasing ||
+    (sameSemVer && differentDirectionsInclusive) ||
+    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
+};
+
 
 exports.Range = Range;
 function Range(range, loose) {
-  if ((range instanceof Range) && range.loose === loose)
-    return range;
+  if (range instanceof Range) {
+    if (range.loose === loose) {
+      return range;
+    } else {
+      return new Range(range.raw, loose);
+    }
+  }
+
+  if (range instanceof Comparator) {
+    return new Range(range.value, loose);
+  }
 
   if (!(this instanceof Range))
     return new Range(range, loose);
@@ -783,6 +831,22 @@ Range.prototype.parseRange = function(range) {
   return set;
 };
 
+Range.prototype.intersects = function(range, loose) {
+  if (!(range instanceof Range)) {
+    throw new TypeError('a Range is required');
+  }
+
+  return this.set.some(function(thisComparators) {
+    return thisComparators.every(function(thisComparator) {
+      return range.set.some(function(rangeComparators) {
+        return rangeComparators.every(function(rangeComparator) {
+          return thisComparator.intersects(rangeComparator, loose);
+        });
+      });
+    });
+  });
+};
+
 // Mostly just for testing and legacy API reasons
 exports.toComparators = toComparators;
 function toComparators(range, loose) {
@@ -1087,20 +1151,42 @@ function satisfies(version, range, loose) {
 
 exports.maxSatisfying = maxSatisfying;
 function maxSatisfying(versions, range, loose) {
-  return versions.filter(function(version) {
-    return satisfies(version, range, loose);
-  }).sort(function(a, b) {
-    return rcompare(a, b, loose);
-  })[0] || null;
+  var max = null;
+  var maxSV = null;
+  try {
+    var rangeObj = new Range(range, loose);
+  } catch (er) {
+    return null;
+  }
+  versions.forEach(function (v) {
+    if (rangeObj.test(v)) { // satisfies(v, range, loose)
+      if (!max || maxSV.compare(v) === -1) { // compare(max, v, true)
+        max = v;
+        maxSV = new SemVer(max, loose);
+      }
+    }
+  })
+  return max;
 }
 
 exports.minSatisfying = minSatisfying;
 function minSatisfying(versions, range, loose) {
-  return versions.filter(function(version) {
-    return satisfies(version, range, loose);
-  }).sort(function(a, b) {
-    return compare(a, b, loose);
-  })[0] || null;
+  var min = null;
+  var minSV = null;
+  try {
+    var rangeObj = new Range(range, loose);
+  } catch (er) {
+    return null;
+  }
+  versions.forEach(function (v) {
+    if (rangeObj.test(v)) { // satisfies(v, range, loose)
+      if (!min || minSV.compare(v) === 1) { // compare(min, v, true)
+        min = v;
+        minSV = new SemVer(min, loose);
+      }
+    }
+  })
+  return min;
 }
 
 exports.validRange = validRange;
@@ -1201,3 +1287,10 @@ function prerelease(version, loose) {
   var parsed = parse(version, loose);
   return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
 }
+
+exports.intersects = intersects;
+function intersects(r1, r2, loose) {
+  r1 = new Range(r1, loose)
+  r2 = new Range(r2, loose)
+  return r1.intersects(r2)
+}
diff --git a/node_modules/shelljs/package.json b/node_modules/shelljs/package.json
index fd830f8..2d7e5ee 100644
--- a/node_modules/shelljs/package.json
+++ b/node_modules/shelljs/package.json
@@ -10,7 +10,7 @@
         "spec": ">=0.5.3 <0.6.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios"
+      "/Users/steveng/repo/cordova/cordova-ios"
     ]
   ],
   "_from": "shelljs@>=0.5.3 <0.6.0",
@@ -37,11 +37,11 @@
     "/",
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
+  "_resolved": "http://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
   "_shasum": "c54982b996c76ef0c1e6b59fbdc5825f5b713113",
   "_shrinkwrap": null,
   "_spec": "shelljs@^0.5.3",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios",
   "author": {
     "name": "Artur Adib",
     "email": "arturadib@gmail.com"
@@ -85,7 +85,8 @@
   ],
   "name": "shelljs",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)\n\nShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goo [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/arturadib/shelljs.git"
diff --git a/node_modules/ios-sim/node_modules/simctl/.travis.yml b/node_modules/simctl/.travis.yml
similarity index 100%
rename from node_modules/ios-sim/node_modules/simctl/.travis.yml
rename to node_modules/simctl/.travis.yml
diff --git a/node_modules/simctl/README.md b/node_modules/simctl/README.md
index b05a54b..61acb9d 100644
--- a/node_modules/simctl/README.md
+++ b/node_modules/simctl/README.md
@@ -1,3 +1,10 @@
+[![Build status](https://ci.appveyor.com/api/projects/status/4p87ytoudwh7g132/branch/master?svg=true)](https://ci.appveyor.com/project/shazron/simctl/branch/master)
+[![Build Status](https://travis-ci.org/phonegap/ios-sim.svg?branch=master)](https://travis-ci.org/phonegap/simctl)
+
 ## library wrapper for Xcode's simctl utility on OS X
 
-Used by [ios-sim](https://www.npmjs.com/package/ios-sim)
\ No newline at end of file
+Used by [ios-sim](https://www.npmjs.com/package/ios-sim)
+
+## Requirements
+
+Xcode 8 or greater
diff --git a/node_modules/ios-sim/node_modules/simctl/appveyor.yml b/node_modules/simctl/appveyor.yml
similarity index 100%
rename from node_modules/ios-sim/node_modules/simctl/appveyor.yml
rename to node_modules/simctl/appveyor.yml
diff --git a/node_modules/simctl/lib/simctl-list-parser.js b/node_modules/simctl/lib/simctl-list-parser.js
deleted file mode 100644
index c7ec5cb..0000000
--- a/node_modules/simctl/lib/simctl-list-parser.js
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2014 Shazron Abdullah.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-var SimctlListParserMode = {
-    'device': 0,
-    'devicetype': 1,
-    'runtime': 2
-};
-
-function SimctlListParser() {
-    this._result = {
-        'devices': [],
-        'devicetypes': [],
-        'runtimes': []
-    };
-
-    this._mode = null;
-    this._deviceRuntime = null;
-}
-
-SimctlListParser.prototype.parse = function(text) {
-    var _this = this;
-    clearResult.apply(this);
-
-    text.split(/\r?\n/).forEach(function(line) {
-        parseLine.apply(_this, [line]);
-    });
-    changeMode.apply(this);
-
-    return this._result;
-};
-
-SimctlListParser.prototype._clear = function() {
-    clearResult.apply(this);
-};
-
-function clearResult() {
-    this._result = {
-        'devices': [],
-        'devicetypes': [],
-        'runtimes': []
-    };
-}
-
-function changeMode(line) {
-    endParse.apply(this);
-
-    if (line && line.indexOf('Devices') !== -1) {
-        this._mode = SimctlListParserMode.device;
-    } else if (line && line.indexOf('Device Types') !== -1) {
-        this._mode = SimctlListParserMode.devicetype;
-    } else if (line && line.indexOf('Runtimes') !== -1) {
-        this._mode = SimctlListParserMode.runtime;
-    } else {
-        this._mode = null;
-    }
-}
-
-function endParse() {
-    switch (this._mode) {
-    case SimctlListParserMode.device:
-        if (this._deviceRuntime) {
-            this._result.devices.push(this._deviceRuntime);
-        }
-        break;
-    }
-}
-
-function parseLine(line) {
-
-    if (line.indexOf('==') === 0) {
-        changeMode.apply(this, [line]);
-        return;
-    }
-
-    switch (this._mode) {
-        case SimctlListParserMode.device:
-            parseDevice.apply(this, [line]);
-            break;
-        case SimctlListParserMode.devicetype:
-            parseDeviceType.apply(this, [line]);
-            break;
-        case SimctlListParserMode.runtime:
-            parseRuntime.apply(this, [line]);
-            break;
-    }
-}
-
-function isUUID(text) {
-    var regExp = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
-    return regExp.test(text);
-}
-
-function parseDevice(line) {
-    if (line.indexOf('--') === 0) {
-        changeDeviceRuntime.apply(this, [line]);
-        return;
-    }
-
-    // example: iPhone 4s (3717C817-6AD7-42B8-ACF3-405CB9E96375) (Shutdown) (unavailable)
-    // example: iPad Pro (9.7 inch) (1C5590C8-8AE7-4C27-AD06-84C801702945) (Shutdown) (unavailable)
-    // the last capture group might not be there if available
-    // the first parenthesized group might be part of the name
-
-    var available = false;
-
-    var regExp = /([^)]*)\s\(([^)]+)\)/g;
-    var items = [];
-    var matches;
-
-    while ((matches = regExp.exec(line)) !== null) {
-        if (matches[1].length > 0) {
-            if (isUUID(matches[2])) { // next is uuid, so push both name and id
-                items.push(matches[1]);
-                items.push(matches[2]);
-            } else { // name is in the next paren. group (not UUID), use whole match
-                items.push(matches[0]);
-            }
-        } else { // no match for name, just push second match
-            items.push(matches[2]);
-        }
-    }
-
-    if (items.length) {
-        var obj = {
-            'name': items[0].trim(),
-            'id': items[1].trim(),
-            'state': items[2].trim(),
-            'available': items[3] === undefined
-        };
-
-        this._deviceRuntime.devices.push(obj);
-    }
-}
-
-function changeDeviceRuntime(line) {
-    if (this._deviceRuntime) {
-        this._result.devices.push(this._deviceRuntime);
-    }
-
-    var runtime = line;
-    var regExp = /--\s(.*)\s--/;
-    var matches = regExp.exec(line);
-
-    if (matches) {
-        runtime = matches[1];
-    }
-
-    var obj = {
-        'runtime': runtime,
-        'devices': []
-    };
-
-    this._deviceRuntime = obj;
-}
-
-function parseDeviceType(line) {
-    // Example: 'iPhone 4s (com.apple.CoreSimulator.SimDeviceType.iPhone-4s)'
-    var regExp = /(.*)\(([^)]+)\)/;
-    var matches = regExp.exec(line);
-
-    if (matches) {
-        var obj = {
-            'name': matches[1].trim(),
-            'id': matches[2].trim()
-        };
-
-        this._result.devicetypes.push(obj);
-    }
-}
-
-function parseRuntime(line) {
-    // Example:
-    //     iOS 7.0 (7.0 - Unknown)
-    //     (com.apple.CoreSimulator.SimRuntime.iOS-7-0) (unavailable, runtime path not found)
-    // the last capture group might not be there if available
-    var available = false;
-
-    var regExp = /(.*)\(([^)]+)\)\s\(([^)]+)\)\s\(([^)]+)\)/;
-    var matches = regExp.exec(line);
-    if (!matches) {
-        regExp = /(.*)\(([^)]+)\)\s\(([^)]+)\)/;
-        matches = regExp.exec(line);
-        available = true;
-    }
-
-    if (matches) {
-        var obj = {
-            'name': matches[1].trim(),
-            'build': matches[2].trim(),
-            'id': matches[3].trim(),
-            'available': available
-        };
-
-        this._result.runtimes.push(obj);
-    }
-}
-
-exports = module.exports = SimctlListParser;
diff --git a/node_modules/simctl/node_modules/shelljs/package.json b/node_modules/simctl/node_modules/shelljs/package.json
index 5f9c5a1..9253a5d 100644
--- a/node_modules/simctl/node_modules/shelljs/package.json
+++ b/node_modules/simctl/node_modules/shelljs/package.json
@@ -10,7 +10,7 @@
         "spec": ">=0.2.6 <0.3.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simctl"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/simctl"
     ]
   ],
   "_from": "shelljs@>=0.2.6 <0.3.0",
@@ -35,11 +35,11 @@
   "_requiredBy": [
     "/simctl"
   ],
-  "_resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
+  "_resolved": "http://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
   "_shasum": "90492d72ffcc8159976baba62fb0f6884f0c3378",
   "_shrinkwrap": null,
   "_spec": "shelljs@^0.2.6",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simctl",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/simctl",
   "author": {
     "name": "Artur Adib",
     "email": "aadib@mozilla.com"
@@ -81,7 +81,8 @@
   ],
   "name": "shelljs",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)\n\nShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goo [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/arturadib/shelljs.git"
diff --git a/node_modules/simctl/package.json b/node_modules/simctl/package.json
index 895b76d..ee4a72e 100644
--- a/node_modules/simctl/package.json
+++ b/node_modules/simctl/package.json
@@ -2,49 +2,49 @@
   "_args": [
     [
       {
-        "raw": "simctl@^0.1.0",
+        "raw": "simctl@^1.0.0",
         "scope": null,
         "escapedName": "simctl",
         "name": "simctl",
-        "rawSpec": "^0.1.0",
-        "spec": ">=0.1.0 <0.2.0",
+        "rawSpec": "^1.0.0",
+        "spec": ">=1.0.0 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/ios-sim"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/ios-sim"
     ]
   ],
-  "_from": "simctl@>=0.1.0 <0.2.0",
-  "_id": "simctl@0.1.0",
+  "_from": "simctl@>=1.0.0 <2.0.0",
+  "_id": "simctl@1.0.1",
   "_inCache": true,
   "_location": "/simctl",
   "_nodeVersion": "6.7.0",
   "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/simctl-0.1.0.tgz_1476944722710_0.7685866917017847"
+    "host": "s3://npm-registry-packages",
+    "tmp": "tmp/simctl-1.0.1.tgz_1497479983508_0.9374380426015705"
   },
   "_npmUser": {
     "name": "shazron",
     "email": "shazron@gmail.com"
   },
-  "_npmVersion": "3.10.8",
+  "_npmVersion": "3.10.9",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "simctl@^0.1.0",
+    "raw": "simctl@^1.0.0",
     "scope": null,
     "escapedName": "simctl",
     "name": "simctl",
-    "rawSpec": "^0.1.0",
-    "spec": ">=0.1.0 <0.2.0",
+    "rawSpec": "^1.0.0",
+    "spec": ">=1.0.0 <2.0.0",
     "type": "range"
   },
   "_requiredBy": [
     "/ios-sim"
   ],
-  "_resolved": "https://registry.npmjs.org/simctl/-/simctl-0.1.0.tgz",
-  "_shasum": "ade133b616e277fea5cbc9ba438a80529baa696d",
+  "_resolved": "https://registry.npmjs.org/simctl/-/simctl-1.0.1.tgz",
+  "_shasum": "e73ce62891c952b2ae78499acdccbe3cf897a2e8",
   "_shrinkwrap": null,
-  "_spec": "simctl@^0.1.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/ios-sim",
+  "_spec": "simctl@^1.0.0",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/ios-sim",
   "author": {
     "name": "Shazron Abdullah"
   },
@@ -55,7 +55,7 @@
     "shelljs": "^0.2.6",
     "tail": "^0.4.0"
   },
-  "description": "library for Xcode simctl utility on OS X",
+  "description": "library for Xcode 8+ simctl utility on macOS",
   "devDependencies": {
     "jasmine-node": "^1.14.5",
     "jscs": "^2.11.0",
@@ -63,10 +63,10 @@
   },
   "directories": {},
   "dist": {
-    "shasum": "ade133b616e277fea5cbc9ba438a80529baa696d",
-    "tarball": "https://registry.npmjs.org/simctl/-/simctl-0.1.0.tgz"
+    "shasum": "e73ce62891c952b2ae78499acdccbe3cf897a2e8",
+    "tarball": "https://registry.npmjs.org/simctl/-/simctl-1.0.1.tgz"
   },
-  "gitHead": "4d567f52e0db7b8ccdfb5c2716a0eb6a37d776c1",
+  "gitHead": "27193e094e2293b06d5d3536d1f99c4785699fdc",
   "homepage": "https://github.com/phonegap/simctl#readme",
   "keywords": [
     "simctl",
@@ -82,7 +82,8 @@
   ],
   "name": "simctl",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "[![Build status](https://ci.appveyor.com/api/projects/status/4p87ytoudwh7g132/branch/master?svg=true)](https://ci.appveyor.com/project/shazron/simctl/branch/master)\n[![Build Status](https://travis-ci.org/phonegap/ios-sim.svg?branch=master)](https://travis-ci.org/phonegap/simctl)\n\n## library wrapper for Xcode's simctl utility on OS X\n\nUsed by [ios-sim](https://www.npmjs.com/package/ios-sim)\n\n## Requirements\n\nXcode 8 or greater\n",
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/phonegap/simctl.git"
@@ -95,5 +96,5 @@
     "posttest": "npm run jshint",
     "test": "npm run jasmine"
   },
-  "version": "0.1.0"
+  "version": "1.0.1"
 }
diff --git a/node_modules/simctl/simctl.js b/node_modules/simctl/simctl.js
index 346cd7e..5cecea8 100644
--- a/node_modules/simctl/simctl.js
+++ b/node_modules/simctl/simctl.js
@@ -26,8 +26,7 @@ var shell = require('shelljs'),
     path = require('path'),
     util = require('util'),
     Tail = require('tail').Tail,
-    SimCtlExtensions = require('./lib/simctl-extensions'),
-    SimCtlListParser = require('./lib/simctl-list-parser');
+    SimCtlExtensions = require('./lib/simctl-extensions');
 
 exports = module.exports = {
 
@@ -47,9 +46,9 @@ exports = module.exports = {
 
         if (obj.code !== 0) {
             obj.output  = 'simctl was not found.\n';
-            obj.output += 'Check that you have Xcode 7.x installed:\n';
+            obj.output += 'Check that you have Xcode 8.x installed:\n';
             obj.output += '\txcodebuild --version';
-            obj.output += 'Check that you have Xcode 7.x selected:\n';
+            obj.output += 'Check that you have Xcode 8.x selected:\n';
             obj.output += '\txcode-select --print-path';
         }
 
@@ -162,15 +161,16 @@ exports = module.exports = {
             sublist = 'devicetypes';
         } else if (options.runtimes) {
             sublist = 'runtimes';
+        } else if (options.pairs) {
+            sublist = 'pairs';
         }
 
-        var command = util.format('xcrun simctl list %s', sublist);
+        var command = util.format('xcrun simctl list %s --json', sublist);
         var obj = shell.exec(command, { silent: options.silent });
 
         if (obj.code === 0) {
             try {
-                var parser = new SimCtlListParser();
-                obj.json = parser.parse(obj.output);
+                obj.json = JSON.parse(obj.output);
             } catch (err) {
                 console.error(err.stack);
             }
diff --git a/node_modules/ios-sim/node_modules/simctl/spec/fixture/list.json b/node_modules/simctl/spec/fixture/list.json
similarity index 100%
rename from node_modules/ios-sim/node_modules/simctl/spec/fixture/list.json
rename to node_modules/simctl/spec/fixture/list.json
diff --git a/node_modules/simctl/spec/simctl-list-parser.spec.js b/node_modules/simctl/spec/simctl-list-parser.spec.js
deleted file mode 100644
index c5974f1..0000000
--- a/node_modules/simctl/spec/simctl-list-parser.spec.js
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2014 Shazron Abdullah.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
-
-var SimCtlListParser = require('../lib/simctl-list-parser');
-
-describe('list-parser device type tests', function() {
-
-    var parser = new SimCtlListParser();
-    var header = '== Device Types ==';
-
-    beforeEach(function() {
-        parser._clear();
-    });
-
-    afterEach(function() {
-    });
-
-    it('test parse iPhones', function() {
-        var lines = [
-            header,
-            'iPhone 4s (com.apple.CoreSimulator.SimDeviceType.iPhone-4s)',            
-            'iPhone 5 (com.apple.CoreSimulator.SimDeviceType.iPhone-5)',
-            'iPhone 5s (com.apple.CoreSimulator.SimDeviceType.iPhone-5s)',
-            'iPhone 6 (com.apple.CoreSimulator.SimDeviceType.iPhone-6)',
-            'iPhone 6 Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus)',
-            'iPhone 6s (com.apple.CoreSimulator.SimDeviceType.iPhone-6s)',
-            'iPhone 6s Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-6s-Plus)',
-            'iPhone 7 (com.apple.CoreSimulator.SimDeviceType.iPhone-7)',
-            'iPhone 7 Plus (com.apple.CoreSimulator.SimDeviceType.iPhone-7-Plus)',
-            'iPhone SE (com.apple.CoreSimulator.SimDeviceType.iPhone-SE)'
-        ];
-
-        var result = parser.parse(lines.join('\n'));
-        expect(result.devicetypes.length).toEqual(10);
-        expect(result.devices.length).toEqual(0);
-        expect(result.runtimes.length).toEqual(0);
-
-        expect(result.devicetypes[0].name).toEqual('iPhone 4s');
-        expect(result.devicetypes[0].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-4s');
-        expect(result.devicetypes[1].name).toEqual('iPhone 5');
-        expect(result.devicetypes[1].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-5');
-        expect(result.devicetypes[2].name).toEqual('iPhone 5s');
-        expect(result.devicetypes[2].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-5s');
-        expect(result.devicetypes[3].name).toEqual('iPhone 6');
-        expect(result.devicetypes[3].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-6');
-        expect(result.devicetypes[4].name).toEqual('iPhone 6 Plus');
-        expect(result.devicetypes[4].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-6-Plus');
-        expect(result.devicetypes[5].name).toEqual('iPhone 6s');
-        expect(result.devicetypes[5].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-6s');
-        expect(result.devicetypes[6].name).toEqual('iPhone 6s Plus');
-        expect(result.devicetypes[6].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-6s-Plus');
-        expect(result.devicetypes[7].name).toEqual('iPhone 7');
-        expect(result.devicetypes[7].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-7');
-        expect(result.devicetypes[8].name).toEqual('iPhone 7 Plus');
-        expect(result.devicetypes[8].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-7-Plus');
-        expect(result.devicetypes[9].name).toEqual('iPhone SE');
-        expect(result.devicetypes[9].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPhone-SE');
-    });
-
-    it('test parse iPads', function() {
-        var lines = [
-            header,
-            'iPad 2 (com.apple.CoreSimulator.SimDeviceType.iPad-2)',
-            'iPad Retina (com.apple.CoreSimulator.SimDeviceType.iPad-Retina)',
-            'iPad Air (com.apple.CoreSimulator.SimDeviceType.iPad-Air)',
-            'iPad Air 2 (com.apple.CoreSimulator.SimDeviceType.iPad-Air-2)',
-            'iPad Pro (9.7-inch) (com.apple.CoreSimulator.SimDeviceType.iPad-Pro--9-7-inch-)',
-            'iPad Pro (12.9-inch) (com.apple.CoreSimulator.SimDeviceType.iPad-Pro)'
-        ];
-
-        var result = parser.parse(lines.join('\n'));
-        expect(result.devicetypes.length).toEqual(6);
-        expect(result.devices.length).toEqual(0);
-        expect(result.runtimes.length).toEqual(0);
-
-        expect(result.devicetypes[0].name).toEqual('iPad 2');
-        expect(result.devicetypes[0].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPad-2');
-        expect(result.devicetypes[1].name).toEqual('iPad Retina');
-        expect(result.devicetypes[1].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPad-Retina');
-        expect(result.devicetypes[2].name).toEqual('iPad Air');
-        expect(result.devicetypes[2].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPad-Air');
-        expect(result.devicetypes[3].name).toEqual('iPad Air 2');
-        expect(result.devicetypes[3].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPad-Air-2');
-        expect(result.devicetypes[4].name).toEqual('iPad Pro (9.7-inch)');
-        expect(result.devicetypes[4].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPad-Pro--9-7-inch-');
-        expect(result.devicetypes[5].name).toEqual('iPad Pro (12.9-inch)');
-        expect(result.devicetypes[5].id).toEqual('com.apple.CoreSimulator.SimDeviceType.iPad-Pro');
-    });
-
-    it('test parse Apple Watches', function() {
-        var lines = [
-            header,
-            'Apple Watch - 38mm (com.apple.CoreSimulator.SimDeviceType.Apple-Watch-38mm)',
-            'Apple Watch - 42mm (com.apple.CoreSimulator.SimDeviceType.Apple-Watch-42mm)',
-            'Apple Watch Series 2 - 38mm (com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-2-38mm)',
-            'Apple Watch Series 2 - 42mm (com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-2-42mm)'
-        ];
-
-        var result = parser.parse(lines.join('\n'));
-        expect(result.devicetypes.length).toEqual(4);
-        expect(result.devices.length).toEqual(0);
-        expect(result.runtimes.length).toEqual(0);
-
-        expect(result.devicetypes[0].name).toEqual('Apple Watch - 38mm');
-        expect(result.devicetypes[0].id).toEqual('com.apple.CoreSimulator.SimDeviceType.Apple-Watch-38mm');
-        expect(result.devicetypes[1].name).toEqual('Apple Watch - 42mm');
-        expect(result.devicetypes[1].id).toEqual('com.apple.CoreSimulator.SimDeviceType.Apple-Watch-42mm');
-        expect(result.devicetypes[2].name).toEqual('Apple Watch Series 2 - 38mm');
-        expect(result.devicetypes[2].id).toEqual('com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-2-38mm');
-        expect(result.devicetypes[3].name).toEqual('Apple Watch Series 2 - 42mm');
-        expect(result.devicetypes[3].id).toEqual('com.apple.CoreSimulator.SimDeviceType.Apple-Watch-Series-2-42mm');
-    });
-
-    it('test parse Apple TVs', function() {
-        var lines = [
-            header,
-            'Apple TV 1080p (com.apple.CoreSimulator.SimDeviceType.Apple-TV-1080p)'
-        ];
-
-        var result = parser.parse(lines.join('\n'));
-        expect(result.devicetypes.length).toEqual(1);
-        expect(result.devices.length).toEqual(0);
-        expect(result.runtimes.length).toEqual(0);
-
-        expect(result.devicetypes[0].name).toEqual('Apple TV 1080p');
-        expect(result.devicetypes[0].id).toEqual('com.apple.CoreSimulator.SimDeviceType.Apple-TV-1080p');
-    });
-});
-
-describe('list-parser runtimes test', function() {
-
-    var parser = new SimCtlListParser();
-    var header = '== Runtimes ==';
-
-    beforeEach(function() {
-        parser._clear();
-    });
-
-    afterEach(function() {
-    });
-
-    it('test parse runtimes', function() {
-        var lines = [
-            header,
-            'iOS 8.4 (8.4 - 12H141) (com.apple.CoreSimulator.SimRuntime.iOS-8-4)',
-            'iOS 9.3 (9.3 - 13E233) (com.apple.CoreSimulator.SimRuntime.iOS-9-3)',
-            'iOS 10.0 (10.0 - 14A345) (com.apple.CoreSimulator.SimRuntime.iOS-10-0)',
-            'tvOS 10.0 (10.0 - 14A345) (com.apple.CoreSimulator.SimRuntime.tvOS-10-0)',
-            'watchOS 3.0 (10.0 - 14A345) (com.apple.CoreSimulator.SimRuntime.watchOS-3-0)'
-        ];
-
-        var result = parser.parse(lines.join('\n'));
-        expect(result.devicetypes.length).toEqual(0);
-        expect(result.devices.length).toEqual(0);
-        expect(result.runtimes.length).toEqual(5);
-
-        expect(result.runtimes[0].name).toEqual('iOS 8.4');
-        expect(result.runtimes[0].build).toEqual('8.4 - 12H141');
-        expect(result.runtimes[0].id).toEqual('com.apple.CoreSimulator.SimRuntime.iOS-8-4');
-        expect(result.runtimes[0].available).toEqual(true);
-        expect(result.runtimes[1].name).toEqual('iOS 9.3');
-        expect(result.runtimes[1].build).toEqual('9.3 - 13E233');
-        expect(result.runtimes[1].id).toEqual('com.apple.CoreSimulator.SimRuntime.iOS-9-3');
-        expect(result.runtimes[1].available).toEqual(true);
-        expect(result.runtimes[2].name).toEqual('iOS 10.0');
-        expect(result.runtimes[2].build).toEqual('10.0 - 14A345');
-        expect(result.runtimes[2].id).toEqual('com.apple.CoreSimulator.SimRuntime.iOS-10-0');
-        expect(result.runtimes[2].available).toEqual(true);
-        expect(result.runtimes[3].name).toEqual('tvOS 10.0');
-        expect(result.runtimes[3].build).toEqual('10.0 - 14A345');
-        expect(result.runtimes[3].id).toEqual('com.apple.CoreSimulator.SimRuntime.tvOS-10-0');
-        expect(result.runtimes[3].available).toEqual(true);
-        expect(result.runtimes[4].name).toEqual('watchOS 3.0');
-        expect(result.runtimes[4].build).toEqual('10.0 - 14A345');
-        expect(result.runtimes[4].id).toEqual('com.apple.CoreSimulator.SimRuntime.watchOS-3-0');
-        expect(result.runtimes[4].available).toEqual(true);
-    });
-});
-
-describe('list-parser test Devices', function() {
-
-    var parser = new SimCtlListParser();
-    var header = '== Devices ==';
-
-    beforeEach(function() {
-        parser._clear();
-    });
-
-    afterEach(function() {
-    });
-
-    it('test parse iPhone and iPad', function() {
-        var lines = [
-            header,
-            '-- iOS 8.4 --',
-            '    Resizable iPad (E7348A97-6719-476F-B5A9-0C7F32336F0B) (Shutdown) (unavailable, device type profile not found)',
-            '    Resizable iPhone (6B3D08F5-6010-4934-8259-81F0F5F86E20) (Shutdown) (unavailable, device type profile not found)',
-            '-- iOS 9.3 --',
-            '    iPad Air 2 (9E3E156C-A96F-4D61-A2BB-D72F0BE2E7BB) (Shutdown)',
-            '    iPad Pro (5B0E98E8-517D-49A7-860A-B7F820DA9C23) (Shutdown)',
-            '-- iOS 10.0 --',
-            '    iPhone 6s (8C41DBA3-0F78-43FF-AE92-845D35DDD39D) (Shutdown)',
-            '    iPhone 6s Plus (1B4E1A98-2408-404A-BEFC-F723A6889A63) (Shutdown)',
-            '    iPhone 7 (87894360-0337-459E-816E-AE5EFD0A4570) (Shutdown)',
-            '    iPhone 7 Plus (8D85405B-96CA-4268-87D1-CE594567F5EF) (Shutdown)',
-            '    iPhone SE (175D9F25-0B08-4E4B-AD39-E3CBAC72CB4B) (Shutdown)',
-            '    iPad Pro (9.7 inch) (1C5590C8-8AE7-4C27-AD06-84C801702945) (Shutdown)',
-            '    iPad Pro (12.9 inch) (065BAEBF-1D7D-4B3B-B30D-79529356065B) (Shutdown)',
-            '-- tvOS 10.0 --',
-            '    Apple TV 1080p (1A360376-E68E-45C2-8DBB-48BF7C60B4FB) (Shutdown)',
-            '-- watchOS 3.0 --',
-            '    Apple Watch - 38mm (349DD23B-689C-43E4-A1F5-304C3E4DCFDD) (Shutdown)',
-            '    Apple Watch - 42mm (B932A73B-477F-47A7-AB29-1E98D3F9095C) (Shutdown)',
-            '    Apple Watch Series 2 - 38mm (B4BB8453-349F-4CBF-A5A9-87BE602DB13E) (Shutdown)',
-            '    Apple Watch Series 2 - 42mm (0C527828-EBF4-4FD0-A66B-200FE716EB37) (Shutdown)',
-            '-- Unavailable: com.apple.CoreSimulator.SimRuntime.iOS-9-1 --',
-            '    iPhone 4s (A27C69F5-1AFF-48D2-92B0-951F7E037E9C) (Shutdown) (unavailable, runtime profile not found)'
-        ];
-
-        var result = parser.parse(lines.join('\n'));
-        expect(result.devicetypes.length).toEqual(0);
-        expect(result.devices.length).toEqual(6);
-        expect(result.runtimes.length).toEqual(0);
-
-        var device = result.devices[0]; 
-        expect(device.runtime).toEqual('iOS 8.4');
-        expect(device.devices[0].name).toEqual('Resizable iPad');
-        expect(device.devices[0].id).toEqual('E7348A97-6719-476F-B5A9-0C7F32336F0B');
-        expect(device.devices[0].state).toEqual('Shutdown');
-        expect(device.devices[0].available).toEqual(false);
-        expect(device.devices[1].name).toEqual('Resizable iPhone');
-        expect(device.devices[1].id).toEqual('6B3D08F5-6010-4934-8259-81F0F5F86E20');
-        expect(device.devices[1].state).toEqual('Shutdown');
-        expect(device.devices[1].available).toEqual(false);
-
-        device = result.devices[1];
-        expect(device.runtime).toEqual('iOS 9.3');
-        expect(device.devices[0].name).toEqual('iPad Air 2');
-        expect(device.devices[0].id).toEqual('9E3E156C-A96F-4D61-A2BB-D72F0BE2E7BB');
-        expect(device.devices[0].state).toEqual('Shutdown');
-        expect(device.devices[0].available).toEqual(true);
-        expect(device.devices[1].name).toEqual('iPad Pro');
-        expect(device.devices[1].id).toEqual('5B0E98E8-517D-49A7-860A-B7F820DA9C23');
-        expect(device.devices[1].state).toEqual('Shutdown');
-        expect(device.devices[1].available).toEqual(true);
-
-        device = result.devices[2];
-        expect(device.runtime).toEqual('iOS 10.0');
-        expect(device.devices[0].name).toEqual('iPhone 6s');
-        expect(device.devices[0].id).toEqual('8C41DBA3-0F78-43FF-AE92-845D35DDD39D');
-        expect(device.devices[0].state).toEqual('Shutdown');
-        expect(device.devices[0].available).toEqual(true);
-        expect(device.devices[1].name).toEqual('iPhone 6s Plus');
-        expect(device.devices[1].id).toEqual('1B4E1A98-2408-404A-BEFC-F723A6889A63');
-        expect(device.devices[1].state).toEqual('Shutdown');
-        expect(device.devices[1].available).toEqual(true);
-        expect(device.devices[2].name).toEqual('iPhone 7');
-        expect(device.devices[2].id).toEqual('87894360-0337-459E-816E-AE5EFD0A4570');
-        expect(device.devices[2].state).toEqual('Shutdown');
-        expect(device.devices[2].available).toEqual(true);
-        expect(device.devices[3].name).toEqual('iPhone 7 Plus');
-        expect(device.devices[3].id).toEqual('8D85405B-96CA-4268-87D1-CE594567F5EF');
-        expect(device.devices[3].state).toEqual('Shutdown');
-        expect(device.devices[3].available).toEqual(true);
-        expect(device.devices[4].name).toEqual('iPhone SE');
-        expect(device.devices[4].id).toEqual('175D9F25-0B08-4E4B-AD39-E3CBAC72CB4B');
-        expect(device.devices[4].state).toEqual('Shutdown');
-        expect(device.devices[4].available).toEqual(true);
-        expect(device.devices[5].name).toEqual('iPad Pro (9.7 inch)');
-        expect(device.devices[5].id).toEqual('1C5590C8-8AE7-4C27-AD06-84C801702945');
-        expect(device.devices[5].state).toEqual('Shutdown');
-        expect(device.devices[5].available).toEqual(true);
-        expect(device.devices[6].name).toEqual('iPad Pro (12.9 inch)');
-        expect(device.devices[6].id).toEqual('065BAEBF-1D7D-4B3B-B30D-79529356065B');
-        expect(device.devices[6].state).toEqual('Shutdown');
-        expect(device.devices[6].available).toEqual(true);
-
-        // tvOS //////////
-
-        device = result.devices[3]; 
-        expect(device.runtime).toEqual('tvOS 10.0');
-        expect(device.devices[0].name).toEqual('Apple TV 1080p');
-        expect(device.devices[0].id).toEqual('1A360376-E68E-45C2-8DBB-48BF7C60B4FB');
-        expect(device.devices[0].state).toEqual('Shutdown');
-        expect(device.devices[0].available).toEqual(true);
-
-        // watchOS //////////
-
-        device = result.devices[4]; 
-        expect(device.runtime).toEqual('watchOS 3.0');
-        expect(device.devices[0].name).toEqual('Apple Watch - 38mm');
-        expect(device.devices[0].id).toEqual('349DD23B-689C-43E4-A1F5-304C3E4DCFDD');
-        expect(device.devices[0].state).toEqual('Shutdown');
-        expect(device.devices[0].available).toEqual(true);
-        expect(device.devices[1].name).toEqual('Apple Watch - 42mm');
-        expect(device.devices[1].id).toEqual('B932A73B-477F-47A7-AB29-1E98D3F9095C');
-        expect(device.devices[1].state).toEqual('Shutdown');
-        expect(device.devices[1].available).toEqual(true);
-        expect(device.devices[2].name).toEqual('Apple Watch Series 2 - 38mm');
-        expect(device.devices[2].id).toEqual('B4BB8453-349F-4CBF-A5A9-87BE602DB13E');
-        expect(device.devices[2].state).toEqual('Shutdown');
-        expect(device.devices[2].available).toEqual(true);
-        expect(device.devices[3].name).toEqual('Apple Watch Series 2 - 42mm');
-        expect(device.devices[3].id).toEqual('0C527828-EBF4-4FD0-A66B-200FE716EB37');
-        expect(device.devices[3].state).toEqual('Shutdown');
-        expect(device.devices[3].available).toEqual(true);
-
-        // Unavailable //////////
-
-        device = result.devices[5]; 
-        expect(device.runtime).toEqual('Unavailable: com.apple.CoreSimulator.SimRuntime.iOS-9-1');
-        expect(device.devices[0].name).toEqual('iPhone 4s');
-        expect(device.devices[0].id).toEqual('A27C69F5-1AFF-48D2-92B0-951F7E037E9C');
-        expect(device.devices[0].state).toEqual('Shutdown');
-        expect(device.devices[0].available).toEqual(false);
-    });
-});
-
-describe('list-parser test Device Pairs', function() {
-
-    var parser = new SimCtlListParser();
-    var header = '== Device Pairs ==';
-
-    beforeEach(function() {
-        parser._clear();
-    });
-
-    afterEach(function() {
-    });
-
-    it('test parse', function() {
-        // TODO: see https://github.com/phonegap/simctl/issues/3
-        expect(true).toBe(true);
-    });
-
-});
\ No newline at end of file
diff --git a/node_modules/simple-plist/node_modules/base64-js/package.json b/node_modules/simple-plist/node_modules/base64-js/package.json
index 948ff34..05360a8 100644
--- a/node_modules/simple-plist/node_modules/base64-js/package.json
+++ b/node_modules/simple-plist/node_modules/base64-js/package.json
@@ -10,7 +10,7 @@
         "spec": "1.1.2",
         "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simple-plist/node_modules/plist"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/simple-plist/node_modules/plist"
     ]
   ],
   "_from": "base64-js@1.1.2",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/simple-plist/plist"
   ],
-  "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz",
+  "_resolved": "http://registry.npmjs.org/base64-js/-/base64-js-1.1.2.tgz",
   "_shasum": "d6400cac1c4c660976d90d07a04351d89395f5e8",
   "_shrinkwrap": null,
   "_spec": "base64-js@1.1.2",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simple-plist/node_modules/plist",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/simple-plist/node_modules/plist",
   "author": {
     "name": "T. Jameson Little",
     "email": "t.jameson.little@gmail.com"
@@ -82,7 +82,8 @@
   ],
   "name": "base64-js",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "base64-js\n=========\n\n`base64-js` does basic base64 encoding/decoding in pure JS.\n\n[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js)\n\n[![testling badge](https://ci.testling.com/beatgammit/base64-js.png)](https://ci.testling.com/beatgammit/base64-js)\n\nMany browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data.\n\nSometimes encoding/decoding bi [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/beatgammit/base64-js.git"
diff --git a/node_modules/simple-plist/node_modules/plist/package.json b/node_modules/simple-plist/node_modules/plist/package.json
index 9176749..ff9b9c6 100644
--- a/node_modules/simple-plist/node_modules/plist/package.json
+++ b/node_modules/simple-plist/node_modules/plist/package.json
@@ -10,7 +10,7 @@
         "spec": "2.0.1",
         "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simple-plist"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/simple-plist"
     ]
   ],
   "_from": "plist@2.0.1",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/simple-plist"
   ],
-  "_resolved": "https://registry.npmjs.org/plist/-/plist-2.0.1.tgz",
+  "_resolved": "http://registry.npmjs.org/plist/-/plist-2.0.1.tgz",
   "_shasum": "0a32ca9481b1c364e92e18dc55c876de9d01da8b",
   "_shrinkwrap": null,
   "_spec": "plist@2.0.1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simple-plist",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/simple-plist",
   "author": {
     "name": "Nathan Rajlich",
     "email": "nathan@tootallnate.net"
@@ -116,7 +116,8 @@
   ],
   "name": "plist",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "plist.js\n========\n### Mac OS X Plist parser/builder for Node.js and browsers\n\n[![Sauce Test Status](https://saucelabs.com/browser-matrix/plistjs.svg)](https://saucelabs.com/u/plistjs)\n\n[![Build Status](https://travis-ci.org/TooTallNate/plist.js.svg?branch=master)](https://travis-ci.org/TooTallNate/plist.js)\n\nProvides facilities for reading and writing Mac OS X Plist (property list)\nfiles. These are often used in programming OS X and iOS applications, as\nwell as the [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/TooTallNate/node-plist.git"
diff --git a/node_modules/simple-plist/node_modules/xmlbuilder/package.json b/node_modules/simple-plist/node_modules/xmlbuilder/package.json
index b19c56e..0141bc6 100644
--- a/node_modules/simple-plist/node_modules/xmlbuilder/package.json
+++ b/node_modules/simple-plist/node_modules/xmlbuilder/package.json
@@ -10,7 +10,7 @@
         "spec": "8.2.2",
         "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simple-plist/node_modules/plist"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/simple-plist/node_modules/plist"
     ]
   ],
   "_from": "xmlbuilder@8.2.2",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/simple-plist/plist"
   ],
-  "_resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
+  "_resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
   "_shasum": "69248673410b4ba42e1a6136551d2922335aa773",
   "_shrinkwrap": null,
   "_spec": "xmlbuilder@8.2.2",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simple-plist/node_modules/plist",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/simple-plist/node_modules/plist",
   "author": {
     "name": "Ozgur Ozcitak",
     "email": "oozcitak@gmail.com"
@@ -86,7 +86,8 @@
   ],
   "name": "xmlbuilder",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# xmlbuilder-js\n\nAn XML builder for [node.js](https://nodejs.org/) similar to\n[java-xmlbuilder](https://github.com/jmurty/java-xmlbuilder).\n\n[![License](http://img.shields.io/npm/l/xmlbuilder.svg?style=flat-square)](http://opensource.org/licenses/MIT)\n[![NPM Version](http://img.shields.io/npm/v/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder)\n[![NPM Downloads](https://img.shields.io/npm/dm/xmlbuilder.svg?style=flat-square)](https://npmjs.com/pa [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/oozcitak/xmlbuilder-js.git"
diff --git a/node_modules/simple-plist/package.json b/node_modules/simple-plist/package.json
index 9abb228..b2d5159 100644
--- a/node_modules/simple-plist/package.json
+++ b/node_modules/simple-plist/package.json
@@ -10,7 +10,7 @@
         "spec": ">=0.2.1 <0.3.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xcode"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/xcode"
     ]
   ],
   "_from": "simple-plist@>=0.2.1 <0.3.0",
@@ -42,11 +42,11 @@
   "_requiredBy": [
     "/xcode"
   ],
-  "_resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz",
+  "_resolved": "http://registry.npmjs.org/simple-plist/-/simple-plist-0.2.1.tgz",
   "_shasum": "71766db352326928cf3a807242ba762322636723",
   "_shrinkwrap": null,
   "_spec": "simple-plist@^0.2.1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xcode",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/xcode",
   "author": {
     "name": "Joe Wollard"
   },
@@ -93,7 +93,8 @@
   ],
   "name": "simple-plist",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "node-simple-plist\n=================\n\nA simple API for interacting with binary and plain text plist data.\n\n\n## Installation\n```sh\n$ npm install simple-plist\n```\n\n\n## Reading Data\n```js\nvar plist = require('simple-plist');\n\n// Read data from a file (xml or binary) (asynchronous)\nplist.readFile('/path/to/some.plist', function(err,data){\n\tif (err) {throw err;}\n\tconsole.log( JSON.stringify(data) );\n});\n\n// Read data from a file (xml or binary) (synchronous [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/wollardj/node-simple-plist.git"
diff --git a/node_modules/stream-buffers/package.json b/node_modules/stream-buffers/package.json
index 9f154be..23aa70f 100644
--- a/node_modules/stream-buffers/package.json
+++ b/node_modules/stream-buffers/package.json
@@ -10,7 +10,7 @@
         "spec": ">=2.2.0 <2.3.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/bplist-creator"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/bplist-creator"
     ]
   ],
   "_from": "stream-buffers@>=2.2.0 <2.3.0",
@@ -36,11 +36,11 @@
   "_requiredBy": [
     "/bplist-creator"
   ],
-  "_resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
+  "_resolved": "http://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
   "_shasum": "91d5f5130d1cef96dcfa7f726945188741d09ee4",
   "_shrinkwrap": null,
   "_spec": "stream-buffers@~2.2.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/bplist-creator",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/bplist-creator",
   "author": {
     "name": "Sam Day",
     "email": "me@samcday.com.au"
@@ -79,7 +79,8 @@
   ],
   "name": "stream-buffers",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# Node Stream Buffers\r\n\r\n[![Build Status][badge-travis-img]][badge-travis-url]\r\n[![Code Climate][badge-climate-img]][badge-climate-url]\r\n[![Code Coverage][badge-coverage-img]][badge-coverage-url]\r\n\r\nSimple Readable and Writable Streams that use a [Buffer][node-buffer-docs] to store received data, or for data to send out. Useful for test code, debugging, and a wide range of other utilities.\r\n\r\n## Installation\r\n\r\n[![NPM][badge-npm-img]][badge-npm-url]\r\n\r [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/samcday/node-stream-buffer.git"
diff --git a/node_modules/tail/package.json b/node_modules/tail/package.json
index 1d42ca9..5ac4060 100644
--- a/node_modules/tail/package.json
+++ b/node_modules/tail/package.json
@@ -10,7 +10,7 @@
         "spec": ">=0.4.0 <0.5.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simctl"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/simctl"
     ]
   ],
   "_from": "tail@>=0.4.0 <0.5.0",
@@ -39,7 +39,7 @@
   "_shasum": "d29de72750cc99db1e053aff13c359ecfb713002",
   "_shrinkwrap": null,
   "_spec": "tail@^0.4.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/simctl",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/simctl",
   "author": {
     "name": "Luca Grulla"
   },
@@ -70,7 +70,7 @@
   "engines": {
     "node": ">= 0.4.0"
   },
-  "homepage": "https://github.com/lucagrulla/node-tail",
+  "homepage": "https://github.com/lucagrulla/node-tail#readme",
   "main": "tail",
   "maintainers": [
     {
@@ -80,7 +80,8 @@
   ],
   "name": "tail",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "#tail\n\nTo install:\n\n```bash\nnpm install tail\n```\n\n#Use:\n```javascript\nTail = require('tail').Tail;\n\ntail = new Tail(\"fileToTail\");\n\ntail.on(\"line\", function(data) {\n  console.log(data);\n});\n\ntail.on(\"error\", function(error) {\n  console.log('ERROR: ', error);\n});\n````\n\nTail constructor accepts few parameters:\n\n```javascript\n\nvar fileToTail = \"/path/to/fileToTail.txt\";\nvar lineSeparator= \"\\n\";\nvar fromBeginning = false;\nvar watchOptions [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/lucagrulla/node-tail.git"
diff --git a/node_modules/underscore/package.json b/node_modules/underscore/package.json
index 490c525..f573578 100644
--- a/node_modules/underscore/package.json
+++ b/node_modules/underscore/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.8.3 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
   "_from": "underscore@>=1.8.3 <2.0.0",
@@ -35,11 +35,11 @@
   "_requiredBy": [
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+  "_resolved": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
   "_shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022",
   "_shrinkwrap": null,
   "_spec": "underscore@^1.8.3",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "author": {
     "name": "Jeremy Ashkenas",
     "email": "jeremy@documentcloud.org"
@@ -87,7 +87,8 @@
   ],
   "name": "underscore",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "                       __\n                      /\\ \\                                                         __\n     __  __    ___    \\_\\ \\     __   _ __   ____    ___    ___   _ __    __       /\\_\\    ____\n    /\\ \\/\\ \\ /' _ `\\  /'_  \\  /'__`\\/\\  __\\/ ,__\\  / ___\\ / __`\\/\\  __\\/'__`\\     \\/\\ \\  /',__\\\n    \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\  __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\  __/  __  \\ \\ \\/\\__, `\\\n     \\ \\____/ [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/jashkenas/underscore.git"
diff --git a/node_modules/unorm/package.json b/node_modules/unorm/package.json
index 5abd9b9..306deba 100644
--- a/node_modules/unorm/package.json
+++ b/node_modules/unorm/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.3.3 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common"
     ]
   ],
   "_from": "unorm@>=1.3.3 <2.0.0",
@@ -35,11 +35,11 @@
   "_requiredBy": [
     "/cordova-common"
   ],
-  "_resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz",
+  "_resolved": "http://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz",
   "_shasum": "364200d5f13646ca8bcd44490271335614792300",
   "_shrinkwrap": null,
   "_spec": "unorm@^1.3.3",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/cordova-common",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/cordova-common",
   "author": {
     "name": "Bjarke Walling",
     "email": "bwp@bwp.dk"
@@ -80,7 +80,7 @@
     "node": ">= 0.4.0"
   },
   "gitHead": "e802d0d7844cf74b03742bce1147a82ace218396",
-  "homepage": "https://github.com/walling/unorm",
+  "homepage": "https://github.com/walling/unorm#readme",
   "license": "MIT or GPL-2.0",
   "main": "./lib/unorm.js",
   "maintainers": [
@@ -91,7 +91,8 @@
   ],
   "name": "unorm",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "This is [Unicode Normalizer] in a Common JS module. I'm not affiliated with Matsuza, the original author of Unicode Normalizer.\n\n[![Build Status](https://travis-ci.org/walling/unorm.png?branch=master)](https://travis-ci.org/walling/unorm)\n\n\nInstallation\n------------\n\n```bash\nnpm install unorm\n```\n\nPolyfill\n--------\n\nYou can use this module as a polyfill for [String.prototype.normalize], for example:\n\n```javascript\nconsole.log('æøåäüö'.normalize('NFKD'));\n` [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+ssh://git@github.com/walling/unorm.git"
diff --git a/node_modules/util-deprecate/package.json b/node_modules/util-deprecate/package.json
index 583fa25..4145b6a 100644
--- a/node_modules/util-deprecate/package.json
+++ b/node_modules/util-deprecate/package.json
@@ -10,7 +10,7 @@
         "spec": "1.0.2",
         "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/plist"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/plist"
     ]
   ],
   "_from": "util-deprecate@1.0.2",
@@ -40,7 +40,7 @@
   "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf",
   "_shrinkwrap": null,
   "_spec": "util-deprecate@1.0.2",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/plist",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/plist",
   "author": {
     "name": "Nathan Rajlich",
     "email": "nathan@tootallnate.net",
@@ -77,7 +77,8 @@
   ],
   "name": "util-deprecate",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "util-deprecate\n==============\n### The Node.js `util.deprecate()` function with browser support\n\nIn Node.js, this module simply re-exports the `util.deprecate()` function.\n\nIn the web browser (i.e. via browserify), a browser-specific implementation\nof the `util.deprecate()` function is used.\n\n\n## API\n\nA `deprecate()` function is the only thing exposed by this module.\n\n``` javascript\n// setup:\nexports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/TooTallNate/util-deprecate.git"
diff --git a/node_modules/xcode/node_modules/uuid/.npmignore b/node_modules/uuid/.npmignore
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/.npmignore
rename to node_modules/uuid/.npmignore
diff --git a/node_modules/xcode/node_modules/uuid/.travis.yml b/node_modules/uuid/.travis.yml
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/.travis.yml
rename to node_modules/uuid/.travis.yml
diff --git a/node_modules/xcode/node_modules/uuid/AUTHORS b/node_modules/uuid/AUTHORS
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/AUTHORS
rename to node_modules/uuid/AUTHORS
diff --git a/node_modules/xcode/node_modules/uuid/HISTORY.md b/node_modules/uuid/HISTORY.md
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/HISTORY.md
rename to node_modules/uuid/HISTORY.md
diff --git a/node_modules/xcode/node_modules/uuid/LICENSE.md b/node_modules/uuid/LICENSE.md
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/LICENSE.md
rename to node_modules/uuid/LICENSE.md
diff --git a/node_modules/xcode/node_modules/uuid/README.md b/node_modules/uuid/README.md
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/README.md
rename to node_modules/uuid/README.md
diff --git a/node_modules/xcode/node_modules/uuid/bin/uuid b/node_modules/uuid/bin/uuid
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/bin/uuid
rename to node_modules/uuid/bin/uuid
diff --git a/node_modules/xcode/node_modules/uuid/index.js b/node_modules/uuid/index.js
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/index.js
rename to node_modules/uuid/index.js
diff --git a/node_modules/xcode/node_modules/uuid/lib/bytesToUuid.js b/node_modules/uuid/lib/bytesToUuid.js
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/lib/bytesToUuid.js
rename to node_modules/uuid/lib/bytesToUuid.js
diff --git a/node_modules/xcode/node_modules/uuid/lib/rng-browser.js b/node_modules/uuid/lib/rng-browser.js
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/lib/rng-browser.js
rename to node_modules/uuid/lib/rng-browser.js
diff --git a/node_modules/xcode/node_modules/uuid/lib/rng.js b/node_modules/uuid/lib/rng.js
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/lib/rng.js
rename to node_modules/uuid/lib/rng.js
diff --git a/node_modules/uuid/package.json b/node_modules/uuid/package.json
new file mode 100644
index 0000000..4af07fa
--- /dev/null
+++ b/node_modules/uuid/package.json
@@ -0,0 +1,123 @@
+{
+  "_args": [
+    [
+      {
+        "raw": "uuid@3.0.1",
+        "scope": null,
+        "escapedName": "uuid",
+        "name": "uuid",
+        "rawSpec": "3.0.1",
+        "spec": "3.0.1",
+        "type": "version"
+      },
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/xcode"
+    ]
+  ],
+  "_from": "uuid@3.0.1",
+  "_id": "uuid@3.0.1",
+  "_inCache": true,
+  "_location": "/uuid",
+  "_nodeVersion": "6.7.0",
+  "_npmOperationalInternal": {
+    "host": "packages-12-west.internal.npmjs.com",
+    "tmp": "tmp/uuid-3.0.1.tgz_1480403886767_0.2584113120101392"
+  },
+  "_npmUser": {
+    "name": "defunctzombie",
+    "email": "shtylman@gmail.com"
+  },
+  "_npmVersion": "3.10.3",
+  "_phantomChildren": {},
+  "_requested": {
+    "raw": "uuid@3.0.1",
+    "scope": null,
+    "escapedName": "uuid",
+    "name": "uuid",
+    "rawSpec": "3.0.1",
+    "spec": "3.0.1",
+    "type": "version"
+  },
+  "_requiredBy": [
+    "/xcode"
+  ],
+  "_resolved": "http://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+  "_shasum": "6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1",
+  "_shrinkwrap": null,
+  "_spec": "uuid@3.0.1",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/xcode",
+  "bin": {
+    "uuid": "./bin/uuid"
+  },
+  "browser": {
+    "./lib/rng.js": "./lib/rng-browser.js"
+  },
+  "bugs": {
+    "url": "https://github.com/kelektiv/node-uuid/issues"
+  },
+  "contributors": [
+    {
+      "name": "Robert Kieffer",
+      "email": "robert@broofa.com"
+    },
+    {
+      "name": "Christoph Tavan",
+      "email": "dev@tavan.de"
+    },
+    {
+      "name": "AJ ONeal",
+      "email": "coolaj86@gmail.com"
+    },
+    {
+      "name": "Vincent Voyer",
+      "email": "vincent@zeroload.net"
+    },
+    {
+      "name": "Roman Shtylman",
+      "email": "shtylman@gmail.com"
+    }
+  ],
+  "dependencies": {},
+  "description": "RFC4122 (v1 and v4) generator",
+  "devDependencies": {
+    "mocha": "3.1.2"
+  },
+  "directories": {},
+  "dist": {
+    "shasum": "6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1",
+    "tarball": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz"
+  },
+  "gitHead": "374de826de71d8997f71b4641f65552e48956ced",
+  "homepage": "https://github.com/kelektiv/node-uuid#readme",
+  "keywords": [
+    "uuid",
+    "guid",
+    "rfc4122"
+  ],
+  "license": "MIT",
+  "maintainers": [
+    {
+      "name": "broofa",
+      "email": "robert@broofa.com"
+    },
+    {
+      "name": "defunctzombie",
+      "email": "shtylman@gmail.com"
+    },
+    {
+      "name": "vvo",
+      "email": "vincent.voyer@gmail.com"
+    }
+  ],
+  "name": "uuid",
+  "optionalDependencies": {},
+  "readme": "# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) #\n\nSimple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.\n\nFeatures:\n\n* Generate RFC4122 version 1 or version 4 UUIDs\n* Runs in node.js and browsers\n* Cryptographically strong random number generation on supporting platforms\n* Small footprint  (Want something smaller? [Check this out](https://gist.github.com/9 [...]
+  "readmeFilename": "README.md",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/kelektiv/node-uuid.git"
+  },
+  "scripts": {
+    "test": "mocha test/test.js"
+  },
+  "version": "3.0.1"
+}
diff --git a/node_modules/xcode/node_modules/uuid/test/mocha.opts b/node_modules/uuid/test/mocha.opts
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/test/mocha.opts
rename to node_modules/uuid/test/mocha.opts
diff --git a/node_modules/xcode/node_modules/uuid/test/test.js b/node_modules/uuid/test/test.js
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/test/test.js
rename to node_modules/uuid/test/test.js
diff --git a/node_modules/xcode/node_modules/uuid/v1.js b/node_modules/uuid/v1.js
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/v1.js
rename to node_modules/uuid/v1.js
diff --git a/node_modules/xcode/node_modules/uuid/v4.js b/node_modules/uuid/v4.js
similarity index 100%
rename from node_modules/xcode/node_modules/uuid/v4.js
rename to node_modules/uuid/v4.js
diff --git a/node_modules/wrappy/package.json b/node_modules/wrappy/package.json
index 0db5ed9..9a6e686 100644
--- a/node_modules/wrappy/package.json
+++ b/node_modules/wrappy/package.json
@@ -10,7 +10,7 @@
         "spec": ">=1.0.0 <2.0.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/inflight"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/inflight"
     ]
   ],
   "_from": "wrappy@>=1.0.0 <2.0.0",
@@ -41,11 +41,11 @@
     "/inflight",
     "/once"
   ],
-  "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+  "_resolved": "http://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
   "_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
   "_shrinkwrap": null,
   "_spec": "wrappy@1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/inflight",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/inflight",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -85,7 +85,8 @@
   ],
   "name": "wrappy",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# wrappy\n\nCallback wrapping utility\n\n## USAGE\n\n```javascript\nvar wrappy = require(\"wrappy\")\n\n// var wrapper = wrappy(wrapperFunction)\n\n// make sure a cb is called only once\n// See also: http://npm.im/once for this specific use case\nvar once = wrappy(function (cb) {\n  var called = false\n  return function () {\n    if (called) return\n    called = true\n    return cb.apply(this, arguments)\n  }\n})\n\nfunction printBoo () {\n  console.log('boo')\n}\n// has som [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/npm/wrappy.git"
diff --git a/node_modules/xcode/node_modules/.bin/uuid b/node_modules/xcode/node_modules/.bin/uuid
deleted file mode 120000
index b3e45bc..0000000
--- a/node_modules/xcode/node_modules/.bin/uuid
+++ /dev/null
@@ -1 +0,0 @@
-../uuid/bin/uuid
\ No newline at end of file
diff --git a/node_modules/xcode/node_modules/uuid/package.json b/node_modules/xcode/node_modules/uuid/package.json
deleted file mode 100644
index 1b3b7dc..0000000
--- a/node_modules/xcode/node_modules/uuid/package.json
+++ /dev/null
@@ -1,122 +0,0 @@
-{
-  "_args": [
-    [
-      {
-        "raw": "uuid@3.0.1",
-        "scope": null,
-        "escapedName": "uuid",
-        "name": "uuid",
-        "rawSpec": "3.0.1",
-        "spec": "3.0.1",
-        "type": "version"
-      },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xcode"
-    ]
-  ],
-  "_from": "uuid@3.0.1",
-  "_id": "uuid@3.0.1",
-  "_inCache": true,
-  "_location": "/xcode/uuid",
-  "_nodeVersion": "6.7.0",
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/uuid-3.0.1.tgz_1480403886767_0.2584113120101392"
-  },
-  "_npmUser": {
-    "name": "defunctzombie",
-    "email": "shtylman@gmail.com"
-  },
-  "_npmVersion": "3.10.3",
-  "_phantomChildren": {},
-  "_requested": {
-    "raw": "uuid@3.0.1",
-    "scope": null,
-    "escapedName": "uuid",
-    "name": "uuid",
-    "rawSpec": "3.0.1",
-    "spec": "3.0.1",
-    "type": "version"
-  },
-  "_requiredBy": [
-    "/xcode"
-  ],
-  "_resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
-  "_shasum": "6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1",
-  "_shrinkwrap": null,
-  "_spec": "uuid@3.0.1",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/xcode",
-  "bin": {
-    "uuid": "./bin/uuid"
-  },
-  "browser": {
-    "./lib/rng.js": "./lib/rng-browser.js"
-  },
-  "bugs": {
-    "url": "https://github.com/kelektiv/node-uuid/issues"
-  },
-  "contributors": [
-    {
-      "name": "Robert Kieffer",
-      "email": "robert@broofa.com"
-    },
-    {
-      "name": "Christoph Tavan",
-      "email": "dev@tavan.de"
-    },
-    {
-      "name": "AJ ONeal",
-      "email": "coolaj86@gmail.com"
-    },
-    {
-      "name": "Vincent Voyer",
-      "email": "vincent@zeroload.net"
-    },
-    {
-      "name": "Roman Shtylman",
-      "email": "shtylman@gmail.com"
-    }
-  ],
-  "dependencies": {},
-  "description": "RFC4122 (v1 and v4) generator",
-  "devDependencies": {
-    "mocha": "3.1.2"
-  },
-  "directories": {},
-  "dist": {
-    "shasum": "6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1",
-    "tarball": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz"
-  },
-  "gitHead": "374de826de71d8997f71b4641f65552e48956ced",
-  "homepage": "https://github.com/kelektiv/node-uuid#readme",
-  "keywords": [
-    "uuid",
-    "guid",
-    "rfc4122"
-  ],
-  "license": "MIT",
-  "maintainers": [
-    {
-      "name": "broofa",
-      "email": "robert@broofa.com"
-    },
-    {
-      "name": "defunctzombie",
-      "email": "shtylman@gmail.com"
-    },
-    {
-      "name": "vvo",
-      "email": "vincent.voyer@gmail.com"
-    }
-  ],
-  "name": "uuid",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/kelektiv/node-uuid.git"
-  },
-  "scripts": {
-    "test": "mocha test/test.js"
-  },
-  "version": "3.0.1"
-}
diff --git a/node_modules/xcode/package.json b/node_modules/xcode/package.json
index d24741c..497e923 100644
--- a/node_modules/xcode/package.json
+++ b/node_modules/xcode/package.json
@@ -10,7 +10,7 @@
         "spec": ">=0.9.0 <0.10.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios"
+      "/Users/steveng/repo/cordova/cordova-ios"
     ]
   ],
   "_from": "xcode@>=0.9.0 <0.10.0",
@@ -40,11 +40,11 @@
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "https://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz",
+  "_resolved": "http://registry.npmjs.org/xcode/-/xcode-0.9.3.tgz",
   "_shasum": "910a89c16aee6cc0b42ca805a6d0b4cf87211cf3",
   "_shrinkwrap": null,
   "_spec": "xcode@^0.9.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios",
   "author": {
     "name": "Andrew Lunny",
     "email": "alunny@gmail.com"
@@ -119,7 +119,8 @@
   ],
   "name": "xcode",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# node-xcode\n\n> parser/toolkit for xcodeproj project files\n\nAllows you to edit xcodeproject files and write them back out.\n\n## Example\n\n    // API is a bit wonky right now\n    var xcode = require('xcode'),\n        fs = require('fs'),\n        projectPath = 'myproject.xcodeproj/project.pbxproj',\n        myProj = xcode.project(projectPath);\n\n    // parsing is async, in a different process\n    myProj.parse(function (err) {\n        myProj.addHeaderFile('foo.h');\n [...]
+  "readmeFilename": "README.md",
   "repository": {
     "url": "git+https://github.com/alunny/node-xcode.git"
   },
diff --git a/node_modules/xml-escape/.npmignore b/node_modules/xml-escape/.npmignore
new file mode 100644
index 0000000..a72b52e
--- /dev/null
+++ b/node_modules/xml-escape/.npmignore
@@ -0,0 +1,15 @@
+lib-cov
+*.seed
+*.log
+*.csv
+*.dat
+*.out
+*.pid
+*.gz
+
+pids
+logs
+results
+
+npm-debug.log
+node_modules
diff --git a/node_modules/xml-escape/package.json b/node_modules/xml-escape/package.json
index 51a5714..aa8ef83 100644
--- a/node_modules/xml-escape/package.json
+++ b/node_modules/xml-escape/package.json
@@ -9,7 +9,8 @@
         "rawSpec": "^1.1.0",
         "spec": ">=1.1.0 <2.0.0",
         "type": "range"
-      }
+      },
+      "/Users/steveng/repo/cordova/cordova-ios"
     ]
   ],
   "_from": "xml-escape@>=1.1.0 <2.0.0",
@@ -37,13 +38,13 @@
     "type": "range"
   },
   "_requiredBy": [
-    "#USER",
     "/"
   ],
   "_resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz",
   "_shasum": "3904c143fa8eb3a0030ec646d2902a2f1b706c44",
   "_shrinkwrap": null,
   "_spec": "xml-escape@^1.1.0",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios",
   "author": {
     "name": "Michael Hernandez - michael.hernandez1988@gmail.com"
   },
@@ -79,7 +80,8 @@
   ],
   "name": "xml-escape",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "xml-escape\n==========\n\nEscape XML in javascript (NodeJS)\n\nnpm install xml-escape\n\n```javascript\n// Warning escape is a reserved word, so maybe best to use xmlescape for var name\nvar xmlescape = require('xml-escape');\n\nxmlescape('\"hello\" \\'world\\' & false < true > -1');\n\n// output\n// '&quot;hello&quot; &apos;world&apos; &amp; false &lt; true &gt; -1'\n\n// don't escape some characters\nxmlescape('\"hello\" \\'world\\' & false < true > -1', '>\"&')\n\n// outp [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/miketheprogrammer/xml-escape.git"
diff --git a/node_modules/xmlbuilder/package.json b/node_modules/xmlbuilder/package.json
index 28a5c5a..626ba43 100644
--- a/node_modules/xmlbuilder/package.json
+++ b/node_modules/xmlbuilder/package.json
@@ -10,7 +10,7 @@
         "spec": "4.0.0",
         "type": "version"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/plist"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/plist"
     ]
   ],
   "_from": "xmlbuilder@4.0.0",
@@ -39,7 +39,7 @@
   "_shasum": "98b8f651ca30aa624036f127d11cc66dc7b907a3",
   "_shrinkwrap": null,
   "_spec": "xmlbuilder@4.0.0",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/plist",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/plist",
   "author": {
     "name": "Ozgur Ozcitak",
     "email": "oozcitak@gmail.com"
@@ -83,7 +83,8 @@
   ],
   "name": "xmlbuilder",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# xmlbuilder-js\n\nAn XML builder for [node.js](https://nodejs.org/) similar to \n[java-xmlbuilder](https://github.com/jmurty/java-xmlbuilder).\n\n[![License](http://img.shields.io/npm/l/xmlbuilder.svg?style=flat-square)](http://opensource.org/licenses/MIT)\n[![NPM Version](http://img.shields.io/npm/v/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder)\n[![NPM Downloads](https://img.shields.io/npm/dm/xmlbuilder.svg?style=flat-square)](https://npmjs.com/p [...]
+  "readmeFilename": "README.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/oozcitak/xmlbuilder-js.git"
diff --git a/node_modules/xmldom/package.json b/node_modules/xmldom/package.json
index a716ed4..c9ea364 100644
--- a/node_modules/xmldom/package.json
+++ b/node_modules/xmldom/package.json
@@ -10,7 +10,7 @@
         "spec": ">=0.1.0 <0.2.0",
         "type": "range"
       },
-      "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/plist"
+      "/Users/steveng/repo/cordova/cordova-ios/node_modules/plist"
     ]
   ],
   "_from": "xmldom@>=0.1.0 <0.2.0",
@@ -38,13 +38,14 @@
     "type": "range"
   },
   "_requiredBy": [
-    "/plist"
+    "/plist",
+    "/simple-plist/plist"
   ],
-  "_resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+  "_resolved": "http://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
   "_shasum": "d501f97b3bdb403af8ef9ecc20573187aadac0e9",
   "_shrinkwrap": null,
   "_spec": "xmldom@0.1.x",
-  "_where": "/Users/shazron/Documents/git/apache/cordova-ios/node_modules/plist",
+  "_where": "/Users/steveng/repo/cordova/cordova-ios/node_modules/plist",
   "author": {
     "name": "jindw",
     "email": "jindw@xidea.org",
@@ -106,28 +107,14 @@
   "maintainers": [
     {
       "name": "jindw",
-      "email": "jindw@xidea.org"
-    },
-    {
-      "name": "yaron",
-      "email": "yaronn01@gmail.com"
-    },
-    {
-      "name": "bigeasy",
-      "email": "alan@prettyrobots.com"
-    },
-    {
-      "name": "kethinov",
-      "email": "kethinov@gmail.com"
-    },
-    {
-      "name": "jinjinyun",
-      "email": "jinyun.jin@gmail.com"
+      "email": "jindw@xidea.org",
+      "url": "http://www.xidea.org"
     }
   ],
   "name": "xmldom",
   "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
+  "readme": "# XMLDOM [![Build Status](https://secure.travis-ci.org/bigeasy/xmldom.png?branch=master)](http://travis-ci.org/bigeasy/xmldom) [![Coverage Status](https://coveralls.io/repos/bigeasy/xmldom/badge.png?branch=master)](https://coveralls.io/r/bigeasy/xmldom) [![NPM version](https://badge.fury.io/js/xmldom.png)](http://badge.fury.io/js/xmldom)\n\nA JavaScript implementation of W3C DOM for Node.js, Rhino and the browser. Fully\ncompatible with `W3C DOM level2`; and some compatible  [...]
+  "readmeFilename": "readme.md",
   "repository": {
     "type": "git",
     "url": "git://github.com/jindw/xmldom.git"
diff --git a/package.json b/package.json
index 92a7b4d..b848403 100644
--- a/package.json
+++ b/package.json
@@ -51,7 +51,7 @@
     "node": ">=4"
   },
   "dependencies": {
-    "cordova-common": "2.0.2",
+    "cordova-common": "2.1.0",
     "ios-sim": "^6.0.0",
     "nopt": "^3.0.6",
     "plist": "^1.2.0",

-- 
To stop receiving notification emails like this one, please contact
['"commits@cordova.apache.org" <commits@cordova.apache.org>'].

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org


Mime
View raw message