diff --git a/node_modules/stream-shift/.travis.yml b/node_modules/stream-shift/.travis.yml
new file mode 100644
index 0000000..ecd4193
--- /dev/null
+++ b/node_modules/stream-shift/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+node_js:
+  - "0.10"
+  - "0.12"
+  - "4"
+  - "6"
diff --git a/node_modules/stream-shift/LICENSE b/node_modules/stream-shift/LICENSE
new file mode 100644
index 0000000..bae9da7
--- /dev/null
+++ b/node_modules/stream-shift/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Mathias Buus
+
+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/stream-shift/README.md b/node_modules/stream-shift/README.md
new file mode 100644
index 0000000..d9cc2d9
--- /dev/null
+++ b/node_modules/stream-shift/README.md
@@ -0,0 +1,25 @@
+# stream-shift
+
+Returns the next buffer/object in a stream's readable queue
+
+```
+npm install stream-shift
+```
+
+[![build status](http://img.shields.io/travis/mafintosh/stream-shift.svg?style=flat)](http://travis-ci.org/mafintosh/stream-shift)
+
+## Usage
+
+``` js
+var shift = require('stream-shift')
+
+console.log(shift(someStream)) // first item in its buffer
+```
+
+## Credit
+
+Thanks [@dignifiedquire](https://github.com/dignifiedquire) for making this work on node 6
+
+## License
+
+MIT
diff --git a/node_modules/stream-shift/index.js b/node_modules/stream-shift/index.js
new file mode 100644
index 0000000..33cc4d7
--- /dev/null
+++ b/node_modules/stream-shift/index.js
@@ -0,0 +1,20 @@
+module.exports = shift
+
+function shift (stream) {
+  var rs = stream._readableState
+  if (!rs) return null
+  return (rs.objectMode || typeof stream._duplexState === 'number') ? stream.read() : stream.read(getStateLength(rs))
+}
+
+function getStateLength (state) {
+  if (state.buffer.length) {
+    // Since node 6.3.0 state.buffer is a BufferList not an array
+    if (state.buffer.head) {
+      return state.buffer.head.data.length
+    }
+
+    return state.buffer[0].length
+  }
+
+  return state.length
+}
diff --git a/node_modules/stream-shift/package.json b/node_modules/stream-shift/package.json
new file mode 100644
index 0000000..cc05299
--- /dev/null
+++ b/node_modules/stream-shift/package.json
@@ -0,0 +1,53 @@
+{
+  "_from": "stream-shift@^1.0.0",
+  "_id": "stream-shift@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
+  "_location": "/stream-shift",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "stream-shift@^1.0.0",
+    "name": "stream-shift",
+    "escapedName": "stream-shift",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/duplexify"
+  ],
+  "_resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+  "_shasum": "d7088281559ab2778424279b0877da3c392d5a3d",
+  "_spec": "stream-shift@^1.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\duplexify",
+  "author": {
+    "name": "Mathias Buus",
+    "url": "@mafintosh"
+  },
+  "bugs": {
+    "url": "https://github.com/mafintosh/stream-shift/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Returns the next buffer/object in a stream's readable queue",
+  "devDependencies": {
+    "standard": "^7.1.2",
+    "tape": "^4.6.0",
+    "through2": "^2.0.1"
+  },
+  "homepage": "https://github.com/mafintosh/stream-shift",
+  "license": "MIT",
+  "main": "index.js",
+  "name": "stream-shift",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/mafintosh/stream-shift.git"
+  },
+  "scripts": {
+    "test": "standard && tape test.js"
+  },
+  "version": "1.0.1"
+}
diff --git a/node_modules/stream-shift/test.js b/node_modules/stream-shift/test.js
new file mode 100644
index 0000000..c0222c3
--- /dev/null
+++ b/node_modules/stream-shift/test.js
@@ -0,0 +1,48 @@
+var tape = require('tape')
+var through = require('through2')
+var stream = require('stream')
+var shift = require('./')
+
+tape('shifts next', function (t) {
+  var passthrough = through()
+
+  passthrough.write('hello')
+  passthrough.write('world')
+
+  t.same(shift(passthrough), Buffer('hello'))
+  t.same(shift(passthrough), Buffer('world'))
+  t.end()
+})
+
+tape('shifts next with core', function (t) {
+  var passthrough = stream.PassThrough()
+
+  passthrough.write('hello')
+  passthrough.write('world')
+
+  t.same(shift(passthrough), Buffer('hello'))
+  t.same(shift(passthrough), Buffer('world'))
+  t.end()
+})
+
+tape('shifts next with object mode', function (t) {
+  var passthrough = through({objectMode: true})
+
+  passthrough.write({hello: 1})
+  passthrough.write({world: 1})
+
+  t.same(shift(passthrough), {hello: 1})
+  t.same(shift(passthrough), {world: 1})
+  t.end()
+})
+
+tape('shifts next with object mode with core', function (t) {
+  var passthrough = stream.PassThrough({objectMode: true})
+
+  passthrough.write({hello: 1})
+  passthrough.write({world: 1})
+
+  t.same(shift(passthrough), {hello: 1})
+  t.same(shift(passthrough), {world: 1})
+  t.end()
+})
