diff --git a/node_modules/is-svg/index.d.ts b/node_modules/is-svg/index.d.ts
new file mode 100644
index 0000000..a90cea8
--- /dev/null
+++ b/node_modules/is-svg/index.d.ts
@@ -0,0 +1,26 @@
+/// <reference types="node"/>
+
+declare const isSvg: {
+	/**
+	Check if a string or buffer is [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics).
+
+	@param input - The data to check.
+	@returns Whether `input` is SVG or not.
+
+	@example
+	```
+	import isSvg = require('is-svg');
+
+	isSvg('<svg xmlns="http://www.w3.org/2000/svg"><path fill="#00CD9F"/></svg>');
+	//=> true
+	```
+	*/
+	(input: string | Buffer): boolean;
+
+	// TODO: Remove this for the next major release, refactor the whole definition to:
+	// declare function isSvg(input: string | Buffer): boolean;
+	// export = isSvg;
+	default: typeof isSvg;
+};
+
+export = isSvg;
diff --git a/node_modules/is-svg/index.js b/node_modules/is-svg/index.js
new file mode 100644
index 0000000..3d5cfe4
--- /dev/null
+++ b/node_modules/is-svg/index.js
@@ -0,0 +1,30 @@
+'use strict';
+const htmlCommentRegex = require('html-comment-regex');
+
+const isBinary = buffer => {
+	const isBuffer = Buffer.isBuffer(buffer);
+
+	for (let i = 0; i < 24; i++) {
+		const characterCode = isBuffer ? buffer[i] : buffer.charCodeAt(i);
+
+		if (characterCode === 65533 || characterCode <= 8) {
+			return true;
+		}
+	}
+
+	return false;
+};
+
+const cleanEntities = svg => {
+	const entityRegex = /\s*<!Entity\s+\S*\s*(?:"|')[^"]+(?:"|')\s*>/img;
+	// Remove entities
+	return svg.replace(entityRegex, '');
+};
+
+const regex = /^\s*(?:<\?xml[^>]*>\s*)?(?:<!doctype svg[^>]*\s*(?:\[?(?:\s*<![^>]*>\s*)*\]?)*[^>]*>\s*)?(?:<svg[^>]*>[^]*<\/svg>|<svg[^/>]*\/\s*>)\s*$/i;
+
+const isSvg = input => Boolean(input) && !isBinary(input) && regex.test(cleanEntities(input.toString()).replace(htmlCommentRegex, ''));
+
+module.exports = isSvg;
+// TODO: Remove this for the next major release
+module.exports.default = isSvg;
diff --git a/node_modules/is-svg/license b/node_modules/is-svg/license
new file mode 100644
index 0000000..e7af2f7
--- /dev/null
+++ b/node_modules/is-svg/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+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/is-svg/package.json b/node_modules/is-svg/package.json
new file mode 100644
index 0000000..ee71abc
--- /dev/null
+++ b/node_modules/is-svg/package.json
@@ -0,0 +1,80 @@
+{
+  "_from": "is-svg@^4.2.1",
+  "_id": "is-svg@4.2.1",
+  "_inBundle": false,
+  "_integrity": "sha512-PHx3ANecKsKNl5y5+Jvt53Y4J7MfMpbNZkv384QNiswMKAWIbvcqbPz+sYbFKJI8Xv3be01GSFniPmoaP+Ai5A==",
+  "_location": "/is-svg",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "is-svg@^4.2.1",
+    "name": "is-svg",
+    "escapedName": "is-svg",
+    "rawSpec": "^4.2.1",
+    "saveSpec": null,
+    "fetchSpec": "^4.2.1"
+  },
+  "_requiredBy": [
+    "/imagemin-svgo"
+  ],
+  "_resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.2.1.tgz",
+  "_shasum": "095b496e345fec9211c2a7d5d021003e040d6f81",
+  "_spec": "is-svg@^4.2.1",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\imagemin-svgo",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/is-svg/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "html-comment-regex": "^1.1.2"
+  },
+  "deprecated": false,
+  "description": "Check if a string or buffer is SVG",
+  "devDependencies": {
+    "@types/node": "^11.13.0",
+    "ava": "^1.4.1",
+    "tsd": "^0.7.2",
+    "xo": "^0.24.0"
+  },
+  "engines": {
+    "node": ">=6"
+  },
+  "files": [
+    "index.js",
+    "index.d.ts"
+  ],
+  "funding": "https://github.com/sponsors/sindresorhus",
+  "homepage": "https://github.com/sindresorhus/is-svg#readme",
+  "keywords": [
+    "svg",
+    "vector",
+    "graphics",
+    "image",
+    "img",
+    "pic",
+    "picture",
+    "type",
+    "detect",
+    "check",
+    "is",
+    "string",
+    "str",
+    "buffer"
+  ],
+  "license": "MIT",
+  "name": "is-svg",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/is-svg.git"
+  },
+  "scripts": {
+    "test": "xo && ava && tsd"
+  },
+  "version": "4.2.1"
+}
diff --git a/node_modules/is-svg/readme.md b/node_modules/is-svg/readme.md
new file mode 100644
index 0000000..58fb5a2
--- /dev/null
+++ b/node_modules/is-svg/readme.md
@@ -0,0 +1,38 @@
+# is-svg [![Build Status](https://travis-ci.org/sindresorhus/is-svg.svg?branch=master)](https://travis-ci.org/sindresorhus/is-svg)
+
+> Check if a string or buffer is [SVG](https://en.wikipedia.org/wiki/Scalable_Vector_Graphics)
+
+## Install
+
+```
+$ npm install is-svg
+```
+
+## Usage
+
+```js
+const isSvg = require('is-svg');
+
+isSvg('<svg xmlns="http://www.w3.org/2000/svg"><path fill="#00CD9F"/></svg>');
+//=> true
+```
+
+## Edge cases
+
+This module performs a quick-and-dirty check. It's fast, but in certain cases it will give incorrect results.
+
+- Returns `true` for an SVG-like string that isn't well-formed or valid: `<svg><div></svg>`
+
+If you want to make certain that your SVG is *valid*, try parsing it with [libxmljs](https://github.com/polotek/libxmljs).
+
+---
+
+<div align="center">
+	<b>
+		<a href="https://tidelift.com/subscription/pkg/npm-is-svg?utm_source=npm-is-svg&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
+	</b>
+	<br>
+	<sub>
+		Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
+	</sub>
+</div>
