You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ja...@apache.org on 2018/02/20 16:37:30 UTC

[cordova-windows] 01/04: CB-13896 Updated checked-in node_modules

This is an automated email from the ASF dual-hosted git repository.

janpio pushed a commit to branch 6.0.x
in repository https://gitbox.apache.org/repos/asf/cordova-windows.git

commit 55e71c7222fe8cf4c7b11f6fb1641e07e538379f
Author: Jan Piotrowski <pi...@gmail.com>
AuthorDate: Mon Feb 19 18:20:26 2018 +0100

    CB-13896 Updated checked-in node_modules
---
 node_modules/abbrev/package.json                   |   62 +-
 node_modules/ansi/package.json                     |   63 +-
 node_modules/balanced-match/package.json           |   60 +-
 node_modules/base64-js/package.json                |   56 +-
 node_modules/big-integer/package.json              |    4 +-
 node_modules/bplist-parser/package.json            |   56 +-
 node_modules/brace-expansion/package.json          |   64 +-
 node_modules/concat-map/package.json               |   57 +-
 .../node_modules/elementtree/.npmignore            |    1 +
 .../node_modules}/elementtree/.travis.yml          |    0
 .../node_modules}/elementtree/CHANGES.md           |    0
 .../node_modules/elementtree/LICENSE.txt           |  203 +++
 .../node_modules/elementtree/Makefile              |   21 +
 .../cordova-common/node_modules/elementtree/NOTICE |    5 +
 .../node_modules/elementtree/README.md             |  141 ++
 .../node_modules/elementtree/lib/constants.js      |   20 +
 .../node_modules/elementtree/lib/elementpath.js    |  343 +++++
 .../node_modules/elementtree/lib/elementtree.js    |  611 ++++++++
 .../node_modules/elementtree/lib/errors.js         |   31 +
 .../node_modules/elementtree/lib/parser.js         |   33 +
 .../node_modules/elementtree/lib/parsers/index.js  |    1 +
 .../node_modules/elementtree/lib/parsers/sax.js    |   56 +
 .../node_modules/elementtree/lib/sprintf.js        |   86 ++
 .../node_modules/elementtree/lib/treebuilder.js    |   60 +
 .../node_modules/elementtree/lib/utils.js          |   72 +
 .../node_modules}/elementtree/package.json         |   59 +-
 .../node_modules/elementtree/tests/data/xml1.xml   |   17 +
 .../node_modules/elementtree/tests/data/xml2.xml   |   14 +
 .../node_modules}/elementtree/tests/test-simple.js |    0
 node_modules/cordova-common/package.json           |   18 +-
 node_modules/cordova-registry-mapper/README.md     |    2 +-
 node_modules/cordova-registry-mapper/package.json  |   57 +-
 node_modules/elementtree/.travis.yml               |    6 +-
 node_modules/elementtree/CHANGES.md                |    2 +-
 node_modules/elementtree/node_modules/sax/LICENSE  |   41 +
 .../elementtree/node_modules/sax/LICENSE-W3C.html  |  188 +++
 .../elementtree/node_modules/sax/README.md         |  220 +++
 .../elementtree/node_modules/sax/lib/sax.js        | 1563 ++++++++++++++++++++
 .../elementtree/node_modules/sax/package.json      |   63 +
 node_modules/elementtree/package.json              |   72 +-
 node_modules/elementtree/tests/data/bom-xml.xml    |   17 +
 node_modules/elementtree/tests/test-simple.js      |    9 +
 node_modules/glob/package.json                     |   59 +-
 node_modules/inflight/package.json                 |   78 +-
 node_modules/inherits/package.json                 |   69 +-
 node_modules/lodash/package.json                   |   73 +-
 node_modules/minimatch/package.json                |   62 +-
 node_modules/node-uuid/README.md                   |  254 +---
 node_modules/node-uuid/lib/sha1-browser.js         |  120 ++
 node_modules/node-uuid/package.json                |   59 +-
 node_modules/node-uuid/v3.js                       |   54 +
 node_modules/nopt/package.json                     |   68 +-
 node_modules/once/package.json                     |   66 +-
 node_modules/os-homedir/package.json               |   61 +-
 node_modules/os-tmpdir/package.json                |   64 +-
 node_modules/osenv/package.json                    |   71 +-
 node_modules/path-is-absolute/package.json         |   67 +-
 node_modules/plist/package.json                    |   64 +-
 node_modules/q/CHANGES.md                          |   14 +
 node_modules/q/LICENSE                             |    2 +-
 node_modules/q/README.md                           |   19 +-
 node_modules/q/package.json                        |   73 +-
 node_modules/q/q.js                                |   56 +-
 node_modules/sax/package.json                      |   59 +-
 node_modules/semver/README.md                      |  112 +-
 node_modules/semver/bin/semver                     |   14 +-
 node_modules/semver/package.json                   |   80 +-
 node_modules/semver/range.bnf                      |    4 +-
 node_modules/semver/semver.js                      |  147 +-
 node_modules/shelljs/package.json                  |   56 +-
 node_modules/underscore/package.json               |   56 +-
 node_modules/unorm/package.json                    |   58 +-
 node_modules/util-deprecate/package.json           |   55 +-
 node_modules/winjs/README.md                       |    8 +-
 node_modules/winjs/css/ui-dark.css                 |   11 +-
 node_modules/winjs/css/ui-dark.min.css             |    2 +-
 node_modules/winjs/css/ui-light.css                |   11 +-
 node_modules/winjs/css/ui-light.min.css            |    2 +-
 node_modules/winjs/js/base.js                      |   46 +-
 node_modules/winjs/js/base.min.js                  |   22 +-
 node_modules/winjs/js/base.min.js.map              |    2 +-
 node_modules/winjs/js/en-US/ui.strings.js          |    6 +-
 node_modules/winjs/js/ui.js                        |  477 +++++-
 node_modules/winjs/js/ui.min.js                    |   50 +-
 node_modules/winjs/js/ui.min.js.map                |    2 +-
 node_modules/winjs/package.json                    |   88 +-
 node_modules/wrappy/package.json                   |   63 +-
 node_modules/xmlbuilder/package.json               |   49 +-
 node_modules/xmldom/package.json                   |   73 +-
 package.json                                       |   14 +-
 90 files changed, 5328 insertions(+), 2146 deletions(-)

diff --git a/node_modules/abbrev/package.json b/node_modules/abbrev/package.json
index 620503c..3e90537 100644
--- a/node_modules/abbrev/package.json
+++ b/node_modules/abbrev/package.json
@@ -1,51 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "abbrev@1",
-        "scope": null,
-        "escapedName": "abbrev",
-        "name": "abbrev",
-        "rawSpec": "1",
-        "spec": ">=1.0.0 <2.0.0",
-        "type": "range"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows/node_modules/nopt"
+      "abbrev@1.0.9",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "abbrev@>=1.0.0 <2.0.0",
+  "_from": "abbrev@1.0.9",
   "_id": "abbrev@1.0.9",
-  "_inCache": true,
-  "_installable": true,
+  "_inBundle": false,
+  "_integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
   "_location": "/abbrev",
-  "_nodeVersion": "4.4.4",
-  "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/abbrev-1.0.9.tgz_1466016055839_0.7825860097073019"
-  },
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "_npmVersion": "3.9.1",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "abbrev@1",
-    "scope": null,
-    "escapedName": "abbrev",
+    "type": "version",
+    "registry": true,
+    "raw": "abbrev@1.0.9",
     "name": "abbrev",
-    "rawSpec": "1",
-    "spec": ">=1.0.0 <2.0.0",
-    "type": "range"
+    "escapedName": "abbrev",
+    "rawSpec": "1.0.9",
+    "saveSpec": null,
+    "fetchSpec": "1.0.9"
   },
   "_requiredBy": [
     "/nopt"
   ],
   "_resolved": "http://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
-  "_shasum": "91b4792588a7738c25f35dd6f63752a2f8776135",
-  "_shrinkwrap": null,
-  "_spec": "abbrev@1",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows/node_modules/nopt",
+  "_spec": "1.0.9",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me"
@@ -53,32 +34,17 @@
   "bugs": {
     "url": "https://github.com/isaacs/abbrev-js/issues"
   },
-  "dependencies": {},
   "description": "Like ruby's abbrev module, but in js",
   "devDependencies": {
     "tap": "^5.7.2"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "91b4792588a7738c25f35dd6f63752a2f8776135",
-    "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz"
-  },
   "files": [
     "abbrev.js"
   ],
-  "gitHead": "c386cd9dbb1d8d7581718c54d4ba944cc9298d6f",
   "homepage": "https://github.com/isaacs/abbrev-js#readme",
   "license": "ISC",
   "main": "abbrev.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
   "name": "abbrev",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git+ssh://git@github.com/isaacs/abbrev-js.git"
diff --git a/node_modules/ansi/package.json b/node_modules/ansi/package.json
index 295b887..3a08976 100644
--- a/node_modules/ansi/package.json
+++ b/node_modules/ansi/package.json
@@ -1,46 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "ansi@^0.3.1",
-        "scope": null,
-        "escapedName": "ansi",
-        "name": "ansi",
-        "rawSpec": "^0.3.1",
-        "spec": ">=0.3.1 <0.4.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common"
+      "ansi@0.3.1",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "ansi@>=0.3.1 <0.4.0",
+  "_from": "ansi@0.3.1",
   "_id": "ansi@0.3.1",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=",
   "_location": "/ansi",
-  "_nodeVersion": "5.3.0",
-  "_npmUser": {
-    "name": "tootallnate",
-    "email": "nathan@tootallnate.net"
-  },
-  "_npmVersion": "3.3.12",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "ansi@^0.3.1",
-    "scope": null,
-    "escapedName": "ansi",
+    "type": "version",
+    "registry": true,
+    "raw": "ansi@0.3.1",
     "name": "ansi",
-    "rawSpec": "^0.3.1",
-    "spec": ">=0.3.1 <0.4.0",
-    "type": "range"
+    "escapedName": "ansi",
+    "rawSpec": "0.3.1",
+    "saveSpec": null,
+    "fetchSpec": "0.3.1"
   },
   "_requiredBy": [
     "/cordova-common"
   ],
   "_resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
-  "_shasum": "0c42d4fb17160d5a9af1e484bace1c66922c1b21",
-  "_shrinkwrap": null,
-  "_spec": "ansi@^0.3.1",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common",
+  "_spec": "0.3.1",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Nathan Rajlich",
     "email": "nathan@tootallnate.net",
@@ -49,15 +35,7 @@
   "bugs": {
     "url": "https://github.com/TooTallNate/ansi.js/issues"
   },
-  "dependencies": {},
   "description": "Advanced ANSI formatting tool for Node.js",
-  "devDependencies": {},
-  "directories": {},
-  "dist": {
-    "shasum": "0c42d4fb17160d5a9af1e484bace1c66922c1b21",
-    "tarball": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz"
-  },
-  "gitHead": "4d0d4af94e0bdaa648bd7262acd3bde4b98d5246",
   "homepage": "https://github.com/TooTallNate/ansi.js#readme",
   "keywords": [
     "ansi",
@@ -71,23 +49,10 @@
   ],
   "license": "MIT",
   "main": "./lib/ansi.js",
-  "maintainers": [
-    {
-      "name": "TooTallNate",
-      "email": "nathan@tootallnate.net"
-    },
-    {
-      "name": "tootallnate",
-      "email": "nathan@tootallnate.net"
-    }
-  ],
   "name": "ansi",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/TooTallNate/ansi.js.git"
   },
-  "scripts": {},
   "version": "0.3.1"
 }
diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json
index 86a2816..c6c7fb9 100644
--- a/node_modules/balanced-match/package.json
+++ b/node_modules/balanced-match/package.json
@@ -1,50 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "balanced-match@^0.4.1",
-        "scope": null,
-        "escapedName": "balanced-match",
-        "name": "balanced-match",
-        "rawSpec": "^0.4.1",
-        "spec": ">=0.4.1 <0.5.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/brace-expansion"
+      "balanced-match@0.4.2",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "balanced-match@>=0.4.1 <0.5.0",
+  "_from": "balanced-match@0.4.2",
   "_id": "balanced-match@0.4.2",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
   "_location": "/balanced-match",
-  "_nodeVersion": "4.4.7",
-  "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/balanced-match-0.4.2.tgz_1468834991581_0.6590619895141572"
-  },
-  "_npmUser": {
-    "name": "juliangruber",
-    "email": "julian@juliangruber.com"
-  },
-  "_npmVersion": "2.15.8",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "balanced-match@^0.4.1",
-    "scope": null,
-    "escapedName": "balanced-match",
+    "type": "version",
+    "registry": true,
+    "raw": "balanced-match@0.4.2",
     "name": "balanced-match",
-    "rawSpec": "^0.4.1",
-    "spec": ">=0.4.1 <0.5.0",
-    "type": "range"
+    "escapedName": "balanced-match",
+    "rawSpec": "0.4.2",
+    "saveSpec": null,
+    "fetchSpec": "0.4.2"
   },
   "_requiredBy": [
     "/brace-expansion"
   ],
   "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
-  "_shasum": "cb3f3e3c732dc0f01ee70b403f302e61d7709838",
-  "_shrinkwrap": null,
-  "_spec": "balanced-match@^0.4.1",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/brace-expansion",
+  "_spec": "0.4.2",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Julian Gruber",
     "email": "mail@juliangruber.com",
@@ -58,12 +40,6 @@
   "devDependencies": {
     "tape": "^4.6.0"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "cb3f3e3c732dc0f01ee70b403f302e61d7709838",
-    "tarball": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz"
-  },
-  "gitHead": "57c2ea29d89a2844ae3bdcc637c6e2cbb73725e2",
   "homepage": "https://github.com/juliangruber/balanced-match",
   "keywords": [
     "match",
@@ -74,15 +50,7 @@
   ],
   "license": "MIT",
   "main": "index.js",
-  "maintainers": [
-    {
-      "name": "juliangruber",
-      "email": "julian@juliangruber.com"
-    }
-  ],
   "name": "balanced-match",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/juliangruber/balanced-match.git"
diff --git a/node_modules/base64-js/package.json b/node_modules/base64-js/package.json
index 3b8e92d..801b9a1 100644
--- a/node_modules/base64-js/package.json
+++ b/node_modules/base64-js/package.json
@@ -1,46 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "base64-js@0.0.8",
-        "scope": null,
-        "escapedName": "base64-js",
-        "name": "base64-js",
-        "rawSpec": "0.0.8",
-        "spec": "0.0.8",
-        "type": "version"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/plist"
+      "base64-js@0.0.8",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
   "_from": "base64-js@0.0.8",
   "_id": "base64-js@0.0.8",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=",
   "_location": "/base64-js",
-  "_nodeVersion": "0.10.35",
-  "_npmUser": {
-    "name": "feross",
-    "email": "feross@feross.org"
-  },
-  "_npmVersion": "2.1.16",
   "_phantomChildren": {},
   "_requested": {
+    "type": "version",
+    "registry": true,
     "raw": "base64-js@0.0.8",
-    "scope": null,
-    "escapedName": "base64-js",
     "name": "base64-js",
+    "escapedName": "base64-js",
     "rawSpec": "0.0.8",
-    "spec": "0.0.8",
-    "type": "version"
+    "saveSpec": null,
+    "fetchSpec": "0.0.8"
   },
   "_requiredBy": [
     "/plist"
   ],
   "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
-  "_shasum": "1101e9544f4a76b1bc3b26d452ca96d7a35e7978",
-  "_shrinkwrap": null,
-  "_spec": "base64-js@0.0.8",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/plist",
+  "_spec": "0.0.8",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "T. Jameson Little",
     "email": "t.jameson.little@gmail.com"
@@ -53,31 +39,13 @@
   "devDependencies": {
     "tape": "~2.3.2"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "1101e9544f4a76b1bc3b26d452ca96d7a35e7978",
-    "tarball": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz"
-  },
   "engines": {
     "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": [
-    {
-      "name": "beatgammit",
-      "email": "t.jameson.little@gmail.com"
-    },
-    {
-      "name": "feross",
-      "email": "feross@feross.org"
-    }
-  ],
   "name": "base64-js",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/beatgammit/base64-js.git"
diff --git a/node_modules/big-integer/package.json b/node_modules/big-integer/package.json
index ae81359..623f4c2 100644
--- a/node_modules/big-integer/package.json
+++ b/node_modules/big-integer/package.json
@@ -2,7 +2,7 @@
   "_args": [
     [
       "big-integer@1.6.26",
-      "/Users/nikitamatrosov/cordova/cordova-windows"
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
   "_from": "big-integer@1.6.26",
@@ -26,7 +26,7 @@
   ],
   "_resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.26.tgz",
   "_spec": "1.6.26",
-  "_where": "/Users/nikitamatrosov/cordova/cordova-windows",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Peter Olson",
     "email": "peter.e.c.olson+npm@gmail.com"
diff --git a/node_modules/bplist-parser/package.json b/node_modules/bplist-parser/package.json
index 50399ab..8a48455 100644
--- a/node_modules/bplist-parser/package.json
+++ b/node_modules/bplist-parser/package.json
@@ -1,46 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "bplist-parser@^0.1.0",
-        "scope": null,
-        "escapedName": "bplist-parser",
-        "name": "bplist-parser",
-        "rawSpec": "^0.1.0",
-        "spec": ">=0.1.0 <0.2.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common"
+      "bplist-parser@0.1.1",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "bplist-parser@>=0.1.0 <0.2.0",
+  "_from": "bplist-parser@0.1.1",
   "_id": "bplist-parser@0.1.1",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=",
   "_location": "/bplist-parser",
-  "_nodeVersion": "5.1.0",
-  "_npmUser": {
-    "name": "joeferner",
-    "email": "joe@fernsroth.com"
-  },
-  "_npmVersion": "3.4.0",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "bplist-parser@^0.1.0",
-    "scope": null,
-    "escapedName": "bplist-parser",
+    "type": "version",
+    "registry": true,
+    "raw": "bplist-parser@0.1.1",
     "name": "bplist-parser",
-    "rawSpec": "^0.1.0",
-    "spec": ">=0.1.0 <0.2.0",
-    "type": "range"
+    "escapedName": "bplist-parser",
+    "rawSpec": "0.1.1",
+    "saveSpec": null,
+    "fetchSpec": "0.1.1"
   },
   "_requiredBy": [
     "/cordova-common"
   ],
   "_resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
-  "_shasum": "d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6",
-  "_shrinkwrap": null,
-  "_spec": "bplist-parser@^0.1.0",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common",
+  "_spec": "0.1.1",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Joe Ferner",
     "email": "joe.ferner@nearinfinity.com"
@@ -55,12 +41,6 @@
   "devDependencies": {
     "nodeunit": "~0.9.1"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "d60d5dcc20cba6dc7e1f299b35d3e1f95dafbae6",
-    "tarball": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz"
-  },
-  "gitHead": "c4f22650de2cc95edd21a6e609ff0654a2b951bd",
   "homepage": "https://github.com/nearinfinity/node-bplist-parser#readme",
   "keywords": [
     "bplist",
@@ -69,15 +49,7 @@
   ],
   "license": "MIT",
   "main": "bplistParser.js",
-  "maintainers": [
-    {
-      "name": "joeferner",
-      "email": "joe@fernsroth.com"
-    }
-  ],
   "name": "bplist-parser",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/nearinfinity/node-bplist-parser.git"
diff --git a/node_modules/brace-expansion/package.json b/node_modules/brace-expansion/package.json
index a867fd2..a680fc9 100644
--- a/node_modules/brace-expansion/package.json
+++ b/node_modules/brace-expansion/package.json
@@ -1,50 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "brace-expansion@^1.0.0",
-        "scope": null,
-        "escapedName": "brace-expansion",
-        "name": "brace-expansion",
-        "rawSpec": "^1.0.0",
-        "spec": ">=1.0.0 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/minimatch"
+      "brace-expansion@1.1.6",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "brace-expansion@>=1.0.0 <2.0.0",
+  "_from": "brace-expansion@1.1.6",
   "_id": "brace-expansion@1.1.6",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=",
   "_location": "/brace-expansion",
-  "_nodeVersion": "4.4.7",
-  "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/brace-expansion-1.1.6.tgz_1469047715600_0.9362958471756428"
-  },
-  "_npmUser": {
-    "name": "juliangruber",
-    "email": "julian@juliangruber.com"
-  },
-  "_npmVersion": "2.15.8",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "brace-expansion@^1.0.0",
-    "scope": null,
-    "escapedName": "brace-expansion",
+    "type": "version",
+    "registry": true,
+    "raw": "brace-expansion@1.1.6",
     "name": "brace-expansion",
-    "rawSpec": "^1.0.0",
-    "spec": ">=1.0.0 <2.0.0",
-    "type": "range"
+    "escapedName": "brace-expansion",
+    "rawSpec": "1.1.6",
+    "saveSpec": null,
+    "fetchSpec": "1.1.6"
   },
   "_requiredBy": [
     "/minimatch"
   ],
   "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz",
-  "_shasum": "7197d7eaa9b87e648390ea61fc66c84427420df9",
-  "_shrinkwrap": null,
-  "_spec": "brace-expansion@^1.0.0",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/minimatch",
+  "_spec": "1.1.6",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Julian Gruber",
     "email": "mail@juliangruber.com",
@@ -61,29 +43,11 @@
   "devDependencies": {
     "tape": "^4.6.0"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "7197d7eaa9b87e648390ea61fc66c84427420df9",
-    "tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz"
-  },
-  "gitHead": "791262fa06625e9c5594cde529a21d82086af5f2",
   "homepage": "https://github.com/juliangruber/brace-expansion",
   "keywords": [],
   "license": "MIT",
   "main": "index.js",
-  "maintainers": [
-    {
-      "name": "juliangruber",
-      "email": "julian@juliangruber.com"
-    },
-    {
-      "name": "isaacs",
-      "email": "isaacs@npmjs.com"
-    }
-  ],
   "name": "brace-expansion",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/juliangruber/brace-expansion.git"
diff --git a/node_modules/concat-map/package.json b/node_modules/concat-map/package.json
index 56e45ac..0d21359 100644
--- a/node_modules/concat-map/package.json
+++ b/node_modules/concat-map/package.json
@@ -1,45 +1,37 @@
 {
   "_args": [
     [
-      {
-        "raw": "concat-map@0.0.1",
-        "scope": null,
-        "escapedName": "concat-map",
-        "name": "concat-map",
-        "rawSpec": "0.0.1",
-        "spec": "0.0.1",
-        "type": "version"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/brace-expansion"
+      "concat-map@0.0.1",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
   "_from": "concat-map@0.0.1",
   "_id": "concat-map@0.0.1",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
   "_location": "/concat-map",
-  "_npmUser": {
-    "name": "substack",
-    "email": "mail@substack.net"
-  },
-  "_npmVersion": "1.3.21",
   "_phantomChildren": {},
   "_requested": {
+    "type": "version",
+    "registry": true,
     "raw": "concat-map@0.0.1",
-    "scope": null,
-    "escapedName": "concat-map",
     "name": "concat-map",
+    "escapedName": "concat-map",
     "rawSpec": "0.0.1",
-    "spec": "0.0.1",
-    "type": "version"
+    "saveSpec": null,
+    "fetchSpec": "0.0.1"
   },
   "_requiredBy": [
-    "/brace-expansion"
+    "/brace-expansion",
+    "/eslint-plugin-node/brace-expansion",
+    "/eslint/brace-expansion",
+    "/globby/brace-expansion",
+    "/jasmine/brace-expansion",
+    "/rimraf/brace-expansion"
   ],
   "_resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-  "_shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
-  "_shrinkwrap": null,
-  "_spec": "concat-map@0.0.1",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/brace-expansion",
+  "_spec": "0.0.1",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "James Halliday",
     "email": "mail@substack.net",
@@ -48,7 +40,6 @@
   "bugs": {
     "url": "https://github.com/substack/node-concat-map/issues"
   },
-  "dependencies": {},
   "description": "concatenative mapdashery",
   "devDependencies": {
     "tape": "~2.4.0"
@@ -57,11 +48,7 @@
     "example": "example",
     "test": "test"
   },
-  "dist": {
-    "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",
@@ -71,15 +58,7 @@
   ],
   "license": "MIT",
   "main": "index.js",
-  "maintainers": [
-    {
-      "name": "substack",
-      "email": "mail@substack.net"
-    }
-  ],
   "name": "concat-map",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/substack/node-concat-map.git"
diff --git a/node_modules/cordova-common/node_modules/elementtree/.npmignore b/node_modules/cordova-common/node_modules/elementtree/.npmignore
new file mode 100644
index 0000000..3c3629e
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/.npmignore
@@ -0,0 +1 @@
+node_modules
diff --git a/node_modules/elementtree/.travis.yml b/node_modules/cordova-common/node_modules/elementtree/.travis.yml
similarity index 100%
copy from node_modules/elementtree/.travis.yml
copy to node_modules/cordova-common/node_modules/elementtree/.travis.yml
diff --git a/node_modules/elementtree/CHANGES.md b/node_modules/cordova-common/node_modules/elementtree/CHANGES.md
similarity index 100%
copy from node_modules/elementtree/CHANGES.md
copy to node_modules/cordova-common/node_modules/elementtree/CHANGES.md
diff --git a/node_modules/cordova-common/node_modules/elementtree/LICENSE.txt b/node_modules/cordova-common/node_modules/elementtree/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/LICENSE.txt
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/node_modules/cordova-common/node_modules/elementtree/Makefile b/node_modules/cordova-common/node_modules/elementtree/Makefile
new file mode 100644
index 0000000..ab7c4e0
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/Makefile
@@ -0,0 +1,21 @@
+TESTS := \
+	tests/test-simple.js
+
+
+
+PATH := ./node_modules/.bin:$(PATH)
+
+WHISKEY := $(shell bash -c 'PATH=$(PATH) type -p whiskey')
+
+default: test
+
+test:
+	NODE_PATH=`pwd`/lib/ ${WHISKEY} --scope-leaks --sequential --real-time --tests "${TESTS}"
+
+tap:
+	NODE_PATH=`pwd`/lib/ ${WHISKEY} --test-reporter tap --sequential --real-time --tests "${TESTS}"
+
+coverage:
+	NODE_PATH=`pwd`/lib/ ${WHISKEY} --sequential --coverage  --coverage-reporter html --coverage-dir coverage_html --tests "${TESTS}"
+
+.PHONY: default test coverage tap scope
diff --git a/node_modules/cordova-common/node_modules/elementtree/NOTICE b/node_modules/cordova-common/node_modules/elementtree/NOTICE
new file mode 100644
index 0000000..28ad70a
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/NOTICE
@@ -0,0 +1,5 @@
+node-elementtree
+Copyright (c) 2011, Rackspace, Inc.
+
+The ElementTree toolkit is Copyright (c) 1999-2007 by Fredrik Lundh
+
diff --git a/node_modules/cordova-common/node_modules/elementtree/README.md b/node_modules/cordova-common/node_modules/elementtree/README.md
new file mode 100644
index 0000000..738420c
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/README.md
@@ -0,0 +1,141 @@
+node-elementtree
+====================
+
+node-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.
+
+Installation
+====================
+
+    $ npm install elementtree
+    
+Using the library
+====================
+
+For the usage refer to the Python ElementTree library documentation - [http://effbot.org/zone/element-index.htm#usage](http://effbot.org/zone/element-index.htm#usage).
+
+Supported XPath expressions in `find`, `findall` and `findtext` methods are listed on [http://effbot.org/zone/element-xpath.htm](http://effbot.org/zone/element-xpath.htm).
+
+Example 1 – Creating An XML Document
+====================
+
+This example shows how to build a valid XML document that can be published to
+Atom Hopper. Atom Hopper is used internally as a bridge from products all the
+way to collecting revenue, called “Usage.”  MaaS and other products send similar
+events to it every time user performs an action on a resource
+(e.g. creates,updates or deletes). Below is an example of leveraging the API
+to create a new XML document.
+
+```javascript
+var et = require('elementtree');
+var XML = et.XML;
+var ElementTree = et.ElementTree;
+var element = et.Element;
+var subElement = et.SubElement;
+
+var date, root, tenantId, serviceName, eventType, usageId, dataCenter, region,
+checks, resourceId, category, startTime, resourceName, etree, xml;
+
+date = new Date();
+
+root = element('entry');
+root.set('xmlns', 'http://www.w3.org/2005/Atom');
+
+tenantId = subElement(root, 'TenantId');
+tenantId.text = '12345';
+
+serviceName = subElement(root, 'ServiceName');
+serviceName.text = 'MaaS';
+
+resourceId = subElement(root, 'ResourceID');
+resourceId.text = 'enAAAA';
+
+usageId = subElement(root, 'UsageID');
+usageId.text = '550e8400-e29b-41d4-a716-446655440000';
+
+eventType = subElement(root, 'EventType');
+eventType.text = 'create';
+
+category = subElement(root, 'category');
+category.set('term', 'monitoring.entity.create');
+
+dataCenter = subElement(root, 'DataCenter');
+dataCenter.text = 'global';
+
+region = subElement(root, 'Region');
+region.text = 'global';
+
+startTime = subElement(root, 'StartTime');
+startTime.text = date;
+
+resourceName = subElement(root, 'ResourceName');
+resourceName.text = 'entity';
+
+etree = new ElementTree(root);
+xml = etree.write({'xml_declaration': false});
+console.log(xml);
+```
+
+As you can see, both et.Element and et.SubElement are factory methods which
+return a new instance of Element and SubElement class, respectively.
+When you create a new element (tag) you can use set method to set an attribute.
+To set the tag value, assign a value to the .text attribute.
+
+This example would output a document that looks like this:
+
+```xml
+<entry xmlns="http://www.w3.org/2005/Atom">
+  <TenantId>12345</TenantId>
+  <ServiceName>MaaS</ServiceName>
+  <ResourceID>enAAAA</ResourceID>
+  <UsageID>550e8400-e29b-41d4-a716-446655440000</UsageID>
+  <EventType>create</EventType>
+  <category term="monitoring.entity.create"/>
+  <DataCenter>global</DataCenter>
+  <Region>global</Region>
+  <StartTime>Sun Apr 29 2012 16:37:32 GMT-0700 (PDT)</StartTime>
+  <ResourceName>entity</ResourceName>
+</entry>
+```
+
+Example 2 – Parsing An XML Document
+====================
+
+This example shows how to parse an XML document and use simple XPath selectors.
+For demonstration purposes, we will use the XML document located at
+https://gist.github.com/2554343.
+
+Behind the scenes, node-elementtree uses Isaac’s sax library for parsing XML,
+but the library has a concept of “parsers,” which means it’s pretty simple to
+add support for a different parser.
+
+```javascript
+var fs = require('fs');
+
+var et = require('elementtree');
+
+var XML = et.XML;
+var ElementTree = et.ElementTree;
+var element = et.Element;
+var subElement = et.SubElement;
+
+var data, etree;
+
+data = fs.readFileSync('document.xml').toString();
+etree = et.parse(data);
+
+console.log(etree.findall('./entry/TenantId').length); // 2
+console.log(etree.findtext('./entry/ServiceName')); // MaaS
+console.log(etree.findall('./entry/category')[0].get('term')); // monitoring.entity.create
+console.log(etree.findall('*/category/[@term="monitoring.entity.update"]').length); // 1
+```
+
+Build status
+====================
+
+[![Build Status](https://secure.travis-ci.org/racker/node-elementtree.png)](http://travis-ci.org/racker/node-elementtree)
+
+
+License
+====================
+
+node-elementtree is distributed under the [Apache license](http://www.apache.org/licenses/LICENSE-2.0.html).
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/constants.js b/node_modules/cordova-common/node_modules/elementtree/lib/constants.js
new file mode 100644
index 0000000..b057faf
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/constants.js
@@ -0,0 +1,20 @@
+/*
+ *  Copyright 2011 Rackspace
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+var DEFAULT_PARSER = 'sax';
+
+exports.DEFAULT_PARSER = DEFAULT_PARSER;
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/elementpath.js b/node_modules/cordova-common/node_modules/elementtree/lib/elementpath.js
new file mode 100644
index 0000000..2e93f47
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/elementpath.js
@@ -0,0 +1,343 @@
+/**
+ *  Copyright 2011 Rackspace
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+var sprintf = require('./sprintf').sprintf;
+
+var utils = require('./utils');
+var SyntaxError = require('./errors').SyntaxError;
+
+var _cache = {};
+
+var RE = new RegExp(
+  "(" +
+  "'[^']*'|\"[^\"]*\"|" +
+  "::|" +
+  "//?|" +
+  "\\.\\.|" +
+  "\\(\\)|" +
+  "[/.*:\\[\\]\\(\\)@=])|" +
+  "((?:\\{[^}]+\\})?[^/\\[\\]\\(\\)@=\\s]+)|" +
+  "\\s+", 'g'
+);
+
+var xpath_tokenizer = utils.findall.bind(null, RE);
+
+function prepare_tag(next, token) {
+  var tag = token[0];
+
+  function select(context, result) {
+    var i, len, elem, rv = [];
+
+    for (i = 0, len = result.length; i < len; i++) {
+      elem = result[i];
+      elem._children.forEach(function(e) {
+        if (e.tag === tag) {
+          rv.push(e);
+        }
+      });
+    }
+
+    return rv;
+  }
+
+  return select;
+}
+
+function prepare_star(next, token) {
+  function select(context, result) {
+    var i, len, elem, rv = [];
+
+    for (i = 0, len = result.length; i < len; i++) {
+      elem = result[i];
+      elem._children.forEach(function(e) {
+        rv.push(e);
+      });
+    }
+
+    return rv;
+  }
+
+  return select;
+}
+
+function prepare_dot(next, token) {
+  function select(context, result) {
+    var i, len, elem, rv = [];
+
+    for (i = 0, len = result.length; i < len; i++) {
+      elem = result[i];
+      rv.push(elem);
+    }
+
+    return rv;
+  }
+
+  return select;
+}
+
+function prepare_iter(next, token) {
+  var tag;
+  token = next();
+
+  if (token[1] === '*') {
+    tag = '*';
+  }
+  else if (!token[1]) {
+    tag = token[0] || '';
+  }
+  else {
+    throw new SyntaxError(token);
+  }
+
+  function select(context, result) {
+    var i, len, elem, rv = [];
+
+    for (i = 0, len = result.length; i < len; i++) {
+      elem = result[i];
+      elem.iter(tag, function(e) {
+        if (e !== elem) {
+          rv.push(e);
+        }
+      });
+    }
+
+    return rv;
+  }
+
+  return select;
+}
+
+function prepare_dot_dot(next, token) {
+  function select(context, result) {
+    var i, len, elem, rv = [], parent_map = context.parent_map;
+
+    if (!parent_map) {
+      context.parent_map = parent_map = {};
+
+      context.root.iter(null, function(p) {
+        p._children.forEach(function(e) {
+          parent_map[e] = p;
+        });
+      });
+    }
+
+    for (i = 0, len = result.length; i < len; i++) {
+      elem = result[i];
+
+      if (parent_map.hasOwnProperty(elem)) {
+        rv.push(parent_map[elem]);
+      }
+    }
+
+    return rv;
+  }
+
+  return select;
+}
+
+
+function prepare_predicate(next, token) {
+  var tag, key, value, select;
+  token = next();
+
+  if (token[1] === '@') {
+    // attribute
+    token = next();
+
+    if (token[1]) {
+      throw new SyntaxError(token, 'Invalid attribute predicate');
+    }
+
+    key = token[0];
+    token = next();
+
+    if (token[1] === ']') {
+      select = function(context, result) {
+        var i, len, elem, rv = [];
+
+        for (i = 0, len = result.length; i < len; i++) {
+          elem = result[i];
+
+          if (elem.get(key)) {
+            rv.push(elem);
+          }
+        }
+
+        return rv;
+      };
+    }
+    else if (token[1] === '=') {
+      value = next()[1];
+
+      if (value[0] === '"' || value[value.length - 1] === '\'') {
+        value = value.slice(1, value.length - 1);
+      }
+      else {
+        throw new SyntaxError(token, 'Ivalid comparison target');
+      }
+
+      token = next();
+      select = function(context, result) {
+        var i, len, elem, rv = [];
+
+        for (i = 0, len = result.length; i < len; i++) {
+          elem = result[i];
+
+          if (elem.get(key) === value) {
+            rv.push(elem);
+          }
+        }
+
+        return rv;
+      };
+    }
+
+    if (token[1] !== ']') {
+      throw new SyntaxError(token, 'Invalid attribute predicate');
+    }
+  }
+  else if (!token[1]) {
+    tag = token[0] || '';
+    token = next();
+
+    if (token[1] !== ']') {
+      throw new SyntaxError(token, 'Invalid node predicate');
+    }
+
+    select = function(context, result) {
+      var i, len, elem, rv = [];
+
+      for (i = 0, len = result.length; i < len; i++) {
+        elem = result[i];
+
+        if (elem.find(tag)) {
+          rv.push(elem);
+        }
+      }
+
+      return rv;
+    };
+  }
+  else {
+    throw new SyntaxError(null, 'Invalid predicate');
+  }
+
+  return select;
+}
+
+
+
+var ops = {
+  "": prepare_tag,
+  "*": prepare_star,
+  ".": prepare_dot,
+  "..": prepare_dot_dot,
+  "//": prepare_iter,
+  "[": prepare_predicate,
+};
+
+function _SelectorContext(root) {
+  this.parent_map = null;
+  this.root = root;
+}
+
+function findall(elem, path) {
+  var selector, result, i, len, token, value, select, context;
+
+  if (_cache.hasOwnProperty(path)) {
+    selector = _cache[path];
+  }
+  else {
+    // TODO: Use smarter cache purging approach
+    if (Object.keys(_cache).length > 100) {
+      _cache = {};
+    }
+
+    if (path.charAt(0) === '/') {
+      throw new SyntaxError(null, 'Cannot use absolute path on element');
+    }
+
+    result = xpath_tokenizer(path);
+    selector = [];
+
+    function getToken() {
+      return result.shift();
+    }
+
+    token = getToken();
+    while (true) {
+      var c = token[1] || '';
+      value = ops[c](getToken, token);
+
+      if (!value) {
+        throw new SyntaxError(null, sprintf('Invalid path: %s', path));
+      }
+
+      selector.push(value);
+      token = getToken();
+
+      if (!token) {
+        break;
+      }
+      else if (token[1] === '/') {
+        token = getToken();
+      }
+
+      if (!token) {
+        break;
+      }
+    }
+
+    _cache[path] = selector;
+  }
+
+  // Execute slector pattern
+  result = [elem];
+  context = new _SelectorContext(elem);
+
+  for (i = 0, len = selector.length; i < len; i++) {
+    select = selector[i];
+    result = select(context, result);
+  }
+
+  return result || [];
+}
+
+function find(element, path) {
+  var resultElements = findall(element, path);
+
+  if (resultElements && resultElements.length > 0) {
+    return resultElements[0];
+  }
+
+  return null;
+}
+
+function findtext(element, path, defvalue) {
+  var resultElements = findall(element, path);
+
+  if (resultElements && resultElements.length > 0) {
+    return resultElements[0].text;
+  }
+
+  return defvalue;
+}
+
+
+exports.find = find;
+exports.findall = findall;
+exports.findtext = findtext;
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/elementtree.js b/node_modules/cordova-common/node_modules/elementtree/lib/elementtree.js
new file mode 100644
index 0000000..61d9276
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/elementtree.js
@@ -0,0 +1,611 @@
+/**
+ *  Copyright 2011 Rackspace
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+var sprintf = require('./sprintf').sprintf;
+
+var utils = require('./utils');
+var ElementPath = require('./elementpath');
+var TreeBuilder = require('./treebuilder').TreeBuilder;
+var get_parser = require('./parser').get_parser;
+var constants = require('./constants');
+
+var element_ids = 0;
+
+function Element(tag, attrib)
+{
+  this._id = element_ids++;
+  this.tag = tag;
+  this.attrib = {};
+  this.text = null;
+  this.tail = null;
+  this._children = [];
+
+  if (attrib) {
+    this.attrib = utils.merge(this.attrib, attrib);
+  }
+}
+
+Element.prototype.toString = function()
+{
+  return sprintf("<Element %s at %s>", this.tag, this._id);
+};
+
+Element.prototype.makeelement = function(tag, attrib)
+{
+  return new Element(tag, attrib);
+};
+
+Element.prototype.len = function()
+{
+  return this._children.length;
+};
+
+Element.prototype.getItem = function(index)
+{
+  return this._children[index];
+};
+
+Element.prototype.setItem = function(index, element)
+{
+  this._children[index] = element;
+};
+
+Element.prototype.delItem = function(index)
+{
+  this._children.splice(index, 1);
+};
+
+Element.prototype.getSlice = function(start, stop)
+{
+  return this._children.slice(start, stop);
+};
+
+Element.prototype.setSlice = function(start, stop, elements)
+{
+  var i;
+  var k = 0;
+  for (i = start; i < stop; i++, k++) {
+    this._children[i] = elements[k];
+  }
+};
+
+Element.prototype.delSlice = function(start, stop)
+{
+  this._children.splice(start, stop - start);
+};
+
+Element.prototype.append = function(element)
+{
+  this._children.push(element);
+};
+
+Element.prototype.extend = function(elements)
+{
+  this._children.concat(elements);
+};
+
+Element.prototype.insert = function(index, element)
+{
+  this._children[index] = element;
+};
+
+Element.prototype.remove = function(element)
+{
+  this._children = this._children.filter(function(e) {
+    /* TODO: is this the right way to do this? */
+    if (e._id === element._id) {
+      return false;
+    }
+    return true;
+  });
+};
+
+Element.prototype.getchildren = function() {
+  return this._children;
+};
+
+Element.prototype.find = function(path)
+{
+  return ElementPath.find(this, path);
+};
+
+Element.prototype.findtext = function(path, defvalue)
+{
+  return ElementPath.findtext(this, path, defvalue);
+};
+
+Element.prototype.findall = function(path, defvalue)
+{
+  return ElementPath.findall(this, path, defvalue);
+};
+
+Element.prototype.clear = function()
+{
+  this.attrib = {};
+  this._children = [];
+  this.text = null;
+  this.tail = null;
+};
+
+Element.prototype.get = function(key, defvalue)
+{
+  if (this.attrib[key] !== undefined) {
+    return this.attrib[key];
+  }
+  else {
+    return defvalue;
+  }
+};
+
+Element.prototype.set = function(key, value)
+{
+  this.attrib[key] = value;
+};
+
+Element.prototype.keys = function()
+{
+  return Object.keys(this.attrib);
+};
+
+Element.prototype.items = function()
+{
+  return utils.items(this.attrib);
+};
+
+/*
+ * In python this uses a generator, but in v8 we don't have em,
+ * so we use a callback instead.
+ **/
+Element.prototype.iter = function(tag, callback)
+{
+  var self = this;
+  var i, child;
+
+  if (tag === "*") {
+    tag = null;
+  }
+
+  if (tag === null || this.tag === tag) {
+    callback(self);
+  }
+
+  for (i = 0; i < this._children.length; i++) {
+    child = this._children[i];
+    child.iter(tag, function(e) {
+      callback(e);
+    });
+  }
+};
+
+Element.prototype.itertext = function(callback)
+{
+  this.iter(null, function(e) {
+    if (e.text) {
+      callback(e.text);
+    }
+
+    if (e.tail) {
+      callback(e.tail);
+    }
+  });
+};
+
+
+function SubElement(parent, tag, attrib) {
+  var element = parent.makeelement(tag, attrib);
+  parent.append(element);
+  return element;
+}
+
+function Comment(text) {
+  var element = new Element(Comment);
+  if (text) {
+    element.text = text;
+  }
+  return element;
+}
+
+function CData(text) {
+  var element = new Element(CData);
+  if (text) {
+    element.text = text;
+  }
+  return element;
+}
+
+function ProcessingInstruction(target, text)
+{
+  var element = new Element(ProcessingInstruction);
+  element.text = target;
+  if (text) {
+    element.text = element.text + " " + text;
+  }
+  return element;
+}
+
+function QName(text_or_uri, tag)
+{
+  if (tag) {
+    text_or_uri = sprintf("{%s}%s", text_or_uri, tag);
+  }
+  this.text = text_or_uri;
+}
+
+QName.prototype.toString = function() {
+  return this.text;
+};
+
+function ElementTree(element)
+{
+  this._root = element;
+}
+
+ElementTree.prototype.getroot = function() {
+  return this._root;
+};
+
+ElementTree.prototype._setroot = function(element) {
+  this._root = element;
+};
+
+ElementTree.prototype.parse = function(source, parser) {
+  if (!parser) {
+    parser = get_parser(constants.DEFAULT_PARSER);
+    parser = new parser.XMLParser(new TreeBuilder());
+  }
+
+  parser.feed(source);
+  this._root = parser.close();
+  return this._root;
+};
+
+ElementTree.prototype.iter = function(tag, callback) {
+  this._root.iter(tag, callback);
+};
+
+ElementTree.prototype.find = function(path) {
+  return this._root.find(path);
+};
+
+ElementTree.prototype.findtext = function(path, defvalue) {
+  return this._root.findtext(path, defvalue);
+};
+
+ElementTree.prototype.findall = function(path) {
+  return this._root.findall(path);
+};
+
+/**
+ * Unlike ElementTree, we don't write to a file, we return you a string.
+ */
+ElementTree.prototype.write = function(options) {
+  var sb = [];
+  options = utils.merge({
+    encoding: 'utf-8',
+    xml_declaration: null,
+    default_namespace: null,
+    method: 'xml'}, options);
+
+  if (options.xml_declaration !== false) {
+    sb.push("<?xml version='1.0' encoding='"+options.encoding +"'?>\n");
+  }
+
+  if (options.method === "text") {
+    _serialize_text(sb, self._root, encoding);
+  }
+  else {
+    var qnames, namespaces, indent, indent_string;
+    var x = _namespaces(this._root, options.encoding, options.default_namespace);
+    qnames = x[0];
+    namespaces = x[1];
+
+    if (options.hasOwnProperty('indent')) {
+      indent = 0;
+      indent_string = new Array(options.indent + 1).join(' ');
+    }
+    else {
+      indent = false;
+    }
+
+    if (options.method === "xml") {
+      _serialize_xml(function(data) {
+        sb.push(data);
+      }, this._root, options.encoding, qnames, namespaces, indent, indent_string);
+    }
+    else {
+      /* TODO: html */
+      throw new Error("unknown serialization method "+ options.method);
+    }
+  }
+
+  return sb.join("");
+};
+
+var _namespace_map = {
+    /* "well-known" namespace prefixes */
+    "http://www.w3.org/XML/1998/namespace": "xml",
+    "http://www.w3.org/1999/xhtml": "html",
+    "http://www.w3.org/1999/02/22-rdf-syntax-ns#": "rdf",
+    "http://schemas.xmlsoap.org/wsdl/": "wsdl",
+    /* xml schema */
+    "http://www.w3.org/2001/XMLSchema": "xs",
+    "http://www.w3.org/2001/XMLSchema-instance": "xsi",
+    /* dublic core */
+    "http://purl.org/dc/elements/1.1/": "dc",
+};
+
+function register_namespace(prefix, uri) {
+  if (/ns\d+$/.test(prefix)) {
+    throw new Error('Prefix format reserved for internal use');
+  }
+
+  if (_namespace_map.hasOwnProperty(uri) && _namespace_map[uri] === prefix) {
+    delete _namespace_map[uri];
+  }
+
+  _namespace_map[uri] = prefix;
+}
+
+
+function _escape(text, encoding, isAttribute, isText) {
+  if (text) {
+    text = text.toString();
+    text = text.replace(/&/g, '&amp;');
+    text = text.replace(/</g, '&lt;');
+    text = text.replace(/>/g, '&gt;');
+    if (!isText) {
+        text = text.replace(/\n/g, '&#xA;');
+        text = text.replace(/\r/g, '&#xD;');
+    }
+    if (isAttribute) {
+      text = text.replace(/"/g, '&quot;');
+    }
+  }
+  return text;
+}
+
+/* TODO: benchmark single regex */
+function _escape_attrib(text, encoding) {
+  return _escape(text, encoding, true);
+}
+
+function _escape_cdata(text, encoding) {
+  return _escape(text, encoding, false);
+}
+
+function _escape_text(text, encoding) {
+  return _escape(text, encoding, false, true);
+}
+
+function _namespaces(elem, encoding, default_namespace) {
+  var qnames = {};
+  var namespaces = {};
+
+  if (default_namespace) {
+    namespaces[default_namespace] = "";
+  }
+
+  function encode(text) {
+    return text;
+  }
+
+  function add_qname(qname) {
+    if (qname[0] === "{") {
+      var tmp = qname.substring(1).split("}", 2);
+      var uri = tmp[0];
+      var tag = tmp[1];
+      var prefix = namespaces[uri];
+
+      if (prefix === undefined) {
+        prefix = _namespace_map[uri];
+        if (prefix === undefined) {
+          prefix = "ns" + Object.keys(namespaces).length;
+        }
+        if (prefix !== "xml") {
+          namespaces[uri] = prefix;
+        }
+      }
+
+      if (prefix) {
+        qnames[qname] = sprintf("%s:%s", prefix, tag);
+      }
+      else {
+        qnames[qname] = tag;
+      }
+    }
+    else {
+      if (default_namespace) {
+        throw new Error('cannot use non-qualified names with default_namespace option');
+      }
+
+      qnames[qname] = qname;
+    }
+  }
+
+
+  elem.iter(null, function(e) {
+    var i;
+    var tag = e.tag;
+    var text = e.text;
+    var items = e.items();
+
+    if (tag instanceof QName && qnames[tag.text] === undefined) {
+      add_qname(tag.text);
+    }
+    else if (typeof(tag) === "string") {
+      add_qname(tag);
+    }
+    else if (tag !== null && tag !== Comment && tag !== CData && tag !== ProcessingInstruction) {
+      throw new Error('Invalid tag type for serialization: '+ tag);
+    }
+
+    if (text instanceof QName && qnames[text.text] === undefined) {
+      add_qname(text.text);
+    }
+
+    items.forEach(function(item) {
+      var key = item[0],
+          value = item[1];
+      if (key instanceof QName) {
+        key = key.text;
+      }
+
+      if (qnames[key] === undefined) {
+        add_qname(key);
+      }
+
+      if (value instanceof QName && qnames[value.text] === undefined) {
+        add_qname(value.text);
+      }
+    });
+  });
+  return [qnames, namespaces];
+}
+
+function _serialize_xml(write, elem, encoding, qnames, namespaces, indent, indent_string) {
+  var tag = elem.tag;
+  var text = elem.text;
+  var items;
+  var i;
+
+  var newlines = indent || (indent === 0);
+  write(Array(indent + 1).join(indent_string));
+
+  if (tag === Comment) {
+    write(sprintf("<!--%s-->", _escape_cdata(text, encoding)));
+  }
+  else if (tag === ProcessingInstruction) {
+    write(sprintf("<?%s?>", _escape_cdata(text, encoding)));
+  }
+  else if (tag === CData) {
+    text = text || '';
+    write(sprintf("<![CDATA[%s]]>", text));
+  }
+  else {
+    tag = qnames[tag];
+    if (tag === undefined) {
+      if (text) {
+        write(_escape_text(text, encoding));
+      }
+      elem.iter(function(e) {
+        _serialize_xml(write, e, encoding, qnames, null, newlines ? indent + 1 : false, indent_string);
+      });
+    }
+    else {
+      write("<" + tag);
+      items = elem.items();
+
+      if (items || namespaces) {
+        items.sort(); // lexical order
+
+        items.forEach(function(item) {
+          var k = item[0],
+              v = item[1];
+
+            if (k instanceof QName) {
+              k = k.text;
+            }
+
+            if (v instanceof QName) {
+              v = qnames[v.text];
+            }
+            else {
+              v = _escape_attrib(v, encoding);
+            }
+            write(sprintf(" %s=\"%s\"", qnames[k], v));
+        });
+
+        if (namespaces) {
+          items = utils.items(namespaces);
+          items.sort(function(a, b) { return a[1] < b[1]; });
+
+          items.forEach(function(item) {
+            var k = item[1],
+                v = item[0];
+
+            if (k) {
+              k = ':' + k;
+            }
+
+            write(sprintf(" xmlns%s=\"%s\"", k, _escape_attrib(v, encoding)));
+          });
+        }
+      }
+
+      if (text || elem.len()) {
+        if (text && text.toString().match(/^\s*$/)) {
+            text = null;
+        }
+
+        write(">");
+        if (!text && newlines) {
+          write("\n");
+        }
+
+        if (text) {
+          write(_escape_text(text, encoding));
+        }
+        elem._children.forEach(function(e) {
+          _serialize_xml(write, e, encoding, qnames, null, newlines ? indent + 1 : false, indent_string);
+        });
+
+        if (!text && indent) {
+          write(Array(indent + 1).join(indent_string));
+        }
+        write("</" + tag + ">");
+      }
+      else {
+        write(" />");
+      }
+    }
+  }
+
+  if (newlines) {
+    write("\n");
+  }
+}
+
+function parse(source, parser) {
+  var tree = new ElementTree();
+  tree.parse(source, parser);
+  return tree;
+}
+
+function tostring(element, options) {
+  return new ElementTree(element).write(options);
+}
+
+exports.PI = ProcessingInstruction;
+exports.Comment = Comment;
+exports.CData = CData;
+exports.ProcessingInstruction = ProcessingInstruction;
+exports.SubElement = SubElement;
+exports.QName = QName;
+exports.ElementTree = ElementTree;
+exports.ElementPath = ElementPath;
+exports.Element = function(tag, attrib) {
+  return new Element(tag, attrib);
+};
+
+exports.XML = function(data) {
+  var et = new ElementTree();
+  return et.parse(data);
+};
+
+exports.parse = parse;
+exports.register_namespace = register_namespace;
+exports.tostring = tostring;
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/errors.js b/node_modules/cordova-common/node_modules/elementtree/lib/errors.js
new file mode 100644
index 0000000..e8742be
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/errors.js
@@ -0,0 +1,31 @@
+/**
+ *  Copyright 2011 Rackspace
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+var util = require('util');
+
+var sprintf = require('./sprintf').sprintf;
+
+function SyntaxError(token, msg) {
+  msg = msg || sprintf('Syntax Error at token %s', token.toString());
+  this.token = token;
+  this.message = msg;
+  Error.call(this, msg);
+}
+
+util.inherits(SyntaxError, Error);
+
+exports.SyntaxError = SyntaxError;
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/parser.js b/node_modules/cordova-common/node_modules/elementtree/lib/parser.js
new file mode 100644
index 0000000..7307ee4
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/parser.js
@@ -0,0 +1,33 @@
+/*
+ *  Copyright 2011 Rackspace
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+/* TODO: support node-expat C++ module optionally */
+
+var util = require('util');
+var parsers = require('./parsers/index');
+
+function get_parser(name) {
+  if (name === 'sax') {
+    return parsers.sax;
+  }
+  else {
+    throw new Error('Invalid parser: ' + name);
+  }
+}
+
+
+exports.get_parser = get_parser;
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/parsers/index.js b/node_modules/cordova-common/node_modules/elementtree/lib/parsers/index.js
new file mode 100644
index 0000000..5eac5c8
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/parsers/index.js
@@ -0,0 +1 @@
+exports.sax = require('./sax');
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/parsers/sax.js b/node_modules/cordova-common/node_modules/elementtree/lib/parsers/sax.js
new file mode 100644
index 0000000..69b0a59
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/parsers/sax.js
@@ -0,0 +1,56 @@
+var util = require('util');
+
+var sax = require('sax');
+
+var TreeBuilder = require('./../treebuilder').TreeBuilder;
+
+function XMLParser(target) {
+  this.parser = sax.parser(true);
+
+  this.target = (target) ? target : new TreeBuilder();
+
+  this.parser.onopentag = this._handleOpenTag.bind(this);
+  this.parser.ontext = this._handleText.bind(this);
+  this.parser.oncdata = this._handleCdata.bind(this);
+  this.parser.ondoctype = this._handleDoctype.bind(this);
+  this.parser.oncomment = this._handleComment.bind(this);
+  this.parser.onclosetag = this._handleCloseTag.bind(this);
+  this.parser.onerror = this._handleError.bind(this);
+}
+
+XMLParser.prototype._handleOpenTag = function(tag) {
+  this.target.start(tag.name, tag.attributes);
+};
+
+XMLParser.prototype._handleText = function(text) {
+  this.target.data(text);
+};
+
+XMLParser.prototype._handleCdata = function(text) {
+  this.target.data(text);
+};
+
+XMLParser.prototype._handleDoctype = function(text) {
+};
+
+XMLParser.prototype._handleComment = function(comment) {
+};
+
+XMLParser.prototype._handleCloseTag = function(tag) {
+  this.target.end(tag);
+};
+
+XMLParser.prototype._handleError = function(err) {
+  throw err;
+};
+
+XMLParser.prototype.feed = function(chunk) {
+  this.parser.write(chunk);
+};
+
+XMLParser.prototype.close = function() {
+  this.parser.close();
+  return this.target.close();
+};
+
+exports.XMLParser = XMLParser;
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/sprintf.js b/node_modules/cordova-common/node_modules/elementtree/lib/sprintf.js
new file mode 100644
index 0000000..f802c1b
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/sprintf.js
@@ -0,0 +1,86 @@
+/*
+ *  Copyright 2011 Rackspace
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+var cache = {};
+
+
+// Do any others need escaping?
+var TO_ESCAPE = {
+  '\'': '\\\'',
+  '\n': '\\n'
+};
+
+
+function populate(formatter) {
+  var i, type,
+      key = formatter,
+      prev = 0,
+      arg = 1,
+      builder = 'return \'';
+
+  for (i = 0; i < formatter.length; i++) {
+    if (formatter[i] === '%') {
+      type = formatter[i + 1];
+
+      switch (type) {
+        case 's':
+          builder += formatter.slice(prev, i) + '\' + arguments[' + arg + '] + \'';
+          prev = i + 2;
+          arg++;
+          break;
+        case 'j':
+          builder += formatter.slice(prev, i) + '\' + JSON.stringify(arguments[' + arg + ']) + \'';
+          prev = i + 2;
+          arg++;
+          break;
+        case '%':
+          builder += formatter.slice(prev, i + 1);
+          prev = i + 2;
+          i++;
+          break;
+      }
+
+
+    } else if (TO_ESCAPE[formatter[i]]) {
+      builder += formatter.slice(prev, i) + TO_ESCAPE[formatter[i]];
+      prev = i + 1;
+    }
+  }
+
+  builder += formatter.slice(prev) + '\';';
+  cache[key] = new Function(builder);
+}
+
+
+/**
+ * A fast version of sprintf(), which currently only supports the %s and %j.
+ * This caches a formatting function for each format string that is used, so
+ * you should only use this sprintf() will be called many times with a single
+ * format string and a limited number of format strings will ever be used (in
+ * general this means that format strings should be string literals).
+ *
+ * @param {String} formatter A format string.
+ * @param {...String} var_args Values that will be formatted by %s and %j.
+ * @return {String} The formatted output.
+ */
+exports.sprintf = function(formatter, var_args) {
+  if (!cache[formatter]) {
+    populate(formatter);
+  }
+
+  return cache[formatter].apply(null, arguments);
+};
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/treebuilder.js b/node_modules/cordova-common/node_modules/elementtree/lib/treebuilder.js
new file mode 100644
index 0000000..393a98f
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/treebuilder.js
@@ -0,0 +1,60 @@
+function TreeBuilder(element_factory) {
+  this._data = [];
+  this._elem = [];
+  this._last = null;
+  this._tail = null;
+  if (!element_factory) {
+    /* evil circular dep */
+    element_factory = require('./elementtree').Element;
+  }
+  this._factory = element_factory;
+}
+
+TreeBuilder.prototype.close = function() {
+  return this._last;
+};
+
+TreeBuilder.prototype._flush = function() {
+  if (this._data) {
+    if (this._last !== null) {
+      var text = this._data.join("");
+      if (this._tail) {
+        this._last.tail = text;
+      }
+      else {
+        this._last.text = text;
+      }
+    }
+    this._data = [];
+  }
+};
+
+TreeBuilder.prototype.data = function(data) {
+  this._data.push(data);
+};
+
+TreeBuilder.prototype.start = function(tag, attrs) {
+  this._flush();
+  var elem = this._factory(tag, attrs);
+  this._last = elem;
+
+  if (this._elem.length) {
+    this._elem[this._elem.length - 1].append(elem);
+  }
+
+  this._elem.push(elem);
+
+  this._tail = null;
+};
+
+TreeBuilder.prototype.end = function(tag) {
+  this._flush();
+  this._last = this._elem.pop();
+  if (this._last.tag !== tag) {
+    throw new Error("end tag mismatch");
+  }
+  this._tail = 1;
+  return this._last;
+};
+
+exports.TreeBuilder = TreeBuilder;
diff --git a/node_modules/cordova-common/node_modules/elementtree/lib/utils.js b/node_modules/cordova-common/node_modules/elementtree/lib/utils.js
new file mode 100644
index 0000000..b08a670
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/lib/utils.js
@@ -0,0 +1,72 @@
+/**
+ *  Copyright 2011 Rackspace
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+/**
+ * @param {Object} hash.
+ * @param {Array} ignored.
+ */
+function items(hash, ignored) {
+  ignored = ignored || null;
+  var k, rv = [];
+
+  function is_ignored(key) {
+    if (!ignored || ignored.length === 0) {
+      return false;
+    }
+
+    return ignored.indexOf(key);
+  }
+
+  for (k in hash) {
+    if (hash.hasOwnProperty(k) && !(is_ignored(ignored))) {
+      rv.push([k, hash[k]]);
+    }
+  }
+
+  return rv;
+}
+
+
+function findall(re, str) {
+  var match, matches = [];
+
+  while ((match = re.exec(str))) {
+      matches.push(match);
+  }
+
+  return matches;
+}
+
+function merge(a, b) {
+  var c = {}, attrname;
+
+  for (attrname in a) {
+    if (a.hasOwnProperty(attrname)) {
+      c[attrname] = a[attrname];
+    }
+  }
+  for (attrname in b) {
+    if (b.hasOwnProperty(attrname)) {
+      c[attrname] = b[attrname];
+    }
+  }
+  return c;
+}
+
+exports.items = items;
+exports.findall = findall;
+exports.merge = merge;
diff --git a/node_modules/elementtree/package.json b/node_modules/cordova-common/node_modules/elementtree/package.json
similarity index 51%
copy from node_modules/elementtree/package.json
copy to node_modules/cordova-common/node_modules/elementtree/package.json
index f164ea7..244b02f 100644
--- a/node_modules/elementtree/package.json
+++ b/node_modules/cordova-common/node_modules/elementtree/package.json
@@ -1,47 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "elementtree@^0.1.6",
-        "scope": null,
-        "escapedName": "elementtree",
-        "name": "elementtree",
-        "rawSpec": "^0.1.6",
-        "spec": ">=0.1.6 <0.2.0",
-        "type": "range"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows"
+      "elementtree@0.1.6",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "elementtree@>=0.1.6 <0.2.0",
+  "_from": "elementtree@0.1.6",
   "_id": "elementtree@0.1.6",
-  "_inCache": true,
-  "_installable": true,
-  "_location": "/elementtree",
-  "_npmUser": {
-    "name": "rphillips",
-    "email": "ryan@trolocsis.com"
-  },
-  "_npmVersion": "1.3.24",
+  "_inBundle": false,
+  "_integrity": "sha1-KsTEbqMFFsjEy9teOsdBjlkt4gw=",
+  "_location": "/cordova-common/elementtree",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "elementtree@^0.1.6",
-    "scope": null,
-    "escapedName": "elementtree",
+    "type": "version",
+    "registry": true,
+    "raw": "elementtree@0.1.6",
     "name": "elementtree",
-    "rawSpec": "^0.1.6",
-    "spec": ">=0.1.6 <0.2.0",
-    "type": "range"
+    "escapedName": "elementtree",
+    "rawSpec": "0.1.6",
+    "saveSpec": null,
+    "fetchSpec": "0.1.6"
   },
   "_requiredBy": [
-    "/",
     "/cordova-common"
   ],
-  "_resolved": "http://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
-  "_shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c",
-  "_shrinkwrap": null,
-  "_spec": "elementtree@^0.1.6",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows",
+  "_resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
+  "_spec": "0.1.6",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Rackspace US, Inc."
   },
@@ -68,10 +53,6 @@
   "directories": {
     "lib": "lib"
   },
-  "dist": {
-    "shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c",
-    "tarball": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz"
-  },
   "engines": {
     "node": ">= 0.4.0"
   },
@@ -90,15 +71,7 @@
     }
   ],
   "main": "lib/elementtree.js",
-  "maintainers": [
-    {
-      "name": "rphillips",
-      "email": "ryan@trolocsis.com"
-    }
-  ],
   "name": "elementtree",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/racker/node-elementtree.git"
diff --git a/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml b/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml
new file mode 100644
index 0000000..72c33ae
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/tests/data/xml1.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<container name="test_container_1" xmlns:android="http://schemas.android.com/apk/res/android">
+  <object>dd
+    <name>test_object_1</name>
+    <hash>4281c348eaf83e70ddce0e07221c3d28</hash>
+    <bytes android:type="cool">14</bytes>
+    <content_type>application/octetstream</content_type>
+    <last_modified>2009-02-03T05:26:32.612278</last_modified>
+  </object>
+  <object>
+    <name>test_object_2</name>
+    <hash>b039efe731ad111bc1b0ef221c3849d0</hash>
+    <bytes android:type="lame">64</bytes>
+    <content_type>application/octetstream</content_type>
+    <last_modified>2009-02-03T05:26:32.612278</last_modified>
+  </object>
+</container>
diff --git a/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml b/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml
new file mode 100644
index 0000000..5f94bbd
--- /dev/null
+++ b/node_modules/cordova-common/node_modules/elementtree/tests/data/xml2.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<object>
+    <title>
+        Hello World
+    </title>
+    <children>
+        <object id="obj1" />
+        <object id="obj2" />
+        <object id="obj3" />
+    </children>
+    <text><![CDATA[
+        Test & Test & Test
+    ]]></text>
+</object>
diff --git a/node_modules/elementtree/tests/test-simple.js b/node_modules/cordova-common/node_modules/elementtree/tests/test-simple.js
similarity index 100%
copy from node_modules/elementtree/tests/test-simple.js
copy to node_modules/cordova-common/node_modules/elementtree/tests/test-simple.js
diff --git a/node_modules/cordova-common/package.json b/node_modules/cordova-common/package.json
index 0ed8a8e..11f7fca 100644
--- a/node_modules/cordova-common/package.json
+++ b/node_modules/cordova-common/package.json
@@ -1,10 +1,18 @@
 {
+  "_args": [
+    [
+      "cordova-common@2.2.1",
+      "C:\\Projects\\Cordova\\cordova-windows"
+    ]
+  ],
   "_from": "cordova-common@2.2.1",
   "_id": "cordova-common@2.2.1",
   "_inBundle": false,
   "_integrity": "sha1-cAm8WRcpyqcoWliM/Wp7VM2DTww=",
   "_location": "/cordova-common",
-  "_phantomChildren": {},
+  "_phantomChildren": {
+    "sax": "0.3.5"
+  },
   "_requested": {
     "type": "version",
     "registry": true,
@@ -16,13 +24,11 @@
     "fetchSpec": "2.2.1"
   },
   "_requiredBy": [
-    "#USER",
     "/"
   ],
   "_resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-2.2.1.tgz",
-  "_shasum": "7009bc591729caa7285a588cfd6a7b54cd834f0c",
-  "_spec": "cordova-common@2.2.1",
-  "_where": "/Users/nikitamatrosov/cordova/cordova-windows",
+  "_spec": "2.2.1",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Apache Software Foundation"
   },
@@ -30,7 +36,6 @@
     "url": "https://issues.apache.org/jira/browse/CB",
     "email": "dev@cordova.apache.org"
   },
-  "bundleDependencies": false,
   "contributors": [],
   "dependencies": {
     "ansi": "^0.3.1",
@@ -47,7 +52,6 @@
     "underscore": "^1.8.3",
     "unorm": "^1.3.3"
   },
-  "deprecated": false,
   "description": "Apache Cordova tools and platforms shared routines",
   "devDependencies": {
     "eslint": "^4.0.0",
diff --git a/node_modules/cordova-registry-mapper/README.md b/node_modules/cordova-registry-mapper/README.md
index 841d02d..3b93e5f 100644
--- a/node_modules/cordova-registry-mapper/README.md
+++ b/node_modules/cordova-registry-mapper/README.md
@@ -1,6 +1,6 @@
 [![Build Status](https://travis-ci.org/stevengill/cordova-registry-mapper.svg?branch=master)](https://travis-ci.org/stevengill/cordova-registry-mapper)
 
-# Cordova Registry Mapper
+#Cordova Registry Mapper
 
 This module is used to map Cordova plugin ids to package names and vice versa.
 
diff --git a/node_modules/cordova-registry-mapper/package.json b/node_modules/cordova-registry-mapper/package.json
index 033e444..8bdee00 100644
--- a/node_modules/cordova-registry-mapper/package.json
+++ b/node_modules/cordova-registry-mapper/package.json
@@ -1,63 +1,42 @@
 {
   "_args": [
     [
-      {
-        "raw": "cordova-registry-mapper@^1.1.8",
-        "scope": null,
-        "escapedName": "cordova-registry-mapper",
-        "name": "cordova-registry-mapper",
-        "rawSpec": "^1.1.8",
-        "spec": ">=1.1.8 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common"
+      "cordova-registry-mapper@1.1.15",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "cordova-registry-mapper@>=1.1.8 <2.0.0",
+  "_from": "cordova-registry-mapper@1.1.15",
   "_id": "cordova-registry-mapper@1.1.15",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-4kS5GFuBdUc7/2B5MkkFEV+D3Hw=",
   "_location": "/cordova-registry-mapper",
-  "_nodeVersion": "5.4.1",
-  "_npmUser": {
-    "name": "stevegill",
-    "email": "stevengill97@gmail.com"
-  },
-  "_npmVersion": "3.5.3",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "cordova-registry-mapper@^1.1.8",
-    "scope": null,
-    "escapedName": "cordova-registry-mapper",
+    "type": "version",
+    "registry": true,
+    "raw": "cordova-registry-mapper@1.1.15",
     "name": "cordova-registry-mapper",
-    "rawSpec": "^1.1.8",
-    "spec": ">=1.1.8 <2.0.0",
-    "type": "range"
+    "escapedName": "cordova-registry-mapper",
+    "rawSpec": "1.1.15",
+    "saveSpec": null,
+    "fetchSpec": "1.1.15"
   },
   "_requiredBy": [
     "/cordova-common"
   ],
   "_resolved": "https://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/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common",
+  "_spec": "1.1.15",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Steve Gill"
   },
   "bugs": {
     "url": "https://github.com/stevengill/cordova-registry-mapper/issues"
   },
-  "dependencies": {},
   "description": "Maps old plugin ids to new plugin names for fetching from npm",
   "devDependencies": {
     "tape": "^3.5.0"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "e244b9185b8175473bff6079324905115f83dc7c",
-    "tarball": "https://registry.npmjs.org/cordova-registry-mapper/-/cordova-registry-mapper-1.1.15.tgz"
-  },
-  "gitHead": "00af0f028ec94154a364eeabe38b8e22320647bd",
   "homepage": "https://github.com/stevengill/cordova-registry-mapper#readme",
   "keywords": [
     "cordova",
@@ -65,15 +44,7 @@
   ],
   "license": "Apache version 2.0",
   "main": "index.js",
-  "maintainers": [
-    {
-      "name": "stevegill",
-      "email": "stevengill97@gmail.com"
-    }
-  ],
   "name": "cordova-registry-mapper",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/stevengill/cordova-registry-mapper.git"
diff --git a/node_modules/elementtree/.travis.yml b/node_modules/elementtree/.travis.yml
index 6f27c96..1ab2652 100644
--- a/node_modules/elementtree/.travis.yml
+++ b/node_modules/elementtree/.travis.yml
@@ -1,7 +1,11 @@
 language: node_js
+sudo: false
 
 node_js:
-  - 0.6
+  - "0.10"
+  - "0.11"
+  - "0.12"
+  - "iojs"
 
 script: make test
 
diff --git a/node_modules/elementtree/CHANGES.md b/node_modules/elementtree/CHANGES.md
index 50d415d..08fdb1f 100644
--- a/node_modules/elementtree/CHANGES.md
+++ b/node_modules/elementtree/CHANGES.md
@@ -1,4 +1,4 @@
-elementtree v0.1.6 (in development)
+elementtree v0.1.6 - 2014-02-06
 
 * Add support for CData elements. (#14)
   [hermannpencole]
diff --git a/node_modules/elementtree/node_modules/sax/LICENSE b/node_modules/elementtree/node_modules/sax/LICENSE
new file mode 100644
index 0000000..ccffa08
--- /dev/null
+++ b/node_modules/elementtree/node_modules/sax/LICENSE
@@ -0,0 +1,41 @@
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+====
+
+`String.fromCodePoint` by Mathias Bynens used according to terms of MIT
+License, as follows:
+
+    Copyright Mathias Bynens <https://mathiasbynens.be/>
+
+    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/elementtree/node_modules/sax/LICENSE-W3C.html b/node_modules/elementtree/node_modules/sax/LICENSE-W3C.html
new file mode 100644
index 0000000..a611e3f
--- /dev/null
+++ b/node_modules/elementtree/node_modules/sax/LICENSE-W3C.html
@@ -0,0 +1,188 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><meta name="generator" content="HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 13), see www.w3.org" /><title>W3C Software Notice and License</title><link rel="stylesheet" href="/2008/site/css/minimum" type="text/css" media="handheld, all" /><style type="text/css" media="print, screen and (min-width: 481px)" xml:space="preserve">
+     @import url("/2008/site/css/advanced");
+</style><link href="/2008/site/css/minimum" rel="stylesheet" type="text/css" media="handheld, only screen and (max-device-width: 480px)" /><meta name="viewport" content="width=device-width" /><link rel="stylesheet" href="/2008/site/css/print" type="text/css" media="print" /><link rel="shortcut icon" href="/2008/site/images/favicon.ico" type="image/x-icon" /></head><body id="www-w3-org" class="w3c_public"><div id="w3c_container">
+    
+    
+
+         <div id="w3c_mast">
+            <h1 class="logo">
+               <a tabindex="2" accesskey="1" href="/"><img src="/2008/site/images/logo-w3c-mobile-lg" width="90" height="53" alt="W3C" /></a>
+               <span class="alt-logo">W3C</span>
+            </h1>
+
+            <div id="w3c_nav">
+               
+               
+
+               <form action="/Help/search" method="get" enctype="application/x-www-form-urlencoded"><div class="w3c_sec_nav"><!-- --></div><ul class="main_nav"><li class="first-item">
+                        <a href="/standards/">Standards</a>
+                     </li><li>
+                        <a href="/participate/">Participate</a>
+                     </li><li>
+                        <a href="/Consortium/membership">Membership</a>
+                     </li><li class="last-item">
+                        <a href="/Consortium/">About W3C</a>
+                     </li><li class="search-item">
+                        <div id="search-form">
+                           <input tabindex="3" class="text" name="q" value="" title="Search" type="text" />
+                           <button id="search-submit" name="search-submit" type="submit"><img class="submit" src="/2008/site/images/search-button" alt="Search" width="21" height="17" /></button>
+                        </div>
+                     </li></ul></form>
+            </div>
+            
+         </div>
+         
+
+         <div id="w3c_main">
+            <div id="w3c_logo_shadow" class="w3c_leftCol">
+               <img height="32" alt="" src="/2008/site/images/logo-shadow" />
+            </div>
+            
+            <div class="w3c_leftCol"><h2 class="offscreen">Site Navigation</h2>
+    <h3 class="category"><span class="ribbon"><a href="/Consortium/Legal/ipr-notice.html" title="Up to Policies and Legal Information">Policies and Legal Information <img src="/2008/site/images/header-link" alt="Header link" width="13" height="13" class="header-link" /></a></span></h3>
+       <ul class="theme">
+        <li><a href="/Consortium/Legal/2008/04-testsuite-copyright.html">Licenses for W3C Test Suites</a></li>
+        <li><a href="/2004/10/27-testcases.html">Policies for Contribution of Test Cases to W3C</a></li>
+        <li><a href="/Consortium/Legal/IPR-FAQ-20000620.html">Intellectual Rights FAQ</a></li>
+        <li><a href="/Consortium/Legal/privacy-statement-20000612.html">W3C Privacy Statements</a></li>
+        <li><a href="/Consortium/Legal/2002/copyright-documents-20021231.html">W3C Document License</a></li>
+        <li><a href="/Consortium/Legal/2002/trademarks-20021231.html">W3C Trademarks and Generic Terms</a></li>
+        <li><a href="/Consortium/Legal/2002/trademark-license-20021231.html">W3C&#xAE; Trademark and Service Mark License</a></li>
+        <li><a class="current">W3C Software Notice and License</a></li>
+        <li><a href="/Consortium/Legal/2002/collaborators-agreement-20021231.html">W3C Invited Expert and Collaborators Agreement</a></li>
+        <li><a href="/Consortium/Persistence.html">W3C URI Persistence Policy</a></li>
+        <li><a href="/1999/10/21-mirroring-policy.html">Mirroring the W3C Site</a></li>
+        <li><a href="/Consortium/Legal/2006/08-copyright-translations.html">Translations of the Copyright Notice</a></li>
+       </ul>
+       <br /></div>
+            <div class="w3c_mainCol">
+               <div id="w3c_crumbs">
+       <div id="w3c_crumbs_frame">
+        <ul class="bct"> <!-- .bct / Breadcrumbs -->
+          <li class="skip"><a tabindex="1" accesskey="2" title="Skip to content (e.g., when browsing via audio)" href="#w3c_content_body">Skip</a></li>
+          <li><a href="/">W3C</a>&#xA0;<span class="cr">&#xBB;</span>&#xA0;</li>
+          <li><a href="/Consortium/">About&#xA0;W3C</a>&#xA0;<span class="cr">&#xBB;</span>&#xA0;</li>
+          <li><a href="/Consortium/facts.html">Facts&#xA0;About&#xA0;W3C</a>&#xA0;<span class="cr">&#xBB;</span>&#xA0;</li>
+          <li><a href="/Consortium/Legal/ipr-notice.html">Policies&#xA0;and&#xA0;Legal&#xA0;Information</a>&#xA0;<span class="cr">&#xBB;</span>&#xA0;</li>
+          <li class="current">W3C Software Notice and License</li>
+        </ul>            
+     </div>
+    </div>
+               <h1 class="title">W3C Software Notice and License</h1>
+               <div id="w3c_content_body">
+                  <div class="line">
+                     <p class="intro tPadding">This work (and included software, documentation such as READMEs, or other
+related items) is being provided by the copyright holders under the following
+license.</p>
+<h2>License</h2>
+                     
+                     <p class="tPadding">
+By obtaining, using and/or copying this work, you (the licensee)
+agree that you have read, understood, and will comply with the following
+terms and conditions.</p>
+
+                     <p>Permission to copy, modify, and distribute this software and its
+documentation, with or without modification,&#xA0;for any purpose and without
+fee or royalty is hereby granted, provided that you include the following on
+ALL copies of the software and documentation or portions thereof, including
+modifications:</p>
+
+                     <ul class="show_items"><li>The full text of this NOTICE in a location viewable to users of the
+    redistributed or derivative work.</li><li>Any pre-existing intellectual property disclaimers, notices, or terms
+    and conditions. If none exist, the <a href="copyright-software-short-notice-20021231.html">W3C Software Short
+    Notice</a> should be included (hypertext is preferred, text is permitted)
+    within the body of any redistributed or derivative code.</li><li>Notice of any changes or modifications to the files, including the date
+    changes were made. (We recommend you provide URIs to the location from
+    which the code is derived.)</li></ul>
+
+<h2>Disclaimers</h2>
+
+                     <p>THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
+MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
+PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE
+ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.</p>
+
+                     <p>COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
+DOCUMENTATION.</p>
+
+                     <p>The name and trademarks of copyright holders may NOT be used in
+advertising or publicity pertaining to the software without specific, written
+prior permission. Title to copyright in this software and any associated
+documentation will at all times remain with copyright holders.</p>
+
+                     <h2>Notes</h2>
+
+	                    <p>This version: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231</p>
+
+                     <p>This formulation of W3C's notice and license became active on December 31
+2002. This version removes the copyright ownership notice such that this
+license can be used with materials other than those owned by the W3C,
+reflects that ERCIM is now a host of the W3C, includes references to this
+specific dated version of the license, and removes the ambiguous grant of
+"use". Otherwise, this version is the same as the <a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">previous
+version</a> and is written so as to preserve the <a href="http://www.gnu.org/philosophy/license-list.html#GPLCompatibleLicenses">Free
+Software Foundation's assessment of GPL compatibility</a> and <a href="http://www.opensource.org/licenses/W3C.php">OSI's certification</a>
+under the <a href="http://www.opensource.org/docs/definition.php">Open Source
+Definition</a>.</p>
+                  </div>
+               </div>
+            </div>
+         </div>
+         
+         
+         
+      </div><div id="w3c_footer">
+         <div id="w3c_footer-inner">
+            <h2 class="offscreen">Footer Navigation</h2>
+            <div class="w3c_footer-nav">
+               <h3>Navigation</h3>
+               <ul class="footer_top_nav"><li>
+                     <a href="/">Home</a>
+                  </li><li>
+                     <a href="/standards/">Standards</a>
+                  </li><li>
+                     <a href="/participate/">Participate</a>
+                  </li><li>
+                     <a href="/Consortium/membership">Membership</a>
+                  </li><li class="last-item">
+                     <a href="/Consortium/">About W3C</a>
+                  </li></ul>
+            </div>
+            <div class="w3c_footer-nav">
+               <h3>Contact W3C</h3>
+               <ul class="footer_bottom_nav"><li>
+                     <a href="/Consortium/contact">Contact</a>
+                  </li><li>
+                     <a accesskey="0" href="/Help/">Help and FAQ</a>
+                  </li><li>
+                     <a href="/Consortium/sponsor/">Sponsor / Donate</a>
+                  </li><li>
+                     <a href="/Consortium/siteindex">Site Map</a>
+                  </li><li>
+                     <address id="w3c_signature">
+                        <a href="http://lists.w3.org/Archives/Public/site-comments/">Feedback</a></address>
+                  </li></ul>
+            </div>
+            <div class="w3c_footer-nav">
+               <h3>W3C Updates</h3>
+               <ul class="footer_follow_nav"><li>
+                     <a href="http://twitter.com/W3C" title="Follow W3C on Twitter">
+                        <img src="/2008/site/images/twitter-bird" alt="Twitter" width="78" height="83" class="social-icon" />
+                     </a>
+                     <a href="http://identi.ca/w3c" title="See W3C on Identica">
+                        <img src="/2008/site/images/identica-logo" alt="Identica" width="91" height="83" class="social-icon" />
+                     </a>
+                  </li></ul>
+            </div>
+            <p class="copyright">Copyright &#xA9; 2012 W3C <sup>&#xAE;</sup> (<a href="http://www.csail.mit.edu/">
+                  <acronym title="Massachusetts Institute of Technology">MIT</acronym>
+               </a>, <a href="http://www.ercim.org/">
+                  <acronym title="European Research Consortium for Informatics and Mathematics"> ERCIM</acronym>
+               </a>, <a href="http://www.keio.ac.jp/">Keio</a>) <a href="/Consortium/Legal/ipr-notice">Usage policies apply</a>.</p>
+         </div>
+      </div><!-- Generated from data/scripts.php, ../../smarty/{scripts.tpl} --><!-- At the bottom for performance reasons --><div id="w3c_scripts">
+         <script type="text/javascript" src="/2008/site/js/main" xml:space="preserve"><!-- --></script>
+      </div></body></html>
diff --git a/node_modules/elementtree/node_modules/sax/README.md b/node_modules/elementtree/node_modules/sax/README.md
new file mode 100644
index 0000000..91a0314
--- /dev/null
+++ b/node_modules/elementtree/node_modules/sax/README.md
@@ -0,0 +1,220 @@
+# sax js
+
+A sax-style parser for XML and HTML.
+
+Designed with [node](http://nodejs.org/) in mind, but should work fine in
+the browser or other CommonJS implementations.
+
+## What This Is
+
+* A very simple tool to parse through an XML string.
+* A stepping stone to a streaming HTML parser.
+* A handy way to deal with RSS and other mostly-ok-but-kinda-broken XML
+  docs.
+
+## What This Is (probably) Not
+
+* An HTML Parser - That's a fine goal, but this isn't it.  It's just
+  XML.
+* A DOM Builder - You can use it to build an object model out of XML,
+  but it doesn't do that out of the box.
+* XSLT - No DOM = no querying.
+* 100% Compliant with (some other SAX implementation) - Most SAX
+  implementations are in Java and do a lot more than this does.
+* An XML Validator - It does a little validation when in strict mode, but
+  not much.
+* A Schema-Aware XSD Thing - Schemas are an exercise in fetishistic
+  masochism.
+* A DTD-aware Thing - Fetching DTDs is a much bigger job.
+
+## Regarding `<!DOCTYPE`s and `<!ENTITY`s
+
+The parser will handle the basic XML entities in text nodes and attribute
+values: `&amp; &lt; &gt; &apos; &quot;`. It's possible to define additional
+entities in XML by putting them in the DTD. This parser doesn't do anything
+with that. If you want to listen to the `ondoctype` event, and then fetch
+the doctypes, and read the entities and add them to `parser.ENTITIES`, then
+be my guest.
+
+Unknown entities will fail in strict mode, and in loose mode, will pass
+through unmolested.
+
+## Usage
+
+```javascript
+var sax = require("./lib/sax"),
+  strict = true, // set to false for html-mode
+  parser = sax.parser(strict);
+
+parser.onerror = function (e) {
+  // an error happened.
+};
+parser.ontext = function (t) {
+  // got some text.  t is the string of text.
+};
+parser.onopentag = function (node) {
+  // opened a tag.  node has "name" and "attributes"
+};
+parser.onattribute = function (attr) {
+  // an attribute.  attr has "name" and "value"
+};
+parser.onend = function () {
+  // parser stream is done, and ready to have more stuff written to it.
+};
+
+parser.write('<xml>Hello, <who name="world">world</who>!</xml>').close();
+
+// stream usage
+// takes the same options as the parser
+var saxStream = require("sax").createStream(strict, options)
+saxStream.on("error", function (e) {
+  // unhandled errors will throw, since this is a proper node
+  // event emitter.
+  console.error("error!", e)
+  // clear the error
+  this._parser.error = null
+  this._parser.resume()
+})
+saxStream.on("opentag", function (node) {
+  // same object as above
+})
+// pipe is supported, and it's readable/writable
+// same chunks coming in also go out.
+fs.createReadStream("file.xml")
+  .pipe(saxStream)
+  .pipe(fs.createWriteStream("file-copy.xml"))
+```
+
+
+## Arguments
+
+Pass the following arguments to the parser function.  All are optional.
+
+`strict` - Boolean. Whether or not to be a jerk. Default: `false`.
+
+`opt` - Object bag of settings regarding string formatting.  All default to `false`.
+
+Settings supported:
+
+* `trim` - Boolean. Whether or not to trim text and comment nodes.
+* `normalize` - Boolean. If true, then turn any whitespace into a single
+  space.
+* `lowercase` - Boolean. If true, then lowercase tag names and attribute names
+  in loose mode, rather than uppercasing them.
+* `xmlns` - Boolean. If true, then namespaces are supported.
+* `position` - Boolean. If false, then don't track line/col/position.
+* `strictEntities` - Boolean. If true, only parse [predefined XML
+  entities](http://www.w3.org/TR/REC-xml/#sec-predefined-ent)
+  (`&amp;`, `&apos;`, `&gt;`, `&lt;`, and `&quot;`)
+
+## Methods
+
+`write` - Write bytes onto the stream. You don't have to do this all at
+once. You can keep writing as much as you want.
+
+`close` - Close the stream. Once closed, no more data may be written until
+it is done processing the buffer, which is signaled by the `end` event.
+
+`resume` - To gracefully handle errors, assign a listener to the `error`
+event. Then, when the error is taken care of, you can call `resume` to
+continue parsing. Otherwise, the parser will not continue while in an error
+state.
+
+## Members
+
+At all times, the parser object will have the following members:
+
+`line`, `column`, `position` - Indications of the position in the XML
+document where the parser currently is looking.
+
+`startTagPosition` - Indicates the position where the current tag starts.
+
+`closed` - Boolean indicating whether or not the parser can be written to.
+If it's `true`, then wait for the `ready` event to write again.
+
+`strict` - Boolean indicating whether or not the parser is a jerk.
+
+`opt` - Any options passed into the constructor.
+
+`tag` - The current tag being dealt with.
+
+And a bunch of other stuff that you probably shouldn't touch.
+
+## Events
+
+All events emit with a single argument. To listen to an event, assign a
+function to `on<eventname>`. Functions get executed in the this-context of
+the parser object. The list of supported events are also in the exported
+`EVENTS` array.
+
+When using the stream interface, assign handlers using the EventEmitter
+`on` function in the normal fashion.
+
+`error` - Indication that something bad happened. The error will be hanging
+out on `parser.error`, and must be deleted before parsing can continue. By
+listening to this event, you can keep an eye on that kind of stuff. Note:
+this happens *much* more in strict mode. Argument: instance of `Error`.
+
+`text` - Text node. Argument: string of text.
+
+`doctype` - The `<!DOCTYPE` declaration. Argument: doctype string.
+
+`processinginstruction` - Stuff like `<?xml foo="blerg" ?>`. Argument:
+object with `name` and `body` members. Attributes are not parsed, as
+processing instructions have implementation dependent semantics.
+
+`sgmldeclaration` - Random SGML declarations. Stuff like `<!ENTITY p>`
+would trigger this kind of event. This is a weird thing to support, so it
+might go away at some point. SAX isn't intended to be used to parse SGML,
+after all.
+
+`opentag` - An opening tag. Argument: object with `name` and `attributes`.
+In non-strict mode, tag names are uppercased, unless the `lowercase`
+option is set.  If the `xmlns` option is set, then it will contain
+namespace binding information on the `ns` member, and will have a
+`local`, `prefix`, and `uri` member.
+
+`closetag` - A closing tag. In loose mode, tags are auto-closed if their
+parent closes. In strict mode, well-formedness is enforced. Note that
+self-closing tags will have `closeTag` emitted immediately after `openTag`.
+Argument: tag name.
+
+`attribute` - An attribute node.  Argument: object with `name` and `value`.
+In non-strict mode, attribute names are uppercased, unless the `lowercase`
+option is set.  If the `xmlns` option is set, it will also contains namespace
+information.
+
+`comment` - A comment node.  Argument: the string of the comment.
+
+`opencdata` - The opening tag of a `<![CDATA[` block.
+
+`cdata` - The text of a `<![CDATA[` block. Since `<![CDATA[` blocks can get
+quite large, this event may fire multiple times for a single block, if it
+is broken up into multiple `write()`s. Argument: the string of random
+character data.
+
+`closecdata` - The closing tag (`]]>`) of a `<![CDATA[` block.
+
+`opennamespace` - If the `xmlns` option is set, then this event will
+signal the start of a new namespace binding.
+
+`closenamespace` - If the `xmlns` option is set, then this event will
+signal the end of a namespace binding.
+
+`end` - Indication that the closed stream has ended.
+
+`ready` - Indication that the stream has reset, and is ready to be written
+to.
+
+`noscript` - In non-strict mode, `<script>` tags trigger a `"script"`
+event, and their contents are not checked for special xml characters.
+If you pass `noscript: true`, then this behavior is suppressed.
+
+## Reporting Problems
+
+It's best to write a failing test if you find an issue.  I will always
+accept pull requests with failing tests if they demonstrate intended
+behavior, but it is very hard to figure out what issue you're describing
+without a test.  Writing a test is also the best way for you yourself
+to figure out if you really understand the issue you think you have with
+sax-js.
diff --git a/node_modules/elementtree/node_modules/sax/lib/sax.js b/node_modules/elementtree/node_modules/sax/lib/sax.js
new file mode 100644
index 0000000..5c08d5f
--- /dev/null
+++ b/node_modules/elementtree/node_modules/sax/lib/sax.js
@@ -0,0 +1,1563 @@
+;(function (sax) { // wrapper for non-node envs
+  sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }
+  sax.SAXParser = SAXParser
+  sax.SAXStream = SAXStream
+  sax.createStream = createStream
+
+  // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.
+  // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),
+  // since that's the earliest that a buffer overrun could occur.  This way, checks are
+  // as rare as required, but as often as necessary to ensure never crossing this bound.
+  // Furthermore, buffers are only tested at most once per write(), so passing a very
+  // large string into write() might have undesirable effects, but this is manageable by
+  // the caller, so it is assumed to be safe.  Thus, a call to write() may, in the extreme
+  // edge case, result in creating at most one complete copy of the string passed in.
+  // Set to Infinity to have unlimited buffers.
+  sax.MAX_BUFFER_LENGTH = 64 * 1024
+
+  var buffers = [
+    'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',
+    'procInstName', 'procInstBody', 'entity', 'attribName',
+    'attribValue', 'cdata', 'script'
+  ]
+
+  sax.EVENTS = [
+    'text',
+    'processinginstruction',
+    'sgmldeclaration',
+    'doctype',
+    'comment',
+    'attribute',
+    'opentag',
+    'closetag',
+    'opencdata',
+    'cdata',
+    'closecdata',
+    'error',
+    'end',
+    'ready',
+    'script',
+    'opennamespace',
+    'closenamespace'
+  ]
+
+  function SAXParser (strict, opt) {
+    if (!(this instanceof SAXParser)) {
+      return new SAXParser(strict, opt)
+    }
+
+    var parser = this
+    clearBuffers(parser)
+    parser.q = parser.c = ''
+    parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH
+    parser.opt = opt || {}
+    parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags
+    parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'
+    parser.tags = []
+    parser.closed = parser.closedRoot = parser.sawRoot = false
+    parser.tag = parser.error = null
+    parser.strict = !!strict
+    parser.noscript = !!(strict || parser.opt.noscript)
+    parser.state = S.BEGIN
+    parser.strictEntities = parser.opt.strictEntities
+    parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)
+    parser.attribList = []
+
+    // namespaces form a prototype chain.
+    // it always points at the current tag,
+    // which protos to its parent tag.
+    if (parser.opt.xmlns) {
+      parser.ns = Object.create(rootNS)
+    }
+
+    // mostly just for error reporting
+    parser.trackPosition = parser.opt.position !== false
+    if (parser.trackPosition) {
+      parser.position = parser.line = parser.column = 0
+    }
+    emit(parser, 'onready')
+  }
+
+  if (!Object.create) {
+    Object.create = function (o) {
+      function F () {}
+      F.prototype = o
+      var newf = new F()
+      return newf
+    }
+  }
+
+  if (!Object.keys) {
+    Object.keys = function (o) {
+      var a = []
+      for (var i in o) if (o.hasOwnProperty(i)) a.push(i)
+      return a
+    }
+  }
+
+  function checkBufferLength (parser) {
+    var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)
+    var maxActual = 0
+    for (var i = 0, l = buffers.length; i < l; i++) {
+      var len = parser[buffers[i]].length
+      if (len > maxAllowed) {
+        // Text/cdata nodes can get big, and since they're buffered,
+        // we can get here under normal conditions.
+        // Avoid issues by emitting the text node now,
+        // so at least it won't get any bigger.
+        switch (buffers[i]) {
+          case 'textNode':
+            closeText(parser)
+            break
+
+          case 'cdata':
+            emitNode(parser, 'oncdata', parser.cdata)
+            parser.cdata = ''
+            break
+
+          case 'script':
+            emitNode(parser, 'onscript', parser.script)
+            parser.script = ''
+            break
+
+          default:
+            error(parser, 'Max buffer length exceeded: ' + buffers[i])
+        }
+      }
+      maxActual = Math.max(maxActual, len)
+    }
+    // schedule the next check for the earliest possible buffer overrun.
+    var m = sax.MAX_BUFFER_LENGTH - maxActual
+    parser.bufferCheckPosition = m + parser.position
+  }
+
+  function clearBuffers (parser) {
+    for (var i = 0, l = buffers.length; i < l; i++) {
+      parser[buffers[i]] = ''
+    }
+  }
+
+  function flushBuffers (parser) {
+    closeText(parser)
+    if (parser.cdata !== '') {
+      emitNode(parser, 'oncdata', parser.cdata)
+      parser.cdata = ''
+    }
+    if (parser.script !== '') {
+      emitNode(parser, 'onscript', parser.script)
+      parser.script = ''
+    }
+  }
+
+  SAXParser.prototype = {
+    end: function () { end(this) },
+    write: write,
+    resume: function () { this.error = null; return this },
+    close: function () { return this.write(null) },
+    flush: function () { flushBuffers(this) }
+  }
+
+  var Stream
+  try {
+    Stream = require('stream').Stream
+  } catch (ex) {
+    Stream = function () {}
+  }
+
+  var streamWraps = sax.EVENTS.filter(function (ev) {
+    return ev !== 'error' && ev !== 'end'
+  })
+
+  function createStream (strict, opt) {
+    return new SAXStream(strict, opt)
+  }
+
+  function SAXStream (strict, opt) {
+    if (!(this instanceof SAXStream)) {
+      return new SAXStream(strict, opt)
+    }
+
+    Stream.apply(this)
+
+    this._parser = new SAXParser(strict, opt)
+    this.writable = true
+    this.readable = true
+
+    var me = this
+
+    this._parser.onend = function () {
+      me.emit('end')
+    }
+
+    this._parser.onerror = function (er) {
+      me.emit('error', er)
+
+      // if didn't throw, then means error was handled.
+      // go ahead and clear error, so we can write again.
+      me._parser.error = null
+    }
+
+    this._decoder = null
+
+    streamWraps.forEach(function (ev) {
+      Object.defineProperty(me, 'on' + ev, {
+        get: function () {
+          return me._parser['on' + ev]
+        },
+        set: function (h) {
+          if (!h) {
+            me.removeAllListeners(ev)
+            me._parser['on' + ev] = h
+            return h
+          }
+          me.on(ev, h)
+        },
+        enumerable: true,
+        configurable: false
+      })
+    })
+  }
+
+  SAXStream.prototype = Object.create(Stream.prototype, {
+    constructor: {
+      value: SAXStream
+    }
+  })
+
+  SAXStream.prototype.write = function (data) {
+    if (typeof Buffer === 'function' &&
+      typeof Buffer.isBuffer === 'function' &&
+      Buffer.isBuffer(data)) {
+      if (!this._decoder) {
+        var SD = require('string_decoder').StringDecoder
+        this._decoder = new SD('utf8')
+      }
+      data = this._decoder.write(data)
+    }
+
+    this._parser.write(data.toString())
+    this.emit('data', data)
+    return true
+  }
+
+  SAXStream.prototype.end = function (chunk) {
+    if (chunk && chunk.length) {
+      this.write(chunk)
+    }
+    this._parser.end()
+    return true
+  }
+
+  SAXStream.prototype.on = function (ev, handler) {
+    var me = this
+    if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {
+      me._parser['on' + ev] = function () {
+        var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)
+        args.splice(0, 0, ev)
+        me.emit.apply(me, args)
+      }
+    }
+
+    return Stream.prototype.on.call(me, ev, handler)
+  }
+
+  // character classes and tokens
+  var whitespace = '\r\n\t '
+
+  // this really needs to be replaced with character classes.
+  // XML allows all manner of ridiculous numbers and digits.
+  var number = '0124356789'
+  var letter = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+
+  // (Letter | "_" | ":")
+  var quote = '\'"'
+  var attribEnd = whitespace + '>'
+  var CDATA = '[CDATA['
+  var DOCTYPE = 'DOCTYPE'
+  var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'
+  var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'
+  var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }
+
+  // turn all the string character sets into character class objects.
+  whitespace = charClass(whitespace)
+  number = charClass(number)
+  letter = charClass(letter)
+
+  // http://www.w3.org/TR/REC-xml/#NT-NameStartChar
+  // This implementation works on strings, a single character at a time
+  // as such, it cannot ever support astral-plane characters (10000-EFFFF)
+  // without a significant breaking change to either this  parser, or the
+  // JavaScript language.  Implementation of an emoji-capable xml parser
+  // is left as an exercise for the reader.
+  var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
+
+  var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/
+
+  var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/
+  var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/
+
+  quote = charClass(quote)
+  attribEnd = charClass(attribEnd)
+
+  function charClass (str) {
+    return str.split('').reduce(function (s, c) {
+      s[c] = true
+      return s
+    }, {})
+  }
+
+  function isRegExp (c) {
+    return Object.prototype.toString.call(c) === '[object RegExp]'
+  }
+
+  function is (charclass, c) {
+    return isRegExp(charclass) ? !!c.match(charclass) : charclass[c]
+  }
+
+  function not (charclass, c) {
+    return !is(charclass, c)
+  }
+
+  var S = 0
+  sax.STATE = {
+    BEGIN: S++, // leading byte order mark or whitespace
+    BEGIN_WHITESPACE: S++, // leading whitespace
+    TEXT: S++, // general stuff
+    TEXT_ENTITY: S++, // &amp and such.
+    OPEN_WAKA: S++, // <
+    SGML_DECL: S++, // <!BLARG
+    SGML_DECL_QUOTED: S++, // <!BLARG foo "bar
+    DOCTYPE: S++, // <!DOCTYPE
+    DOCTYPE_QUOTED: S++, // <!DOCTYPE "//blah
+    DOCTYPE_DTD: S++, // <!DOCTYPE "//blah" [ ...
+    DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE "//blah" [ "foo
+    COMMENT_STARTING: S++, // <!-
+    COMMENT: S++, // <!--
+    COMMENT_ENDING: S++, // <!-- blah -
+    COMMENT_ENDED: S++, // <!-- blah --
+    CDATA: S++, // <![CDATA[ something
+    CDATA_ENDING: S++, // ]
+    CDATA_ENDING_2: S++, // ]]
+    PROC_INST: S++, // <?hi
+    PROC_INST_BODY: S++, // <?hi there
+    PROC_INST_ENDING: S++, // <?hi "there" ?
+    OPEN_TAG: S++, // <strong
+    OPEN_TAG_SLASH: S++, // <strong /
+    ATTRIB: S++, // <a
+    ATTRIB_NAME: S++, // <a foo
+    ATTRIB_NAME_SAW_WHITE: S++, // <a foo _
+    ATTRIB_VALUE: S++, // <a foo=
+    ATTRIB_VALUE_QUOTED: S++, // <a foo="bar
+    ATTRIB_VALUE_CLOSED: S++, // <a foo="bar"
+    ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar
+    ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar="&quot;"
+    ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot
+    CLOSE_TAG: S++, // </a
+    CLOSE_TAG_SAW_WHITE: S++, // </a   >
+    SCRIPT: S++, // <script> ...
+    SCRIPT_ENDING: S++ // <script> ... <
+  }
+
+  sax.XML_ENTITIES = {
+    'amp': '&',
+    'gt': '>',
+    'lt': '<',
+    'quot': '"',
+    'apos': "'"
+  }
+
+  sax.ENTITIES = {
+    'amp': '&',
+    'gt': '>',
+    'lt': '<',
+    'quot': '"',
+    'apos': "'",
+    'AElig': 198,
+    'Aacute': 193,
+    'Acirc': 194,
+    'Agrave': 192,
+    'Aring': 197,
+    'Atilde': 195,
+    'Auml': 196,
+    'Ccedil': 199,
+    'ETH': 208,
+    'Eacute': 201,
+    'Ecirc': 202,
+    'Egrave': 200,
+    'Euml': 203,
+    'Iacute': 205,
+    'Icirc': 206,
+    'Igrave': 204,
+    'Iuml': 207,
+    'Ntilde': 209,
+    'Oacute': 211,
+    'Ocirc': 212,
+    'Ograve': 210,
+    'Oslash': 216,
+    'Otilde': 213,
+    'Ouml': 214,
+    'THORN': 222,
+    'Uacute': 218,
+    'Ucirc': 219,
+    'Ugrave': 217,
+    'Uuml': 220,
+    'Yacute': 221,
+    'aacute': 225,
+    'acirc': 226,
+    'aelig': 230,
+    'agrave': 224,
+    'aring': 229,
+    'atilde': 227,
+    'auml': 228,
+    'ccedil': 231,
+    'eacute': 233,
+    'ecirc': 234,
+    'egrave': 232,
+    'eth': 240,
+    'euml': 235,
+    'iacute': 237,
+    'icirc': 238,
+    'igrave': 236,
+    'iuml': 239,
+    'ntilde': 241,
+    'oacute': 243,
+    'ocirc': 244,
+    'ograve': 242,
+    'oslash': 248,
+    'otilde': 245,
+    'ouml': 246,
+    'szlig': 223,
+    'thorn': 254,
+    'uacute': 250,
+    'ucirc': 251,
+    'ugrave': 249,
+    'uuml': 252,
+    'yacute': 253,
+    'yuml': 255,
+    'copy': 169,
+    'reg': 174,
+    'nbsp': 160,
+    'iexcl': 161,
+    'cent': 162,
+    'pound': 163,
+    'curren': 164,
+    'yen': 165,
+    'brvbar': 166,
+    'sect': 167,
+    'uml': 168,
+    'ordf': 170,
+    'laquo': 171,
+    'not': 172,
+    'shy': 173,
+    'macr': 175,
+    'deg': 176,
+    'plusmn': 177,
+    'sup1': 185,
+    'sup2': 178,
+    'sup3': 179,
+    'acute': 180,
+    'micro': 181,
+    'para': 182,
+    'middot': 183,
+    'cedil': 184,
+    'ordm': 186,
+    'raquo': 187,
+    'frac14': 188,
+    'frac12': 189,
+    'frac34': 190,
+    'iquest': 191,
+    'times': 215,
+    'divide': 247,
+    'OElig': 338,
+    'oelig': 339,
+    'Scaron': 352,
+    'scaron': 353,
+    'Yuml': 376,
+    'fnof': 402,
+    'circ': 710,
+    'tilde': 732,
+    'Alpha': 913,
+    'Beta': 914,
+    'Gamma': 915,
+    'Delta': 916,
+    'Epsilon': 917,
+    'Zeta': 918,
+    'Eta': 919,
+    'Theta': 920,
+    'Iota': 921,
+    'Kappa': 922,
+    'Lambda': 923,
+    'Mu': 924,
+    'Nu': 925,
+    'Xi': 926,
+    'Omicron': 927,
+    'Pi': 928,
+    'Rho': 929,
+    'Sigma': 931,
+    'Tau': 932,
+    'Upsilon': 933,
+    'Phi': 934,
+    'Chi': 935,
+    'Psi': 936,
+    'Omega': 937,
+    'alpha': 945,
+    'beta': 946,
+    'gamma': 947,
+    'delta': 948,
+    'epsilon': 949,
+    'zeta': 950,
+    'eta': 951,
+    'theta': 952,
+    'iota': 953,
+    'kappa': 954,
+    'lambda': 955,
+    'mu': 956,
+    'nu': 957,
+    'xi': 958,
+    'omicron': 959,
+    'pi': 960,
+    'rho': 961,
+    'sigmaf': 962,
+    'sigma': 963,
+    'tau': 964,
+    'upsilon': 965,
+    'phi': 966,
+    'chi': 967,
+    'psi': 968,
+    'omega': 969,
+    'thetasym': 977,
+    'upsih': 978,
+    'piv': 982,
+    'ensp': 8194,
+    'emsp': 8195,
+    'thinsp': 8201,
+    'zwnj': 8204,
+    'zwj': 8205,
+    'lrm': 8206,
+    'rlm': 8207,
+    'ndash': 8211,
+    'mdash': 8212,
+    'lsquo': 8216,
+    'rsquo': 8217,
+    'sbquo': 8218,
+    'ldquo': 8220,
+    'rdquo': 8221,
+    'bdquo': 8222,
+    'dagger': 8224,
+    'Dagger': 8225,
+    'bull': 8226,
+    'hellip': 8230,
+    'permil': 8240,
+    'prime': 8242,
+    'Prime': 8243,
+    'lsaquo': 8249,
+    'rsaquo': 8250,
+    'oline': 8254,
+    'frasl': 8260,
+    'euro': 8364,
+    'image': 8465,
+    'weierp': 8472,
+    'real': 8476,
+    'trade': 8482,
+    'alefsym': 8501,
+    'larr': 8592,
+    'uarr': 8593,
+    'rarr': 8594,
+    'darr': 8595,
+    'harr': 8596,
+    'crarr': 8629,
+    'lArr': 8656,
+    'uArr': 8657,
+    'rArr': 8658,
+    'dArr': 8659,
+    'hArr': 8660,
+    'forall': 8704,
+    'part': 8706,
+    'exist': 8707,
+    'empty': 8709,
+    'nabla': 8711,
+    'isin': 8712,
+    'notin': 8713,
+    'ni': 8715,
+    'prod': 8719,
+    'sum': 8721,
+    'minus': 8722,
+    'lowast': 8727,
+    'radic': 8730,
+    'prop': 8733,
+    'infin': 8734,
+    'ang': 8736,
+    'and': 8743,
+    'or': 8744,
+    'cap': 8745,
+    'cup': 8746,
+    'int': 8747,
+    'there4': 8756,
+    'sim': 8764,
+    'cong': 8773,
+    'asymp': 8776,
+    'ne': 8800,
+    'equiv': 8801,
+    'le': 8804,
+    'ge': 8805,
+    'sub': 8834,
+    'sup': 8835,
+    'nsub': 8836,
+    'sube': 8838,
+    'supe': 8839,
+    'oplus': 8853,
+    'otimes': 8855,
+    'perp': 8869,
+    'sdot': 8901,
+    'lceil': 8968,
+    'rceil': 8969,
+    'lfloor': 8970,
+    'rfloor': 8971,
+    'lang': 9001,
+    'rang': 9002,
+    'loz': 9674,
+    'spades': 9824,
+    'clubs': 9827,
+    'hearts': 9829,
+    'diams': 9830
+  }
+
+  Object.keys(sax.ENTITIES).forEach(function (key) {
+    var e = sax.ENTITIES[key]
+    var s = typeof e === 'number' ? String.fromCharCode(e) : e
+    sax.ENTITIES[key] = s
+  })
+
+  for (var s in sax.STATE) {
+    sax.STATE[sax.STATE[s]] = s
+  }
+
+  // shorthand
+  S = sax.STATE
+
+  function emit (parser, event, data) {
+    parser[event] && parser[event](data)
+  }
+
+  function emitNode (parser, nodeType, data) {
+    if (parser.textNode) closeText(parser)
+    emit(parser, nodeType, data)
+  }
+
+  function closeText (parser) {
+    parser.textNode = textopts(parser.opt, parser.textNode)
+    if (parser.textNode) emit(parser, 'ontext', parser.textNode)
+    parser.textNode = ''
+  }
+
+  function textopts (opt, text) {
+    if (opt.trim) text = text.trim()
+    if (opt.normalize) text = text.replace(/\s+/g, ' ')
+    return text
+  }
+
+  function error (parser, er) {
+    closeText(parser)
+    if (parser.trackPosition) {
+      er += '\nLine: ' + parser.line +
+        '\nColumn: ' + parser.column +
+        '\nChar: ' + parser.c
+    }
+    er = new Error(er)
+    parser.error = er
+    emit(parser, 'onerror', er)
+    return parser
+  }
+
+  function end (parser) {
+    if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag')
+    if ((parser.state !== S.BEGIN) &&
+      (parser.state !== S.BEGIN_WHITESPACE) &&
+      (parser.state !== S.TEXT)) {
+      error(parser, 'Unexpected end')
+    }
+    closeText(parser)
+    parser.c = ''
+    parser.closed = true
+    emit(parser, 'onend')
+    SAXParser.call(parser, parser.strict, parser.opt)
+    return parser
+  }
+
+  function strictFail (parser, message) {
+    if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {
+      throw new Error('bad call to strictFail')
+    }
+    if (parser.strict) {
+      error(parser, message)
+    }
+  }
+
+  function newTag (parser) {
+    if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()
+    var parent = parser.tags[parser.tags.length - 1] || parser
+    var tag = parser.tag = { name: parser.tagName, attributes: {} }
+
+    // will be overridden if tag contails an xmlns="foo" or xmlns:foo="bar"
+    if (parser.opt.xmlns) {
+      tag.ns = parent.ns
+    }
+    parser.attribList.length = 0
+  }
+
+  function qname (name, attribute) {
+    var i = name.indexOf(':')
+    var qualName = i < 0 ? [ '', name ] : name.split(':')
+    var prefix = qualName[0]
+    var local = qualName[1]
+
+    // <x "xmlns"="http://foo">
+    if (attribute && name === 'xmlns') {
+      prefix = 'xmlns'
+      local = ''
+    }
+
+    return { prefix: prefix, local: local }
+  }
+
+  function attrib (parser) {
+    if (!parser.strict) {
+      parser.attribName = parser.attribName[parser.looseCase]()
+    }
+
+    if (parser.attribList.indexOf(parser.attribName) !== -1 ||
+      parser.tag.attributes.hasOwnProperty(parser.attribName)) {
+      parser.attribName = parser.attribValue = ''
+      return
+    }
+
+    if (parser.opt.xmlns) {
+      var qn = qname(parser.attribName, true)
+      var prefix = qn.prefix
+      var local = qn.local
+
+      if (prefix === 'xmlns') {
+        // namespace binding attribute. push the binding into scope
+        if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {
+          strictFail(parser,
+            'xml: prefix must be bound to ' + XML_NAMESPACE + '\n' +
+            'Actual: ' + parser.attribValue)
+        } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {
+          strictFail(parser,
+            'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\n' +
+            'Actual: ' + parser.attribValue)
+        } else {
+          var tag = parser.tag
+          var parent = parser.tags[parser.tags.length - 1] || parser
+          if (tag.ns === parent.ns) {
+            tag.ns = Object.create(parent.ns)
+          }
+          tag.ns[local] = parser.attribValue
+        }
+      }
+
+      // defer onattribute events until all attributes have been seen
+      // so any new bindings can take effect. preserve attribute order
+      // so deferred events can be emitted in document order
+      parser.attribList.push([parser.attribName, parser.attribValue])
+    } else {
+      // in non-xmlns mode, we can emit the event right away
+      parser.tag.attributes[parser.attribName] = parser.attribValue
+      emitNode(parser, 'onattribute', {
+        name: parser.attribName,
+        value: parser.attribValue
+      })
+    }
+
+    parser.attribName = parser.attribValue = ''
+  }
+
+  function openTag (parser, selfClosing) {
+    if (parser.opt.xmlns) {
+      // emit namespace binding events
+      var tag = parser.tag
+
+      // add namespace info to tag
+      var qn = qname(parser.tagName)
+      tag.prefix = qn.prefix
+      tag.local = qn.local
+      tag.uri = tag.ns[qn.prefix] || ''
+
+      if (tag.prefix && !tag.uri) {
+        strictFail(parser, 'Unbound namespace prefix: ' +
+          JSON.stringify(parser.tagName))
+        tag.uri = qn.prefix
+      }
+
+      var parent = parser.tags[parser.tags.length - 1] || parser
+      if (tag.ns && parent.ns !== tag.ns) {
+        Object.keys(tag.ns).forEach(function (p) {
+          emitNode(parser, 'onopennamespace', {
+            prefix: p,
+            uri: tag.ns[p]
+          })
+        })
+      }
+
+      // handle deferred onattribute events
+      // Note: do not apply default ns to attributes:
+      //   http://www.w3.org/TR/REC-xml-names/#defaulting
+      for (var i = 0, l = parser.attribList.length; i < l; i++) {
+        var nv = parser.attribList[i]
+        var name = nv[0]
+        var value = nv[1]
+        var qualName = qname(name, true)
+        var prefix = qualName.prefix
+        var local = qualName.local
+        var uri = prefix === '' ? '' : (tag.ns[prefix] || '')
+        var a = {
+          name: name,
+          value: value,
+          prefix: prefix,
+          local: local,
+          uri: uri
+        }
+
+        // if there's any attributes with an undefined namespace,
+        // then fail on them now.
+        if (prefix && prefix !== 'xmlns' && !uri) {
+          strictFail(parser, 'Unbound namespace prefix: ' +
+            JSON.stringify(prefix))
+          a.uri = prefix
+        }
+        parser.tag.attributes[name] = a
+        emitNode(parser, 'onattribute', a)
+      }
+      parser.attribList.length = 0
+    }
+
+    parser.tag.isSelfClosing = !!selfClosing
+
+    // process the tag
+    parser.sawRoot = true
+    parser.tags.push(parser.tag)
+    emitNode(parser, 'onopentag', parser.tag)
+    if (!selfClosing) {
+      // special case for <script> in non-strict mode.
+      if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {
+        parser.state = S.SCRIPT
+      } else {
+        parser.state = S.TEXT
+      }
+      parser.tag = null
+      parser.tagName = ''
+    }
+    parser.attribName = parser.attribValue = ''
+    parser.attribList.length = 0
+  }
+
+  function closeTag (parser) {
+    if (!parser.tagName) {
+      strictFail(parser, 'Weird empty close tag.')
+      parser.textNode += '</>'
+      parser.state = S.TEXT
+      return
+    }
+
+    if (parser.script) {
+      if (parser.tagName !== 'script') {
+        parser.script += '</' + parser.tagName + '>'
+        parser.tagName = ''
+        parser.state = S.SCRIPT
+        return
+      }
+      emitNode(parser, 'onscript', parser.script)
+      parser.script = ''
+    }
+
+    // first make sure that the closing tag actually exists.
+    // <a><b></c></b></a> will close everything, otherwise.
+    var t = parser.tags.length
+    var tagName = parser.tagName
+    if (!parser.strict) {
+      tagName = tagName[parser.looseCase]()
+    }
+    var closeTo = tagName
+    while (t--) {
+      var close = parser.tags[t]
+      if (close.name !== closeTo) {
+        // fail the first time in strict mode
+        strictFail(parser, 'Unexpected close tag')
+      } else {
+        break
+      }
+    }
+
+    // didn't find it.  we already failed for strict, so just abort.
+    if (t < 0) {
+      strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)
+      parser.textNode += '</' + parser.tagName + '>'
+      parser.state = S.TEXT
+      return
+    }
+    parser.tagName = tagName
+    var s = parser.tags.length
+    while (s-- > t) {
+      var tag = parser.tag = parser.tags.pop()
+      parser.tagName = parser.tag.name
+      emitNode(parser, 'onclosetag', parser.tagName)
+
+      var x = {}
+      for (var i in tag.ns) {
+        x[i] = tag.ns[i]
+      }
+
+      var parent = parser.tags[parser.tags.length - 1] || parser
+      if (parser.opt.xmlns && tag.ns !== parent.ns) {
+        // remove namespace bindings introduced by tag
+        Object.keys(tag.ns).forEach(function (p) {
+          var n = tag.ns[p]
+          emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })
+        })
+      }
+    }
+    if (t === 0) parser.closedRoot = true
+    parser.tagName = parser.attribValue = parser.attribName = ''
+    parser.attribList.length = 0
+    parser.state = S.TEXT
+  }
+
+  function parseEntity (parser) {
+    var entity = parser.entity
+    var entityLC = entity.toLowerCase()
+    var num
+    var numStr = ''
+
+    if (parser.ENTITIES[entity]) {
+      return parser.ENTITIES[entity]
+    }
+    if (parser.ENTITIES[entityLC]) {
+      return parser.ENTITIES[entityLC]
+    }
+    entity = entityLC
+    if (entity.charAt(0) === '#') {
+      if (entity.charAt(1) === 'x') {
+        entity = entity.slice(2)
+        num = parseInt(entity, 16)
+        numStr = num.toString(16)
+      } else {
+        entity = entity.slice(1)
+        num = parseInt(entity, 10)
+        numStr = num.toString(10)
+      }
+    }
+    entity = entity.replace(/^0+/, '')
+    if (numStr.toLowerCase() !== entity) {
+      strictFail(parser, 'Invalid character entity')
+      return '&' + parser.entity + ';'
+    }
+
+    return String.fromCodePoint(num)
+  }
+
+  function beginWhiteSpace (parser, c) {
+    if (c === '<') {
+      parser.state = S.OPEN_WAKA
+      parser.startTagPosition = parser.position
+    } else if (not(whitespace, c)) {
+      // have to process this as a text node.
+      // weird, but happens.
+      strictFail(parser, 'Non-whitespace before first tag.')
+      parser.textNode = c
+      parser.state = S.TEXT
+    }
+  }
+
+  function write (chunk) {
+    var parser = this
+    if (this.error) {
+      throw this.error
+    }
+    if (parser.closed) {
+      return error(parser,
+        'Cannot write after close. Assign an onready handler.')
+    }
+    if (chunk === null) {
+      return end(parser)
+    }
+    var i = 0
+    var c = ''
+    while (true) {
+      c = chunk.charAt(i++)
+      parser.c = c
+      if (!c) {
+        break
+      }
+      if (parser.trackPosition) {
+        parser.position++
+        if (c === '\n') {
+          parser.line++
+          parser.column = 0
+        } else {
+          parser.column++
+        }
+      }
+      switch (parser.state) {
+        case S.BEGIN:
+          parser.state = S.BEGIN_WHITESPACE
+          if (c === '\uFEFF') {
+            continue
+          }
+          beginWhiteSpace(parser, c)
+          continue
+
+        case S.BEGIN_WHITESPACE:
+          beginWhiteSpace(parser, c)
+          continue
+
+        case S.TEXT:
+          if (parser.sawRoot && !parser.closedRoot) {
+            var starti = i - 1
+            while (c && c !== '<' && c !== '&') {
+              c = chunk.charAt(i++)
+              if (c && parser.trackPosition) {
+                parser.position++
+                if (c === '\n') {
+                  parser.line++
+                  parser.column = 0
+                } else {
+                  parser.column++
+                }
+              }
+            }
+            parser.textNode += chunk.substring(starti, i - 1)
+          }
+          if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {
+            parser.state = S.OPEN_WAKA
+            parser.startTagPosition = parser.position
+          } else {
+            if (not(whitespace, c) && (!parser.sawRoot || parser.closedRoot)) {
+              strictFail(parser, 'Text data outside of root node.')
+            }
+            if (c === '&') {
+              parser.state = S.TEXT_ENTITY
+            } else {
+              parser.textNode += c
+            }
+          }
+          continue
+
+        case S.SCRIPT:
+          // only non-strict
+          if (c === '<') {
+            parser.state = S.SCRIPT_ENDING
+          } else {
+            parser.script += c
+          }
+          continue
+
+        case S.SCRIPT_ENDING:
+          if (c === '/') {
+            parser.state = S.CLOSE_TAG
+          } else {
+            parser.script += '<' + c
+            parser.state = S.SCRIPT
+          }
+          continue
+
+        case S.OPEN_WAKA:
+          // either a /, ?, !, or text is coming next.
+          if (c === '!') {
+            parser.state = S.SGML_DECL
+            parser.sgmlDecl = ''
+          } else if (is(whitespace, c)) {
+            // wait for it...
+          } else if (is(nameStart, c)) {
+            parser.state = S.OPEN_TAG
+            parser.tagName = c
+          } else if (c === '/') {
+            parser.state = S.CLOSE_TAG
+            parser.tagName = ''
+          } else if (c === '?') {
+            parser.state = S.PROC_INST
+            parser.procInstName = parser.procInstBody = ''
+          } else {
+            strictFail(parser, 'Unencoded <')
+            // if there was some whitespace, then add that in.
+            if (parser.startTagPosition + 1 < parser.position) {
+              var pad = parser.position - parser.startTagPosition
+              c = new Array(pad).join(' ') + c
+            }
+            parser.textNode += '<' + c
+            parser.state = S.TEXT
+          }
+          continue
+
+        case S.SGML_DECL:
+          if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {
+            emitNode(parser, 'onopencdata')
+            parser.state = S.CDATA
+            parser.sgmlDecl = ''
+            parser.cdata = ''
+          } else if (parser.sgmlDecl + c === '--') {
+            parser.state = S.COMMENT
+            parser.comment = ''
+            parser.sgmlDecl = ''
+          } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {
+            parser.state = S.DOCTYPE
+            if (parser.doctype || parser.sawRoot) {
+              strictFail(parser,
+                'Inappropriately located doctype declaration')
+            }
+            parser.doctype = ''
+            parser.sgmlDecl = ''
+          } else if (c === '>') {
+            emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)
+            parser.sgmlDecl = ''
+            parser.state = S.TEXT
+          } else if (is(quote, c)) {
+            parser.state = S.SGML_DECL_QUOTED
+            parser.sgmlDecl += c
+          } else {
+            parser.sgmlDecl += c
+          }
+          continue
+
+        case S.SGML_DECL_QUOTED:
+          if (c === parser.q) {
+            parser.state = S.SGML_DECL
+            parser.q = ''
+          }
+          parser.sgmlDecl += c
+          continue
+
+        case S.DOCTYPE:
+          if (c === '>') {
+            parser.state = S.TEXT
+            emitNode(parser, 'ondoctype', parser.doctype)
+            parser.doctype = true // just remember that we saw it.
+          } else {
+            parser.doctype += c
+            if (c === '[') {
+              parser.state = S.DOCTYPE_DTD
+            } else if (is(quote, c)) {
+              parser.state = S.DOCTYPE_QUOTED
+              parser.q = c
+            }
+          }
+          continue
+
+        case S.DOCTYPE_QUOTED:
+          parser.doctype += c
+          if (c === parser.q) {
+            parser.q = ''
+            parser.state = S.DOCTYPE
+          }
+          continue
+
+        case S.DOCTYPE_DTD:
+          parser.doctype += c
+          if (c === ']') {
+            parser.state = S.DOCTYPE
+          } else if (is(quote, c)) {
+            parser.state = S.DOCTYPE_DTD_QUOTED
+            parser.q = c
+          }
+          continue
+
+        case S.DOCTYPE_DTD_QUOTED:
+          parser.doctype += c
+          if (c === parser.q) {
+            parser.state = S.DOCTYPE_DTD
+            parser.q = ''
+          }
+          continue
+
+        case S.COMMENT:
+          if (c === '-') {
+            parser.state = S.COMMENT_ENDING
+          } else {
+            parser.comment += c
+          }
+          continue
+
+        case S.COMMENT_ENDING:
+          if (c === '-') {
+            parser.state = S.COMMENT_ENDED
+            parser.comment = textopts(parser.opt, parser.comment)
+            if (parser.comment) {
+              emitNode(parser, 'oncomment', parser.comment)
+            }
+            parser.comment = ''
+          } else {
+            parser.comment += '-' + c
+            parser.state = S.COMMENT
+          }
+          continue
+
+        case S.COMMENT_ENDED:
+          if (c !== '>') {
+            strictFail(parser, 'Malformed comment')
+            // allow <!-- blah -- bloo --> in non-strict mode,
+            // which is a comment of " blah -- bloo "
+            parser.comment += '--' + c
+            parser.state = S.COMMENT
+          } else {
+            parser.state = S.TEXT
+          }
+          continue
+
+        case S.CDATA:
+          if (c === ']') {
+            parser.state = S.CDATA_ENDING
+          } else {
+            parser.cdata += c
+          }
+          continue
+
+        case S.CDATA_ENDING:
+          if (c === ']') {
+            parser.state = S.CDATA_ENDING_2
+          } else {
+            parser.cdata += ']' + c
+            parser.state = S.CDATA
+          }
+          continue
+
+        case S.CDATA_ENDING_2:
+          if (c === '>') {
+            if (parser.cdata) {
+              emitNode(parser, 'oncdata', parser.cdata)
+            }
+            emitNode(parser, 'onclosecdata')
+            parser.cdata = ''
+            parser.state = S.TEXT
+          } else if (c === ']') {
+            parser.cdata += ']'
+          } else {
+            parser.cdata += ']]' + c
+            parser.state = S.CDATA
+          }
+          continue
+
+        case S.PROC_INST:
+          if (c === '?') {
+            parser.state = S.PROC_INST_ENDING
+          } else if (is(whitespace, c)) {
+            parser.state = S.PROC_INST_BODY
+          } else {
+            parser.procInstName += c
+          }
+          continue
+
+        case S.PROC_INST_BODY:
+          if (!parser.procInstBody && is(whitespace, c)) {
+            continue
+          } else if (c === '?') {
+            parser.state = S.PROC_INST_ENDING
+          } else {
+            parser.procInstBody += c
+          }
+          continue
+
+        case S.PROC_INST_ENDING:
+          if (c === '>') {
+            emitNode(parser, 'onprocessinginstruction', {
+              name: parser.procInstName,
+              body: parser.procInstBody
+            })
+            parser.procInstName = parser.procInstBody = ''
+            parser.state = S.TEXT
+          } else {
+            parser.procInstBody += '?' + c
+            parser.state = S.PROC_INST_BODY
+          }
+          continue
+
+        case S.OPEN_TAG:
+          if (is(nameBody, c)) {
+            parser.tagName += c
+          } else {
+            newTag(parser)
+            if (c === '>') {
+              openTag(parser)
+            } else if (c === '/') {
+              parser.state = S.OPEN_TAG_SLASH
+            } else {
+              if (not(whitespace, c)) {
+                strictFail(parser, 'Invalid character in tag name')
+              }
+              parser.state = S.ATTRIB
+            }
+          }
+          continue
+
+        case S.OPEN_TAG_SLASH:
+          if (c === '>') {
+            openTag(parser, true)
+            closeTag(parser)
+          } else {
+            strictFail(parser, 'Forward-slash in opening tag not followed by >')
+            parser.state = S.ATTRIB
+          }
+          continue
+
+        case S.ATTRIB:
+          // haven't read the attribute name yet.
+          if (is(whitespace, c)) {
+            continue
+          } else if (c === '>') {
+            openTag(parser)
+          } else if (c === '/') {
+            parser.state = S.OPEN_TAG_SLASH
+          } else if (is(nameStart, c)) {
+            parser.attribName = c
+            parser.attribValue = ''
+            parser.state = S.ATTRIB_NAME
+          } else {
+            strictFail(parser, 'Invalid attribute name')
+          }
+          continue
+
+        case S.ATTRIB_NAME:
+          if (c === '=') {
+            parser.state = S.ATTRIB_VALUE
+          } else if (c === '>') {
+            strictFail(parser, 'Attribute without value')
+            parser.attribValue = parser.attribName
+            attrib(parser)
+            openTag(parser)
+          } else if (is(whitespace, c)) {
+            parser.state = S.ATTRIB_NAME_SAW_WHITE
+          } else if (is(nameBody, c)) {
+            parser.attribName += c
+          } else {
+            strictFail(parser, 'Invalid attribute name')
+          }
+          continue
+
+        case S.ATTRIB_NAME_SAW_WHITE:
+          if (c === '=') {
+            parser.state = S.ATTRIB_VALUE
+          } else if (is(whitespace, c)) {
+            continue
+          } else {
+            strictFail(parser, 'Attribute without value')
+            parser.tag.attributes[parser.attribName] = ''
+            parser.attribValue = ''
+            emitNode(parser, 'onattribute', {
+              name: parser.attribName,
+              value: ''
+            })
+            parser.attribName = ''
+            if (c === '>') {
+              openTag(parser)
+            } else if (is(nameStart, c)) {
+              parser.attribName = c
+              parser.state = S.ATTRIB_NAME
+            } else {
+              strictFail(parser, 'Invalid attribute name')
+              parser.state = S.ATTRIB
+            }
+          }
+          continue
+
+        case S.ATTRIB_VALUE:
+          if (is(whitespace, c)) {
+            continue
+          } else if (is(quote, c)) {
+            parser.q = c
+            parser.state = S.ATTRIB_VALUE_QUOTED
+          } else {
+            strictFail(parser, 'Unquoted attribute value')
+            parser.state = S.ATTRIB_VALUE_UNQUOTED
+            parser.attribValue = c
+          }
+          continue
+
+        case S.ATTRIB_VALUE_QUOTED:
+          if (c !== parser.q) {
+            if (c === '&') {
+              parser.state = S.ATTRIB_VALUE_ENTITY_Q
+            } else {
+              parser.attribValue += c
+            }
+            continue
+          }
+          attrib(parser)
+          parser.q = ''
+          parser.state = S.ATTRIB_VALUE_CLOSED
+          continue
+
+        case S.ATTRIB_VALUE_CLOSED:
+          if (is(whitespace, c)) {
+            parser.state = S.ATTRIB
+          } else if (c === '>') {
+            openTag(parser)
+          } else if (c === '/') {
+            parser.state = S.OPEN_TAG_SLASH
+          } else if (is(nameStart, c)) {
+            strictFail(parser, 'No whitespace between attributes')
+            parser.attribName = c
+            parser.attribValue = ''
+            parser.state = S.ATTRIB_NAME
+          } else {
+            strictFail(parser, 'Invalid attribute name')
+          }
+          continue
+
+        case S.ATTRIB_VALUE_UNQUOTED:
+          if (not(attribEnd, c)) {
+            if (c === '&') {
+              parser.state = S.ATTRIB_VALUE_ENTITY_U
+            } else {
+              parser.attribValue += c
+            }
+            continue
+          }
+          attrib(parser)
+          if (c === '>') {
+            openTag(parser)
+          } else {
+            parser.state = S.ATTRIB
+          }
+          continue
+
+        case S.CLOSE_TAG:
+          if (!parser.tagName) {
+            if (is(whitespace, c)) {
+              continue
+            } else if (not(nameStart, c)) {
+              if (parser.script) {
+                parser.script += '</' + c
+                parser.state = S.SCRIPT
+              } else {
+                strictFail(parser, 'Invalid tagname in closing tag.')
+              }
+            } else {
+              parser.tagName = c
+            }
+          } else if (c === '>') {
+            closeTag(parser)
+          } else if (is(nameBody, c)) {
+            parser.tagName += c
+          } else if (parser.script) {
+            parser.script += '</' + parser.tagName
+            parser.tagName = ''
+            parser.state = S.SCRIPT
+          } else {
+            if (not(whitespace, c)) {
+              strictFail(parser, 'Invalid tagname in closing tag')
+            }
+            parser.state = S.CLOSE_TAG_SAW_WHITE
+          }
+          continue
+
+        case S.CLOSE_TAG_SAW_WHITE:
+          if (is(whitespace, c)) {
+            continue
+          }
+          if (c === '>') {
+            closeTag(parser)
+          } else {
+            strictFail(parser, 'Invalid characters in closing tag')
+          }
+          continue
+
+        case S.TEXT_ENTITY:
+        case S.ATTRIB_VALUE_ENTITY_Q:
+        case S.ATTRIB_VALUE_ENTITY_U:
+          var returnState
+          var buffer
+          switch (parser.state) {
+            case S.TEXT_ENTITY:
+              returnState = S.TEXT
+              buffer = 'textNode'
+              break
+
+            case S.ATTRIB_VALUE_ENTITY_Q:
+              returnState = S.ATTRIB_VALUE_QUOTED
+              buffer = 'attribValue'
+              break
+
+            case S.ATTRIB_VALUE_ENTITY_U:
+              returnState = S.ATTRIB_VALUE_UNQUOTED
+              buffer = 'attribValue'
+              break
+          }
+
+          if (c === ';') {
+            parser[buffer] += parseEntity(parser)
+            parser.entity = ''
+            parser.state = returnState
+          } else if (is(parser.entity.length ? entityBody : entityStart, c)) {
+            parser.entity += c
+          } else {
+            strictFail(parser, 'Invalid character in entity name')
+            parser[buffer] += '&' + parser.entity + c
+            parser.entity = ''
+            parser.state = returnState
+          }
+
+          continue
+
+        default:
+          throw new Error(parser, 'Unknown state: ' + parser.state)
+      }
+    } // while
+
+    if (parser.position >= parser.bufferCheckPosition) {
+      checkBufferLength(parser)
+    }
+    return parser
+  }
+
+  /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */
+  if (!String.fromCodePoint) {
+    (function () {
+      var stringFromCharCode = String.fromCharCode
+      var floor = Math.floor
+      var fromCodePoint = function () {
+        var MAX_SIZE = 0x4000
+        var codeUnits = []
+        var highSurrogate
+        var lowSurrogate
+        var index = -1
+        var length = arguments.length
+        if (!length) {
+          return ''
+        }
+        var result = ''
+        while (++index < length) {
+          var codePoint = Number(arguments[index])
+          if (
+            !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
+            codePoint < 0 || // not a valid Unicode code point
+            codePoint > 0x10FFFF || // not a valid Unicode code point
+            floor(codePoint) !== codePoint // not an integer
+          ) {
+            throw RangeError('Invalid code point: ' + codePoint)
+          }
+          if (codePoint <= 0xFFFF) { // BMP code point
+            codeUnits.push(codePoint)
+          } else { // Astral code point; split in surrogate halves
+            // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+            codePoint -= 0x10000
+            highSurrogate = (codePoint >> 10) + 0xD800
+            lowSurrogate = (codePoint % 0x400) + 0xDC00
+            codeUnits.push(highSurrogate, lowSurrogate)
+          }
+          if (index + 1 === length || codeUnits.length > MAX_SIZE) {
+            result += stringFromCharCode.apply(null, codeUnits)
+            codeUnits.length = 0
+          }
+        }
+        return result
+      }
+      if (Object.defineProperty) {
+        Object.defineProperty(String, 'fromCodePoint', {
+          value: fromCodePoint,
+          configurable: true,
+          writable: true
+        })
+      } else {
+        String.fromCodePoint = fromCodePoint
+      }
+    }())
+  }
+})(typeof exports === 'undefined' ? this.sax = {} : exports)
diff --git a/node_modules/elementtree/node_modules/sax/package.json b/node_modules/elementtree/node_modules/sax/package.json
new file mode 100644
index 0000000..4e053ed
--- /dev/null
+++ b/node_modules/elementtree/node_modules/sax/package.json
@@ -0,0 +1,63 @@
+{
+  "_args": [
+    [
+      "sax@1.1.4",
+      "C:\\Projects\\Cordova\\cordova-windows"
+    ]
+  ],
+  "_from": "sax@1.1.4",
+  "_id": "sax@1.1.4",
+  "_inBundle": false,
+  "_integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=",
+  "_location": "/elementtree/sax",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "version",
+    "registry": true,
+    "raw": "sax@1.1.4",
+    "name": "sax",
+    "escapedName": "sax",
+    "rawSpec": "1.1.4",
+    "saveSpec": null,
+    "fetchSpec": "1.1.4"
+  },
+  "_requiredBy": [
+    "/elementtree"
+  ],
+  "_resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
+  "_spec": "1.1.4",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
+  "author": {
+    "name": "Isaac Z. Schlueter",
+    "email": "i@izs.me",
+    "url": "http://blog.izs.me/"
+  },
+  "bugs": {
+    "url": "https://github.com/isaacs/sax-js/issues"
+  },
+  "description": "An evented streaming XML parser in JavaScript",
+  "devDependencies": {
+    "standard": "^5.3.1",
+    "tap": "^2.1.1"
+  },
+  "files": [
+    "lib/sax.js",
+    "LICENSE",
+    "LICENSE-W3C.html",
+    "README.md"
+  ],
+  "homepage": "https://github.com/isaacs/sax-js#readme",
+  "license": "ISC",
+  "main": "lib/sax.js",
+  "name": "sax",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/isaacs/sax-js.git"
+  },
+  "scripts": {
+    "lint": "standard -F test/*.js lib/*.js",
+    "posttest": "npm run lint",
+    "test": "tap test/*.js"
+  },
+  "version": "1.1.4"
+}
diff --git a/node_modules/elementtree/package.json b/node_modules/elementtree/package.json
index f164ea7..7fa0354 100644
--- a/node_modules/elementtree/package.json
+++ b/node_modules/elementtree/package.json
@@ -1,47 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "elementtree@^0.1.6",
-        "scope": null,
-        "escapedName": "elementtree",
-        "name": "elementtree",
-        "rawSpec": "^0.1.6",
-        "spec": ">=0.1.6 <0.2.0",
-        "type": "range"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows"
+      "elementtree@0.1.7",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "elementtree@>=0.1.6 <0.2.0",
-  "_id": "elementtree@0.1.6",
-  "_inCache": true,
-  "_installable": true,
+  "_from": "elementtree@0.1.7",
+  "_id": "elementtree@0.1.7",
+  "_inBundle": false,
+  "_integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=",
   "_location": "/elementtree",
-  "_npmUser": {
-    "name": "rphillips",
-    "email": "ryan@trolocsis.com"
-  },
-  "_npmVersion": "1.3.24",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "elementtree@^0.1.6",
-    "scope": null,
-    "escapedName": "elementtree",
+    "type": "version",
+    "registry": true,
+    "raw": "elementtree@0.1.7",
     "name": "elementtree",
-    "rawSpec": "^0.1.6",
-    "spec": ">=0.1.6 <0.2.0",
-    "type": "range"
+    "escapedName": "elementtree",
+    "rawSpec": "0.1.7",
+    "saveSpec": null,
+    "fetchSpec": "0.1.7"
   },
   "_requiredBy": [
-    "/",
-    "/cordova-common"
+    "/"
   ],
-  "_resolved": "http://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz",
-  "_shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c",
-  "_shrinkwrap": null,
-  "_spec": "elementtree@^0.1.6",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows",
+  "_resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
+  "_spec": "0.1.7",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Rackspace US, Inc."
   },
@@ -59,7 +44,7 @@
     }
   ],
   "dependencies": {
-    "sax": "0.3.5"
+    "sax": "1.1.4"
   },
   "description": "XML Serialization and Parsing module based on Python's ElementTree.",
   "devDependencies": {
@@ -68,10 +53,6 @@
   "directories": {
     "lib": "lib"
   },
-  "dist": {
-    "shasum": "2ac4c46ea30516c8c4cbdb5e3ac7418e592de20c",
-    "tarball": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.6.tgz"
-  },
   "engines": {
     "node": ">= 0.4.0"
   },
@@ -83,22 +64,9 @@
     "seralization",
     "elementtree"
   ],
-  "licenses": [
-    {
-      "type": "Apache",
-      "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
-    }
-  ],
+  "license": "Apache-2.0",
   "main": "lib/elementtree.js",
-  "maintainers": [
-    {
-      "name": "rphillips",
-      "email": "ryan@trolocsis.com"
-    }
-  ],
   "name": "elementtree",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/racker/node-elementtree.git"
@@ -106,5 +74,5 @@
   "scripts": {
     "test": "make test"
   },
-  "version": "0.1.6"
+  "version": "0.1.7"
 }
diff --git a/node_modules/elementtree/tests/data/bom-xml.xml b/node_modules/elementtree/tests/data/bom-xml.xml
new file mode 100644
index 0000000..122cce6
--- /dev/null
+++ b/node_modules/elementtree/tests/data/bom-xml.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0"?>
+<container name="test_container_1" xmlns:android="http://schemas.android.com/apk/res/android">
+  <object>dd
+    <name>test_object_1</name>
+    <hash>4281c348eaf83e70ddce0e07221c3d28</hash>
+    <bytes android:type="cool">14</bytes>
+    <content_type>application/octetstream</content_type>
+    <last_modified>2009-02-03T05:26:32.612278</last_modified>
+  </object>
+  <object>
+    <name>test_object_2</name>
+    <hash>b039efe731ad111bc1b0ef221c3849d0</hash>
+    <bytes android:type="lame">64</bytes>
+    <content_type>application/octetstream</content_type>
+    <last_modified>2009-02-03T05:26:32.612278</last_modified>
+  </object>
+</container>
diff --git a/node_modules/elementtree/tests/test-simple.js b/node_modules/elementtree/tests/test-simple.js
index 1fc04b8..629a208 100644
--- a/node_modules/elementtree/tests/test-simple.js
+++ b/node_modules/elementtree/tests/test-simple.js
@@ -337,3 +337,12 @@ exports['test_cdata_write'] = function(test, assert) {
 
   test.finish();
 };
+
+exports['test_read_bom'] = function(test, assert) {
+  var file = readFile('bom-xml.xml');
+  var etree = et.parse(file);
+
+  // If parse finished, test was successful
+
+  test.finish();
+};
diff --git a/node_modules/glob/package.json b/node_modules/glob/package.json
index 9b917aa..7da0c77 100644
--- a/node_modules/glob/package.json
+++ b/node_modules/glob/package.json
@@ -1,46 +1,33 @@
 {
   "_args": [
     [
-      {
-        "raw": "glob@^5.0.13",
-        "scope": null,
-        "escapedName": "glob",
-        "name": "glob",
-        "rawSpec": "^5.0.13",
-        "spec": ">=5.0.13 <6.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common"
+      "glob@5.0.15",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "glob@>=5.0.13 <6.0.0",
+  "_from": "glob@5.0.15",
   "_id": "glob@5.0.15",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
   "_location": "/glob",
-  "_nodeVersion": "4.0.0",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "isaacs@npmjs.com"
-  },
-  "_npmVersion": "3.3.2",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "glob@^5.0.13",
-    "scope": null,
-    "escapedName": "glob",
+    "type": "version",
+    "registry": true,
+    "raw": "glob@5.0.15",
     "name": "glob",
-    "rawSpec": "^5.0.13",
-    "spec": ">=5.0.13 <6.0.0",
-    "type": "range"
+    "escapedName": "glob",
+    "rawSpec": "5.0.15",
+    "saveSpec": null,
+    "fetchSpec": "5.0.15"
   },
   "_requiredBy": [
-    "/cordova-common"
+    "/cordova-common",
+    "/istanbul"
   ],
   "_resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
-  "_shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1",
-  "_shrinkwrap": null,
-  "_spec": "glob@^5.0.13",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common",
+  "_spec": "5.0.15",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -63,11 +50,6 @@
     "tap": "^1.1.4",
     "tick": "0.0.6"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1",
-    "tarball": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz"
-  },
   "engines": {
     "node": "*"
   },
@@ -76,19 +58,10 @@
     "sync.js",
     "common.js"
   ],
-  "gitHead": "3a7e71d453dd80e75b196fd262dd23ed54beeceb",
   "homepage": "https://github.com/isaacs/node-glob#readme",
   "license": "ISC",
   "main": "glob.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
   "name": "glob",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 eb83c6a..5b14383 100644
--- a/node_modules/inflight/package.json
+++ b/node_modules/inflight/package.json
@@ -1,50 +1,36 @@
 {
   "_args": [
     [
-      {
-        "raw": "inflight@^1.0.4",
-        "scope": null,
-        "escapedName": "inflight",
-        "name": "inflight",
-        "rawSpec": "^1.0.4",
-        "spec": ">=1.0.4 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/glob"
+      "inflight@1.0.6",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "inflight@>=1.0.4 <2.0.0",
+  "_from": "inflight@1.0.6",
   "_id": "inflight@1.0.6",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
   "_location": "/inflight",
-  "_nodeVersion": "6.5.0",
-  "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/inflight-1.0.6.tgz_1476330807696_0.10388551792129874"
-  },
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "_npmVersion": "3.10.7",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "inflight@^1.0.4",
-    "scope": null,
-    "escapedName": "inflight",
+    "type": "version",
+    "registry": true,
+    "raw": "inflight@1.0.6",
     "name": "inflight",
-    "rawSpec": "^1.0.4",
-    "spec": ">=1.0.4 <2.0.0",
-    "type": "range"
+    "escapedName": "inflight",
+    "rawSpec": "1.0.6",
+    "saveSpec": null,
+    "fetchSpec": "1.0.6"
   },
   "_requiredBy": [
-    "/glob"
+    "/eslint/glob",
+    "/glob",
+    "/globby/glob",
+    "/jasmine/glob",
+    "/rimraf/glob"
   ],
   "_resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
-  "_shasum": "49bd6331d7d02d0c09bc910a1075ba8165b56df9",
-  "_shrinkwrap": null,
-  "_spec": "inflight@^1.0.4",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/glob",
+  "_spec": "1.0.6",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -61,39 +47,13 @@
   "devDependencies": {
     "tap": "^7.1.2"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "49bd6331d7d02d0c09bc910a1075ba8165b56df9",
-    "tarball": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
-  },
   "files": [
     "inflight.js"
   ],
-  "gitHead": "a547881738c8f57b27795e584071d67cf6ac1a57",
   "homepage": "https://github.com/isaacs/inflight",
   "license": "ISC",
   "main": "inflight.js",
-  "maintainers": [
-    {
-      "name": "iarna",
-      "email": "me@re-becca.org"
-    },
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    },
-    {
-      "name": "othiym23",
-      "email": "ogd@aoaioxxysz.net"
-    },
-    {
-      "name": "zkat",
-      "email": "kat@sykosomatic.org"
-    }
-  ],
   "name": "inflight",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 3b7de0e..b0575e5 100644
--- a/node_modules/inherits/package.json
+++ b/node_modules/inherits/package.json
@@ -1,69 +1,50 @@
 {
   "_args": [
     [
-      {
-        "raw": "inherits@2",
-        "scope": null,
-        "escapedName": "inherits",
-        "name": "inherits",
-        "rawSpec": "2",
-        "spec": ">=2.0.0 <3.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/glob"
+      "inherits@2.0.3",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "inherits@>=2.0.0 <3.0.0",
+  "_from": "inherits@2.0.3",
   "_id": "inherits@2.0.3",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
   "_location": "/inherits",
-  "_nodeVersion": "6.5.0",
-  "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/inherits-2.0.3.tgz_1473295776489_0.08142363070510328"
-  },
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "_npmVersion": "3.10.7",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "inherits@2",
-    "scope": null,
-    "escapedName": "inherits",
+    "type": "version",
+    "registry": true,
+    "raw": "inherits@2.0.3",
     "name": "inherits",
-    "rawSpec": "2",
-    "spec": ">=2.0.0 <3.0.0",
-    "type": "range"
+    "escapedName": "inherits",
+    "rawSpec": "2.0.3",
+    "saveSpec": null,
+    "fetchSpec": "2.0.3"
   },
   "_requiredBy": [
-    "/glob"
+    "/concat-stream",
+    "/eslint/glob",
+    "/glob",
+    "/globby/glob",
+    "/jasmine/glob",
+    "/readable-stream",
+    "/rimraf/glob"
   ],
   "_resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-  "_shasum": "633c2c83e3da42a502f52466022480f4208261de",
-  "_shrinkwrap": null,
-  "_spec": "inherits@2",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/glob",
+  "_spec": "2.0.3",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "browser": "./inherits_browser.js",
   "bugs": {
     "url": "https://github.com/isaacs/inherits/issues"
   },
-  "dependencies": {},
   "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()",
   "devDependencies": {
     "tap": "^7.1.0"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "633c2c83e3da42a502f52466022480f4208261de",
-    "tarball": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
-  },
   "files": [
     "inherits.js",
     "inherits_browser.js"
   ],
-  "gitHead": "e05d0fb27c61a3ec687214f0476386b765364d5f",
   "homepage": "https://github.com/isaacs/inherits#readme",
   "keywords": [
     "inheritance",
@@ -77,15 +58,7 @@
   ],
   "license": "ISC",
   "main": "./inherits.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
   "name": "inherits",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/inherits.git"
diff --git a/node_modules/lodash/package.json b/node_modules/lodash/package.json
index 72f2357..e356dc7 100644
--- a/node_modules/lodash/package.json
+++ b/node_modules/lodash/package.json
@@ -1,46 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "lodash@^3.5.0",
-        "scope": null,
-        "escapedName": "lodash",
-        "name": "lodash",
-        "rawSpec": "^3.5.0",
-        "spec": ">=3.5.0 <4.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/xmlbuilder"
+      "lodash@3.10.1",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "lodash@>=3.5.0 <4.0.0",
+  "_from": "lodash@3.10.1",
   "_id": "lodash@3.10.1",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
   "_location": "/lodash",
-  "_nodeVersion": "0.12.5",
-  "_npmUser": {
-    "name": "jdalton",
-    "email": "john.david.dalton@gmail.com"
-  },
-  "_npmVersion": "2.13.1",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "lodash@^3.5.0",
-    "scope": null,
-    "escapedName": "lodash",
+    "type": "version",
+    "registry": true,
+    "raw": "lodash@3.10.1",
     "name": "lodash",
-    "rawSpec": "^3.5.0",
-    "spec": ">=3.5.0 <4.0.0",
-    "type": "range"
+    "escapedName": "lodash",
+    "rawSpec": "3.10.1",
+    "saveSpec": null,
+    "fetchSpec": "3.10.1"
   },
   "_requiredBy": [
     "/xmlbuilder"
   ],
   "_resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
-  "_shasum": "5bf45e8e49ba4189e17d482789dfd15bd140b7b6",
-  "_shrinkwrap": null,
-  "_spec": "lodash@^3.5.0",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/xmlbuilder",
+  "_spec": "3.10.1",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "John-David Dalton",
     "email": "john.david.dalton@gmail.com",
@@ -76,14 +62,7 @@
       "url": "https://mathiasbynens.be/"
     }
   ],
-  "dependencies": {},
   "description": "The modern build of lodash modular utilities.",
-  "devDependencies": {},
-  "directories": {},
-  "dist": {
-    "shasum": "5bf45e8e49ba4189e17d482789dfd15bd140b7b6",
-    "tarball": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz"
-  },
   "homepage": "https://lodash.com/",
   "icon": "https://lodash.com/icon.svg",
   "keywords": [
@@ -93,31 +72,7 @@
   ],
   "license": "MIT",
   "main": "index.js",
-  "maintainers": [
-    {
-      "name": "jdalton",
-      "email": "john.david.dalton@gmail.com"
-    },
-    {
-      "name": "mathias",
-      "email": "mathias@qiwi.be"
-    },
-    {
-      "name": "phated",
-      "email": "blaine@iceddev.com"
-    },
-    {
-      "name": "kitcambridge",
-      "email": "github@kitcambridge.be"
-    },
-    {
-      "name": "d10",
-      "email": "demoneaux@gmail.com"
-    }
-  ],
   "name": "lodash",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 65a3f07..bb3985c 100644
--- a/node_modules/minimatch/package.json
+++ b/node_modules/minimatch/package.json
@@ -1,51 +1,35 @@
 {
   "_args": [
     [
-      {
-        "raw": "minimatch@^3.0.0",
-        "scope": null,
-        "escapedName": "minimatch",
-        "name": "minimatch",
-        "rawSpec": "^3.0.0",
-        "spec": ">=3.0.0 <4.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common"
+      "minimatch@3.0.3",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "minimatch@>=3.0.0 <4.0.0",
+  "_from": "minimatch@3.0.3",
   "_id": "minimatch@3.0.3",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=",
   "_location": "/minimatch",
-  "_nodeVersion": "4.4.4",
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/minimatch-3.0.3.tgz_1470678322731_0.1892083385027945"
-  },
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "_npmVersion": "3.10.6",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "minimatch@^3.0.0",
-    "scope": null,
-    "escapedName": "minimatch",
+    "type": "version",
+    "registry": true,
+    "raw": "minimatch@3.0.3",
     "name": "minimatch",
-    "rawSpec": "^3.0.0",
-    "spec": ">=3.0.0 <4.0.0",
-    "type": "range"
+    "escapedName": "minimatch",
+    "rawSpec": "3.0.3",
+    "saveSpec": null,
+    "fetchSpec": "3.0.3"
   },
   "_requiredBy": [
     "/cordova-common",
+    "/eslint",
+    "/eslint-plugin-import",
     "/glob"
   ],
   "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz",
-  "_shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774",
-  "_shrinkwrap": null,
-  "_spec": "minimatch@^3.0.0",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common",
+  "_spec": "3.0.3",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -62,30 +46,16 @@
     "standard": "^3.7.2",
     "tap": "^5.6.0"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774",
-    "tarball": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz"
-  },
   "engines": {
     "node": "*"
   },
   "files": [
     "minimatch.js"
   ],
-  "gitHead": "eed89491bd4a4e6bc463aac0dfb5c29ef0d1dc13",
   "homepage": "https://github.com/isaacs/minimatch#readme",
   "license": "ISC",
   "main": "minimatch.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
   "name": "minimatch",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/isaacs/minimatch.git"
diff --git a/node_modules/node-uuid/README.md b/node_modules/node-uuid/README.md
index 5cd8555..3dc67d3 100644
--- a/node_modules/node-uuid/README.md
+++ b/node_modules/node-uuid/README.md
@@ -1,254 +1,8 @@
 # node-uuid
 
-Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS.
+DEPRECATED: Use the `uuid` package instead.  See
 
-Features:
+* On NPM: https://www.npmjs.com/package/uuid
+* On Github: https://github.com/kelektiv/node-uuid
 
-* 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
+(Yes, the github project is still called "node-uuid". We merged the two projects. Sorry for the confusion.)
diff --git a/node_modules/node-uuid/lib/sha1-browser.js b/node_modules/node-uuid/lib/sha1-browser.js
new file mode 100644
index 0000000..fea185e
--- /dev/null
+++ b/node_modules/node-uuid/lib/sha1-browser.js
@@ -0,0 +1,120 @@
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
+/* SHA-1 (FIPS 180-4) implementation in JavaScript                    (c) Chris Veness 2002-2016  */
+/*                                                                                   MIT Licence  */
+/* www.movable-type.co.uk/scripts/sha1.html                                                       */
+/*                                                                                                */
+/*  - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html                              */
+/*        http://csrc.nist.gov/groups/ST/toolkit/examples.html                                    */
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  */
+
+'use strict';
+
+function f(s, x, y, z)  {
+    switch (s) {
+        case 0: return (x & y) ^ (~x & z);           // Ch()
+        case 1: return  x ^ y  ^  z;                 // Parity()
+        case 2: return (x & y) ^ (x & z) ^ (y & z);  // Maj()
+        case 3: return  x ^ y  ^  z;                 // Parity()
+    }
+}
+
+function ROTL(x, n) {
+    return (x<<n) | (x>>>(32-n));
+}
+
+var Sha1 = {};
+
+Sha1.hash = function(msg, options) {
+    var defaults = { msgFormat: 'string', outFormat: 'hex' };
+    var opt = Object.assign(defaults, options);
+
+    switch (opt.msgFormat) {
+        default: // default is to convert string to UTF-8, as SHA only deals with byte-streams
+        case 'string':   msg = Sha1.utf8Encode(msg);       break;
+        case 'hex-bytes':msg = Sha1.hexBytesToString(msg); break; // mostly for running tests
+    }
+
+    // constants [�4.2.1]
+    var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6 ];
+
+    // initial hash value [�5.3.1]
+    var H = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
+
+    // PREPROCESSING [�6.1.1]
+
+    msg += String.fromCharCode(0x80);  // add trailing '1' bit (+ 0's padding) to string [�5.1.1]
+
+    // convert string msg into 512-bit/16-integer blocks arrays of ints [�5.2.1]
+    var l = msg.length/4 + 2; // length (in 32-bit integers) of msg + �1� + appended length
+    var N = Math.ceil(l/16);  // number of 16-integer-blocks required to hold 'l' ints
+    var M = new Array(N);
+
+    for (var i=0; i<N; i++) {
+        M[i] = new Array(16);
+        for (var j=0; j<16; j++) {  // encode 4 chars per integer, big-endian encoding
+            M[i][j] = (msg.charCodeAt(i*64+j*4)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16) |
+                (msg.charCodeAt(i*64+j*4+2)<<8) | (msg.charCodeAt(i*64+j*4+3));
+        } // note running off the end of msg is ok 'cos bitwise ops on NaN return 0
+    }
+    // add length (in bits) into final pair of 32-bit integers (big-endian) [�5.1.1]
+    // note: most significant word would be (len-1)*8 >>> 32, but since JS converts
+    // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators
+    M[N-1][14] = ((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14]);
+    M[N-1][15] = ((msg.length-1)*8) & 0xffffffff;
+
+    // HASH COMPUTATION [�6.1.2]
+
+    for (var i=0; i<N; i++) {
+        var W = new Array(80);
+
+        // 1 - prepare message schedule 'W'
+        for (var t=0;  t<16; t++) W[t] = M[i][t];
+        for (var t=16; t<80; t++) W[t] = ROTL(W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16], 1);
+
+        // 2 - initialise five working variables a, b, c, d, e with previous hash value
+        var a = H[0], b = H[1], c = H[2], d = H[3], e = H[4];
+
+        // 3 - main loop (use JavaScript '>>> 0' to emulate UInt32 variables)
+        for (var t=0; t<80; t++) {
+            var s = Math.floor(t/20); // seq for blocks of 'f' functions and 'K' constants
+            var T = (ROTL(a,5) + f(s,b,c,d) + e + K[s] + W[t]) >>> 0;
+            e = d;
+            d = c;
+            c = ROTL(b, 30) >>> 0;
+            b = a;
+            a = T;
+        }
+
+        // 4 - compute the new intermediate hash value (note 'addition modulo 2^32' � JavaScript
+        // '>>> 0' coerces to unsigned UInt32 which achieves modulo 2^32 addition)
+        H[0] = (H[0]+a) >>> 0;
+        H[1] = (H[1]+b) >>> 0;
+        H[2] = (H[2]+c) >>> 0;
+        H[3] = (H[3]+d) >>> 0;
+        H[4] = (H[4]+e) >>> 0;
+    }
+
+    // convert H0..H4 to hex strings (with leading zeros)
+    for (var h=0; h<H.length; h++) H[h] = ('00000000'+H[h].toString(16)).slice(-8);
+
+    // concatenate H0..H4, with separator if required
+    var separator = opt.outFormat=='hex-w' ? ' ' : '';
+
+    return H.join(separator);
+};
+
+Sha1.utf8Encode = function(str) {
+    return unescape(encodeURIComponent(str));
+};
+
+Sha1.hexBytesToString = function(hexStr) {
+    hexStr = hexStr.replace(' ', ''); // allow space-separated groups
+    var str = '';
+    for (var i=0; i<hexStr.length; i+=2) {
+        str += String.fromCharCode(parseInt(hexStr.slice(i, i+2), 16));
+    }
+    return str;
+};
+
+
+module.exports = Sha1; // CommonJs export
diff --git a/node_modules/node-uuid/package.json b/node_modules/node-uuid/package.json
index 0c9a225..be8bea4 100644
--- a/node_modules/node-uuid/package.json
+++ b/node_modules/node-uuid/package.json
@@ -1,47 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "node-uuid@^1.4.3",
-        "scope": null,
-        "escapedName": "node-uuid",
-        "name": "node-uuid",
-        "rawSpec": "^1.4.3",
-        "spec": ">=1.4.3 <2.0.0",
-        "type": "range"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows"
+      "node-uuid@1.4.8",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "node-uuid@>=1.4.3 <2.0.0",
-  "_id": "node-uuid@1.4.7",
-  "_inCache": true,
-  "_installable": true,
+  "_from": "node-uuid@1.4.8",
+  "_id": "node-uuid@1.4.8",
+  "_inBundle": false,
+  "_integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=",
   "_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.3",
-    "scope": null,
-    "escapedName": "node-uuid",
+    "type": "version",
+    "registry": true,
+    "raw": "node-uuid@1.4.8",
     "name": "node-uuid",
-    "rawSpec": "^1.4.3",
-    "spec": ">=1.4.3 <2.0.0",
-    "type": "range"
+    "escapedName": "node-uuid",
+    "rawSpec": "1.4.8",
+    "saveSpec": null,
+    "fetchSpec": "1.4.8"
   },
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz",
-  "_shasum": "6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f",
-  "_shrinkwrap": null,
-  "_spec": "node-uuid@^1.4.3",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows",
+  "_resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
+  "_spec": "1.4.8",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Robert Kieffer",
     "email": "robert@broofa.com"
@@ -68,11 +53,6 @@
     "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": [
@@ -92,15 +72,10 @@
     {
       "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"
@@ -110,5 +85,5 @@
     "test": "node test/test.js"
   },
   "url": "http://github.com/broofa/node-uuid",
-  "version": "1.4.7"
+  "version": "1.4.8"
 }
diff --git a/node_modules/node-uuid/v3.js b/node_modules/node-uuid/v3.js
new file mode 100644
index 0000000..a27c5b3
--- /dev/null
+++ b/node_modules/node-uuid/v3.js
@@ -0,0 +1,54 @@
+var rng = require('./lib/rng');
+var bytesToUuid = require('./lib/bytesToUuid');
+
+function v3(name, namespaceUuid, buf, offset) {
+  var i = buf && offset || 0;
+
+  if (typeof(name) != 'string) {
+    throw TypeError('name must be defined')
+  }
+  if (typeof(namespaceUuid) != 'string) {
+    throw TypeError('name must be defined')
+  }
+
+  if (typeof(options) == 'string') {
+    buf = options == 'binary' ? new Array(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 || bytesToUuid(rnds);
+}
+
+exports.namespace = function(uuid) {
+  // Parse namespace uuid
+  var namespaceBytes = (uuid).match(/([0-9a-f][0-9a-f])/gi).map(function(s) {
+    return parseInt(s, 16);
+  });
+
+  return function(name) {
+    var bytes = [].concat(namespaceBytes);
+
+    var utf8String = unescape(encodeURIComponent(s))
+    for (var i = 0; i < utf8String.length; i++) {
+      bytes.push(utf8String.charCodeAt(i));
+    }
+
+    var hash = md5(bytes);
+  }
+}
+
+module.exports = v4;
diff --git a/node_modules/nopt/package.json b/node_modules/nopt/package.json
index c928910..9e53a82 100644
--- a/node_modules/nopt/package.json
+++ b/node_modules/nopt/package.json
@@ -1,47 +1,33 @@
 {
   "_args": [
     [
-      {
-        "raw": "nopt@^3.0.4",
-        "scope": null,
-        "escapedName": "nopt",
-        "name": "nopt",
-        "rawSpec": "^3.0.4",
-        "spec": ">=3.0.4 <4.0.0",
-        "type": "range"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows"
+      "nopt@3.0.6",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "nopt@>=3.0.4 <4.0.0",
+  "_from": "nopt@3.0.6",
   "_id": "nopt@3.0.6",
-  "_inCache": true,
-  "_installable": true,
+  "_inBundle": false,
+  "_integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
   "_location": "/nopt",
-  "_nodeVersion": "4.2.1",
-  "_npmUser": {
-    "name": "othiym23",
-    "email": "ogd@aoaioxxysz.net"
-  },
-  "_npmVersion": "2.14.10",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "nopt@^3.0.4",
-    "scope": null,
-    "escapedName": "nopt",
+    "type": "version",
+    "registry": true,
+    "raw": "nopt@3.0.6",
     "name": "nopt",
-    "rawSpec": "^3.0.4",
-    "spec": ">=3.0.4 <4.0.0",
-    "type": "range"
+    "escapedName": "nopt",
+    "rawSpec": "3.0.6",
+    "saveSpec": null,
+    "fetchSpec": "3.0.6"
   },
   "_requiredBy": [
-    "/"
+    "/",
+    "/istanbul"
   ],
   "_resolved": "http://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
-  "_shasum": "c6465dbf08abcd4db359317f79ac68a646b28ff9",
-  "_shrinkwrap": null,
-  "_spec": "nopt@^3.0.4",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows",
+  "_spec": "3.0.6",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -60,32 +46,10 @@
   "devDependencies": {
     "tap": "^1.2.0"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "c6465dbf08abcd4db359317f79ac68a646b28ff9",
-    "tarball": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz"
-  },
-  "gitHead": "10a750c9bb99c1950160353459e733ac2aa18cb6",
   "homepage": "https://github.com/npm/nopt#readme",
   "license": "ISC",
   "main": "lib/nopt.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    },
-    {
-      "name": "othiym23",
-      "email": "ogd@aoaioxxysz.net"
-    },
-    {
-      "name": "zkat",
-      "email": "kat@sykosomatic.org"
-    }
-  ],
   "name": "nopt",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 ca9daae..5bb2ae5 100644
--- a/node_modules/once/package.json
+++ b/node_modules/once/package.json
@@ -1,51 +1,38 @@
 {
   "_args": [
     [
-      {
-        "raw": "once@^1.3.0",
-        "scope": null,
-        "escapedName": "once",
-        "name": "once",
-        "rawSpec": "^1.3.0",
-        "spec": ">=1.3.0 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/glob"
+      "once@1.4.0",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "once@>=1.3.0 <2.0.0",
+  "_from": "once@1.4.0",
   "_id": "once@1.4.0",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
   "_location": "/once",
-  "_nodeVersion": "6.5.0",
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/once-1.4.0.tgz_1473196269128_0.537820661207661"
-  },
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "_npmVersion": "3.10.7",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "once@^1.3.0",
-    "scope": null,
-    "escapedName": "once",
+    "type": "version",
+    "registry": true,
+    "raw": "once@1.4.0",
     "name": "once",
-    "rawSpec": "^1.3.0",
-    "spec": ">=1.3.0 <2.0.0",
-    "type": "range"
+    "escapedName": "once",
+    "rawSpec": "1.4.0",
+    "saveSpec": null,
+    "fetchSpec": "1.4.0"
   },
   "_requiredBy": [
+    "/eslint/glob",
     "/glob",
-    "/inflight"
+    "/globby/glob",
+    "/inflight",
+    "/istanbul",
+    "/jasmine/glob",
+    "/rimraf/glob"
   ],
   "_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
-  "_shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1",
-  "_shrinkwrap": null,
-  "_spec": "once@^1.3.0",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/glob",
+  "_spec": "1.4.0",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -64,14 +51,9 @@
   "directories": {
     "test": "test"
   },
-  "dist": {
-    "shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1",
-    "tarball": "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
-  },
   "files": [
     "once.js"
   ],
-  "gitHead": "0e614d9f5a7e6f0305c625f6b581f6d80b33b8a6",
   "homepage": "https://github.com/isaacs/once#readme",
   "keywords": [
     "once",
@@ -81,15 +63,7 @@
   ],
   "license": "ISC",
   "main": "once.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
   "name": "once",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 247b942..0b84445 100644
--- a/node_modules/os-homedir/package.json
+++ b/node_modules/os-homedir/package.json
@@ -1,50 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "os-homedir@^1.0.0",
-        "scope": null,
-        "escapedName": "os-homedir",
-        "name": "os-homedir",
-        "rawSpec": "^1.0.0",
-        "spec": ">=1.0.0 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/osenv"
+      "os-homedir@1.0.2",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "os-homedir@>=1.0.0 <2.0.0",
+  "_from": "os-homedir@1.0.2",
   "_id": "os-homedir@1.0.2",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
   "_location": "/os-homedir",
-  "_nodeVersion": "6.6.0",
-  "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/os-homedir-1.0.2.tgz_1475211519628_0.7873868853785098"
-  },
-  "_npmUser": {
-    "name": "sindresorhus",
-    "email": "sindresorhus@gmail.com"
-  },
-  "_npmVersion": "3.10.3",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "os-homedir@^1.0.0",
-    "scope": null,
-    "escapedName": "os-homedir",
+    "type": "version",
+    "registry": true,
+    "raw": "os-homedir@1.0.2",
     "name": "os-homedir",
-    "rawSpec": "^1.0.0",
-    "spec": ">=1.0.0 <2.0.0",
-    "type": "range"
+    "escapedName": "os-homedir",
+    "rawSpec": "1.0.2",
+    "saveSpec": null,
+    "fetchSpec": "1.0.2"
   },
   "_requiredBy": [
     "/osenv"
   ],
   "_resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-  "_shasum": "ffbc4988336e0e833de0c168c7ef152121aa7fb3",
-  "_shrinkwrap": null,
-  "_spec": "os-homedir@^1.0.0",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/osenv",
+  "_spec": "1.0.2",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
@@ -53,25 +35,18 @@
   "bugs": {
     "url": "https://github.com/sindresorhus/os-homedir/issues"
   },
-  "dependencies": {},
   "description": "Node.js 4 `os.homedir()` ponyfill",
   "devDependencies": {
     "ava": "*",
     "path-exists": "^2.0.0",
     "xo": "^0.16.0"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "ffbc4988336e0e833de0c168c7ef152121aa7fb3",
-    "tarball": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz"
-  },
   "engines": {
     "node": ">=0.10.0"
   },
   "files": [
     "index.js"
   ],
-  "gitHead": "b1b0ae70a5965fef7005ff6509a5dd1a78c95e36",
   "homepage": "https://github.com/sindresorhus/os-homedir#readme",
   "keywords": [
     "builtin",
@@ -89,15 +64,7 @@
     "path"
   ],
   "license": "MIT",
-  "maintainers": [
-    {
-      "name": "sindresorhus",
-      "email": "sindresorhus@gmail.com"
-    }
-  ],
   "name": "os-homedir",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 9c269e7..9516858 100644
--- a/node_modules/os-tmpdir/package.json
+++ b/node_modules/os-tmpdir/package.json
@@ -1,50 +1,33 @@
 {
   "_args": [
     [
-      {
-        "raw": "os-tmpdir@^1.0.0",
-        "scope": null,
-        "escapedName": "os-tmpdir",
-        "name": "os-tmpdir",
-        "rawSpec": "^1.0.0",
-        "spec": ">=1.0.0 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/osenv"
+      "os-tmpdir@1.0.2",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "os-tmpdir@>=1.0.0 <2.0.0",
+  "_from": "os-tmpdir@1.0.2",
   "_id": "os-tmpdir@1.0.2",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
   "_location": "/os-tmpdir",
-  "_nodeVersion": "6.6.0",
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/os-tmpdir-1.0.2.tgz_1475211274587_0.14931037812493742"
-  },
-  "_npmUser": {
-    "name": "sindresorhus",
-    "email": "sindresorhus@gmail.com"
-  },
-  "_npmVersion": "3.10.3",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "os-tmpdir@^1.0.0",
-    "scope": null,
-    "escapedName": "os-tmpdir",
+    "type": "version",
+    "registry": true,
+    "raw": "os-tmpdir@1.0.2",
     "name": "os-tmpdir",
-    "rawSpec": "^1.0.0",
-    "spec": ">=1.0.0 <2.0.0",
-    "type": "range"
+    "escapedName": "os-tmpdir",
+    "rawSpec": "1.0.2",
+    "saveSpec": null,
+    "fetchSpec": "1.0.2"
   },
   "_requiredBy": [
-    "/osenv"
+    "/osenv",
+    "/tmp"
   ],
   "_resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-  "_shasum": "bbe67406c79aa85c5cfec766fe5734555dfa1274",
-  "_shrinkwrap": null,
-  "_spec": "os-tmpdir@^1.0.0",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/osenv",
+  "_spec": "1.0.2",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
@@ -53,24 +36,17 @@
   "bugs": {
     "url": "https://github.com/sindresorhus/os-tmpdir/issues"
   },
-  "dependencies": {},
   "description": "Node.js os.tmpdir() ponyfill",
   "devDependencies": {
     "ava": "*",
     "xo": "^0.16.0"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "bbe67406c79aa85c5cfec766fe5734555dfa1274",
-    "tarball": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz"
-  },
   "engines": {
     "node": ">=0.10.0"
   },
   "files": [
     "index.js"
   ],
-  "gitHead": "1abf9cf5611b4be7377060ea67054b45cbf6813c",
   "homepage": "https://github.com/sindresorhus/os-tmpdir#readme",
   "keywords": [
     "built-in",
@@ -89,15 +65,7 @@
     "environment"
   ],
   "license": "MIT",
-  "maintainers": [
-    {
-      "name": "sindresorhus",
-      "email": "sindresorhus@gmail.com"
-    }
-  ],
   "name": "os-tmpdir",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 0afdb7d..b1dfbd2 100644
--- a/node_modules/osenv/package.json
+++ b/node_modules/osenv/package.json
@@ -1,50 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "osenv@^0.1.3",
-        "scope": null,
-        "escapedName": "osenv",
-        "name": "osenv",
-        "rawSpec": "^0.1.3",
-        "spec": ">=0.1.3 <0.2.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common"
+      "osenv@0.1.4",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "osenv@>=0.1.3 <0.2.0",
+  "_from": "osenv@0.1.4",
   "_id": "osenv@0.1.4",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
   "_location": "/osenv",
-  "_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": "i@izs.me"
-  },
-  "_npmVersion": "3.10.9",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "osenv@^0.1.3",
-    "scope": null,
-    "escapedName": "osenv",
+    "type": "version",
+    "registry": true,
+    "raw": "osenv@0.1.4",
     "name": "osenv",
-    "rawSpec": "^0.1.3",
-    "spec": ">=0.1.3 <0.2.0",
-    "type": "range"
+    "escapedName": "osenv",
+    "rawSpec": "0.1.4",
+    "saveSpec": null,
+    "fetchSpec": "0.1.4"
   },
   "_requiredBy": [
     "/cordova-common"
   ],
   "_resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
-  "_shasum": "42fe6d5953df06c8064be6f176c3d05aaaa34644",
-  "_shrinkwrap": null,
-  "_spec": "osenv@^0.1.3",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common",
+  "_spec": "0.1.4",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -64,11 +46,6 @@
   "directories": {
     "test": "test"
   },
-  "dist": {
-    "shasum": "42fe6d5953df06c8064be6f176c3d05aaaa34644",
-    "tarball": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz"
-  },
-  "gitHead": "ef718f0d20e38d45ec452b7faeefc692d3cd1062",
   "homepage": "https://github.com/npm/osenv#readme",
   "keywords": [
     "environment",
@@ -81,27 +58,7 @@
   ],
   "license": "ISC",
   "main": "osenv.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    },
-    {
-      "name": "robertkowalski",
-      "email": "rok@kowalski.gd"
-    },
-    {
-      "name": "othiym23",
-      "email": "ogd@aoaioxxysz.net"
-    },
-    {
-      "name": "iarna",
-      "email": "me@re-becca.org"
-    }
-  ],
   "name": "osenv",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/npm/osenv.git"
diff --git a/node_modules/path-is-absolute/package.json b/node_modules/path-is-absolute/package.json
index 10cbb1a..6673400 100644
--- a/node_modules/path-is-absolute/package.json
+++ b/node_modules/path-is-absolute/package.json
@@ -1,50 +1,36 @@
 {
   "_args": [
     [
-      {
-        "raw": "path-is-absolute@^1.0.0",
-        "scope": null,
-        "escapedName": "path-is-absolute",
-        "name": "path-is-absolute",
-        "rawSpec": "^1.0.0",
-        "spec": ">=1.0.0 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/glob"
+      "path-is-absolute@1.0.1",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "path-is-absolute@>=1.0.0 <2.0.0",
+  "_from": "path-is-absolute@1.0.1",
   "_id": "path-is-absolute@1.0.1",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
   "_location": "/path-is-absolute",
-  "_nodeVersion": "6.6.0",
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/path-is-absolute-1.0.1.tgz_1475210523565_0.9876507974695414"
-  },
-  "_npmUser": {
-    "name": "sindresorhus",
-    "email": "sindresorhus@gmail.com"
-  },
-  "_npmVersion": "3.10.3",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "path-is-absolute@^1.0.0",
-    "scope": null,
-    "escapedName": "path-is-absolute",
+    "type": "version",
+    "registry": true,
+    "raw": "path-is-absolute@1.0.1",
     "name": "path-is-absolute",
-    "rawSpec": "^1.0.0",
-    "spec": ">=1.0.0 <2.0.0",
-    "type": "range"
+    "escapedName": "path-is-absolute",
+    "rawSpec": "1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "1.0.1"
   },
   "_requiredBy": [
-    "/glob"
+    "/eslint/glob",
+    "/glob",
+    "/globby/glob",
+    "/jasmine/glob",
+    "/rimraf/glob"
   ],
   "_resolved": "https://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/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/glob",
+  "_spec": "1.0.1",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Sindre Sorhus",
     "email": "sindresorhus@gmail.com",
@@ -53,23 +39,16 @@
   "bugs": {
     "url": "https://github.com/sindresorhus/path-is-absolute/issues"
   },
-  "dependencies": {},
   "description": "Node.js 0.12 path.isAbsolute() ponyfill",
   "devDependencies": {
     "xo": "^0.16.0"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f",
-    "tarball": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
-  },
   "engines": {
     "node": ">=0.10.0"
   },
   "files": [
     "index.js"
   ],
-  "gitHead": "edc91d348b21dac2ab65ea2fbec2868e2eff5eb6",
   "homepage": "https://github.com/sindresorhus/path-is-absolute#readme",
   "keywords": [
     "path",
@@ -91,15 +70,7 @@
     "check"
   ],
   "license": "MIT",
-  "maintainers": [
-    {
-      "name": "sindresorhus",
-      "email": "sindresorhus@gmail.com"
-    }
-  ],
   "name": "path-is-absolute",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/sindresorhus/path-is-absolute.git"
diff --git a/node_modules/plist/package.json b/node_modules/plist/package.json
index c8fc4b7..58d5ad7 100644
--- a/node_modules/plist/package.json
+++ b/node_modules/plist/package.json
@@ -1,46 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "plist@^1.2.0",
-        "scope": null,
-        "escapedName": "plist",
-        "name": "plist",
-        "rawSpec": "^1.2.0",
-        "spec": ">=1.2.0 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common"
+      "plist@1.2.0",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "plist@>=1.2.0 <2.0.0",
+  "_from": "plist@1.2.0",
   "_id": "plist@1.2.0",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=",
   "_location": "/plist",
-  "_nodeVersion": "5.0.0",
-  "_npmUser": {
-    "name": "mreinstein",
-    "email": "reinstein.mike@gmail.com"
-  },
-  "_npmVersion": "3.3.11",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "plist@^1.2.0",
-    "scope": null,
-    "escapedName": "plist",
+    "type": "version",
+    "registry": true,
+    "raw": "plist@1.2.0",
     "name": "plist",
-    "rawSpec": "^1.2.0",
-    "spec": ">=1.2.0 <2.0.0",
-    "type": "range"
+    "escapedName": "plist",
+    "rawSpec": "1.2.0",
+    "saveSpec": null,
+    "fetchSpec": "1.2.0"
   },
   "_requiredBy": [
     "/cordova-common"
   ],
   "_resolved": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz",
-  "_shasum": "084b5093ddc92506e259f874b8d9b1afb8c79593",
-  "_shrinkwrap": null,
-  "_spec": "plist@^1.2.0",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common",
+  "_spec": "1.2.0",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Nathan Rajlich",
     "email": "nathan@tootallnate.net"
@@ -80,12 +66,6 @@
     "multiline": "1.0.2",
     "zuul": "3.7.2"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "084b5093ddc92506e259f874b8d9b1afb8c79593",
-    "tarball": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz"
-  },
-  "gitHead": "69520574f27864145192338b72e608fbe1bda6f7",
   "homepage": "https://github.com/TooTallNate/node-plist#readme",
   "keywords": [
     "apple",
@@ -97,23 +77,7 @@
   ],
   "license": "MIT",
   "main": "lib/plist.js",
-  "maintainers": [
-    {
-      "name": "TooTallNate",
-      "email": "nathan@tootallnate.net"
-    },
-    {
-      "name": "tootallnate",
-      "email": "nathan@tootallnate.net"
-    },
-    {
-      "name": "mreinstein",
-      "email": "reinstein.mike@gmail.com"
-    }
-  ],
   "name": "plist",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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..766fcdc 100644
--- a/node_modules/q/CHANGES.md
+++ b/node_modules/q/CHANGES.md
@@ -1,4 +1,18 @@
 
+## 1.5.1
+
+ - Q.any now annotates its error message to clarify that Q.any was involved and
+   includes only the last error emitted. (Ivan Etchart)
+ - Avoid domain.dispose during tests in preparation for Node.js 9. (Anna
+   Henningsen)
+
+## 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
 
  - Address an issue that prevented Q from being used as a `<script>` for
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 856f466..fdf7792 100644
--- a/node_modules/q/package.json
+++ b/node_modules/q/package.json
@@ -1,48 +1,33 @@
 {
   "_args": [
     [
-      {
-        "raw": "q@^1.4.1",
-        "scope": null,
-        "escapedName": "q",
-        "name": "q",
-        "rawSpec": "^1.4.1",
-        "spec": ">=1.4.1 <2.0.0",
-        "type": "range"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows"
+      "q@1.5.1",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "q@>=1.4.1 <2.0.0",
-  "_id": "q@1.4.1",
-  "_inCache": true,
-  "_installable": true,
+  "_from": "q@1.5.1",
+  "_id": "q@1.5.1",
+  "_inBundle": false,
+  "_integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
   "_location": "/q",
-  "_nodeVersion": "1.8.1",
-  "_npmUser": {
-    "name": "kriskowal",
-    "email": "kris.kowal@cixar.com"
-  },
-  "_npmVersion": "2.8.3",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "q@^1.4.1",
-    "scope": null,
-    "escapedName": "q",
+    "type": "version",
+    "registry": true,
+    "raw": "q@1.5.1",
     "name": "q",
-    "rawSpec": "^1.4.1",
-    "spec": ">=1.4.1 <2.0.0",
-    "type": "range"
+    "escapedName": "q",
+    "rawSpec": "1.5.1",
+    "saveSpec": null,
+    "fetchSpec": "1.5.1"
   },
   "_requiredBy": [
     "/",
     "/cordova-common"
   ],
-  "_resolved": "http://registry.npmjs.org/q/-/q-1.4.1.tgz",
-  "_shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e",
-  "_shrinkwrap": null,
-  "_spec": "q@^1.4.1",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows",
+  "_resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+  "_spec": "1.5.1",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Kris Kowal",
     "email": "kris@cixar.com",
@@ -84,10 +69,6 @@
   "directories": {
     "test": "./spec"
   },
-  "dist": {
-    "shasum": "55705bcd93c5f3673530c2c2cbc0c2b3addc286e",
-    "tarball": "https://registry.npmjs.org/q/-/q-1.4.1.tgz"
-  },
   "engines": {
     "node": ">=0.6.0",
     "teleport": ">=0.2.0"
@@ -97,7 +78,6 @@
     "q.js",
     "queue.js"
   ],
-  "gitHead": "d373079d3620152e3d60e82f27265a09ee0e81bd",
   "homepage": "https://github.com/kriskowal/q",
   "keywords": [
     "q",
@@ -113,23 +93,9 @@
     "browser",
     "node"
   ],
-  "license": {
-    "type": "MIT",
-    "url": "http://github.com/kriskowal/q/raw/master/LICENSE"
-  },
+  "license": "MIT",
   "main": "q.js",
-  "maintainers": [
-    {
-      "name": "kriskowal",
-      "email": "kris.kowal@cixar.com"
-    },
-    {
-      "name": "domenic",
-      "email": "domenic@domenicdenicola.com"
-    }
-  ],
   "name": "q",
-  "optionalDependencies": {},
   "overlay": {
     "teleport": {
       "dependencies": {
@@ -137,7 +103,6 @@
       }
     }
   },
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/kriskowal/q.git"
@@ -148,8 +113,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.1"
 }
diff --git a/node_modules/q/q.js b/node_modules/q/q.js
index cf5339e..6e46795 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,15 @@ 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."
-                ));
+                var rejection = err || new Error("" + err);
+
+                rejection.message = ("Q can't get fulfillment value from any promise, all " +
+                    "promises were rejected. Last error message: " + rejection.message);
+
+                deferred.reject(rejection);
             }
         }
         function onProgress(progress) {
@@ -1752,6 +1774,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 +1940,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 5d7ce6b..9764093 100644
--- a/node_modules/sax/package.json
+++ b/node_modules/sax/package.json
@@ -1,49 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "sax@0.3.5",
-        "scope": null,
-        "escapedName": "sax",
-        "name": "sax",
-        "rawSpec": "0.3.5",
-        "spec": "0.3.5",
-        "type": "version"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows/node_modules/elementtree"
+      "sax@0.3.5",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_defaultsLoaded": true,
-  "_engineSupported": true,
   "_from": "sax@0.3.5",
   "_id": "sax@0.3.5",
-  "_inCache": true,
-  "_installable": true,
+  "_inBundle": false,
+  "_integrity": "sha1-iPz8H3PAyLvVt8d2ttPzUB7tBz0=",
   "_location": "/sax",
-  "_nodeVersion": "v0.6.7-pre",
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "_npmVersion": "1.1.0-beta-7",
   "_phantomChildren": {},
   "_requested": {
+    "type": "version",
+    "registry": true,
     "raw": "sax@0.3.5",
-    "scope": null,
-    "escapedName": "sax",
     "name": "sax",
+    "escapedName": "sax",
     "rawSpec": "0.3.5",
-    "spec": "0.3.5",
-    "type": "version"
+    "saveSpec": null,
+    "fetchSpec": "0.3.5"
   },
   "_requiredBy": [
-    "/elementtree"
+    "/cordova-common/elementtree"
   ],
   "_resolved": "http://registry.npmjs.org/sax/-/sax-0.3.5.tgz",
-  "_shasum": "88fcfc1f73c0c8bbd5b7c776b6d3f3501eed073d",
-  "_shrinkwrap": null,
-  "_spec": "sax@0.3.5",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows/node_modules/elementtree",
+  "_spec": "0.3.5",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -86,32 +69,14 @@
       "email": "jmpublic@makeig.com"
     }
   ],
-  "dependencies": {},
   "description": "An evented streaming XML parser in JavaScript",
-  "devDependencies": {},
-  "directories": {},
-  "dist": {
-    "shasum": "88fcfc1f73c0c8bbd5b7c776b6d3f3501eed073d",
-    "tarball": "https://registry.npmjs.org/sax/-/sax-0.3.5.tgz"
-  },
-  "engines": {
-    "node": "*"
-  },
   "homepage": "https://github.com/isaacs/sax-js#readme",
   "license": {
     "type": "MIT",
     "url": "https://raw.github.com/isaacs/sax-js/master/LICENSE"
   },
   "main": "lib/sax.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    }
-  ],
   "name": "sax",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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..951c539 100644
--- a/node_modules/semver/README.md
+++ b/node_modules/semver/README.md
@@ -1,55 +1,71 @@
 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
+semver.valid(semver.coerce('v2')) // '2.0.0'
+semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
+```
 
 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.
+-c --coerce
+        Coerce a string into SemVer if possible
+        (does not imply --loose)
 
-    If no satisfying versions are found, then exits failure.
+Program exits successfully if any valid version satisfies
+all supplied ranges, and prints all satisfying versions.
 
-    Versions are printed in ascending order, so supplying
-    multiple versions to the utility will just sort them.
+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
 
@@ -126,20 +142,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 +312,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 +337,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 +358,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
@@ -348,3 +370,19 @@ satisfy the range.
 
 If you want to know if a version satisfies or does not satisfy a
 range, use the `satisfies(version, range)` function.
+
+### Coercion
+
+* `coerce(version)`: Coerces a string to semver if possible
+
+This aims to provide a very forgiving translation of a non-semver
+string to semver. It looks for the first digit in a string, and
+consumes all remaining characters which satisfy at least a partial semver
+(e.g., `1`, `1.2`, `1.2.3`) up to the max permitted length (256 characters).
+Longer versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`).
+All surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes `3.4.0`).
+Only text which lacks digits will fail coercion (`version one` is not valid).
+The maximum  length for any semver component considered for coercion is 16 characters;
+longer components will be ignored (`10000000000000000.4.7.4` becomes `4.7.4`).
+The maximum value for any semver component is `Integer.MAX_SAFE_INTEGER || (2**53 - 1)`;
+higher value components are invalid (`9999999999999999.4.7.4` is likely invalid).
diff --git a/node_modules/semver/bin/semver b/node_modules/semver/bin/semver
index c5f2e85..dddbcdf 100755
--- a/node_modules/semver/bin/semver
+++ b/node_modules/semver/bin/semver
@@ -12,6 +12,7 @@ var argv = process.argv.slice(2)
   , inc = null
   , version = require("../package.json").version
   , loose = false
+  , coerce = false
   , identifier = undefined
   , semver = require("../semver")
   , reverse = false
@@ -54,6 +55,9 @@ function main () {
       case "-r": case "--range":
         range.push(argv.shift())
         break
+      case "-c": case "--coerce":
+        coerce = true
+        break
       case "-h": case "--help": case "-?":
         return help()
       default:
@@ -62,8 +66,10 @@ function main () {
     }
   }
 
-  versions = versions.filter(function (v) {
-    return semver.valid(v, loose)
+  versions = versions.map(function (v) {
+    return coerce ? (semver.coerce(v) || {version: v}).version : v
+  }).filter(function (v) {
+    return semver.valid(v)
   })
   if (!versions.length) return fail()
   if (inc && (versions.length !== 1 || range.length))
@@ -122,6 +128,10 @@ function help () {
               ,"-l --loose"
               ,"        Interpret versions and ranges loosely"
               ,""
+              ,"-c --coerce"
+              ,"        Coerce a string into SemVer if possible"
+              ,"        (does not imply --loose)"
+              ,""
               ,"Program exits successfully if any valid version satisfies"
               ,"all supplied ranges, and prints all satisfying versions."
               ,""
diff --git a/node_modules/semver/package.json b/node_modules/semver/package.json
index aee1de4..d3df841 100644
--- a/node_modules/semver/package.json
+++ b/node_modules/semver/package.json
@@ -1,96 +1,60 @@
 {
   "_args": [
     [
-      {
-        "raw": "semver@^5.3.0",
-        "scope": null,
-        "escapedName": "semver",
-        "name": "semver",
-        "rawSpec": "^5.3.0",
-        "spec": ">=5.3.0 <6.0.0",
-        "type": "range"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows"
+      "semver@5.5.0",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "semver@>=5.3.0 <6.0.0",
-  "_id": "semver@5.3.0",
-  "_inCache": true,
-  "_installable": true,
+  "_from": "semver@5.5.0",
+  "_id": "semver@5.5.0",
+  "_inBundle": false,
+  "_integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
   "_location": "/semver",
-  "_nodeVersion": "4.4.4",
-  "_npmOperationalInternal": {
-    "host": "packages-12-west.internal.npmjs.com",
-    "tmp": "tmp/semver-5.3.0.tgz_1468515166602_0.9155273644719273"
-  },
-  "_npmUser": {
-    "name": "isaacs",
-    "email": "i@izs.me"
-  },
-  "_npmVersion": "3.10.6",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "semver@^5.3.0",
-    "scope": null,
-    "escapedName": "semver",
+    "type": "version",
+    "registry": true,
+    "raw": "semver@5.5.0",
     "name": "semver",
-    "rawSpec": "^5.3.0",
-    "spec": ">=5.3.0 <6.0.0",
-    "type": "range"
+    "escapedName": "semver",
+    "rawSpec": "5.5.0",
+    "saveSpec": null,
+    "fetchSpec": "5.5.0"
   },
   "_requiredBy": [
     "/",
-    "/cordova-common"
+    "/cordova-common",
+    "/eslint",
+    "/normalize-package-data"
   ],
-  "_resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
-  "_shasum": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f",
-  "_shrinkwrap": null,
-  "_spec": "semver@^5.3.0",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows",
+  "_resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+  "_spec": "5.5.0",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "bin": {
     "semver": "./bin/semver"
   },
   "bugs": {
     "url": "https://github.com/npm/node-semver/issues"
   },
-  "dependencies": {},
   "description": "The semantic version parser used by npm.",
   "devDependencies": {
-    "tap": "^2.0.0"
-  },
-  "directories": {},
-  "dist": {
-    "shasum": "9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f",
-    "tarball": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz"
+    "tap": "^10.7.0"
   },
   "files": [
     "bin",
     "range.bnf",
     "semver.js"
   ],
-  "gitHead": "d21444a0658224b152ce54965d02dbe0856afb84",
   "homepage": "https://github.com/npm/node-semver#readme",
   "license": "ISC",
   "main": "semver.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "isaacs@npmjs.com"
-    },
-    {
-      "name": "othiym23",
-      "email": "ogd@aoaioxxysz.net"
-    }
-  ],
   "name": "semver",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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.5.0"
 }
diff --git a/node_modules/semver/range.bnf b/node_modules/semver/range.bnf
index 25ebd5c..d4c6ae0 100644
--- a/node_modules/semver/range.bnf
+++ b/node_modules/semver/range.bnf
@@ -3,10 +3,10 @@ logical-or ::= ( ' ' ) * '||' ( ' ' ) *
 range      ::= hyphen | simple ( ' ' simple ) * | ''
 hyphen     ::= partial ' - ' partial
 simple     ::= primitive | partial | tilde | caret
-primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial
+primitive  ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
 partial    ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
 xr         ::= 'x' | 'X' | '*' | nr
-nr         ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
+nr         ::= '0' | [1-9] ( [0-9] ) *
 tilde      ::= '~' partial
 caret      ::= '^' partial
 qualifier  ::= ( '-' pre )? ( '+' build )?
diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js
index 5f1a3c5..9cf9f6e 100644
--- a/node_modules/semver/semver.js
+++ b/node_modules/semver/semver.js
@@ -21,6 +21,9 @@ exports.SEMVER_SPEC_VERSION = '2.0.0';
 var MAX_LENGTH = 256;
 var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
 
+// Max safe segment length for coercion.
+var MAX_SAFE_COMPONENT_LENGTH = 16;
+
 // The actual regexps go on exports.re
 var re = exports.re = [];
 var src = exports.src = [];
@@ -156,6 +159,15 @@ src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
 var XRANGELOOSE = R++;
 src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$';
 
+// Coercion.
+// Extract anything that could conceivably be a part of a valid semver
+var COERCE = R++;
+src[COERCE] = '(?:^|[^\\d])' +
+              '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
+              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
+              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
+              '(?:$|[^\\d])';
+
 // Tilde ranges.
 // Meaning is "reasonably at or greater than"
 var LONETILDE = R++;
@@ -563,7 +575,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 +716,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 +843,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 +1163,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 +1299,26 @@ 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)
+}
+
+exports.coerce = coerce;
+function coerce(version) {
+  if (version instanceof SemVer)
+    return version;
+
+  if (typeof version !== 'string')
+    return null;
+
+  var match = version.match(re[COERCE]);
+
+  if (match == null)
+    return null;
+
+  return parse((match[1] || '0') + '.' + (match[2] || '0') + '.' + (match[3] || '0')); 
+}
diff --git a/node_modules/shelljs/package.json b/node_modules/shelljs/package.json
index f593392..497bfbb 100644
--- a/node_modules/shelljs/package.json
+++ b/node_modules/shelljs/package.json
@@ -1,48 +1,33 @@
 {
   "_args": [
     [
-      {
-        "raw": "shelljs@^0.5.3",
-        "scope": null,
-        "escapedName": "shelljs",
-        "name": "shelljs",
-        "rawSpec": "^0.5.3",
-        "spec": ">=0.5.3 <0.6.0",
-        "type": "range"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows"
+      "shelljs@0.5.3",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "shelljs@>=0.5.3 <0.6.0",
+  "_from": "shelljs@0.5.3",
   "_id": "shelljs@0.5.3",
-  "_inCache": true,
-  "_installable": true,
+  "_inBundle": false,
+  "_integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=",
   "_location": "/shelljs",
-  "_nodeVersion": "1.2.0",
-  "_npmUser": {
-    "name": "artur",
-    "email": "arturadib@gmail.com"
-  },
-  "_npmVersion": "2.5.1",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "shelljs@^0.5.3",
-    "scope": null,
-    "escapedName": "shelljs",
+    "type": "version",
+    "registry": true,
+    "raw": "shelljs@0.5.3",
     "name": "shelljs",
-    "rawSpec": "^0.5.3",
-    "spec": ">=0.5.3 <0.6.0",
-    "type": "range"
+    "escapedName": "shelljs",
+    "rawSpec": "0.5.3",
+    "saveSpec": null,
+    "fetchSpec": "0.5.3"
   },
   "_requiredBy": [
     "/",
     "/cordova-common"
   ],
   "_resolved": "http://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
-  "_shasum": "c54982b996c76ef0c1e6b59fbdc5825f5b713113",
-  "_shrinkwrap": null,
-  "_spec": "shelljs@^0.5.3",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows",
+  "_spec": "0.5.3",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Artur Adib",
     "email": "arturadib@gmail.com"
@@ -58,15 +43,9 @@
   "devDependencies": {
     "jshint": "~2.1.11"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "c54982b996c76ef0c1e6b59fbdc5825f5b713113",
-    "tarball": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz"
-  },
   "engines": {
     "node": ">=0.8.0"
   },
-  "gitHead": "22d0975040b9b8234755dc6e692d6869436e8485",
   "homepage": "http://github.com/arturadib/shelljs",
   "keywords": [
     "unix",
@@ -78,15 +57,8 @@
   ],
   "license": "BSD*",
   "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"
diff --git a/node_modules/underscore/package.json b/node_modules/underscore/package.json
index 3f8da14..0ab7336 100644
--- a/node_modules/underscore/package.json
+++ b/node_modules/underscore/package.json
@@ -1,45 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "underscore@^1.8.3",
-        "scope": null,
-        "escapedName": "underscore",
-        "name": "underscore",
-        "rawSpec": "^1.8.3",
-        "spec": ">=1.8.3 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common"
+      "underscore@1.8.3",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "underscore@>=1.8.3 <2.0.0",
+  "_from": "underscore@1.8.3",
   "_id": "underscore@1.8.3",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=",
   "_location": "/underscore",
-  "_npmUser": {
-    "name": "jashkenas",
-    "email": "jashkenas@gmail.com"
-  },
-  "_npmVersion": "1.4.28",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "underscore@^1.8.3",
-    "scope": null,
-    "escapedName": "underscore",
+    "type": "version",
+    "registry": true,
+    "raw": "underscore@1.8.3",
     "name": "underscore",
-    "rawSpec": "^1.8.3",
-    "spec": ">=1.8.3 <2.0.0",
-    "type": "range"
+    "escapedName": "underscore",
+    "rawSpec": "1.8.3",
+    "saveSpec": null,
+    "fetchSpec": "1.8.3"
   },
   "_requiredBy": [
     "/cordova-common"
   ],
   "_resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
-  "_shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022",
-  "_shrinkwrap": null,
-  "_spec": "underscore@^1.8.3",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common",
+  "_spec": "1.8.3",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Jeremy Ashkenas",
     "email": "jeremy@documentcloud.org"
@@ -47,7 +34,6 @@
   "bugs": {
     "url": "https://github.com/jashkenas/underscore/issues"
   },
-  "dependencies": {},
   "description": "JavaScript's functional programming helper library.",
   "devDependencies": {
     "docco": "*",
@@ -57,18 +43,12 @@
     "qunit-cli": "~0.2.0",
     "uglify-js": "2.4.x"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022",
-    "tarball": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz"
-  },
   "files": [
     "underscore.js",
     "underscore-min.js",
     "underscore-min.map",
     "LICENSE"
   ],
-  "gitHead": "e4743ab712b8ab42ad4ccb48b155034d02394e4d",
   "homepage": "http://underscorejs.org",
   "keywords": [
     "util",
@@ -79,15 +59,7 @@
   ],
   "license": "MIT",
   "main": "underscore.js",
-  "maintainers": [
-    {
-      "name": "jashkenas",
-      "email": "jashkenas@gmail.com"
-    }
-  ],
   "name": "underscore",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 680f4ef..8ebb9c3 100644
--- a/node_modules/unorm/package.json
+++ b/node_modules/unorm/package.json
@@ -1,45 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "unorm@^1.3.3",
-        "scope": null,
-        "escapedName": "unorm",
-        "name": "unorm",
-        "rawSpec": "^1.3.3",
-        "spec": ">=1.3.3 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common"
+      "unorm@1.4.1",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "unorm@>=1.3.3 <2.0.0",
+  "_from": "unorm@1.4.1",
   "_id": "unorm@1.4.1",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=",
   "_location": "/unorm",
-  "_npmUser": {
-    "name": "walling",
-    "email": "bwp@bwp.dk"
-  },
-  "_npmVersion": "1.4.28",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "unorm@^1.3.3",
-    "scope": null,
-    "escapedName": "unorm",
+    "type": "version",
+    "registry": true,
+    "raw": "unorm@1.4.1",
     "name": "unorm",
-    "rawSpec": "^1.3.3",
-    "spec": ">=1.3.3 <2.0.0",
-    "type": "range"
+    "escapedName": "unorm",
+    "rawSpec": "1.4.1",
+    "saveSpec": null,
+    "fetchSpec": "1.4.1"
   },
   "_requiredBy": [
     "/cordova-common"
   ],
   "_resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz",
-  "_shasum": "364200d5f13646ca8bcd44490271335614792300",
-  "_shrinkwrap": null,
-  "_spec": "unorm@^1.3.3",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/cordova-common",
+  "_spec": "1.4.1",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Bjarke Walling",
     "email": "bwp@bwp.dk"
@@ -61,7 +48,6 @@
       "email": "matsuza@gmail.com"
     }
   ],
-  "dependencies": {},
   "description": "JavaScript Unicode 8.0 Normalization - NFC, NFD, NFKC, NFKD. Read <http://unicode.org/reports/tr15/> UAX #15 Unicode Normalization Forms.",
   "devDependencies": {
     "benchmark": "~1.0.0",
@@ -71,27 +57,13 @@
     "grunt-simple-mocha": "~0.4.0",
     "unorm": "1.4.1"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "364200d5f13646ca8bcd44490271335614792300",
-    "tarball": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz"
-  },
   "engines": {
     "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": [
-    {
-      "name": "walling",
-      "email": "bwp@bwp.dk"
-    }
-  ],
   "name": "unorm",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 313b40f..a8bc7f7 100644
--- a/node_modules/util-deprecate/package.json
+++ b/node_modules/util-deprecate/package.json
@@ -1,46 +1,33 @@
 {
   "_args": [
     [
-      {
-        "raw": "util-deprecate@1.0.2",
-        "scope": null,
-        "escapedName": "util-deprecate",
-        "name": "util-deprecate",
-        "rawSpec": "1.0.2",
-        "spec": "1.0.2",
-        "type": "version"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/plist"
+      "util-deprecate@1.0.2",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
   "_from": "util-deprecate@1.0.2",
   "_id": "util-deprecate@1.0.2",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
   "_location": "/util-deprecate",
-  "_nodeVersion": "4.1.2",
-  "_npmUser": {
-    "name": "tootallnate",
-    "email": "nathan@tootallnate.net"
-  },
-  "_npmVersion": "2.14.4",
   "_phantomChildren": {},
   "_requested": {
+    "type": "version",
+    "registry": true,
     "raw": "util-deprecate@1.0.2",
-    "scope": null,
-    "escapedName": "util-deprecate",
     "name": "util-deprecate",
+    "escapedName": "util-deprecate",
     "rawSpec": "1.0.2",
-    "spec": "1.0.2",
-    "type": "version"
+    "saveSpec": null,
+    "fetchSpec": "1.0.2"
   },
   "_requiredBy": [
-    "/plist"
+    "/plist",
+    "/readable-stream"
   ],
   "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-  "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf",
-  "_shrinkwrap": null,
-  "_spec": "util-deprecate@1.0.2",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/plist",
+  "_spec": "1.0.2",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Nathan Rajlich",
     "email": "nathan@tootallnate.net",
@@ -50,15 +37,7 @@
   "bugs": {
     "url": "https://github.com/TooTallNate/util-deprecate/issues"
   },
-  "dependencies": {},
   "description": "The Node.js `util.deprecate()` function with browser support",
-  "devDependencies": {},
-  "directories": {},
-  "dist": {
-    "shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf",
-    "tarball": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
-  },
-  "gitHead": "475fb6857cd23fafff20c1be846c1350abf8e6d4",
   "homepage": "https://github.com/TooTallNate/util-deprecate",
   "keywords": [
     "util",
@@ -69,15 +48,7 @@
   ],
   "license": "MIT",
   "main": "node.js",
-  "maintainers": [
-    {
-      "name": "tootallnate",
-      "email": "nathan@tootallnate.net"
-    }
-  ],
   "name": "util-deprecate",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git://github.com/TooTallNate/util-deprecate.git"
diff --git a/node_modules/winjs/README.md b/node_modules/winjs/README.md
index 33e432f..d046c24 100644
--- a/node_modules/winjs/README.md
+++ b/node_modules/winjs/README.md
@@ -1,9 +1,13 @@
 Windows Library for JavaScript (WinJS)
 =====
+
+[![Join the chat at https://gitter.im/winjs/winjs](https://badges.gitter.im/winjs/winjs.svg)](https://gitter.im/winjs/winjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
  [![Build Status](https://travis-ci.org/winjs/winjs.svg?branch=master)](https://travis-ci.org/winjs/winjs)
- 
-This project is actively developed by the WinJS developers working for Microsoft Corporation, in collaboration with the community of open source developers. Together we are dedicated to creating the best possible solution for HTML/JS/CSS application development.
 
+# Status
+Right now, Microsoft plans to maintain WinJS's existing features--this means responding to Issues and Pull Requests on a regular basis. We're committed to making sure that WinJS continues to run well. At this time, we don't have plans to invest in new features or feature requests; this also means that we're not planning a new feature release.
+
+# Intro
 WinJS is a set of JavaScript toolkits that allow developers to build applications using HTML/JS/CSS technology forged with the following principles in mind:
 
 * Provide developers with a distinctive set of UI controls with high polish and performance with fundamental support for touch, mouse, keyboard and accessibility
diff --git a/node_modules/winjs/css/ui-dark.css b/node_modules/winjs/css/ui-dark.css
index 82474e2..a8f89fc 100644
--- a/node_modules/winjs/css/ui-dark.css
+++ b/node_modules/winjs/css/ui-dark.css
@@ -733,7 +733,7 @@ iframe {
 .win-textbox,
 .win-link,
 .win-textarea {
-  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols";
+  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols", "Segoe UI Emoji";
 }
 .win-textbox,
 .win-textarea {
@@ -2693,7 +2693,7 @@ button.win-navigation-backbutton:enabled:hover:active {
     border-color: transparent;
     color: ButtonFace;
   }
-  html.win-hoverable win-semanticzoom-button:hover {
+  html.win-hoverable .win-semanticzoom-button:hover {
     background-color: Highlight;
     border-color: ButtonText;
     color: HighlightText;
@@ -2744,7 +2744,7 @@ button.win-navigation-backbutton:enabled:hover:active {
   -ms-flex: 0 0 auto;
   -webkit-flex: 0 0 auto;
   flex: 0 0 auto;
-  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols";
+  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols", "Segoe UI Emoji";
   font-size: 15px;
   font-weight: bold;
   white-space: nowrap;
@@ -3283,7 +3283,7 @@ button[aria-checked=true]:disabled:active .win-commandimage {
 Command button labels.
 */
 button.win-command .win-label {
-  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols";
+  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols", "Segoe UI Emoji";
   font-size: 12px;
   font-weight: 400;
   line-height: 1.167;
@@ -5373,6 +5373,9 @@ Hide clear button in search box control.
   left: 0;
   width: 100%;
 }
+.win-splitview.win-splitview-pane-opened.win-splitview-openeddisplayoverlay.win-splitview-placementleft {
+  position: static;
+}
 .win-splitview.win-splitview-pane-opened.win-splitview-openeddisplayoverlay.win-splitview-placementleft .win-splitview-panewrapper {
   position: absolute;
   top: 0;
diff --git a/node_modules/winjs/css/ui-dark.min.css b/node_modules/winjs/css/ui-dark.min.css
index 3b725cf..30c68c8 100644
--- a/node_modules/winjs/css/ui-dark.min.css
+++ b/node_modules/winjs/css/ui-dark.min.css
@@ -1 +1 @@
-.win-button,.win-slider{-webkit-appearance:none}.win-button,.win-link{touch-action:manipulation}@keyframes WinJS-node-inserted{from{outline-color:#000}to{outline-color:#001}}@keyframes WinJS-opacity-in{from{opacity:0}to{opacity:1}}@keyframes WinJS-opacity-out{from{opacity:1}to{opacity:0}}@keyframes WinJS-scale-up{from{transform:scale(.85)}to{transform:scale(1)}}@keyframes WinJS-scale-down{from{transform:scale(1)}to{transform:scale(.85)}}@keyframes WinJS-default-remove{from{transform:tra [...]
\ No newline at end of file
+.win-button,.win-slider{-webkit-appearance:none}.win-button,.win-link{touch-action:manipulation}@keyframes WinJS-node-inserted{from{outline-color:#000}to{outline-color:#001}}@keyframes WinJS-opacity-in{from{opacity:0}to{opacity:1}}@keyframes WinJS-opacity-out{from{opacity:1}to{opacity:0}}@keyframes WinJS-scale-up{from{transform:scale(.85)}to{transform:scale(1)}}@keyframes WinJS-scale-down{from{transform:scale(1)}to{transform:scale(.85)}}@keyframes WinJS-default-remove{from{transform:tra [...]
\ No newline at end of file
diff --git a/node_modules/winjs/css/ui-light.css b/node_modules/winjs/css/ui-light.css
index cd0bed6..3bd3a3c 100644
--- a/node_modules/winjs/css/ui-light.css
+++ b/node_modules/winjs/css/ui-light.css
@@ -733,7 +733,7 @@ iframe {
 .win-textbox,
 .win-link,
 .win-textarea {
-  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols";
+  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols", "Segoe UI Emoji";
 }
 .win-textbox,
 .win-textarea {
@@ -2693,7 +2693,7 @@ button.win-navigation-backbutton:enabled:hover:active {
     border-color: transparent;
     color: ButtonFace;
   }
-  html.win-hoverable win-semanticzoom-button:hover {
+  html.win-hoverable .win-semanticzoom-button:hover {
     background-color: Highlight;
     border-color: ButtonText;
     color: HighlightText;
@@ -2744,7 +2744,7 @@ button.win-navigation-backbutton:enabled:hover:active {
   -ms-flex: 0 0 auto;
   -webkit-flex: 0 0 auto;
   flex: 0 0 auto;
-  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols";
+  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols", "Segoe UI Emoji";
   font-size: 15px;
   font-weight: bold;
   white-space: nowrap;
@@ -3283,7 +3283,7 @@ button[aria-checked=true]:disabled:active .win-commandimage {
 Command button labels.
 */
 button.win-command .win-label {
-  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols";
+  font-family: "Segoe UI", sans-serif, "Segoe MDL2 Assets", "Symbols", "Segoe UI Emoji";
   font-size: 12px;
   font-weight: 400;
   line-height: 1.167;
@@ -5373,6 +5373,9 @@ Hide clear button in search box control.
   left: 0;
   width: 100%;
 }
+.win-splitview.win-splitview-pane-opened.win-splitview-openeddisplayoverlay.win-splitview-placementleft {
+  position: static;
+}
 .win-splitview.win-splitview-pane-opened.win-splitview-openeddisplayoverlay.win-splitview-placementleft .win-splitview-panewrapper {
   position: absolute;
   top: 0;
diff --git a/node_modules/winjs/css/ui-light.min.css b/node_modules/winjs/css/ui-light.min.css
index d3bb9ac..eb79270 100644
--- a/node_modules/winjs/css/ui-light.min.css
+++ b/node_modules/winjs/css/ui-light.min.css
@@ -1 +1 @@
-.win-button,.win-slider{-webkit-appearance:none}.win-button,.win-link{touch-action:manipulation}@keyframes WinJS-node-inserted{from{outline-color:#000}to{outline-color:#001}}@keyframes WinJS-opacity-in{from{opacity:0}to{opacity:1}}@keyframes WinJS-opacity-out{from{opacity:1}to{opacity:0}}@keyframes WinJS-scale-up{from{transform:scale(.85)}to{transform:scale(1)}}@keyframes WinJS-scale-down{from{transform:scale(1)}to{transform:scale(.85)}}@keyframes WinJS-default-remove{from{transform:tra [...]
\ No newline at end of file
+.win-button,.win-slider{-webkit-appearance:none}.win-button,.win-link{touch-action:manipulation}@keyframes WinJS-node-inserted{from{outline-color:#000}to{outline-color:#001}}@keyframes WinJS-opacity-in{from{opacity:0}to{opacity:1}}@keyframes WinJS-opacity-out{from{opacity:1}to{opacity:0}}@keyframes WinJS-scale-up{from{transform:scale(.85)}to{transform:scale(1)}}@keyframes WinJS-scale-down{from{transform:scale(1)}to{transform:scale(.85)}}@keyframes WinJS-default-remove{from{transform:tra [...]
\ No newline at end of file
diff --git a/node_modules/winjs/js/base.js b/node_modules/winjs/js/base.js
index 06122bb..c5d2451 100644
--- a/node_modules/winjs/js/base.js
+++ b/node_modules/winjs/js/base.js
@@ -12,7 +12,7 @@
             // amd
             define([], factory);
         } else {
-            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.4 4.4.0.winjs.2015.10.2 base.js,StartTM');
+            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.4 4.4.2.winjs.2017.3.14 base.js,StartTM');
             if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
                 // CommonJS
                 factory();
@@ -20,7 +20,7 @@
                 // No module system
                 factory(globalObject.WinJS);
             }
-            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.4 4.4.0.winjs.2015.10.2 base.js,StopTM');
+            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.4 4.4.2.winjs.2017.3.14 base.js,StopTM');
         }
     }(function (WinJS) {
 
@@ -1235,6 +1235,10 @@ define('require-json!strings/en-us/Microsoft.WinJS.resjson',{
     "_ui/appBarIcons/fontsize.comment":                   "{Locked=qps-ploc,qps-plocm}",
     "ui/appBarIcons/cellphone":                           "\uE1C9", // group:Communications
     "_ui/appBarIcons/cellphone.comment":                  "{Locked=qps-ploc,qps-plocm}",
+    "ui/appBarIcons/print":                               "\uE749", // group:Communications
+    "_ui/appBarIcons/print.comment":                      "{Locked=qps-ploc,qps-plocm}",
+    "ui/appBarIcons/share":                               "\uE72D", // group:Communications
+    "_ui/appBarIcons/share.comment":                      "{Locked=qps-ploc,qps-plocm}",
     "ui/appBarIcons/reshare":                             "\uE1CA", // group:Communications
     "_ui/appBarIcons/reshare.comment":                    "{Locked=qps-ploc,qps-plocm}",
     "ui/appBarIcons/tag":                                 "\uE1CB", // group:Data
@@ -5198,7 +5202,7 @@ define('WinJS/Core/_BaseUtils',[
         _traceAsyncCallbackStarting: _Trace._traceAsyncCallbackStarting,
         _traceAsyncCallbackCompleted: _Trace._traceAsyncCallbackCompleted,
 
-        _version: "4.4.0"
+        _version: "4.4.2"
     });
 
     _Base.Namespace._moduleDefine(exports, "WinJS", {
@@ -6219,7 +6223,7 @@ define('WinJS/Utilities/_ElementUtilities',[
             _resizeEvent: { get: function () { return 'WinJSElementResize'; } }
         }
     );
-   
+
     // - object: The object on which GenericListener will listen for events.
     // - objectName: A string representing the name of *object*. This will be
     //   incorporated into the names of the events and classNames created by
@@ -7523,18 +7527,9 @@ define('WinJS/Utilities/_ElementUtilities',[
                 return 0;
             }
 
-            var left = element.offsetLeft;
-            var e = element.parentNode;
-            while (e) {
-                left -= e.offsetLeft;
-
-                if (e === parent) {
-                    break;
-                }
-                e = e.parentNode;
-            }
-
-            return left;
+            var elementPosition = exports._getPositionRelativeTo(element, null);
+            var parentPosition = exports._getPositionRelativeTo(parent, null);
+            return elementPosition.left - parentPosition.left;
         },
 
         getRelativeTop: function (element, parent) {
@@ -7556,18 +7551,9 @@ define('WinJS/Utilities/_ElementUtilities',[
                 return 0;
             }
 
-            var top = element.offsetTop;
-            var e = element.parentNode;
-            while (e) {
-                top -= e.offsetTop;
-
-                if (e === parent) {
-                    break;
-                }
-                e = e.parentNode;
-            }
-
-            return top;
+            var elementPosition = exports._getPositionRelativeTo(element, null);
+            var parentPosition = exports._getPositionRelativeTo(parent, null);
+            return elementPosition.top - parentPosition.top;
         },
 
         getScrollPosition: getScrollPosition,
@@ -12704,6 +12690,7 @@ define('WinJS/Utilities',[
 
     //wrapper module
 });
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
 define('WinJS/XYFocus',["require", "exports", "./Core/_Global", "./Core/_Base", "./Core/_BaseUtils", "./Utilities/_ElementUtilities", "./Core/_Events", "./ControlProcessor/_OptionsParser"], function (require, exports, _Global, _Base, _BaseUtils, _ElementUtilities, _Events, _OptionsParser) {
     "use strict";
     var Keys = _ElementUtilities.Key;
@@ -13149,6 +13136,9 @@ define('WinJS/XYFocus',["require", "exports", "./Core/_Global", "./Core/_Base",
         return container && !_ElementUtilities.hasClass(container, ClassNames.toggleModeActive);
     }
     function _isToggleMode(element) {
+        if (_ElementUtilities.hasClass(_Global.document.body, ClassNames.xboxPlatform)) {
+            return false;
+        }
         if (_ElementUtilities.hasClass(element, ClassNames.toggleMode)) {
             return true;
         }
diff --git a/node_modules/winjs/js/base.min.js b/node_modules/winjs/js/base.min.js
index 07909da..8fa8175 100644
--- a/node_modules/winjs/js/base.min.js
+++ b/node_modules/winjs/js/base.min.js
@@ -1,13 +1,13 @@
 /*! Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. */
-!function(){var globalObject="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};!function(a){"function"==typeof define&&define.amd?define([],a):(globalObject.msWriteProfilerMark&&msWriteProfilerMark("WinJS.4.4 4.4.0.winjs.2015.10.2 base.js,StartTM"),"object"==typeof exports&&"string"!=typeof exports.nodeName?a():a(globalObject.WinJS),globalObject.msWriteProfilerMark&&msWriteProfilerMark("WinJS.4.4 4.4.0.winjs.2015.10.2 base.js,StopTM"))}( [...]
-"ui/appBarIcons/gotostart":"","_ui/appBarIcons/gotostart.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBarIcons/zerobars":"","_ui/appBarIcons/zerobars.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBarIcons/onebar":"","_ui/appBarIcons/onebar.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBarIcons/twobars":"","_ui/appBarIcons/twobars.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBarIcons/threebars":"","_ui/appBarIcons/threebars.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBarIcons/fou [...]
-e?(f=this,g=[].slice.call(arguments,0)):d?(f=this,g=[].slice.call(arguments,0),e=d.then(function(){var a=f;f=null;var h=g;g=null,d=c(),e=null,b.apply(a,h)})):(d=c(),b.apply(this,arguments))}}var s,t={get notSupportedForProcessing(){return"Value is not supported within a declarative processing context, if you want it to be supported mark it using WinJS.Utilities.markSupportedForProcessing. The value was: '{0}'"}},u=0,v={},w=!1,x=b.navigator.platform,y="iPhone"===x||"iPad"===x||"iPod"===x; [...]
-case"with":return reservedWord(a)}}}var tokenType={leftBrace:1,rightBrace:2,leftBracket:3,rightBracket:4,separator:5,colon:6,semicolon:7,comma:8,dot:9,nullLiteral:10,trueLiteral:11,falseLiteral:12,numberLiteral:13,stringLiteral:14,identifier:15,reservedWord:16,thisKeyword:17,leftParentheses:18,rightParentheses:19,eof:20,error:21},tokens={leftBrace:{type:tokenType.leftBrace,length:1},rightBrace:{type:tokenType.rightBrace,length:1},leftBracket:{type:tokenType.leftBracket,length:1},rightBra [...]
-e},b.isImageCached=r,b}return h.cancel});o||(d?(c.stage0=b,c.startStage1=function(){c.startStage1=null,e()}):e()),p.handle=b.handle,c.itemPromise=p,c.itemReadyPromise=l.promise,c.readyComplete=!1;var s="_renderItem("+c.item.index+(o?"):syncItemPromise":"):placeholder"),t="_renderItem("+c.item.index+"):itemReady";this._writeProfilerMark(s+",StartTM");var u=h.as(f._itemRenderer(p,c.element)).then(a._normalizeRendererReturn).then(function(a){return f._released?h.cancel:(p.then(function(a){i [...]
-for(var e=b.document.createDocumentFragment();a.childNodes.length>0;)e.appendChild(a.childNodes[0]);d.docfrag=j.data(a).docFragment=e,a.setAttribute("data-win-hasfragment","")}return c&&y(a),i.as(d)}function q(a,b){return z(a,b).then(function(){return a.document?s(b,a):a}).then(function(){return a.document&&delete a.document,a})}function r(a,b){var c=a.toLowerCase(),d=H[c];if(d)return b&&delete H[c],d.promise?d.promise:i.as(d);d={},b||(H[c]=d);var e=d.promise=q(d,a);return d.promise.then [...]
-to:""});return i.join([a,b]).then(function(){z("deleteFromListAnimation,StopTM")})}},{supportedForProcessing:!1}),L=c.Class.define(function(a,b,c,d){this.addedArray=a,this.affectedArray=b,this.offsetArray=c;var e=m(d);this.deletedArray=e,this.deletedOffsetArray=n(e)},{execute:function(){z("_updateListAnimation,StartTM"),p(this.deletedArray,this.deletedOffsetArray);var a=0,b=h.executeAnimation(this.deletedArray,[{keyframe:w(this.deletedOffsetArray,"WinJS-scale-down"),property:D.cssName,de [...]
-h instanceof Function){var i=h(d,a.source,e,a.destination);return g&&(i&&i.cancel?g.bindings.push(function(){i.cancel()}):g.nocache=!0),i}h&&h.render&&(f.count++,g&&(g.nocache=!0),P(h.render).call(h,A(d,a.source),e).then(function(){f.checkComplete()}))}function t(a,b,c,d,e,f){var i,j=!0,k=!1;p(d);var l=function(){if(!k){var c=q(n._getWeakRefElement(a),b);return c||(g.log&&g.log(h._formatString(N.elementNotFound,a),"winjs binding","info"),i&&i.cancel()),c}},m=function(a){var b=l();b&&B(b, [...]
-if(!b.template)switch(b.initializer.imported){case T:var c=N(b,{kind:va.tree,initializer:this.importFunctionSafe("init_oneTime",U),original:b});c.elementCapture.refCount++,this.oneTimeTreeBinding(c),this._bindings.splice(a,0,c),b.delayable=!0,a++;break;case V:var c=N(b,{kind:va.tree,initializer:this.importFunctionSafe("init_setAttributeOneTime",W),original:b});c.elementCapture.refCount++,this.setAttributeOneTimeTreeBinding(c),this._bindings.splice(a,0,c),b.delayable=!0,a++;break;case U:t [...]
-}).render(b,c)}}});return p})})}}),define("WinJS/BindingList/_BindingListDataSource",["exports","../Core/_WinRT","../Core/_Base","../Core/_ErrorFromName","../Binding/_DomWeakRefTable","../Promise","../Scheduler","../Utilities/_UI"],function(a,b,c,d,e,f,g,h){"use strict";c.Namespace._moduleDefine(a,"WinJS.Binding",{_BindingListDataSource:c.Namespace._lazy(function(){function a(a,b){for(var c=a.length;c-1>b;){var d=a.getItem(++b);if(d)return d.key}return null}function i(a,b){for(;b>0;){var [...]
-b[f]={handle:f,key:f,data:h}}}}else Object.keys(this._keyMap).forEach(function(b){a[b>>>0]=b});this._keys=a}},_lazyPopulateEntry:function(a){if(this._data&&a in this._data){var b=this._data[a];this._binding&&(b=g.as(b));var c=a.toString(),d={handle:c,key:c,data:b};return this._keyMap[d.key]=d,d}},_assignKey:function(){return(++this._currentKey).toString()},length:{get:function(){return this._data?this._data.length:this._keys?this._keys.length:this._currentKey},set:function(a){if(!("numbe [...]
+!function(){var globalObject="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};!function(a){"function"==typeof define&&define.amd?define([],a):(globalObject.msWriteProfilerMark&&msWriteProfilerMark("WinJS.4.4 4.4.2.winjs.2017.3.14 base.js,StartTM"),"object"==typeof exports&&"string"!=typeof exports.nodeName?a():a(globalObject.WinJS),globalObject.msWriteProfilerMark&&msWriteProfilerMark("WinJS.4.4 4.4.2.winjs.2017.3.14 base.js,StopTM"))}( [...]
+"ui/appBarIcons/addfriend":"","_ui/appBarIcons/addfriend.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBarIcons/touchpointer":"","_ui/appBarIcons/touchpointer.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBarIcons/gotostart":"","_ui/appBarIcons/gotostart.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBarIcons/zerobars":"","_ui/appBarIcons/zerobars.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBarIcons/onebar":"","_ui/appBarIcons/onebar.comment":"{Locked=qps-ploc,qps-plocm}","ui/appBa [...]
+a}function r(a,b){function c(){return h.timeout(a).then(function(){d=null})}var d=null,e=null,f=null,g=null;return function(){e?(f=this,g=[].slice.call(arguments,0)):d?(f=this,g=[].slice.call(arguments,0),e=d.then(function(){var a=f;f=null;var h=g;g=null,d=c(),e=null,b.apply(a,h)})):(d=c(),b.apply(this,arguments))}}var s,t={get notSupportedForProcessing(){return"Value is not supported within a declarative processing context, if you want it to be supported mark it using WinJS.Utilities.ma [...]
+return reservedWord(a)}break;case 118:switch(a){case"var":case"void":return reservedWord(a)}break;case 119:switch(a){case"while":case"with":return reservedWord(a)}}}var tokenType={leftBrace:1,rightBrace:2,leftBracket:3,rightBracket:4,separator:5,colon:6,semicolon:7,comma:8,dot:9,nullLiteral:10,trueLiteral:11,falseLiteral:12,numberLiteral:13,stringLiteral:14,identifier:15,reservedWord:16,thisKeyword:17,leftParentheses:18,rightParentheses:19,eof:20,error:21},tokens={leftBrace:{type:tokenTy [...]
+b.isOnScreen=function(){return h.wrap(g(a.index))},b.loadImage=function(a,d){var e=q(a,d,b);return c.imagePromises?c.imagePromises.push(e):c.imagePromises=[e],e},b.isImageCached=r,b}return h.cancel});o||(d?(c.stage0=b,c.startStage1=function(){c.startStage1=null,e()}):e()),p.handle=b.handle,c.itemPromise=p,c.itemReadyPromise=l.promise,c.readyComplete=!1;var s="_renderItem("+c.item.index+(o?"):syncItemPromise":"):placeholder"),t="_renderItem("+c.item.index+"):itemReady";this._writeProfiler [...]
+var b=a.href.toLowerCase();if(!(b in F)){F[b]=!0;var c=a.cloneNode(!1);c.href=a.href,C.appendChild(c)}}function p(a,c){if("string"==typeof a)return r(a,c);var d={docfrag:j.data(a).docFragment};if(!d.docfrag){for(var e=b.document.createDocumentFragment();a.childNodes.length>0;)e.appendChild(a.childNodes[0]);d.docfrag=j.data(a).docFragment=e,a.setAttribute("data-win-hasfragment","")}return c&&y(a),i.as(d)}function q(a,b){return z(a,b).then(function(){return a.document?s(b,a):a}).then(funct [...]
+property:"opacity",delay:0,duration:120,timing:"linear",from:1,to:0}]),b=q(this.remainingArray,this.offsetArray,{property:D.cssName,delay:this.deletedArray.length>0?60:0,duration:400,timing:"cubic-bezier(0.1, 0.9, 0.2, 1)",to:""});return i.join([a,b]).then(function(){z("deleteFromListAnimation,StopTM")})}},{supportedForProcessing:!1}),L=c.Class.define(function(a,b,c,d){this.addedArray=a,this.affectedArray=b,this.offsetArray=c;var e=m(d);this.deletedArray=e,this.deletedOffsetArray=n(e)},{ [...]
+var b="_win_bind"+L++;return Object.defineProperty(a,"winBindingToken",{configurable:!1,writable:!1,enumerable:!1,value:b}),b}function s(a,b,c,d,e,f,g){var h=a.initializer;if(h&&(h=h.winControl||h["data-win-control"]||h),h instanceof Function){var i=h(d,a.source,e,a.destination);return g&&(i&&i.cancel?g.bindings.push(function(){i.cancel()}):g.nocache=!0),i}h&&h.render&&(f.count++,g&&(g.nocache=!0),P(h.render).call(h,A(d,a.source),e).then(function(){f.checkComplete()}))}function t(a,b,c,d [...]
+initialValue:b})}},optimize:function(){if(this._stage>ya.optimze)throw"Illegal: once we have moved past link we cannot revist it";this._stage=ya.optimze;for(var a=0;a<this._bindings.length;a++){var b=this._bindings[a];if(!b.template)switch(b.initializer.imported){case T:var c=N(b,{kind:va.tree,initializer:this.importFunctionSafe("init_oneTime",U),original:b});c.elementCapture.refCount++,this.oneTimeTreeBinding(c),this._bindings.splice(a,0,c),b.delayable=!0,a++;break;case V:var c=N(b,{kin [...]
+})}return d},_reset:function(){delete this._renderImpl,delete this._renderItemImpl}},{isDeclarativeControlContainer:{value:!0,writable:!1,configurable:!1},render:{value:function(a,b,c){return new p(null,{href:a}).render(b,c)}}});return p})})}}),define("WinJS/BindingList/_BindingListDataSource",["exports","../Core/_WinRT","../Core/_Base","../Core/_ErrorFromName","../Binding/_DomWeakRefTable","../Promise","../Scheduler","../Utilities/_UI"],function(a,b,c,d,e,f,g,h){"use strict";c.Namespace [...]
+_modifyingData:0,_initializeKeys:function(){if(!this._keys){var a=[];if(this._data){for(var b=this._keyMap,c=this._data,d=0,e=c.length;e>d;d++)if(d in c){var f=d.toString();if(a[d]=f,!(f in b)){var h=c[d];this._binding&&(h=g.as(h)),b[f]={handle:f,key:f,data:h}}}}else Object.keys(this._keyMap).forEach(function(b){a[b>>>0]=b});this._keys=a}},_lazyPopulateEntry:function(a){if(this._data&&a in this._data){var b=this._data[a];this._binding&&(b=g.as(b));var c=a.toString(),d={handle:c,key:c,dat [...]
 //# sourceMappingURL=base.min.js.map
\ No newline at end of file
diff --git a/node_modules/winjs/js/base.min.js.map b/node_modules/winjs/js/base.min.js.map
index c72d1fe..9a9f3f5 100644
--- a/node_modules/winjs/js/base.min.js.map
+++ b/node_modules/winjs/js/base.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"base.min.js","sources":["base.js"],"names":["globalObject","window","self","global","factory","define","amd","msWriteProfilerMark","exports","nodeName","WinJS","require","normalize","id","dependencies","parent","split","pop","map","dep","parts","current","slice","forEach","part","push","join","resolve","depName","defined","Error","resolved","load","deps","apply","Array","isArray","mod","indexOf","_Global","markSupportedForProcessing","func","supportedForProcessing"," [...]
\ No newline at end of file
+{"version":3,"sources":["base.js"],"names":["globalObject","window","self","global","factory","define","amd","msWriteProfilerMark","exports","nodeName","WinJS","require","normalize","id","dependencies","parent","split","pop","map","dep","parts","current","slice","forEach","part","push","join","resolve","depName","defined","Error","resolved","load","deps","apply","Array","isArray","mod","indexOf","_Global","markSupportedForProcessing","func","supportedForProcessing","hasWinRT","Windows"," [...]
\ No newline at end of file
diff --git a/node_modules/winjs/js/en-US/ui.strings.js b/node_modules/winjs/js/en-US/ui.strings.js
index 11375ab..5d88759 100644
--- a/node_modules/winjs/js/en-US/ui.strings.js
+++ b/node_modules/winjs/js/en-US/ui.strings.js
@@ -1,6 +1,6 @@
 /*!
   Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
-  Build: 4.4.0.winjs.2015.10.2
+  Build: 4.4.2.winjs.2017.3.14
   Version: WinJS.4.4
 */
 
@@ -451,6 +451,10 @@
     "_ui/appBarIcons/fontsize.comment":                   "{Locked=qps-ploc,qps-plocm}",
     "ui/appBarIcons/cellphone":                           "\uE1C9", // group:Communications
     "_ui/appBarIcons/cellphone.comment":                  "{Locked=qps-ploc,qps-plocm}",
+    "ui/appBarIcons/print":                               "\uE749", // group:Communications
+    "_ui/appBarIcons/print.comment":                      "{Locked=qps-ploc,qps-plocm}",
+    "ui/appBarIcons/share":                               "\uE72D", // group:Communications
+    "_ui/appBarIcons/share.comment":                      "{Locked=qps-ploc,qps-plocm}",
     "ui/appBarIcons/reshare":                             "\uE1CA", // group:Communications
     "_ui/appBarIcons/reshare.comment":                    "{Locked=qps-ploc,qps-plocm}",
     "ui/appBarIcons/tag":                                 "\uE1CB", // group:Data
diff --git a/node_modules/winjs/js/ui.js b/node_modules/winjs/js/ui.js
index 3c7295c..6af438b 100644
--- a/node_modules/winjs/js/ui.js
+++ b/node_modules/winjs/js/ui.js
@@ -12,7 +12,7 @@
             // amd
             define(["./base"], factory);
         } else {
-            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.4 4.4.0.winjs.2015.10.2 ui.js,StartTM');
+            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.4 4.4.2.winjs.2017.3.14 ui.js,StartTM');
             if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
                 // CommonJS
                 factory(require("./base"));
@@ -20,7 +20,7 @@
                 // No module system
                 factory(globalObject.WinJS);
             }
-            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.4 4.4.0.winjs.2015.10.2 ui.js,StopTM');
+            globalObject.msWriteProfilerMark && msWriteProfilerMark('WinJS.4.4 4.4.2.winjs.2017.3.14 ui.js,StopTM');
         }
     }(function (WinJS) {
 
@@ -7566,6 +7566,7 @@ define('WinJS/Vui',["require", "exports", "./Core/_Global", "./Utilities/_Elemen
     }
 });
 
+// Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
 define('WinJS/_Accents',["require", "exports", "./Core/_Global", "./Core/_WinRT", "./Core/_Base", "./Core/_BaseUtils", './Utilities/_ElementUtilities'], function (require, exports, _Global, _WinRT, _Base, _BaseUtils, _ElementUtilities) {
     var Constants = {
         accentStyleId: "WinJSAccentsStyle",
@@ -20999,6 +21000,9 @@ define('WinJS/Controls/ListView',[
 
                 _forceLayoutImpl: function ListView_forceLayoutImpl(viewChange) {
                     var that = this;
+                    if (!this._versionManager) {
+                        return;
+                    }
                     this._versionManager.unlocked.then(function () {
                         that._writeProfilerMark("_forceLayoutImpl viewChange(" + viewChange + "),info");
 
@@ -21492,7 +21496,7 @@ define('WinJS/Controls/ListView',[
                         modeHandler("PointerUp"),
                         modeHandler("LostPointerCapture"),
                         modeHandler("MSHoldVisual", true),
-                        modeHandler("PointerCancel", true),
+                        modeHandler("PointerCancel"),
                         modeHandler("DragStart"),
                         modeHandler("DragOver"),
                         modeHandler("DragEnter"),
@@ -24770,25 +24774,34 @@ define('WinJS/Controls/FlipView/_PageManager',[
                         return;
                     }
 
-                    while (this._currentPage.element && this._getItemStart(this._currentPage) > newPos && this._currentPage.prev.element) {
+                    var movedPages = false;
+
+                    while (this._currentPage.element && this._currentPage.prev && this._currentPage.prev.element && newPos <= this._getItemStart(this._currentPage.prev)) {
                         this._currentPage = this._currentPage.prev;
                         this._fetchOnePrevious(bufferEnd.prev);
                         bufferEnd = bufferEnd.prev;
+                        movedPages = true;
                     }
 
-                    while (this._currentPage.element && this._itemEnd(this._currentPage) <= newPos && this._currentPage.next.element) {
+                    while (this._currentPage.element && this._currentPage.next && this._currentPage.next.element && newPos >= this._getItemStart(this._currentPage.next)) {
                         this._currentPage = this._currentPage.next;
                         this._fetchOneNext(bufferEnd.next);
                         bufferEnd = bufferEnd.next;
+                        movedPages = true;
                     }
+
                     this._setButtonStates();
                     this._checkElementVisibility(false);
                     this._blockTabs = true;
                     this._lastScrollPos = newPos;
+
                     if (this._currentPage.element) {
                         this._tabManager.childFocus = this._currentPage.element;
                     }
-                    this._setListEnds();
+
+                    if (movedPages) {
+                        this._ensureCentered(true);
+                    }
 
                     if (!this._manipulationState && this._viewportOnItemStart()) {
                         // Setup a timeout to invoke _itemSettledOn in cases where the scroll position is changed, and the control
@@ -29283,12 +29296,14 @@ define('WinJS/Controls/DatePicker',[
                         } else {
                             newDate = value;
                         }
-
-                        var oldDate = this._currentDate;
-                        if (oldDate !== newDate) {
-                            this._currentDate = newDate;
-                            this._updateDisplay();
+                        if (newDate) {
+                            var oldDate = this._currentDate;
+                            if (oldDate !== newDate) {
+                                this._currentDate = newDate;
+                                this._updateDisplay();
+                            }
                         }
+                        
                     }
                 },
 
@@ -35502,14 +35517,14 @@ define('WinJS/Controls/Pivot/_Pivot',["require", "exports", "../../Core/_Global"
             else {
                 this._surfaceElement.appendChild(item.element);
             }
+            this._headersState.render();
+            this._headersState.refreshHeadersState(true);
             if (index <= this.selectedIndex) {
                 this._selectedIndex++;
             }
             if (this._items.length === 1) {
                 this.selectedIndex = 0;
             }
-            this._headersState.render();
-            this._headersState.refreshHeadersState(true);
         };
         Pivot.prototype._handleItemMoved = function (ev) {
             // Move is triggered by binding list move() API.
@@ -38029,7 +38044,7 @@ define('WinJS/_LightDismissService',["require", "exports", './Application', './C
     //   Call WinJS.UI._LightDismissService._setDebug(true)
     //   This disables the "window blur" light dismiss cue. It enables you to move focus
     //   to the debugger or DOM explorer without causing the light dismissables to close.
-    // 
+    //
     // Example usage of _LightDismissService
     //   To implement a new light dismissable, you just need to:
     //     - Tell the service when you are shown
@@ -38042,25 +38057,25 @@ define('WinJS/_LightDismissService',["require", "exports", './Application', './C
     //   Here's what a basic light dismissable looks like in code:
     //
     //     var SimpleOverlay = _Base.Class.define(function (element) {
-    //         var that = this; 
-    //         this.element = element || document.createElement("div"); 
-    //         this.element.winControl = this; 
+    //         var that = this;
+    //         this.element = element || document.createElement("div");
+    //         this.element.winControl = this;
     //         _ElementUtilities.addClass(this.element, "simpleoverlay");
     //
-    //         this._dismissable = new _LightDismissService.LightDismissableElement({ 
+    //         this._dismissable = new _LightDismissService.LightDismissableElement({
     //             element: this.element,
     //             tabIndex: this.element.hasAttribute("tabIndex") ? this.element.tabIndex : -1,
-    //             onLightDismiss: function () { 
-    //                 that.hide(); 
-    //             } 
-    //         }); 
+    //             onLightDismiss: function () {
+    //                 that.hide();
+    //             }
+    //         });
     //     }, {
     //         show: function () {
-    //             _ElementUtilities.addClass(this.element, "simpleoverlay-shown"); 
+    //             _ElementUtilities.addClass(this.element, "simpleoverlay-shown");
     //             _LightDismissService.shown(this._dismissable);
     //         },
     //         hide: function () {
-    //             _ElementUtilities.removeClass(this.element, "simpleoverlay-shown"); 
+    //             _ElementUtilities.removeClass(this.element, "simpleoverlay-shown");
     //             _LightDismissService.hidden(this._dismissable);
     //         }
     //     });
@@ -38421,12 +38436,12 @@ define('WinJS/_LightDismissService',["require", "exports", './Application', './C
             var zIndexGap = 0;
             var lastUsedZIndex = baseZIndex + 1;
             this._clients.forEach(function (c, i) {
-                var currentZIndex = lastUsedZIndex + zIndexGap;
+                var currentZIndex = parseInt(lastUsedZIndex.toString()) + parseInt(zIndexGap.toString());
                 c.setZIndex("" + currentZIndex);
                 lastUsedZIndex = currentZIndex;
                 // count + 1 so that there's an unused zIndex between each pair of
                 // dismissables that can be used by the click eater.
-                zIndexGap = c.getZIndexCount() + 1;
+                zIndexGap = parseInt(c.getZIndexCount().toString()) + 1;
             });
             if (serviceActive) {
                 this._clickEaterEl.style.zIndex = "" + (lastUsedZIndex - 1);
@@ -40066,6 +40081,81 @@ define('WinJS/Controls/Flyout',[
 ], function flyoutInit(exports, _Global, _Base, _BaseUtils, _ErrorFromName, _Events, _Log, _Resources, _WriteProfilerMark, Animations, _Signal, _LightDismissService, _Dispose, _ElementUtilities, _KeyboardBehavior, _Hoverable, _Constants, _Overlay) {
     "use strict";
 
+    // Implementation details:
+    //
+    // The WinJS Flyout is a low policy control for popup ui and can host any arbitrary HTML that an app would like to display. Flyout derives from the private WinJS
+    // _Overlay class, and relies on _Overlay to create the hide and show animations as well as fire all beforeshow, aftershow, beforehide, afterhide.  Flyout also has a
+    // child class, WinJS Menu, which is a high policy control for popup ui and has many more restrictions on the content it can host.
+    //
+    // All of the following information pertains to both Flyouts and Menus, but for simplicity only the term flyout is used. Notes on Menu specific implementation details are
+    // covered separately in the Menu class.
+    //
+    // The responsibilities of the WinJS Flyout include:
+    //
+    //  - On screen positioning:
+    //      - A showing Flyout can be positioned in one of two ways
+    //          - Relative to another element, as specified by the flyout "anchor", "placement", and "alignment" properties and the flyout.show() method
+    //          - At a location specified by a mouse event, as specified in the parameters to the flyout.showAt(MouseEvent) method.
+    //      - A shown Flyout always wants to stay within bounds of the visual viewport in the users App. In IE11, Edge, Win 8.1 apps and Win 10 apps, the Flyout uses CSS
+    //        position: -ms-device-fixed; which will cause its top, left, bottom & right CSS properties be styled in relation to the visual viewport.
+    //      - In other browsers -ms-device-fixed positioning doesn't exist and the Flyout falls back to CSS position: fixed; which will cause its top, left, bottom & right
+    //        CSS properties be styled in relation to the layout viewport.
+    //      - See http://quirksmode.org/mobile/viewports2.html for more details on the difference between layout viewport and visual viewport.
+    //      - Being able to position the Flyout relative to the visual viewport is particularly important in windows 8.1 apps and Windows 10 apps (as opposed to the web),
+    //        because the Flyout is also concerned with getting out of the way of the Windows IHM (virtual keyboard). When the IHM starts to show or hide, the Flyout reacts to
+    //        a WinRT event, if the IHM would occlude part of a Flyout, the Flyout will move itself  up and out of the way, normally pinning its bottom edge to the top edge of
+    //        the IHM.
+    //      - Computing this is quite tricky as the IHM is a system pane and not actually in the DOM. Flyout uses the private _KeyboardInfo component to help calculate the top
+    //        and bottom coordinates of the "visible document" which is essentially the top and bottom of the visual viewport minus any IHM occlusion.
+    //      - The Flyout is not optimized for scenarios involving optical zoom. How and where the Flyout is affected when an optical zoom (pinch zoom) occurs will vary based on
+    //        the type of positioning being used for the environment.
+    //
+    //  - Rendering
+    //      - By default the flyout has a minimum height and minmium width defined in CSS, but no maximums, instead preferring to allow its element to  grow to the size of its
+    //        content.
+    //      - If a showing Flyout would be taller than the height of the "visible document" the flyout's show logic will temporarily constrain the max-height of the flyout
+    //        element to fit tightly within the upper and lower bounds of the "visible document", for as long as the flyout remains shown. While in this state the Flyout will
+    //        acquire a vertical scrollbar.
+    //
+    //  - Cascading Behavior:
+    //      - Starting in WinJS 4, flyouts, can be cascaded. Previous versions of WinJS did not allow more than one instance of a flyout to be shown at the same time.
+    //        Attempting to do so would first cause any other shown flyout to hide.
+    //      - Now any flyout can be shown as part of a cascade of other flyouts, allowing any other ancestor flyouts in the same cascade can remain open.
+    //      - The Flyout class relies on a private singleton _CascadeManager component to manage all flyouts in the current cascade. Here are some important implementation
+    //        details for _CascadeManager:
+    //          - The cascade is represented as a stack data structure and should only ever contain flyouts that are shown.
+    //          - If only one flyout is shown, it is considered to be in a cascade of length 1.
+    //          - A flyout "A" is considered to have an ancestor in the current cascade if flyout A's "anchor" property points to any element contained by ANY of the flyouts
+    //            in the current cascade, including the flyout elements themselves.
+    //          - Any time a flyout "A" transitions from hidden to shown, it is always added to the top of the stack.
+    //              - Only one cascade of flyouts can be shown at a time. If flyout "A" is about to be shown, and has no ancestors in the current cascade, all flyouts in the
+    //                current cascade must first be hidden and popped from the stack, then flyout "A" may be shown and pushed into the stack as the head flyout in a new cascade.
+    //              - If flyout "A" had an ancestor flyout in the cascade, flyout "A" will be put into the stack directly above its ancestor.
+    //              - If in the above scenario, the ancestor flyout already had other descendant flyouts on top of it in the stack, before flyout "A" can finish showing, all of
+    //                those flyouts are first popped off the stack and hidden,  then flyout "A" is pushed into the stack directly above its ancestor.
+    //          - Any time a flyout "A" is hidden, it is removed from the stack and no longer in the cascade. If that flyout also had any descendant flyouts in the cascade,
+    //            they are all hidden and removed from the stack as well. Any of flyout A's ancestor flyouts that were already in the cascade will remain there.
+    //
+    //  - Light Dismiss
+    //      - Cascades of flyouts are light dismissible, but an individual flyout is not.
+    //          - The WinJS Flyout implements a private LightDismissableLayer component to track focus and interpret light dismiss cues for all flyouts in the cascade.
+    //            The LightDismissableLayer is stored as a property on the _CascadeManager
+    //          - Normally when a lightdismissable control loses focus, it would trigger light dismiss, but that is not always the desired scenario for flyouts in the cascade.
+    //              - When focus moves from any Flyout in the cascade, to an element outside of the cascade, all flyouts in the cascade should light dismiss.
+    //              - When focus moves from an ancestor flyout "A" in the cascade, to descendant flyout "B" also in the cascade, no flyouts should light dismiss. A common
+    //                scenario for this is when flyout B first shows itself, since flyouts always take focus immediately after showing.
+    //              - When flyout "A" receives focus, all of A's descendant flyouts in the cascade should light dismiss. A common scenario for this is when a user clicks on an
+    //                ancestor flyout in the cascade, all descendant flyouts will close. WinJS Menu implements one exception to this rule where sometimes the immediate
+    //                descendant of the ancestor flyout would be allowed to remain open.
+    //          - The LightDismissibleLayer helps WinJS _LightDismissService dynamically manage the z-indices of all flyouts in the cascade. Flyouts as light dismissable
+    //            overlays are subject to the same stacking context pitfalls as any other light dismissible overlay:
+    //            https://github.com/winjs/winjs/wiki/Dismissables-and-Stacking-Contexts and therefore every flyout should always be defined as a direct child of the
+    //            <body> element.
+    //      - Debugging Tip: Light dismiss can make debugging shown flyouts tricky. A good idea is to temporarily suspend the light dismiss cue that triggers when clicking
+    //        outside of the current window. This can be achieved by executing the following code in the JavaScript console window:
+    //        "WinJS.UI._LightDismissService._setDebug(true)"
+
+
     _Base.Namespace._moduleDefine(exports, "WinJS.UI", {
         /// <field>
         /// <summary locid="WinJS.UI.Flyout">
@@ -40486,7 +40576,7 @@ define('WinJS/Controls/Flyout',[
                         // Horizontal auto or autohorizontal placement will be positioned to the left of the anchor if room, otherwise to the right.
                         //   - this is because right handed users would be more likely to obscure a flyout on the right of the anchor.
                         // All three auto placements will add a vertical scrollbar if necessary.
-                        // 
+                        //
 
                         var anchorBorderBox;
 
@@ -40523,9 +40613,9 @@ define('WinJS/Controls/Flyout',[
 
                         // If the anchor is centered vertically, would the flyout fit above it?
                         function fitsVerticallyWithCenteredAnchor(anchorBorderBox, flyoutMeasurements) {
-                            // Returns true if the flyout would always fit at least top 
-                            // or bottom of its anchor, regardless of the position of the anchor, 
-                            // as long as the anchor never changed its height, nor did the height of 
+                            // Returns true if the flyout would always fit at least top
+                            // or bottom of its anchor, regardless of the position of the anchor,
+                            // as long as the anchor never changed its height, nor did the height of
                             // the visualViewport change.
                             return ((_Overlay._Overlay._keyboardInfo._visibleDocHeight - anchorBorderBox.height) / 2) >= flyoutMeasurements.totalHeight;
                         }
@@ -40682,7 +40772,7 @@ define('WinJS/Controls/Flyout',[
                                 // When there is enough room to align a subMenu to either the top or the bottom of its
                                 // anchor element, the subMenu prefers to be top aligned.
                                 // FALLBACK:
-                                // When there is enough room to bottom align a subMenu but not enough room to top align it, 
+                                // When there is enough room to bottom align a subMenu but not enough room to top align it,
                                 // then the subMenu will align to the bottom of its anchor element.
                                 // LASTRESORT:
                                 // When there is not enough room to top align or bottom align the subMenu to its anchor,
@@ -40691,10 +40781,10 @@ define('WinJS/Controls/Flyout',[
                                     centerVertically(anchorBorderBox, flyoutMeasurements);
                                 }
 
-                                // Cascading Menus should overlap their ancestor menu horizontally by 4 pixels and we have a 
-                                // unit test to verify that behavior. Because we don't have access to the ancestor flyout we 
-                                // need to specify the overlap in terms of our anchor element. There is a 1px border around 
-                                // the menu that contains our anchor we need to overlap our anchor by 3px to ensure that we 
+                                // Cascading Menus should overlap their ancestor menu horizontally by 4 pixels and we have a
+                                // unit test to verify that behavior. Because we don't have access to the ancestor flyout we
+                                // need to specify the overlap in terms of our anchor element. There is a 1px border around
+                                // the menu that contains our anchor we need to overlap our anchor by 3px to ensure that we
                                 // overlap the containing Menu by 4px.
                                 var horizontalOverlap = 3;
 
@@ -41035,7 +41125,7 @@ define('WinJS/Controls/Flyout',[
                 /// Shows the Flyout, if hidden, at the specified (x,y) coordinates.
                 /// </summary>
                 /// <param name="coordinates" type="Object" locid="WinJS.UI.Flyout.showAt_p:coordinates">
-                /// An Object specifying the (X,Y) position to render the top left corner of the Flyout. commands to show. 
+                /// An Object specifying the (X,Y) position to render the top left corner of the Flyout. commands to show.
                 /// The coordinates object may be a MouseEventObj, or an Object in the shape of {x:number, y:number}.
                 /// </param>
                 /// </signature>
@@ -41080,13 +41170,13 @@ define('WinJS/Controls/Flyout',[
                         return;
                     }
 
-                    // If we're animating (eg baseShow is going to fail), or the cascadeManager is in the middle of 
+                    // If we're animating (eg baseShow is going to fail), or the cascadeManager is in the middle of
                     // updating the cascade, then don't mess up our current state.
-                    // Add this flyout to the correct position in the cascadingStack, first collapsing flyouts 
+                    // Add this flyout to the correct position in the cascadingStack, first collapsing flyouts
                     // in the current stack that are not anchored ancestors to this flyout.
                     Flyout._cascadeManager.appendFlyout(this);
 
-                    // If we're animating (eg baseShow is going to fail), or the cascadeManager is in the 
+                    // If we're animating (eg baseShow is going to fail), or the cascadeManager is in the
                     // middle of updating the cascade, then we have to try again later.
                     if (this._element.winAnimating) {
                         // Queue us up to wait for the current animation to finish.
@@ -41338,15 +41428,17 @@ define('WinJS/Controls/Flyout',[
                         return;
                     }
 
-                    // May need to adjust top by viewport offset
-                    if (this._currentPosition.top < 0) {
-                        // Need to attach to bottom
-                        this._element.style.bottom = _Overlay._Overlay._keyboardInfo._visibleDocBottomOffset + "px";
-                        this._element.style.top = "auto";
-                    } else {
-                        // Normal, attach to top
-                        this._element.style.top = this._currentPosition.top + "px";
-                        this._element.style.bottom = "auto";
+                    if (typeof this._currentPosition !== 'undefined') {
+                        // May need to adjust top by viewport offset
+                        if (this._currentPosition.top < 0) {
+                            // Need to attach to bottom
+                            this._element.style.bottom = _Overlay._Overlay._keyboardInfo._visibleDocBottomOffset + "px";
+                            this._element.style.top = "auto";
+                        } else {
+                            // Normal, attach to top
+                            this._element.style.top = this._currentPosition.top + "px";
+                            this._element.style.bottom = "auto";
+                        }
                     }
                 },
 
@@ -41357,7 +41449,7 @@ define('WinJS/Controls/Flyout',[
                     } else {
                         this._element.style.opacity = 1;
                         this._element.style.visibility = "visible";
-                        return Animations.showPopup(this._element, this._currentPosition.animOffset);
+                        return Animations.showPopup(this._element, (typeof this._currentPosition !== 'undefined') ? this._currentPosition.animOffset : 0);
                     }
                 },
 
@@ -41366,7 +41458,7 @@ define('WinJS/Controls/Flyout',[
                         return this._baseAnimateOut();
                     } else {
                         this._element.style.opacity = 0;
-                        return Animations.hidePopup(this._element, this._currentPosition.animOffset);
+                        return Animations.hidePopup(this._element, (typeof this._currentPosition !== 'undefined') ? this._currentPosition.animOffset : 0);
                     }
                 },
 
@@ -41737,6 +41829,8 @@ define('WinJS/Controls/AppBar/_Icon',[
                     "fontincrease",
                     "fontsize",
                     "cellphone",
+                    "print",
+                    "share",
                     "reshare",
                     "tag",
                     "repeatone",
@@ -42027,9 +42121,6 @@ define('WinJS/Controls/AppBar/_Command',[
 
                         // Update aria-label
                         this._element.setAttribute("aria-label", this.label);
-
-                        // Check if we need to suppress the tooltip
-                        this._testIdenticalTooltip();
                     }
                 },
 
@@ -42172,9 +42263,6 @@ define('WinJS/Controls/AppBar/_Command',[
                         if (this._tooltipControl) {
                             this._tooltipControl.innerHTML = this._tooltip;
                         }
-
-                        // Check if we need to suppress the tooltip
-                        this._testIdenticalTooltip();
                     }
                 },
 
@@ -42337,11 +42425,6 @@ define('WinJS/Controls/AppBar/_Command',[
                     }
                 },
 
-                // Private
-                _testIdenticalTooltip: function AppBarCommand_testIdenticalToolTip() {
-                    this._hideIfFullSize = (this._label === this._tooltip);
-                },
-
                 _createContent: function AppBarCommand_createContent() {
                     // Make sure there's an element
                     if (!this._element) {
@@ -42416,12 +42499,6 @@ define('WinJS/Controls/AppBar/_Command',[
                     // Attach a tooltip - Note: we're going to stomp on it's setControl so we don't have to make another DOM element to hang it off of.
                     // This private _tooltipControl attribute is used by other pieces, changing the name could break them.
                     this._tooltipControl = new Tooltip.Tooltip(this._element);
-                    var that = this;
-                    this._tooltipControl.addEventListener("beforeopen", function () {
-                        if (that._hideIfFullSize && !_Overlay._Overlay._getParentControlUsingClassName(that._element.parentElement, _Constants.reducedClass)) {
-                            that._tooltipControl.close();
-                        }
-                    }, false);
                 },
 
                 _setSection: function AppBarCommand_setSection(section) {
@@ -42568,8 +42645,9 @@ define('WinJS/Controls/Menu/_Command',[
     '../../Utilities/_Control',
     '../../Utilities/_ElementUtilities',
     '../_LegacyAppBar/_Constants',
-    '../Flyout/_Overlay'
-], function menuCommandInit(exports, _Global, _Base, _ErrorFromName, _Resources, Promise, _Control, _ElementUtilities, _Constants, _Overlay) {
+    '../Flyout/_Overlay',
+    '../Tooltip'
+], function menuCommandInit(exports, _Global, _Base, _ErrorFromName, _Resources, Promise, _Control, _ElementUtilities, _Constants, _Overlay, Tooltip) {
     "use strict";
 
     _Base.Namespace._moduleDefine(exports, "WinJS.UI", {
@@ -42814,6 +42892,21 @@ define('WinJS/Controls/Menu/_Command',[
                     }
                 },
 
+                /// <field type="String" locid="WinJS.UI.AppBarCommand.tooltip" helpKeyword="WinJS.UI.AppBarCommand.tooltip">Gets or sets the tooltip text of the AppBarCommand.</field>
+                tooltip: {
+                    get: function () {
+                        return this._tooltip;
+                    },
+                    set: function (value) {
+                        this._tooltip = value;
+
+                        // Update already-constructed tooltips. Separators and content commands won't have these:
+                        if (this._tooltipControl) {
+                            this._tooltipControl.innerHTML = this._tooltip;
+                        }
+                    }
+                },
+
                 /// <field type="Boolean" locid="WinJS.UI.MenuCommand.selected" helpKeyword="WinJS.UI.MenuCommand.selected">
                 /// Gets or sets the selected state of a toggle button. This property is true if the toggle button is selected; otherwise, it's false.
                 /// <compatibleWith platform="Windows" minVersion="8.0"/>
@@ -42914,6 +43007,10 @@ define('WinJS/Controls/Menu/_Command',[
                         return;
                     }
                     this._disposed = true;
+                    
+                    if (this._tooltipControl) {
+                        this._tooltipControl.dispose();
+                    }
                 },
 
                 addEventListener: function (type, listener, useCapture) {
@@ -42988,6 +43085,9 @@ define('WinJS/Controls/Menu/_Command',[
                     this._labelSpan = this._toggleSpan.nextElementSibling;
                     this._flyoutSpan = this._labelSpan.nextElementSibling;
 
+                    // Attach a tooltip - Note: we're going to stomp on it's setControl so we don't have to make another DOM element to hang it off of.
+                    // This private _tooltipControl attribute is used by other pieces, changing the name could break them.
+                    this._tooltipControl = new Tooltip.Tooltip(this._element);
                 },
                 _sendEvent: function MenuCommand_sendEvent(eventName, detail) {
                     if (!this._disposed) {
@@ -44769,6 +44869,7 @@ define('WinJS/Controls/CommandingSurface/_CommandingSurface',["require", "export
                 type: (originalCommand.type === _Constants.typeContent ? _Constants.typeFlyout : originalCommand.type) || _Constants.typeButton,
                 disabled: originalCommand.disabled,
                 flyout: originalCommand.flyout,
+                tooltip: originalCommand.tooltip,
                 beforeInvoke: function () {
                     // Save the command that was selected
                     _this._chosenCommand = (menuCommand["_originalICommand"]);
@@ -44875,6 +44976,70 @@ define('require-style!less/styles-toolbar',[],function(){});
 define('WinJS/Controls/ToolBar/_ToolBar',["require", "exports", "../../Core/_Base", "../ToolBar/_Constants", "../CommandingSurface", "../../Utilities/_Control", "../../Utilities/_Dispose", "../../Utilities/_ElementUtilities", "../../Core/_ErrorFromName", '../../Core/_Events', "../../Core/_Global", '../../_LightDismissService', "../../Core/_Resources", '../../Utilities/_OpenCloseMachine', "../../Core/_WriteProfilerMark"], function (require, exports, _Base, _Constants, _CommandingSurface,  [...]
     require(["require-style!less/styles-toolbar"]);
     "use strict";
+    // The WinJS ToolBar is a specialized UI wrapper for the private _CommandingSurface UI component. The _CommandingSurface is responsible for rendering 
+    // opened and closed states, knowing how to create the open and close animations, laying out commands, creating command hide/show animations and 
+    // keyboard navigation across commands. The WinJS ToolBar is very similar to the WinJS AppBar, however the ToolBar is meant to be positioned in line 
+    // with your app content whereas the AppBar is meant to overlay your app content.
+    //
+    // The responsibilities of the ToolBar include:
+    //
+    //    - Seamlessly hosting the _CommandingSurface
+    //        - From an end user perspective, there should be no visual distinction between where the ToolBar ends and the _CommandingSurface begins.
+    //            - ToolBar wants to rely on the _CommandingSurface to do as much of the rendering as possible. The ToolBar relies on the _CommandingSurface to render its opened 
+    //              and closed states-- which defines the overall height of the ToolBar and CommandingSurface elements. The ToolBar has no policy or CSS styles regarding its own 
+    //              height and ToolBar takes advantage of the default behavior of its DIV element which is to always grow or shrink to match the height of its content.
+    //        - From an end developer perspective, the _CommandingSurface should be abstracted as an implementation detail of the ToolBar as much as possible.
+    //            - Developers should never have to interact with the CommandingSurface directly.The ToolBar exposes the majority of _CommandingSurface functionality through its 
+    //              own APIs
+    //            - There are some  HTML elements inside of the _CommandingSurface's DOM that a developer might like to style. After the _CommandingSurface has been instantiated 
+    //              and added to the ToolBar DOM, the ToolBar will inject its own "toolbar" specific class-names onto these elements to make them more discoverable to developers.
+    //            - Example of developer styling guidelines https://msdn.microsoft.com/en-us/library/windows/apps/jj839733.asp
+    //
+    //    - Open direction:
+    //        - The ToolBar and its _CommandingSurface component can open upwards or downwards.Because there is no policy on where the ToolBar can be placed in an App, the ToolBar 
+    //          always wants to avoid opening in a direction that would cause any of its content to clip outside of the screen.
+    //        - When the ToolBar is opening, it will always choose to expand in the direction(up or down) that currently has the most available space between the edge of the 
+    //          ToolBar element and the corresponding edge of the visual viewport.
+    //        - This means that the a ToolBar near the bottom of the page will open upwards, but if the page is scrolled down such that the ToolBar is now near the top, the next
+    //          time the ToolBar is opened it will open downwards.
+    //
+    //    - Light dismiss
+    //        - The ToolBar is a light dismissible when opened. This means that the ToolBar is closed thru a variety of cues such as tapping anywhere outside of it, 
+    //          pressing the escape key, and resizing the window.ToolBar relies on the _LightDismissService component for most of this functionality.
+    //          The only pieces the ToolBar is responsible for are:
+    //            - Describing what happens when a light dismiss is triggered on the ToolBar .
+    //            - Describing how the ToolBar should take / restore focus when it becomes the topmost light dismissible in the light dismiss stack
+    //        - Debugging Tip: Light dismiss can make debugging an opened ToolBar tricky.A good idea is to temporarily suspend the light dismiss cue that triggers when clicking
+    //          outside of the current window.This can be achieved by executing the following code in the JavaScript console window: "WinJS.UI._LightDismissService._setDebug(true)"
+    //
+    //    - Inline element when closed, overlay when opened:
+    //        - The design of the toolbar called for it to be an control that developers can place inline with their other app content.When the ToolBar is closed it exists as a an
+    //          element in your app, next to other app content and take up space in the flow of the document.
+    //        - However, when the ToolBar opens, its vertical height will increase.Normally the change in height of an inline element will cause all of the other elements below the
+    //          expanding element to move out of the way.Rather than push the rest of the app content down when opening, the design of the ToolBar called for it to overlay that content other content, while still taking up the same vertical space in the document as it did when closed.
+    //        - The implementation of this feature is very complicated:
+    //            - The only way one element can overlay another is to remove it from the flow of the document and give it a new CSS positioning like "absolute" or "fixed".
+    //            - However, simply removing the ToolBar element from the document to make it an overlay, would leave behind a gap in the document that all the neighboring elements 
+    //              would try to fill by shifting over, leading to a jarring reflow of many elements whenever the ToolBar was opened.This was also undesirable
+    //            - The final solution is as follows
+    //                - Create a transparent placeholder element that is the exact same height and width as the closed ToolBar element.
+    //                - Removing the ToolBar element from its place in the document while simultaneously inserting the placeholder element into the same spot the ToolBar element was 
+    //                  just removed from.
+    //                - Inserting the ToolBar element as a direct child of the body and giving it css position: fixed; 
+    //                  We insert it directly into the body element because while opened, ToolBar is a Light dismissible overlay and is subject to the same stacking context pitfalls 
+    //                  as any other light dismissible. https://github.com/winjs/winjs/wiki/Dismissables-and-Stacking-Contexts
+    //                - Reposition the ToolBar element to be exactly overlaid on top of the placeholder element.
+    //                - Render the ToolBar as opened, via the _CommandingSurface API, increasing the overall height of the ToolBar.
+    //            - Closing the ToolBar is basically the same steps but in reverse.
+    //        - One limitation to this implementation is that developers may not position the ToolBar element themselves directly via the CSS "position" or "float" properties.
+    //            - This is because The ToolBar expects its element to be in the flow of the document when closed, and the placeholder element would not receive these same styles
+    //              when inserted to replace the ToolBar element.
+    //            - An easy workaround for developers is to wrap the ToolBar into another DIV element that they may style and position however they'd like.
+    //
+    //        - Responding to the IHM:
+    //            - If the ToolBar is opened when the IHM is shown, it will close itself.This is to avoid scenarios where the IHM totally occludes the opened ToolBar. If the ToolBar 
+    //              did not close itself, then the next mouse or touch input within the App wouldn't appear to do anything since it would just go to closing the light dismissible 
+    //              ToolBar anyway.
     var strings = {
         get ariaLabel() {
             return _Resources._getWinJSString("ui/toolbarAriaLabel").value;
@@ -47429,6 +47594,31 @@ define('WinJS/Controls/Menu',[
 ], function menuInit(exports, _Global, _Base, _BaseUtils, _ErrorFromName, _Resources, _WriteProfilerMark, Promise, _ElementUtilities, _Hoverable, _KeyboardBehavior, _Constants, Flyout, _Overlay, _Command) {
     "use strict";
     
+    // Implementation details:
+    //
+    // WinJS Menu is a child class of WinJS Flyout. Unlike flyouts, menus have a lot of policy on the content they can contain. flyouts can host any arbitrary HTML content,
+    // but menus can only host WinJS MenuCommand objects. Menu relies on its flyout base class for on screen positioning, light dismiss,  and cascading behavior.
+    //
+    // The responsibilities of the WinJS Menu include:
+    //  - Rendering and Laying out commands:
+    //      - MenuCommands are displayed in DOM order. 
+    //      - Menu will add and remove CSS classes on itself depending on whether or it contains any visible MenuCommands whose type property is set to either "toggle" or 
+    //        "flyout".
+    //      - The presence or absence of these command types in a Menu will affect the total width of all commands in the Menu as well as the horizontal alignment of their 
+    //        labels.
+    //      - Menu relies on logic defined in its _Overlay ancestor class to animate the hiding and showing of commands.
+    //	- Menu spacing for last input type: 
+    //      - The vertical padding within MenuCommands in a Menu will vary based on the last input type.
+    //      - When a menu is shown, it will check the last known input type, which is stored in the "inputType" property on the static Flyout._cascadeManager object.
+    //          - If the inputType was "touch" the vertical padding in all commands in the menu will be increased to enable a more touch friendly UI.
+    //          - If the input Type was "mouse" or "keyboard" the vertical padding in all commands in the menu will be decreased for space efficiency
+    //	- Arrow key navigation between commands.
+    //      - Menu listens to keydown events in order to redirect focus to the next/previous command whenever the Up and down arrows keys are pressed.
+    //	- Mouse over event. 
+    //      - Menu all detects mouseover events and if a mouseover occurs over one of its commands, the menu moves focus to that command.
+    //      - If a command has type === "flyout", and that command is hovered over for few hundred milliseconds, the Menu will invoke the "flyout" typed command, causing its
+    //        sub flyout to show in the cascade.
+
     _Base.Namespace._moduleDefine(exports, "WinJS.UI", {
         /// <field>
         /// <summary locid="WinJS.UI.Menu">Represents a menu flyout for displaying commands.</summary>
@@ -48116,6 +48306,60 @@ define('require-style!less/styles-autosuggestbox',[],function(){});
 
 define('require-style!less/colors-autosuggestbox',[],function(){});
 // Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information.
+
+// High Level
+//	- Displays a suggestions list below the input box
+//		- Simple suggestions
+//		- Suggestion results with icons
+//		- Separators
+//	- Maintains a history of previous search queries
+
+//Emphasis on Light-Weight
+// The ASB is a very policy-light control that just displays a list of suggestions
+// below the input box. It does NOT filter the suggestions based on the current input,
+// or sorts the suggestions in any way. It is entirely up to the app developer what and
+// what not to display in the suggestions list, given the current input query.
+
+// Anatomy
+// ASB
+//	- Input box
+//	- Suggestion List wrapper div
+//		? Repeater
+
+// Fake focus and keyboard navigation
+// When the selection list with more than one item is displayed, the user can arrow up
+// and down the list of suggestions which visually mimics focus movement, however, it
+// is not. The focus is always maintained on the input box itself and the control
+// programmatically maintains and styles the "current selected suggestion" indicating
+// what is currently selected.
+
+//IME support
+// The ASB has special IME support in IE/Edge, whenever the msInputContext function is
+// available. The ASB will reposition the suggestion list to account for the space the
+// IME takes up.
+
+//SearchBox
+//History
+// A bit of history first. The SearchBox control predates the ASB control, yet the
+// SearchBox derives from the ASB implementation. The reason is that the SearchBox
+// originally solved a very specific scenario, which is Windows 8 Search contract
+// integration; both, the contract and the control have since been deprecated. Going
+// forward, a new Search-like control was needed, which is the AutoSuggestBox and its
+// specifications are identical to the SearchBox, minus the Search contract integration.
+// So the creation of the ASB was mostly a deletion of code from the SearchBox. Finally,
+// for compatibility's sake, the SearchBox control and all of its original API needed to
+// still exist which is why the SearchBox control simply derives from the ASB and adding
+// all the deleted stuff back on top.
+
+//Features
+//	- FocusOnKeyboardInput (Type-To-Search)
+//    This feature assumes that the SearchBox is a singleton (again, legacy reasons) and
+//    kidnaps every typed key. It first moves focus into the SearchBox, so the typed key
+//    appears in the SearchBox.
+//	- Buddy Icon (The magnifier button next to the input)
+//	  The SearchBox has a magnifier button next to the input that, when clicked, is
+//    equivalent to clicking on a suggestion or hitting the enter key.
+
 define('WinJS/Controls/AutoSuggestBox',[
     "exports",
     "../Core/_Global",
@@ -55059,6 +55303,91 @@ define('require-style!less/styles-appbar',[],function(){});
 define('WinJS/Controls/AppBar/_AppBar',["require", "exports", "../../Core/_Base", "../AppBar/_Constants", "../CommandingSurface", "../../Utilities/_Control", "../../Utilities/_Dispose", "../../Utilities/_ElementUtilities", "../../Core/_ErrorFromName", '../../Core/_Events', "../../Core/_Global", '../../Utilities/_KeyboardInfo', '../../_LightDismissService', '../../Promise', "../../Core/_Resources", '../../Utilities/_OpenCloseMachine', "../../Core/_WriteProfilerMark"], function (require, e [...]
     require(["require-style!less/styles-appbar"]);
     "use strict";
+    // Implementation Details:
+    //
+    // The WinJS AppBar is a specialized UI wrapper for the private _CommandingSurface UI component. // The AppBar relies on the _CommandingSurface for rendering 
+    // opened and closed states, knowing how to create the open and close animations, laying out commands, creating command hide/show animations and keyboard 
+    // navigation across commands. See the _CommandingSurface implementation details for more information on how that component operates.
+    //
+    // The responsibilities of the AppBar include:
+    //
+    //  - Hosting the _CommandingSurface
+    //      - From an end user perspective, there should be no visual distinction between where the AppBar ends and the _CommandingSurface begins.
+    //          - AppBar wants to rely on the _CommandingSurface to do as much of the rendering as possible.The AppBar relies on the _CommandingSurface to render its opened and 
+    //            closed states -- which defines the overall height of the AppBar and CommandingSurface elements. The AppBar has no policy or CSS styles regarding its own height 
+    //            and instead takes advantage of the default behavior of its DIV element which is to always grow or shrink to match the height of its content.
+    //      - From an end developer perspective, the _CommandingSurface should be abstracted as an implementation detail of the AppBar as much as possible.
+    //          - Developers should never have to interact with the CommandingSurface directly.The AppBar exposes the majority of _CommandingSurface functionality through its own APIs
+    //          - There are some  HTML elements inside of the _CommandingSurface's DOM that a developer might like to style. After the _CommandingSurface has been instantiated and
+    //            added to the AppBar DOM, the AppBar will inject its own "appbar" specific class-names onto these elements to make them more discoverable to developers.
+    //          - Example of developer styling guidelines https://msdn.microsoft.com/en-us/library/windows/apps/jj839733.aspx
+    //
+    //  - Light dismiss
+    //      - The AppBar is a light dismissable when opened.This means that the AppBar is closed thru a variety of cues such as tapping anywhere outside of it, pressing the escape 
+    //        key, and resizing the window.AppBar relies on the _LightDismissService component for most of this functionality.The only pieces the AppBar is responsible for are:
+    //          - Describing what happens when a light dismiss is triggered on the AppBar.
+    //          - Describing how the AppBar should take / restore focus when it becomes the topmost light dismissible in the light dismiss stack.
+    //      - Debugging Tip: Light dismiss can make debugging an opened AppBar tricky.A good idea is to temporarily suspend the light dismiss cue that triggers when clicking 
+    //        outside of the current window.This can be achieved by executing the following code in the JavaScript console window: "WinJS.UI._LightDismissService._setDebug(true)"
+    //
+    //  - Configuring a state machine for open / close state management:
+    //      - The AppBar and CommandingSurface share a private _OpenCloseMachine component to manage their states.The contract is:
+    //          - The AppBar Constructor is responsible for the instantiation and configuration of the _OpenCloseMachine.
+    //              - AppBar constructor configures the _OpenCloseMachine to always fire events on the AppBar element directly.
+    //              - AppBar constructor specifies the callbacks that the _OpenCloseMachine should use to setup and execute the _CommandingSurface open and close animations after
+    //                the _OpenCloseMachine determines a state transition has completed.
+    //              - AppBar constructor passes the _OpenCloseMachine as an argument to the _CommandingSurface constructor and doesn�t keep any references to it.
+    //          - _CommandingSurface is responsible for both, continued communication with, and final the cleanup of, the _OpenCloseMachine
+    //              - _CommandingSurface expects a reference to an _OpenCloseMachine in its constructor options.
+    //              - Only the _CommandingSurface holds onto a reference to the _OpenCloseMachine, no other object should communicate with the _OpenCloseMachine directly after 
+    //                initialization.
+    //              - _CommandingSurface is responsible for telling _OpenCloseMachine when a state change or re - render is requested.A simple example of this is  the 
+    //                _CommandingSurface.open() method.
+    //          - _OpenCloseMachine is responsible for everything else including:
+    //              - Ensuring that the animations callbacks get run at the appropriate times.
+    //              - Enforcing the rules of the current state and ensuring the right thing happens when an _OpenCloseMachine method is called.For example:
+    //                  - open is called while the control is already open
+    //                  - close is called while the control is in the middle of opening
+    //                  - dispose is called within a beforeopen event handler
+    //              - Firing all the beforeopen, afteropen, beforeclose, and afterclose events for the AppBar.
+    //
+    //  - Rendering with Update DOM.
+    //      - AppBar follows the Update DOM pattern for rendering.For more information about this pattern, see:     https://github.com/winjs/winjs/wiki/Update-DOM-Pattern
+    //      - Note that the AppBar reads from the DOM when it needs to determine its position relative to the top or bottom edge of the visible document and when measuring its 
+    //        closed height to help the _CommandingSurface generate accurate open / close animations.When possible, it caches this information and reads from the cache instead of 
+    //        the DOM. This minimizes the performance cost.
+    //      - Outside of updateDom, AppBar writes to the DOM in a couple of places:
+    //          - The initializeDom function runs during construction and creates the initial version of the AppBar's DOM
+    //          - Immediately before and after executing _CommandingSurface open and close animations, inside of the onOpen and onClose callbacks that the AppBar gives to the 
+    //            _OpenCloseMachine.There is a rendering bug in Edge when performing the _CommandingSurface's animation if a parent element is using CSS position: -ms-device-fixed; 
+    //            AppBar has to work around this by temporarily switching to CSS position: fixed; and converting its physical location into layout viewport coordinates for the 
+    //            duration of the Animation only.
+    //
+    //  - Overlaying App Content
+    //      - AppBar is an overlay and should occlude other app content in the body when opened or closed.However, AppBar should not occlude any other WinJS light dismissible 
+    //        control when it is closed.
+    //      - AppBar has a default starting z - index that was chosen to be very high but still slightly smaller than the starting z - index for light dismissible controls.
+    //      - The WinJS _LightDismissService dynamically manages the z - indices of active light dismissible controls in the light dismiss stack.AppBar is also an active light
+    //        dismissible when opened, and it is expected that the _LightDismissService will overwrite its z - index to an appropriate higher value while the AppBar is opened.
+    //        AppBar is subject to the same stacking context pitfalls as any other light dismissible: https://github.com/winjs/winjs/wiki/Dismissables-and-Stacking-Contexts and 
+    //        should always be defined as a direct child of the < body>
+    //
+    //  - Positioning itself along the top or bottom edge of the App.
+    //      - The AppBar always wants to stick to the top or bottom edge of the visual viewport in the users App.Which edge it chooses can be configured by the AppBar.placement 
+    //        property.
+    //      - In IE11, Edge, Win 8.1 apps and Win 10 apps, the AppBar uses CSS position: -ms - device - fixed; which will cause its top, left, bottom & right CSS properties be 
+    //        styled in relation to the visual viewport.
+    //      - In other browsers - ms - device - fixed positioning doesn't exist and the AppBar falls back to CSS position: fixed; which will cause its top, left, bottom & right 
+    //        CSS properties be styled in relation to the layout viewport.
+    //      - See http://quirksmode.org/mobile/viewports2.html for more details on the difference between layout viewport and visual viewport.
+    //      - Being able to position the AppBar relative to the visual viewport is particularly important in windows 8.1 apps and Windows 10 apps(as opposed to the web), because
+    //        the AppBar is also concerned with getting out of the way of the Windows IHM(virtual keyboard).When the IHM starts to show or hide, the AppBar reacts to a WinRT event, 
+    //        if the IHM would occlude the bottom edge of the visual viewport, and the AppBar.placement is set to "bottom", the AppBar will move itself to bottom align with the top 
+    //        edge of the IHM.
+    //      - Computing this is quite tricky as the IHM is a system pane and not actually in the DOM.AppBar uses the private _KeyboardInfo component to help calculate the top and 
+    //        bottom coordinates of the "visible document" which is essentially the top and bottom of the visual viewport minus any IHM occlusion.
+    //      - The AppBar is not optimized for scenarios involving optical zoom.How and where the AppBar is affected when an optical zoom(pinch zoom) occurs will vary based on the
+    //        type of positioning being used for the environment.
     var keyboardInfo = _KeyboardInfo._KeyboardInfo;
     var strings = {
         get ariaLabel() {
@@ -55455,9 +55784,13 @@ define('WinJS/Controls/AppBar/_AppBar',["require", "exports", "../../Core/_Base"
             return keyboardInfo._visible && !keyboardInfo._isResized;
         };
         AppBar.prototype._handleHidingKeyboard = function () {
-            // Make sure AppBar has the correct offsets since it could have been displaced by the IHM.
-            this._adjustedOffsets = this._computeAdjustedOffsets();
-            this._commandingSurface.deferredDomUpate();
+            var _this = this;
+            var duration = keyboardInfo._animationShowLength + keyboardInfo._scrollTimeout;
+            Promise.timeout(duration).then(function () {
+                // Make sure AppBar has the correct offsets since it could have been displaced by the IHM.
+                _this._adjustedOffsets = _this._computeAdjustedOffsets();
+                _this._commandingSurface.deferredDomUpate();
+            });
         };
         AppBar.prototype._computeAdjustedOffsets = function () {
             // Position the AppBar element relative to the top or bottom edge of the visible
diff --git a/node_modules/winjs/js/ui.min.js b/node_modules/winjs/js/ui.min.js
index d59dfe5..592fb23 100644
--- a/node_modules/winjs/js/ui.min.js
+++ b/node_modules/winjs/js/ui.min.js
@@ -1,30 +1,30 @@
 /*! Copyright (c) Microsoft Corporation.  All Rights Reserved. Licensed under the MIT License. See License.txt in the project root for license information. */
-!function(){var a="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};!function(b){"function"==typeof define&&define.amd?define(["./base"],b):(a.msWriteProfilerMark&&msWriteProfilerMark("WinJS.4.4 4.4.0.winjs.2015.10.2 ui.js,StartTM"),b("object"==typeof exports&&"string"!=typeof exports.nodeName?require("./base"):a.WinJS),a.msWriteProfilerMark&&msWriteProfilerMark("WinJS.4.4 4.4.0.winjs.2015.10.2 ui.js,StopTM"))}(function(b){var c=b.Utilit [...]
-sc||$b()}function Wb(){tc=!1;var a=uc.next.next;uc.next=a,a.prev=uc}function Xb(){for(;uc.prev!==uc;){var a=uc.prev;a.error&&a.error(new e(r.canceled)),a.undo&&!Tc&&a.undo(),uc.prev=a.prev}uc.next=uc,sc=!1,$b()}function Yb(b){function c(){xc||(f?wc=!0:Zb())}function d(a){if(a){var d;if(g&&g.key!==a.key){var e=a.key;if(b.undo){if(d=g.slot){var h=d.key;h&&delete Oc[h],K(d,e),d.itemNew=a,d.item?(qa(d),ia()):Ba(d)}}else g.key=e}else b.editType===rd.change&&(d.itemNew=a,f||cb(d))}Wb(),b.compl [...]
-}function m(){var a=c.document.head.querySelector("#"+o.accentStyleId);a&&a.parentNode.removeChild(a)}function n(){t.length=0,m()}var o={accentStyleId:"WinJSAccentsStyle",themeDetectionTag:"winjs-themedetection-tag",hoverSelector:"html.win-hoverable",lightThemeSelector:".win-ui-light",darkThemeSelector:".win-ui-dark"},p=[".","#",":"],q=null,r=[],s=!1,t=[],u=-1;!function(a){a[a.accent=0]="accent",a[a.listSelectRest=1]="listSelectRest",a[a.listSelectHover=2]="listSelectHover",a[a.listSelec [...]
+!function(){var a="undefined"!=typeof window?window:"undefined"!=typeof self?self:"undefined"!=typeof global?global:{};!function(b){"function"==typeof define&&define.amd?define(["./base"],b):(a.msWriteProfilerMark&&msWriteProfilerMark("WinJS.4.4 4.4.2.winjs.2017.3.14 ui.js,StartTM"),b("object"==typeof exports&&"string"!=typeof exports.nodeName?require("./base"):a.WinJS),a.msWriteProfilerMark&&msWriteProfilerMark("WinJS.4.4 4.4.2.winjs.2017.3.14 ui.js,StopTM"))}(function(b){var c=b.Utilit [...]
+sc||$b()}function Wb(){tc=!1;var a=uc.next.next;uc.next=a,a.prev=uc}function Xb(){for(;uc.prev!==uc;){var a=uc.prev;a.error&&a.error(new e(r.canceled)),a.undo&&!Tc&&a.undo(),uc.prev=a.prev}uc.next=uc,sc=!1,$b()}function Yb(b){function c(){xc||(f?wc=!0:Zb())}function d(a){if(a){var d;if(g&&g.key!==a.key){var e=a.key;if(b.undo){if(d=g.slot){var h=d.key;h&&delete Oc[h],K(d,e),d.itemNew=a,d.item?(qa(d),ia()):Ba(d)}}else g.key=e}else b.editType===rd.change&&(d.itemNew=a,f||cb(d))}Wb(),b.compl [...]
+}function m(){var a=c.document.head.querySelector("#"+o.accentStyleId);a&&a.parentNode.removeChild(a)}function n(){t.length=0,m()}var o={accentStyleId:"WinJSAccentsStyle",themeDetectionTag:"winjs-themedetection-tag",hoverSelector:"html.win-hoverable",lightThemeSelector:".win-ui-light",darkThemeSelector:".win-ui-dark"},p=[".","#",":"],q=null,r=[],s=!1,t=[],u=-1;!function(a){a[a.accent=0]="accent",a[a.listSelectRest=1]="listSelectRest",a[a.listSelectHover=2]="listSelectHover",a[a.listSelec [...]
 return b._ranges=this._selected.getRanges(),b._itemsCount=this._selected._itemsCount,b._retainRanges(),b}},c.supportedForProcessing=!1,c})})}),d("WinJS/Controls/ListView/_BrowseMode",["exports","../../Core/_Global","../../Core/_Base","../../Core/_BaseUtils","../../Animations","../../Promise","../../Utilities/_ElementUtilities","../../Utilities/_UI","../ItemContainer/_Constants","../ItemContainer/_ItemEventsHandler","./_SelectionManager"],function(a,b,c,d,e,f,g,h,i,j,k){"use strict";var l [...]
 var c=this.groups[a];c.userData&&this.listBinding.releaseItem(c.userData)}this.listBinding.release()}},_dispose:function(){this.cleanUp()},synchronizeGroups:function(){var a=this;return this.pendingChanges=[],this.ignoreChanges=!0,this.groupDataSource.invalidateAll().then(function(){return c.join(a.pendingChanges)}).then(function(){return a._listView._ifZombieDispose()?c.cancel:void 0}).then(function(){a.ignoreChanges=!1},function(b){return a.ignoreChanges=!1,c.wrapError(b)})},fromKey:fu [...]
-i.lastIndex=Math.min(i.lastIndex-h+1,g);var j=Math.max(Math.min(g-1,d.insertAfterIndex),-1),k=Math.min(j+1,g);if(c){for(var l=j;l>=i.firstIndex;l--){if(!c._isIncluded(l+h)){j=l;break}l===i.firstIndex&&(j=-1)}for(var l=k;l<i.lastIndex;l++){if(!c._isIncluded(l+h)){k=l;break}l===i.lastIndex-1&&(k=g)}}var m=B(f,k),n=B(f,j);if(this._animatedDragItems)for(var l=0,o=this._animatedDragItems.length;o>l;l++){var p=this._animatedDragItems[l];p&&(p.style[P]=this._site.animationsDisabled?"":Q,p.style [...]
-{index:l,insertAfterIndex:i>=0&&l>=0?i:-1};i=v(-1,d-1,i);var m;return m=0>i?j*d-1:j*d+Math.floor(i),{index:v(-1,this.count-1,l),insertAfterIndex:v(-1,this.count-1,m)}},getAdjacent:function(a,b){var c,d=a.index,e=Math.floor(d/this._layout._itemsPerBar),f=d%this._layout._itemsPerBar;switch(b){case H.upArrow:c=0===f?"boundary":d-1;break;case H.downArrow:var g=d===this.count-1,h=this._layout._itemsPerBar>1&&f===this._layout._itemsPerBar-1;c=g||h?"boundary":d+1;break;case H.leftArrow:c=0===e& [...]
+i.lastIndex=Math.min(i.lastIndex-h+1,g);var j=Math.max(Math.min(g-1,d.insertAfterIndex),-1),k=Math.min(j+1,g);if(c){for(var l=j;l>=i.firstIndex;l--){if(!c._isIncluded(l+h)){j=l;break}l===i.firstIndex&&(j=-1)}for(var l=k;l<i.lastIndex;l++){if(!c._isIncluded(l+h)){k=l;break}l===i.lastIndex-1&&(k=g)}}var m=B(f,k),n=B(f,j);if(this._animatedDragItems)for(var l=0,o=this._animatedDragItems.length;o>l;l++){var p=this._animatedDragItems[l];p&&(p.style[P]=this._site.animationsDisabled?"":Q,p.style [...]
+{index:l,insertAfterIndex:i>=0&&l>=0?i:-1};i=v(-1,d-1,i);var m;return m=0>i?j*d-1:j*d+Math.floor(i),{index:v(-1,this.count-1,l),insertAfterIndex:v(-1,this.count-1,m)}},getAdjacent:function(a,b){var c,d=a.index,e=Math.floor(d/this._layout._itemsPerBar),f=d%this._layout._itemsPerBar;switch(b){case H.upArrow:c=0===f?"boundary":d-1;break;case H.downArrow:var g=d===this.count-1,h=this._layout._itemsPerBar>1&&f===this._layout._itemsPerBar-1;c=g||h?"boundary":d+1;break;case H.leftArrow:c=0===e& [...]
 })):f.setWork(e):b()}}m=g.schedule(e,g.Priority.belowNormal,null,"WinJS.UI.ListView._lazilyUnrealizeItems")});return n.then(b,function(b){return m.cancel(),a._listView._writeProfilerMark("_lazilyUnrealizeItems canceled,info"),a._listView._writeProfilerMark("_lazilyUnrealizeItems,StopTM"),e.wrapError(b)})}return b(),e.wrap()})},_getBoundingRectString:function(a){var b;if(a>=0&&a<this.containers.length){var c=this._listView._layout._getItemPosition(a);c&&(b="["+c.left+"; "+c.top+"; "+c.wid [...]
-},realizePage:u,rebuildTree:function(){this.canceling=!0,this.promise.cancel(),this.enter()},relayout:u,layoutNewContainers:u,waitForEntityPosition:function(){return this.view._getLayoutCompleted()},updateTree:u}),y=c.Class.define(function(a,b){this.view=a,this.nextStateType=b||A},{name:"LayingoutState",enter:function(){var a=this;this.canceling=!1,this.view._createLayoutSignal(),this.view._listView._writeProfilerMark(this.name+"_enter_layoutItems,StartTM");var b=new f;this.promise=b.pro [...]
-this._headerContainer=this._viewport.firstElementChild,r.addClass(this._headerContainer,z._listHeaderContainerClass),this._canvas=this._headerContainer.nextElementSibling,this._footerContainer=this._canvas.nextElementSibling,r.addClass(this._footerContainer,z._listFooterContainerClass),this._canvasProxy=this._canvas.firstElementChild,this._deleteWrapper=this._canvas.nextElementSibling,this._keyboardEventsHelper=this._viewport.nextElementSibling,this._tabIndex=r.getTabIndex(this._element) [...]
-return this._horizontal()?"horizontal":"vertical"},_configureForZoom:function(a,b,e){if(c.validation&&(!this._view.realizePage||"number"!=typeof this._view.begin))throw new d("WinJS.UI.ListView.NotCompatibleWithSemanticZoom",S.notCompatibleWithSemanticZoom);this._isZoomedOut=a,this._disableEntranceAnimation=!b,this._isCurrentZoomView=b,this._triggerZoom=e},_setCurrentItem:function(a,b){this._rtl()&&(a=this._viewportWidth-a),this._horizontal()?a+=this.scrollPosition:b+=this.scrollPosition [...]
-var d=this._currentPage,e=a?this._currentPage.next:this._currentPage.prev;if(e.element){this._hasFocus&&n._setActive(this._panningDiv),this._navigationAnimationRecord={},this._navigationAnimationRecord.goForward=a,this._navigationAnimationRecord.cancelAnimationCallback=b,this._navigationAnimationRecord.completionCallback=c,this._navigationAnimationRecord.oldCurrentPage=d,this._navigationAnimationRecord.newCurrentPage=e;var f=d.element,g=e.element;this._navigationAnimationRecord.newCurren [...]
-var b=this;return void this._pageManager._notificationsEndedSignal.promise.done(function(){b._pageManager._notificationsEndedSignal=null,b.currentPage=a})}if(!this._animating||this._cancelAnimation())if(a>>=0,a=0>a?0:a,this._refreshTimer)this._indexAfterRefresh=a;else{this._pageManager._cachedSize>0?a=Math.min(this._pageManager._cachedSize-1,a):0===this._pageManager._cachedSize&&(a=0);var b=this;if(this._jumpingToIndex===a)return;var c=function(){b._jumpingToIndex=null};this._jumpingToIn [...]
-this._data&&this._removeDataListeners(),this._data=a||new h.List,this._addDataListeners(),this._initializing||(this._reloadRepeater(!0),this.dispatchEvent(f,{})),this._writeProfilerMark("data.set,StopTM")}},template:{get:function(){return this._template},set:function(b){this._writeProfilerMark("template.set,StartTM"),this._template=b||a,this._render=m._syncRenderer(this._template,this.element.tagName),this._initializing||(this._reloadRepeater(!0),this.dispatchEvent(f,{})),this._writeProf [...]
-this._onDismiss();var c=k.data(this._anchorElement);c&&delete c.tooltip}},addEventListener:function(a,b,c){if(this._anchorElement){this._anchorElement.addEventListener(a,b,c);var d=this;this._eventListenerRemoveStack.push(function(){d._anchorElement.removeEventListener(a,b,c)})}},removeEventListener:function(a,b,c){this._anchorElement&&this._anchorElement.removeEventListener(a,b,c)},open:function(a){switch(this._triggerByOpen=!0,"touch"!==a&&"mouseover"!==a&&"mousedown"!==a&&"keyboard"!= [...]
-},{element:{get:function(){return this._domElement}},checked:{get:function(){return this._checked},set:function(a){a=!!a,a!==this.checked&&(this._checked=a,this._domElement.setAttribute("aria-checked",a),a?(h.addClass(this._domElement,q),h.removeClass(this._domElement,r)):(h.addClass(this._domElement,r),h.removeClass(this._domElement,q)),this.dispatchEvent("change"))}},disabled:{get:function(){return this._disabled},set:function(a){a=!!a,a!==this._disabled&&(a?(h.addClass(this._domElemen [...]
-pivotSurface:"win-pivot-surface",pivotNoSnap:"win-pivot-nosnap",pivotNavButton:"win-pivot-navbutton",pivotNavButtonPrev:"win-pivot-navbutton-prev",pivotNavButtonNext:"win-pivot-navbutton-next",pivotShowNavButtons:"win-pivot-shownavbuttons",pivotInputTypeMouse:"win-pivot-mouse",pivotInputTypeTouch:"win-pivot-touch",pivotDisableContentSwipeNavigation:"win-pivot-disablecontentswipenavigation"}}),d("WinJS/Controls/Pivot/_Item",["exports","../../Core/_Global","../../Core/_Base","../../Core/_B [...]
-}),b._headersContainerElement.appendChild(b._prevButton),b._prevButton.style.left=b._rtl?"0px":s+"px",b._nextButton=c.document.createElement("button"),b._nextButton.setAttribute("type","button"),o.addClass(b._nextButton,x._ClassNames.pivotNavButton),o.addClass(b._nextButton,x._ClassNames.pivotNavButtonNext),b._nextButton.addEventListener("click",function(){b.locked||(b._rtl?b._goPrevious():b._goNext())}),b._headersContainerElement.appendChild(b._nextButton),b._nextButton.style.right=b._r [...]
-},configureForZoom:function(a,b,c,d){this._hub._configureForZoom(a,b,c,d)},setCurrentItem:function(a,b){this._hub._setCurrentItem(a,b)},getCurrentItem:function(){return this._hub._getCurrentItem()},beginZoom:function(){this._hub._beginZoom()},positionItem:function(a,b){return this._hub._positionItem(a,b)},endZoom:function(a){this._hub._endZoom(a)}}),E={get duplicateConstruction(){return"Invalid argument: Controls may only be instantiated one time for each DOM element"},get duplicateSecti [...]
-_hideAppBars:function(a,b){var c=a.map(function(a){return a.close(),a._animationPromise});return n.join(c)},_showAppBars:function(a,b){var c=a.map(function(a){return a._show(),a._animationPromise});return n.join(c)},_keyboardInfo:r._KeyboardInfo,_scrollTimeout:r._KeyboardInfo._scrollTimeout,beforeShow:"beforeshow",beforeHide:"beforehide",afterShow:"aftershow",afterHide:"afterhide",commonstrings:{get cannotChangeCommandsWhenVisible(){return"Invalid argument: You must call hide() before ch [...]
-},set:function(a){(!this._section||c.Windows.ApplicationModel.DesignMode.designModeEnabled)&&this._setSection(a)}},tooltip:{get:function(){return this._tooltip},set:function(a){this._tooltip=a,this._tooltipControl&&(this._tooltipControl.innerHTML=this._tooltip),this._testIdenticalTooltip()}},selected:{get:function(){return"true"===this._element.getAttribute("aria-checked")},set:function(a){this._element.setAttribute("aria-checked",a)}},element:{get:function(){return this._element}},disab [...]
-},a.prototype._hasHiddenPolicyClasses=function(a){return m.hasClass(a.element,h.ClassNames.commandPrimaryOverflownPolicyClass)||m.hasClass(a.element,h.ClassNames.commandSecondaryOverflownPolicyClass)||m.hasClass(a.element,h.ClassNames.commandSeparatorHiddenPolicyClass)},a.prototype._hasAnyHiddenClasses=function(a){return m.hasClass(a.element,h.ClassNames.commandHiddenClass)||this._hasHiddenPolicyClasses(a)},a.prototype._isCommandInActionArea=function(a){return a&&a.winControl&&a.parentEl [...]
-if(!a)return[];"string"!=typeof a&&a&&a.length||(a=[a]);for(var b=[],c=0,d=a.length;d>c;c++)if(a[c])if("string"==typeof a[c]){var f=e.document.getElementById(a[c]);if(f)b.push(f);else for(var g=0,h=this._originalCommands.length;h>g;g++){var f=this._originalCommands[g].element;f.id===a[c]&&b.push(f)}}else a[c].element?b.push(a[c].element):b.push(a[c]);return b},_animationComplete:function(){this._disposed||(this._animating=!1)},_createToolBar:function(a){this._writeProfilerMark("_createTo [...]
-h.setAttribute("aria-hidden","true"),f.appendChild(h);var k=b.document.createElement("div");j.addClass(k,r.asbSuggestionResultText),a(k,d,d.text),k.title=d.text,k.setAttribute("aria-hidden","true"),f.appendChild(k);var l=b.document.createElement("br");k.appendChild(l);var n=b.document.createElement("span");j.addClass(n,r.asbSuggestionResultDetailedText),a(n,d,d.detailText),n.title=d.detailText,n.setAttribute("aria-hidden","true"),k.appendChild(n),j.addClass(f,r.asbSuggestionResult),j._ad [...]
-this._baseOverlayConstructor(this._element,c),this._addFirstDiv(),this._addFinalDiv(),this._element.addEventListener("keydown",this._handleKeyDown,!0),this._element.style.visibilty="hidden",this._element.style.display="none",n.addClass(this._element,q.settingsFlyoutClass);var d=this;this._dismissable=new l.LightDismissableElement({element:this._element,tabIndex:this._element.hasAttribute("tabIndex")?this._element.tabIndex:-1,onLightDismiss:function(){d.hide()},onTakeFocus:function(a){if( [...]
-this._leftArrowEl.style.visibility="hidden",this._leftArrowFadeOut=o.wrap(),this._rightArrowEl=b.document.createElement("div"),r.addClass(this._rightArrowEl,E._ClassName.navrightarrow),r.addClass(this._rightArrowEl,E._ClassName.navarrow),this._element.appendChild(this._rightArrowEl),this._rightArrowEl.addEventListener("click",this._goRight.bind(this)),this._rightArrowEl.style.opacity=0,this._rightArrowEl.style.visibility="hidden",this._rightArrowFadeOut=o.wrap(),this._keyboardBehavior=ne [...]
-this.secondaryCommandDisabled=!1,n.setOptions(this,b)},{element:{get:function(){return this._dom.root}},title:{get:function(){return this._title},set:function(a){a=a||"",this._title!==a&&(this._title=a,this._dom.title.textContent=a,this._dom.title.style.display=a?"":"none")}},primaryCommandText:{get:function(){return this._primaryCommandText},set:function(a){a=a||"",this._primaryCommandText!==a&&(this._primaryCommandText=a,this._dom.commands[0].textContent=a,this._updateCommandsUI())}},s [...]
-this._isOpenedMode=d.defaultOpened,this._dismissable=new m.LightDismissableElement({element:this._dom.root,tabIndex:this._dom.root.hasAttribute("tabIndex")?this._dom.root.tabIndex:-1,onLightDismiss:function(){g.close()},onTakeFocus:function(a){g._dismissable.restoreFocus()||g._commandingSurface.takeFocus(a)}}),this.closedDisplayMode=d.defaultClosedDisplayMode,this.placement=d.defaultPlacement,this.opened=this._isOpenedMode,f.setOptions(this,c),h._inDom(this.element).then(function(){retur [...]
+},realizePage:u,rebuildTree:function(){this.canceling=!0,this.promise.cancel(),this.enter()},relayout:u,layoutNewContainers:u,waitForEntityPosition:function(){return this.view._getLayoutCompleted()},updateTree:u}),y=c.Class.define(function(a,b){this.view=a,this.nextStateType=b||A},{name:"LayingoutState",enter:function(){var a=this;this.canceling=!1,this.view._createLayoutSignal(),this.view._listView._writeProfilerMark(this.name+"_enter_layoutItems,StartTM");var b=new f;this.promise=b.pro [...]
+this._viewport=this._element.firstElementChild,this._headerContainer=this._viewport.firstElementChild,r.addClass(this._headerContainer,z._listHeaderContainerClass),this._canvas=this._headerContainer.nextElementSibling,this._footerContainer=this._canvas.nextElementSibling,r.addClass(this._footerContainer,z._listFooterContainerClass),this._canvasProxy=this._canvas.firstElementChild,this._deleteWrapper=this._canvas.nextElementSibling,this._keyboardEventsHelper=this._viewport.nextElementSibl [...]
+})}},_getPanAxis:function(){return this._horizontal()?"horizontal":"vertical"},_configureForZoom:function(a,b,e){if(c.validation&&(!this._view.realizePage||"number"!=typeof this._view.begin))throw new d("WinJS.UI.ListView.NotCompatibleWithSemanticZoom",S.notCompatibleWithSemanticZoom);this._isZoomedOut=a,this._disableEntranceAnimation=!b,this._isCurrentZoomView=b,this._triggerZoom=e},_setCurrentItem:function(a,b){this._rtl()&&(a=this._viewportWidth-a),this._horizontal()?a+=this.scrollPos [...]
+if(this._writeProfilerMark("WinJS.UI.FlipView:startAnimatedNavigation,info"),this._currentPage.element){var d=this._currentPage,e=a?this._currentPage.next:this._currentPage.prev;if(e.element){this._hasFocus&&n._setActive(this._panningDiv),this._navigationAnimationRecord={},this._navigationAnimationRecord.goForward=a,this._navigationAnimationRecord.cancelAnimationCallback=b,this._navigationAnimationRecord.completionCallback=c,this._navigationAnimationRecord.oldCurrentPage=d,this._navigati [...]
+if(g("WinJS.UI.FlipView:set_currentPage,info"),this._pageManager._notificationsEndedSignal){var b=this;return void this._pageManager._notificationsEndedSignal.promise.done(function(){b._pageManager._notificationsEndedSignal=null,b.currentPage=a})}if(!this._animating||this._cancelAnimation())if(a>>=0,a=0>a?0:a,this._refreshTimer)this._indexAfterRefresh=a;else{this._pageManager._cachedSize>0?a=Math.min(this._pageManager._cachedSize-1,a):0===this._pageManager._cachedSize&&(a=0);var b=this;i [...]
+}},data:{get:function(){return this._data},set:function(a){this._writeProfilerMark("data.set,StartTM"),this._data&&this._removeDataListeners(),this._data=a||new h.List,this._addDataListeners(),this._initializing||(this._reloadRepeater(!0),this.dispatchEvent(f,{})),this._writeProfilerMark("data.set,StopTM")}},template:{get:function(){return this._template},set:function(b){this._writeProfilerMark("template.set,StartTM"),this._template=b||a,this._render=m._syncRenderer(this._template,this.e [...]
+this._disposed=!0,j.disposeSubTree(this.element);for(var a=0,b=this._eventListenerRemoveStack.length;b>a;a++)this._eventListenerRemoveStack[a]();this._onDismiss();var c=k.data(this._anchorElement);c&&delete c.tooltip}},addEventListener:function(a,b,c){if(this._anchorElement){this._anchorElement.addEventListener(a,b,c);var d=this;this._eventListenerRemoveStack.push(function(){d._anchorElement.removeEventListener(a,b,c)})}},removeEventListener:function(a,b,c){this._anchorElement&&this._anc [...]
+}),this._dragX=0,this._dragging=!1,this.checked=!1,this.disabled=!1,this.labelOn=w.on,this.labelOff=w.off,g.setOptions(this,d)},{element:{get:function(){return this._domElement}},checked:{get:function(){return this._checked},set:function(a){a=!!a,a!==this.checked&&(this._checked=a,this._domElement.setAttribute("aria-checked",a),a?(h.addClass(this._domElement,q),h.removeClass(this._domElement,r)):(h.addClass(this._domElement,r),h.removeClass(this._domElement,q)),this.dispatchEvent("change [...]
+pivotHeader:"win-pivot-header",pivotHeaderSelected:"win-pivot-header-selected",pivotViewport:"win-pivot-viewport",pivotSurface:"win-pivot-surface",pivotNoSnap:"win-pivot-nosnap",pivotNavButton:"win-pivot-navbutton",pivotNavButtonPrev:"win-pivot-navbutton-prev",pivotNavButtonNext:"win-pivot-navbutton-next",pivotShowNavButtons:"win-pivot-shownavbuttons",pivotInputTypeMouse:"win-pivot-mouse",pivotInputTypeTouch:"win-pivot-touch",pivotDisableContentSwipeNavigation:"win-pivot-disablecontentsw [...]
+b._prevButton.addEventListener("click",function(){b.locked||(b._rtl?b._goNext():b._goPrevious())}),b._headersContainerElement.appendChild(b._prevButton),b._prevButton.style.left=b._rtl?"0px":s+"px",b._nextButton=c.document.createElement("button"),b._nextButton.setAttribute("type","button"),o.addClass(b._nextButton,x._ClassNames.pivotNavButton),o.addClass(b._nextButton,x._ClassNames.pivotNavButtonNext),b._nextButton.addEventListener("click",function(){b.locked||(b._rtl?b._goPrevious():b._ [...]
+var D=b.Class.define(function(a){this._hub=a},{getPanAxis:function(){return this._hub._getPanAxis()},configureForZoom:function(a,b,c,d){this._hub._configureForZoom(a,b,c,d)},setCurrentItem:function(a,b){this._hub._setCurrentItem(a,b)},getCurrentItem:function(){return this._hub._getCurrentItem()},beginZoom:function(){this._hub._beginZoom()},positionItem:function(a,b){return this._hub._positionItem(a,b)},endZoom:function(a){this._hub._endZoom(a)}}),E={get duplicateConstruction(){return"Inv [...]
+}},_getParentControlUsingClassName:function(a,c){for(;a&&a!==b.document.body;){if(q.hasClass(a,c))return a.winControl;a=a.parentNode}return null},_globalEventListeners:new g,_hideAppBars:function(a,b){var c=a.map(function(a){return a.close(),a._animationPromise});return n.join(c)},_showAppBars:function(a,b){var c=a.map(function(a){return a._show(),a._animationPromise});return n.join(c)},_keyboardInfo:r._KeyboardInfo,_scrollTimeout:r._KeyboardInfo._scrollTimeout,beforeShow:"beforeshow",be [...]
+a},set:function(a){var b=a;b&&"string"!=typeof b&&(b.element&&(b=b.element),b&&(b.id?b=b.id:(b.id=k._uniqueID(b),b=b.id))),"string"==typeof b&&this._element.setAttribute("aria-owns",b),this._flyout=a}},section:{get:function(){return this._section},set:function(a){this._section&&!c.Windows.ApplicationModel.DesignMode.designModeEnabled||this._setSection(a)}},tooltip:{get:function(){return this._tooltip},set:function(a){this._tooltip=a,this._tooltipControl&&(this._tooltipControl.innerHTML=t [...]
+m.removeClass(a.element,h.ClassNames.commandPrimaryOverflownPolicyClass),m.removeClass(a.element,h.ClassNames.commandSecondaryOverflownPolicyClass),m.removeClass(a.element,h.ClassNames.commandSeparatorHiddenPolicyClass)},a.prototype._hasHiddenPolicyClasses=function(a){return m.hasClass(a.element,h.ClassNames.commandPrimaryOverflownPolicyClass)||m.hasClass(a.element,h.ClassNames.commandSecondaryOverflownPolicyClass)||m.hasClass(a.element,h.ClassNames.commandSeparatorHiddenPolicyClass)},a. [...]
+this._toolbar.data=new c.List(a),b&&this._positionToolBar(),this.appBarEl.style.display=e,b&&p.addClass(this.appBarEl,"win-navbar-closed"),d&&(this._positionToolBar(),this._animateToolBarEntrance())},_getCommandsElements:function(a){if(!a)return[];"string"!=typeof a&&a&&a.length||(a=[a]);for(var b=[],c=0,d=a.length;d>c;c++)if(a[c])if("string"==typeof a[c]){var f=e.document.getElementById(a[c]);if(f)b.push(f);else for(var g=0,h=this._originalCommands.length;h>g;g++){var f=this._originalCo [...]
+h.removeEventListener("load",b,!1),m.fadeIn(h)}h.addEventListener("load",b,!1),h.src=a};null!==d.image?d.image.openReadAsync().then(function(a){null!==a&&i(b.URL.createObjectURL(a,{oneTimeOnly:!0}))}):null!==d.imageUrl&&i(d.imageUrl),h.setAttribute("aria-hidden","true"),f.appendChild(h);var k=b.document.createElement("div");j.addClass(k,r.asbSuggestionResultText),a(k,d,d.text),k.title=d.text,k.setAttribute("aria-hidden","true"),f.appendChild(k);var l=b.document.createElement("br");k.appe [...]
+n._deprecated(z.settingsFlyoutIsDeprecated),this._element=b||a.document.createElement("div"),this._id=this._element.id||n._uniqueID(this._element),this._writeProfilerMark("constructor,StartTM"),this._baseOverlayConstructor(this._element,c),this._addFirstDiv(),this._addFinalDiv(),this._element.addEventListener("keydown",this._handleKeyDown,!0),this._element.style.visibilty="hidden",this._element.style.display="none",n.addClass(this._element,q.settingsFlyoutClass);var d=this;this._dismissa [...]
+this._element.appendChild(this._leftArrowEl),this._leftArrowEl.addEventListener("click",this._goLeft.bind(this)),this._leftArrowEl.style.opacity=0,this._leftArrowEl.style.visibility="hidden",this._leftArrowFadeOut=o.wrap(),this._rightArrowEl=b.document.createElement("div"),r.addClass(this._rightArrowEl,E._ClassName.navrightarrow),r.addClass(this._rightArrowEl,E._ClassName.navarrow),this._element.appendChild(this._rightArrowEl),this._rightArrowEl.addEventListener("click",this._goRight.bin [...]
+this._setState(z.Init),this.title="",this.primaryCommandText="",this.primaryCommandDisabled=!1,this.secondaryCommandText="",this.secondaryCommandDisabled=!1,n.setOptions(this,b)},{element:{get:function(){return this._dom.root}},title:{get:function(){return this._title},set:function(a){a=a||"",this._title!==a&&(this._title=a,this._dom.title.textContent=a,this._dom.title.style.display=a?"":"none")}},primaryCommandText:{get:function(){return this._primaryCommandText},set:function(a){a=a||"" [...]
+r(this._dom.commandingSurfaceEl.querySelector(".win-commandingsurface-ellipsis"),d.ClassNames.ellipsisCssClass),this._isOpenedMode=d.defaultOpened,this._dismissable=new m.LightDismissableElement({element:this._dom.root,tabIndex:this._dom.root.hasAttribute("tabIndex")?this._dom.root.tabIndex:-1,onLightDismiss:function(){g.close()},onTakeFocus:function(a){g._dismissable.restoreFocus()||g._commandingSurface.takeFocus(a)}}),this.closedDisplayMode=d.defaultClosedDisplayMode,this.placement=d.d [...]
 //# sourceMappingURL=ui.min.js.map
\ No newline at end of file
diff --git a/node_modules/winjs/js/ui.min.js.map b/node_modules/winjs/js/ui.min.js.map
index 2fe6768..c2a555c 100644
--- a/node_modules/winjs/js/ui.min.js.map
+++ b/node_modules/winjs/js/ui.min.js.map
@@ -1 +1 @@
-{"version":3,"file":"ui.min.js","sources":["ui.js"],"names":["globalObject","window","self","global","factory","define","amd","msWriteProfilerMark","exports","nodeName","require","WinJS","Utilities","_require","_define","_Global","_Base","_BaseUtils","_ErrorFromName","_Events","_Log","_Resources","_WriteProfilerMark","Promise","Scheduler","_Signal","_UI","Namespace","_moduleDefine","VirtualizedDataSource","_lazy","_baseDataSourceConstructor","listDataAdapter","options","profilerMarkStart [...]
\ No newline at end of file
+{"version":3,"sources":["ui.js"],"names":["globalObject","window","self","global","factory","define","amd","msWriteProfilerMark","exports","nodeName","require","WinJS","Utilities","_require","_define","_Global","_Base","_BaseUtils","_ErrorFromName","_Events","_Log","_Resources","_WriteProfilerMark","Promise","Scheduler","_Signal","_UI","Namespace","_moduleDefine","VirtualizedDataSource","_lazy","_baseDataSourceConstructor","listDataAdapter","options","profilerMarkStart","text","message", [...]
\ No newline at end of file
diff --git a/node_modules/winjs/package.json b/node_modules/winjs/package.json
index a03a65e..8b61ec2 100644
--- a/node_modules/winjs/package.json
+++ b/node_modules/winjs/package.json
@@ -1,47 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "winjs@^4.4.0",
-        "scope": null,
-        "escapedName": "winjs",
-        "name": "winjs",
-        "rawSpec": "^4.4.0",
-        "spec": ">=4.4.0 <5.0.0",
-        "type": "range"
-      },
-      "/Users/steveng/repo/cordova/cordova-windows"
+      "winjs@4.4.3",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "winjs@>=4.4.0 <5.0.0",
-  "_id": "winjs@4.4.0",
-  "_inCache": true,
-  "_installable": true,
+  "_from": "winjs@4.4.3",
+  "_id": "winjs@4.4.3",
+  "_inBundle": false,
+  "_integrity": "sha1-CFoQUBj/4W+Xl79pvZwf1tQoreM=",
   "_location": "/winjs",
-  "_nodeVersion": "4.1.1",
-  "_npmUser": {
-    "name": "amazingjaze",
-    "email": "AmazingJaze@gmail.com"
-  },
-  "_npmVersion": "2.14.0",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "winjs@^4.4.0",
-    "scope": null,
-    "escapedName": "winjs",
+    "type": "version",
+    "registry": true,
+    "raw": "winjs@4.4.3",
     "name": "winjs",
-    "rawSpec": "^4.4.0",
-    "spec": ">=4.4.0 <5.0.0",
-    "type": "range"
+    "escapedName": "winjs",
+    "rawSpec": "4.4.3",
+    "saveSpec": null,
+    "fetchSpec": "4.4.3"
   },
   "_requiredBy": [
     "/"
   ],
-  "_resolved": "http://registry.npmjs.org/winjs/-/winjs-4.4.0.tgz",
-  "_shasum": "ca43f1d75eefa6e04e995262bb0e76ac51160c9a",
-  "_shrinkwrap": null,
-  "_spec": "winjs@^4.4.0",
-  "_where": "/Users/steveng/repo/cordova/cordova-windows",
+  "_resolved": "https://registry.npmjs.org/winjs/-/winjs-4.4.3.tgz",
+  "_spec": "4.4.3",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Microsoft Corporation and other contributors",
     "url": "https://github.com/winjs/winjs/graphs/contributors"
@@ -49,7 +34,6 @@
   "bugs": {
     "url": "https://github.com/winjs/winjs/issues"
   },
-  "dependencies": {},
   "description": "WinJS is a set of JavaScript toolkits that allow developers to build applications using HTML/JS/CSS technology.",
   "devDependencies": {
     "bowser": "~1.0.0",
@@ -85,11 +69,6 @@
     "typescript": "1.4.1",
     "websocket": "^1.0.8"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "ca43f1d75eefa6e04e995262bb0e76ac51160c9a",
-    "tarball": "https://registry.npmjs.org/winjs/-/winjs-4.4.0.tgz"
-  },
   "homepage": "http://try.buildwinjs.com/",
   "licenses": [
     {
@@ -98,44 +77,11 @@
     }
   ],
   "main": "js/ui.js",
-  "maintainers": [
-    {
-      "name": "amazingjaze",
-      "email": "AmazingJaze@gmail.com"
-    },
-    {
-      "name": "jdalton",
-      "email": "john.david.dalton@gmail.com"
-    },
-    {
-      "name": "jseanxu",
-      "email": "jseanxu@live.com"
-    },
-    {
-      "name": "phosphoer",
-      "email": "david0evans@gmail.com"
-    },
-    {
-      "name": "rigdern",
-      "email": "adam.comella@outlook.com"
-    },
-    {
-      "name": "winjs",
-      "email": "joshrenn@microsoft.com"
-    },
-    {
-      "name": "xirzec",
-      "email": "xirzec@xirzec.com"
-    }
-  ],
   "name": "winjs",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/winjs/winjs.git"
   },
-  "scripts": {},
   "title": "Windows Library for JavaScript (WinJS)",
-  "version": "4.4.0"
+  "version": "4.4.3"
 }
diff --git a/node_modules/wrappy/package.json b/node_modules/wrappy/package.json
index a70772c..cae28ea 100644
--- a/node_modules/wrappy/package.json
+++ b/node_modules/wrappy/package.json
@@ -1,51 +1,33 @@
 {
   "_args": [
     [
-      {
-        "raw": "wrappy@1",
-        "scope": null,
-        "escapedName": "wrappy",
-        "name": "wrappy",
-        "rawSpec": "1",
-        "spec": ">=1.0.0 <2.0.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/inflight"
+      "wrappy@1.0.2",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "wrappy@>=1.0.0 <2.0.0",
+  "_from": "wrappy@1.0.2",
   "_id": "wrappy@1.0.2",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
   "_location": "/wrappy",
-  "_nodeVersion": "5.10.1",
-  "_npmOperationalInternal": {
-    "host": "packages-16-east.internal.npmjs.com",
-    "tmp": "tmp/wrappy-1.0.2.tgz_1463527848281_0.037129373755306005"
-  },
-  "_npmUser": {
-    "name": "zkat",
-    "email": "kat@sykosomatic.org"
-  },
-  "_npmVersion": "3.9.1",
   "_phantomChildren": {},
   "_requested": {
-    "raw": "wrappy@1",
-    "scope": null,
-    "escapedName": "wrappy",
+    "type": "version",
+    "registry": true,
+    "raw": "wrappy@1.0.2",
     "name": "wrappy",
-    "rawSpec": "1",
-    "spec": ">=1.0.0 <2.0.0",
-    "type": "range"
+    "escapedName": "wrappy",
+    "rawSpec": "1.0.2",
+    "saveSpec": null,
+    "fetchSpec": "1.0.2"
   },
   "_requiredBy": [
     "/inflight",
     "/once"
   ],
   "_resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-  "_shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
-  "_shrinkwrap": null,
-  "_spec": "wrappy@1",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/inflight",
+  "_spec": "1.0.2",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Isaac Z. Schlueter",
     "email": "i@izs.me",
@@ -62,30 +44,13 @@
   "directories": {
     "test": "test"
   },
-  "dist": {
-    "shasum": "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
-    "tarball": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
-  },
   "files": [
     "wrappy.js"
   ],
-  "gitHead": "71d91b6dc5bdeac37e218c2cf03f9ab55b60d214",
   "homepage": "https://github.com/npm/wrappy",
   "license": "ISC",
   "main": "wrappy.js",
-  "maintainers": [
-    {
-      "name": "isaacs",
-      "email": "i@izs.me"
-    },
-    {
-      "name": "zkat",
-      "email": "kat@sykosomatic.org"
-    }
-  ],
   "name": "wrappy",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "repository": {
     "type": "git",
     "url": "git+https://github.com/npm/wrappy.git"
diff --git a/node_modules/xmlbuilder/package.json b/node_modules/xmlbuilder/package.json
index c47cfe0..d5286c1 100644
--- a/node_modules/xmlbuilder/package.json
+++ b/node_modules/xmlbuilder/package.json
@@ -1,45 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "xmlbuilder@4.0.0",
-        "scope": null,
-        "escapedName": "xmlbuilder",
-        "name": "xmlbuilder",
-        "rawSpec": "4.0.0",
-        "spec": "4.0.0",
-        "type": "version"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/plist"
+      "xmlbuilder@4.0.0",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
   "_from": "xmlbuilder@4.0.0",
   "_id": "xmlbuilder@4.0.0",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=",
   "_location": "/xmlbuilder",
-  "_npmUser": {
-    "name": "oozcitak",
-    "email": "oozcitak@gmail.com"
-  },
-  "_npmVersion": "1.4.28",
   "_phantomChildren": {},
   "_requested": {
+    "type": "version",
+    "registry": true,
     "raw": "xmlbuilder@4.0.0",
-    "scope": null,
-    "escapedName": "xmlbuilder",
     "name": "xmlbuilder",
+    "escapedName": "xmlbuilder",
     "rawSpec": "4.0.0",
-    "spec": "4.0.0",
-    "type": "version"
+    "saveSpec": null,
+    "fetchSpec": "4.0.0"
   },
   "_requiredBy": [
     "/plist"
   ],
   "_resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz",
-  "_shasum": "98b8f651ca30aa624036f127d11cc66dc7b907a3",
-  "_shrinkwrap": null,
-  "_spec": "xmlbuilder@4.0.0",
-  "_where": "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/plist",
+  "_spec": "4.0.0",
+  "_where": "C:\\Projects\\Cordova\\cordova-windows",
   "author": {
     "name": "Ozgur Ozcitak",
     "email": "oozcitak@gmail.com"
@@ -59,15 +46,9 @@
     "istanbul": "*",
     "mocha": "*"
   },
-  "directories": {},
-  "dist": {
-    "shasum": "98b8f651ca30aa624036f127d11cc66dc7b907a3",
-    "tarball": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz"
-  },
   "engines": {
     "node": ">=0.8.0"
   },
-  "gitHead": "ec17840a6705ef666b7d04c771de11df6091fff5",
   "homepage": "http://github.com/oozcitak/xmlbuilder-js",
   "keywords": [
     "xml",
@@ -75,15 +56,7 @@
   ],
   "license": "MIT",
   "main": "./lib/index",
-  "maintainers": [
-    {
-      "name": "oozcitak",
-      "email": "oozcitak@gmail.com"
-    }
-  ],
   "name": "xmlbuilder",
-  "optionalDependencies": {},
-  "readme": "ERROR: No README data found!",
   "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 7eb81b6..2be3ad4 100644
--- a/node_modules/xmldom/package.json
+++ b/node_modules/xmldom/package.json
@@ -1,50 +1,32 @@
 {
   "_args": [
     [
-      {
-        "raw": "xmldom@0.1.x",
-        "scope": null,
-        "escapedName": "xmldom",
-        "name": "xmldom",
-        "rawSpec": "0.1.x",
-        "spec": ">=0.1.0 <0.2.0",
-        "type": "range"
-      },
-      "/Users/kotikov.vladimir/repos/cordova/cordova-windows/node_modules/plist"
+      "xmldom@0.1.27",
+      "C:\\Projects\\Cordova\\cordova-windows"
     ]
   ],
-  "_from": "xmldom@>=0.1.0 <0.2.0",
+  "_from": "xmldom@0.1.27",
   "_id": "xmldom@0.1.27",
-  "_inCache": true,
+  "_inBundle": false,
+  "_integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
   "_location": "/xmldom",
... 123 lines suppressed ...

-- 
To stop receiving notification emails like this one, please contact
janpio@apache.org.

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