From 86bfd93531f3fefd1af26820778e217a2f4f393b Mon Sep 17 00:00:00 2001 From: "J. King" Date: Fri, 17 Apr 2020 14:40:12 -0400 Subject: [PATCH] Initial integration of external media type parsing --- composer.json | 3 +- composer.lock | 80 +- lib/Parser/Construct.php | 44 +- lib/Parser/MimeType.php | 148 +- lib/Parser/XML/Construct.php | 45 +- tests/cases/Util/Mime/README | 20 - .../cases/Util/Mime/generated-mime-types.json | 3526 ----------------- tests/cases/Util/Mime/mime-types.json | 383 -- tests/cases/Util/MimeTypeTest.php | 42 - 9 files changed, 139 insertions(+), 4152 deletions(-) delete mode 100644 tests/cases/Util/Mime/README delete mode 100644 tests/cases/Util/Mime/generated-mime-types.json delete mode 100644 tests/cases/Util/Mime/mime-types.json delete mode 100644 tests/cases/Util/MimeTypeTest.php diff --git a/composer.json b/composer.json index 4602ff0..4661e0c 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,8 @@ "ext-dom": "*", "ext-intl": "*", "ralouphie/mimey": "^2.1", - "psr/http-message": "^1.0" + "psr/http-message": "^1.0", + "mensbeam/mimesniff": "^0.1.1" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.3" diff --git a/composer.lock b/composer.lock index 6ba8d63..cbdd27b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,54 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "a49fcefdbe1073b594c29260943b2919", + "content-hash": "3c8eb2468138219eddb42a853c7c0bc6", "packages": [ + { + "name": "mensbeam/mimesniff", + "version": "0.1.1", + "source": { + "type": "git", + "url": "https://github.com/mensbeam/mime.git", + "reference": "cce75a26cba20fe9bc275237775f90a2a311abba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mensbeam/mime/zipball/cce75a26cba20fe9bc275237775f90a2a311abba", + "reference": "cce75a26cba20fe9bc275237775f90a2a311abba", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.3", + "ext-intl": "*" + }, + "type": "library", + "autoload": { + "psr-4": { + "MensBeam\\Mime\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "J. King", + "email": "jking@jkingweb.ca", + "homepage": "https://jkingweb.ca/" + } + ], + "description": "An implementation of the WHATWG MIME Sniffing specification", + "keywords": [ + "WHATWG", + "mime", + "mimesniff" + ], + "time": "2020-04-17T16:23:45+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -100,31 +146,29 @@ "packages-dev": [ { "name": "bamarni/composer-bin-plugin", - "version": "v1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/bamarni/composer-bin-plugin.git", - "reference": "67f9d314dc7ecf7245b8637906e151ccc62b8d24" + "reference": "46cb272590cc6b7f5947655063a7fd6ea097838b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/67f9d314dc7ecf7245b8637906e151ccc62b8d24", - "reference": "67f9d314dc7ecf7245b8637906e151ccc62b8d24", + "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/46cb272590cc6b7f5947655063a7fd6ea097838b", + "reference": "46cb272590cc6b7f5947655063a7fd6ea097838b", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0" + "composer-plugin-api": "^1.0 || ^2.0", + "php": "^5.6 || ^7.0 || ^8.0" }, "require-dev": { - "composer/composer": "dev-master", + "composer/composer": "^1.0 || ^2.0", "symfony/console": "^2.5 || ^3.0 || ^4.0" }, "type": "composer-plugin", "extra": { - "class": "Bamarni\\Composer\\Bin\\Plugin", - "branch-alias": { - "dev-master": "1.1-dev" - } + "class": "Bamarni\\Composer\\Bin\\Plugin" }, "autoload": { "psr-4": { @@ -135,7 +179,16 @@ "license": [ "MIT" ], - "time": "2019-03-17T12:38:04+00:00" + "description": "No conflicts for your bin dependencies", + "keywords": [ + "composer", + "conflict", + "dependency", + "executable", + "isolation", + "tool" + ], + "time": "2020-04-17T09:33:47+00:00" } ], "aliases": [], @@ -152,5 +205,6 @@ "platform-dev": [], "platform-overrides": { "php": "7.1.33" - } + }, + "plugin-api-version": "1.1.0" } diff --git a/lib/Parser/Construct.php b/lib/Parser/Construct.php index 0d818ab..6261bda 100644 --- a/lib/Parser/Construct.php +++ b/lib/Parser/Construct.php @@ -16,19 +16,6 @@ trait Construct { return trim(preg_replace("<\s{2,}>s", " ", $text)); } - /** Takes an HTML string as input and returns a sanitized version of that string - * - * The $outputHtml parameter, when false, outputs only the plain-text content of the sanitized HTML - */ - protected function sanitizeString(string $markup, bool $outputHtml = true): string { - if (!preg_match("/<\S/", $markup)) { - // if the string does not appear to actually contain markup besides entities, we can skip most of the sanitization - return $outputHtml ? $markup : $this->trimText(html_entity_decode($markup, \ENT_QUOTES | \ENT_HTML5, "UTF-8")); - } else { - return "OOK!"; - } - } - /** Tests whether a string is a valid e-mail address * * Accepts IDN hosts and Unicode localparts @@ -64,35 +51,8 @@ trait Construct { } protected function parseMediaType(string $type, ?Url $url = null): ?string { - if (preg_match('<^\s*([0-9a-z]+(?:/[!#$%&\'\*\+\-\.^_`|~0-9a-z]+)?)(?:\s|;|,|$)>i', $type, $match)) { - /* NOTE: The pattern used here is a subset of what is - technically allowed by RFC 7231: the "type" portion - is supposed to be as general as the "subtype" portion, - but in practice only alphabetic types have ever been - registered, making a more specific pattern more - practically useful for detecting media types. - - See: - - - - Additionally, types without subtypes are accepted as - we foresee the general type still being useful to - feed processors. - */ - return strtolower($match[1]); - } - if ($url && (strlen($url->getScheme()) && $url->host !== null)) { - $file = substr($url->getPath(), (int) strrpos($url->getPath(), "/")); - $ext = strrpos($file, "."); - if ($ext !== false) { - $ext = substr($file, $ext + 1); - if (strlen($ext)) { - return ($this->mime ?? ($this->mime = new \Mimey\MimeTypes))->getMimeType($ext); - } - } - } elseif ($url && $url->getScheme() === "data") { - return $this->parseMediaType($url->getPath()) ?? "text/plain"; + if ($normalized = MimeType::parseLoose($type, $url)) { + return $normalized->essence; } return null; } diff --git a/lib/Parser/MimeType.php b/lib/Parser/MimeType.php index f61f5b1..85b6fec 100644 --- a/lib/Parser/MimeType.php +++ b/lib/Parser/MimeType.php @@ -6,121 +6,59 @@ declare(strict_types=1); namespace MensBeam\Lax\Parser; -use function PHPSTORM_META\type; +use MensBeam\Lax\Url; -/** @property-read string $essence */ -class MimeType { - protected const TYPE_PATTERN = <<<'PATTERN' - <^ - [\t\r\n ]* # optional leading whitespace - ([^/]+) # type - / # type/subtype delimiter - ([^;]+) # subtype (possibly with trailing whitespace) - (;.*)? # optional parameters, to be parsed separately - [\t\r\n ]* # optional trailing whitespace - $>sx -PATTERN; - protected const PARAM_PATTERN = <<<'PATTERN' - < - [;\t\r\n ]* # parameter delimiter and leading whitespace, all optional - ([^=;]*) # parameter name; may be empty - (?:= # parameter name/value delimiter - ( - "(?:\\"|[^"])*(?:"|$)[^;]* # quoted parameter value and optional garbage - |[^;]* # unquoted parameter value (possibly with trailing whitespace) - ) - )? - ;? # optional trailing parameter delimiter - [\t\r\n ]* # optional trailing whitespace - >sx -PATTERN; - protected const TOKEN_PATTERN = '<^[A-Za-z0-9!#$%&\'*+\-\.\^_`|~]+$>s'; - protected const BARE_VALUE_PATTERN = '<^[\t\x{20}-\x{7E}\x{80}-\x{FF}]+$>su'; - protected const QUOTED_VALUE_PATTERN = '<^"((?:\\\"|[\t !\x{23}-\x{7E}\x{80}-\x{FF}])*)(?:"|$)>su'; - protected const ESCAPE_PATTERN = '<\\\(.)>s'; +/** {@inheritDoc} */ +class MimeType extends \MensBeam\Mime\MimeType { + protected const MEDIUM_PATTERN = '<^[\t\r\n ]*(audio|video|image|text|application|document|executable)(?:$|[\t\r\n ;])>i'; + protected const ATOM_TYPE_PATTERN = '<^\s*(|text|x?html)\s*$>i'; - public $type = ""; - public $subtype = ""; - public $params = []; - private $essence; - - public function __construct(string $type = "", string $subtype = "", array $params = []) { - $this->type = $type; - $this->subtype = $subtype; - $this->params = $params; - } - - public function __get(string $name) { - if ($name === "essence") { - return $this->type."/".$this->subtype; - } - return $this->$name ?? null; - } - - public function __toString(): string { - $out = $this->__get("essence"); - if (is_array($this->params) && sizeof($this->params)) { - foreach ($this->params as $name => $value) { - $out .= ";$name=".(preg_match(self::TOKEN_PATTERN, $value) ? $value : '"'.str_replace(["\\", '"'], ["\\\\", "\\\""], $value).'"'); - } - } - return $out; - } - - public static function parse(string $mimeType): ?self { - if (preg_match(self::TYPE_PATTERN, $mimeType, $match)) { - [$mimeType, $type, $subtype, $params] = array_pad($match, 4, ""); - if (strlen($type = static::parseHttpToken($type)) && strlen($subtype = static::parseHttpToken(rtrim($subtype, "\t\r\n ")))) { - return new static(strtolower($type), strtolower($subtype), static::parseParams($params)); - } - } - return null; - } - - protected static function parseParams(string $params): array { - $out = []; - if (preg_match_all(self::PARAM_PATTERN, $params, $matches, \PREG_SET_ORDER)) { - foreach ($matches as $match) { - [$param, $name, $value] = array_pad($match, 3, ""); - $name = strtolower(static::parseHttpToken($name)); - if (!strlen($name) || isset($out[$name])) { - continue; - } elseif (strlen($value) && $value[0] === '"') { - $value = static::parseHttpQuotedValue($value); - if (is_null($value)) { - continue; - } - } else { - $value = static::parseHttpBareValue($value); - if (!strlen($value)) { - continue; + protected static $mime; + + /** Parses a MIME type, accepting types without a subtype */ + public static function parseLoose(string $type, ?Url $url = null): ?self { + if ($normalized = self::parse($type)) { + return $normalized; + } elseif (preg_match(self::MEDIUM_PATTERN, $type, $match)) { + $type = strtolower($match[1]); + $type = ['document' => "text", 'executable' => "application"][$type] ?? $type; + return new self($type); + } elseif ($url && (strlen($url->getScheme()) && $url->host !== null)) { + $file = substr($url->getPath(), (int) strrpos($url->getPath(), "/")); + $ext = strrpos($file, "."); + if ($ext !== false) { + $ext = substr($file, $ext + 1); + if (strlen($ext)) { + $type = (self::$mime ?? (self::$mime = new \Mimey\MimeTypes))->getMimeType($ext); + if (!is_null($type)) { + return self::parse($type); } } - $out[$name] = $value; } + } elseif ($url && $url->getScheme() === "data") { + $data = $url->getPath(); + $candidate = substr($data, 0, (int) strpos($data, ",")); + return self::parseLoose($candidate) ?? self::parse("text/plain"); } - return $out; - } - - protected static function parseHttpToken(string $token): string { - if (preg_match(self::TOKEN_PATTERN, $token, $match)) { - return $token; - } - return ""; + return null; } - protected static function parseHttpBareValue(string $value): string { - $value = rtrim($value, "\t\r\n "); - if (preg_match(self::BARE_VALUE_PATTERN, $value, $match)) { - return $value; + /** Parses an Atom content type, which may be either a MIME type or the strings "text", "html", or "xhtml" + * + * If the supplied type is invalid "unknown/unknown" is returned + */ + public static function parseAtom(string $type): self { + if (preg_match(self::ATOM_TYPE_PATTERN, $type, $match)) { + $type = ['' => "text/plain", 'text' => "text/plain", 'html' => "text/html", 'xhtml' => "application/xhtml+xml"][$match[1]] ?? null; + assert(!is_null($type)); } - return ""; + return self::parse($type) ?? self::parse("unknown/unknown"); } - - protected static function parseHttpQuotedValue(string $value): ?string { - if (preg_match(self::QUOTED_VALUE_PATTERN, $value, $match)) { - return preg_replace(self::ESCAPE_PATTERN, '$1', $match[1]); + + public function __get(string $name) { + if ($name === "essence") { + return $this->type.(strlen($this->subtype ?? "") ? "/".$this->subtype : ""); } - return null; + return $this->$name ?? null; } } diff --git a/lib/Parser/XML/Construct.php b/lib/Parser/XML/Construct.php index 8217f00..5658d0f 100644 --- a/lib/Parser/XML/Construct.php +++ b/lib/Parser/XML/Construct.php @@ -12,6 +12,7 @@ use MensBeam\Lax\Person\Person; use MensBeam\Lax\Person\Collection as PersonCollection; use MensBeam\Lax\Text; use MensBeam\Lax\Date; +use MensBeam\Lax\Parser\MimeType; use MensBeam\Lax\Url; abstract class Construct { @@ -275,29 +276,33 @@ abstract class Construct { // get the content type; assume "text" if not provided $type = trim($node->getAttribute("type")); $type = $this->parseMediaType((!strlen($type)) ? "text" : $type); - if ($type === "text" || $type === "text/plain") { - if (is_null($out->plain)) { - $plain = $this->trimText($node->textContent); - if (strlen($plain)) { - $out->plain = $plain; - $populated = true; + switch (MimeType::parseAtom(trim($node->getAttribute("type")))->essence) { + case "text/plain": + if (is_null($out->plain)) { + $plain = $this->trimText($node->textContent); + if (strlen($plain)) { + $out->plain = $plain; + $populated = true; + } } - } - } elseif ($type === "html" || $type === "text/html") { - if (is_null($out->html)) { - $html = trim($node->textContent); - if (strlen($html)) { - $out->html = $html; - $out->htmlBase = strlen($node->baseURI) ? $node->baseURI : null; + break; + case "text/html": + if (is_null($out->html)) { + $html = trim($node->textContent); + if (strlen($html)) { + $out->html = $html; + $out->htmlBase = strlen($node->baseURI) ? $node->baseURI : null; + $populated = true; + } + } + break; + case "application/xhtml+xml": + if (is_null($out->xhtml) && ($xhtml = $this->fetchElement("xhtml:div", $node))) { + $out->xhtml = $xhtml->ownerDocument->saveXML($xhtml); + $out->xhtmlBase = strlen($xhtml->baseURI) ? $xhtml->baseURI : null; $populated = true; } - } - } elseif ($type === "xhtml" || $type === "application/xhtml+xml") { - if (is_null($out->xhtml) && ($xhtml = $this->fetchElement("xhtml:div", $node))) { - $out->xhtml = $xhtml->ownerDocument->saveXML($xhtml); - $out->xhtmlBase = strlen($xhtml->baseURI) ? $xhtml->baseURI : null; - $populated = true; - } + break; } } return $populated ? $out : null; diff --git a/tests/cases/Util/Mime/README b/tests/cases/Util/Mime/README deleted file mode 100644 index d450f06..0000000 --- a/tests/cases/Util/Mime/README +++ /dev/null @@ -1,20 +0,0 @@ -The Mime class used in Lax is an original work, but its test suite is -derived from an existing test corpus from the following source: - -The Web Platform Test suite - - -The license text is reproduced below, but please note that the license text -has changed since the last time the mimesniff portion of the test suite was -modified; the text included here is current as of 2019-04-25. - - -Copyright 2019 web-platform-tests contributors - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/tests/cases/Util/Mime/generated-mime-types.json b/tests/cases/Util/Mime/generated-mime-types.json deleted file mode 100644 index 4b3a6ff..0000000 --- a/tests/cases/Util/Mime/generated-mime-types.json +++ /dev/null @@ -1,3526 +0,0 @@ -[ - { - "input": "\u0000/x", - "output": null - }, - { - "input": "x/\u0000", - "output": null - }, - { - "input": "x/x;\u0000=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0000;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0000\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0001/x", - "output": null - }, - { - "input": "x/\u0001", - "output": null - }, - { - "input": "x/x;\u0001=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0001;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0001\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0002/x", - "output": null - }, - { - "input": "x/\u0002", - "output": null - }, - { - "input": "x/x;\u0002=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0002;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0002\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0003/x", - "output": null - }, - { - "input": "x/\u0003", - "output": null - }, - { - "input": "x/x;\u0003=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0003;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0003\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0004/x", - "output": null - }, - { - "input": "x/\u0004", - "output": null - }, - { - "input": "x/x;\u0004=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0004;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0004\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0005/x", - "output": null - }, - { - "input": "x/\u0005", - "output": null - }, - { - "input": "x/x;\u0005=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0005;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0005\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0006/x", - "output": null - }, - { - "input": "x/\u0006", - "output": null - }, - { - "input": "x/x;\u0006=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0006;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0006\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0007/x", - "output": null - }, - { - "input": "x/\u0007", - "output": null - }, - { - "input": "x/x;\u0007=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0007;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0007\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\b/x", - "output": null - }, - { - "input": "x/\b", - "output": null - }, - { - "input": "x/x;\b=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\b;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\b\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\t/x", - "output": null - }, - { - "input": "x/\t", - "output": null - }, - { - "input": "x/x;\t=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\n/x", - "output": null - }, - { - "input": "x/\n", - "output": null - }, - { - "input": "x/x;\n=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\n;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\n\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u000b/x", - "output": null - }, - { - "input": "x/\u000b", - "output": null - }, - { - "input": "x/x;\u000b=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u000b;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u000b\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\f/x", - "output": null - }, - { - "input": "x/\f", - "output": null - }, - { - "input": "x/x;\f=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\f;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\f\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\r/x", - "output": null - }, - { - "input": "x/\r", - "output": null - }, - { - "input": "x/x;\r=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\r;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\r\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u000e/x", - "output": null - }, - { - "input": "x/\u000e", - "output": null - }, - { - "input": "x/x;\u000e=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u000e;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u000e\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u000f/x", - "output": null - }, - { - "input": "x/\u000f", - "output": null - }, - { - "input": "x/x;\u000f=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u000f;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u000f\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0010/x", - "output": null - }, - { - "input": "x/\u0010", - "output": null - }, - { - "input": "x/x;\u0010=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0010;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0010\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0011/x", - "output": null - }, - { - "input": "x/\u0011", - "output": null - }, - { - "input": "x/x;\u0011=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0011;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0011\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0012/x", - "output": null - }, - { - "input": "x/\u0012", - "output": null - }, - { - "input": "x/x;\u0012=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0012;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0012\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0013/x", - "output": null - }, - { - "input": "x/\u0013", - "output": null - }, - { - "input": "x/x;\u0013=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0013;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0013\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0014/x", - "output": null - }, - { - "input": "x/\u0014", - "output": null - }, - { - "input": "x/x;\u0014=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0014;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0014\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0015/x", - "output": null - }, - { - "input": "x/\u0015", - "output": null - }, - { - "input": "x/x;\u0015=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0015;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0015\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0016/x", - "output": null - }, - { - "input": "x/\u0016", - "output": null - }, - { - "input": "x/x;\u0016=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0016;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0016\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0017/x", - "output": null - }, - { - "input": "x/\u0017", - "output": null - }, - { - "input": "x/x;\u0017=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0017;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0017\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0018/x", - "output": null - }, - { - "input": "x/\u0018", - "output": null - }, - { - "input": "x/x;\u0018=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0018;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0018\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0019/x", - "output": null - }, - { - "input": "x/\u0019", - "output": null - }, - { - "input": "x/x;\u0019=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0019;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u0019\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u001a/x", - "output": null - }, - { - "input": "x/\u001a", - "output": null - }, - { - "input": "x/x;\u001a=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u001a;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u001a\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u001b/x", - "output": null - }, - { - "input": "x/\u001b", - "output": null - }, - { - "input": "x/x;\u001b=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u001b;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u001b\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u001c/x", - "output": null - }, - { - "input": "x/\u001c", - "output": null - }, - { - "input": "x/x;\u001c=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u001c;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u001c\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u001d/x", - "output": null - }, - { - "input": "x/\u001d", - "output": null - }, - { - "input": "x/x;\u001d=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u001d;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u001d\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u001e/x", - "output": null - }, - { - "input": "x/\u001e", - "output": null - }, - { - "input": "x/x;\u001e=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u001e;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u001e\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u001f/x", - "output": null - }, - { - "input": "x/\u001f", - "output": null - }, - { - "input": "x/x;\u001f=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u001f;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u001f\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": " /x", - "output": null - }, - { - "input": "x/ ", - "output": null - }, - { - "input": "x/x; =x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\"/x", - "output": null - }, - { - "input": "x/\"", - "output": null - }, - { - "input": "x/x;\"=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "(/x", - "output": null - }, - { - "input": "x/(", - "output": null - }, - { - "input": "x/x;(=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=(;bonus=x", - "output": "x/x;x=\"(\";bonus=x" - }, - { - "input": "x/x;x=\"(\";bonus=x", - "output": "x/x;x=\"(\";bonus=x" - }, - { - "input": ")/x", - "output": null - }, - { - "input": "x/)", - "output": null - }, - { - "input": "x/x;)=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=);bonus=x", - "output": "x/x;x=\")\";bonus=x" - }, - { - "input": "x/x;x=\")\";bonus=x", - "output": "x/x;x=\")\";bonus=x" - }, - { - "input": ",/x", - "output": null - }, - { - "input": "x/,", - "output": null - }, - { - "input": "x/x;,=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=,;bonus=x", - "output": "x/x;x=\",\";bonus=x" - }, - { - "input": "x/x;x=\",\";bonus=x", - "output": "x/x;x=\",\";bonus=x" - }, - { - "input": "x/x;/=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=/;bonus=x", - "output": "x/x;x=\"/\";bonus=x" - }, - { - "input": "x/x;x=\"/\";bonus=x", - "output": "x/x;x=\"/\";bonus=x" - }, - { - "input": ":/x", - "output": null - }, - { - "input": "x/:", - "output": null - }, - { - "input": "x/x;:=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=:;bonus=x", - "output": "x/x;x=\":\";bonus=x" - }, - { - "input": "x/x;x=\":\";bonus=x", - "output": "x/x;x=\":\";bonus=x" - }, - { - "input": ";/x", - "output": null - }, - { - "input": "x/;", - "output": null - }, - { - "input": "/x", - "output": null - }, - { - "input": "x/>", - "output": null - }, - { - "input": "x/x;>=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=>;bonus=x", - "output": "x/x;x=\">\";bonus=x" - }, - { - "input": "x/x;x=\">\";bonus=x", - "output": "x/x;x=\">\";bonus=x" - }, - { - "input": "?/x", - "output": null - }, - { - "input": "x/?", - "output": null - }, - { - "input": "x/x;?=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=?;bonus=x", - "output": "x/x;x=\"?\";bonus=x" - }, - { - "input": "x/x;x=\"?\";bonus=x", - "output": "x/x;x=\"?\";bonus=x" - }, - { - "input": "@/x", - "output": null - }, - { - "input": "x/@", - "output": null - }, - { - "input": "x/x;@=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=@;bonus=x", - "output": "x/x;x=\"@\";bonus=x" - }, - { - "input": "x/x;x=\"@\";bonus=x", - "output": "x/x;x=\"@\";bonus=x" - }, - { - "input": "[/x", - "output": null - }, - { - "input": "x/[", - "output": null - }, - { - "input": "x/x;[=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=[;bonus=x", - "output": "x/x;x=\"[\";bonus=x" - }, - { - "input": "x/x;x=\"[\";bonus=x", - "output": "x/x;x=\"[\";bonus=x" - }, - { - "input": "\\/x", - "output": null - }, - { - "input": "x/\\", - "output": null - }, - { - "input": "x/x;\\=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "]/x", - "output": null - }, - { - "input": "x/]", - "output": null - }, - { - "input": "x/x;]=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=];bonus=x", - "output": "x/x;x=\"]\";bonus=x" - }, - { - "input": "x/x;x=\"]\";bonus=x", - "output": "x/x;x=\"]\";bonus=x" - }, - { - "input": "{/x", - "output": null - }, - { - "input": "x/{", - "output": null - }, - { - "input": "x/x;{=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x={;bonus=x", - "output": "x/x;x=\"{\";bonus=x" - }, - { - "input": "x/x;x=\"{\";bonus=x", - "output": "x/x;x=\"{\";bonus=x" - }, - { - "input": "}/x", - "output": null - }, - { - "input": "x/}", - "output": null - }, - { - "input": "x/x;}=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=};bonus=x", - "output": "x/x;x=\"}\";bonus=x" - }, - { - "input": "x/x;x=\"}\";bonus=x", - "output": "x/x;x=\"}\";bonus=x" - }, - { - "input": "\u007f/x", - "output": null - }, - { - "input": "x/\u007f", - "output": null - }, - { - "input": "x/x;\u007f=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u007f;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\"\u007f\";bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "\u0080/x", - "output": null - }, - { - "input": "x/\u0080", - "output": null - }, - { - "input": "x/x;\u0080=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0080;bonus=x", - "output": "x/x;x=\"\u0080\";bonus=x" - }, - { - "input": "x/x;x=\"\u0080\";bonus=x", - "output": "x/x;x=\"\u0080\";bonus=x" - }, - { - "input": "\u0081/x", - "output": null - }, - { - "input": "x/\u0081", - "output": null - }, - { - "input": "x/x;\u0081=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0081;bonus=x", - "output": "x/x;x=\"\u0081\";bonus=x" - }, - { - "input": "x/x;x=\"\u0081\";bonus=x", - "output": "x/x;x=\"\u0081\";bonus=x" - }, - { - "input": "\u0082/x", - "output": null - }, - { - "input": "x/\u0082", - "output": null - }, - { - "input": "x/x;\u0082=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0082;bonus=x", - "output": "x/x;x=\"\u0082\";bonus=x" - }, - { - "input": "x/x;x=\"\u0082\";bonus=x", - "output": "x/x;x=\"\u0082\";bonus=x" - }, - { - "input": "\u0083/x", - "output": null - }, - { - "input": "x/\u0083", - "output": null - }, - { - "input": "x/x;\u0083=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0083;bonus=x", - "output": "x/x;x=\"\u0083\";bonus=x" - }, - { - "input": "x/x;x=\"\u0083\";bonus=x", - "output": "x/x;x=\"\u0083\";bonus=x" - }, - { - "input": "\u0084/x", - "output": null - }, - { - "input": "x/\u0084", - "output": null - }, - { - "input": "x/x;\u0084=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0084;bonus=x", - "output": "x/x;x=\"\u0084\";bonus=x" - }, - { - "input": "x/x;x=\"\u0084\";bonus=x", - "output": "x/x;x=\"\u0084\";bonus=x" - }, - { - "input": "\u0085/x", - "output": null - }, - { - "input": "x/\u0085", - "output": null - }, - { - "input": "x/x;\u0085=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0085;bonus=x", - "output": "x/x;x=\"\u0085\";bonus=x" - }, - { - "input": "x/x;x=\"\u0085\";bonus=x", - "output": "x/x;x=\"\u0085\";bonus=x" - }, - { - "input": "\u0086/x", - "output": null - }, - { - "input": "x/\u0086", - "output": null - }, - { - "input": "x/x;\u0086=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0086;bonus=x", - "output": "x/x;x=\"\u0086\";bonus=x" - }, - { - "input": "x/x;x=\"\u0086\";bonus=x", - "output": "x/x;x=\"\u0086\";bonus=x" - }, - { - "input": "\u0087/x", - "output": null - }, - { - "input": "x/\u0087", - "output": null - }, - { - "input": "x/x;\u0087=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0087;bonus=x", - "output": "x/x;x=\"\u0087\";bonus=x" - }, - { - "input": "x/x;x=\"\u0087\";bonus=x", - "output": "x/x;x=\"\u0087\";bonus=x" - }, - { - "input": "\u0088/x", - "output": null - }, - { - "input": "x/\u0088", - "output": null - }, - { - "input": "x/x;\u0088=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0088;bonus=x", - "output": "x/x;x=\"\u0088\";bonus=x" - }, - { - "input": "x/x;x=\"\u0088\";bonus=x", - "output": "x/x;x=\"\u0088\";bonus=x" - }, - { - "input": "\u0089/x", - "output": null - }, - { - "input": "x/\u0089", - "output": null - }, - { - "input": "x/x;\u0089=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0089;bonus=x", - "output": "x/x;x=\"\u0089\";bonus=x" - }, - { - "input": "x/x;x=\"\u0089\";bonus=x", - "output": "x/x;x=\"\u0089\";bonus=x" - }, - { - "input": "\u008a/x", - "output": null - }, - { - "input": "x/\u008a", - "output": null - }, - { - "input": "x/x;\u008a=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u008a;bonus=x", - "output": "x/x;x=\"\u008a\";bonus=x" - }, - { - "input": "x/x;x=\"\u008a\";bonus=x", - "output": "x/x;x=\"\u008a\";bonus=x" - }, - { - "input": "\u008b/x", - "output": null - }, - { - "input": "x/\u008b", - "output": null - }, - { - "input": "x/x;\u008b=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u008b;bonus=x", - "output": "x/x;x=\"\u008b\";bonus=x" - }, - { - "input": "x/x;x=\"\u008b\";bonus=x", - "output": "x/x;x=\"\u008b\";bonus=x" - }, - { - "input": "\u008c/x", - "output": null - }, - { - "input": "x/\u008c", - "output": null - }, - { - "input": "x/x;\u008c=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u008c;bonus=x", - "output": "x/x;x=\"\u008c\";bonus=x" - }, - { - "input": "x/x;x=\"\u008c\";bonus=x", - "output": "x/x;x=\"\u008c\";bonus=x" - }, - { - "input": "\u008d/x", - "output": null - }, - { - "input": "x/\u008d", - "output": null - }, - { - "input": "x/x;\u008d=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u008d;bonus=x", - "output": "x/x;x=\"\u008d\";bonus=x" - }, - { - "input": "x/x;x=\"\u008d\";bonus=x", - "output": "x/x;x=\"\u008d\";bonus=x" - }, - { - "input": "\u008e/x", - "output": null - }, - { - "input": "x/\u008e", - "output": null - }, - { - "input": "x/x;\u008e=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u008e;bonus=x", - "output": "x/x;x=\"\u008e\";bonus=x" - }, - { - "input": "x/x;x=\"\u008e\";bonus=x", - "output": "x/x;x=\"\u008e\";bonus=x" - }, - { - "input": "\u008f/x", - "output": null - }, - { - "input": "x/\u008f", - "output": null - }, - { - "input": "x/x;\u008f=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u008f;bonus=x", - "output": "x/x;x=\"\u008f\";bonus=x" - }, - { - "input": "x/x;x=\"\u008f\";bonus=x", - "output": "x/x;x=\"\u008f\";bonus=x" - }, - { - "input": "\u0090/x", - "output": null - }, - { - "input": "x/\u0090", - "output": null - }, - { - "input": "x/x;\u0090=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0090;bonus=x", - "output": "x/x;x=\"\u0090\";bonus=x" - }, - { - "input": "x/x;x=\"\u0090\";bonus=x", - "output": "x/x;x=\"\u0090\";bonus=x" - }, - { - "input": "\u0091/x", - "output": null - }, - { - "input": "x/\u0091", - "output": null - }, - { - "input": "x/x;\u0091=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0091;bonus=x", - "output": "x/x;x=\"\u0091\";bonus=x" - }, - { - "input": "x/x;x=\"\u0091\";bonus=x", - "output": "x/x;x=\"\u0091\";bonus=x" - }, - { - "input": "\u0092/x", - "output": null - }, - { - "input": "x/\u0092", - "output": null - }, - { - "input": "x/x;\u0092=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0092;bonus=x", - "output": "x/x;x=\"\u0092\";bonus=x" - }, - { - "input": "x/x;x=\"\u0092\";bonus=x", - "output": "x/x;x=\"\u0092\";bonus=x" - }, - { - "input": "\u0093/x", - "output": null - }, - { - "input": "x/\u0093", - "output": null - }, - { - "input": "x/x;\u0093=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0093;bonus=x", - "output": "x/x;x=\"\u0093\";bonus=x" - }, - { - "input": "x/x;x=\"\u0093\";bonus=x", - "output": "x/x;x=\"\u0093\";bonus=x" - }, - { - "input": "\u0094/x", - "output": null - }, - { - "input": "x/\u0094", - "output": null - }, - { - "input": "x/x;\u0094=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0094;bonus=x", - "output": "x/x;x=\"\u0094\";bonus=x" - }, - { - "input": "x/x;x=\"\u0094\";bonus=x", - "output": "x/x;x=\"\u0094\";bonus=x" - }, - { - "input": "\u0095/x", - "output": null - }, - { - "input": "x/\u0095", - "output": null - }, - { - "input": "x/x;\u0095=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0095;bonus=x", - "output": "x/x;x=\"\u0095\";bonus=x" - }, - { - "input": "x/x;x=\"\u0095\";bonus=x", - "output": "x/x;x=\"\u0095\";bonus=x" - }, - { - "input": "\u0096/x", - "output": null - }, - { - "input": "x/\u0096", - "output": null - }, - { - "input": "x/x;\u0096=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0096;bonus=x", - "output": "x/x;x=\"\u0096\";bonus=x" - }, - { - "input": "x/x;x=\"\u0096\";bonus=x", - "output": "x/x;x=\"\u0096\";bonus=x" - }, - { - "input": "\u0097/x", - "output": null - }, - { - "input": "x/\u0097", - "output": null - }, - { - "input": "x/x;\u0097=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0097;bonus=x", - "output": "x/x;x=\"\u0097\";bonus=x" - }, - { - "input": "x/x;x=\"\u0097\";bonus=x", - "output": "x/x;x=\"\u0097\";bonus=x" - }, - { - "input": "\u0098/x", - "output": null - }, - { - "input": "x/\u0098", - "output": null - }, - { - "input": "x/x;\u0098=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0098;bonus=x", - "output": "x/x;x=\"\u0098\";bonus=x" - }, - { - "input": "x/x;x=\"\u0098\";bonus=x", - "output": "x/x;x=\"\u0098\";bonus=x" - }, - { - "input": "\u0099/x", - "output": null - }, - { - "input": "x/\u0099", - "output": null - }, - { - "input": "x/x;\u0099=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u0099;bonus=x", - "output": "x/x;x=\"\u0099\";bonus=x" - }, - { - "input": "x/x;x=\"\u0099\";bonus=x", - "output": "x/x;x=\"\u0099\";bonus=x" - }, - { - "input": "\u009a/x", - "output": null - }, - { - "input": "x/\u009a", - "output": null - }, - { - "input": "x/x;\u009a=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u009a;bonus=x", - "output": "x/x;x=\"\u009a\";bonus=x" - }, - { - "input": "x/x;x=\"\u009a\";bonus=x", - "output": "x/x;x=\"\u009a\";bonus=x" - }, - { - "input": "\u009b/x", - "output": null - }, - { - "input": "x/\u009b", - "output": null - }, - { - "input": "x/x;\u009b=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u009b;bonus=x", - "output": "x/x;x=\"\u009b\";bonus=x" - }, - { - "input": "x/x;x=\"\u009b\";bonus=x", - "output": "x/x;x=\"\u009b\";bonus=x" - }, - { - "input": "\u009c/x", - "output": null - }, - { - "input": "x/\u009c", - "output": null - }, - { - "input": "x/x;\u009c=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u009c;bonus=x", - "output": "x/x;x=\"\u009c\";bonus=x" - }, - { - "input": "x/x;x=\"\u009c\";bonus=x", - "output": "x/x;x=\"\u009c\";bonus=x" - }, - { - "input": "\u009d/x", - "output": null - }, - { - "input": "x/\u009d", - "output": null - }, - { - "input": "x/x;\u009d=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u009d;bonus=x", - "output": "x/x;x=\"\u009d\";bonus=x" - }, - { - "input": "x/x;x=\"\u009d\";bonus=x", - "output": "x/x;x=\"\u009d\";bonus=x" - }, - { - "input": "\u009e/x", - "output": null - }, - { - "input": "x/\u009e", - "output": null - }, - { - "input": "x/x;\u009e=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u009e;bonus=x", - "output": "x/x;x=\"\u009e\";bonus=x" - }, - { - "input": "x/x;x=\"\u009e\";bonus=x", - "output": "x/x;x=\"\u009e\";bonus=x" - }, - { - "input": "\u009f/x", - "output": null - }, - { - "input": "x/\u009f", - "output": null - }, - { - "input": "x/x;\u009f=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u009f;bonus=x", - "output": "x/x;x=\"\u009f\";bonus=x" - }, - { - "input": "x/x;x=\"\u009f\";bonus=x", - "output": "x/x;x=\"\u009f\";bonus=x" - }, - { - "input": "\u00a0/x", - "output": null - }, - { - "input": "x/\u00a0", - "output": null - }, - { - "input": "x/x;\u00a0=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a0;bonus=x", - "output": "x/x;x=\"\u00a0\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a0\";bonus=x", - "output": "x/x;x=\"\u00a0\";bonus=x" - }, - { - "input": "\u00a1/x", - "output": null - }, - { - "input": "x/\u00a1", - "output": null - }, - { - "input": "x/x;\u00a1=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a1;bonus=x", - "output": "x/x;x=\"\u00a1\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a1\";bonus=x", - "output": "x/x;x=\"\u00a1\";bonus=x" - }, - { - "input": "\u00a2/x", - "output": null - }, - { - "input": "x/\u00a2", - "output": null - }, - { - "input": "x/x;\u00a2=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a2;bonus=x", - "output": "x/x;x=\"\u00a2\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a2\";bonus=x", - "output": "x/x;x=\"\u00a2\";bonus=x" - }, - { - "input": "\u00a3/x", - "output": null - }, - { - "input": "x/\u00a3", - "output": null - }, - { - "input": "x/x;\u00a3=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a3;bonus=x", - "output": "x/x;x=\"\u00a3\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a3\";bonus=x", - "output": "x/x;x=\"\u00a3\";bonus=x" - }, - { - "input": "\u00a4/x", - "output": null - }, - { - "input": "x/\u00a4", - "output": null - }, - { - "input": "x/x;\u00a4=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a4;bonus=x", - "output": "x/x;x=\"\u00a4\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a4\";bonus=x", - "output": "x/x;x=\"\u00a4\";bonus=x" - }, - { - "input": "\u00a5/x", - "output": null - }, - { - "input": "x/\u00a5", - "output": null - }, - { - "input": "x/x;\u00a5=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a5;bonus=x", - "output": "x/x;x=\"\u00a5\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a5\";bonus=x", - "output": "x/x;x=\"\u00a5\";bonus=x" - }, - { - "input": "\u00a6/x", - "output": null - }, - { - "input": "x/\u00a6", - "output": null - }, - { - "input": "x/x;\u00a6=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a6;bonus=x", - "output": "x/x;x=\"\u00a6\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a6\";bonus=x", - "output": "x/x;x=\"\u00a6\";bonus=x" - }, - { - "input": "\u00a7/x", - "output": null - }, - { - "input": "x/\u00a7", - "output": null - }, - { - "input": "x/x;\u00a7=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a7;bonus=x", - "output": "x/x;x=\"\u00a7\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a7\";bonus=x", - "output": "x/x;x=\"\u00a7\";bonus=x" - }, - { - "input": "\u00a8/x", - "output": null - }, - { - "input": "x/\u00a8", - "output": null - }, - { - "input": "x/x;\u00a8=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a8;bonus=x", - "output": "x/x;x=\"\u00a8\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a8\";bonus=x", - "output": "x/x;x=\"\u00a8\";bonus=x" - }, - { - "input": "\u00a9/x", - "output": null - }, - { - "input": "x/\u00a9", - "output": null - }, - { - "input": "x/x;\u00a9=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00a9;bonus=x", - "output": "x/x;x=\"\u00a9\";bonus=x" - }, - { - "input": "x/x;x=\"\u00a9\";bonus=x", - "output": "x/x;x=\"\u00a9\";bonus=x" - }, - { - "input": "\u00aa/x", - "output": null - }, - { - "input": "x/\u00aa", - "output": null - }, - { - "input": "x/x;\u00aa=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00aa;bonus=x", - "output": "x/x;x=\"\u00aa\";bonus=x" - }, - { - "input": "x/x;x=\"\u00aa\";bonus=x", - "output": "x/x;x=\"\u00aa\";bonus=x" - }, - { - "input": "\u00ab/x", - "output": null - }, - { - "input": "x/\u00ab", - "output": null - }, - { - "input": "x/x;\u00ab=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ab;bonus=x", - "output": "x/x;x=\"\u00ab\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ab\";bonus=x", - "output": "x/x;x=\"\u00ab\";bonus=x" - }, - { - "input": "\u00ac/x", - "output": null - }, - { - "input": "x/\u00ac", - "output": null - }, - { - "input": "x/x;\u00ac=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ac;bonus=x", - "output": "x/x;x=\"\u00ac\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ac\";bonus=x", - "output": "x/x;x=\"\u00ac\";bonus=x" - }, - { - "input": "\u00ad/x", - "output": null - }, - { - "input": "x/\u00ad", - "output": null - }, - { - "input": "x/x;\u00ad=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ad;bonus=x", - "output": "x/x;x=\"\u00ad\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ad\";bonus=x", - "output": "x/x;x=\"\u00ad\";bonus=x" - }, - { - "input": "\u00ae/x", - "output": null - }, - { - "input": "x/\u00ae", - "output": null - }, - { - "input": "x/x;\u00ae=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ae;bonus=x", - "output": "x/x;x=\"\u00ae\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ae\";bonus=x", - "output": "x/x;x=\"\u00ae\";bonus=x" - }, - { - "input": "\u00af/x", - "output": null - }, - { - "input": "x/\u00af", - "output": null - }, - { - "input": "x/x;\u00af=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00af;bonus=x", - "output": "x/x;x=\"\u00af\";bonus=x" - }, - { - "input": "x/x;x=\"\u00af\";bonus=x", - "output": "x/x;x=\"\u00af\";bonus=x" - }, - { - "input": "\u00b0/x", - "output": null - }, - { - "input": "x/\u00b0", - "output": null - }, - { - "input": "x/x;\u00b0=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b0;bonus=x", - "output": "x/x;x=\"\u00b0\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b0\";bonus=x", - "output": "x/x;x=\"\u00b0\";bonus=x" - }, - { - "input": "\u00b1/x", - "output": null - }, - { - "input": "x/\u00b1", - "output": null - }, - { - "input": "x/x;\u00b1=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b1;bonus=x", - "output": "x/x;x=\"\u00b1\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b1\";bonus=x", - "output": "x/x;x=\"\u00b1\";bonus=x" - }, - { - "input": "\u00b2/x", - "output": null - }, - { - "input": "x/\u00b2", - "output": null - }, - { - "input": "x/x;\u00b2=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b2;bonus=x", - "output": "x/x;x=\"\u00b2\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b2\";bonus=x", - "output": "x/x;x=\"\u00b2\";bonus=x" - }, - { - "input": "\u00b3/x", - "output": null - }, - { - "input": "x/\u00b3", - "output": null - }, - { - "input": "x/x;\u00b3=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b3;bonus=x", - "output": "x/x;x=\"\u00b3\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b3\";bonus=x", - "output": "x/x;x=\"\u00b3\";bonus=x" - }, - { - "input": "\u00b4/x", - "output": null - }, - { - "input": "x/\u00b4", - "output": null - }, - { - "input": "x/x;\u00b4=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b4;bonus=x", - "output": "x/x;x=\"\u00b4\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b4\";bonus=x", - "output": "x/x;x=\"\u00b4\";bonus=x" - }, - { - "input": "\u00b5/x", - "output": null - }, - { - "input": "x/\u00b5", - "output": null - }, - { - "input": "x/x;\u00b5=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b5;bonus=x", - "output": "x/x;x=\"\u00b5\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b5\";bonus=x", - "output": "x/x;x=\"\u00b5\";bonus=x" - }, - { - "input": "\u00b6/x", - "output": null - }, - { - "input": "x/\u00b6", - "output": null - }, - { - "input": "x/x;\u00b6=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b6;bonus=x", - "output": "x/x;x=\"\u00b6\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b6\";bonus=x", - "output": "x/x;x=\"\u00b6\";bonus=x" - }, - { - "input": "\u00b7/x", - "output": null - }, - { - "input": "x/\u00b7", - "output": null - }, - { - "input": "x/x;\u00b7=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b7;bonus=x", - "output": "x/x;x=\"\u00b7\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b7\";bonus=x", - "output": "x/x;x=\"\u00b7\";bonus=x" - }, - { - "input": "\u00b8/x", - "output": null - }, - { - "input": "x/\u00b8", - "output": null - }, - { - "input": "x/x;\u00b8=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b8;bonus=x", - "output": "x/x;x=\"\u00b8\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b8\";bonus=x", - "output": "x/x;x=\"\u00b8\";bonus=x" - }, - { - "input": "\u00b9/x", - "output": null - }, - { - "input": "x/\u00b9", - "output": null - }, - { - "input": "x/x;\u00b9=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00b9;bonus=x", - "output": "x/x;x=\"\u00b9\";bonus=x" - }, - { - "input": "x/x;x=\"\u00b9\";bonus=x", - "output": "x/x;x=\"\u00b9\";bonus=x" - }, - { - "input": "\u00ba/x", - "output": null - }, - { - "input": "x/\u00ba", - "output": null - }, - { - "input": "x/x;\u00ba=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ba;bonus=x", - "output": "x/x;x=\"\u00ba\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ba\";bonus=x", - "output": "x/x;x=\"\u00ba\";bonus=x" - }, - { - "input": "\u00bb/x", - "output": null - }, - { - "input": "x/\u00bb", - "output": null - }, - { - "input": "x/x;\u00bb=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00bb;bonus=x", - "output": "x/x;x=\"\u00bb\";bonus=x" - }, - { - "input": "x/x;x=\"\u00bb\";bonus=x", - "output": "x/x;x=\"\u00bb\";bonus=x" - }, - { - "input": "\u00bc/x", - "output": null - }, - { - "input": "x/\u00bc", - "output": null - }, - { - "input": "x/x;\u00bc=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00bc;bonus=x", - "output": "x/x;x=\"\u00bc\";bonus=x" - }, - { - "input": "x/x;x=\"\u00bc\";bonus=x", - "output": "x/x;x=\"\u00bc\";bonus=x" - }, - { - "input": "\u00bd/x", - "output": null - }, - { - "input": "x/\u00bd", - "output": null - }, - { - "input": "x/x;\u00bd=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00bd;bonus=x", - "output": "x/x;x=\"\u00bd\";bonus=x" - }, - { - "input": "x/x;x=\"\u00bd\";bonus=x", - "output": "x/x;x=\"\u00bd\";bonus=x" - }, - { - "input": "\u00be/x", - "output": null - }, - { - "input": "x/\u00be", - "output": null - }, - { - "input": "x/x;\u00be=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00be;bonus=x", - "output": "x/x;x=\"\u00be\";bonus=x" - }, - { - "input": "x/x;x=\"\u00be\";bonus=x", - "output": "x/x;x=\"\u00be\";bonus=x" - }, - { - "input": "\u00bf/x", - "output": null - }, - { - "input": "x/\u00bf", - "output": null - }, - { - "input": "x/x;\u00bf=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00bf;bonus=x", - "output": "x/x;x=\"\u00bf\";bonus=x" - }, - { - "input": "x/x;x=\"\u00bf\";bonus=x", - "output": "x/x;x=\"\u00bf\";bonus=x" - }, - { - "input": "\u00c0/x", - "output": null - }, - { - "input": "x/\u00c0", - "output": null - }, - { - "input": "x/x;\u00c0=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c0;bonus=x", - "output": "x/x;x=\"\u00c0\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c0\";bonus=x", - "output": "x/x;x=\"\u00c0\";bonus=x" - }, - { - "input": "\u00c1/x", - "output": null - }, - { - "input": "x/\u00c1", - "output": null - }, - { - "input": "x/x;\u00c1=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c1;bonus=x", - "output": "x/x;x=\"\u00c1\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c1\";bonus=x", - "output": "x/x;x=\"\u00c1\";bonus=x" - }, - { - "input": "\u00c2/x", - "output": null - }, - { - "input": "x/\u00c2", - "output": null - }, - { - "input": "x/x;\u00c2=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c2;bonus=x", - "output": "x/x;x=\"\u00c2\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c2\";bonus=x", - "output": "x/x;x=\"\u00c2\";bonus=x" - }, - { - "input": "\u00c3/x", - "output": null - }, - { - "input": "x/\u00c3", - "output": null - }, - { - "input": "x/x;\u00c3=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c3;bonus=x", - "output": "x/x;x=\"\u00c3\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c3\";bonus=x", - "output": "x/x;x=\"\u00c3\";bonus=x" - }, - { - "input": "\u00c4/x", - "output": null - }, - { - "input": "x/\u00c4", - "output": null - }, - { - "input": "x/x;\u00c4=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c4;bonus=x", - "output": "x/x;x=\"\u00c4\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c4\";bonus=x", - "output": "x/x;x=\"\u00c4\";bonus=x" - }, - { - "input": "\u00c5/x", - "output": null - }, - { - "input": "x/\u00c5", - "output": null - }, - { - "input": "x/x;\u00c5=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c5;bonus=x", - "output": "x/x;x=\"\u00c5\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c5\";bonus=x", - "output": "x/x;x=\"\u00c5\";bonus=x" - }, - { - "input": "\u00c6/x", - "output": null - }, - { - "input": "x/\u00c6", - "output": null - }, - { - "input": "x/x;\u00c6=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c6;bonus=x", - "output": "x/x;x=\"\u00c6\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c6\";bonus=x", - "output": "x/x;x=\"\u00c6\";bonus=x" - }, - { - "input": "\u00c7/x", - "output": null - }, - { - "input": "x/\u00c7", - "output": null - }, - { - "input": "x/x;\u00c7=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c7;bonus=x", - "output": "x/x;x=\"\u00c7\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c7\";bonus=x", - "output": "x/x;x=\"\u00c7\";bonus=x" - }, - { - "input": "\u00c8/x", - "output": null - }, - { - "input": "x/\u00c8", - "output": null - }, - { - "input": "x/x;\u00c8=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c8;bonus=x", - "output": "x/x;x=\"\u00c8\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c8\";bonus=x", - "output": "x/x;x=\"\u00c8\";bonus=x" - }, - { - "input": "\u00c9/x", - "output": null - }, - { - "input": "x/\u00c9", - "output": null - }, - { - "input": "x/x;\u00c9=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00c9;bonus=x", - "output": "x/x;x=\"\u00c9\";bonus=x" - }, - { - "input": "x/x;x=\"\u00c9\";bonus=x", - "output": "x/x;x=\"\u00c9\";bonus=x" - }, - { - "input": "\u00ca/x", - "output": null - }, - { - "input": "x/\u00ca", - "output": null - }, - { - "input": "x/x;\u00ca=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ca;bonus=x", - "output": "x/x;x=\"\u00ca\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ca\";bonus=x", - "output": "x/x;x=\"\u00ca\";bonus=x" - }, - { - "input": "\u00cb/x", - "output": null - }, - { - "input": "x/\u00cb", - "output": null - }, - { - "input": "x/x;\u00cb=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00cb;bonus=x", - "output": "x/x;x=\"\u00cb\";bonus=x" - }, - { - "input": "x/x;x=\"\u00cb\";bonus=x", - "output": "x/x;x=\"\u00cb\";bonus=x" - }, - { - "input": "\u00cc/x", - "output": null - }, - { - "input": "x/\u00cc", - "output": null - }, - { - "input": "x/x;\u00cc=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00cc;bonus=x", - "output": "x/x;x=\"\u00cc\";bonus=x" - }, - { - "input": "x/x;x=\"\u00cc\";bonus=x", - "output": "x/x;x=\"\u00cc\";bonus=x" - }, - { - "input": "\u00cd/x", - "output": null - }, - { - "input": "x/\u00cd", - "output": null - }, - { - "input": "x/x;\u00cd=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00cd;bonus=x", - "output": "x/x;x=\"\u00cd\";bonus=x" - }, - { - "input": "x/x;x=\"\u00cd\";bonus=x", - "output": "x/x;x=\"\u00cd\";bonus=x" - }, - { - "input": "\u00ce/x", - "output": null - }, - { - "input": "x/\u00ce", - "output": null - }, - { - "input": "x/x;\u00ce=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ce;bonus=x", - "output": "x/x;x=\"\u00ce\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ce\";bonus=x", - "output": "x/x;x=\"\u00ce\";bonus=x" - }, - { - "input": "\u00cf/x", - "output": null - }, - { - "input": "x/\u00cf", - "output": null - }, - { - "input": "x/x;\u00cf=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00cf;bonus=x", - "output": "x/x;x=\"\u00cf\";bonus=x" - }, - { - "input": "x/x;x=\"\u00cf\";bonus=x", - "output": "x/x;x=\"\u00cf\";bonus=x" - }, - { - "input": "\u00d0/x", - "output": null - }, - { - "input": "x/\u00d0", - "output": null - }, - { - "input": "x/x;\u00d0=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d0;bonus=x", - "output": "x/x;x=\"\u00d0\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d0\";bonus=x", - "output": "x/x;x=\"\u00d0\";bonus=x" - }, - { - "input": "\u00d1/x", - "output": null - }, - { - "input": "x/\u00d1", - "output": null - }, - { - "input": "x/x;\u00d1=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d1;bonus=x", - "output": "x/x;x=\"\u00d1\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d1\";bonus=x", - "output": "x/x;x=\"\u00d1\";bonus=x" - }, - { - "input": "\u00d2/x", - "output": null - }, - { - "input": "x/\u00d2", - "output": null - }, - { - "input": "x/x;\u00d2=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d2;bonus=x", - "output": "x/x;x=\"\u00d2\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d2\";bonus=x", - "output": "x/x;x=\"\u00d2\";bonus=x" - }, - { - "input": "\u00d3/x", - "output": null - }, - { - "input": "x/\u00d3", - "output": null - }, - { - "input": "x/x;\u00d3=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d3;bonus=x", - "output": "x/x;x=\"\u00d3\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d3\";bonus=x", - "output": "x/x;x=\"\u00d3\";bonus=x" - }, - { - "input": "\u00d4/x", - "output": null - }, - { - "input": "x/\u00d4", - "output": null - }, - { - "input": "x/x;\u00d4=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d4;bonus=x", - "output": "x/x;x=\"\u00d4\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d4\";bonus=x", - "output": "x/x;x=\"\u00d4\";bonus=x" - }, - { - "input": "\u00d5/x", - "output": null - }, - { - "input": "x/\u00d5", - "output": null - }, - { - "input": "x/x;\u00d5=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d5;bonus=x", - "output": "x/x;x=\"\u00d5\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d5\";bonus=x", - "output": "x/x;x=\"\u00d5\";bonus=x" - }, - { - "input": "\u00d6/x", - "output": null - }, - { - "input": "x/\u00d6", - "output": null - }, - { - "input": "x/x;\u00d6=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d6;bonus=x", - "output": "x/x;x=\"\u00d6\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d6\";bonus=x", - "output": "x/x;x=\"\u00d6\";bonus=x" - }, - { - "input": "\u00d7/x", - "output": null - }, - { - "input": "x/\u00d7", - "output": null - }, - { - "input": "x/x;\u00d7=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d7;bonus=x", - "output": "x/x;x=\"\u00d7\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d7\";bonus=x", - "output": "x/x;x=\"\u00d7\";bonus=x" - }, - { - "input": "\u00d8/x", - "output": null - }, - { - "input": "x/\u00d8", - "output": null - }, - { - "input": "x/x;\u00d8=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d8;bonus=x", - "output": "x/x;x=\"\u00d8\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d8\";bonus=x", - "output": "x/x;x=\"\u00d8\";bonus=x" - }, - { - "input": "\u00d9/x", - "output": null - }, - { - "input": "x/\u00d9", - "output": null - }, - { - "input": "x/x;\u00d9=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00d9;bonus=x", - "output": "x/x;x=\"\u00d9\";bonus=x" - }, - { - "input": "x/x;x=\"\u00d9\";bonus=x", - "output": "x/x;x=\"\u00d9\";bonus=x" - }, - { - "input": "\u00da/x", - "output": null - }, - { - "input": "x/\u00da", - "output": null - }, - { - "input": "x/x;\u00da=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00da;bonus=x", - "output": "x/x;x=\"\u00da\";bonus=x" - }, - { - "input": "x/x;x=\"\u00da\";bonus=x", - "output": "x/x;x=\"\u00da\";bonus=x" - }, - { - "input": "\u00db/x", - "output": null - }, - { - "input": "x/\u00db", - "output": null - }, - { - "input": "x/x;\u00db=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00db;bonus=x", - "output": "x/x;x=\"\u00db\";bonus=x" - }, - { - "input": "x/x;x=\"\u00db\";bonus=x", - "output": "x/x;x=\"\u00db\";bonus=x" - }, - { - "input": "\u00dc/x", - "output": null - }, - { - "input": "x/\u00dc", - "output": null - }, - { - "input": "x/x;\u00dc=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00dc;bonus=x", - "output": "x/x;x=\"\u00dc\";bonus=x" - }, - { - "input": "x/x;x=\"\u00dc\";bonus=x", - "output": "x/x;x=\"\u00dc\";bonus=x" - }, - { - "input": "\u00dd/x", - "output": null - }, - { - "input": "x/\u00dd", - "output": null - }, - { - "input": "x/x;\u00dd=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00dd;bonus=x", - "output": "x/x;x=\"\u00dd\";bonus=x" - }, - { - "input": "x/x;x=\"\u00dd\";bonus=x", - "output": "x/x;x=\"\u00dd\";bonus=x" - }, - { - "input": "\u00de/x", - "output": null - }, - { - "input": "x/\u00de", - "output": null - }, - { - "input": "x/x;\u00de=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00de;bonus=x", - "output": "x/x;x=\"\u00de\";bonus=x" - }, - { - "input": "x/x;x=\"\u00de\";bonus=x", - "output": "x/x;x=\"\u00de\";bonus=x" - }, - { - "input": "\u00df/x", - "output": null - }, - { - "input": "x/\u00df", - "output": null - }, - { - "input": "x/x;\u00df=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00df;bonus=x", - "output": "x/x;x=\"\u00df\";bonus=x" - }, - { - "input": "x/x;x=\"\u00df\";bonus=x", - "output": "x/x;x=\"\u00df\";bonus=x" - }, - { - "input": "\u00e0/x", - "output": null - }, - { - "input": "x/\u00e0", - "output": null - }, - { - "input": "x/x;\u00e0=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e0;bonus=x", - "output": "x/x;x=\"\u00e0\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e0\";bonus=x", - "output": "x/x;x=\"\u00e0\";bonus=x" - }, - { - "input": "\u00e1/x", - "output": null - }, - { - "input": "x/\u00e1", - "output": null - }, - { - "input": "x/x;\u00e1=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e1;bonus=x", - "output": "x/x;x=\"\u00e1\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e1\";bonus=x", - "output": "x/x;x=\"\u00e1\";bonus=x" - }, - { - "input": "\u00e2/x", - "output": null - }, - { - "input": "x/\u00e2", - "output": null - }, - { - "input": "x/x;\u00e2=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e2;bonus=x", - "output": "x/x;x=\"\u00e2\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e2\";bonus=x", - "output": "x/x;x=\"\u00e2\";bonus=x" - }, - { - "input": "\u00e3/x", - "output": null - }, - { - "input": "x/\u00e3", - "output": null - }, - { - "input": "x/x;\u00e3=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e3;bonus=x", - "output": "x/x;x=\"\u00e3\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e3\";bonus=x", - "output": "x/x;x=\"\u00e3\";bonus=x" - }, - { - "input": "\u00e4/x", - "output": null - }, - { - "input": "x/\u00e4", - "output": null - }, - { - "input": "x/x;\u00e4=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e4;bonus=x", - "output": "x/x;x=\"\u00e4\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e4\";bonus=x", - "output": "x/x;x=\"\u00e4\";bonus=x" - }, - { - "input": "\u00e5/x", - "output": null - }, - { - "input": "x/\u00e5", - "output": null - }, - { - "input": "x/x;\u00e5=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e5;bonus=x", - "output": "x/x;x=\"\u00e5\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e5\";bonus=x", - "output": "x/x;x=\"\u00e5\";bonus=x" - }, - { - "input": "\u00e6/x", - "output": null - }, - { - "input": "x/\u00e6", - "output": null - }, - { - "input": "x/x;\u00e6=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e6;bonus=x", - "output": "x/x;x=\"\u00e6\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e6\";bonus=x", - "output": "x/x;x=\"\u00e6\";bonus=x" - }, - { - "input": "\u00e7/x", - "output": null - }, - { - "input": "x/\u00e7", - "output": null - }, - { - "input": "x/x;\u00e7=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e7;bonus=x", - "output": "x/x;x=\"\u00e7\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e7\";bonus=x", - "output": "x/x;x=\"\u00e7\";bonus=x" - }, - { - "input": "\u00e8/x", - "output": null - }, - { - "input": "x/\u00e8", - "output": null - }, - { - "input": "x/x;\u00e8=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e8;bonus=x", - "output": "x/x;x=\"\u00e8\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e8\";bonus=x", - "output": "x/x;x=\"\u00e8\";bonus=x" - }, - { - "input": "\u00e9/x", - "output": null - }, - { - "input": "x/\u00e9", - "output": null - }, - { - "input": "x/x;\u00e9=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00e9;bonus=x", - "output": "x/x;x=\"\u00e9\";bonus=x" - }, - { - "input": "x/x;x=\"\u00e9\";bonus=x", - "output": "x/x;x=\"\u00e9\";bonus=x" - }, - { - "input": "\u00ea/x", - "output": null - }, - { - "input": "x/\u00ea", - "output": null - }, - { - "input": "x/x;\u00ea=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ea;bonus=x", - "output": "x/x;x=\"\u00ea\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ea\";bonus=x", - "output": "x/x;x=\"\u00ea\";bonus=x" - }, - { - "input": "\u00eb/x", - "output": null - }, - { - "input": "x/\u00eb", - "output": null - }, - { - "input": "x/x;\u00eb=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00eb;bonus=x", - "output": "x/x;x=\"\u00eb\";bonus=x" - }, - { - "input": "x/x;x=\"\u00eb\";bonus=x", - "output": "x/x;x=\"\u00eb\";bonus=x" - }, - { - "input": "\u00ec/x", - "output": null - }, - { - "input": "x/\u00ec", - "output": null - }, - { - "input": "x/x;\u00ec=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ec;bonus=x", - "output": "x/x;x=\"\u00ec\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ec\";bonus=x", - "output": "x/x;x=\"\u00ec\";bonus=x" - }, - { - "input": "\u00ed/x", - "output": null - }, - { - "input": "x/\u00ed", - "output": null - }, - { - "input": "x/x;\u00ed=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ed;bonus=x", - "output": "x/x;x=\"\u00ed\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ed\";bonus=x", - "output": "x/x;x=\"\u00ed\";bonus=x" - }, - { - "input": "\u00ee/x", - "output": null - }, - { - "input": "x/\u00ee", - "output": null - }, - { - "input": "x/x;\u00ee=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ee;bonus=x", - "output": "x/x;x=\"\u00ee\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ee\";bonus=x", - "output": "x/x;x=\"\u00ee\";bonus=x" - }, - { - "input": "\u00ef/x", - "output": null - }, - { - "input": "x/\u00ef", - "output": null - }, - { - "input": "x/x;\u00ef=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ef;bonus=x", - "output": "x/x;x=\"\u00ef\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ef\";bonus=x", - "output": "x/x;x=\"\u00ef\";bonus=x" - }, - { - "input": "\u00f0/x", - "output": null - }, - { - "input": "x/\u00f0", - "output": null - }, - { - "input": "x/x;\u00f0=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f0;bonus=x", - "output": "x/x;x=\"\u00f0\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f0\";bonus=x", - "output": "x/x;x=\"\u00f0\";bonus=x" - }, - { - "input": "\u00f1/x", - "output": null - }, - { - "input": "x/\u00f1", - "output": null - }, - { - "input": "x/x;\u00f1=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f1;bonus=x", - "output": "x/x;x=\"\u00f1\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f1\";bonus=x", - "output": "x/x;x=\"\u00f1\";bonus=x" - }, - { - "input": "\u00f2/x", - "output": null - }, - { - "input": "x/\u00f2", - "output": null - }, - { - "input": "x/x;\u00f2=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f2;bonus=x", - "output": "x/x;x=\"\u00f2\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f2\";bonus=x", - "output": "x/x;x=\"\u00f2\";bonus=x" - }, - { - "input": "\u00f3/x", - "output": null - }, - { - "input": "x/\u00f3", - "output": null - }, - { - "input": "x/x;\u00f3=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f3;bonus=x", - "output": "x/x;x=\"\u00f3\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f3\";bonus=x", - "output": "x/x;x=\"\u00f3\";bonus=x" - }, - { - "input": "\u00f4/x", - "output": null - }, - { - "input": "x/\u00f4", - "output": null - }, - { - "input": "x/x;\u00f4=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f4;bonus=x", - "output": "x/x;x=\"\u00f4\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f4\";bonus=x", - "output": "x/x;x=\"\u00f4\";bonus=x" - }, - { - "input": "\u00f5/x", - "output": null - }, - { - "input": "x/\u00f5", - "output": null - }, - { - "input": "x/x;\u00f5=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f5;bonus=x", - "output": "x/x;x=\"\u00f5\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f5\";bonus=x", - "output": "x/x;x=\"\u00f5\";bonus=x" - }, - { - "input": "\u00f6/x", - "output": null - }, - { - "input": "x/\u00f6", - "output": null - }, - { - "input": "x/x;\u00f6=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f6;bonus=x", - "output": "x/x;x=\"\u00f6\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f6\";bonus=x", - "output": "x/x;x=\"\u00f6\";bonus=x" - }, - { - "input": "\u00f7/x", - "output": null - }, - { - "input": "x/\u00f7", - "output": null - }, - { - "input": "x/x;\u00f7=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f7;bonus=x", - "output": "x/x;x=\"\u00f7\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f7\";bonus=x", - "output": "x/x;x=\"\u00f7\";bonus=x" - }, - { - "input": "\u00f8/x", - "output": null - }, - { - "input": "x/\u00f8", - "output": null - }, - { - "input": "x/x;\u00f8=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f8;bonus=x", - "output": "x/x;x=\"\u00f8\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f8\";bonus=x", - "output": "x/x;x=\"\u00f8\";bonus=x" - }, - { - "input": "\u00f9/x", - "output": null - }, - { - "input": "x/\u00f9", - "output": null - }, - { - "input": "x/x;\u00f9=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00f9;bonus=x", - "output": "x/x;x=\"\u00f9\";bonus=x" - }, - { - "input": "x/x;x=\"\u00f9\";bonus=x", - "output": "x/x;x=\"\u00f9\";bonus=x" - }, - { - "input": "\u00fa/x", - "output": null - }, - { - "input": "x/\u00fa", - "output": null - }, - { - "input": "x/x;\u00fa=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00fa;bonus=x", - "output": "x/x;x=\"\u00fa\";bonus=x" - }, - { - "input": "x/x;x=\"\u00fa\";bonus=x", - "output": "x/x;x=\"\u00fa\";bonus=x" - }, - { - "input": "\u00fb/x", - "output": null - }, - { - "input": "x/\u00fb", - "output": null - }, - { - "input": "x/x;\u00fb=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00fb;bonus=x", - "output": "x/x;x=\"\u00fb\";bonus=x" - }, - { - "input": "x/x;x=\"\u00fb\";bonus=x", - "output": "x/x;x=\"\u00fb\";bonus=x" - }, - { - "input": "\u00fc/x", - "output": null - }, - { - "input": "x/\u00fc", - "output": null - }, - { - "input": "x/x;\u00fc=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00fc;bonus=x", - "output": "x/x;x=\"\u00fc\";bonus=x" - }, - { - "input": "x/x;x=\"\u00fc\";bonus=x", - "output": "x/x;x=\"\u00fc\";bonus=x" - }, - { - "input": "\u00fd/x", - "output": null - }, - { - "input": "x/\u00fd", - "output": null - }, - { - "input": "x/x;\u00fd=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00fd;bonus=x", - "output": "x/x;x=\"\u00fd\";bonus=x" - }, - { - "input": "x/x;x=\"\u00fd\";bonus=x", - "output": "x/x;x=\"\u00fd\";bonus=x" - }, - { - "input": "\u00fe/x", - "output": null - }, - { - "input": "x/\u00fe", - "output": null - }, - { - "input": "x/x;\u00fe=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00fe;bonus=x", - "output": "x/x;x=\"\u00fe\";bonus=x" - }, - { - "input": "x/x;x=\"\u00fe\";bonus=x", - "output": "x/x;x=\"\u00fe\";bonus=x" - }, - { - "input": "\u00ff/x", - "output": null - }, - { - "input": "x/\u00ff", - "output": null - }, - { - "input": "x/x;\u00ff=x;bonus=x", - "output": "x/x;bonus=x" - }, - { - "input": "x/x;x=\u00ff;bonus=x", - "output": "x/x;x=\"\u00ff\";bonus=x" - }, - { - "input": "x/x;x=\"\u00ff\";bonus=x", - "output": "x/x;x=\"\u00ff\";bonus=x" - } - ] diff --git a/tests/cases/Util/Mime/mime-types.json b/tests/cases/Util/Mime/mime-types.json deleted file mode 100644 index e3cf13d..0000000 --- a/tests/cases/Util/Mime/mime-types.json +++ /dev/null @@ -1,383 +0,0 @@ -[ - "Basics", - { - "input": "text/html;charset=gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "TEXT/HTML;CHARSET=GBK", - "output": "text/html;charset=GBK", - "navigable": true, - "encoding": "GBK" - }, - "Legacy comment syntax", - { - "input": "text/html;charset=gbk(", - "output": "text/html;charset=\"gbk(\"", - "navigable": true, - "encoding": null - }, - { - "input": "text/html;x=(;charset=gbk", - "output": "text/html;x=\"(\";charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - "Duplicate parameter", - { - "input": "text/html;charset=gbk;charset=windows-1255", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset=();charset=GBK", - "output": "text/html;charset=\"()\"", - "navigable": true, - "encoding": null - }, - "Spaces", - { - "input": "text/html;charset =gbk", - "output": "text/html", - "navigable": true, - "encoding": null - }, - { - "input": "text/html ;charset=gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html; charset=gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset= gbk", - "output": "text/html;charset=\" gbk\"", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset= \"gbk\"", - "output": "text/html;charset=\" \\\"gbk\\\"\"", - "navigable": true, - "encoding": null - }, - "0x0B and 0x0C", - { - "input": "text/html;charset=\u000Bgbk", - "output": "text/html", - "navigable": true, - "encoding": null - }, - { - "input": "text/html;charset=\u000Cgbk", - "output": "text/html", - "navigable": true, - "encoding": null - }, - { - "input": "text/html;\u000Bcharset=gbk", - "output": "text/html", - "navigable": true, - "encoding": null - }, - { - "input": "text/html;\u000Ccharset=gbk", - "output": "text/html", - "navigable": true, - "encoding": null - }, - "Single quotes are a token, not a delimiter", - { - "input": "text/html;charset='gbk'", - "output": "text/html;charset='gbk'", - "navigable": true, - "encoding": null - }, - { - "input": "text/html;charset='gbk", - "output": "text/html;charset='gbk", - "navigable": true, - "encoding": null - }, - { - "input": "text/html;charset=gbk'", - "output": "text/html;charset=gbk'", - "navigable": true, - "encoding": null - }, - { - "input": "text/html;charset=';charset=GBK", - "output": "text/html;charset='", - "navigable": true, - "encoding": null - }, - "Invalid parameters", - { - "input": "text/html;test;charset=gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;test=;charset=gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;';charset=gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;\";charset=gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html ; ; charset=gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;;;;charset=gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset= \"\u007F;charset=GBK", - "output": "text/html;charset=GBK", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset=\"\u007F;charset=foo\";charset=GBK", - "output": "text/html;charset=GBK", - "navigable": true, - "encoding": "GBK" - }, - "Double quotes", - { - "input": "text/html;charset=\"gbk\"", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset=\"gbk", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset=gbk\"", - "output": "text/html;charset=\"gbk\\\"\"", - "navigable": true, - "encoding": null - }, - { - "input": "text/html;charset=\" gbk\"", - "output": "text/html;charset=\" gbk\"", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset=\"gbk \"", - "output": "text/html;charset=\"gbk \"", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset=\"\\ gbk\"", - "output": "text/html;charset=\" gbk\"", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset=\"\\g\\b\\k\"", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset=\"gbk\"x", - "output": "text/html;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - { - "input": "text/html;charset=\"\";charset=GBK", - "output": "text/html;charset=\"\"", - "navigable": true, - "encoding": null - }, - { - "input": "text/html;charset=\";charset=GBK", - "output": "text/html;charset=\";charset=GBK\"", - "navigable": true, - "encoding": null - }, - "Unexpected code points", - { - "input": "text/html;charset={gbk}", - "output": "text/html;charset=\"{gbk}\"", - "navigable": true, - "encoding": null - }, - "Parameter name longer than 127", - { - "input": "text/html;0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789=x;charset=gbk", - "output": "text/html;0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789=x;charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - "type/subtype longer than 127", - { - "input": "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789", - "output": "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789/0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" - }, - "Valid", - { - "input": "!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz;!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz=!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", - "output": "!#$%&'*+-.^_`|~0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz/!#$%&'*+-.^_`|~0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz;!#$%&'*+-.^_`|~0123456789abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz=!#$%&'*+-.^_`|~0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - }, - { - "input": "x/x;x=\"\t !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"", - "output": "x/x;x=\"\t !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u0080\u0081\u0082\u0083\u0084\u0085\u0086\u0087\u0088\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090\u0091\u0092\u0093\u0094\u0095\u0096\u0097\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7\u00A8\u00A9\u00AA\u00AB\u00AC\u00AD\u00AE\u00AF\u00B0\u00B1\u00B2\u00B3\u00B4\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC\u00CD\u00CE\u00CF\u00D0\u00D1\u00D2\u00D3\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB\u00FC\u00FD\u00FE\u00FF\"" - }, - "End-of-file handling", - { - "input": "x/x;test", - "output": "x/x" - }, - { - "input": "x/x;test=\"\\", - "output": "x/x;test=\"\\\\\"" - }, - "Whitespace (not handled by generated-mime-types.json or above)", - { - "input": "x/x;x= ", - "output": "x/x" - }, - { - "input": "x/x;x=\t", - "output": "x/x" - }, - { - "input": "x/x\n\r\t ;x=x", - "output": "x/x;x=x" - }, - { - "input": "\n\r\t x/x;x=x\n\r\t ", - "output": "x/x;x=x" - }, - { - "input": "x/x;\n\r\t x=x\n\r\t ;x=y", - "output": "x/x;x=x" - }, - "Latin1", - { - "input": "text/html;test=\u00FF;charset=gbk", - "output": "text/html;test=\"\u00FF\";charset=gbk", - "navigable": true, - "encoding": "GBK" - }, - ">Latin1", - { - "input": "x/x;test=\uFFFD;x=x", - "output": "x/x;x=x" - }, - "Failure", - { - "input": "\u000Bx/x", - "output": null - }, - { - "input": "\u000Cx/x", - "output": null - }, - { - "input": "x/x\u000B", - "output": null - }, - { - "input": "x/x\u000C", - "output": null - }, - { - "input": "", - "output": null - }, - { - "input": "\t", - "output": null - }, - { - "input": "/", - "output": null - }, - { - "input": "bogus", - "output": null - }, - { - "input": "bogus/", - "output": null - }, - { - "input": "bogus/ ", - "output": null - }, - { - "input": "bogus/bogus/;", - "output": null - }, - { - "input": "", - "output": null - }, - { - "input": "(/)", - "output": null - }, - { - "input": "ÿ/ÿ", - "output": null - }, - { - "input": "text/html(;doesnot=matter", - "output": null - }, - { - "input": "{/}", - "output": null - }, - { - "input": "\u0100/\u0100", - "output": null - }, - { - "input": "text /html", - "output": null - }, - { - "input": "text/ html", - "output": null - }, - { - "input": "\"text/html\"", - "output": null - } -] diff --git a/tests/cases/Util/MimeTypeTest.php b/tests/cases/Util/MimeTypeTest.php deleted file mode 100644 index 823d479..0000000 --- a/tests/cases/Util/MimeTypeTest.php +++ /dev/null @@ -1,42 +0,0 @@ -assertNull(Mime::parse($input)); - } else { - $this->assertSame($exp, (string) Mime::parse($input)); - } - } - - public function provideStandardTests(): iterable { - foreach (new \GlobIterator(__DIR__."/Mime/*.json", \FilesystemIterator::CURRENT_AS_PATHNAME | \FilesystemIterator::KEY_AS_FILENAME) as $file => $path) { - $indexOffset = 0; - $description = ""; - foreach (json_decode(file_get_contents($path)) as $index => $test) { - if (is_string($test)) { - // the array member is a description of the next member - // the index offset should be decremented, the description stored, and this entry skipped - $indexOffset--; - $description = $test; - continue; - } else { - $index += $indexOffset; - $description = $description ? ": $description" : ""; - yield "$file #$index$description" => [$test->input, $test->output]; - $description = null; - } - } - } - } -}