From 80d540885ec6b0e630eac9e52f88736a7b8e87a4 Mon Sep 17 00:00:00 2001 From: George Steel Date: Fri, 3 Jul 2026 18:19:11 +0100 Subject: [PATCH 1/5] Install and configure Mago. Remove PHPStan and PHPCode_Sniffer Signed-off-by: George Steel --- composer.json | 4 +- composer.lock | 5126 +++++++++---------------------------------------- mago.toml | 52 + 3 files changed, 916 insertions(+), 4266 deletions(-) create mode 100644 mago.toml diff --git a/composer.json b/composer.json index 111c4310..8e4a737c 100644 --- a/composer.json +++ b/composer.json @@ -45,12 +45,10 @@ "psr/http-message": "^1.0.1 || ^2.0.0" }, "require-dev": { - "laminas/laminas-coding-standard": "^3.1.0", "laminas/laminas-diactoros": "^3.8.0", "laminas/laminas-translator": "^2.0", "phpunit/phpunit": "^11.5.55", - "psalm/plugin-phpunit": "^0.19.7", - "vimeo/psalm": "^6.16.1" + "carthage-software/mago": "^1.42.0" }, "suggest": { "laminas/laminas-i18n": "Laminas\\I18n component to allow translation of validation error messages", diff --git a/composer.lock b/composer.lock index 45b1da28..05d93f8a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d7c5e41eaf8a6bae0b4aab517023bc44", + "content-hash": "5907701247d5ea240e8153dec8094401", "packages": [ { "name": "brick/varexporter", @@ -255,19 +255,20 @@ }, { "name": "nikic/php-parser", - "version": "v5.8.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", - "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { + "ext-ctype": "*", "ext-json": "*", "ext-tokenizer": "*", "php": ">=7.4" @@ -306,9 +307,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2026-07-04T14:30:18+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "psr/container", @@ -526,3351 +527,403 @@ ], "packages-dev": [ { - "name": "amphp/amp", - "version": "v3.1.2", + "name": "carthage-software/mago", + "version": "1.42.0", "source": { "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "2f3ebed5a4f663968a0590dbb7654a8b32cb63cb" + "url": "https://github.com/carthage-software/mago.git", + "reference": "1e843d2e6e95f186022b6752768f12795fec513a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/2f3ebed5a4f663968a0590dbb7654a8b32cb63cb", - "reference": "2f3ebed5a4f663968a0590dbb7654a8b32cb63cb", + "url": "https://api.github.com/repos/carthage-software/mago/zipball/1e843d2e6e95f186022b6752768f12795fec513a", + "reference": "1e843d2e6e95f186022b6752768f12795fec513a", "shasum": "" }, "require": { - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" + "php": "~8.1 || ~8.2 || ~8.3 || ~8.4 || ~8.5 || ~8.6" }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.1" + "suggest": { + "ext-curl": "To show binary download progress" }, + "bin": [ + "composer/bin/mago" + ], "type": "library", "autoload": { "files": [ - "src/functions.php", - "src/Future/functions.php", - "src/Internal/functions.php" + "composer/src/functions.php", + "composer/src/internal.php" ], "psr-4": { - "Amp\\": "src" + "Mago\\": "composer/src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "MIT OR Apache-2.0" ], "authors": [ { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" + "name": "Saif Eddin Gmati", + "email": "azjezz@carthage.software" } ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", + "description": "Mago is a toolchain for PHP that aims to provide a set of tools to help developers write better code.", "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" + "dev" ], "support": { - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v3.1.2" + "issues": "https://github.com/carthage-software/mago/issues", + "source": "https://github.com/carthage-software/mago/tree/1.42.0" }, "funding": [ { - "url": "https://github.com/amphp", + "url": "https://github.com/azjezz", "type": "github" } ], - "time": "2026-06-21T13:59:44+00:00" + "time": "2026-06-27T12:36:52+00:00" }, { - "name": "amphp/byte-stream", - "version": "v2.1.2", + "name": "laminas/laminas-diactoros", + "version": "3.8.0", "source": { "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46" + "url": "https://github.com/laminas/laminas-diactoros.git", + "reference": "60c182916b2749480895601649563970f3f12ec4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/55a6bd071aec26fa2a3e002618c20c35e3df1b46", - "reference": "55a6bd071aec26fa2a3e002618c20c35e3df1b46", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/60c182916b2749480895601649563970f3f12ec4", + "reference": "60c182916b2749480895601649563970f3f12ec4", "shasum": "" }, "require": { - "amphp/amp": "^3", - "amphp/parser": "^1.1", - "amphp/pipeline": "^1", - "amphp/serialization": "^1", - "amphp/sync": "^2", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2.3" + "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", + "psr/http-factory": "^1.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "conflict": { + "amphp/amp": "<2.6.4" + }, + "provide": { + "psr/http-factory-implementation": "^1.0", + "psr/http-message-implementation": "^1.1 || ^2.0" }, "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "5.22.1" + "ext-curl": "*", + "ext-dom": "*", + "ext-gd": "*", + "ext-libxml": "*", + "http-interop/http-factory-tests": "^2.2.0", + "laminas/laminas-coding-standard": "~3.1.0", + "php-http/psr7-integration-tests": "^1.4.0", + "phpunit/phpunit": "^10.5.36", + "psalm/plugin-phpunit": "^0.19.5", + "vimeo/psalm": "^6.13" }, "type": "library", + "extra": { + "laminas": { + "module": "Laminas\\Diactoros", + "config-provider": "Laminas\\Diactoros\\ConfigProvider" + } + }, "autoload": { "files": [ - "src/functions.php", - "src/Internal/functions.php" + "src/functions/create_uploaded_file.php", + "src/functions/marshal_headers_from_sapi.php", + "src/functions/marshal_method_from_sapi.php", + "src/functions/marshal_protocol_version_from_sapi.php", + "src/functions/normalize_server.php", + "src/functions/normalize_uploaded_files.php", + "src/functions/parse_cookie_header.php" ], "psr-4": { - "Amp\\ByteStream\\": "src" + "Laminas\\Diactoros\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } + "BSD-3-Clause" ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "https://amphp.org/byte-stream", + "description": "PSR HTTP Message implementations", + "homepage": "https://laminas.dev", "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" + "http", + "laminas", + "psr", + "psr-17", + "psr-7" ], "support": { - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v2.1.2" + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-diactoros/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-diactoros/issues", + "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", + "source": "https://github.com/laminas/laminas-diactoros" }, "funding": [ { - "url": "https://github.com/amphp", - "type": "github" + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" } ], - "time": "2025-03-16T17:10:27+00:00" + "time": "2025-10-12T15:31:36+00:00" }, { - "name": "amphp/cache", - "version": "v2.0.1", + "name": "myclabs/deep-copy", + "version": "1.13.4", "source": { "type": "git", - "url": "https://github.com/amphp/cache.git", - "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/cache/zipball/46912e387e6aa94933b61ea1ead9cf7540b7797c", - "reference": "46912e387e6aa94933b61ea1ead9cf7540b7797c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { - "amphp/amp": "^3", - "amphp/serialization": "^1", - "amphp/sync": "^2", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "^5.4" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], "psr-4": { - "Amp\\Cache\\": "src" + "DeepCopy\\": "src/DeepCopy/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - } + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" ], - "description": "A fiber-aware cache API based on Amp and Revolt.", - "homepage": "https://amphp.org/cache", "support": { - "issues": "https://github.com/amphp/cache/issues", - "source": "https://github.com/amphp/cache/tree/v2.0.1" + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { - "url": "https://github.com/amphp", - "type": "github" + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" } ], - "time": "2024-04-19T03:38:06+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { - "name": "amphp/dns", - "version": "v2.4.0", + "name": "phar-io/manifest", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/amphp/dns.git", - "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71" + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/dns/zipball/78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", - "reference": "78eb3db5fc69bf2fc0cb503c4fcba667bc223c71", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/cache": "^2", - "amphp/parser": "^1", - "amphp/process": "^2", - "daverandom/libdns": "^2.0.2", - "ext-filter": "*", - "ext-json": "*", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "5.20" + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Amp\\Dns\\": "src" + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Chris Wright", - "email": "addr@daverandom.com" - }, - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Async DNS resolution for Amp.", - "homepage": "https://github.com/amphp/dns", - "keywords": [ - "amp", - "amphp", - "async", - "client", - "dns", - "resolve" - ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { - "issues": "https://github.com/amphp/dns/issues", - "source": "https://github.com/amphp/dns/tree/v2.4.0" + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, "funding": [ { - "url": "https://github.com/amphp", + "url": "https://github.com/theseer", "type": "github" } ], - "time": "2025-01-19T15:43:40+00:00" + "time": "2024-03-03T12:33:53+00:00" }, { - "name": "amphp/parallel", - "version": "v2.4.0", + "name": "phar-io/version", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/amphp/parallel.git", - "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81" + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/37f5b2754fadc229c00f9416bd68fb8d04529a81", - "reference": "37f5b2754fadc229c00f9416bd68fb8d04529a81", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/cache": "^2", - "amphp/parser": "^1", - "amphp/pipeline": "^1", - "amphp/process": "^2", - "amphp/serialization": "^1", - "amphp/socket": "^2", - "amphp/sync": "^2", - "php": ">=8.1", - "revolt/event-loop": "^1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.1" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { - "files": [ - "src/Context/functions.php", - "src/Context/Internal/functions.php", - "src/Ipc/functions.php", - "src/Worker/functions.php" - ], - "psr-4": { - "Amp\\Parallel\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Parallel processing component for Amp.", - "homepage": "https://github.com/amphp/parallel", - "keywords": [ - "async", - "asynchronous", - "concurrent", - "multi-processing", - "multi-threading" - ], + "description": "Library for handling version information and constraints", "support": { - "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v2.4.0" + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2026-05-16T16:54:01+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { - "name": "amphp/parser", - "version": "v1.1.1", + "name": "phpunit/php-code-coverage", + "version": "11.0.12", "source": { "type": "git", - "url": "https://github.com/amphp/parser.git", - "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parser/zipball/3cf1f8b32a0171d4b1bed93d25617637a77cded7", - "reference": "3cf1f8b32a0171d4b1bed93d25617637a77cded7", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", "shasum": "" }, "require": { - "php": ">=7.4" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.7.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.1", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.3.1" }, "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "phpunit/phpunit": "^9", - "psalm/phar": "^5.4" + "phpunit/phpunit": "^11.5.46" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", - "autoload": { - "psr-4": { - "Amp\\Parser\\": "src" + "extra": { + "branch-alias": { + "dev-main": "11.0.x-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A generator parser to make streaming parsers simple.", - "homepage": "https://github.com/amphp/parser", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "async", - "non-blocking", - "parser", - "stream" + "coverage", + "testing", + "xunit" ], "support": { - "issues": "https://github.com/amphp/parser/issues", - "source": "https://github.com/amphp/parser/tree/v1.1.1" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" }, "funding": [ { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-03-21T19:16:53+00:00" - }, - { - "name": "amphp/pipeline", - "version": "v1.2.5", - "source": { - "type": "git", - "url": "https://github.com/amphp/pipeline.git", - "reference": "92f121dde31cd1d89d5d0f9eba64ac40271b236e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/pipeline/zipball/92f121dde31cd1d89d5d0f9eba64ac40271b236e", - "reference": "92f121dde31cd1d89d5d0f9eba64ac40271b236e", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "php": ">=8.1", - "revolt/event-loop": "^1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Amp\\Pipeline\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Asynchronous iterators and operators.", - "homepage": "https://amphp.org/pipeline", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "iterator", - "non-blocking" - ], - "support": { - "issues": "https://github.com/amphp/pipeline/issues", - "source": "https://github.com/amphp/pipeline/tree/v1.2.5" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2026-06-27T14:17:20+00:00" - }, - { - "name": "amphp/process", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/amphp/process.git", - "reference": "583959df17d00304ad7b0b32285373f985935643" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/process/zipball/583959df17d00304ad7b0b32285373f985935643", - "reference": "583959df17d00304ad7b0b32285373f985935643", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/sync": "^2", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.1" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Amp\\Process\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A fiber-aware process manager based on Amp and Revolt.", - "homepage": "https://amphp.org/process", - "support": { - "issues": "https://github.com/amphp/process/issues", - "source": "https://github.com/amphp/process/tree/v2.1.0" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2026-05-31T15:11:55+00:00" - }, - { - "name": "amphp/serialization", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/amphp/serialization.git", - "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/serialization/zipball/fdf2834d78cebb0205fb2672676c1b1eb84371f0", - "reference": "fdf2834d78cebb0205fb2672676c1b1eb84371f0", - "shasum": "" - }, - "require": { - "php": ">=7.4" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "ext-json": "*", - "ext-zlib": "*", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.1" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Amp\\Serialization\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Serialization tools for IPC and data storage in PHP.", - "homepage": "https://github.com/amphp/serialization", - "keywords": [ - "async", - "asynchronous", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/amphp/serialization/issues", - "source": "https://github.com/amphp/serialization/tree/v1.1.0" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2026-04-05T15:59:53+00:00" - }, - { - "name": "amphp/socket", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/amphp/socket.git", - "reference": "dadb63c5d3179fd83803e29dfeac27350e619314" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/socket/zipball/dadb63c5d3179fd83803e29dfeac27350e619314", - "reference": "dadb63c5d3179fd83803e29dfeac27350e619314", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/dns": "^2", - "ext-openssl": "*", - "kelunik/certificate": "^1.1", - "league/uri": "^7", - "league/uri-interfaces": "^7", - "php": ">=8.1", - "revolt/event-loop": "^1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "amphp/process": "^2", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.1" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php", - "src/Internal/functions.php", - "src/SocketAddress/functions.php" - ], - "psr-4": { - "Amp\\Socket\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Lowrey", - "email": "rdlowrey@gmail.com" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Non-blocking socket connection / server implementations based on Amp and Revolt.", - "homepage": "https://github.com/amphp/socket", - "keywords": [ - "amp", - "async", - "encryption", - "non-blocking", - "sockets", - "tcp", - "tls" - ], - "support": { - "issues": "https://github.com/amphp/socket/issues", - "source": "https://github.com/amphp/socket/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2026-04-19T15:09:56+00:00" - }, - { - "name": "amphp/sync", - "version": "v2.3.0", - "source": { - "type": "git", - "url": "https://github.com/amphp/sync.git", - "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/sync/zipball/217097b785130d77cfcc58ff583cf26cd1770bf1", - "reference": "217097b785130d77cfcc58ff583cf26cd1770bf1", - "shasum": "" - }, - "require": { - "amphp/amp": "^3", - "amphp/pipeline": "^1", - "amphp/serialization": "^1", - "php": ">=8.1", - "revolt/event-loop": "^1 || ^0.2" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "amphp/phpunit-util": "^3", - "phpunit/phpunit": "^9", - "psalm/phar": "5.23" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Amp\\Sync\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - }, - { - "name": "Stephen Coakley", - "email": "me@stephencoakley.com" - } - ], - "description": "Non-blocking synchronization primitives for PHP based on Amp and Revolt.", - "homepage": "https://github.com/amphp/sync", - "keywords": [ - "async", - "asynchronous", - "mutex", - "semaphore", - "synchronization" - ], - "support": { - "issues": "https://github.com/amphp/sync/issues", - "source": "https://github.com/amphp/sync/tree/v2.3.0" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2024-08-03T19:31:26+00:00" - }, - { - "name": "composer/pcre", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "d5a341b3fb61f3001970940afb1d332968a183ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed", - "reference": "d5a341b3fb61f3001970940afb1d332968a183ed", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<2.2.2" - }, - "require-dev": { - "phpstan/phpstan": "^2", - "phpstan/phpstan-deprecation-rules": "^2", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^9" - }, - "type": "library", - "extra": { - "phpstan": { - "includes": [ - "extension.neon" - ] - }, - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.4.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - } - ], - "time": "2026-06-07T11:47:49+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.4", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", - "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.4" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - } - ], - "time": "2025-08-20T19:15:30+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", - "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-05-06T16:37:16+00:00" - }, - { - "name": "danog/advanced-json-rpc", - "version": "v3.2.3", - "source": { - "type": "git", - "url": "https://github.com/danog/php-advanced-json-rpc.git", - "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/danog/php-advanced-json-rpc/zipball/ae703ea7b4811797a10590b6078de05b3b33dd91", - "reference": "ae703ea7b4811797a10590b6078de05b3b33dd91", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^5", - "php": ">=8.1", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0 || ^6" - }, - "replace": { - "felixfbecker/php-advanced-json-rpc": "^3" - }, - "require-dev": { - "phpunit/phpunit": "^9" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - }, - { - "name": "Daniil Gentili", - "email": "daniil@daniil.it" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/danog/php-advanced-json-rpc/issues", - "source": "https://github.com/danog/php-advanced-json-rpc/tree/v3.2.3" - }, - "time": "2026-01-12T21:07:10+00:00" - }, - { - "name": "daverandom/libdns", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/DaveRandom/LibDNS.git", - "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DaveRandom/LibDNS/zipball/b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", - "reference": "b84c94e8fe6b7ee4aecfe121bfe3b6177d303c8a", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "Required for IDN support" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "LibDNS\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "DNS protocol implementation written in pure PHP", - "keywords": [ - "dns" - ], - "support": { - "issues": "https://github.com/DaveRandom/LibDNS/issues", - "source": "https://github.com/DaveRandom/LibDNS/tree/v2.1.0" - }, - "time": "2024-04-12T12:12:48+00:00" - }, - { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v1.2.1", - "source": { - "type": "git", - "url": "https://github.com/PHPCSStandards/composer-installer.git", - "reference": "963f0c67bffde0eac41b56be71ac0e8ba132f0bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/963f0c67bffde0eac41b56be71ac0e8ba132f0bd", - "reference": "963f0c67bffde0eac41b56be71ac0e8ba132f0bd", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.2", - "php": ">=5.4", - "squizlabs/php_codesniffer": "^3.1.0 || ^4.0" - }, - "require-dev": { - "composer/composer": "^2.2", - "ext-json": "*", - "ext-zip": "*", - "php-parallel-lint/php-parallel-lint": "^1.4.0", - "phpcompatibility/php-compatibility": "^9.0 || ^10.0.0@dev", - "yoast/phpunit-polyfills": "^1.0" - }, - "type": "composer-plugin", - "extra": { - "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" - }, - "autoload": { - "psr-4": { - "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Franck Nijhof", - "email": "opensource@frenck.dev", - "homepage": "https://frenck.dev", - "role": "Open source developer" - }, - { - "name": "Contributors", - "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" - } - ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcbf", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" - ], - "support": { - "issues": "https://github.com/PHPCSStandards/composer-installer/issues", - "security": "https://github.com/PHPCSStandards/composer-installer/security/policy", - "source": "https://github.com/PHPCSStandards/composer-installer" - }, - "funding": [ - { - "url": "https://github.com/PHPCSStandards", - "type": "github" - }, - { - "url": "https://github.com/jrfnl", - "type": "github" - }, - { - "url": "https://opencollective.com/php_codesniffer", - "type": "open_collective" - }, - { - "url": "https://thanks.dev/u/gh/phpcsstandards", - "type": "thanks_dev" - } - ], - "time": "2026-05-06T08:26:05+00:00" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - }, - "time": "2019-12-04T15:06:13+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.6", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", - "reference": "d4fe3e6fd9bb9e72557a19674f44d8ac7db4c6ca", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<=7.5 || >=14" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^12 || ^14", - "phpstan/phpstan": "1.4.10 || 2.1.30", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12.4 || ^13.0", - "psr/log": "^1 || ^2 || ^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.6" - }, - "time": "2026-02-07T07:09:04+00:00" - }, - { - "name": "felixfbecker/language-server-protocol", - "version": "v1.5.3", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9", - "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "LanguageServerProtocol\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "PHP classes for the Language Server Protocol", - "keywords": [ - "language", - "microsoft", - "php", - "server" - ], - "support": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" - }, - "time": "2024-04-30T00:40:11+00:00" - }, - { - "name": "fidry/cpu-core-counter", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", - "reference": "db9508f7b1474469d9d3c53b86f817e344732678", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "fidry/php-cs-fixer-config": "^1.1.2", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-deprecation-rules": "^2.0.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^8.5.31 || ^9.5.26", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], - "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2025-08-14T07:29:31+00:00" - }, - { - "name": "kelunik/certificate", - "version": "v1.1.3", - "source": { - "type": "git", - "url": "https://github.com/kelunik/certificate.git", - "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kelunik/certificate/zipball/7e00d498c264d5eb4f78c69f41c8bd6719c0199e", - "reference": "7e00d498c264d5eb4f78c69f41c8bd6719c0199e", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "php": ">=7.0" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "^2", - "phpunit/phpunit": "^6 | 7 | ^8 | ^9" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Kelunik\\Certificate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Access certificate details and transform between different formats.", - "keywords": [ - "DER", - "certificate", - "certificates", - "openssl", - "pem", - "x509" - ], - "support": { - "issues": "https://github.com/kelunik/certificate/issues", - "source": "https://github.com/kelunik/certificate/tree/v1.1.3" - }, - "time": "2023-02-03T21:26:53+00:00" - }, - { - "name": "laminas/laminas-coding-standard", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-coding-standard.git", - "reference": "d4412caba9ed16c93cdcf301759f5ee71f9d9aea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-coding-standard/zipball/d4412caba9ed16c93cdcf301759f5ee71f9d9aea", - "reference": "d4412caba9ed16c93cdcf301759f5ee71f9d9aea", - "shasum": "" - }, - "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0", - "php": "^7.4 || ^8.0", - "slevomat/coding-standard": "^8.15.0", - "squizlabs/php_codesniffer": "^3.10", - "webimpress/coding-standard": "^1.3" - }, - "type": "phpcodesniffer-standard", - "autoload": { - "psr-4": { - "LaminasCodingStandard\\": "src/LaminasCodingStandard/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Laminas Coding Standard", - "homepage": "https://laminas.dev", - "keywords": [ - "Coding Standard", - "laminas" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-coding-standard/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-coding-standard/issues", - "rss": "https://github.com/laminas/laminas-coding-standard/releases.atom", - "source": "https://github.com/laminas/laminas-coding-standard" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-05-13T08:37:04+00:00" - }, - { - "name": "laminas/laminas-diactoros", - "version": "3.8.0", - "source": { - "type": "git", - "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "60c182916b2749480895601649563970f3f12ec4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/60c182916b2749480895601649563970f3f12ec4", - "reference": "60c182916b2749480895601649563970f3f12ec4", - "shasum": "" - }, - "require": { - "php": "~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", - "psr/http-factory": "^1.1", - "psr/http-message": "^1.1 || ^2.0" - }, - "conflict": { - "amphp/amp": "<2.6.4" - }, - "provide": { - "psr/http-factory-implementation": "^1.0", - "psr/http-message-implementation": "^1.1 || ^2.0" - }, - "require-dev": { - "ext-curl": "*", - "ext-dom": "*", - "ext-gd": "*", - "ext-libxml": "*", - "http-interop/http-factory-tests": "^2.2.0", - "laminas/laminas-coding-standard": "~3.1.0", - "php-http/psr7-integration-tests": "^1.4.0", - "phpunit/phpunit": "^10.5.36", - "psalm/plugin-phpunit": "^0.19.5", - "vimeo/psalm": "^6.13" - }, - "type": "library", - "extra": { - "laminas": { - "module": "Laminas\\Diactoros", - "config-provider": "Laminas\\Diactoros\\ConfigProvider" - } - }, - "autoload": { - "files": [ - "src/functions/create_uploaded_file.php", - "src/functions/marshal_headers_from_sapi.php", - "src/functions/marshal_method_from_sapi.php", - "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/normalize_server.php", - "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php" - ], - "psr-4": { - "Laminas\\Diactoros\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "PSR HTTP Message implementations", - "homepage": "https://laminas.dev", - "keywords": [ - "http", - "laminas", - "psr", - "psr-17", - "psr-7" - ], - "support": { - "chat": "https://laminas.dev/chat", - "docs": "https://docs.laminas.dev/laminas-diactoros/", - "forum": "https://discourse.laminas.dev", - "issues": "https://github.com/laminas/laminas-diactoros/issues", - "rss": "https://github.com/laminas/laminas-diactoros/releases.atom", - "source": "https://github.com/laminas/laminas-diactoros" - }, - "funding": [ - { - "url": "https://funding.communitybridge.org/projects/laminas-project", - "type": "community_bridge" - } - ], - "time": "2025-10-12T15:31:36+00:00" - }, - { - "name": "league/uri", - "version": "7.8.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri.git", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", - "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", - "shasum": "" - }, - "require": { - "league/uri-interfaces": "^7.8.1", - "php": "^8.1", - "psr/http-factory": "^1" - }, - "conflict": { - "league/uri-schemes": "^1.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-dom": "to convert the URI into an HTML anchor tag", - "ext-fileinfo": "to create Data URI from file contennts", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "ext-uri": "to use the PHP native URI class", - "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", - "league/uri-components": "to provide additional tools to manipulate URI objects components", - "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", - "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "URI manipulation library", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "URN", - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "middleware", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc2141", - "rfc3986", - "rfc3987", - "rfc6570", - "rfc8141", - "uri", - "uri-template", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.8.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2026-03-15T20:22:25+00:00" - }, - { - "name": "league/uri-interfaces", - "version": "7.8.1", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", - "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^8.1", - "psr/http-message": "^1.1 || ^2.0" - }, - "suggest": { - "ext-bcmath": "to improve IPV4 host parsing", - "ext-gmp": "to improve IPV4 host parsing", - "ext-intl": "to handle IDN host with the best performance", - "php-64bit": "to improve IPV4 host parsing", - "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", - "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.x-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Uri\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://nyamsprod.com" - } - ], - "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", - "homepage": "https://uri.thephpleague.com", - "keywords": [ - "data-uri", - "file-uri", - "ftp", - "hostname", - "http", - "https", - "parse_str", - "parse_url", - "psr-7", - "query-string", - "querystring", - "rfc3986", - "rfc3987", - "rfc6570", - "uri", - "url", - "ws" - ], - "support": { - "docs": "https://uri.thephpleague.com", - "forum": "https://thephpleague.slack.com", - "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/nyamsprod", - "type": "github" - } - ], - "time": "2026-03-08T20:05:35+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.13.4", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-08-01T08:46:24+00:00" - }, - { - "name": "netresearch/jsonmapper", - "version": "v5.0.1", - "source": { - "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "980674efdda65913492d29a8fd51c82270dd37bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/980674efdda65913492d29a8fd51c82270dd37bb", - "reference": "980674efdda65913492d29a8fd51c82270dd37bb", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "JsonMapper": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes", - "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v5.0.1" - }, - "time": "2026-02-22T16:28:03+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2024-03-03T12:33:53+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "6.0.3", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/7bae67520aa9f5ecc506d646810bd40d9da54582", - "reference": "7bae67520aa9f5ecc506d646810bd40d9da54582", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^2.0", - "phpstan/phpdoc-parser": "^2.0", - "webmozart/assert": "^1.9.1 || ^2" - }, - "require-dev": { - "mockery/mockery": "~1.3.5 || ~1.6.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "psalm/phar": "^5.26", - "shipmonk/dead-code-detector": "^0.5.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/6.0.3" - }, - "time": "2026-03-18T20:49:53+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/327a05bbee54120d4786a0dc67aad30226ad4cf9", - "reference": "327a05bbee54120d4786a0dc67aad30226ad4cf9", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.4", - "phpstan/phpstan": "^2.1", - "phpstan/phpstan-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "psalm/phar": "^4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev", - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/2.0.0" - }, - "time": "2026-01-06T21:53:42+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "2.3.2", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", - "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^5.3.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^2.0", - "phpstan/phpstan-phpunit": "^2.0", - "phpstan/phpstan-strict-rules": "^2.0", - "phpunit/phpunit": "^9.6", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" - }, - "time": "2026-01-25T14:56:51+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "11.0.12", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", - "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^5.7.0", - "php": ">=8.2", - "phpunit/php-file-iterator": "^5.1.0", - "phpunit/php-text-template": "^4.0.1", - "sebastian/code-unit-reverse-lookup": "^4.0.1", - "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.1", - "sebastian/lines-of-code": "^3.0.1", - "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.3.1" - }, - "require-dev": { - "phpunit/phpunit": "^11.5.46" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "11.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", - "type": "tidelift" - } - ], - "time": "2025-12-24T07:01:01+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "5.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", - "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", - "type": "tidelift" - } - ], - "time": "2026-02-02T13:52:54+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "5.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", - "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^11.0" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:07:44+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:08:43+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "7.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T05:09:35+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "11.5.55", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00", - "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.4", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=8.2", - "phpunit/php-code-coverage": "^11.0.12", - "phpunit/php-file-iterator": "^5.1.1", - "phpunit/php-invoker": "^5.0.1", - "phpunit/php-text-template": "^4.0.1", - "phpunit/php-timer": "^7.0.1", - "sebastian/cli-parser": "^3.0.2", - "sebastian/code-unit": "^3.0.3", - "sebastian/comparator": "^6.3.3", - "sebastian/diff": "^6.0.2", - "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.2", - "sebastian/global-state": "^7.0.2", - "sebastian/object-enumerator": "^6.0.1", - "sebastian/recursion-context": "^6.0.3", - "sebastian/type": "^5.1.3", - "sebastian/version": "^5.0.2", - "staabm/side-effects-detector": "^1.0.5" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "11.5-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2026-02-18T12:37:06+00:00" - }, - { - "name": "psalm/plugin-phpunit", - "version": "0.19.7", - "source": { - "type": "git", - "url": "https://github.com/psalm/psalm-plugin-phpunit.git", - "reference": "143f9d5e049fffcdbc0da3fbb99f6149f9d3e2dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/143f9d5e049fffcdbc0da3fbb99f6149f9d3e2dc", - "reference": "143f9d5e049fffcdbc0da3fbb99f6149f9d3e2dc", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "php": ">=8.1", - "vimeo/psalm": "dev-master || ^6.10.0" - }, - "conflict": { - "phpspec/prophecy": "<1.20.0", - "phpspec/prophecy-phpunit": "<2.3.0", - "phpunit/phpunit": "<8.5.1" - }, - "require-dev": { - "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", - "squizlabs/php_codesniffer": "^3.3.1", - "weirdan/prophecy-shim": "^1.0 || ^2.0" - }, - "type": "psalm-plugin", - "extra": { - "psalm": { - "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin" - } - }, - "autoload": { - "psr-4": { - "Psalm\\PhpUnitPlugin\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matt Brown", - "email": "github@muglug.com" - } - ], - "description": "Psalm plugin for PHPUnit", - "support": { - "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues", - "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.19.7" - }, - "time": "2025-03-31T18:49:55+00:00" - }, - { - "name": "psr/log", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "revolt/event-loop", - "version": "v1.0.9", - "source": { - "type": "git", - "url": "https://github.com/revoltphp/event-loop.git", - "reference": "44061cf513e53c6200372fc935ac42271566295d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/44061cf513e53c6200372fc935ac42271566295d", - "reference": "44061cf513e53c6200372fc935ac42271566295d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^9", - "psalm/phar": "6.16.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Revolt\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "ceesjank@gmail.com" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "Rock-solid event loop for concurrent PHP applications.", - "keywords": [ - "async", - "asynchronous", - "concurrency", - "event", - "event-loop", - "non-blocking", - "scheduler" - ], - "support": { - "issues": "https://github.com/revoltphp/event-loop/issues", - "source": "https://github.com/revoltphp/event-loop/tree/v1.0.9" - }, - "time": "2026-05-16T17:55:38+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", - "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:41:36+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", - "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2025-03-19T07:56:08+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", - "reference": "183a9b2632194febd219bb9246eee421dad8d45e", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:45:54+00:00" - }, - { - "name": "sebastian/comparator", - "version": "6.3.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", - "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/diff": "^6.0", - "sebastian/exporter": "^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^11.4" - }, - "suggest": { - "ext-bcmath": "For comparing BcMath\\Number objects" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", - "type": "tidelift" - } - ], - "time": "2026-01-24T09:26:40+00:00" - }, - { - "name": "sebastian/complexity", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", - "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:49:50+00:00" - }, - { - "name": "sebastian/diff", - "version": "6.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", - "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "6.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:53:05+00:00" - }, - { - "name": "sebastian/environment", - "version": "7.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", - "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", + "url": "https://github.com/sebastianbergmann", "type": "github" }, { @@ -3882,30 +935,28 @@ "type": "thanks_dev" }, { - "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", "type": "tidelift" } ], - "time": "2025-05-21T11:55:47+00:00" + "time": "2025-12-24T07:01:01+00:00" }, { - "name": "sebastian/exporter", - "version": "6.3.2", + "name": "phpunit/php-file-iterator", + "version": "5.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", - "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/2f3a64888c814fc235386b7387dd5b5ed92ad903", + "reference": "2f3a64888c814fc235386b7387dd5b5ed92ad903", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=8.2", - "sebastian/recursion-context": "^6.0" + "php": ">=8.2" }, "require-dev": { "phpunit/phpunit": "^11.3" @@ -3913,7 +964,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.3-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -3928,35 +979,20 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "export", - "exporter" + "filesystem", + "iterator" ], "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.1" }, "funding": [ { @@ -3972,158 +1008,40 @@ "type": "thanks_dev" }, { - "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", "type": "tidelift" } ], - "time": "2025-09-24T06:12:51+00:00" - }, - { - "name": "sebastian/global-state", - "version": "7.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", - "reference": "3be331570a721f9a4b5917f4209773de17f747d7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "7.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "https://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:57:36+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "3.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^5.0", - "php": ">=8.2" - }, - "require-dev": { - "phpunit/phpunit": "^11.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2024-07-03T04:58:38+00:00" + "time": "2026-02-02T13:52:54+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "6.0.1", + "name": "phpunit/php-invoker", + "version": "5.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", - "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": ">=8.2", - "sebastian/object-reflector": "^4.0", - "sebastian/recursion-context": "^6.0" + "php": ">=8.2" }, "require-dev": { + "ext-pcntl": "*", "phpunit/phpunit": "^11.0" }, + "suggest": { + "ext-pcntl": "*" + }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4138,15 +1056,19 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" }, "funding": [ { @@ -4154,20 +1076,20 @@ "type": "github" } ], - "time": "2024-07-03T05:00:13+00:00" + "time": "2024-07-03T05:07:44+00:00" }, { - "name": "sebastian/object-reflector", + "name": "phpunit/php-text-template", "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", - "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { @@ -4194,15 +1116,19 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" }, "funding": [ { @@ -4210,32 +1136,32 @@ "type": "github" } ], - "time": "2024-07-03T05:01:32+00:00" + "time": "2024-07-03T05:08:43+00:00" }, { - "name": "sebastian/recursion-context", - "version": "6.0.3", + "name": "phpunit/php-timer", + "version": "7.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", - "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -4250,71 +1176,87 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://liberapay.com/sebastianbergmann", - "type": "liberapay" - }, - { - "url": "https://thanks.dev/u/gh/sebastianbergmann", - "type": "thanks_dev" - }, - { - "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", - "type": "tidelift" } ], - "time": "2025-08-13T04:42:22+00:00" + "time": "2024-07-03T05:09:35+00:00" }, { - "name": "sebastian/type", - "version": "5.1.3", + "name": "phpunit/phpunit", + "version": "11.5.55", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", - "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/adc7262fccc12de2b30f12a8aa0b33775d814f00", + "reference": "adc7262fccc12de2b30f12a8aa0b33775d814f00", "shasum": "" }, "require": { - "php": ">=8.2" + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.12", + "phpunit/php-file-iterator": "^5.1.1", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.3", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.2", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/recursion-context": "^6.0.3", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, - "require-dev": { - "phpunit/phpunit": "^11.3" + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "11.5-dev" } }, "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], "classmap": [ "src/" ] @@ -4330,14 +1272,23 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.55" }, "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, { "url": "https://github.com/sebastianbergmann", "type": "github" @@ -4351,33 +1302,36 @@ "type": "thanks_dev" }, { - "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], - "time": "2025-08-09T06:55:48+00:00" + "time": "2026-02-18T12:37:06+00:00" }, { - "name": "sebastian/version", - "version": "5.0.2", + "name": "sebastian/cli-parser", + "version": "3.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", - "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { "php": ">=8.2" }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -4396,12 +1350,12 @@ "role": "lead" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" }, "funding": [ { @@ -4409,1125 +1363,906 @@ "type": "github" } ], - "time": "2024-10-09T05:16:32+00:00" + "time": "2024-07-03T04:41:36+00:00" }, { - "name": "slevomat/coding-standard", - "version": "8.22.1", + "name": "sebastian/code-unit", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/slevomat/coding-standard.git", - "reference": "1dd80bf3b93692bedb21a6623c496887fad05fec" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/1dd80bf3b93692bedb21a6623c496887fad05fec", - "reference": "1dd80bf3b93692bedb21a6623c496887fad05fec", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.1.2", - "php": "^7.4 || ^8.0", - "phpstan/phpdoc-parser": "^2.3.0", - "squizlabs/php_codesniffer": "^3.13.4" + "php": ">=8.2" }, "require-dev": { - "phing/phing": "3.0.1|3.1.0", - "php-parallel-lint/php-parallel-lint": "1.4.0", - "phpstan/phpstan": "2.1.24", - "phpstan/phpstan-deprecation-rules": "2.0.3", - "phpstan/phpstan-phpunit": "2.0.7", - "phpstan/phpstan-strict-rules": "2.0.6", - "phpunit/phpunit": "9.6.8|10.5.48|11.4.4|11.5.36|12.3.10" - }, - "type": "phpcodesniffer-standard", + "phpunit/phpunit": "^11.5" + }, + "type": "library", "extra": { "branch-alias": { - "dev-master": "8.x-dev" + "dev-main": "3.0-dev" } }, "autoload": { - "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", - "keywords": [ - "dev", - "phpcs" + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { - "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.22.1" + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" }, "funding": [ { - "url": "https://github.com/kukulich", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", - "type": "tidelift" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "time": "2025-09-13T08:53:30+00:00" + "time": "2025-03-19T07:56:08+00:00" }, { - "name": "spatie/array-to-xml", - "version": "3.4.4", + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/spatie/array-to-xml.git", - "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/88b2f3852a922dd73177a68938f8eb2ec70c7224", - "reference": "88b2f3852a922dd73177a68938f8eb2ec70c7224", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "ext-dom": "*", - "php": "^8.0" + "php": ">=8.2" }, "require-dev": { - "mockery/mockery": "^1.2", - "pestphp/pest": "^1.21", - "spatie/pest-plugin-snapshots": "^1.1" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { - "psr-4": { - "Spatie\\ArrayToXml\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://freek.dev", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Convert an array to xml", - "homepage": "https://github.com/spatie/array-to-xml", - "keywords": [ - "array", - "convert", - "xml" - ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { - "source": "https://github.com/spatie/array-to-xml/tree/3.4.4" + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" }, "funding": [ { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2025-12-15T09:00:41+00:00" + "time": "2024-07-03T04:45:54+00:00" }, { - "name": "squizlabs/php_codesniffer", - "version": "3.13.5", + "name": "sebastian/comparator", + "version": "6.3.3", "source": { "type": "git", - "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4", - "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", + "reference": "2c95e1e86cb8dd41beb8d502057d1081ccc8eca9", "shasum": "" }, "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, - "bin": [ - "bin/phpcbf", - "bin/phpcs" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { - "name": "Greg Sherwood", - "role": "Former lead" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Juliette Reinders Folmer", - "role": "Current lead" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "name": "Contributors", - "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" } ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "phpcs", - "standards", - "static analysis" + "comparator", + "compare", + "equality" ], "support": { - "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", - "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", - "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", - "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.3" }, "funding": [ { - "url": "https://github.com/PHPCSStandards", + "url": "https://github.com/sebastianbergmann", "type": "github" }, { - "url": "https://github.com/jrfnl", - "type": "github" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "url": "https://opencollective.com/php_codesniffer", - "type": "open_collective" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "url": "https://thanks.dev/u/gh/phpcsstandards", - "type": "thanks_dev" + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2025-11-04T16:30:35+00:00" + "time": "2026-01-24T09:26:40+00:00" }, { - "name": "staabm/side-effects-detector", - "version": "1.0.5", + "name": "sebastian/complexity", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/staabm/side-effects-detector.git", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", - "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.6", - "phpunit/phpunit": "^9.6.21", - "symfony/var-dumper": "^5.4.43", - "tomasvotruba/type-coverage": "1.0.0", - "tomasvotruba/unused-public": "1.0.0" + "phpunit/phpunit": "^11.0" }, "type": "library", - "autoload": { - "classmap": [ - "lib/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A static analysis tool to detect side effects in PHP code", - "keywords": [ - "static analysis" - ], - "support": { - "issues": "https://github.com/staabm/side-effects-detector/issues", - "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" - }, - "funding": [ - { - "url": "https://github.com/staabm", - "type": "github" + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" } - ], - "time": "2024-10-20T05:08:20+00:00" - }, - { - "name": "symfony/console", - "version": "v7.4.14", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87", - "reference": "92f58bc4bf97a92ed1b9f367f0cd44f20bde0e87", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^7.2|^8.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/event-dispatcher": "^6.4|^7.0|^8.0", - "symfony/http-foundation": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/lock": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0", - "symfony/var-dumper": "^6.4|^7.0|^8.0" }, - "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", "support": { - "source": "https://github.com/symfony/console/tree/v7.4.14" + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2026-06-16T11:50:14+00:00" + "time": "2024-07-03T04:49:50+00:00" }, { - "name": "symfony/deprecation-contracts", - "version": "v3.7.1", + "name": "sebastian/diff", + "version": "6.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", - "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, "branch-alias": { - "dev-main": "3.7-dev" + "dev-main": "6.0-dev" } }, "autoload": { - "files": [ - "function.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2026-06-05T06:23:12+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { - "name": "symfony/filesystem", - "version": "v7.4.11", + "name": "sebastian/environment", + "version": "7.2.1", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/d721ea61b4a5fba8c5b6e7c1feda19efea144b50", - "reference": "d721ea61b4a5fba8c5b6e7c1feda19efea144b50", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" + "php": ">=8.2" }, "require-dev": { - "symfony/process": "^6.4|^7.0|^8.0" + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-posix": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.2-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.4.11" + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "url": "https://github.com/nicolas-grekas", - "type": "github" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", "type": "tidelift" } ], - "time": "2026-05-11T16:38:44+00:00" + "time": "2025-05-21T11:55:47+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.37.0", + "name": "sebastian/exporter", + "version": "6.3.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", - "reference": "141046a8f9477948ff284fa65be2095baafb94f2", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, - "suggest": { - "ext-ctype": "For best performance" + "require-dev": { + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "branch-alias": { + "dev-main": "6.3-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "export", + "exporter" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0" + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "url": "https://github.com/nicolas-grekas", - "type": "github" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", "type": "tidelift" } ], - "time": "2026-04-10T16:19:22+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.38.1", + "name": "sebastian/global-state", + "version": "7.0.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603", - "reference": "e9247d281d694a5120554d9afaf54e070e88a603", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "branch-alias": { + "dev-main": "7.0-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" + "global state" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1" + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2026-05-26T05:58:03+00:00" + "time": "2024-07-03T04:57:36+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.38.0", + "name": "sebastian/lines-of-code", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b", - "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "php": ">=7.2" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, - "suggest": { - "ext-intl": "For best performance" + "require-dev": { + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "branch-alias": { + "dev-main": "3.0-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "classmap": [ - "Resources/stubs" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0" + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2026-05-25T13:48:31+00:00" + "time": "2024-07-03T04:58:38+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.38.2", + "name": "sebastian/object-enumerator", + "version": "6.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", - "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "ext-iconv": "*", - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, - "suggest": { - "ext-mbstring": "For best performance" + "require-dev": { + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "branch-alias": { + "dev-main": "6.0-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://github.com/nicolas-grekas", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2026-05-27T06:59:30+00:00" + "time": "2024-07-03T05:00:13+00:00" }, { - "name": "symfony/polyfill-php84", - "version": "v1.38.1", + "name": "sebastian/object-reflector", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", - "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=7.2" + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" + "branch-alias": { + "dev-main": "4.0-dev" } }, "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php84\\": "" - }, "classmap": [ - "Resources/stubs" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + }, + "funding": [ { - "url": "https://github.com/nicolas-grekas", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2026-05-26T12:51:13+00:00" + "time": "2024-07-03T05:01:32+00:00" }, { - "name": "symfony/service-contracts", - "version": "v3.7.1", + "name": "sebastian/recursion-context", + "version": "6.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0", - "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" + "php": ">=8.2" }, - "conflict": { - "ext-psr": "<1.1|>=2" + "require-dev": { + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" - }, "branch-alias": { - "dev-main": "3.7-dev" + "dev-main": "6.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.7.1" + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "url": "https://github.com/nicolas-grekas", - "type": "github" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", "type": "tidelift" } ], - "time": "2026-06-16T09:55:08+00:00" + "time": "2025-08-13T04:42:22+00:00" }, { - "name": "symfony/string", - "version": "v7.4.13", + "name": "sebastian/type", + "version": "5.1.3", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/961683010db3b27ec6ebcd7308e6e1ee8fa7ffde", - "reference": "961683010db3b27ec6ebcd7308e6e1ee8fa7ffde", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.33", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" + "php": ">=8.2" }, "require-dev": { - "symfony/emoji": "^7.1|^8.0", - "symfony/http-client": "^6.4|^7.0|^8.0", - "symfony/intl": "^6.4|^7.0|^8.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0|^8.0" + "phpunit/phpunit": "^11.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "source": "https://github.com/symfony/string/tree/v7.4.13" + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "url": "https://github.com/fabpot", - "type": "github" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "url": "https://github.com/nicolas-grekas", - "type": "github" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", "type": "tidelift" } ], - "time": "2026-05-23T15:23:29+00:00" + "time": "2025-08-09T06:55:48+00:00" }, { - "name": "theseer/tokenizer", - "version": "1.3.1", + "name": "sebastian/version", + "version": "5.0.2", "source": { "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", - "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": ">=8.2" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -5539,262 +2274,127 @@ ], "authors": [ { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" }, "funding": [ { - "url": "https://github.com/theseer", + "url": "https://github.com/sebastianbergmann", "type": "github" } ], - "time": "2025-11-17T20:03:58+00:00" + "time": "2024-10-09T05:16:32+00:00" }, { - "name": "vimeo/psalm", - "version": "6.16.1", + "name": "staabm/side-effects-detector", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/vimeo/psalm.git", - "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac" + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", - "reference": "f1f5de594dc76faf8784e02d3dc4716c91c6f6ac", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", "shasum": "" }, "require": { - "amphp/amp": "^3", - "amphp/byte-stream": "^2", - "amphp/parallel": "^2.3", - "composer-runtime-api": "^2", - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^2.0 || ^3.0", - "danog/advanced-json-rpc": "^3.1", - "dnoegel/php-xdg-base-dir": "^0.1.1", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", "ext-tokenizer": "*", - "felixfbecker/language-server-protocol": "^1.5.3", - "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0", - "netresearch/jsonmapper": "^5.0", - "nikic/php-parser": "^5.0.0", - "php": "~8.1.31 || ~8.2.27 || ~8.3.16 || ~8.4.3 || ~8.5.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", - "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^6.0 || ^7.0 || ^8.0", - "symfony/filesystem": "~6.3.12 || ~6.4.3 || ^7.0.3 || ^8.0", - "symfony/polyfill-php84": "^1.31.0" - }, - "provide": { - "psalm/psalm": "self.version" + "php": "^7.4 || ^8.0" }, "require-dev": { - "amphp/phpunit-util": "^3", - "bamarni/composer-bin-plugin": "^1.4", - "brianium/paratest": "^6.9", - "danog/class-finder": "^0.4.8", - "dg/bypass-finals": "^1.5", - "ext-curl": "*", - "mockery/mockery": "^1.5", - "nunomaduro/mock-final-classes": "^1.1", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpdoc-parser": "^1.6", - "phpunit/phpunit": "^9.6", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.19", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^6.0 || ^7.0 || ^8.0" - }, - "suggest": { - "ext-curl": "In order to send data to shepherd", - "ext-igbinary": "^2.0.5 is required, used to serialize caching data" - }, - "bin": [ - "psalm", - "psalm-language-server", - "psalm-plugin", - "psalm-refactor", - "psalm-review", - "psalter" - ], - "type": "project", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev", - "dev-2.x": "2.x-dev", - "dev-3.x": "3.x-dev", - "dev-4.x": "4.x-dev", - "dev-5.x": "5.x-dev", - "dev-6.x": "6.x-dev", - "dev-master": "7.x-dev" - } + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" }, + "type": "library", "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - } + "classmap": [ + "lib/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Matthew Brown" - }, - { - "name": "Daniil Gentili", - "email": "daniil@daniil.it" - } - ], - "description": "A static analysis tool for finding errors in PHP applications", + "description": "A static analysis tool to detect side effects in PHP code", "keywords": [ - "code", - "inspection", - "php", "static analysis" ], "support": { - "docs": "https://psalm.dev/docs", - "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm" - }, - "time": "2026-03-19T10:56:09+00:00" - }, - { - "name": "webimpress/coding-standard", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/webimpress/coding-standard.git", - "reference": "6f6a1a90bd9e18fc8bee0660dd1d1ce68cf9fc53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webimpress/coding-standard/zipball/6f6a1a90bd9e18fc8bee0660dd1d1ce68cf9fc53", - "reference": "6f6a1a90bd9e18fc8bee0660dd1d1ce68cf9fc53", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0", - "squizlabs/php_codesniffer": "^3.10.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6.15" - }, - "type": "phpcodesniffer-standard", - "extra": { - "dev-master": "1.2.x-dev", - "dev-develop": "1.3.x-dev" - }, - "autoload": { - "psr-4": { - "WebimpressCodingStandard\\": "src/WebimpressCodingStandard/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "description": "Webimpress Coding Standard", - "keywords": [ - "Coding Standard", - "PSR-2", - "phpcs", - "psr-12", - "webimpress" - ], - "support": { - "issues": "https://github.com/webimpress/coding-standard/issues", - "source": "https://github.com/webimpress/coding-standard/tree/1.4.0" + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" }, "funding": [ { - "url": "https://github.com/michalbundyra", + "url": "https://github.com/staabm", "type": "github" } ], - "time": "2024-10-16T06:55:17+00:00" + "time": "2024-10-20T05:08:20+00:00" }, { - "name": "webmozart/assert", - "version": "2.4.1", + "name": "theseer/tokenizer", + "version": "1.3.1", "source": { "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70", - "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { - "ext-ctype": "*", - "ext-date": "*", - "ext-filter": "*", - "php": "^8.2" - }, - "suggest": { - "ext-intl": "", - "ext-simplexml": "", - "ext-spl": "" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" }, "type": "library", - "extra": { - "psalm": { - "pluginClass": "Webmozart\\Assert\\PsalmPlugin" - }, - "branch-alias": { - "dev-master": "2.0-dev", - "dev-feature/2-0": "2.0-dev" - } - }, "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Woody Gilk", - "email": "woody.gilk@gmail.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/2.4.1" + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, - "time": "2026-06-15T15:31:57+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], diff --git a/mago.toml b/mago.toml new file mode 100644 index 00000000..3d70d0dd --- /dev/null +++ b/mago.toml @@ -0,0 +1,52 @@ +#:schema https://mago.carthage.software/1.42.0/schema.json +# Welcome to Mago! +# For full documentation, see https://mago.carthage.software/1.42.0/en/tools/overview/ +version = "1" +php-version = "8.2.0" + +[source] +workspace = "." +paths = ["src/", "test/"] +includes = ["vendor"] +excludes = [] + +[source.glob] +literal-separator = true + +[formatter] +preset = "default" +preserve-breaking-member-access-chain = true +preserve-breaking-member-access-chain-first-method-on-same-line = true +preserve-breaking-argument-list = true +preserve-breaking-array-like = true +preserve-breaking-parameter-list = true +preserve-breaking-attribute-list = true +preserve-breaking-conditional-expression = true +preserve-breaking-condition-expression = true +preserve-redundant-logical-binary-expression-parentheses = true + +[linter] +integrations = ["phpunit"] + +[linter.rules] +ambiguous-function-call = { enabled = false } +literal-named-argument = { enabled = false } +halstead = { effort-threshold = 7000 } + +[analyzer] +plugins = [] +find-unused-definitions = true +find-unused-expressions = true +analyze-dead-code = true +memoize-properties = true +check-throws = true +unchecked-exceptions = ["Error", "LogicException"] +unchecked-exception-classes = [] +check-missing-override = false +find-unused-parameters = true +strict-list-index-checks = true +strict-array-index-existence = true +allow-array-truthy-operand = false +no-boolean-literal-comparison = false +check-missing-type-hints = true +register-super-globals = false From 2d8bb091d7c9b4fe51f82ec0b75d7bac6bb65724 Mon Sep 17 00:00:00 2001 From: George Steel Date: Fri, 3 Jul 2026 18:27:32 +0100 Subject: [PATCH 2/5] Initial configuration and formatting run Signed-off-by: George Steel --- mago.toml | 5 + src/AbstractValidator.php | 8 +- src/Barcode/Code128.php | 24 +- src/Barcode/Code93.php | 92 +- src/Barcode/Issn.php | 4 +- src/Barcode/Util.php | 2 +- src/BusinessIdentifierCode.php | 3 +- src/Callback.php | 2 +- src/Conditional.php | 2 +- src/CreditCard.php | 6 +- src/DateComparison.php | 8 +- src/DateStep.php | 56 +- src/EmailAddress.php | 26 +- src/EnumCase.php | 2 +- src/Exception/ExceptionInterface.php | 4 +- src/Exception/InvalidArgumentException.php | 4 +- src/Exception/RuntimeException.php | 4 +- src/Explode.php | 4 +- src/File/Bytes.php | 3 +- src/File/Count.php | 4 +- src/File/Exists.php | 5 +- src/File/FileInformation.php | 4 +- src/File/FilesSize.php | 14 +- src/File/ImageSize.php | 12 +- src/File/MimeType.php | 2 +- src/File/NotExists.php | 5 +- src/File/Size.php | 14 +- src/File/UploadFile.php | 2 +- src/File/WordCount.php | 8 +- src/GpsPoint.php | 2 +- src/Hostname.php | 309 +-- src/Hostname/Biz.php | 2024 ++++++++--------- src/Hostname/Cn.php | 613 ++--- src/Hostname/Com.php | 174 +- src/Hostname/Jp.php | 1419 ++++++------ src/Iban.php | 4 +- src/Identical.php | 11 +- src/InArray.php | 7 +- src/Ip.php | 19 +- src/Isbn.php | 6 +- src/NotEmpty.php | 18 +- src/NumberComparison.php | 7 +- src/Step.php | 2 +- src/StringLength.php | 4 +- src/UndisclosedPassword.php | 16 +- src/ValidatorChain.php | 2 +- src/ValidatorChainFactory.php | 6 +- src/ValidatorChainInterface.php | 4 +- src/ValidatorChainInvokableFactory.php | 2 +- test/AbstractValidatorTest.php | 11 +- test/BackedEnumValueTest.php | 2 +- test/BitwiseTest.php | 26 +- test/BusinessIdentifierCodeTest.php | 2 +- test/CallbackTest.php | 15 +- test/CreditCardTest.php | 34 +- test/DateComparisonTest.php | 114 +- test/DateIntervalStringTest.php | 2 +- test/DateStepTest.php | 90 +- test/DateTest.php | 86 +- test/DigitsTest.php | 28 +- test/EmailAddressTest.php | 11 +- test/EnumCaseTest.php | 2 +- test/File/BytesTest.php | 46 +- test/File/CountTest.php | 2 +- test/File/ExcludeExtensionTest.php | 2 +- test/File/ExistsTest.php | 46 +- test/File/ExtensionTest.php | 2 +- test/File/FilesSizeTest.php | 18 +- test/File/HashTest.php | 2 +- test/File/ImageSizeTest.php | 18 +- test/File/MimeTypeTest.php | 2 +- test/File/NotExistsTest.php | 34 +- test/File/UploadFileTest.php | 4 +- test/GPSPointTest.php | 18 +- test/HexTest.php | 2 +- test/HostnameTest.php | 147 +- test/IbanTest.php | 150 +- test/IdenticalTest.php | 14 +- test/InArrayTest.php | 12 +- test/IpTest.php | 74 +- test/IsArrayTest.php | 2 +- test/IsJsonStringTest.php | 64 +- test/IsbnTest.php | 4 +- test/KeyExistsTest.php | 2 +- test/MessageTest.php | 14 +- test/NotEmptyTest.php | 4 +- test/NumberComparisonTest.php | 2 +- test/RegexTest.php | 19 +- test/StepTest.php | 2 +- test/StringLengthTest.php | 4 +- test/TestAsset/CustomTraversable.php | 6 +- test/TestAsset/HttpClientException.php | 4 +- test/TestAsset/InMemoryContainer.php | 3 +- test/TestAsset/Translator.php | 8 +- test/TimezoneTest.php | 80 +- test/UndisclosedPasswordTest.php | 17 +- test/UriTest.php | 22 +- test/ValidatorChainInvokableFactoryTest.php | 9 +- test/ValidatorChainTest.php | 9 +- ...alidatorPluginManagerCompatibilityTest.php | 9 +- test/ValidatorPluginManagerTest.php | 23 +- 101 files changed, 3280 insertions(+), 3021 deletions(-) diff --git a/mago.toml b/mago.toml index 3d70d0dd..33bf5e67 100644 --- a/mago.toml +++ b/mago.toml @@ -15,6 +15,9 @@ literal-separator = true [formatter] preset = "default" + +align-assignment-like = true + preserve-breaking-member-access-chain = true preserve-breaking-member-access-chain-first-method-on-same-line = true preserve-breaking-argument-list = true @@ -25,6 +28,8 @@ preserve-breaking-conditional-expression = true preserve-breaking-condition-expression = true preserve-redundant-logical-binary-expression-parentheses = true +space-after-logical-not-unary-prefix-operator = true + [linter] integrations = ["phpunit"] diff --git a/src/AbstractValidator.php b/src/AbstractValidator.php index 2e7908de..f6cb556c 100644 --- a/src/AbstractValidator.php +++ b/src/AbstractValidator.php @@ -38,9 +38,7 @@ * ... * } */ -abstract class AbstractValidator implements - Translator\TranslatorAwareInterface, - ValidatorInterface +abstract class AbstractValidator implements Translator\TranslatorAwareInterface, ValidatorInterface { /** * The value to be validated @@ -95,7 +93,7 @@ abstract class AbstractValidator implements private string $translatorTextDomain = 'default'; /** A custom translator, the default translator, or null */ - private TranslatorInterface|null $translator = null; + private ?TranslatorInterface $translator = null; /** * Error messages that have occurred during the last validation @@ -212,7 +210,7 @@ private function createMessage(string $messageKey, mixed $value): ?string } $length = self::$messageLength; - if (($length > -1) && (strlen($message) > $length)) { + if ($length > -1 && strlen($message) > $length) { $message = substr($message, 0, $length - 3) . '...'; } diff --git a/src/Barcode/Code128.php b/src/Barcode/Code128.php index 7daf0b81..5ed4a53f 100644 --- a/src/Barcode/Code128.php +++ b/src/Barcode/Code128.php @@ -132,7 +132,7 @@ private function code128(string $value): bool $value = $strWrapper->substr($value, 1, null); assert($value !== false); - while ($strWrapper->strpos($value, 'Š') !== false || ($value !== '')) { + while ($strWrapper->strpos($value, 'Š') !== false || $value !== '') { $char = $strWrapper->substr($value, 0, 1); if ($read === 'C') { $char = $strWrapper->substr($value, 0, 2); @@ -151,19 +151,19 @@ private function code128(string $value): bool // Switch to C case 'â': $sum += $pos * $this->ord128($char, $set); - $set = 'C'; + $set = 'C'; break; // Switch to B case 'ä': $sum += $pos * $this->ord128($char, $set); - $set = 'B'; + $set = 'B'; break; // Switch to A case 'à': $sum += $pos * $this->ord128($char, $set); - $set = 'A'; + $set = 'A'; break; case '‡': @@ -184,14 +184,14 @@ private function code128(string $value): bool $value = $strWrapper->substr($value, 1); assert($value !== false); ++$pos; - if (($strWrapper->strpos($value, 'Š') === 1) && ($strWrapper->strlen($value) === 2)) { + if ($strWrapper->strpos($value, 'Š') === 1 && $strWrapper->strlen($value) === 2) { // break by stop and checksum char break; } $read = $set; } - if (($strWrapper->strpos($value, 'Š') !== 1) || ($strWrapper->strlen($value) !== 2)) { + if ($strWrapper->strpos($value, 'Š') !== 1 || $strWrapper->strlen($value) !== 2) { // return false if checksum is not readable and true if no startvalue is detected return false; } @@ -212,9 +212,9 @@ private function getCodingSet(string $value): string $value = $this->utf8StringWrapper->substr($value, 0, 1); return match ($value) { - '‡' => 'A', - 'ˆ' => 'B', - '‰' => 'C', + '‡' => 'A', + 'ˆ' => 'B', + '‰' => 'C', default => '', }; } @@ -260,9 +260,9 @@ private function ord128(string $value, string $set): int } } elseif ($set === 'C') { $val = (int) $value; - if (($val >= 0) && ($val <= 99)) { + if ($val >= 0 && $val <= 99) { return $val; - } elseif (($ord >= 132) && ($ord <= 138)) { + } elseif ($ord >= 132 && $ord <= 138) { return $ord - 32; } else { return -1; @@ -315,7 +315,7 @@ private function chr128(int $value, string $set): int|string return chr($value + 32); } } elseif ($set === 'C') { - if (($value >= 0) && ($value <= 9)) { + if ($value >= 0 && $value <= 9) { return '0' . $value; } elseif ($value <= 99) { return (string) $value; diff --git a/src/Barcode/Code93.php b/src/Barcode/Code93.php index 5ec50270..b802c2c6 100644 --- a/src/Barcode/Code93.php +++ b/src/Barcode/Code93.php @@ -17,53 +17,53 @@ final class Code93 implements AdapterInterface * Note that the characters !"§& are only synonyms */ private const CHECK = [ - '0' => 0, - '1' => 1, - '2' => 2, - '3' => 3, - '4' => 4, - '5' => 5, - '6' => 6, - '7' => 7, - '8' => 8, - '9' => 9, - 'A' => 10, - 'B' => 11, - 'C' => 12, - 'D' => 13, - 'E' => 14, - 'F' => 15, - 'G' => 16, - 'H' => 17, - 'I' => 18, - 'J' => 19, - 'K' => 20, - 'L' => 21, - 'M' => 22, - 'N' => 23, - 'O' => 24, - 'P' => 25, - 'Q' => 26, - 'R' => 27, - 'S' => 28, - 'T' => 29, - 'U' => 30, - 'V' => 31, - 'W' => 32, - 'X' => 33, - 'Y' => 34, - 'Z' => 35, - '-' => 36, - '.' => 37, - ' ' => 38, - '$' => 39, - '/' => 40, - '+' => 41, - '%' => 42, - '!' => 43, - '"' => 44, + '0' => 0, + '1' => 1, + '2' => 2, + '3' => 3, + '4' => 4, + '5' => 5, + '6' => 6, + '7' => 7, + '8' => 8, + '9' => 9, + 'A' => 10, + 'B' => 11, + 'C' => 12, + 'D' => 13, + 'E' => 14, + 'F' => 15, + 'G' => 16, + 'H' => 17, + 'I' => 18, + 'J' => 19, + 'K' => 20, + 'L' => 21, + 'M' => 22, + 'N' => 23, + 'O' => 24, + 'P' => 25, + 'Q' => 26, + 'R' => 27, + 'S' => 28, + 'T' => 29, + 'U' => 30, + 'V' => 31, + 'W' => 32, + 'X' => 33, + 'Y' => 34, + 'Z' => 35, + '-' => 36, + '.' => 37, + ' ' => 38, + '$' => 39, + '/' => 40, + '+' => 41, + '%' => 42, + '!' => 43, + '"' => 44, '§' => 45, - '&' => 46, + '&' => 46, ]; private const ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.$/+%'; diff --git a/src/Barcode/Issn.php b/src/Barcode/Issn.php index b0a26935..2d07096a 100644 --- a/src/Barcode/Issn.php +++ b/src/Barcode/Issn.php @@ -71,13 +71,13 @@ private static function issnCheck(string $value): bool } $check %= 11; - $check = $check === 0 ? 0 : 11 - $check; + $check = $check === 0 ? 0 : 11 - $check; if ((string) $check === $checksum) { return true; } - if (($check === 10) && ($checksum === 'X')) { + if ($check === 10 && $checksum === 'X') { return true; } diff --git a/src/Barcode/Util.php b/src/Barcode/Util.php index 4d4fd51c..e11bdbe8 100644 --- a/src/Barcode/Util.php +++ b/src/Barcode/Util.php @@ -103,7 +103,7 @@ public static function postnet(string $value): bool } $check %= 10; - $check = 10 - $check; + $check = 10 - $check; return (string) $check === $checksum; } diff --git a/src/BusinessIdentifierCode.php b/src/BusinessIdentifierCode.php index 68bd8222..763b5ee8 100644 --- a/src/BusinessIdentifierCode.php +++ b/src/BusinessIdentifierCode.php @@ -319,7 +319,6 @@ public function isValid(mixed $value): bool private function isSwiftValidCountry(string $countryCode): bool { $countryCode = strtoupper($countryCode); - return in_array($countryCode, self::ISO_COUNTRIES, true) - || $countryCode === self::KOSOVO_EXCEPTION; + return in_array($countryCode, self::ISO_COUNTRIES, true) || $countryCode === self::KOSOVO_EXCEPTION; } } diff --git a/src/Callback.php b/src/Callback.php index 46d909bb..d478b0f1 100644 --- a/src/Callback.php +++ b/src/Callback.php @@ -72,7 +72,7 @@ public function __construct(array|callable $options) assert(is_bool($bind)); /** @psalm-var Closure(mixed...):bool $callback */ - $callback = $bind + $callback = $bind ? $callback(...)->bindTo($this) : $callback(...); $this->callback = $callback; diff --git a/src/Conditional.php b/src/Conditional.php index 53d815a3..e89428ef 100644 --- a/src/Conditional.php +++ b/src/Conditional.php @@ -30,7 +30,7 @@ public function __construct(ValidatorChainFactory $chainFactory, array $options) throw new InvalidArgumentException('The `rule` option must be callable'); } - $this->rule = ($rule)(...); + $this->rule = $rule(...); $this->chain = $chainFactory->fromArray($options['validators']); } diff --git a/src/CreditCard.php b/src/CreditCard.php index 07011337..afc5fd92 100644 --- a/src/CreditCard.php +++ b/src/CreditCard.php @@ -353,11 +353,11 @@ public function isValid( for ($i = $length - 2; $i >= 0; $i--) { $digit = $weight * (int) $value[$i]; - $sum += floor($digit / 10) + $digit % 10; - $weight = $weight % 2 + 1; + $sum += floor($digit / 10) + ($digit % 10); + $weight = ($weight % 2) + 1; } - $checksum = (10 - $sum % 10) % 10; + $checksum = (10 - ($sum % 10)) % 10; if ((string) $checksum !== $value[$length - 1]) { $this->error(self::CHECKSUM, $value); return false; diff --git a/src/DateComparison.php b/src/DateComparison.php index 2bdbf7b2..ff12b955 100644 --- a/src/DateComparison.php +++ b/src/DateComparison.php @@ -139,7 +139,7 @@ public function isValid(mixed $value): bool return true; } - private function valueToDate(string|DateTimeInterface $input): DateTimeInterface|null + private function valueToDate(string|DateTimeInterface $input): ?DateTimeInterface { if ($input instanceof DateTimeInterface) { return $this->w3cDateFromString($input->format('Y-m-d\TH:i:s')); @@ -166,7 +166,7 @@ private function valueToDate(string|DateTimeInterface $input): DateTimeInterface return null; } - private function dateInstanceBound(string|DateTimeInterface|null $dateTime): DateTimeInterface|null + private function dateInstanceBound(string|DateTimeInterface|null $dateTime): ?DateTimeInterface { if ($dateTime instanceof DateTimeInterface) { return $this->w3cDateFromString($dateTime->format('Y-m-d\TH:i:s')); @@ -192,7 +192,7 @@ private function dateInstanceBound(string|DateTimeInterface|null $dateTime): Dat ); } - private function isoDateFromString(string $input): DateTimeImmutable|null + private function isoDateFromString(string $input): ?DateTimeImmutable { if (! preg_match('/^\d{4}-[0-1]\d-[0-3]\d$/', $input)) { return null; @@ -204,7 +204,7 @@ private function isoDateFromString(string $input): DateTimeImmutable|null return $date; } - private function w3cDateFromString(string $input): DateTimeImmutable|null + private function w3cDateFromString(string $input): ?DateTimeImmutable { if (! preg_match('/^\d{4}-[0-1]\d-[0-3]\dT\d{1,2}:[0-5]\d:[0-5]\d$/', $input)) { return null; diff --git a/src/DateStep.php b/src/DateStep.php index 48f550a1..4b8e78c2 100644 --- a/src/DateStep.php +++ b/src/DateStep.php @@ -86,10 +86,7 @@ public function __construct(array $options = []) $step = $options['step'] ?? 'P1D'; $baseValue = $options['baseValue'] ?? null; - unset( - $options['step'], - $options['baseValue'], - ); + unset($options['step'], $options['baseValue']); parent::__construct($options); @@ -156,7 +153,7 @@ public function isValid(mixed $value): bool } $valueDate = $this->convertToDateTime($value, false); // avoid duplicate errors - $baseDate = $this->convertToDateTime($this->baseValue, false); + $baseDate = $this->convertToDateTime($this->baseValue, false); if (false === $valueDate || false === $baseDate) { return false; @@ -204,8 +201,10 @@ public function isValid(mixed $value): bool switch ($intervalUnit) { case 'years': if ( - 0 === $diffParts['months'] && 0 === $diffParts['days'] - && 0 === $diffParts['hours'] && 0 === $diffParts['minutes'] + 0 === $diffParts['months'] + && 0 === $diffParts['days'] + && 0 === $diffParts['hours'] + && 0 === $diffParts['minutes'] && 0 === $diffParts['seconds'] ) { if (($diffParts['years'] % $stepValue) === 0) { @@ -215,8 +214,10 @@ public function isValid(mixed $value): bool break; case 'months': if ( - 0 === $diffParts['days'] && 0 === $diffParts['hours'] - && 0 === $diffParts['minutes'] && 0 === $diffParts['seconds'] + 0 === $diffParts['days'] + && 0 === $diffParts['hours'] + && 0 === $diffParts['minutes'] + && 0 === $diffParts['seconds'] ) { $months = ($diffParts['years'] * 12) + $diffParts['months']; if (($months % $stepValue) === 0) { @@ -226,7 +227,8 @@ public function isValid(mixed $value): bool break; case 'days': if ( - 0 === $diffParts['hours'] && 0 === $diffParts['minutes'] + 0 === $diffParts['hours'] + && 0 === $diffParts['minutes'] && 0 === $diffParts['seconds'] ) { $days = (int) $timeDiff->format('%a'); // Total days @@ -246,7 +248,8 @@ public function isValid(mixed $value): bool if (1 === $stepValue) { if ( 'hours' === $intervalUnit - && 0 === $diffParts['minutes'] && 0 === $diffParts['seconds'] + && 0 === $diffParts['minutes'] + && 0 === $diffParts['seconds'] ) { return true; } elseif ('minutes' === $intervalUnit && 0 === $diffParts['seconds']) { @@ -282,9 +285,8 @@ public function isValid(mixed $value): bool } break; case 'seconds': - $seconds = ($diffParts['hours'] * 60 * 60) - + ($diffParts['minutes'] * 60) - + $diffParts['seconds']; + $seconds = + ($diffParts['hours'] * 60 * 60) + ($diffParts['minutes'] * 60) + $diffParts['seconds']; if (($seconds % $stepValue) === 0) { return true; } @@ -318,11 +320,11 @@ private function fallbackIncrementalIterationLogic( DateTimeInterface $valueDate, array $intervalParts, array $diffParts, - DateInterval $step + DateInterval $step, ): bool { [$minSteps, $requiredIterations] = $this->computeMinStepAndRequiredIterations($intervalParts, $diffParts); - $minimumInterval = $this->computeMinimumInterval($intervalParts, $minSteps); - $isIncrementalStepping = $baseDate < $valueDate; + $minimumInterval = $this->computeMinimumInterval($intervalParts, $minSteps); + $isIncrementalStepping = $baseDate < $valueDate; if ($baseDate instanceof DateTime) { $baseDate = DateTimeImmutable::createFromMutable($baseDate); @@ -337,8 +339,10 @@ private function fallbackIncrementalIterationLogic( } while ( - ($isIncrementalStepping && $baseDate < $valueDate) - || (! $isIncrementalStepping && $baseDate > $valueDate) + ($isIncrementalStepping + && $baseDate < $valueDate) + || (! $isIncrementalStepping + && $baseDate > $valueDate) ) { if ($isIncrementalStepping) { $baseDate = $baseDate->add($step); @@ -372,7 +376,7 @@ private function computeMinimumInterval(array $intervalParts, $minSteps): DateIn $intervalParts['days'] * $minSteps, $intervalParts['hours'] * $minSteps, $intervalParts['minutes'] * $minSteps, - $intervalParts['seconds'] * $minSteps + $intervalParts['seconds'] * $minSteps, )); } @@ -425,12 +429,14 @@ private function computeMinSteps(array $intervalParts, array $diffParts) */ private function computeIntervalMaxSeconds(array $intervalParts): int { - return ($intervalParts['years'] * 60 * 60 * 24 * 366) + return ( + ($intervalParts['years'] * 60 * 60 * 24 * 366) + ($intervalParts['months'] * 60 * 60 * 24 * 31) + ($intervalParts['days'] * 60 * 60 * 24) + ($intervalParts['hours'] * 60 * 60) + ($intervalParts['minutes'] * 60) - + $intervalParts['seconds']; + + $intervalParts['seconds'] + ); } /** @@ -441,11 +447,13 @@ private function computeIntervalMaxSeconds(array $intervalParts): int */ private function computeDiffMinSeconds(array $diffParts): int { - return ($diffParts['years'] * 60 * 60 * 24 * 365) + return ( + ($diffParts['years'] * 60 * 60 * 24 * 365) + ($diffParts['months'] * 60 * 60 * 24 * 28) + ($diffParts['days'] * 60 * 60 * 24) + ($diffParts['hours'] * 60 * 60) + ($diffParts['minutes'] * 60) - + $diffParts['seconds']; + + $diffParts['seconds'] + ); } } diff --git a/src/EmailAddress.php b/src/EmailAddress.php index 8918ecf9..41f358df 100644 --- a/src/EmailAddress.php +++ b/src/EmailAddress.php @@ -58,15 +58,15 @@ final class EmailAddress extends AbstractValidator /** @var array */ protected array $messageTemplates = [ - self::INVALID => "Invalid type given. String expected", - self::INVALID_FORMAT => "The input is not a valid email address. Use the basic format local-part@hostname", + self::INVALID => 'Invalid type given. String expected', + self::INVALID_FORMAT => 'The input is not a valid email address. Use the basic format local-part@hostname', self::INVALID_HOSTNAME => "'%hostname%' is not a valid hostname for the email address", self::INVALID_MX_RECORD => "'%hostname%' does not appear to have any valid MX or A records for the email address", self::INVALID_SEGMENT => "'%hostname%' is not in a routable network segment. The email address should not be resolved from public network", self::DOT_ATOM => "'%localPart%' can not be matched against dot-atom format", self::QUOTED_STRING => "'%localPart%' can not be matched against quoted-string format", self::INVALID_LOCAL_PART => "'%localPart%' is not a valid local part for the email address", - self::LENGTH_EXCEEDED => "The input exceeds the allowed length", + self::LENGTH_EXCEEDED => 'The input exceeds the allowed length', ]; // phpcs:enable @@ -103,12 +103,12 @@ public function __construct(array $options = []) $messages = $options['messages'] ?? []; $hostnameMessages = array_filter( $messages, - fn (string $value, string $key): bool => ! array_key_exists($key, $this->messageTemplates), + fn(string $value, string $key): bool => ! array_key_exists($key, $this->messageTemplates), ARRAY_FILTER_USE_BOTH, ); - $messages = array_filter( + $messages = array_filter( $messages, - fn (string $value, string $key): bool => array_key_exists($key, $this->messageTemplates), + fn(string $value, string $key): bool => array_key_exists($key, $this->messageTemplates), ARRAY_FILTER_USE_BOTH, ); @@ -117,10 +117,10 @@ public function __construct(array $options = []) 'allow' => $allow, 'messages' => $hostnameMessages, ]); - $this->useMxCheck = $options['useMxCheck'] ?? false; - $this->useDeepMxCheck = $options['useDeepMxCheck'] ?? false; - $this->useDomainCheck = $options['useDomainCheck'] ?? true; - $this->strict = $options['strict'] ?? true; + $this->useMxCheck = $options['useMxCheck'] ?? false; + $this->useDeepMxCheck = $options['useDeepMxCheck'] ?? false; + $this->useDomainCheck = $options['useDomainCheck'] ?? true; + $this->strict = $options['strict'] ?? true; unset( $options['allow'], @@ -186,7 +186,7 @@ private function validateLocalPart(string $localPart): bool // Try quoted string format (RFC 5321 Chapter 4.1.2) // Quoted-string characters are: DQUOTE *(qtext/quoted-pair) DQUOTE - $qtext = '\x20-\x21\x23-\x5b\x5d-\x7e'; // %d32-33 / %d35-91 / %d93-126 + $qtext = '\x20-\x21\x23-\x5b\x5d-\x7e'; // %d32-33 / %d35-91 / %d93-126 $quotedPair = '\x20-\x7e'; // %d92 %d32-126 if (preg_match('/^"([' . $qtext . ']|\x5c[' . $quotedPair . '])*"$/', $localPart)) { return true; @@ -356,7 +356,7 @@ public function isValid(mixed $value): bool $this->localPart = $localPart; $this->hostname = $hostname; - if ($this->strict && (strlen($localPart) > 64) || (strlen($hostname) > 255)) { + if ($this->strict && strlen($localPart) > 64 || strlen($hostname) > 255) { $length = false; $this->error(self::LENGTH_EXCEEDED); } @@ -370,7 +370,7 @@ public function isValid(mixed $value): bool $local = $this->validateLocalPart($localPart); // If both parts valid, return true - return ($local && $length) && (! $this->useDomainCheck || $hostnameValid !== false); + return $local && $length && (! $this->useDomainCheck || $hostnameValid !== false); } /** diff --git a/src/EnumCase.php b/src/EnumCase.php index 972850e6..43e93dbe 100644 --- a/src/EnumCase.php +++ b/src/EnumCase.php @@ -76,7 +76,7 @@ public function isValid(mixed $value): bool } $match = array_map( - static fn (UnitEnum|BackedEnum $case): string => $case->name, + static fn(UnitEnum|BackedEnum $case): string => $case->name, $this->enum::cases(), ); diff --git a/src/Exception/ExceptionInterface.php b/src/Exception/ExceptionInterface.php index 36a24812..19118927 100644 --- a/src/Exception/ExceptionInterface.php +++ b/src/Exception/ExceptionInterface.php @@ -4,6 +4,4 @@ namespace Laminas\Validator\Exception; -interface ExceptionInterface -{ -} +interface ExceptionInterface {} diff --git a/src/Exception/InvalidArgumentException.php b/src/Exception/InvalidArgumentException.php index 03c648e9..384eee94 100644 --- a/src/Exception/InvalidArgumentException.php +++ b/src/Exception/InvalidArgumentException.php @@ -4,6 +4,4 @@ namespace Laminas\Validator\Exception; -final class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface -{ -} +final class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface {} diff --git a/src/Exception/RuntimeException.php b/src/Exception/RuntimeException.php index 36cdce59..2d282def 100644 --- a/src/Exception/RuntimeException.php +++ b/src/Exception/RuntimeException.php @@ -4,6 +4,4 @@ namespace Laminas\Validator\Exception; -final class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} +final class RuntimeException extends \RuntimeException implements ExceptionInterface {} diff --git a/src/Explode.php b/src/Explode.php index e2c7066e..19f994f6 100644 --- a/src/Explode.php +++ b/src/Explode.php @@ -41,11 +41,11 @@ final class Explode extends AbstractValidator /** @var non-empty-string */ private readonly string $valueDelimiter; - private ValidatorPluginManager|null $pluginManager; + private ?ValidatorPluginManager $pluginManager; private readonly ValidatorInterface $validator; private readonly bool $breakOnFirstFailure; - protected int $count = 0; + protected int $count = 0; protected ?string $error = null; /** @var array> */ diff --git a/src/File/Bytes.php b/src/File/Bytes.php index abcfb4ad..60f3646e 100644 --- a/src/File/Bytes.php +++ b/src/File/Bytes.php @@ -24,8 +24,7 @@ final class Bytes { private function __construct( public readonly int $bytes, - ) { - } + ) {} public static function fromInteger(int $bytes): self { diff --git a/src/File/Count.php b/src/File/Count.php index f2efe44e..0e480d7d 100644 --- a/src/File/Count.php +++ b/src/File/Count.php @@ -44,8 +44,8 @@ final class Count extends AbstractValidator ]; protected int $count; - protected readonly int|null $min; - protected readonly int|null $max; + protected readonly ?int $min; + protected readonly ?int $max; /** * Sets validator options diff --git a/src/File/Exists.php b/src/File/Exists.php index 97479409..28ed8eae 100644 --- a/src/File/Exists.php +++ b/src/File/Exists.php @@ -128,9 +128,8 @@ private function resolveDirectories(string|array|null $directories): array return array_values( array_filter( - array_map(static fn(string $directory): string - => trim($directory), $directories) - ) + array_map(static fn(string $directory): string => trim($directory), $directories), + ), ); } } diff --git a/src/File/FileInformation.php b/src/File/FileInformation.php index b146e8c8..4670b589 100644 --- a/src/File/FileInformation.php +++ b/src/File/FileInformation.php @@ -25,13 +25,13 @@ final class FileInformation { public readonly string $baseName; public readonly bool $readable; - private string|null $mediaType; + private ?string $mediaType; private function __construct( public readonly string $path, public readonly ?string $clientFileName, public readonly ?string $clientMediaType, - private Bytes|null $size, + private ?Bytes $size, ) { $this->readable = is_readable($this->path); $this->baseName = basename($this->path); diff --git a/src/File/FilesSize.php b/src/File/FilesSize.php index dc9ff336..853dc921 100644 --- a/src/File/FilesSize.php +++ b/src/File/FilesSize.php @@ -54,8 +54,8 @@ final class FilesSize extends AbstractValidator protected readonly string $minString; protected readonly string $maxString; - protected readonly int|null $min; - protected readonly int|null $max; + protected readonly ?int $min; + protected readonly ?int $max; private readonly bool $useByteString; /** @@ -93,11 +93,7 @@ public function __construct(array $options = []) throw new InvalidArgumentException('The `min` option cannot exceed the `max` option'); } - unset( - $options['min'], - $options['max'], - $options['useByteString'], - ); + unset($options['min'], $options['max'], $options['useByteString']); $this->minString = $this->min !== null && $this->useByteString ? Bytes::fromInteger($this->min)->toSiUnit() @@ -153,8 +149,8 @@ public function isValid(mixed $value): bool } $this->size = $this->useByteString - ? Bytes::fromInteger($size)->toSiUnit() - : (string) $size; + ? Bytes::fromInteger($size)->toSiUnit() + : (string) $size; if ($this->min !== null && $size < $this->min) { $this->error(self::TOO_SMALL); diff --git a/src/File/ImageSize.php b/src/File/ImageSize.php index f40791f0..2b8af289 100644 --- a/src/File/ImageSize.php +++ b/src/File/ImageSize.php @@ -61,17 +61,17 @@ final class ImageSize extends AbstractValidator /** * Detected width */ - protected int|null $width; + protected ?int $width; /** * Detected height */ - protected int|null $height; + protected ?int $height; protected readonly int $minWidth; - protected readonly int|null $maxWidth; + protected readonly ?int $maxWidth; protected readonly int $minHeight; - protected readonly int|null $maxHeight; + protected readonly ?int $maxHeight; /** * Sets validator options @@ -97,7 +97,7 @@ public function __construct(array $options) ); } - if (($minWidth > (int) $maxWidth) || ($minHeight > (int) $maxHeight)) { + if ($minWidth > (int) $maxWidth || $minHeight > (int) $maxHeight) { throw new InvalidArgumentException( 'Max width or height must exceed the minimum equivalent', ); @@ -140,7 +140,7 @@ public function isValid(mixed $value): bool $size = getimagesize($file->path); - if ($size === false || ($size[0] === 0) || ($size[1] === 0)) { + if ($size === false || $size[0] === 0 || $size[1] === 0) { $this->error(self::NOT_DETECTED); return false; } diff --git a/src/File/MimeType.php b/src/File/MimeType.php index de2f62f1..142a0f94 100644 --- a/src/File/MimeType.php +++ b/src/File/MimeType.php @@ -134,7 +134,7 @@ protected function resolveMimeType(string|array|null $types): array } return array_values(array_unique(array_filter(array_map( - static fn (string $type): string => trim($type), + static fn(string $type): string => trim($type), $types, )))); } diff --git a/src/File/NotExists.php b/src/File/NotExists.php index 05d6581d..a68820d7 100644 --- a/src/File/NotExists.php +++ b/src/File/NotExists.php @@ -120,9 +120,8 @@ private function resolveDirectories(string|array|null $directories): array return array_values( array_filter( - array_map(static fn(string $directory): string - => trim($directory), $directories) - ) + array_map(static fn(string $directory): string => trim($directory), $directories), + ), ); } } diff --git a/src/File/Size.php b/src/File/Size.php index 7e3f9346..df594950 100644 --- a/src/File/Size.php +++ b/src/File/Size.php @@ -51,8 +51,8 @@ final class Size extends AbstractValidator protected readonly string $minString; protected readonly string $maxString; - protected readonly int|null $min; - protected readonly int|null $max; + protected readonly ?int $min; + protected readonly ?int $max; private readonly bool $useByteString; /** @@ -90,11 +90,7 @@ public function __construct(array $options = []) throw new InvalidArgumentException('The `min` option cannot exceed the `max` option'); } - unset( - $options['min'], - $options['max'], - $options['useByteString'], - ); + unset($options['min'], $options['max'], $options['useByteString']); $this->minString = $this->min !== null && $this->useByteString ? Bytes::fromInteger($this->min)->toSiUnit() @@ -129,8 +125,8 @@ public function isValid(mixed $value): bool $size = $file->size()->bytes; $this->size = $this->useByteString - ? $file->size()->toSiUnit() - : (string) $size; + ? $file->size()->toSiUnit() + : (string) $size; if ($this->min !== null && $size < $this->min) { $this->error(self::TOO_SMALL); diff --git a/src/File/UploadFile.php b/src/File/UploadFile.php index 56d06cd9..522ea285 100644 --- a/src/File/UploadFile.php +++ b/src/File/UploadFile.php @@ -72,7 +72,7 @@ public function isValid(mixed $value): bool return $this->validateUploadedFile( $value['error'], $value['name'], - $value['tmp_name'] + $value['tmp_name'], ); } diff --git a/src/File/WordCount.php b/src/File/WordCount.php index 2c3d7502..3a3aed7d 100644 --- a/src/File/WordCount.php +++ b/src/File/WordCount.php @@ -54,8 +54,8 @@ final class WordCount extends AbstractValidator */ protected ?int $count = null; - protected readonly int|null $min; - protected readonly int|null $max; + protected readonly ?int $min; + protected readonly ?int $max; /** * Sets validator options @@ -110,12 +110,12 @@ public function isValid(mixed $value): bool assert(is_string($content)); $this->count = str_word_count($content); - if (($this->max !== null) && ($this->count > $this->max)) { + if ($this->max !== null && $this->count > $this->max) { $this->error(self::TOO_MUCH); return false; } - if (($this->min !== null) && ($this->count < $this->min)) { + if ($this->min !== null && $this->count < $this->min) { $this->error(self::TOO_LESS); return false; } diff --git a/src/GpsPoint.php b/src/GpsPoint.php index f64272ee..62072a54 100644 --- a/src/GpsPoint.php +++ b/src/GpsPoint.php @@ -95,7 +95,7 @@ private function convertValue(string $value): false|float return false; } - return $matches[1][0] + $matches[2][0] / 60 + ((float) $matches[3][0]) / 3600; + return $matches[1][0] + ($matches[2][0] / 60) + ((float) $matches[3][0] / 3600); } private function removeWhiteSpace(string $value): string diff --git a/src/Hostname.php b/src/Hostname.php index ad1dffe3..fb72dc05 100644 --- a/src/Hostname.php +++ b/src/Hostname.php @@ -66,17 +66,17 @@ final class Hostname extends AbstractValidator /** @var array */ protected array $messageTemplates = [ - self::CANNOT_DECODE_PUNYCODE => "The input appears to be a DNS hostname but the given punycode notation cannot be decoded", - self::INVALID => "Invalid type given. String expected", - self::INVALID_DASH => "The input appears to be a DNS hostname but contains a dash in an invalid position", - self::INVALID_HOSTNAME => "The input does not match the expected structure for a DNS hostname", + self::CANNOT_DECODE_PUNYCODE => 'The input appears to be a DNS hostname but the given punycode notation cannot be decoded', + self::INVALID => 'Invalid type given. String expected', + self::INVALID_DASH => 'The input appears to be a DNS hostname but contains a dash in an invalid position', + self::INVALID_HOSTNAME => 'The input does not match the expected structure for a DNS hostname', self::INVALID_HOSTNAME_SCHEMA => "The input appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%'", - self::INVALID_LOCAL_NAME => "The input does not appear to be a valid local network name", - self::INVALID_URI => "The input does not appear to be a valid URI hostname", - self::IP_ADDRESS_NOT_ALLOWED => "The input appears to be an IP address, but IP addresses are not allowed", - self::LOCAL_NAME_NOT_ALLOWED => "The input appears to be a local network name but local network names are not allowed", - self::UNDECIPHERABLE_TLD => "The input appears to be a DNS hostname but cannot extract TLD part", - self::UNKNOWN_TLD => "The input appears to be a DNS hostname but cannot match TLD against known list", + self::INVALID_LOCAL_NAME => 'The input does not appear to be a valid local network name', + self::INVALID_URI => 'The input does not appear to be a valid URI hostname', + self::IP_ADDRESS_NOT_ALLOWED => 'The input appears to be an IP address, but IP addresses are not allowed', + self::LOCAL_NAME_NOT_ALLOWED => 'The input appears to be a local network name but local network names are not allowed', + self::UNDECIPHERABLE_TLD => 'The input appears to be a DNS hostname but cannot extract TLD part', + self::UNKNOWN_TLD => 'The input appears to be a DNS hostname but cannot match TLD against known list', ]; /** @var array> */ @@ -84,11 +84,11 @@ final class Hostname extends AbstractValidator 'tld' => 'tld', ]; - public const ALLOW_DNS = 1; // Allows Internet domain names (e.g., example.com) - public const ALLOW_IP = 2; // Allows IP addresses - public const ALLOW_LOCAL = 4; // Allows local network names (e.g., localhost, www.localdomain) - public const ALLOW_URI = 8; // Allows URI hostnames - public const ALLOW_ALL = 15; // Allows all types of hostnames + public const ALLOW_DNS = 1; // Allows Internet domain names (e.g., example.com) + public const ALLOW_IP = 2; // Allows IP addresses + public const ALLOW_LOCAL = 4; // Allows local network names (e.g., localhost, www.localdomain) + public const ALLOW_URI = 8; // Allows URI hostnames + public const ALLOW_ALL = 15; // Allows all types of hostnames /** * Array of valid top-level-domains @@ -1594,23 +1594,29 @@ final class Hostname extends AbstractValidator * @var array> */ private array $validIdns = [ - 'AC' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu'], - 'AR' => [1 => '/^[\x{002d}0-9a-zà-ãç-êìíñ-õü]{1,63}$/iu'], - 'AS' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźż]{1,63}$/iu'], - 'AT' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿœšž]{1,63}$/iu'], - 'BIZ' => 'Hostname/Biz.php', - 'BR' => [1 => '/^[\x{002d}0-9a-zà-ãçéíó-õúü]{1,63}$/iu'], - 'BV' => [1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'], - 'CAT' => [1 => '/^[\x{002d}0-9a-z·àç-éíïòóúü]{1,63}$/iu'], - 'CH' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'], - 'CL' => [1 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu'], - 'CN' => 'Hostname/Cn.php', - 'COM' => 'Hostname/Com.php', - 'DE' => [1 => '/^[\x{002d}0-9a-záàăâåäãąāæćĉčċçďđéèĕêěëėęēğĝġģĥħíìĭîïĩįīıĵķĺľļłńňñņŋóòŏôöőõøōœĸŕřŗśŝšşßťţŧúùŭûůüűũųūŵýŷÿźžżðþ]{1,63}$/iu'], - 'DK' => [1 => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu'], - 'EE' => [1 => '/^[\x{002d}0-9a-zäõöüšž]{1,63}$/iu'], - 'ES' => [1 => '/^[\x{002d}0-9a-zàáçèéíïñòóúü·]{1,63}$/iu'], - 'EU' => [ + 'AC' => [ + 1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu', + ], + 'AR' => [1 => '/^[\x{002d}0-9a-zà-ãç-êìíñ-õü]{1,63}$/iu'], + 'AS' => [ + 1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźż]{1,63}$/iu', + ], + 'AT' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿœšž]{1,63}$/iu'], + 'BIZ' => 'Hostname/Biz.php', + 'BR' => [1 => '/^[\x{002d}0-9a-zà-ãçéíó-õúü]{1,63}$/iu'], + 'BV' => [1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'], + 'CAT' => [1 => '/^[\x{002d}0-9a-z·àç-éíïòóúü]{1,63}$/iu'], + 'CH' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'], + 'CL' => [1 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu'], + 'CN' => 'Hostname/Cn.php', + 'COM' => 'Hostname/Com.php', + 'DE' => [ + 1 => '/^[\x{002d}0-9a-záàăâåäãąāæćĉčċçďđéèĕêěëėęēğĝġģĥħíìĭîïĩįīıĵķĺľļłńňñņŋóòŏôöőõøōœĸŕřŗśŝšşßťţŧúùŭûůüűũųūŵýŷÿźžżðþ]{1,63}$/iu', + ], + 'DK' => [1 => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu'], + 'EE' => [1 => '/^[\x{002d}0-9a-zäõöüšž]{1,63}$/iu'], + 'ES' => [1 => '/^[\x{002d}0-9a-zàáçèéíïñòóúü·]{1,63}$/iu'], + 'EU' => [ 1 => '/^[\x{002d}0-9a-zà-öø-ÿ]{1,63}$/iu', 2 => '/^[\x{002d}0-9a-zāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĺļľŀłńņňʼnŋōŏőœŕŗřśŝšťŧũūŭůűųŵŷźżž]{1,63}$/iu', 3 => '/^[\x{002d}0-9a-zșț]{1,63}$/iu', @@ -1618,16 +1624,18 @@ final class Hostname extends AbstractValidator 5 => '/^[\x{002d}0-9a-zабвгдежзийклмнопрстуфхцчшщъыьэюя]{1,63}$/iu', 6 => '/^[\x{002d}0-9a-zἀ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ὼώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶᾷῂῃῄῆῇῐ-ῒΐῖῗῠ-ῧῲῳῴῶῷ]{1,63}$/iu', ], - 'FI' => [1 => '/^[\x{002d}0-9a-zäåö]{1,63}$/iu'], - 'GR' => [1 => '/^[\x{002d}0-9a-zΆΈΉΊΌΎ-ΡΣ-ώἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼῂῃῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲῳῴῶ-ῼ]{1,63}$/iu'], - 'HK' => 'Hostname/Cn.php', - 'HR' => [1 => '/^[\x{002d}0-9a-zžćčđš]{1,63}$/iu'], - 'HU' => [1 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu'], - 'IL' => [ + 'FI' => [1 => '/^[\x{002d}0-9a-zäåö]{1,63}$/iu'], + 'GR' => [ + 1 => '/^[\x{002d}0-9a-zΆΈΉΊΌΎ-ΡΣ-ώἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼῂῃῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲῳῴῶ-ῼ]{1,63}$/iu', + ], + 'HK' => 'Hostname/Cn.php', + 'HR' => [1 => '/^[\x{002d}0-9a-zžćčđš]{1,63}$/iu'], + 'HU' => [1 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu'], + 'IL' => [ 1 => '/^[\x{002d}0-9\x{05D0}-\x{05EA}]{1,63}$/iu', 2 => '/^[\x{002d}0-9a-z]{1,63}$/i', ], - 'INFO' => [ + 'INFO' => [ 1 => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu', 2 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu', 3 => '/^[\x{002d}0-9a-záæéíðóöúýþ]{1,63}$/iu', @@ -1637,19 +1645,23 @@ final class Hostname extends AbstractValidator 7 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu', 8 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu', ], - 'IO' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'], - 'IS' => [1 => '/^[\x{002d}0-9a-záéýúíóþæöð]{1,63}$/iu'], - 'IT' => [1 => '/^[\x{002d}0-9a-zàâäèéêëìîïòôöùûüæœçÿß-]{1,63}$/iu'], - 'JP' => 'Hostname/Jp.php', - 'KR' => [1 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu'], - 'LI' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'], - 'LT' => [1 => '/^[\x{002d}0-9ąčęėįšųūž]{1,63}$/iu'], - 'MD' => [1 => '/^[\x{002d}0-9ăâîşţ]{1,63}$/iu'], - 'MUSEUM' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćċčďđēėęěğġģħīįıķĺļľłńņňŋōőœŕŗřśşšţťŧūůűųŵŷźżžǎǐǒǔ\x{01E5}\x{01E7}\x{01E9}\x{01EF}ə\x{0292}ẁẃẅỳ]{1,63}$/iu'], - 'NET' => 'Hostname/Com.php', - 'NO' => [1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'], - 'NU' => 'Hostname/Com.php', - 'ORG' => [ + 'IO' => [ + 1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu', + ], + 'IS' => [1 => '/^[\x{002d}0-9a-záéýúíóþæöð]{1,63}$/iu'], + 'IT' => [1 => '/^[\x{002d}0-9a-zàâäèéêëìîïòôöùûüæœçÿß-]{1,63}$/iu'], + 'JP' => 'Hostname/Jp.php', + 'KR' => [1 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu'], + 'LI' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'], + 'LT' => [1 => '/^[\x{002d}0-9ąčęėįšųūž]{1,63}$/iu'], + 'MD' => [1 => '/^[\x{002d}0-9ăâîşţ]{1,63}$/iu'], + 'MUSEUM' => [ + 1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćċčďđēėęěğġģħīįıķĺļľłńņňŋōőœŕŗřśşšţťŧūůűųŵŷźżžǎǐǒǔ\x{01E5}\x{01E7}\x{01E9}\x{01EF}ə\x{0292}ẁẃẅỳ]{1,63}$/iu', + ], + 'NET' => 'Hostname/Com.php', + 'NO' => [1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'], + 'NU' => 'Hostname/Com.php', + 'ORG' => [ 1 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu', 2 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu', 3 => '/^[\x{002d}0-9a-záäåæéëíðóöøúüýþ]{1,63}$/iu', @@ -1658,8 +1670,8 @@ final class Hostname extends AbstractValidator 6 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu', 7 => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu', ], - 'PE' => [1 => '/^[\x{002d}0-9a-zñáéíóúü]{1,63}$/iu'], - 'PL' => [ + 'PE' => [1 => '/^[\x{002d}0-9a-zñáéíóúü]{1,63}$/iu'], + 'PL' => [ 1 => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu', 2 => '/^[\x{002d}а-ик-ш\x{0450}ѓѕјљњќџ]{1,63}$/iu', 3 => '/^[\x{002d}0-9a-zâîăşţ]{1,63}$/iu', @@ -1694,72 +1706,94 @@ final class Hostname extends AbstractValidator 32 => '/^[\x{002d}0-9а-щъыьэюяёєіїґ]{1,63}$/iu', 33 => '/^[\x{002d}0-9א-ת]{1,63}$/iu', ], - 'PR' => [1 => '/^[\x{002d}0-9a-záéíóúñäëïüöâêîôûàèùæçœãõ]{1,63}$/iu'], - 'PT' => [1 => '/^[\x{002d}0-9a-záàâãçéêíóôõú]{1,63}$/iu'], - 'RS' => [1 => '/^[\x{002d}0-9a-zßáâäçéëíîóôöúüýăąćčďđęěĺľłńňőŕřśşšţťůűźżž]{1,63}$/iu'], - 'RU' => [1 => '/^[\x{002d}0-9а-яё]{1,63}$/iu'], - 'SA' => [1 => '/^[\x{002d}.0-9\x{0621}-\x{063A}\x{0641}-\x{064A}\x{0660}-\x{0669}]{1,63}$/iu'], - 'SE' => [1 => '/^[\x{002d}0-9a-zäåéöü]{1,63}$/iu'], - 'SH' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'], - 'SI' => [ + 'PR' => [1 => '/^[\x{002d}0-9a-záéíóúñäëïüöâêîôûàèùæçœãõ]{1,63}$/iu'], + 'PT' => [1 => '/^[\x{002d}0-9a-záàâãçéêíóôõú]{1,63}$/iu'], + 'RS' => [1 => '/^[\x{002d}0-9a-zßáâäçéëíîóôöúüýăąćčďđęěĺľłńňőŕřśşšţťůűźżž]{1,63}$/iu'], + 'RU' => [1 => '/^[\x{002d}0-9а-яё]{1,63}$/iu'], + 'SA' => [1 => '/^[\x{002d}.0-9\x{0621}-\x{063A}\x{0641}-\x{064A}\x{0660}-\x{0669}]{1,63}$/iu'], + 'SE' => [1 => '/^[\x{002d}0-9a-zäåéöü]{1,63}$/iu'], + 'SH' => [ + 1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu', + ], + 'SI' => [ 1 => '/^[\x{002d}0-9a-zà-öø-ÿ]{1,63}$/iu', 2 => '/^[\x{002d}0-9a-zāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĺļľŀłńņňʼnŋōŏőœŕŗřśŝšťŧũūŭůűųŵŷźżž]{1,63}$/iu', 3 => '/^[\x{002d}0-9a-zșț]{1,63}$/iu', ], - 'SJ' => [1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'], - 'SWISS' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'], - 'TH' => [1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu'], - 'TM' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu'], - 'TW' => 'Hostname/Cn.php', - 'TR' => [1 => '/^[\x{002d}0-9a-zğıüşöç]{1,63}$/iu'], - 'UA' => [1 => '/^[\x{002d}0-9a-zабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџґӂʼ]{1,63}$/iu'], - 'VE' => [1 => '/^[\x{002d}0-9a-záéíóúüñ]{1,63}$/iu'], - 'VN' => [1 => '/^[ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíòóôõùúýĂăĐđĨĩŨũƠơƯư\x{1EA0}-\x{1EF9}]{1,63}$/iu'], - 'мон' => [1 => '/^[\x{002d}0-9\x{0430}-\x{044F}]{1,63}$/iu'], - 'срб' => [1 => '/^[\x{002d}0-9а-ик-шђјљњћџ]{1,63}$/iu'], - 'сайт' => [1 => '/^[\x{002d}0-9а-яёіїѝйўґг]{1,63}$/iu'], - 'онлайн' => [1 => '/^[\x{002d}0-9а-яёіїѝйўґг]{1,63}$/iu'], - '中国' => 'Hostname/Cn.php', - '中國' => 'Hostname/Cn.php', - 'ලංකා' => [1 => '/^[\x{0d80}-\x{0dff}]{1,63}$/iu'], - '香港' => 'Hostname/Cn.php', - '台湾' => 'Hostname/Cn.php', - '台灣' => 'Hostname/Cn.php', - 'امارات' => [1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'], - 'الاردن' => [1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'], - 'السعودية' => [1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'], - 'ไทย' => [1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu'], - 'рф' => [1 => '/^[\x{002d}0-9а-яё]{1,63}$/iu'], - 'تونس' => [1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'], - 'مصر' => [1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'], - 'இலங்கை' => [1 => '/^[\x{0b80}-\x{0bff}]{1,63}$/iu'], - 'فلسطين' => [1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'], - 'شبكة' => [1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'], + 'SJ' => [1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'], + 'SWISS' => [1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'], + 'TH' => [ + 1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu', + ], + 'TM' => [ + 1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu', + ], + 'TW' => 'Hostname/Cn.php', + 'TR' => [1 => '/^[\x{002d}0-9a-zğıüşöç]{1,63}$/iu'], + 'UA' => [ + 1 => '/^[\x{002d}0-9a-zабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџґӂʼ]{1,63}$/iu', + ], + 'VE' => [1 => '/^[\x{002d}0-9a-záéíóúüñ]{1,63}$/iu'], + 'VN' => [1 => '/^[ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíòóôõùúýĂăĐđĨĩŨũƠơƯư\x{1EA0}-\x{1EF9}]{1,63}$/iu'], + 'мон' => [1 => '/^[\x{002d}0-9\x{0430}-\x{044F}]{1,63}$/iu'], + 'срб' => [1 => '/^[\x{002d}0-9а-ик-шђјљњћџ]{1,63}$/iu'], + 'сайт' => [1 => '/^[\x{002d}0-9а-яёіїѝйўґг]{1,63}$/iu'], + 'онлайн' => [1 => '/^[\x{002d}0-9а-яёіїѝйўґг]{1,63}$/iu'], + '中国' => 'Hostname/Cn.php', + '中國' => 'Hostname/Cn.php', + 'ලංකා' => [1 => '/^[\x{0d80}-\x{0dff}]{1,63}$/iu'], + '香港' => 'Hostname/Cn.php', + '台湾' => 'Hostname/Cn.php', + '台灣' => 'Hostname/Cn.php', + 'امارات' => [ + 1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu', + ], + 'الاردن' => [ + 1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu', + ], + 'السعودية' => [ + 1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu', + ], + 'ไทย' => [1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu'], + 'рф' => [1 => '/^[\x{002d}0-9а-яё]{1,63}$/iu'], + 'تونس' => [ + 1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu', + ], + 'مصر' => [ + 1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu', + ], + 'இலங்கை' => [1 => '/^[\x{0b80}-\x{0bff}]{1,63}$/iu'], + 'فلسطين' => [ + 1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu', + ], + 'شبكة' => [ + 1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu', + ], ]; /** @var array> */ private array $idnLength = [ - 'BIZ' => [5 => 17, 11 => 15, 12 => 20], - 'CN' => [1 => 20], - 'COM' => [3 => 17, 5 => 20], - 'HK' => [1 => 15], - 'INFO' => [4 => 17], - 'KR' => [1 => 17], - 'NET' => [3 => 17, 5 => 20], - 'ORG' => [6 => 17], - 'TW' => [1 => 20], - 'امارات' => [1 => 30], - 'الاردن' => [1 => 30], + 'BIZ' => [5 => 17, 11 => 15, 12 => 20], + 'CN' => [1 => 20], + 'COM' => [3 => 17, 5 => 20], + 'HK' => [1 => 15], + 'INFO' => [4 => 17], + 'KR' => [1 => 17], + 'NET' => [3 => 17, 5 => 20], + 'ORG' => [6 => 17], + 'TW' => [1 => 20], + 'امارات' => [1 => 30], + 'الاردن' => [1 => 30], 'السعودية' => [1 => 30], - 'تونس' => [1 => 30], - 'مصر' => [1 => 30], - 'فلسطين' => [1 => 30], - 'شبكة' => [1 => 30], - '中国' => [1 => 20], - '中國' => [1 => 20], - '香港' => [1 => 20], - '台湾' => [1 => 20], - '台灣' => [1 => 20], + 'تونس' => [1 => 30], + 'مصر' => [1 => 30], + 'فلسطين' => [1 => 30], + 'شبكة' => [1 => 30], + '中国' => [1 => 20], + '中國' => [1 => 20], + '香港' => [1 => 20], + '台湾' => [1 => 20], + '台灣' => [1 => 20], ]; /** @var null|false|string */ @@ -1817,8 +1851,10 @@ public function isValid(mixed $value): bool // Check input against IP address schema if ( - ((preg_match('/^[0-9.]*$/', $value) && str_contains($value, '.')) - || (preg_match('/^[0-9a-f:.]*$/i', $value) && str_contains($value, ':'))) + ((preg_match('/^[0-9.]*$/', $value) + && str_contains($value, '.')) + || (preg_match('/^[0-9a-f:.]*$/i', $value) + && str_contains($value, ':'))) && $this->ipValidator->isValid($value) ) { if (! $allowIp) { @@ -1845,7 +1881,8 @@ public function isValid(mixed $value): bool // Prevent partial IP V4 addresses (ending '.') if ( - count($domainParts) === 4 && preg_match('/^[0-9.a-e:.]*$/i', $value) + count($domainParts) === 4 + && preg_match('/^[0-9.a-e:.]*$/i', $value) && $this->ipValidator->isValid($value) ) { $this->error(self::INVALID_LOCAL_NAME); @@ -1872,7 +1909,7 @@ public function isValid(mixed $value): bool if ( preg_match('/([^.]{2,63})$/u', $last, $matches) - || (array_key_exists($last, $this->validIdns)) + || array_key_exists($last, $this->validIdns) ) { // Hostname characters are: *(label dot)(label dot label); max 254 chars // label: id-prefix [*ldh{61} id-prefix]; max 63 chars @@ -1950,9 +1987,8 @@ public function isValid(mixed $value): bool if ( $utf8StrWrapper->strpos($domainPart, '-') === 0 || ($utf8StrWrapper->strlen($domainPart) > 2 - && $utf8StrWrapper->strpos($domainPart, '-', 2) === 2 - && $utf8StrWrapper->strpos($domainPart, '-', 3) === 3 - ) + && $utf8StrWrapper->strpos($domainPart, '-', 2) === 2 + && $utf8StrWrapper->strpos($domainPart, '-', 3) === 3) || $utf8StrWrapper->substr($domainPart, -1) === '-' ) { $this->error(self::INVALID_DASH); @@ -2082,13 +2118,20 @@ private function decodePunycode(string $encoded): string|false } $hex = ord($encoded[$indexe++]); - $digit = $hex - 48 < 10 ? $hex - 22 - : ($hex - 65 < 26 ? $hex - 65 - : ($hex - 97 < 26 ? $hex - 97 - : 36)); + $digit = ($hex - 48) < 10 + ? $hex - 22 + : ( + ($hex - 65) < 26 + ? $hex - 65 + : ( + ($hex - 97) < 26 + ? $hex - 97 + : 36 + ) + ); $index += $digit * $pos; - $tag = $key <= $base ? 1 : ($key >= $base + 26 ? 26 : $key - $base); + $tag = $key <= $base ? 1 : ($key >= ($base + 26) ? 26 : $key - $base); if ($digit < $tag) { break; } @@ -2096,14 +2139,14 @@ private function decodePunycode(string $encoded): string|false $pos = (int) ($pos * (36 - $tag)); } - $delta = intval($init ? ($index - $oldIndex) / 700 : ($index - $oldIndex) / 2); + $delta = intval($init ? ($index - $oldIndex) / 700 : ($index - $oldIndex) / 2); $delta += intval($delta / ($lengthd + 1)); - for ($key = 0; $delta > 910 / 2; $key += 36) { + for ($key = 0; $delta > (910 / 2); $key += 36) { $delta = intval($delta / 35); } - $base = intval($key + 36 * $delta / ($delta + 38)); - $init = false; + $base = intval($key + ((36 * $delta) / ($delta + 38))); + $init = false; $char += (int) ($index / ($lengthd + 1)); $index %= $lengthd + 1; if ($lengthd > 0) { @@ -2119,15 +2162,15 @@ private function decodePunycode(string $encoded): string|false foreach ($decoded as $key => $value) { if ($value < 128) { $decoded[$key] = chr($value); - } elseif ($value < 1 << 11) { - $decoded[$key] = chr(192 + ($value >> 6)); + } elseif ($value < (1 << 11)) { + $decoded[$key] = chr(192 + ($value >> 6)); $decoded[$key] .= chr(128 + ($value & 63)); - } elseif ($value < 1 << 16) { - $decoded[$key] = chr(224 + ($value >> 12)); + } elseif ($value < (1 << 16)) { + $decoded[$key] = chr(224 + ($value >> 12)); $decoded[$key] .= chr(128 + (($value >> 6) & 63)); $decoded[$key] .= chr(128 + ($value & 63)); - } elseif ($value < 1 << 21) { - $decoded[$key] = chr(240 + ($value >> 18)); + } elseif ($value < (1 << 21)) { + $decoded[$key] = chr(240 + ($value >> 18)); $decoded[$key] .= chr(128 + (($value >> 12) & 63)); $decoded[$key] .= chr(128 + (($value >> 6) & 63)); $decoded[$key] .= chr(128 + ($value & 63)); diff --git a/src/Hostname/Biz.php b/src/Hostname/Biz.php index c562e6bd..7d2077a7 100644 --- a/src/Hostname/Biz.php +++ b/src/Hostname/Biz.php @@ -24,1017 +24,1017 @@ 9 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu', 10 => '/^[\x{002d}0-9a-záàâãçéêíóôõú]{1,63}$/iu', 11 => '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}\x{30A1}-\x{30F6}\x{30FC}' - . '\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' - . '\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' - . '\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' - . '\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' - . '\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' - . '\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' - . '\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' - . '\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' - . '\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' - . '\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' - . '\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' - . '\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' - . '\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' - . '\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' - . '\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' - . '\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' - . '\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' - . '\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' - . '\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' - . '\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' - . '\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' - . '\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' - . '\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' - . '\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' - . '\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' - . '\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' - . '\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' - . '\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' - . '\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' - . '\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' - . '\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' - . '\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' - . '\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' - . '\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' - . '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' - . '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' - . '\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' - . '\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' - . '\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' - . '\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' - . '\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' - . '\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' - . '\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' - . '\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' - . '\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' - . '\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' - . '\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' - . '\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' - . '\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' - . '\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' - . '\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' - . '\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' - . '\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' - . '\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' - . '\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' - . '\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' - . '\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' - . '\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' - . '\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' - . '\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' - . '\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' - . '\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' - . '\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' - . '\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' - . '\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' - . '\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' - . '\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' - . '\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' - . '\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' - . '\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' - . '\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' - . '\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' - . '\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' - . '\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' - . '\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' - . '\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' - . '\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' - . '\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' - . '\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' - . '\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' - . '\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' - . '\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' - . '\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' - . '\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' - . '\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' - . '\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' - . '\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' - . '\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' - . '\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' - . '\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' - . '\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' - . '\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' - . '\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' - . '\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' - . '\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' - . '\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' - . '\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' - . '\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' - . '\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' - . '\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' - . '\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' - . '\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' - . '\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' - . '\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' - . '\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' - . '\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' - . '\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' - . '\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' - . '\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' - . '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' - . '\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' - . '\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' - . '\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' - . '\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' - . '\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' - . '\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' - . '\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' - . '\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' - . '\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' - . '\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' - . '\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' - . '\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' - . '\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' - . '\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' - . '\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' - . '\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' - . '\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' - . '\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' - . '\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' - . '\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' - . '\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' - . '\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' - . '\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' - . '\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' - . '\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' - . '\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' - . '\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' - . '\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' - . '\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' - . '\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' - . '\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' - . '\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' - . '\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' - . '\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' - . '\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' - . '\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' - . '\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' - . '\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' - . '\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' - . '\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' - . '\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' - . '\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' - . '\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' - . '\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' - . '\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' - . '\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' - . '\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' - . '\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' - . '\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' - . '\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' - . '\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' - . '\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' - . '\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' - . '\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' - . '\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' - . '\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' - . '\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' - . '\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' - . '\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' - . '\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' - . '\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' - . '\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' - . '\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' - . '\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' - . '\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' - . '\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' - . '\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' - . '\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' - . '\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' - . '\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' - . '\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' - . '\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' - . '\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' - . '\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' - . '\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' - . '\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' - . '\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' - . '\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' - . '\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' - . '\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' - . '\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' - . '\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' - . '\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' - . '\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' - . '\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' - . '\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' - . '\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' - . '\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' - . '\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' - . '\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' - . '\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' - . '\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' - . '\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' - . '\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' - . '\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' - . '\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' - . '\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' - . '\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' - . '\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' - . '\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' - . '\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' - . '\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' - . '\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' - . '\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' - . '\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' - . '\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' - . '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' - . '\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' - . '\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' - . '\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' - . '\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' - . '\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' - . '\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' - . '\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' - . '\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' - . '\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' - . '\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' - . '\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' - . '\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' - . '\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' - . '\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' - . '\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' - . '\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' - . '\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' - . '\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' - . '\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' - . '\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' - . '\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' - . '\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' - . '\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' - . '\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' - . '\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' - . '\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' - . '\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' - . '\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' - . '\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' - . '\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' - . '\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' - . '\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' - . '\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' - . '\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' - . '\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' - . '\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' - . '\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' - . '\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' - . '\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' - . '\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' - . '\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' - . '\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' - . '\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' - . '\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' - . '\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' - . '\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' - . '\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' - . '\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' - . '\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' - . '\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' - . '\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' - . '\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' - . '\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' - . '\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' - . '\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' - . '\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' - . '\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' - . '\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' - . '\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' - . '\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' - . '\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' - . '\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' - . '\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' - . '\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' - . '\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' - . '\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' - . '\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' - . '\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' - . '\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' - . '\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' - . '\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' - . '\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' - . '\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' - . '\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' - . '\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' - . '\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' - . '\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' - . '\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' - . '\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' - . '\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' - . '\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' - . '\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' - . '\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' - . '\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' - . '\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' - . '\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' - . '\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' - . '\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' - . '\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' - . '\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' - . '\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' - . '\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' - . '\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' - . '\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' - . '\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' - . '\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' - . '\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' - . '\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' - . '\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' - . '\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' - . '\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' - . '\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' - . '\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' - . '\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' - . '\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' - . '\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' - . '\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' - . '\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' - . '\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' - . '\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' - . '\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' - . '\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' - . '\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' - . '\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' - . '\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' - . '\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' - . '\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' - . '\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' - . '\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' - . '\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' - . '\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' - . '\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' - . '\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' - . '\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' - . '\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' - . '\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' - . '\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' - . '\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' - . '\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' - . '\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' - . '\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' - . '\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' - . '\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' - . '\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' - . '\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' - . '\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' - . '\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' - . '\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' - . '\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' - . '\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' - . '\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' - . '\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' - . '\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' - . '\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' - . '\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' - . '\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' - . '\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' - . '\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' - . '\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' - . '\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' - . '\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' - . '\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' - . '\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' - . '\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' - . '\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' - . '\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' - . '\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' - . '\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' - . '\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' - . '\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' - . '\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' - . '\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' - . '\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' - . '\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' - . '\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' - . '\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' - . '\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' - . '\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' - . '\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' - . '\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' - . '\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' - . '\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' - . '\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' - . '\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' - . '\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' - . '\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' - . '\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' - . '\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' - . '\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' - . '\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' - . '\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' - . '\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' - . '\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' - . '\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' - . '\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' - . '\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' - . '\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' - . '\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' - . '\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' - . '\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' - . '\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' - . '\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' - . '\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' - . '\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' - . '\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' - . '\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' - . '\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' - . '\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' - . '\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' - . '\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' - . '\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' - . '\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' - . '\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' - . '\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' - . '\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' - . '\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' - . '\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' - . '\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' - . '\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' - . '\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' - . '\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' - . '\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' - . '\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' - . '\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' - . '\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' - . '\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' - . '\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' - . '\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' - . '\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' - . '\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' - . '\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' - . '\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' - . '\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' - . '\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' - . '\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' - . '\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' - . '\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' - . '\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' - . '\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' - . '\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' - . '\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' - . '\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' - . '\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' - . '\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' - . '\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' - . '\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' - . '\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' - . '\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' - . '\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' - . '\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' - . '\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' - . '\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' - . '\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' - . '\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' - . '\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' - . '\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' - . '\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' - . '\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' - . '\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' - . '\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' - . '\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' - . '\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' - . '\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' - . '\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' - . '\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' - . '\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' - . '\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' - . '\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' - . '\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' - . '\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' - . '\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' - . '\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' - . '\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' - . '\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' - . '\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' - . '\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' - . '\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' - . '\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' - . '\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' - . '\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' - . '\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' - . '\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' - . '\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' - . '\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' - . '\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' - . '\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' - . '\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' - . '\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' - . '\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' - . '\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' - . '\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' - . '\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' - . '\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' - . '\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' - . '\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' - . '\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' - . '\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' - . '\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' - . '\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' - . '\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' - . '\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' - . '\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' - . '\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' - . '\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' - . '\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' - . '\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' - . '\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' - . '\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' - . '\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' - . '\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' - . '\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' - . '\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' - . '\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' - . '\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' - . '\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' - . '\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' - . '\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' - . '\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' - . '\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' - . '\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' - . '\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' - . '\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' - . '\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' - . '\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' - . '\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' - . '\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' - . '\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' - . '\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' - . '\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' - . '\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' - . '\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' - . '\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' - . '\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' - . '\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' - . '\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' - . '\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' - . '\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' - . '\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' - . '\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' - . '\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' - . '\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' - . '\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' - . '\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' - . '\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' - . '\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' - . '\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' - . '\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' - . '\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' - . '\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' - . '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' - . '\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' - . '\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' - . '\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' - . '\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' - . '\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' - . '\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' - . '\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' - . '\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' - . '\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' - . '\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' - . '\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' - . '\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' - . '\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' - . '\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' - . '\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' - . '\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' - . '\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' - . '\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' - . '\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' - . '\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' - . '\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' - . '\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' - . '\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' - . '\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' - . '\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' - . '\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' - . '\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' - . '\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' - . '\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' - . '\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' - . '\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' - . '\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' - . '\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' - . '\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' - . '\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' - . '\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' - . '\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' - . '\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' - . '\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' - . '\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' - . '\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' - . '\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' - . '\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' - . '\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' - . '\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' - . '\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' - . '\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' - . '\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' - . '\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' - . '\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' - . '\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' - . '\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' - . '\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' - . '\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' - . '\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' - . '\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' - . '\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' - . '\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' - . '\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' - . '\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' - . '\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' - . '\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' - . '\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' - . '\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' - . '\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' - . '\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' - . '\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' - . '\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' - . '\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' - . '\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' - . '\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' - . '\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' - . '\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' - . '\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' - . '\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' - . '\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' - . '\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' - . '\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' - . '\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' - . '\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' - . '\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' - . '\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' - . '\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' - . '\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' - . '\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' - . '\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' - . '\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' - . '\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' - . '\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' - . '\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' - . '\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' - . '\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' - . '\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' - . '\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' - . '\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' - . '\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' - . '\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' - . '\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' - . '\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' - . '\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' - . '\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' - . '\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' - . '\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' - . '\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' - . '\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' - . '\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' - . '\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' - . '\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' - . '\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' - . '\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' - . '\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' - . '\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' - . '\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' - . '\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' - . '\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' - . '\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' - . '\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' - . '\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' - . '\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' - . '\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' - . '\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' - . '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' - . '\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' - . '\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' - . '\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' - . '\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' - . '\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' - . '\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' - . '\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' - . '\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' - . '\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' - . '\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' - . '\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' - . '\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' - . '\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' - . '\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' - . '\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' - . '\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' - . '\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' - . '\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' - . '\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' - . '\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' - . '\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' - . '\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' - . '\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' - . '\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' - . '\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' - . '\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' - . '\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' - . '\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu', + . '\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' + . '\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' + . '\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' + . '\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' + . '\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' + . '\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' + . '\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' + . '\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' + . '\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' + . '\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' + . '\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' + . '\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' + . '\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' + . '\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' + . '\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' + . '\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' + . '\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' + . '\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' + . '\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' + . '\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' + . '\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' + . '\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' + . '\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' + . '\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' + . '\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' + . '\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' + . '\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' + . '\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' + . '\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' + . '\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' + . '\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' + . '\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' + . '\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' + . '\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' + . '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' + . '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' + . '\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' + . '\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' + . '\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' + . '\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' + . '\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' + . '\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' + . '\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' + . '\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' + . '\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' + . '\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' + . '\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' + . '\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' + . '\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' + . '\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' + . '\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' + . '\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' + . '\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' + . '\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' + . '\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' + . '\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' + . '\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' + . '\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' + . '\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' + . '\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' + . '\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' + . '\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' + . '\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' + . '\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' + . '\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' + . '\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' + . '\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' + . '\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' + . '\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' + . '\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' + . '\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' + . '\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' + . '\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' + . '\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' + . '\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' + . '\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' + . '\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' + . '\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' + . '\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' + . '\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' + . '\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' + . '\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' + . '\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' + . '\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' + . '\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' + . '\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' + . '\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' + . '\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' + . '\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' + . '\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' + . '\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' + . '\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' + . '\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' + . '\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' + . '\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' + . '\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' + . '\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' + . '\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' + . '\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' + . '\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' + . '\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' + . '\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' + . '\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' + . '\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' + . '\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' + . '\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' + . '\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' + . '\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' + . '\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' + . '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' + . '\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' + . '\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' + . '\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' + . '\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' + . '\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' + . '\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' + . '\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' + . '\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' + . '\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' + . '\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' + . '\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' + . '\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' + . '\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' + . '\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' + . '\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' + . '\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' + . '\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' + . '\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' + . '\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' + . '\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' + . '\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' + . '\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' + . '\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' + . '\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' + . '\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' + . '\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' + . '\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' + . '\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' + . '\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' + . '\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' + . '\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' + . '\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' + . '\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' + . '\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' + . '\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' + . '\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' + . '\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' + . '\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' + . '\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' + . '\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' + . '\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' + . '\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' + . '\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' + . '\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' + . '\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' + . '\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' + . '\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' + . '\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' + . '\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' + . '\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' + . '\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' + . '\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' + . '\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' + . '\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' + . '\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' + . '\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' + . '\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' + . '\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' + . '\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' + . '\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' + . '\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' + . '\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' + . '\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' + . '\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' + . '\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' + . '\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' + . '\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' + . '\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' + . '\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' + . '\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' + . '\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' + . '\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' + . '\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' + . '\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' + . '\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' + . '\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' + . '\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' + . '\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' + . '\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' + . '\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' + . '\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' + . '\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' + . '\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' + . '\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' + . '\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' + . '\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' + . '\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' + . '\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' + . '\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' + . '\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' + . '\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' + . '\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' + . '\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' + . '\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' + . '\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' + . '\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' + . '\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' + . '\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' + . '\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' + . '\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' + . '\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' + . '\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' + . '\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' + . '\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' + . '\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' + . '\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' + . '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' + . '\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' + . '\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' + . '\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' + . '\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' + . '\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' + . '\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' + . '\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' + . '\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' + . '\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' + . '\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' + . '\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' + . '\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' + . '\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' + . '\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' + . '\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' + . '\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' + . '\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' + . '\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' + . '\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' + . '\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' + . '\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' + . '\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' + . '\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' + . '\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' + . '\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' + . '\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' + . '\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' + . '\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' + . '\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' + . '\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' + . '\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' + . '\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' + . '\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' + . '\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' + . '\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' + . '\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' + . '\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' + . '\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' + . '\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' + . '\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' + . '\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' + . '\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' + . '\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' + . '\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' + . '\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' + . '\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' + . '\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' + . '\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' + . '\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' + . '\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' + . '\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' + . '\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' + . '\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' + . '\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' + . '\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' + . '\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' + . '\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' + . '\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' + . '\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' + . '\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' + . '\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' + . '\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' + . '\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' + . '\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' + . '\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' + . '\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' + . '\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' + . '\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' + . '\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' + . '\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' + . '\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' + . '\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' + . '\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' + . '\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' + . '\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' + . '\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' + . '\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' + . '\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' + . '\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' + . '\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' + . '\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' + . '\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' + . '\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' + . '\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' + . '\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' + . '\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' + . '\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' + . '\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' + . '\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' + . '\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' + . '\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' + . '\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' + . '\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' + . '\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' + . '\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' + . '\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' + . '\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' + . '\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' + . '\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' + . '\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' + . '\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' + . '\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' + . '\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' + . '\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' + . '\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' + . '\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' + . '\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' + . '\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' + . '\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' + . '\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' + . '\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' + . '\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' + . '\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' + . '\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' + . '\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' + . '\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' + . '\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' + . '\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' + . '\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' + . '\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' + . '\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' + . '\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' + . '\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' + . '\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' + . '\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' + . '\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' + . '\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' + . '\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' + . '\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' + . '\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' + . '\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' + . '\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' + . '\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' + . '\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' + . '\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' + . '\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' + . '\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' + . '\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' + . '\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' + . '\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' + . '\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' + . '\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' + . '\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' + . '\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' + . '\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' + . '\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' + . '\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' + . '\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' + . '\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' + . '\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' + . '\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' + . '\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' + . '\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' + . '\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' + . '\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' + . '\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' + . '\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' + . '\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' + . '\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' + . '\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' + . '\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' + . '\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' + . '\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' + . '\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' + . '\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' + . '\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' + . '\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' + . '\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' + . '\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' + . '\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' + . '\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' + . '\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' + . '\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' + . '\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' + . '\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' + . '\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' + . '\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' + . '\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' + . '\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' + . '\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' + . '\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' + . '\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' + . '\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' + . '\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' + . '\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' + . '\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' + . '\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' + . '\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' + . '\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' + . '\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' + . '\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' + . '\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' + . '\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' + . '\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' + . '\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' + . '\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' + . '\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' + . '\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' + . '\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' + . '\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' + . '\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' + . '\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' + . '\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' + . '\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' + . '\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' + . '\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' + . '\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' + . '\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' + . '\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' + . '\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' + . '\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' + . '\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' + . '\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' + . '\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' + . '\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' + . '\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' + . '\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' + . '\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' + . '\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' + . '\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' + . '\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' + . '\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' + . '\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' + . '\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' + . '\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' + . '\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' + . '\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' + . '\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' + . '\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' + . '\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' + . '\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' + . '\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' + . '\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' + . '\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' + . '\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' + . '\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' + . '\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' + . '\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' + . '\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' + . '\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' + . '\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' + . '\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' + . '\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' + . '\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' + . '\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' + . '\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' + . '\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' + . '\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' + . '\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' + . '\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' + . '\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' + . '\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' + . '\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' + . '\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' + . '\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' + . '\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' + . '\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' + . '\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' + . '\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' + . '\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' + . '\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' + . '\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' + . '\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' + . '\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' + . '\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' + . '\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' + . '\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' + . '\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' + . '\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' + . '\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' + . '\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' + . '\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' + . '\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' + . '\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' + . '\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' + . '\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' + . '\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' + . '\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' + . '\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' + . '\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' + . '\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' + . '\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' + . '\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' + . '\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' + . '\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' + . '\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' + . '\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' + . '\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' + . '\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' + . '\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' + . '\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' + . '\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' + . '\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' + . '\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' + . '\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' + . '\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' + . '\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' + . '\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' + . '\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' + . '\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' + . '\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' + . '\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' + . '\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' + . '\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' + . '\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' + . '\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' + . '\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' + . '\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' + . '\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' + . '\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' + . '\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' + . '\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' + . '\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' + . '\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' + . '\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' + . '\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' + . '\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' + . '\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' + . '\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' + . '\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' + . '\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' + . '\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' + . '\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' + . '\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' + . '\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' + . '\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' + . '\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' + . '\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' + . '\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' + . '\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' + . '\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' + . '\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' + . '\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' + . '\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' + . '\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' + . '\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' + . '\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' + . '\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' + . '\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' + . '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' + . '\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' + . '\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' + . '\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' + . '\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' + . '\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' + . '\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' + . '\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' + . '\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' + . '\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' + . '\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' + . '\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' + . '\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' + . '\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' + . '\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' + . '\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' + . '\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' + . '\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' + . '\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' + . '\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' + . '\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' + . '\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' + . '\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' + . '\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' + . '\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' + . '\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' + . '\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' + . '\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' + . '\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' + . '\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' + . '\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' + . '\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' + . '\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' + . '\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' + . '\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' + . '\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' + . '\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' + . '\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' + . '\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' + . '\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' + . '\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' + . '\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' + . '\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' + . '\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' + . '\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' + . '\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' + . '\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' + . '\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' + . '\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' + . '\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' + . '\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' + . '\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' + . '\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' + . '\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' + . '\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' + . '\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' + . '\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' + . '\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' + . '\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' + . '\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' + . '\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' + . '\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' + . '\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' + . '\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' + . '\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' + . '\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' + . '\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' + . '\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' + . '\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' + . '\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' + . '\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' + . '\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' + . '\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' + . '\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' + . '\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' + . '\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' + . '\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' + . '\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' + . '\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' + . '\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' + . '\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' + . '\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' + . '\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' + . '\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' + . '\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' + . '\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' + . '\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' + . '\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' + . '\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' + . '\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' + . '\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' + . '\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' + . '\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' + . '\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' + . '\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' + . '\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' + . '\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' + . '\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' + . '\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' + . '\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' + . '\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' + . '\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' + . '\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' + . '\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' + . '\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' + . '\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' + . '\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' + . '\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' + . '\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' + . '\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' + . '\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' + . '\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' + . '\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' + . '\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' + . '\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' + . '\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' + . '\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' + . '\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' + . '\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' + . '\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' + . '\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' + . '\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' + . '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' + . '\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' + . '\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' + . '\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' + . '\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' + . '\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' + . '\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' + . '\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' + . '\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' + . '\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' + . '\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' + . '\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' + . '\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' + . '\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' + . '\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' + . '\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' + . '\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' + . '\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' + . '\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' + . '\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' + . '\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' + . '\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' + . '\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' + . '\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' + . '\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' + . '\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' + . '\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' + . '\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' + . '\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu', 12 => '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' - . '\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' - . '\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' - . '\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' - . '\x{49B6}\x{49B7}\x{4C77}\x{4C9F}-\x{4CA3}\x{4D13}-\x{4D19}\x{4DAE}' - . '\x{4E00}-\x{4E11}\x{4E13}-\x{4E28}\x{4E2A}-\x{4E54}\x{4E56}-\x{4E67}' - . '\x{4E69}-\x{4E78}\x{4E7A}-\x{4E89}\x{4E8B}-\x{4E95}\x{4E97}-\x{4EA2}' - . '\x{4EA4}-\x{4EBB}\x{4EBD}-\x{4ECB}\x{4ECD}-\x{4EE6}\x{4EE8}-\x{4EEC}' - . '\x{4EEF}-\x{4EF7}\x{4EFB}\x{4EFD}\x{4EFF}-\x{4F06}\x{4F08}-\x{4F15}' - . '\x{4F17}-\x{4F27}\x{4F29}-\x{4F30}\x{4F32}-\x{4F34}\x{4F36}\x{4F38}-\x{4F3F}' - . '\x{4F41}-\x{4F43}\x{4F45}-\x{4F70}\x{4F72}-\x{4F8B}\x{4F8D}\x{4F8F}-\x{4FA1}' - . '\x{4FA3}-\x{4FAC}\x{4FAE}-\x{4FBC}\x{4FBE}-\x{4FC5}\x{4FC7}\x{4FC9}-\x{4FCB}' - . '\x{4FCD}-\x{4FE1}\x{4FE3}-\x{4FFB}\x{4FFE}-\x{500F}\x{5011}-\x{5033}' - . '\x{5035}-\x{5037}\x{5039}-\x{503C}\x{503E}-\x{5041}\x{5043}-\x{504F}\x{5051}' - . '\x{5053}-\x{5057}\x{5059}-\x{507B}\x{507D}-\x{5080}\x{5082}-\x{5092}' - . '\x{5094}-\x{5096}\x{5098}-\x{509E}\x{50A2}-\x{50B8}\x{50BA}-\x{50C2}' - . '\x{50C4}-\x{50D7}\x{50D9}-\x{50DE}\x{50E0}\x{50E3}-\x{50EA}\x{50EC}-\x{50F3}' - . '\x{50F5}\x{50F6}\x{50F8}-\x{511A}\x{511C}-\x{5127}\x{5129}\x{512A}' - . '\x{512C}-\x{5141}\x{5143}-\x{5149}\x{514B}-\x{514E}\x{5150}-\x{5152}' - . '\x{5154}-\x{5157}\x{5159}-\x{515F}\x{5161}-\x{5163}\x{5165}-\x{5171}' - . '\x{5173}-\x{517D}\x{517F}-\x{5182}\x{5185}-\x{518D}\x{518F}-\x{51A0}\x{51A2}' - . '\x{51A4}-\x{51A8}\x{51AA}-\x{51AC}\x{51AE}-\x{51B3}\x{51B5}-\x{51B7}\x{51B9}' - . '\x{51BB}-\x{51C1}\x{51C3}-\x{51D1}\x{51D4}-\x{51DE}\x{51E0}-\x{51E5}' - . '\x{51E7}-\x{51EB}\x{51ED}\x{51EF}-\x{51F1}\x{51F3}-\x{5226}\x{5228}-\x{524E}' - . '\x{5250}-\x{5252}\x{5254}-\x{5265}\x{5267}-\x{5270}\x{5272}-\x{5278}' - . '\x{527A}-\x{5284}\x{5286}-\x{528D}\x{528F}-\x{52A3}\x{52A5}-\x{52C3}\x{52C6}' - . '\x{52C7}\x{52C9}-\x{52CB}\x{52CD}\x{52CF}\x{52D0}\x{52D2}\x{52D3}' - . '\x{52D5}-\x{52E0}\x{52E2}-\x{52E4}\x{52E6}-\x{52ED}\x{52EF}-\x{5302}' - . '\x{5305}-\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}-\x{5326}\x{5328}' - . '\x{532A}-\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}-\x{5341}\x{5343}-\x{535A}' - . '\x{535C}\x{535E}-\x{5367}\x{5369}\x{536B}\x{536C}\x{536E}-\x{537F}' - . '\x{5381}-\x{53A0}\x{53A2}-\x{53A9}\x{53AC}-\x{53AE}\x{53B0}-\x{53B9}' - . '\x{53BB}-\x{53C4}\x{53C6}-\x{53CE}\x{53D0}-\x{53D9}\x{53DB}\x{53DC}' - . '\x{53DF}-\x{53E6}\x{53E8}-\x{53FE}\x{5401}-\x{5419}\x{541B}-\x{5421}' - . '\x{5423}-\x{544B}\x{544D}-\x{545C}\x{545E}-\x{5468}\x{546A}-\x{5489}' - . '\x{548B}-\x{54B4}\x{54B6}-\x{54F5}\x{54F7}-\x{5514}\x{5516}\x{5517}' - . '\x{551A}-\x{5546}\x{5548}-\x{555F}\x{5561}-\x{5579}\x{557B}-\x{55DF}' - . '\x{55E1}-\x{55F7}\x{55F9}-\x{5604}\x{5606}-\x{5609}\x{560C}-\x{561F}' - . '\x{5621}-\x{562A}\x{562C}-\x{5636}\x{5638}-\x{563B}\x{563D}-\x{5643}' - . '\x{5645}-\x{564A}\x{564C}-\x{5650}\x{5652}-\x{5655}\x{5657}-\x{565E}\x{5660}' - . '\x{5662}-\x{5674}\x{5676}-\x{567C}\x{567E}-\x{5687}\x{568A}\x{568C}-\x{5695}' - . '\x{5697}-\x{569D}\x{569F}-\x{56A1}\x{56A3}-\x{56B9}\x{56BB}-\x{56CE}' - . '\x{56D0}-\x{56D8}\x{56DA}-\x{56E5}\x{56E7}-\x{56F5}\x{56F7}\x{56F9}\x{56FA}' - . '\x{56FD}-\x{5704}\x{5706}-\x{5710}\x{5712}-\x{5716}\x{5718}-\x{5720}\x{5722}' - . '\x{5723}\x{5725}-\x{573C}\x{573E}-\x{5742}\x{5744}-\x{5747}\x{5749}-\x{5754}' - . '\x{5757}\x{5759}-\x{5762}\x{5764}-\x{576D}\x{576F}-\x{5777}\x{5779}-\x{5780}' - . '\x{5782}-\x{5786}\x{5788}-\x{5795}\x{5797}-\x{57A7}\x{57A9}-\x{57C9}' - . '\x{57CB}-\x{57D0}\x{57D2}-\x{57D6}\x{57D8}-\x{57DA}\x{57DC}\x{57DD}' - . '\x{57DF}-\x{5816}\x{5819}-\x{5840}\x{5842}-\x{584F}\x{5851}-\x{5855}' - . '\x{5857}-\x{585F}\x{5861}-\x{5865}\x{5868}-\x{5876}\x{5878}-\x{5894}' - . '\x{5896}-\x{58A9}\x{58AB}-\x{58B4}\x{58B7}-\x{58BF}\x{58C1}\x{58C2}' - . '\x{58C5}-\x{58CB}\x{58CE}\x{58CF}\x{58D1}-\x{58DB}\x{58DD}-\x{58E0}' - . '\x{58E2}-\x{58E5}\x{58E7}-\x{58F4}\x{58F6}-\x{5900}\x{5902}-\x{5904}\x{5906}' - . '\x{5907}\x{5909}-\x{5910}\x{5912}\x{5914}-\x{5922}\x{5924}-\x{5932}\x{5934}' - . '\x{5935}\x{5937}-\x{5958}\x{595A}\x{595C}-\x{599A}\x{599C}-\x{59B6}' - . '\x{59B8}-\x{59E6}\x{59E8}-\x{5A23}\x{5A25}\x{5A27}-\x{5A2B}\x{5A2D}-\x{5A2F}' - . '\x{5A31}-\x{5A53}\x{5A55}-\x{5A58}\x{5A5A}-\x{5A6E}\x{5A70}\x{5A72}-\x{5A86}' - . '\x{5A88}-\x{5A8C}\x{5A8E}-\x{5AAA}\x{5AAC}-\x{5ACF}\x{5AD1}\x{5AD2}' - . '\x{5AD4}-\x{5AEE}\x{5AF1}-\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}-\x{5B38}' - . '\x{5B3A}-\x{5B45}\x{5B47}-\x{5B4E}\x{5B50}\x{5B51}\x{5B53}-\x{5B5F}' - . '\x{5B62}-\x{5B6E}\x{5B70}-\x{5B78}\x{5B7A}-\x{5B7D}\x{5B7F}-\x{5B85}' - . '\x{5B87}-\x{5B8F}\x{5B91}-\x{5BA8}\x{5BAA}-\x{5BB1}\x{5BB3}-\x{5BB6}' - . '\x{5BB8}-\x{5BBB}\x{5BBD}-\x{5BC7}\x{5BCA}-\x{5BD6}\x{5BD8}\x{5BD9}' - . '\x{5BDB}-\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}-\x{5C1A}\x{5C1C}-\x{5C22}\x{5C24}' - . '\x{5C25}\x{5C27}\x{5C28}\x{5C2A}-\x{5C35}\x{5C37}-\x{5C59}\x{5C5B}-\x{5C84}' - . '\x{5C86}-\x{5CB3}\x{5CB5}-\x{5CB8}\x{5CBA}-\x{5CBF}\x{5CC1}-\x{5CD4}' - . '\x{5CD6}-\x{5CDC}\x{5CDE}-\x{5CF4}\x{5CF6}-\x{5D2A}\x{5D2C}-\x{5D2E}' - . '\x{5D30}-\x{5D3A}\x{5D3C}-\x{5D52}\x{5D54}-\x{5D56}\x{5D58}-\x{5D5B}' - . '\x{5D5D}-\x{5D5F}\x{5D61}-\x{5D82}\x{5D84}-\x{5D95}\x{5D97}-\x{5DA2}' - . '\x{5DA5}-\x{5DAA}\x{5DAC}-\x{5DB2}\x{5DB4}-\x{5DB8}\x{5DBA}-\x{5DC3}' - . '\x{5DC5}-\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}-\x{5DF5}\x{5DF7}-\x{5E11}' - . '\x{5E13}-\x{5E3E}\x{5E40}-\x{5E47}\x{5E49}-\x{5E50}\x{5E52}-\x{5E91}' - . '\x{5E93}-\x{5EB9}\x{5EBB}-\x{5EBF}\x{5EC1}-\x{5EEA}\x{5EEC}-\x{5EF8}' - . '\x{5EFA}-\x{5F08}\x{5F0A}-\x{5F0D}\x{5F0F}\x{5F11}-\x{5F3A}\x{5F3C}' - . '\x{5F3E}-\x{5F8E}\x{5F90}-\x{5F99}\x{5F9B}-\x{5FA2}\x{5FA5}-\x{5FAF}' - . '\x{5FB1}-\x{5FC1}\x{5FC3}-\x{5FCD}\x{5FCF}-\x{5FDA}\x{5FDC}-\x{5FDE}\x{5FE0}' - . '\x{5FE1}\x{5FE3}-\x{5FEB}\x{5FED}-\x{5FFB}\x{5FFD}-\x{6022}\x{6024}-\x{6055}' - . '\x{6057}-\x{605F}\x{6062}-\x{6070}\x{6072}\x{6073}\x{6075}-\x{6090}\x{6092}' - . '\x{6094}-\x{60A4}\x{60A6}-\x{60A8}\x{60AA}-\x{60D1}\x{60D3}-\x{60D5}' - . '\x{60D7}-\x{60DD}\x{60DF}-\x{60E2}\x{60E4}\x{60E6}-\x{60FC}\x{60FE}-\x{6101}' - . '\x{6103}-\x{6106}\x{6108}-\x{6110}\x{6112}-\x{611D}\x{611F}\x{6120}' - . '\x{6122}-\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}-\x{615F}' - . '\x{6161}-\x{616E}\x{6170}-\x{617A}\x{617C}\x{617E}\x{6180}-\x{6185}' - . '\x{6187}-\x{6196}\x{6198}-\x{619B}\x{619D}-\x{61B8}\x{61BA}\x{61BC}-\x{61D2}' - . '\x{61D4}\x{61D6}-\x{61EB}\x{61ED}\x{61EE}\x{61F0}-\x{61F3}\x{61F5}-\x{6204}' - . '\x{6206}-\x{6234}\x{6236}-\x{6238}\x{623A}-\x{6256}\x{6258}-\x{6281}' - . '\x{6283}-\x{628C}\x{628E}-\x{629C}\x{629E}-\x{62A5}\x{62A7}-\x{62DD}' - . '\x{62DF}-\x{62E9}\x{62EB}-\x{6309}\x{630B}-\x{6316}\x{6318}-\x{6330}' - . '\x{6332}-\x{6334}\x{6336}\x{6338}-\x{633E}\x{6340}-\x{635A}\x{635C}-\x{637E}' - . '\x{6380}-\x{638A}\x{638C}-\x{6392}\x{6394}-\x{63BA}\x{63BC}-\x{63D0}' - . '\x{63D2}-\x{6406}\x{6408}-\x{643A}\x{643D}-\x{6441}\x{6443}-\x{6448}' - . '\x{644A}-\x{6459}\x{645B}-\x{647D}\x{647F}-\x{6485}\x{6487}-\x{64A0}' - . '\x{64A2}-\x{64AE}\x{64B0}-\x{64B5}\x{64B7}-\x{64C7}\x{64C9}-\x{64D4}' - . '\x{64D6}-\x{64E0}\x{64E2}-\x{64E4}\x{64E6}-\x{64ED}\x{64EF}-\x{64F4}' - . '\x{64F6}-\x{64F8}\x{64FA}-\x{6501}\x{6503}-\x{6509}\x{650B}-\x{651E}' - . '\x{6520}-\x{6527}\x{6529}-\x{653F}\x{6541}\x{6543}-\x{6559}\x{655B}-\x{655E}' - . '\x{6560}-\x{656C}\x{656E}-\x{657C}\x{657E}-\x{6589}\x{658B}-\x{6599}' - . '\x{659B}-\x{65B4}\x{65B6}-\x{65BD}\x{65BF}-\x{65C7}\x{65CA}-\x{65D0}' - . '\x{65D2}-\x{65D7}\x{65DA}\x{65DB}\x{65DD}-\x{65E3}\x{65E5}-\x{65E9}' - . '\x{65EB}-\x{65F8}\x{65FA}-\x{65FD}\x{6600}-\x{6616}\x{6618}-\x{661D}' - . '\x{661F}-\x{662B}\x{662D}-\x{6636}\x{6639}\x{663A}\x{663C}-\x{663E}' - . '\x{6640}-\x{6647}\x{6649}-\x{664C}\x{664E}-\x{665F}\x{6661}\x{6662}' - . '\x{6664}-\x{6666}\x{6668}-\x{6691}\x{6693}-\x{669B}\x{669D}\x{669F}-\x{66AB}' - . '\x{66AE}-\x{66CF}\x{66D1}\x{66D2}\x{66D4}-\x{66D6}\x{66D8}-\x{66DE}' - . '\x{66E0}-\x{66EE}\x{66F0}-\x{66FC}\x{66FE}-\x{6701}\x{6703}-\x{6706}' - . '\x{6708}-\x{6718}\x{671A}-\x{6723}\x{6725}-\x{6728}\x{672A}-\x{6766}' - . '\x{6768}-\x{6787}\x{6789}-\x{6795}\x{6797}-\x{67A8}\x{67AA}-\x{67BC}\x{67BE}' - . '\x{67C0}-\x{67D4}\x{67D6}\x{67D8}-\x{67F8}\x{67FA}-\x{6800}\x{6802}-\x{6814}' - . '\x{6816}-\x{681D}\x{681F}-\x{6826}\x{6828}-\x{682F}\x{6831}-\x{6857}\x{685B}' - . '\x{685D}\x{6860}-\x{6879}\x{687B}-\x{6894}\x{6896}-\x{6898}\x{689A}-\x{68A4}' - . '\x{68A6}-\x{68B7}\x{68B9}\x{68BB}-\x{68C2}\x{68C4}\x{68C6}-\x{68D8}' - . '\x{68DA}-\x{68E1}\x{68E3}\x{68E4}\x{68E6}-\x{68FF}\x{6901}-\x{6908}' - . '\x{690A}-\x{693D}\x{693F}-\x{694C}\x{694E}-\x{699E}\x{69A0}\x{69A1}' - . '\x{69A3}-\x{69BF}\x{69C1}-\x{69D0}\x{69D3}\x{69D4}\x{69D8}-\x{69F8}' - . '\x{69FA}-\x{6A02}\x{6A04}-\x{6A0B}\x{6A0D}-\x{6A1B}\x{6A1D}-\x{6A23}' - . '\x{6A25}-\x{6A36}\x{6A38}-\x{6A49}\x{6A4B}-\x{6A52}\x{6A54}-\x{6A5B}' - . '\x{6A5D}-\x{6A6D}\x{6A6F}\x{6A71}-\x{6A85}\x{6A87}-\x{6A89}\x{6A8B}-\x{6A8E}' - . '\x{6A90}-\x{6A98}\x{6A9A}-\x{6A9C}\x{6A9E}-\x{6AA9}\x{6AAB}-\x{6AB0}' - . '\x{6AB2}-\x{6ABD}\x{6ABF}\x{6AC1}-\x{6AC3}\x{6AC5}-\x{6AC7}\x{6ACA}-\x{6AD7}' - . '\x{6AD9}-\x{6AE8}\x{6AEA}-\x{6B0D}\x{6B0F}-\x{6B1A}\x{6B1C}-\x{6B2D}' - . '\x{6B2F}-\x{6B34}\x{6B36}-\x{6B3F}\x{6B41}-\x{6B56}\x{6B59}-\x{6B5C}' - . '\x{6B5E}-\x{6B67}\x{6B69}-\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}-\x{6B74}' - . '\x{6B76}-\x{6B7C}\x{6B7E}-\x{6BB0}\x{6BB2}-\x{6BB7}\x{6BB9}-\x{6BE8}' - . '\x{6BEA}-\x{6BF0}\x{6BF2}\x{6BF3}\x{6BF5}-\x{6BF9}\x{6BFB}-\x{6C09}' - . '\x{6C0B}-\x{6C16}\x{6C18}-\x{6C1B}\x{6C1D}-\x{6C2C}\x{6C2E}-\x{6C38}\x{6C3A}' - . '\x{6C3B}\x{6C3D}-\x{6C44}\x{6C46}-\x{6C6B}\x{6C6D}\x{6C6F}-\x{6C9F}' - . '\x{6CA1}-\x{6CD7}\x{6CD9}-\x{6CF3}\x{6CF5}-\x{6D01}\x{6D03}-\x{6D1B}' - . '\x{6D1D}-\x{6D23}\x{6D25}-\x{6D70}\x{6D72}-\x{6D80}\x{6D82}-\x{6D95}' - . '\x{6D97}-\x{6D9B}\x{6D9D}-\x{6DAF}\x{6DB2}-\x{6DB5}\x{6DB7}-\x{6DFD}\x{6E00}' - . '\x{6E03}-\x{6E05}\x{6E07}-\x{6E11}\x{6E14}-\x{6E17}\x{6E19}-\x{6E29}' - . '\x{6E2B}-\x{6E4B}\x{6E4D}-\x{6E6B}\x{6E6D}-\x{6E75}\x{6E77}-\x{6E79}' - . '\x{6E7E}-\x{6E8A}\x{6E8D}-\x{6E94}\x{6E96}-\x{6EDA}\x{6EDC}\x{6EDE}-\x{6EE2}' - . '\x{6EE4}-\x{6F03}\x{6F05}-\x{6F0A}\x{6F0C}-\x{6F41}\x{6F43}-\x{6F47}\x{6F49}' - . '\x{6F4B}-\x{6F78}\x{6F7A}-\x{6F97}\x{6F99}\x{6F9B}-\x{6F9E}\x{6FA0}-\x{6FB6}' - . '\x{6FB8}-\x{6FC4}\x{6FC6}-\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}-\x{6FF4}' - . '\x{6FF6}-\x{6FFC}\x{6FFE}-\x{700F}\x{7011}\x{7012}\x{7014}-\x{701D}' - . '\x{701F}-\x{7046}\x{7048}-\x{704A}\x{704C}\x{704D}\x{704F}-\x{7071}' - . '\x{7074}-\x{707A}\x{707C}-\x{7080}\x{7082}-\x{708C}\x{708E}-\x{7096}' - . '\x{7098}-\x{709A}\x{709C}-\x{70A9}\x{70AB}-\x{70B1}\x{70B3}-\x{70B5}' - . '\x{70B7}-\x{70D4}\x{70D6}-\x{70FD}\x{70FF}-\x{7107}\x{7109}-\x{7113}' - . '\x{7115}-\x{7123}\x{7125}-\x{7132}\x{7135}-\x{713B}\x{713D}-\x{7154}\x{7156}' - . '\x{7158}-\x{716A}\x{716C}\x{716E}-\x{718C}\x{718E}-\x{7195}\x{7197}-\x{71A5}' - . '\x{71A7}-\x{71AA}\x{71AC}-\x{71B5}\x{71B7}-\x{71CB}\x{71CD}-\x{71D2}' - . '\x{71D4}-\x{71F2}\x{71F4}-\x{71F9}\x{71FB}-\x{71FF}\x{7201}-\x{720A}' - . '\x{720C}-\x{7210}\x{7212}-\x{7214}\x{7216}\x{7218}-\x{721F}\x{7221}-\x{7223}' - . '\x{7226}-\x{722E}\x{7230}-\x{7233}\x{7235}-\x{7244}\x{7246}-\x{724D}\x{724F}' - . '\x{7251}-\x{7254}\x{7256}-\x{729F}\x{72A1}-\x{72AA}\x{72AC}-\x{72BD}' - . '\x{72BF}-\x{7301}\x{7303}-\x{730F}\x{7311}-\x{731E}\x{7320}-\x{7327}' - . '\x{7329}-\x{732E}\x{7330}-\x{734E}\x{7350}-\x{7352}\x{7354}-\x{7362}' - . '\x{7364}-\x{739B}\x{739D}-\x{73C0}\x{73C2}-\x{73E0}\x{73E2}\x{73E3}' - . '\x{73E5}-\x{73F2}\x{73F4}-\x{73FA}\x{73FC}-\x{7417}\x{7419}-\x{7438}' - . '\x{743A}-\x{743D}\x{743F}-\x{7446}\x{7448}\x{744A}-\x{7457}\x{7459}-\x{745F}' - . '\x{7461}-\x{747A}\x{747C}-\x{7483}\x{7485}-\x{7495}\x{7497}-\x{749C}' - . '\x{749E}-\x{74A1}\x{74A3}-\x{74C6}\x{74CA}\x{74CB}\x{74CD}-\x{74EA}' - . '\x{74EC}-\x{750D}\x{750F}-\x{751F}\x{7521}-\x{7533}\x{7535}-\x{7540}' - . '\x{7542}-\x{7549}\x{754B}-\x{7551}\x{7553}\x{7554}\x{7556}-\x{755D}\x{755F}' - . '\x{7560}\x{7562}-\x{7570}\x{7572}\x{7574}-\x{7579}\x{757C}-\x{7584}' - . '\x{7586}-\x{758D}\x{758F}-\x{75A8}\x{75AA}-\x{75B6}\x{75B8}-\x{75DB}' - . '\x{75DD}-\x{75E8}\x{75EA}-\x{75ED}\x{75EF}-\x{762B}\x{762D}-\x{7643}' - . '\x{7646}-\x{764D}\x{764F}\x{7650}\x{7652}-\x{7654}\x{7656}-\x{7672}' - . '\x{7674}-\x{7679}\x{767B}-\x{768C}\x{768E}-\x{76A0}\x{76A3}\x{76A4}\x{76A6}' - . '\x{76A7}\x{76A9}-\x{76B2}\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}-\x{76C0}' - . '\x{76C2}-\x{76CA}\x{76CD}-\x{76D8}\x{76DA}-\x{76EA}\x{76EC}-\x{76FF}\x{7701}' - . '\x{7703}-\x{770D}\x{770F}-\x{7720}\x{7722}\x{7723}\x{7725}-\x{772A}' - . '\x{772C}-\x{773E}\x{7740}\x{7741}\x{7743}-\x{7763}\x{7765}-\x{7795}' - . '\x{7797}-\x{77A3}\x{77A5}-\x{77BD}\x{77BF}\x{77C0}\x{77C2}-\x{77D1}' - . '\x{77D3}-\x{77DC}\x{77DE}-\x{77E3}\x{77E5}\x{77E7}-\x{77F3}\x{77F6}-\x{7806}' - . '\x{7808}-\x{7823}\x{7825}-\x{7835}\x{7837}-\x{783E}\x{7840}\x{7841}' - . '\x{7843}-\x{7845}\x{7847}-\x{784A}\x{784C}-\x{784E}\x{7850}-\x{7875}' - . '\x{7877}-\x{7887}\x{7889}-\x{78C1}\x{78C3}-\x{78C6}\x{78C8}-\x{78D1}' - . '\x{78D3}-\x{78EF}\x{78F1}-\x{78F7}\x{78F9}-\x{78FF}\x{7901}-\x{7907}' - . '\x{7909}-\x{790C}\x{790E}-\x{7914}\x{7916}-\x{791E}\x{7921}-\x{7931}' - . '\x{7933}-\x{7935}\x{7937}-\x{7958}\x{795A}-\x{796B}\x{796D}\x{796F}-\x{7974}' - . '\x{7977}-\x{7985}\x{7988}-\x{799C}\x{799F}-\x{79A8}\x{79AA}-\x{79BB}' - . '\x{79BD}-\x{79C3}\x{79C5}\x{79C6}\x{79C8}-\x{79CB}\x{79CD}-\x{79D3}\x{79D5}' - . '\x{79D6}\x{79D8}-\x{7A00}\x{7A02}-\x{7A06}\x{7A08}\x{7A0A}-\x{7A2B}' - . '\x{7A2D}-\x{7A35}\x{7A37}\x{7A39}\x{7A3B}-\x{7A4E}\x{7A50}-\x{7A62}' - . '\x{7A65}-\x{7A69}\x{7A6B}-\x{7A6E}\x{7A70}-\x{7A81}\x{7A83}-\x{7A99}' - . '\x{7A9C}-\x{7AB8}\x{7ABA}\x{7ABE}-\x{7AC1}\x{7AC4}\x{7AC5}\x{7AC7}-\x{7AD6}' - . '\x{7AD8}\x{7AD9}\x{7ADB}-\x{7AE8}\x{7AEA}-\x{7AF4}\x{7AF6}-\x{7AFB}' - . '\x{7AFD}-\x{7B06}\x{7B08}-\x{7B1E}\x{7B20}-\x{7B26}\x{7B28}\x{7B2A}-\x{7B41}' - . '\x{7B43}-\x{7B52}\x{7B54}-\x{7B6E}\x{7B70}-\x{7B79}\x{7B7B}-\x{7B85}' - . '\x{7B87}-\x{7B91}\x{7B93}-\x{7BA2}\x{7BA4}\x{7BA6}-\x{7BAF}\x{7BB1}' - . '\x{7BB3}-\x{7BCE}\x{7BD0}-\x{7BF9}\x{7BFB}-\x{7C13}\x{7C15}-\x{7C1A}' - . '\x{7C1C}-\x{7C2D}\x{7C30}-\x{7C4E}\x{7C50}\x{7C51}\x{7C53}\x{7C54}' - . '\x{7C56}-\x{7C5C}\x{7C5E}-\x{7C75}\x{7C77}-\x{7C82}\x{7C84}-\x{7C86}' - . '\x{7C88}-\x{7C92}\x{7C94}-\x{7C99}\x{7C9B}-\x{7CAA}\x{7CAD}-\x{7CD2}' - . '\x{7CD4}-\x{7CD9}\x{7CDC}-\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}-\x{7CFB}\x{7CFD}' - . '\x{7CFE}\x{7D00}-\x{7D22}\x{7D24}-\x{7D29}\x{7D2B}\x{7D2C}\x{7D2E}-\x{7D47}' - . '\x{7D49}-\x{7D4C}\x{7D4E}-\x{7D59}\x{7D5B}-\x{7D63}\x{7D65}-\x{7D77}' - . '\x{7D79}-\x{7D81}\x{7D83}-\x{7D94}\x{7D96}\x{7D97}\x{7D99}\x{7D9B}-\x{7DA3}' - . '\x{7DA5}-\x{7DA7}\x{7DA9}-\x{7DCC}\x{7DCE}-\x{7DD2}\x{7DD4}-\x{7DDB}' - . '\x{7DDD}-\x{7DE3}\x{7DE6}-\x{7DEA}\x{7DEC}-\x{7DFC}\x{7E00}-\x{7E17}' - . '\x{7E19}-\x{7E49}\x{7E4C}-\x{7E5A}\x{7E5C}-\x{7E63}\x{7E65}-\x{7E9C}' - . '\x{7E9E}-\x{7F3A}\x{7F3D}-\x{7F40}\x{7F42}-\x{7F45}\x{7F47}-\x{7F58}' - . '\x{7F5A}-\x{7F83}\x{7F85}-\x{7F8F}\x{7F91}-\x{7F96}\x{7F98}\x{7F9A}-\x{7FB3}' - . '\x{7FB5}-\x{7FD5}\x{7FD7}-\x{7FDC}\x{7FDE}-\x{7FE3}\x{7FE5}-\x{8009}' - . '\x{800B}-\x{802E}\x{8030}-\x{803B}\x{803D}-\x{803F}\x{8041}-\x{8065}' - . '\x{8067}-\x{8087}\x{8089}-\x{808D}\x{808F}-\x{8093}\x{8095}-\x{80A5}' - . '\x{80A9}-\x{80AB}\x{80AD}-\x{80B2}\x{80B4}-\x{80B8}\x{80BA}-\x{80DE}' - . '\x{80E0}-\x{8102}\x{8105}-\x{8116}\x{8118}-\x{8132}\x{8136}-\x{815E}' - . '\x{8160}-\x{8183}\x{8185}-\x{818F}\x{8191}-\x{8195}\x{8197}-\x{81CA}' - . '\x{81CC}-\x{81D2}\x{81D4}-\x{81E3}\x{81E5}-\x{81EE}\x{81F1}-\x{8212}' - . '\x{8214}-\x{8216}\x{8218}-\x{8223}\x{8225}-\x{822D}\x{822F}-\x{8240}' - . '\x{8242}-\x{8261}\x{8263}\x{8264}\x{8266}-\x{828B}\x{828D}-\x{82B1}' - . '\x{82B3}-\x{82E1}\x{82E3}-\x{82FB}\x{82FD}-\x{8309}\x{830B}-\x{830F}' - . '\x{8311}-\x{832F}\x{8331}-\x{8354}\x{8356}-\x{839E}\x{83A0}-\x{83B4}' - . '\x{83B6}-\x{83BD}\x{83BF}-\x{83E5}\x{83E7}-\x{83EC}\x{83EE}-\x{8413}\x{8415}' - . '\x{8418}-\x{841E}\x{8421}-\x{8457}\x{8459}-\x{8482}\x{8484}-\x{8494}' - . '\x{8496}-\x{84AC}\x{84AE}-\x{84B6}\x{84B8}-\x{84C2}\x{84C4}-\x{84D9}' - . '\x{84DB}-\x{84EC}\x{84EE}-\x{8504}\x{8506}-\x{850F}\x{8511}-\x{8531}' - . '\x{8534}-\x{854B}\x{854D}-\x{854F}\x{8551}-\x{857E}\x{8580}-\x{8592}' - . '\x{8594}-\x{8596}\x{8598}-\x{85B1}\x{85B3}-\x{85BA}\x{85BC}-\x{85CB}' - . '\x{85CD}-\x{85ED}\x{85EF}-\x{85F2}\x{85F4}-\x{85FB}\x{85FD}-\x{8602}' - . '\x{8604}-\x{860C}\x{860F}\x{8611}-\x{8614}\x{8616}-\x{861C}\x{861E}-\x{8636}' - . '\x{8638}-\x{8656}\x{8658}-\x{8674}\x{8676}-\x{8688}\x{868A}-\x{8691}' - . '\x{8693}-\x{869F}\x{86A1}-\x{86A5}\x{86A7}-\x{86CC}\x{86CE}-\x{86D4}' - . '\x{86D6}-\x{86DF}\x{86E1}-\x{86E6}\x{86E8}-\x{86FC}\x{86FE}-\x{871C}' - . '\x{871E}-\x{872E}\x{8730}-\x{873C}\x{873E}-\x{8744}\x{8746}-\x{874A}' - . '\x{874C}-\x{8770}\x{8772}-\x{877E}\x{8780}-\x{878D}\x{878F}-\x{8798}' - . '\x{879A}-\x{87D9}\x{87DB}-\x{87EF}\x{87F1}-\x{8806}\x{8808}-\x{8811}' - . '\x{8813}-\x{882C}\x{882E}-\x{8839}\x{883B}-\x{8846}\x{8848}-\x{8857}' - . '\x{8859}-\x{885B}\x{885D}\x{885E}\x{8860}-\x{8879}\x{887B}-\x{88B4}' - . '\x{88B6}-\x{88E5}\x{88E7}\x{88E8}\x{88EA}-\x{88EC}\x{88EE}-\x{8902}' - . '\x{8904}-\x{890E}\x{8910}-\x{8923}\x{8925}-\x{894C}\x{894E}-\x{8964}' - . '\x{8966}-\x{8974}\x{8976}-\x{897C}\x{897E}-\x{898C}\x{898E}\x{898F}' - . '\x{8991}-\x{8993}\x{8995}-\x{8998}\x{899A}-\x{89A8}\x{89AA}-\x{89AF}' - . '\x{89B1}-\x{89B3}\x{89B5}-\x{89BA}\x{89BD}-\x{89ED}\x{89EF}-\x{89F4}' - . '\x{89F6}-\x{89F8}\x{89FA}-\x{89FC}\x{89FE}-\x{8A04}\x{8A07}-\x{8A13}' - . '\x{8A15}-\x{8A18}\x{8A1A}-\x{8A1F}\x{8A22}-\x{8A2A}\x{8A2C}-\x{8A32}' - . '\x{8A34}-\x{8A3C}\x{8A3E}-\x{8A4A}\x{8A4C}-\x{8A63}\x{8A65}-\x{8A77}' - . '\x{8A79}-\x{8A7C}\x{8A7E}-\x{8A87}\x{8A89}-\x{8A9E}\x{8AA0}-\x{8AAC}\x{8AAE}' - . '\x{8AB0}-\x{8AB6}\x{8AB8}-\x{8ACF}\x{8AD1}-\x{8AEB}\x{8AED}-\x{8B0B}' - . '\x{8B0D}-\x{8B28}\x{8B2A}-\x{8B31}\x{8B33}-\x{8B37}\x{8B39}-\x{8B3E}' - . '\x{8B40}-\x{8B60}\x{8B63}-\x{8B68}\x{8B6A}-\x{8B71}\x{8B73}\x{8B74}' - . '\x{8B76}-\x{8B7B}\x{8B7D}-\x{8B80}\x{8B82}-\x{8B86}\x{8B88}-\x{8B8C}\x{8B8E}' - . '\x{8B90}-\x{8B9A}\x{8B9C}-\x{8C37}\x{8C39}-\x{8C3F}\x{8C41}-\x{8C43}' - . '\x{8C45}-\x{8C50}\x{8C54}-\x{8C57}\x{8C59}-\x{8C73}\x{8C75}-\x{8C7B}\x{8C7D}' - . '\x{8C7E}\x{8C80}-\x{8C82}\x{8C84}-\x{8C86}\x{8C88}-\x{8C8A}\x{8C8C}\x{8C8D}' - . '\x{8C8F}-\x{8C9A}\x{8C9C}-\x{8CA5}\x{8CA7}-\x{8CCA}\x{8CCC}\x{8CCE}-\x{8CD5}' - . '\x{8CD7}\x{8CD9}-\x{8CE8}\x{8CEA}-\x{8CF6}\x{8CF8}-\x{8D00}\x{8D02}-\x{8D10}' - . '\x{8D13}-\x{8D7B}\x{8D7D}-\x{8DA5}\x{8DA7}-\x{8DBF}\x{8DC1}-\x{8DE4}' - . '\x{8DE6}-\x{8E00}\x{8E02}-\x{8E0A}\x{8E0C}-\x{8E31}\x{8E33}-\x{8E45}' - . '\x{8E47}-\x{8E4E}\x{8E50}-\x{8E6D}\x{8E6F}-\x{8E74}\x{8E76}\x{8E78}' - . '\x{8E7A}-\x{8E98}\x{8E9A}\x{8E9C}-\x{8EA1}\x{8EA3}-\x{8EB2}\x{8EB4}\x{8EB5}' - . '\x{8EB8}-\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}-\x{8ED8}\x{8EDA}-\x{8EE1}' - . '\x{8EE4}-\x{8EEF}\x{8EF1}-\x{8F0B}\x{8F0D}\x{8F0E}\x{8F10}-\x{8F18}' - . '\x{8F1A}-\x{8F2C}\x{8F2E}-\x{8F39}\x{8F3B}-\x{8F40}\x{8F42}-\x{8F5B}' - . '\x{8F5D}-\x{8F9C}\x{8F9E}-\x{8FA3}\x{8FA5}-\x{8FB2}\x{8FB4}-\x{8FB9}' - . '\x{8FBB}-\x{8FC2}\x{8FC4}-\x{8FC9}\x{8FCB}-\x{8FE6}\x{8FE8}-\x{900D}' - . '\x{900F}-\x{9029}\x{902B}\x{902D}-\x{9036}\x{9038}\x{903A}-\x{903F}' - . '\x{9041}-\x{9045}\x{9047}-\x{90AA}\x{90AC}-\x{90CB}\x{90CE}-\x{90D1}' - . '\x{90D3}-\x{90F5}\x{90F7}-\x{9109}\x{910B}-\x{913B}\x{913E}-\x{9158}' - . '\x{915A}-\x{917A}\x{917C}-\x{9194}\x{9196}\x{9199}-\x{91A3}\x{91A5}-\x{91A8}' - . '\x{91AA}-\x{91B7}\x{91B9}-\x{91BE}\x{91C0}-\x{91C3}\x{91C5}-\x{91C7}' - . '\x{91C9}-\x{91D5}\x{91D7}-\x{91DF}\x{91E2}-\x{91EE}\x{91F0}-\x{91F5}' - . '\x{91F7}-\x{91FB}\x{91FD}-\x{9212}\x{9214}-\x{921E}\x{9220}\x{9221}' - . '\x{9223}-\x{922B}\x{922D}-\x{9242}\x{9245}-\x{9268}\x{926B}-\x{9270}' - . '\x{9272}-\x{9280}\x{9282}\x{9283}\x{9285}-\x{929D}\x{929F}-\x{92BC}' - . '\x{92BE}-\x{92D3}\x{92D5}-\x{92DA}\x{92DC}-\x{92E1}\x{92E3}-\x{931B}' - . '\x{931D}-\x{932B}\x{932D}-\x{932F}\x{9332}-\x{9361}\x{9363}-\x{9367}\x{9369}' - . '\x{936A}\x{936C}-\x{936E}\x{9370}-\x{9372}\x{9374}-\x{9377}\x{9379}-\x{937E}' - . '\x{9380}\x{9382}-\x{938A}\x{938C}-\x{939B}\x{939D}-\x{939F}\x{93A1}-\x{93AA}' - . '\x{93AC}-\x{93BA}\x{93BC}-\x{93DF}\x{93E1}-\x{93E4}\x{93E6}-\x{93F2}' - . '\x{93F4}-\x{9401}\x{9403}-\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}' - . '\x{9422}\x{9423}\x{9425}-\x{9442}\x{9444}-\x{944D}\x{944F}-\x{9459}' - . '\x{945B}-\x{946B}\x{946D}-\x{947A}\x{947C}-\x{9577}\x{957A}-\x{957D}' - . '\x{957F}-\x{9584}\x{9586}-\x{9596}\x{9598}-\x{959F}\x{95A1}-\x{95B2}' - . '\x{95B5}-\x{95B7}\x{95B9}-\x{95C0}\x{95C2}-\x{95D8}\x{95DA}-\x{95DC}' - . '\x{95DE}-\x{9624}\x{9627}\x{9628}\x{962A}-\x{963D}\x{963F}-\x{9655}' - . '\x{9658}-\x{9664}\x{9666}-\x{9678}\x{967C}-\x{967E}\x{9680}\x{9683}-\x{968B}' - . '\x{968D}-\x{9695}\x{9697}-\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}-\x{96AA}' - . '\x{96AC}-\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}-\x{96E3}\x{96E5}' - . '\x{96E8}-\x{96FB}\x{96FD}-\x{9713}\x{9715}\x{9716}\x{9718}\x{9719}' - . '\x{971C}-\x{9732}\x{9735}\x{9736}\x{9738}-\x{973F}\x{9742}-\x{974C}' - . '\x{974E}-\x{9756}\x{9758}-\x{9762}\x{9765}-\x{9770}\x{9772}-\x{9774}' - . '\x{9776}-\x{9786}\x{9788}\x{978A}-\x{979A}\x{979C}-\x{97A8}\x{97AA}-\x{97AF}' - . '\x{97B2}-\x{97B4}\x{97B6}-\x{97BD}\x{97BF}\x{97C1}-\x{97D1}\x{97D3}-\x{97FB}' - . '\x{97FD}-\x{981E}\x{9820}-\x{9824}\x{9826}-\x{9829}\x{982B}\x{982D}-\x{9832}' - . '\x{9834}-\x{9839}\x{983B}-\x{983D}\x{983F}-\x{9841}\x{9843}-\x{9846}' - . '\x{9848}-\x{984A}\x{984C}-\x{9855}\x{9857}-\x{9865}\x{9867}\x{9869}-\x{98B6}' - . '\x{98B8}-\x{98C6}\x{98C8}\x{98C9}\x{98CB}-\x{98E0}\x{98E2}\x{98E3}' - . '\x{98E5}-\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}-\x{98F7}\x{98F9}\x{98FA}' - . '\x{98FC}-\x{9918}\x{991A}-\x{993A}\x{993C}-\x{9943}\x{9945}-\x{994C}' - . '\x{994E}-\x{9959}\x{995B}\x{995C}\x{995E}-\x{99BE}\x{99C0}-\x{99C4}' - . '\x{99C6}-\x{99DF}\x{99E1}-\x{99E5}\x{99E7}-\x{99EA}\x{99EC}-\x{99F4}' - . '\x{99F6}-\x{9A0F}\x{9A11}\x{9A14}-\x{9A16}\x{9A19}-\x{9A27}\x{9A29}-\x{9A3A}' - . '\x{9A3C}-\x{9A50}\x{9A52}-\x{9A57}\x{9A59}-\x{9A5C}\x{9A5E}-\x{9A62}' - . '\x{9A64}-\x{9AA8}\x{9AAA}-\x{9ABC}\x{9ABE}-\x{9AC7}\x{9AC9}-\x{9AD6}' - . '\x{9AD8}-\x{9ADF}\x{9AE1}-\x{9AE3}\x{9AE5}-\x{9AE7}\x{9AEA}-\x{9AEF}' - . '\x{9AF1}-\x{9AFF}\x{9B01}\x{9B03}-\x{9B08}\x{9B0A}-\x{9B13}\x{9B15}-\x{9B1A}' - . '\x{9B1C}-\x{9B33}\x{9B35}-\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}-\x{9B4F}' - . '\x{9B51}-\x{9B56}\x{9B58}-\x{9B61}\x{9B63}-\x{9B71}\x{9B73}-\x{9B88}\x{9B8A}' - . '\x{9B8B}\x{9B8D}-\x{9B98}\x{9B9A}-\x{9BC1}\x{9BC3}-\x{9BF5}\x{9BF7}-\x{9BFF}' - . '\x{9C02}\x{9C05}-\x{9C2D}\x{9C2F}-\x{9C41}\x{9C43}-\x{9C4E}\x{9C50}' - . '\x{9C52}-\x{9C60}\x{9C62}\x{9C63}\x{9C65}-\x{9C75}\x{9C77}-\x{9C7A}' - . '\x{9C7C}-\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}-\x{9D26}\x{9D28}\x{9D29}\x{9D2B}' - . '\x{9D2D}-\x{9D34}\x{9D36}-\x{9D3B}\x{9D3D}-\x{9D43}\x{9D45}-\x{9D6C}' - . '\x{9D6E}-\x{9D8E}\x{9D90}-\x{9D94}\x{9D96}-\x{9DAD}\x{9DAF}-\x{9DBC}\x{9DBE}' - . '\x{9DBF}\x{9DC1}-\x{9DC5}\x{9DC7}-\x{9DE9}\x{9DEB}-\x{9DFB}\x{9DFD}-\x{9E0D}' - . '\x{9E0F}-\x{9E15}\x{9E17}-\x{9E1B}\x{9E1D}-\x{9E77}\x{9E79}\x{9E7A}' - . '\x{9E7C}-\x{9E8E}\x{9E91}-\x{9E94}\x{9E96}\x{9E97}\x{9E99}-\x{9E9D}' - . '\x{9E9F}-\x{9EA1}\x{9EA3}-\x{9EAA}\x{9EAD}-\x{9EB0}\x{9EB2}-\x{9EB8}' - . '\x{9EBB}-\x{9EEB}\x{9EED}-\x{9EF0}\x{9EF2}-\x{9F02}\x{9F04}-\x{9F10}\x{9F12}' - . '\x{9F13}\x{9F15}-\x{9F20}\x{9F22}-\x{9F25}\x{9F27}-\x{9F44}\x{9F46}-\x{9F52}' - . '\x{9F54}-\x{9F61}\x{9F63}-\x{9F6C}\x{9F6E}-\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu', + . '\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' + . '\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' + . '\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' + . '\x{49B6}\x{49B7}\x{4C77}\x{4C9F}-\x{4CA3}\x{4D13}-\x{4D19}\x{4DAE}' + . '\x{4E00}-\x{4E11}\x{4E13}-\x{4E28}\x{4E2A}-\x{4E54}\x{4E56}-\x{4E67}' + . '\x{4E69}-\x{4E78}\x{4E7A}-\x{4E89}\x{4E8B}-\x{4E95}\x{4E97}-\x{4EA2}' + . '\x{4EA4}-\x{4EBB}\x{4EBD}-\x{4ECB}\x{4ECD}-\x{4EE6}\x{4EE8}-\x{4EEC}' + . '\x{4EEF}-\x{4EF7}\x{4EFB}\x{4EFD}\x{4EFF}-\x{4F06}\x{4F08}-\x{4F15}' + . '\x{4F17}-\x{4F27}\x{4F29}-\x{4F30}\x{4F32}-\x{4F34}\x{4F36}\x{4F38}-\x{4F3F}' + . '\x{4F41}-\x{4F43}\x{4F45}-\x{4F70}\x{4F72}-\x{4F8B}\x{4F8D}\x{4F8F}-\x{4FA1}' + . '\x{4FA3}-\x{4FAC}\x{4FAE}-\x{4FBC}\x{4FBE}-\x{4FC5}\x{4FC7}\x{4FC9}-\x{4FCB}' + . '\x{4FCD}-\x{4FE1}\x{4FE3}-\x{4FFB}\x{4FFE}-\x{500F}\x{5011}-\x{5033}' + . '\x{5035}-\x{5037}\x{5039}-\x{503C}\x{503E}-\x{5041}\x{5043}-\x{504F}\x{5051}' + . '\x{5053}-\x{5057}\x{5059}-\x{507B}\x{507D}-\x{5080}\x{5082}-\x{5092}' + . '\x{5094}-\x{5096}\x{5098}-\x{509E}\x{50A2}-\x{50B8}\x{50BA}-\x{50C2}' + . '\x{50C4}-\x{50D7}\x{50D9}-\x{50DE}\x{50E0}\x{50E3}-\x{50EA}\x{50EC}-\x{50F3}' + . '\x{50F5}\x{50F6}\x{50F8}-\x{511A}\x{511C}-\x{5127}\x{5129}\x{512A}' + . '\x{512C}-\x{5141}\x{5143}-\x{5149}\x{514B}-\x{514E}\x{5150}-\x{5152}' + . '\x{5154}-\x{5157}\x{5159}-\x{515F}\x{5161}-\x{5163}\x{5165}-\x{5171}' + . '\x{5173}-\x{517D}\x{517F}-\x{5182}\x{5185}-\x{518D}\x{518F}-\x{51A0}\x{51A2}' + . '\x{51A4}-\x{51A8}\x{51AA}-\x{51AC}\x{51AE}-\x{51B3}\x{51B5}-\x{51B7}\x{51B9}' + . '\x{51BB}-\x{51C1}\x{51C3}-\x{51D1}\x{51D4}-\x{51DE}\x{51E0}-\x{51E5}' + . '\x{51E7}-\x{51EB}\x{51ED}\x{51EF}-\x{51F1}\x{51F3}-\x{5226}\x{5228}-\x{524E}' + . '\x{5250}-\x{5252}\x{5254}-\x{5265}\x{5267}-\x{5270}\x{5272}-\x{5278}' + . '\x{527A}-\x{5284}\x{5286}-\x{528D}\x{528F}-\x{52A3}\x{52A5}-\x{52C3}\x{52C6}' + . '\x{52C7}\x{52C9}-\x{52CB}\x{52CD}\x{52CF}\x{52D0}\x{52D2}\x{52D3}' + . '\x{52D5}-\x{52E0}\x{52E2}-\x{52E4}\x{52E6}-\x{52ED}\x{52EF}-\x{5302}' + . '\x{5305}-\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}-\x{5326}\x{5328}' + . '\x{532A}-\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}-\x{5341}\x{5343}-\x{535A}' + . '\x{535C}\x{535E}-\x{5367}\x{5369}\x{536B}\x{536C}\x{536E}-\x{537F}' + . '\x{5381}-\x{53A0}\x{53A2}-\x{53A9}\x{53AC}-\x{53AE}\x{53B0}-\x{53B9}' + . '\x{53BB}-\x{53C4}\x{53C6}-\x{53CE}\x{53D0}-\x{53D9}\x{53DB}\x{53DC}' + . '\x{53DF}-\x{53E6}\x{53E8}-\x{53FE}\x{5401}-\x{5419}\x{541B}-\x{5421}' + . '\x{5423}-\x{544B}\x{544D}-\x{545C}\x{545E}-\x{5468}\x{546A}-\x{5489}' + . '\x{548B}-\x{54B4}\x{54B6}-\x{54F5}\x{54F7}-\x{5514}\x{5516}\x{5517}' + . '\x{551A}-\x{5546}\x{5548}-\x{555F}\x{5561}-\x{5579}\x{557B}-\x{55DF}' + . '\x{55E1}-\x{55F7}\x{55F9}-\x{5604}\x{5606}-\x{5609}\x{560C}-\x{561F}' + . '\x{5621}-\x{562A}\x{562C}-\x{5636}\x{5638}-\x{563B}\x{563D}-\x{5643}' + . '\x{5645}-\x{564A}\x{564C}-\x{5650}\x{5652}-\x{5655}\x{5657}-\x{565E}\x{5660}' + . '\x{5662}-\x{5674}\x{5676}-\x{567C}\x{567E}-\x{5687}\x{568A}\x{568C}-\x{5695}' + . '\x{5697}-\x{569D}\x{569F}-\x{56A1}\x{56A3}-\x{56B9}\x{56BB}-\x{56CE}' + . '\x{56D0}-\x{56D8}\x{56DA}-\x{56E5}\x{56E7}-\x{56F5}\x{56F7}\x{56F9}\x{56FA}' + . '\x{56FD}-\x{5704}\x{5706}-\x{5710}\x{5712}-\x{5716}\x{5718}-\x{5720}\x{5722}' + . '\x{5723}\x{5725}-\x{573C}\x{573E}-\x{5742}\x{5744}-\x{5747}\x{5749}-\x{5754}' + . '\x{5757}\x{5759}-\x{5762}\x{5764}-\x{576D}\x{576F}-\x{5777}\x{5779}-\x{5780}' + . '\x{5782}-\x{5786}\x{5788}-\x{5795}\x{5797}-\x{57A7}\x{57A9}-\x{57C9}' + . '\x{57CB}-\x{57D0}\x{57D2}-\x{57D6}\x{57D8}-\x{57DA}\x{57DC}\x{57DD}' + . '\x{57DF}-\x{5816}\x{5819}-\x{5840}\x{5842}-\x{584F}\x{5851}-\x{5855}' + . '\x{5857}-\x{585F}\x{5861}-\x{5865}\x{5868}-\x{5876}\x{5878}-\x{5894}' + . '\x{5896}-\x{58A9}\x{58AB}-\x{58B4}\x{58B7}-\x{58BF}\x{58C1}\x{58C2}' + . '\x{58C5}-\x{58CB}\x{58CE}\x{58CF}\x{58D1}-\x{58DB}\x{58DD}-\x{58E0}' + . '\x{58E2}-\x{58E5}\x{58E7}-\x{58F4}\x{58F6}-\x{5900}\x{5902}-\x{5904}\x{5906}' + . '\x{5907}\x{5909}-\x{5910}\x{5912}\x{5914}-\x{5922}\x{5924}-\x{5932}\x{5934}' + . '\x{5935}\x{5937}-\x{5958}\x{595A}\x{595C}-\x{599A}\x{599C}-\x{59B6}' + . '\x{59B8}-\x{59E6}\x{59E8}-\x{5A23}\x{5A25}\x{5A27}-\x{5A2B}\x{5A2D}-\x{5A2F}' + . '\x{5A31}-\x{5A53}\x{5A55}-\x{5A58}\x{5A5A}-\x{5A6E}\x{5A70}\x{5A72}-\x{5A86}' + . '\x{5A88}-\x{5A8C}\x{5A8E}-\x{5AAA}\x{5AAC}-\x{5ACF}\x{5AD1}\x{5AD2}' + . '\x{5AD4}-\x{5AEE}\x{5AF1}-\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}-\x{5B38}' + . '\x{5B3A}-\x{5B45}\x{5B47}-\x{5B4E}\x{5B50}\x{5B51}\x{5B53}-\x{5B5F}' + . '\x{5B62}-\x{5B6E}\x{5B70}-\x{5B78}\x{5B7A}-\x{5B7D}\x{5B7F}-\x{5B85}' + . '\x{5B87}-\x{5B8F}\x{5B91}-\x{5BA8}\x{5BAA}-\x{5BB1}\x{5BB3}-\x{5BB6}' + . '\x{5BB8}-\x{5BBB}\x{5BBD}-\x{5BC7}\x{5BCA}-\x{5BD6}\x{5BD8}\x{5BD9}' + . '\x{5BDB}-\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}-\x{5C1A}\x{5C1C}-\x{5C22}\x{5C24}' + . '\x{5C25}\x{5C27}\x{5C28}\x{5C2A}-\x{5C35}\x{5C37}-\x{5C59}\x{5C5B}-\x{5C84}' + . '\x{5C86}-\x{5CB3}\x{5CB5}-\x{5CB8}\x{5CBA}-\x{5CBF}\x{5CC1}-\x{5CD4}' + . '\x{5CD6}-\x{5CDC}\x{5CDE}-\x{5CF4}\x{5CF6}-\x{5D2A}\x{5D2C}-\x{5D2E}' + . '\x{5D30}-\x{5D3A}\x{5D3C}-\x{5D52}\x{5D54}-\x{5D56}\x{5D58}-\x{5D5B}' + . '\x{5D5D}-\x{5D5F}\x{5D61}-\x{5D82}\x{5D84}-\x{5D95}\x{5D97}-\x{5DA2}' + . '\x{5DA5}-\x{5DAA}\x{5DAC}-\x{5DB2}\x{5DB4}-\x{5DB8}\x{5DBA}-\x{5DC3}' + . '\x{5DC5}-\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}-\x{5DF5}\x{5DF7}-\x{5E11}' + . '\x{5E13}-\x{5E3E}\x{5E40}-\x{5E47}\x{5E49}-\x{5E50}\x{5E52}-\x{5E91}' + . '\x{5E93}-\x{5EB9}\x{5EBB}-\x{5EBF}\x{5EC1}-\x{5EEA}\x{5EEC}-\x{5EF8}' + . '\x{5EFA}-\x{5F08}\x{5F0A}-\x{5F0D}\x{5F0F}\x{5F11}-\x{5F3A}\x{5F3C}' + . '\x{5F3E}-\x{5F8E}\x{5F90}-\x{5F99}\x{5F9B}-\x{5FA2}\x{5FA5}-\x{5FAF}' + . '\x{5FB1}-\x{5FC1}\x{5FC3}-\x{5FCD}\x{5FCF}-\x{5FDA}\x{5FDC}-\x{5FDE}\x{5FE0}' + . '\x{5FE1}\x{5FE3}-\x{5FEB}\x{5FED}-\x{5FFB}\x{5FFD}-\x{6022}\x{6024}-\x{6055}' + . '\x{6057}-\x{605F}\x{6062}-\x{6070}\x{6072}\x{6073}\x{6075}-\x{6090}\x{6092}' + . '\x{6094}-\x{60A4}\x{60A6}-\x{60A8}\x{60AA}-\x{60D1}\x{60D3}-\x{60D5}' + . '\x{60D7}-\x{60DD}\x{60DF}-\x{60E2}\x{60E4}\x{60E6}-\x{60FC}\x{60FE}-\x{6101}' + . '\x{6103}-\x{6106}\x{6108}-\x{6110}\x{6112}-\x{611D}\x{611F}\x{6120}' + . '\x{6122}-\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}-\x{615F}' + . '\x{6161}-\x{616E}\x{6170}-\x{617A}\x{617C}\x{617E}\x{6180}-\x{6185}' + . '\x{6187}-\x{6196}\x{6198}-\x{619B}\x{619D}-\x{61B8}\x{61BA}\x{61BC}-\x{61D2}' + . '\x{61D4}\x{61D6}-\x{61EB}\x{61ED}\x{61EE}\x{61F0}-\x{61F3}\x{61F5}-\x{6204}' + . '\x{6206}-\x{6234}\x{6236}-\x{6238}\x{623A}-\x{6256}\x{6258}-\x{6281}' + . '\x{6283}-\x{628C}\x{628E}-\x{629C}\x{629E}-\x{62A5}\x{62A7}-\x{62DD}' + . '\x{62DF}-\x{62E9}\x{62EB}-\x{6309}\x{630B}-\x{6316}\x{6318}-\x{6330}' + . '\x{6332}-\x{6334}\x{6336}\x{6338}-\x{633E}\x{6340}-\x{635A}\x{635C}-\x{637E}' + . '\x{6380}-\x{638A}\x{638C}-\x{6392}\x{6394}-\x{63BA}\x{63BC}-\x{63D0}' + . '\x{63D2}-\x{6406}\x{6408}-\x{643A}\x{643D}-\x{6441}\x{6443}-\x{6448}' + . '\x{644A}-\x{6459}\x{645B}-\x{647D}\x{647F}-\x{6485}\x{6487}-\x{64A0}' + . '\x{64A2}-\x{64AE}\x{64B0}-\x{64B5}\x{64B7}-\x{64C7}\x{64C9}-\x{64D4}' + . '\x{64D6}-\x{64E0}\x{64E2}-\x{64E4}\x{64E6}-\x{64ED}\x{64EF}-\x{64F4}' + . '\x{64F6}-\x{64F8}\x{64FA}-\x{6501}\x{6503}-\x{6509}\x{650B}-\x{651E}' + . '\x{6520}-\x{6527}\x{6529}-\x{653F}\x{6541}\x{6543}-\x{6559}\x{655B}-\x{655E}' + . '\x{6560}-\x{656C}\x{656E}-\x{657C}\x{657E}-\x{6589}\x{658B}-\x{6599}' + . '\x{659B}-\x{65B4}\x{65B6}-\x{65BD}\x{65BF}-\x{65C7}\x{65CA}-\x{65D0}' + . '\x{65D2}-\x{65D7}\x{65DA}\x{65DB}\x{65DD}-\x{65E3}\x{65E5}-\x{65E9}' + . '\x{65EB}-\x{65F8}\x{65FA}-\x{65FD}\x{6600}-\x{6616}\x{6618}-\x{661D}' + . '\x{661F}-\x{662B}\x{662D}-\x{6636}\x{6639}\x{663A}\x{663C}-\x{663E}' + . '\x{6640}-\x{6647}\x{6649}-\x{664C}\x{664E}-\x{665F}\x{6661}\x{6662}' + . '\x{6664}-\x{6666}\x{6668}-\x{6691}\x{6693}-\x{669B}\x{669D}\x{669F}-\x{66AB}' + . '\x{66AE}-\x{66CF}\x{66D1}\x{66D2}\x{66D4}-\x{66D6}\x{66D8}-\x{66DE}' + . '\x{66E0}-\x{66EE}\x{66F0}-\x{66FC}\x{66FE}-\x{6701}\x{6703}-\x{6706}' + . '\x{6708}-\x{6718}\x{671A}-\x{6723}\x{6725}-\x{6728}\x{672A}-\x{6766}' + . '\x{6768}-\x{6787}\x{6789}-\x{6795}\x{6797}-\x{67A8}\x{67AA}-\x{67BC}\x{67BE}' + . '\x{67C0}-\x{67D4}\x{67D6}\x{67D8}-\x{67F8}\x{67FA}-\x{6800}\x{6802}-\x{6814}' + . '\x{6816}-\x{681D}\x{681F}-\x{6826}\x{6828}-\x{682F}\x{6831}-\x{6857}\x{685B}' + . '\x{685D}\x{6860}-\x{6879}\x{687B}-\x{6894}\x{6896}-\x{6898}\x{689A}-\x{68A4}' + . '\x{68A6}-\x{68B7}\x{68B9}\x{68BB}-\x{68C2}\x{68C4}\x{68C6}-\x{68D8}' + . '\x{68DA}-\x{68E1}\x{68E3}\x{68E4}\x{68E6}-\x{68FF}\x{6901}-\x{6908}' + . '\x{690A}-\x{693D}\x{693F}-\x{694C}\x{694E}-\x{699E}\x{69A0}\x{69A1}' + . '\x{69A3}-\x{69BF}\x{69C1}-\x{69D0}\x{69D3}\x{69D4}\x{69D8}-\x{69F8}' + . '\x{69FA}-\x{6A02}\x{6A04}-\x{6A0B}\x{6A0D}-\x{6A1B}\x{6A1D}-\x{6A23}' + . '\x{6A25}-\x{6A36}\x{6A38}-\x{6A49}\x{6A4B}-\x{6A52}\x{6A54}-\x{6A5B}' + . '\x{6A5D}-\x{6A6D}\x{6A6F}\x{6A71}-\x{6A85}\x{6A87}-\x{6A89}\x{6A8B}-\x{6A8E}' + . '\x{6A90}-\x{6A98}\x{6A9A}-\x{6A9C}\x{6A9E}-\x{6AA9}\x{6AAB}-\x{6AB0}' + . '\x{6AB2}-\x{6ABD}\x{6ABF}\x{6AC1}-\x{6AC3}\x{6AC5}-\x{6AC7}\x{6ACA}-\x{6AD7}' + . '\x{6AD9}-\x{6AE8}\x{6AEA}-\x{6B0D}\x{6B0F}-\x{6B1A}\x{6B1C}-\x{6B2D}' + . '\x{6B2F}-\x{6B34}\x{6B36}-\x{6B3F}\x{6B41}-\x{6B56}\x{6B59}-\x{6B5C}' + . '\x{6B5E}-\x{6B67}\x{6B69}-\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}-\x{6B74}' + . '\x{6B76}-\x{6B7C}\x{6B7E}-\x{6BB0}\x{6BB2}-\x{6BB7}\x{6BB9}-\x{6BE8}' + . '\x{6BEA}-\x{6BF0}\x{6BF2}\x{6BF3}\x{6BF5}-\x{6BF9}\x{6BFB}-\x{6C09}' + . '\x{6C0B}-\x{6C16}\x{6C18}-\x{6C1B}\x{6C1D}-\x{6C2C}\x{6C2E}-\x{6C38}\x{6C3A}' + . '\x{6C3B}\x{6C3D}-\x{6C44}\x{6C46}-\x{6C6B}\x{6C6D}\x{6C6F}-\x{6C9F}' + . '\x{6CA1}-\x{6CD7}\x{6CD9}-\x{6CF3}\x{6CF5}-\x{6D01}\x{6D03}-\x{6D1B}' + . '\x{6D1D}-\x{6D23}\x{6D25}-\x{6D70}\x{6D72}-\x{6D80}\x{6D82}-\x{6D95}' + . '\x{6D97}-\x{6D9B}\x{6D9D}-\x{6DAF}\x{6DB2}-\x{6DB5}\x{6DB7}-\x{6DFD}\x{6E00}' + . '\x{6E03}-\x{6E05}\x{6E07}-\x{6E11}\x{6E14}-\x{6E17}\x{6E19}-\x{6E29}' + . '\x{6E2B}-\x{6E4B}\x{6E4D}-\x{6E6B}\x{6E6D}-\x{6E75}\x{6E77}-\x{6E79}' + . '\x{6E7E}-\x{6E8A}\x{6E8D}-\x{6E94}\x{6E96}-\x{6EDA}\x{6EDC}\x{6EDE}-\x{6EE2}' + . '\x{6EE4}-\x{6F03}\x{6F05}-\x{6F0A}\x{6F0C}-\x{6F41}\x{6F43}-\x{6F47}\x{6F49}' + . '\x{6F4B}-\x{6F78}\x{6F7A}-\x{6F97}\x{6F99}\x{6F9B}-\x{6F9E}\x{6FA0}-\x{6FB6}' + . '\x{6FB8}-\x{6FC4}\x{6FC6}-\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}-\x{6FF4}' + . '\x{6FF6}-\x{6FFC}\x{6FFE}-\x{700F}\x{7011}\x{7012}\x{7014}-\x{701D}' + . '\x{701F}-\x{7046}\x{7048}-\x{704A}\x{704C}\x{704D}\x{704F}-\x{7071}' + . '\x{7074}-\x{707A}\x{707C}-\x{7080}\x{7082}-\x{708C}\x{708E}-\x{7096}' + . '\x{7098}-\x{709A}\x{709C}-\x{70A9}\x{70AB}-\x{70B1}\x{70B3}-\x{70B5}' + . '\x{70B7}-\x{70D4}\x{70D6}-\x{70FD}\x{70FF}-\x{7107}\x{7109}-\x{7113}' + . '\x{7115}-\x{7123}\x{7125}-\x{7132}\x{7135}-\x{713B}\x{713D}-\x{7154}\x{7156}' + . '\x{7158}-\x{716A}\x{716C}\x{716E}-\x{718C}\x{718E}-\x{7195}\x{7197}-\x{71A5}' + . '\x{71A7}-\x{71AA}\x{71AC}-\x{71B5}\x{71B7}-\x{71CB}\x{71CD}-\x{71D2}' + . '\x{71D4}-\x{71F2}\x{71F4}-\x{71F9}\x{71FB}-\x{71FF}\x{7201}-\x{720A}' + . '\x{720C}-\x{7210}\x{7212}-\x{7214}\x{7216}\x{7218}-\x{721F}\x{7221}-\x{7223}' + . '\x{7226}-\x{722E}\x{7230}-\x{7233}\x{7235}-\x{7244}\x{7246}-\x{724D}\x{724F}' + . '\x{7251}-\x{7254}\x{7256}-\x{729F}\x{72A1}-\x{72AA}\x{72AC}-\x{72BD}' + . '\x{72BF}-\x{7301}\x{7303}-\x{730F}\x{7311}-\x{731E}\x{7320}-\x{7327}' + . '\x{7329}-\x{732E}\x{7330}-\x{734E}\x{7350}-\x{7352}\x{7354}-\x{7362}' + . '\x{7364}-\x{739B}\x{739D}-\x{73C0}\x{73C2}-\x{73E0}\x{73E2}\x{73E3}' + . '\x{73E5}-\x{73F2}\x{73F4}-\x{73FA}\x{73FC}-\x{7417}\x{7419}-\x{7438}' + . '\x{743A}-\x{743D}\x{743F}-\x{7446}\x{7448}\x{744A}-\x{7457}\x{7459}-\x{745F}' + . '\x{7461}-\x{747A}\x{747C}-\x{7483}\x{7485}-\x{7495}\x{7497}-\x{749C}' + . '\x{749E}-\x{74A1}\x{74A3}-\x{74C6}\x{74CA}\x{74CB}\x{74CD}-\x{74EA}' + . '\x{74EC}-\x{750D}\x{750F}-\x{751F}\x{7521}-\x{7533}\x{7535}-\x{7540}' + . '\x{7542}-\x{7549}\x{754B}-\x{7551}\x{7553}\x{7554}\x{7556}-\x{755D}\x{755F}' + . '\x{7560}\x{7562}-\x{7570}\x{7572}\x{7574}-\x{7579}\x{757C}-\x{7584}' + . '\x{7586}-\x{758D}\x{758F}-\x{75A8}\x{75AA}-\x{75B6}\x{75B8}-\x{75DB}' + . '\x{75DD}-\x{75E8}\x{75EA}-\x{75ED}\x{75EF}-\x{762B}\x{762D}-\x{7643}' + . '\x{7646}-\x{764D}\x{764F}\x{7650}\x{7652}-\x{7654}\x{7656}-\x{7672}' + . '\x{7674}-\x{7679}\x{767B}-\x{768C}\x{768E}-\x{76A0}\x{76A3}\x{76A4}\x{76A6}' + . '\x{76A7}\x{76A9}-\x{76B2}\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}-\x{76C0}' + . '\x{76C2}-\x{76CA}\x{76CD}-\x{76D8}\x{76DA}-\x{76EA}\x{76EC}-\x{76FF}\x{7701}' + . '\x{7703}-\x{770D}\x{770F}-\x{7720}\x{7722}\x{7723}\x{7725}-\x{772A}' + . '\x{772C}-\x{773E}\x{7740}\x{7741}\x{7743}-\x{7763}\x{7765}-\x{7795}' + . '\x{7797}-\x{77A3}\x{77A5}-\x{77BD}\x{77BF}\x{77C0}\x{77C2}-\x{77D1}' + . '\x{77D3}-\x{77DC}\x{77DE}-\x{77E3}\x{77E5}\x{77E7}-\x{77F3}\x{77F6}-\x{7806}' + . '\x{7808}-\x{7823}\x{7825}-\x{7835}\x{7837}-\x{783E}\x{7840}\x{7841}' + . '\x{7843}-\x{7845}\x{7847}-\x{784A}\x{784C}-\x{784E}\x{7850}-\x{7875}' + . '\x{7877}-\x{7887}\x{7889}-\x{78C1}\x{78C3}-\x{78C6}\x{78C8}-\x{78D1}' + . '\x{78D3}-\x{78EF}\x{78F1}-\x{78F7}\x{78F9}-\x{78FF}\x{7901}-\x{7907}' + . '\x{7909}-\x{790C}\x{790E}-\x{7914}\x{7916}-\x{791E}\x{7921}-\x{7931}' + . '\x{7933}-\x{7935}\x{7937}-\x{7958}\x{795A}-\x{796B}\x{796D}\x{796F}-\x{7974}' + . '\x{7977}-\x{7985}\x{7988}-\x{799C}\x{799F}-\x{79A8}\x{79AA}-\x{79BB}' + . '\x{79BD}-\x{79C3}\x{79C5}\x{79C6}\x{79C8}-\x{79CB}\x{79CD}-\x{79D3}\x{79D5}' + . '\x{79D6}\x{79D8}-\x{7A00}\x{7A02}-\x{7A06}\x{7A08}\x{7A0A}-\x{7A2B}' + . '\x{7A2D}-\x{7A35}\x{7A37}\x{7A39}\x{7A3B}-\x{7A4E}\x{7A50}-\x{7A62}' + . '\x{7A65}-\x{7A69}\x{7A6B}-\x{7A6E}\x{7A70}-\x{7A81}\x{7A83}-\x{7A99}' + . '\x{7A9C}-\x{7AB8}\x{7ABA}\x{7ABE}-\x{7AC1}\x{7AC4}\x{7AC5}\x{7AC7}-\x{7AD6}' + . '\x{7AD8}\x{7AD9}\x{7ADB}-\x{7AE8}\x{7AEA}-\x{7AF4}\x{7AF6}-\x{7AFB}' + . '\x{7AFD}-\x{7B06}\x{7B08}-\x{7B1E}\x{7B20}-\x{7B26}\x{7B28}\x{7B2A}-\x{7B41}' + . '\x{7B43}-\x{7B52}\x{7B54}-\x{7B6E}\x{7B70}-\x{7B79}\x{7B7B}-\x{7B85}' + . '\x{7B87}-\x{7B91}\x{7B93}-\x{7BA2}\x{7BA4}\x{7BA6}-\x{7BAF}\x{7BB1}' + . '\x{7BB3}-\x{7BCE}\x{7BD0}-\x{7BF9}\x{7BFB}-\x{7C13}\x{7C15}-\x{7C1A}' + . '\x{7C1C}-\x{7C2D}\x{7C30}-\x{7C4E}\x{7C50}\x{7C51}\x{7C53}\x{7C54}' + . '\x{7C56}-\x{7C5C}\x{7C5E}-\x{7C75}\x{7C77}-\x{7C82}\x{7C84}-\x{7C86}' + . '\x{7C88}-\x{7C92}\x{7C94}-\x{7C99}\x{7C9B}-\x{7CAA}\x{7CAD}-\x{7CD2}' + . '\x{7CD4}-\x{7CD9}\x{7CDC}-\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}-\x{7CFB}\x{7CFD}' + . '\x{7CFE}\x{7D00}-\x{7D22}\x{7D24}-\x{7D29}\x{7D2B}\x{7D2C}\x{7D2E}-\x{7D47}' + . '\x{7D49}-\x{7D4C}\x{7D4E}-\x{7D59}\x{7D5B}-\x{7D63}\x{7D65}-\x{7D77}' + . '\x{7D79}-\x{7D81}\x{7D83}-\x{7D94}\x{7D96}\x{7D97}\x{7D99}\x{7D9B}-\x{7DA3}' + . '\x{7DA5}-\x{7DA7}\x{7DA9}-\x{7DCC}\x{7DCE}-\x{7DD2}\x{7DD4}-\x{7DDB}' + . '\x{7DDD}-\x{7DE3}\x{7DE6}-\x{7DEA}\x{7DEC}-\x{7DFC}\x{7E00}-\x{7E17}' + . '\x{7E19}-\x{7E49}\x{7E4C}-\x{7E5A}\x{7E5C}-\x{7E63}\x{7E65}-\x{7E9C}' + . '\x{7E9E}-\x{7F3A}\x{7F3D}-\x{7F40}\x{7F42}-\x{7F45}\x{7F47}-\x{7F58}' + . '\x{7F5A}-\x{7F83}\x{7F85}-\x{7F8F}\x{7F91}-\x{7F96}\x{7F98}\x{7F9A}-\x{7FB3}' + . '\x{7FB5}-\x{7FD5}\x{7FD7}-\x{7FDC}\x{7FDE}-\x{7FE3}\x{7FE5}-\x{8009}' + . '\x{800B}-\x{802E}\x{8030}-\x{803B}\x{803D}-\x{803F}\x{8041}-\x{8065}' + . '\x{8067}-\x{8087}\x{8089}-\x{808D}\x{808F}-\x{8093}\x{8095}-\x{80A5}' + . '\x{80A9}-\x{80AB}\x{80AD}-\x{80B2}\x{80B4}-\x{80B8}\x{80BA}-\x{80DE}' + . '\x{80E0}-\x{8102}\x{8105}-\x{8116}\x{8118}-\x{8132}\x{8136}-\x{815E}' + . '\x{8160}-\x{8183}\x{8185}-\x{818F}\x{8191}-\x{8195}\x{8197}-\x{81CA}' + . '\x{81CC}-\x{81D2}\x{81D4}-\x{81E3}\x{81E5}-\x{81EE}\x{81F1}-\x{8212}' + . '\x{8214}-\x{8216}\x{8218}-\x{8223}\x{8225}-\x{822D}\x{822F}-\x{8240}' + . '\x{8242}-\x{8261}\x{8263}\x{8264}\x{8266}-\x{828B}\x{828D}-\x{82B1}' + . '\x{82B3}-\x{82E1}\x{82E3}-\x{82FB}\x{82FD}-\x{8309}\x{830B}-\x{830F}' + . '\x{8311}-\x{832F}\x{8331}-\x{8354}\x{8356}-\x{839E}\x{83A0}-\x{83B4}' + . '\x{83B6}-\x{83BD}\x{83BF}-\x{83E5}\x{83E7}-\x{83EC}\x{83EE}-\x{8413}\x{8415}' + . '\x{8418}-\x{841E}\x{8421}-\x{8457}\x{8459}-\x{8482}\x{8484}-\x{8494}' + . '\x{8496}-\x{84AC}\x{84AE}-\x{84B6}\x{84B8}-\x{84C2}\x{84C4}-\x{84D9}' + . '\x{84DB}-\x{84EC}\x{84EE}-\x{8504}\x{8506}-\x{850F}\x{8511}-\x{8531}' + . '\x{8534}-\x{854B}\x{854D}-\x{854F}\x{8551}-\x{857E}\x{8580}-\x{8592}' + . '\x{8594}-\x{8596}\x{8598}-\x{85B1}\x{85B3}-\x{85BA}\x{85BC}-\x{85CB}' + . '\x{85CD}-\x{85ED}\x{85EF}-\x{85F2}\x{85F4}-\x{85FB}\x{85FD}-\x{8602}' + . '\x{8604}-\x{860C}\x{860F}\x{8611}-\x{8614}\x{8616}-\x{861C}\x{861E}-\x{8636}' + . '\x{8638}-\x{8656}\x{8658}-\x{8674}\x{8676}-\x{8688}\x{868A}-\x{8691}' + . '\x{8693}-\x{869F}\x{86A1}-\x{86A5}\x{86A7}-\x{86CC}\x{86CE}-\x{86D4}' + . '\x{86D6}-\x{86DF}\x{86E1}-\x{86E6}\x{86E8}-\x{86FC}\x{86FE}-\x{871C}' + . '\x{871E}-\x{872E}\x{8730}-\x{873C}\x{873E}-\x{8744}\x{8746}-\x{874A}' + . '\x{874C}-\x{8770}\x{8772}-\x{877E}\x{8780}-\x{878D}\x{878F}-\x{8798}' + . '\x{879A}-\x{87D9}\x{87DB}-\x{87EF}\x{87F1}-\x{8806}\x{8808}-\x{8811}' + . '\x{8813}-\x{882C}\x{882E}-\x{8839}\x{883B}-\x{8846}\x{8848}-\x{8857}' + . '\x{8859}-\x{885B}\x{885D}\x{885E}\x{8860}-\x{8879}\x{887B}-\x{88B4}' + . '\x{88B6}-\x{88E5}\x{88E7}\x{88E8}\x{88EA}-\x{88EC}\x{88EE}-\x{8902}' + . '\x{8904}-\x{890E}\x{8910}-\x{8923}\x{8925}-\x{894C}\x{894E}-\x{8964}' + . '\x{8966}-\x{8974}\x{8976}-\x{897C}\x{897E}-\x{898C}\x{898E}\x{898F}' + . '\x{8991}-\x{8993}\x{8995}-\x{8998}\x{899A}-\x{89A8}\x{89AA}-\x{89AF}' + . '\x{89B1}-\x{89B3}\x{89B5}-\x{89BA}\x{89BD}-\x{89ED}\x{89EF}-\x{89F4}' + . '\x{89F6}-\x{89F8}\x{89FA}-\x{89FC}\x{89FE}-\x{8A04}\x{8A07}-\x{8A13}' + . '\x{8A15}-\x{8A18}\x{8A1A}-\x{8A1F}\x{8A22}-\x{8A2A}\x{8A2C}-\x{8A32}' + . '\x{8A34}-\x{8A3C}\x{8A3E}-\x{8A4A}\x{8A4C}-\x{8A63}\x{8A65}-\x{8A77}' + . '\x{8A79}-\x{8A7C}\x{8A7E}-\x{8A87}\x{8A89}-\x{8A9E}\x{8AA0}-\x{8AAC}\x{8AAE}' + . '\x{8AB0}-\x{8AB6}\x{8AB8}-\x{8ACF}\x{8AD1}-\x{8AEB}\x{8AED}-\x{8B0B}' + . '\x{8B0D}-\x{8B28}\x{8B2A}-\x{8B31}\x{8B33}-\x{8B37}\x{8B39}-\x{8B3E}' + . '\x{8B40}-\x{8B60}\x{8B63}-\x{8B68}\x{8B6A}-\x{8B71}\x{8B73}\x{8B74}' + . '\x{8B76}-\x{8B7B}\x{8B7D}-\x{8B80}\x{8B82}-\x{8B86}\x{8B88}-\x{8B8C}\x{8B8E}' + . '\x{8B90}-\x{8B9A}\x{8B9C}-\x{8C37}\x{8C39}-\x{8C3F}\x{8C41}-\x{8C43}' + . '\x{8C45}-\x{8C50}\x{8C54}-\x{8C57}\x{8C59}-\x{8C73}\x{8C75}-\x{8C7B}\x{8C7D}' + . '\x{8C7E}\x{8C80}-\x{8C82}\x{8C84}-\x{8C86}\x{8C88}-\x{8C8A}\x{8C8C}\x{8C8D}' + . '\x{8C8F}-\x{8C9A}\x{8C9C}-\x{8CA5}\x{8CA7}-\x{8CCA}\x{8CCC}\x{8CCE}-\x{8CD5}' + . '\x{8CD7}\x{8CD9}-\x{8CE8}\x{8CEA}-\x{8CF6}\x{8CF8}-\x{8D00}\x{8D02}-\x{8D10}' + . '\x{8D13}-\x{8D7B}\x{8D7D}-\x{8DA5}\x{8DA7}-\x{8DBF}\x{8DC1}-\x{8DE4}' + . '\x{8DE6}-\x{8E00}\x{8E02}-\x{8E0A}\x{8E0C}-\x{8E31}\x{8E33}-\x{8E45}' + . '\x{8E47}-\x{8E4E}\x{8E50}-\x{8E6D}\x{8E6F}-\x{8E74}\x{8E76}\x{8E78}' + . '\x{8E7A}-\x{8E98}\x{8E9A}\x{8E9C}-\x{8EA1}\x{8EA3}-\x{8EB2}\x{8EB4}\x{8EB5}' + . '\x{8EB8}-\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}-\x{8ED8}\x{8EDA}-\x{8EE1}' + . '\x{8EE4}-\x{8EEF}\x{8EF1}-\x{8F0B}\x{8F0D}\x{8F0E}\x{8F10}-\x{8F18}' + . '\x{8F1A}-\x{8F2C}\x{8F2E}-\x{8F39}\x{8F3B}-\x{8F40}\x{8F42}-\x{8F5B}' + . '\x{8F5D}-\x{8F9C}\x{8F9E}-\x{8FA3}\x{8FA5}-\x{8FB2}\x{8FB4}-\x{8FB9}' + . '\x{8FBB}-\x{8FC2}\x{8FC4}-\x{8FC9}\x{8FCB}-\x{8FE6}\x{8FE8}-\x{900D}' + . '\x{900F}-\x{9029}\x{902B}\x{902D}-\x{9036}\x{9038}\x{903A}-\x{903F}' + . '\x{9041}-\x{9045}\x{9047}-\x{90AA}\x{90AC}-\x{90CB}\x{90CE}-\x{90D1}' + . '\x{90D3}-\x{90F5}\x{90F7}-\x{9109}\x{910B}-\x{913B}\x{913E}-\x{9158}' + . '\x{915A}-\x{917A}\x{917C}-\x{9194}\x{9196}\x{9199}-\x{91A3}\x{91A5}-\x{91A8}' + . '\x{91AA}-\x{91B7}\x{91B9}-\x{91BE}\x{91C0}-\x{91C3}\x{91C5}-\x{91C7}' + . '\x{91C9}-\x{91D5}\x{91D7}-\x{91DF}\x{91E2}-\x{91EE}\x{91F0}-\x{91F5}' + . '\x{91F7}-\x{91FB}\x{91FD}-\x{9212}\x{9214}-\x{921E}\x{9220}\x{9221}' + . '\x{9223}-\x{922B}\x{922D}-\x{9242}\x{9245}-\x{9268}\x{926B}-\x{9270}' + . '\x{9272}-\x{9280}\x{9282}\x{9283}\x{9285}-\x{929D}\x{929F}-\x{92BC}' + . '\x{92BE}-\x{92D3}\x{92D5}-\x{92DA}\x{92DC}-\x{92E1}\x{92E3}-\x{931B}' + . '\x{931D}-\x{932B}\x{932D}-\x{932F}\x{9332}-\x{9361}\x{9363}-\x{9367}\x{9369}' + . '\x{936A}\x{936C}-\x{936E}\x{9370}-\x{9372}\x{9374}-\x{9377}\x{9379}-\x{937E}' + . '\x{9380}\x{9382}-\x{938A}\x{938C}-\x{939B}\x{939D}-\x{939F}\x{93A1}-\x{93AA}' + . '\x{93AC}-\x{93BA}\x{93BC}-\x{93DF}\x{93E1}-\x{93E4}\x{93E6}-\x{93F2}' + . '\x{93F4}-\x{9401}\x{9403}-\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}' + . '\x{9422}\x{9423}\x{9425}-\x{9442}\x{9444}-\x{944D}\x{944F}-\x{9459}' + . '\x{945B}-\x{946B}\x{946D}-\x{947A}\x{947C}-\x{9577}\x{957A}-\x{957D}' + . '\x{957F}-\x{9584}\x{9586}-\x{9596}\x{9598}-\x{959F}\x{95A1}-\x{95B2}' + . '\x{95B5}-\x{95B7}\x{95B9}-\x{95C0}\x{95C2}-\x{95D8}\x{95DA}-\x{95DC}' + . '\x{95DE}-\x{9624}\x{9627}\x{9628}\x{962A}-\x{963D}\x{963F}-\x{9655}' + . '\x{9658}-\x{9664}\x{9666}-\x{9678}\x{967C}-\x{967E}\x{9680}\x{9683}-\x{968B}' + . '\x{968D}-\x{9695}\x{9697}-\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}-\x{96AA}' + . '\x{96AC}-\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}-\x{96E3}\x{96E5}' + . '\x{96E8}-\x{96FB}\x{96FD}-\x{9713}\x{9715}\x{9716}\x{9718}\x{9719}' + . '\x{971C}-\x{9732}\x{9735}\x{9736}\x{9738}-\x{973F}\x{9742}-\x{974C}' + . '\x{974E}-\x{9756}\x{9758}-\x{9762}\x{9765}-\x{9770}\x{9772}-\x{9774}' + . '\x{9776}-\x{9786}\x{9788}\x{978A}-\x{979A}\x{979C}-\x{97A8}\x{97AA}-\x{97AF}' + . '\x{97B2}-\x{97B4}\x{97B6}-\x{97BD}\x{97BF}\x{97C1}-\x{97D1}\x{97D3}-\x{97FB}' + . '\x{97FD}-\x{981E}\x{9820}-\x{9824}\x{9826}-\x{9829}\x{982B}\x{982D}-\x{9832}' + . '\x{9834}-\x{9839}\x{983B}-\x{983D}\x{983F}-\x{9841}\x{9843}-\x{9846}' + . '\x{9848}-\x{984A}\x{984C}-\x{9855}\x{9857}-\x{9865}\x{9867}\x{9869}-\x{98B6}' + . '\x{98B8}-\x{98C6}\x{98C8}\x{98C9}\x{98CB}-\x{98E0}\x{98E2}\x{98E3}' + . '\x{98E5}-\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}-\x{98F7}\x{98F9}\x{98FA}' + . '\x{98FC}-\x{9918}\x{991A}-\x{993A}\x{993C}-\x{9943}\x{9945}-\x{994C}' + . '\x{994E}-\x{9959}\x{995B}\x{995C}\x{995E}-\x{99BE}\x{99C0}-\x{99C4}' + . '\x{99C6}-\x{99DF}\x{99E1}-\x{99E5}\x{99E7}-\x{99EA}\x{99EC}-\x{99F4}' + . '\x{99F6}-\x{9A0F}\x{9A11}\x{9A14}-\x{9A16}\x{9A19}-\x{9A27}\x{9A29}-\x{9A3A}' + . '\x{9A3C}-\x{9A50}\x{9A52}-\x{9A57}\x{9A59}-\x{9A5C}\x{9A5E}-\x{9A62}' + . '\x{9A64}-\x{9AA8}\x{9AAA}-\x{9ABC}\x{9ABE}-\x{9AC7}\x{9AC9}-\x{9AD6}' + . '\x{9AD8}-\x{9ADF}\x{9AE1}-\x{9AE3}\x{9AE5}-\x{9AE7}\x{9AEA}-\x{9AEF}' + . '\x{9AF1}-\x{9AFF}\x{9B01}\x{9B03}-\x{9B08}\x{9B0A}-\x{9B13}\x{9B15}-\x{9B1A}' + . '\x{9B1C}-\x{9B33}\x{9B35}-\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}-\x{9B4F}' + . '\x{9B51}-\x{9B56}\x{9B58}-\x{9B61}\x{9B63}-\x{9B71}\x{9B73}-\x{9B88}\x{9B8A}' + . '\x{9B8B}\x{9B8D}-\x{9B98}\x{9B9A}-\x{9BC1}\x{9BC3}-\x{9BF5}\x{9BF7}-\x{9BFF}' + . '\x{9C02}\x{9C05}-\x{9C2D}\x{9C2F}-\x{9C41}\x{9C43}-\x{9C4E}\x{9C50}' + . '\x{9C52}-\x{9C60}\x{9C62}\x{9C63}\x{9C65}-\x{9C75}\x{9C77}-\x{9C7A}' + . '\x{9C7C}-\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}-\x{9D26}\x{9D28}\x{9D29}\x{9D2B}' + . '\x{9D2D}-\x{9D34}\x{9D36}-\x{9D3B}\x{9D3D}-\x{9D43}\x{9D45}-\x{9D6C}' + . '\x{9D6E}-\x{9D8E}\x{9D90}-\x{9D94}\x{9D96}-\x{9DAD}\x{9DAF}-\x{9DBC}\x{9DBE}' + . '\x{9DBF}\x{9DC1}-\x{9DC5}\x{9DC7}-\x{9DE9}\x{9DEB}-\x{9DFB}\x{9DFD}-\x{9E0D}' + . '\x{9E0F}-\x{9E15}\x{9E17}-\x{9E1B}\x{9E1D}-\x{9E77}\x{9E79}\x{9E7A}' + . '\x{9E7C}-\x{9E8E}\x{9E91}-\x{9E94}\x{9E96}\x{9E97}\x{9E99}-\x{9E9D}' + . '\x{9E9F}-\x{9EA1}\x{9EA3}-\x{9EAA}\x{9EAD}-\x{9EB0}\x{9EB2}-\x{9EB8}' + . '\x{9EBB}-\x{9EEB}\x{9EED}-\x{9EF0}\x{9EF2}-\x{9F02}\x{9F04}-\x{9F10}\x{9F12}' + . '\x{9F13}\x{9F15}-\x{9F20}\x{9F22}-\x{9F25}\x{9F27}-\x{9F44}\x{9F46}-\x{9F52}' + . '\x{9F54}-\x{9F61}\x{9F63}-\x{9F6C}\x{9F6E}-\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu', ]; diff --git a/src/Hostname/Cn.php b/src/Hostname/Cn.php index d331255e..b12bbc3b 100644 --- a/src/Hostname/Cn.php +++ b/src/Hostname/Cn.php @@ -13,310 +13,311 @@ */ return [ - 1 => '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' - . '\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' - . '\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' - . '\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' - . '\x{49B6}\x{49B7}\x{4C77}\x{4C9F}-\x{4CA3}\x{4D13}-\x{4D19}\x{4DAE}' - . '\x{4E00}-\x{4E11}\x{4E13}-\x{4E28}\x{4E2A}-\x{4E54}\x{4E56}-\x{4E67}' - . '\x{4E69}-\x{4E78}\x{4E7A}-\x{4E89}\x{4E8B}-\x{4E95}\x{4E97}-\x{4EA2}' - . '\x{4EA4}-\x{4EBB}\x{4EBD}-\x{4ECB}\x{4ECD}-\x{4EE6}\x{4EE8}-\x{4EEC}' - . '\x{4EEF}-\x{4EF7}\x{4EFB}\x{4EFD}\x{4EFF}-\x{4F06}\x{4F08}-\x{4F15}' - . '\x{4F17}-\x{4F27}\x{4F29}-\x{4F30}\x{4F32}-\x{4F34}\x{4F36}\x{4F38}-\x{4F3F}' - . '\x{4F41}-\x{4F43}\x{4F45}-\x{4F70}\x{4F72}-\x{4F8B}\x{4F8D}\x{4F8F}-\x{4FA1}' - . '\x{4FA3}-\x{4FAC}\x{4FAE}-\x{4FBC}\x{4FBE}-\x{4FC5}\x{4FC7}\x{4FC9}-\x{4FCB}' - . '\x{4FCD}-\x{4FE1}\x{4FE3}-\x{4FFB}\x{4FFE}-\x{500F}\x{5011}-\x{5033}' - . '\x{5035}-\x{5037}\x{5039}-\x{503C}\x{503E}-\x{5041}\x{5043}-\x{504F}\x{5051}' - . '\x{5053}-\x{5057}\x{5059}-\x{507B}\x{507D}-\x{5080}\x{5082}-\x{5092}' - . '\x{5094}-\x{5096}\x{5098}-\x{509E}\x{50A2}-\x{50B8}\x{50BA}-\x{50C2}' - . '\x{50C4}-\x{50D7}\x{50D9}-\x{50DE}\x{50E0}\x{50E3}-\x{50EA}\x{50EC}-\x{50F3}' - . '\x{50F5}\x{50F6}\x{50F8}-\x{511A}\x{511C}-\x{5127}\x{5129}\x{512A}' - . '\x{512C}-\x{5141}\x{5143}-\x{5149}\x{514B}-\x{514E}\x{5150}-\x{5152}' - . '\x{5154}-\x{5157}\x{5159}-\x{515F}\x{5161}-\x{5163}\x{5165}-\x{5171}' - . '\x{5173}-\x{517D}\x{517F}-\x{5182}\x{5185}-\x{518D}\x{518F}-\x{51A0}\x{51A2}' - . '\x{51A4}-\x{51A8}\x{51AA}-\x{51AC}\x{51AE}-\x{51B3}\x{51B5}-\x{51B7}\x{51B9}' - . '\x{51BB}-\x{51C1}\x{51C3}-\x{51D1}\x{51D4}-\x{51DE}\x{51E0}-\x{51E5}' - . '\x{51E7}-\x{51EB}\x{51ED}\x{51EF}-\x{51F1}\x{51F3}-\x{5226}\x{5228}-\x{524E}' - . '\x{5250}-\x{5252}\x{5254}-\x{5265}\x{5267}-\x{5270}\x{5272}-\x{5278}' - . '\x{527A}-\x{5284}\x{5286}-\x{528D}\x{528F}-\x{52A3}\x{52A5}-\x{52C3}\x{52C6}' - . '\x{52C7}\x{52C9}-\x{52CB}\x{52CD}\x{52CF}\x{52D0}\x{52D2}\x{52D3}' - . '\x{52D5}-\x{52E0}\x{52E2}-\x{52E4}\x{52E6}-\x{52ED}\x{52EF}-\x{5302}' - . '\x{5305}-\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}-\x{5326}\x{5328}' - . '\x{532A}-\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}-\x{5341}\x{5343}-\x{535A}' - . '\x{535C}\x{535E}-\x{5367}\x{5369}\x{536B}\x{536C}\x{536E}-\x{537F}' - . '\x{5381}-\x{53A0}\x{53A2}-\x{53A9}\x{53AC}-\x{53AE}\x{53B0}-\x{53B9}' - . '\x{53BB}-\x{53C4}\x{53C6}-\x{53CE}\x{53D0}-\x{53D9}\x{53DB}\x{53DC}' - . '\x{53DF}-\x{53E6}\x{53E8}-\x{53FE}\x{5401}-\x{5419}\x{541B}-\x{5421}' - . '\x{5423}-\x{544B}\x{544D}-\x{545C}\x{545E}-\x{5468}\x{546A}-\x{5489}' - . '\x{548B}-\x{54B4}\x{54B6}-\x{54F5}\x{54F7}-\x{5514}\x{5516}\x{5517}' - . '\x{551A}-\x{5546}\x{5548}-\x{555F}\x{5561}-\x{5579}\x{557B}-\x{55DF}' - . '\x{55E1}-\x{55F7}\x{55F9}-\x{5604}\x{5606}-\x{5609}\x{560C}-\x{561F}' - . '\x{5621}-\x{562A}\x{562C}-\x{5636}\x{5638}-\x{563B}\x{563D}-\x{5643}' - . '\x{5645}-\x{564A}\x{564C}-\x{5650}\x{5652}-\x{5655}\x{5657}-\x{565E}\x{5660}' - . '\x{5662}-\x{5674}\x{5676}-\x{567C}\x{567E}-\x{5687}\x{568A}\x{568C}-\x{5695}' - . '\x{5697}-\x{569D}\x{569F}-\x{56A1}\x{56A3}-\x{56B9}\x{56BB}-\x{56CE}' - . '\x{56D0}-\x{56D8}\x{56DA}-\x{56E5}\x{56E7}-\x{56F5}\x{56F7}\x{56F9}\x{56FA}' - . '\x{56FD}-\x{5704}\x{5706}-\x{5710}\x{5712}-\x{5716}\x{5718}-\x{5720}\x{5722}' - . '\x{5723}\x{5725}-\x{573C}\x{573E}-\x{5742}\x{5744}-\x{5747}\x{5749}-\x{5754}' - . '\x{5757}\x{5759}-\x{5762}\x{5764}-\x{576D}\x{576F}-\x{5777}\x{5779}-\x{5780}' - . '\x{5782}-\x{5786}\x{5788}-\x{5795}\x{5797}-\x{57A7}\x{57A9}-\x{57C9}' - . '\x{57CB}-\x{57D0}\x{57D2}-\x{57D6}\x{57D8}-\x{57DA}\x{57DC}\x{57DD}' - . '\x{57DF}-\x{5816}\x{5819}-\x{5840}\x{5842}-\x{584F}\x{5851}-\x{5855}' - . '\x{5857}-\x{585F}\x{5861}-\x{5865}\x{5868}-\x{5876}\x{5878}-\x{5894}' - . '\x{5896}-\x{58A9}\x{58AB}-\x{58B4}\x{58B7}-\x{58BF}\x{58C1}\x{58C2}' - . '\x{58C5}-\x{58CB}\x{58CE}\x{58CF}\x{58D1}-\x{58DB}\x{58DD}-\x{58E0}' - . '\x{58E2}-\x{58E5}\x{58E7}-\x{58F4}\x{58F6}-\x{5900}\x{5902}-\x{5904}\x{5906}' - . '\x{5907}\x{5909}-\x{5910}\x{5912}\x{5914}-\x{5922}\x{5924}-\x{5932}\x{5934}' - . '\x{5935}\x{5937}-\x{5958}\x{595A}\x{595C}-\x{599A}\x{599C}-\x{59B6}' - . '\x{59B8}-\x{59E6}\x{59E8}-\x{5A23}\x{5A25}\x{5A27}-\x{5A2B}\x{5A2D}-\x{5A2F}' - . '\x{5A31}-\x{5A53}\x{5A55}-\x{5A58}\x{5A5A}-\x{5A6E}\x{5A70}\x{5A72}-\x{5A86}' - . '\x{5A88}-\x{5A8C}\x{5A8E}-\x{5AAA}\x{5AAC}-\x{5ACF}\x{5AD1}\x{5AD2}' - . '\x{5AD4}-\x{5AEE}\x{5AF1}-\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}-\x{5B38}' - . '\x{5B3A}-\x{5B45}\x{5B47}-\x{5B4E}\x{5B50}\x{5B51}\x{5B53}-\x{5B5F}' - . '\x{5B62}-\x{5B6E}\x{5B70}-\x{5B78}\x{5B7A}-\x{5B7D}\x{5B7F}-\x{5B85}' - . '\x{5B87}-\x{5B8F}\x{5B91}-\x{5BA8}\x{5BAA}-\x{5BB1}\x{5BB3}-\x{5BB6}' - . '\x{5BB8}-\x{5BBB}\x{5BBD}-\x{5BC7}\x{5BCA}-\x{5BD6}\x{5BD8}\x{5BD9}' - . '\x{5BDB}-\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}-\x{5C1A}\x{5C1C}-\x{5C22}\x{5C24}' - . '\x{5C25}\x{5C27}\x{5C28}\x{5C2A}-\x{5C35}\x{5C37}-\x{5C59}\x{5C5B}-\x{5C84}' - . '\x{5C86}-\x{5CB3}\x{5CB5}-\x{5CB8}\x{5CBA}-\x{5CBF}\x{5CC1}-\x{5CD4}' - . '\x{5CD6}-\x{5CDC}\x{5CDE}-\x{5CF4}\x{5CF6}-\x{5D2A}\x{5D2C}-\x{5D2E}' - . '\x{5D30}-\x{5D3A}\x{5D3C}-\x{5D52}\x{5D54}-\x{5D56}\x{5D58}-\x{5D5B}' - . '\x{5D5D}-\x{5D5F}\x{5D61}-\x{5D82}\x{5D84}-\x{5D95}\x{5D97}-\x{5DA2}' - . '\x{5DA5}-\x{5DAA}\x{5DAC}-\x{5DB2}\x{5DB4}-\x{5DB8}\x{5DBA}-\x{5DC3}' - . '\x{5DC5}-\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}-\x{5DF5}\x{5DF7}-\x{5E11}' - . '\x{5E13}-\x{5E3E}\x{5E40}-\x{5E47}\x{5E49}-\x{5E50}\x{5E52}-\x{5E91}' - . '\x{5E93}-\x{5EB9}\x{5EBB}-\x{5EBF}\x{5EC1}-\x{5EEA}\x{5EEC}-\x{5EF8}' - . '\x{5EFA}-\x{5F08}\x{5F0A}-\x{5F0D}\x{5F0F}\x{5F11}-\x{5F3A}\x{5F3C}' - . '\x{5F3E}-\x{5F8E}\x{5F90}-\x{5F99}\x{5F9B}-\x{5FA2}\x{5FA5}-\x{5FAF}' - . '\x{5FB1}-\x{5FC1}\x{5FC3}-\x{5FCD}\x{5FCF}-\x{5FDA}\x{5FDC}-\x{5FDE}\x{5FE0}' - . '\x{5FE1}\x{5FE3}-\x{5FEB}\x{5FED}-\x{5FFB}\x{5FFD}-\x{6022}\x{6024}-\x{6055}' - . '\x{6057}-\x{605F}\x{6062}-\x{6070}\x{6072}\x{6073}\x{6075}-\x{6090}\x{6092}' - . '\x{6094}-\x{60A4}\x{60A6}-\x{60A8}\x{60AA}-\x{60D1}\x{60D3}-\x{60D5}' - . '\x{60D7}-\x{60DD}\x{60DF}-\x{60E2}\x{60E4}\x{60E6}-\x{60FC}\x{60FE}-\x{6101}' - . '\x{6103}-\x{6106}\x{6108}-\x{6110}\x{6112}-\x{611D}\x{611F}\x{6120}' - . '\x{6122}-\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}-\x{615F}' - . '\x{6161}-\x{616E}\x{6170}-\x{617A}\x{617C}\x{617E}\x{6180}-\x{6185}' - . '\x{6187}-\x{6196}\x{6198}-\x{619B}\x{619D}-\x{61B8}\x{61BA}\x{61BC}-\x{61D2}' - . '\x{61D4}\x{61D6}-\x{61EB}\x{61ED}\x{61EE}\x{61F0}-\x{61F3}\x{61F5}-\x{6204}' - . '\x{6206}-\x{6234}\x{6236}-\x{6238}\x{623A}-\x{6256}\x{6258}-\x{6281}' - . '\x{6283}-\x{628C}\x{628E}-\x{629C}\x{629E}-\x{62A5}\x{62A7}-\x{62DD}' - . '\x{62DF}-\x{62E9}\x{62EB}-\x{6309}\x{630B}-\x{6316}\x{6318}-\x{6330}' - . '\x{6332}-\x{6334}\x{6336}\x{6338}-\x{633E}\x{6340}-\x{635A}\x{635C}-\x{637E}' - . '\x{6380}-\x{638A}\x{638C}-\x{6392}\x{6394}-\x{63BA}\x{63BC}-\x{63D0}' - . '\x{63D2}-\x{6406}\x{6408}-\x{643A}\x{643D}-\x{6441}\x{6443}-\x{6448}' - . '\x{644A}-\x{6459}\x{645B}-\x{647D}\x{647F}-\x{6485}\x{6487}-\x{64A0}' - . '\x{64A2}-\x{64AE}\x{64B0}-\x{64B5}\x{64B7}-\x{64C7}\x{64C9}-\x{64D4}' - . '\x{64D6}-\x{64E0}\x{64E2}-\x{64E4}\x{64E6}-\x{64ED}\x{64EF}-\x{64F4}' - . '\x{64F6}-\x{64F8}\x{64FA}-\x{6501}\x{6503}-\x{6509}\x{650B}-\x{651E}' - . '\x{6520}-\x{6527}\x{6529}-\x{653F}\x{6541}\x{6543}-\x{6559}\x{655B}-\x{655E}' - . '\x{6560}-\x{656C}\x{656E}-\x{657C}\x{657E}-\x{6589}\x{658B}-\x{6599}' - . '\x{659B}-\x{65B4}\x{65B6}-\x{65BD}\x{65BF}-\x{65C7}\x{65CA}-\x{65D0}' - . '\x{65D2}-\x{65D7}\x{65DA}\x{65DB}\x{65DD}-\x{65E3}\x{65E5}-\x{65E9}' - . '\x{65EB}-\x{65F8}\x{65FA}-\x{65FD}\x{6600}-\x{6616}\x{6618}-\x{661D}' - . '\x{661F}-\x{662B}\x{662D}-\x{6636}\x{6639}\x{663A}\x{663C}-\x{663E}' - . '\x{6640}-\x{6647}\x{6649}-\x{664C}\x{664E}-\x{665F}\x{6661}\x{6662}' - . '\x{6664}-\x{6666}\x{6668}-\x{6691}\x{6693}-\x{669B}\x{669D}\x{669F}-\x{66AB}' - . '\x{66AE}-\x{66CF}\x{66D1}\x{66D2}\x{66D4}-\x{66D6}\x{66D8}-\x{66DE}' - . '\x{66E0}-\x{66EE}\x{66F0}-\x{66FC}\x{66FE}-\x{6701}\x{6703}-\x{6706}' - . '\x{6708}-\x{6718}\x{671A}-\x{6723}\x{6725}-\x{6728}\x{672A}-\x{6766}' - . '\x{6768}-\x{6787}\x{6789}-\x{6795}\x{6797}-\x{67A8}\x{67AA}-\x{67BC}\x{67BE}' - . '\x{67C0}-\x{67D4}\x{67D6}\x{67D8}-\x{67F8}\x{67FA}-\x{6800}\x{6802}-\x{6814}' - . '\x{6816}-\x{681D}\x{681F}-\x{6826}\x{6828}-\x{682F}\x{6831}-\x{6857}\x{685B}' - . '\x{685D}\x{6860}-\x{6879}\x{687B}-\x{6894}\x{6896}-\x{6898}\x{689A}-\x{68A4}' - . '\x{68A6}-\x{68B7}\x{68B9}\x{68BB}-\x{68C2}\x{68C4}\x{68C6}-\x{68D8}' - . '\x{68DA}-\x{68E1}\x{68E3}\x{68E4}\x{68E6}-\x{68FF}\x{6901}-\x{6908}' - . '\x{690A}-\x{693D}\x{693F}-\x{694C}\x{694E}-\x{699E}\x{69A0}\x{69A1}' - . '\x{69A3}-\x{69BF}\x{69C1}-\x{69D0}\x{69D3}\x{69D4}\x{69D8}-\x{69F8}' - . '\x{69FA}-\x{6A02}\x{6A04}-\x{6A0B}\x{6A0D}-\x{6A1B}\x{6A1D}-\x{6A23}' - . '\x{6A25}-\x{6A36}\x{6A38}-\x{6A49}\x{6A4B}-\x{6A52}\x{6A54}-\x{6A5B}' - . '\x{6A5D}-\x{6A6D}\x{6A6F}\x{6A71}-\x{6A85}\x{6A87}-\x{6A89}\x{6A8B}-\x{6A8E}' - . '\x{6A90}-\x{6A98}\x{6A9A}-\x{6A9C}\x{6A9E}-\x{6AA9}\x{6AAB}-\x{6AB0}' - . '\x{6AB2}-\x{6ABD}\x{6ABF}\x{6AC1}-\x{6AC3}\x{6AC5}-\x{6AC7}\x{6ACA}-\x{6AD7}' - . '\x{6AD9}-\x{6AE8}\x{6AEA}-\x{6B0D}\x{6B0F}-\x{6B1A}\x{6B1C}-\x{6B2D}' - . '\x{6B2F}-\x{6B34}\x{6B36}-\x{6B3F}\x{6B41}-\x{6B56}\x{6B59}-\x{6B5C}' - . '\x{6B5E}-\x{6B67}\x{6B69}-\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}-\x{6B74}' - . '\x{6B76}-\x{6B7C}\x{6B7E}-\x{6BB0}\x{6BB2}-\x{6BB7}\x{6BB9}-\x{6BE8}' - . '\x{6BEA}-\x{6BF0}\x{6BF2}\x{6BF3}\x{6BF5}-\x{6BF9}\x{6BFB}-\x{6C09}' - . '\x{6C0B}-\x{6C16}\x{6C18}-\x{6C1B}\x{6C1D}-\x{6C2C}\x{6C2E}-\x{6C38}\x{6C3A}' - . '\x{6C3B}\x{6C3D}-\x{6C44}\x{6C46}-\x{6C6B}\x{6C6D}\x{6C6F}-\x{6C9F}' - . '\x{6CA1}-\x{6CD7}\x{6CD9}-\x{6CF3}\x{6CF5}-\x{6D01}\x{6D03}-\x{6D1B}' - . '\x{6D1D}-\x{6D23}\x{6D25}-\x{6D70}\x{6D72}-\x{6D80}\x{6D82}-\x{6D95}' - . '\x{6D97}-\x{6D9B}\x{6D9D}-\x{6DAF}\x{6DB2}-\x{6DB5}\x{6DB7}-\x{6DFD}\x{6E00}' - . '\x{6E03}-\x{6E05}\x{6E07}-\x{6E11}\x{6E14}-\x{6E17}\x{6E19}-\x{6E29}' - . '\x{6E2B}-\x{6E4B}\x{6E4D}-\x{6E6B}\x{6E6D}-\x{6E75}\x{6E77}-\x{6E79}' - . '\x{6E7E}-\x{6E8A}\x{6E8D}-\x{6E94}\x{6E96}-\x{6EDA}\x{6EDC}\x{6EDE}-\x{6EE2}' - . '\x{6EE4}-\x{6F03}\x{6F05}-\x{6F0A}\x{6F0C}-\x{6F41}\x{6F43}-\x{6F47}\x{6F49}' - . '\x{6F4B}-\x{6F78}\x{6F7A}-\x{6F97}\x{6F99}\x{6F9B}-\x{6F9E}\x{6FA0}-\x{6FB6}' - . '\x{6FB8}-\x{6FC4}\x{6FC6}-\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}-\x{6FF4}' - . '\x{6FF6}-\x{6FFC}\x{6FFE}-\x{700F}\x{7011}\x{7012}\x{7014}-\x{701D}' - . '\x{701F}-\x{7046}\x{7048}-\x{704A}\x{704C}\x{704D}\x{704F}-\x{7071}' - . '\x{7074}-\x{707A}\x{707C}-\x{7080}\x{7082}-\x{708C}\x{708E}-\x{7096}' - . '\x{7098}-\x{709A}\x{709C}-\x{70A9}\x{70AB}-\x{70B1}\x{70B3}-\x{70B5}' - . '\x{70B7}-\x{70D4}\x{70D6}-\x{70FD}\x{70FF}-\x{7107}\x{7109}-\x{7113}' - . '\x{7115}-\x{7123}\x{7125}-\x{7132}\x{7135}-\x{713B}\x{713D}-\x{7154}\x{7156}' - . '\x{7158}-\x{716A}\x{716C}\x{716E}-\x{718C}\x{718E}-\x{7195}\x{7197}-\x{71A5}' - . '\x{71A7}-\x{71AA}\x{71AC}-\x{71B5}\x{71B7}-\x{71CB}\x{71CD}-\x{71D2}' - . '\x{71D4}-\x{71F2}\x{71F4}-\x{71F9}\x{71FB}-\x{71FF}\x{7201}-\x{720A}' - . '\x{720C}-\x{7210}\x{7212}-\x{7214}\x{7216}\x{7218}-\x{721F}\x{7221}-\x{7223}' - . '\x{7226}-\x{722E}\x{7230}-\x{7233}\x{7235}-\x{7244}\x{7246}-\x{724D}\x{724F}' - . '\x{7251}-\x{7254}\x{7256}-\x{729F}\x{72A1}-\x{72AA}\x{72AC}-\x{72BD}' - . '\x{72BF}-\x{7301}\x{7303}-\x{730F}\x{7311}-\x{731E}\x{7320}-\x{7327}' - . '\x{7329}-\x{732E}\x{7330}-\x{734E}\x{7350}-\x{7352}\x{7354}-\x{7362}' - . '\x{7364}-\x{739B}\x{739D}-\x{73C0}\x{73C2}-\x{73E0}\x{73E2}\x{73E3}' - . '\x{73E5}-\x{73F2}\x{73F4}-\x{73FA}\x{73FC}-\x{7417}\x{7419}-\x{7438}' - . '\x{743A}-\x{743D}\x{743F}-\x{7446}\x{7448}\x{744A}-\x{7457}\x{7459}-\x{745F}' - . '\x{7461}-\x{747A}\x{747C}-\x{7483}\x{7485}-\x{7495}\x{7497}-\x{749C}' - . '\x{749E}-\x{74A1}\x{74A3}-\x{74C6}\x{74CA}\x{74CB}\x{74CD}-\x{74EA}' - . '\x{74EC}-\x{750D}\x{750F}-\x{751F}\x{7521}-\x{7533}\x{7535}-\x{7540}' - . '\x{7542}-\x{7549}\x{754B}-\x{7551}\x{7553}\x{7554}\x{7556}-\x{755D}\x{755F}' - . '\x{7560}\x{7562}-\x{7570}\x{7572}\x{7574}-\x{7579}\x{757C}-\x{7584}' - . '\x{7586}-\x{758D}\x{758F}-\x{75A8}\x{75AA}-\x{75B6}\x{75B8}-\x{75DB}' - . '\x{75DD}-\x{75E8}\x{75EA}-\x{75ED}\x{75EF}-\x{762B}\x{762D}-\x{7643}' - . '\x{7646}-\x{764D}\x{764F}\x{7650}\x{7652}-\x{7654}\x{7656}-\x{7672}' - . '\x{7674}-\x{7679}\x{767B}-\x{768C}\x{768E}-\x{76A0}\x{76A3}\x{76A4}\x{76A6}' - . '\x{76A7}\x{76A9}-\x{76B2}\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}-\x{76C0}' - . '\x{76C2}-\x{76CA}\x{76CD}-\x{76D8}\x{76DA}-\x{76EA}\x{76EC}-\x{76FF}\x{7701}' - . '\x{7703}-\x{770D}\x{770F}-\x{7720}\x{7722}\x{7723}\x{7725}-\x{772A}' - . '\x{772C}-\x{773E}\x{7740}\x{7741}\x{7743}-\x{7763}\x{7765}-\x{7795}' - . '\x{7797}-\x{77A3}\x{77A5}-\x{77BD}\x{77BF}\x{77C0}\x{77C2}-\x{77D1}' - . '\x{77D3}-\x{77DC}\x{77DE}-\x{77E3}\x{77E5}\x{77E7}-\x{77F3}\x{77F6}-\x{7806}' - . '\x{7808}-\x{7823}\x{7825}-\x{7835}\x{7837}-\x{783E}\x{7840}\x{7841}' - . '\x{7843}-\x{7845}\x{7847}-\x{784A}\x{784C}-\x{784E}\x{7850}-\x{7875}' - . '\x{7877}-\x{7887}\x{7889}-\x{78C1}\x{78C3}-\x{78C6}\x{78C8}-\x{78D1}' - . '\x{78D3}-\x{78EF}\x{78F1}-\x{78F7}\x{78F9}-\x{78FF}\x{7901}-\x{7907}' - . '\x{7909}-\x{790C}\x{790E}-\x{7914}\x{7916}-\x{791E}\x{7921}-\x{7931}' - . '\x{7933}-\x{7935}\x{7937}-\x{7958}\x{795A}-\x{796B}\x{796D}\x{796F}-\x{7974}' - . '\x{7977}-\x{7985}\x{7988}-\x{799C}\x{799F}-\x{79A8}\x{79AA}-\x{79BB}' - . '\x{79BD}-\x{79C3}\x{79C5}\x{79C6}\x{79C8}-\x{79CB}\x{79CD}-\x{79D3}\x{79D5}' - . '\x{79D6}\x{79D8}-\x{7A00}\x{7A02}-\x{7A06}\x{7A08}\x{7A0A}-\x{7A2B}' - . '\x{7A2D}-\x{7A35}\x{7A37}\x{7A39}\x{7A3B}-\x{7A4E}\x{7A50}-\x{7A62}' - . '\x{7A65}-\x{7A69}\x{7A6B}-\x{7A6E}\x{7A70}-\x{7A81}\x{7A83}-\x{7A99}' - . '\x{7A9C}-\x{7AB8}\x{7ABA}\x{7ABE}-\x{7AC1}\x{7AC4}\x{7AC5}\x{7AC7}-\x{7AD6}' - . '\x{7AD8}\x{7AD9}\x{7ADB}-\x{7AE8}\x{7AEA}-\x{7AF4}\x{7AF6}-\x{7AFB}' - . '\x{7AFD}-\x{7B06}\x{7B08}-\x{7B1E}\x{7B20}-\x{7B26}\x{7B28}\x{7B2A}-\x{7B41}' - . '\x{7B43}-\x{7B52}\x{7B54}-\x{7B6E}\x{7B70}-\x{7B79}\x{7B7B}-\x{7B85}' - . '\x{7B87}-\x{7B91}\x{7B93}-\x{7BA2}\x{7BA4}\x{7BA6}-\x{7BAF}\x{7BB1}' - . '\x{7BB3}-\x{7BCE}\x{7BD0}-\x{7BF9}\x{7BFB}-\x{7C13}\x{7C15}-\x{7C1A}' - . '\x{7C1C}-\x{7C2D}\x{7C30}-\x{7C4E}\x{7C50}\x{7C51}\x{7C53}\x{7C54}' - . '\x{7C56}-\x{7C5C}\x{7C5E}-\x{7C75}\x{7C77}-\x{7C82}\x{7C84}-\x{7C86}' - . '\x{7C88}-\x{7C92}\x{7C94}-\x{7C99}\x{7C9B}-\x{7CAA}\x{7CAD}-\x{7CD2}' - . '\x{7CD4}-\x{7CD9}\x{7CDC}-\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}-\x{7CFB}\x{7CFD}' - . '\x{7CFE}\x{7D00}-\x{7D22}\x{7D24}-\x{7D29}\x{7D2B}\x{7D2C}\x{7D2E}-\x{7D47}' - . '\x{7D49}-\x{7D4C}\x{7D4E}-\x{7D59}\x{7D5B}-\x{7D63}\x{7D65}-\x{7D77}' - . '\x{7D79}-\x{7D81}\x{7D83}-\x{7D94}\x{7D96}\x{7D97}\x{7D99}\x{7D9B}-\x{7DA3}' - . '\x{7DA5}-\x{7DA7}\x{7DA9}-\x{7DCC}\x{7DCE}-\x{7DD2}\x{7DD4}-\x{7DDB}' - . '\x{7DDD}-\x{7DE3}\x{7DE6}-\x{7DEA}\x{7DEC}-\x{7DFC}\x{7E00}-\x{7E17}' - . '\x{7E19}-\x{7E49}\x{7E4C}-\x{7E5A}\x{7E5C}-\x{7E63}\x{7E65}-\x{7E9C}' - . '\x{7E9E}-\x{7F3A}\x{7F3D}-\x{7F40}\x{7F42}-\x{7F45}\x{7F47}-\x{7F58}' - . '\x{7F5A}-\x{7F83}\x{7F85}-\x{7F8F}\x{7F91}-\x{7F96}\x{7F98}\x{7F9A}-\x{7FB3}' - . '\x{7FB5}-\x{7FD5}\x{7FD7}-\x{7FDC}\x{7FDE}-\x{7FE3}\x{7FE5}-\x{8009}' - . '\x{800B}-\x{802E}\x{8030}-\x{803B}\x{803D}-\x{803F}\x{8041}-\x{8065}' - . '\x{8067}-\x{8087}\x{8089}-\x{808D}\x{808F}-\x{8093}\x{8095}-\x{80A5}' - . '\x{80A9}-\x{80AB}\x{80AD}-\x{80B2}\x{80B4}-\x{80B8}\x{80BA}-\x{80DE}' - . '\x{80E0}-\x{8102}\x{8105}-\x{8116}\x{8118}-\x{8132}\x{8136}-\x{815E}' - . '\x{8160}-\x{8183}\x{8185}-\x{818F}\x{8191}-\x{8195}\x{8197}-\x{81CA}' - . '\x{81CC}-\x{81D2}\x{81D4}-\x{81E3}\x{81E5}-\x{81EE}\x{81F1}-\x{8212}' - . '\x{8214}-\x{8216}\x{8218}-\x{8223}\x{8225}-\x{822D}\x{822F}-\x{8240}' - . '\x{8242}-\x{8261}\x{8263}\x{8264}\x{8266}-\x{828B}\x{828D}-\x{82B1}' - . '\x{82B3}-\x{82E1}\x{82E3}-\x{82FB}\x{82FD}-\x{8309}\x{830B}-\x{830F}' - . '\x{8311}-\x{832F}\x{8331}-\x{8354}\x{8356}-\x{839E}\x{83A0}-\x{83B4}' - . '\x{83B6}-\x{83BD}\x{83BF}-\x{83E5}\x{83E7}-\x{83EC}\x{83EE}-\x{8413}\x{8415}' - . '\x{8418}-\x{841E}\x{8421}-\x{8457}\x{8459}-\x{8482}\x{8484}-\x{8494}' - . '\x{8496}-\x{84AC}\x{84AE}-\x{84B6}\x{84B8}-\x{84C2}\x{84C4}-\x{84D9}' - . '\x{84DB}-\x{84EC}\x{84EE}-\x{8504}\x{8506}-\x{850F}\x{8511}-\x{8531}' - . '\x{8534}-\x{854B}\x{854D}-\x{854F}\x{8551}-\x{857E}\x{8580}-\x{8592}' - . '\x{8594}-\x{8596}\x{8598}-\x{85B1}\x{85B3}-\x{85BA}\x{85BC}-\x{85CB}' - . '\x{85CD}-\x{85ED}\x{85EF}-\x{85F2}\x{85F4}-\x{85FB}\x{85FD}-\x{8602}' - . '\x{8604}-\x{860C}\x{860F}\x{8611}-\x{8614}\x{8616}-\x{861C}\x{861E}-\x{8636}' - . '\x{8638}-\x{8656}\x{8658}-\x{8674}\x{8676}-\x{8688}\x{868A}-\x{8691}' - . '\x{8693}-\x{869F}\x{86A1}-\x{86A5}\x{86A7}-\x{86CC}\x{86CE}-\x{86D4}' - . '\x{86D6}-\x{86DF}\x{86E1}-\x{86E6}\x{86E8}-\x{86FC}\x{86FE}-\x{871C}' - . '\x{871E}-\x{872E}\x{8730}-\x{873C}\x{873E}-\x{8744}\x{8746}-\x{874A}' - . '\x{874C}-\x{8770}\x{8772}-\x{877E}\x{8780}-\x{878D}\x{878F}-\x{8798}' - . '\x{879A}-\x{87D9}\x{87DB}-\x{87EF}\x{87F1}-\x{8806}\x{8808}-\x{8811}' - . '\x{8813}-\x{882C}\x{882E}-\x{8839}\x{883B}-\x{8846}\x{8848}-\x{8857}' - . '\x{8859}-\x{885B}\x{885D}\x{885E}\x{8860}-\x{8879}\x{887B}-\x{88B4}' - . '\x{88B6}-\x{88E5}\x{88E7}\x{88E8}\x{88EA}-\x{88EC}\x{88EE}-\x{8902}' - . '\x{8904}-\x{890E}\x{8910}-\x{8923}\x{8925}-\x{894C}\x{894E}-\x{8964}' - . '\x{8966}-\x{8974}\x{8976}-\x{897C}\x{897E}-\x{898C}\x{898E}\x{898F}' - . '\x{8991}-\x{8993}\x{8995}-\x{8998}\x{899A}-\x{89A8}\x{89AA}-\x{89AF}' - . '\x{89B1}-\x{89B3}\x{89B5}-\x{89BA}\x{89BD}-\x{89ED}\x{89EF}-\x{89F4}' - . '\x{89F6}-\x{89F8}\x{89FA}-\x{89FC}\x{89FE}-\x{8A04}\x{8A07}-\x{8A13}' - . '\x{8A15}-\x{8A18}\x{8A1A}-\x{8A1F}\x{8A22}-\x{8A2A}\x{8A2C}-\x{8A32}' - . '\x{8A34}-\x{8A3C}\x{8A3E}-\x{8A4A}\x{8A4C}-\x{8A63}\x{8A65}-\x{8A77}' - . '\x{8A79}-\x{8A7C}\x{8A7E}-\x{8A87}\x{8A89}-\x{8A9E}\x{8AA0}-\x{8AAC}\x{8AAE}' - . '\x{8AB0}-\x{8AB6}\x{8AB8}-\x{8ACF}\x{8AD1}-\x{8AEB}\x{8AED}-\x{8B0B}' - . '\x{8B0D}-\x{8B28}\x{8B2A}-\x{8B31}\x{8B33}-\x{8B37}\x{8B39}-\x{8B3E}' - . '\x{8B40}-\x{8B60}\x{8B63}-\x{8B68}\x{8B6A}-\x{8B71}\x{8B73}\x{8B74}' - . '\x{8B76}-\x{8B7B}\x{8B7D}-\x{8B80}\x{8B82}-\x{8B86}\x{8B88}-\x{8B8C}\x{8B8E}' - . '\x{8B90}-\x{8B9A}\x{8B9C}-\x{8C37}\x{8C39}-\x{8C3F}\x{8C41}-\x{8C43}' - . '\x{8C45}-\x{8C50}\x{8C54}-\x{8C57}\x{8C59}-\x{8C73}\x{8C75}-\x{8C7B}\x{8C7D}' - . '\x{8C7E}\x{8C80}-\x{8C82}\x{8C84}-\x{8C86}\x{8C88}-\x{8C8A}\x{8C8C}\x{8C8D}' - . '\x{8C8F}-\x{8C9A}\x{8C9C}-\x{8CA5}\x{8CA7}-\x{8CCA}\x{8CCC}\x{8CCE}-\x{8CD5}' - . '\x{8CD7}\x{8CD9}-\x{8CE8}\x{8CEA}-\x{8CF6}\x{8CF8}-\x{8D00}\x{8D02}-\x{8D10}' - . '\x{8D13}-\x{8D7B}\x{8D7D}-\x{8DA5}\x{8DA7}-\x{8DBF}\x{8DC1}-\x{8DE4}' - . '\x{8DE6}-\x{8E00}\x{8E02}-\x{8E0A}\x{8E0C}-\x{8E31}\x{8E33}-\x{8E45}' - . '\x{8E47}-\x{8E4E}\x{8E50}-\x{8E6D}\x{8E6F}-\x{8E74}\x{8E76}\x{8E78}' - . '\x{8E7A}-\x{8E98}\x{8E9A}\x{8E9C}-\x{8EA1}\x{8EA3}-\x{8EB2}\x{8EB4}\x{8EB5}' - . '\x{8EB8}-\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}-\x{8ED8}\x{8EDA}-\x{8EE1}' - . '\x{8EE4}-\x{8EEF}\x{8EF1}-\x{8F0B}\x{8F0D}\x{8F0E}\x{8F10}-\x{8F18}' - . '\x{8F1A}-\x{8F2C}\x{8F2E}-\x{8F39}\x{8F3B}-\x{8F40}\x{8F42}-\x{8F5B}' - . '\x{8F5D}-\x{8F9C}\x{8F9E}-\x{8FA3}\x{8FA5}-\x{8FB2}\x{8FB4}-\x{8FB9}' - . '\x{8FBB}-\x{8FC2}\x{8FC4}-\x{8FC9}\x{8FCB}-\x{8FE6}\x{8FE8}-\x{900D}' - . '\x{900F}-\x{9029}\x{902B}\x{902D}-\x{9036}\x{9038}\x{903A}-\x{903F}' - . '\x{9041}-\x{9045}\x{9047}-\x{90AA}\x{90AC}-\x{90CB}\x{90CE}-\x{90D1}' - . '\x{90D3}-\x{90F5}\x{90F7}-\x{9109}\x{910B}-\x{913B}\x{913E}-\x{9158}' - . '\x{915A}-\x{917A}\x{917C}-\x{9194}\x{9196}\x{9199}-\x{91A3}\x{91A5}-\x{91A8}' - . '\x{91AA}-\x{91B7}\x{91B9}-\x{91BE}\x{91C0}-\x{91C3}\x{91C5}-\x{91C7}' - . '\x{91C9}-\x{91D5}\x{91D7}-\x{91DF}\x{91E2}-\x{91EE}\x{91F0}-\x{91F5}' - . '\x{91F7}-\x{91FB}\x{91FD}-\x{9212}\x{9214}-\x{921E}\x{9220}\x{9221}' - . '\x{9223}-\x{922B}\x{922D}-\x{9242}\x{9245}-\x{9268}\x{926B}-\x{9270}' - . '\x{9272}-\x{9280}\x{9282}\x{9283}\x{9285}-\x{929D}\x{929F}-\x{92BC}' - . '\x{92BE}-\x{92D3}\x{92D5}-\x{92DA}\x{92DC}-\x{92E1}\x{92E3}-\x{931B}' - . '\x{931D}-\x{932B}\x{932D}-\x{932F}\x{9332}-\x{9361}\x{9363}-\x{9367}\x{9369}' - . '\x{936A}\x{936C}-\x{936E}\x{9370}-\x{9372}\x{9374}-\x{9377}\x{9379}-\x{937E}' - . '\x{9380}\x{9382}-\x{938A}\x{938C}-\x{939B}\x{939D}-\x{939F}\x{93A1}-\x{93AA}' - . '\x{93AC}-\x{93BA}\x{93BC}-\x{93DF}\x{93E1}-\x{93E4}\x{93E6}-\x{93F2}' - . '\x{93F4}-\x{9401}\x{9403}-\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}' - . '\x{9422}\x{9423}\x{9425}-\x{9442}\x{9444}-\x{944D}\x{944F}-\x{9459}' - . '\x{945B}-\x{946B}\x{946D}-\x{947A}\x{947C}-\x{9577}\x{957A}-\x{957D}' - . '\x{957F}-\x{9584}\x{9586}-\x{9596}\x{9598}-\x{959F}\x{95A1}-\x{95B2}' - . '\x{95B5}-\x{95B7}\x{95B9}-\x{95C0}\x{95C2}-\x{95D8}\x{95DA}-\x{95DC}' - . '\x{95DE}-\x{9624}\x{9627}\x{9628}\x{962A}-\x{963D}\x{963F}-\x{9655}' - . '\x{9658}-\x{9664}\x{9666}-\x{9678}\x{967C}-\x{967E}\x{9680}\x{9683}-\x{968B}' - . '\x{968D}-\x{9695}\x{9697}-\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}-\x{96AA}' - . '\x{96AC}-\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}-\x{96E3}\x{96E5}' - . '\x{96E8}-\x{96FB}\x{96FD}-\x{9713}\x{9715}\x{9716}\x{9718}\x{9719}' - . '\x{971C}-\x{9732}\x{9735}\x{9736}\x{9738}-\x{973F}\x{9742}-\x{974C}' - . '\x{974E}-\x{9756}\x{9758}-\x{9762}\x{9765}-\x{9770}\x{9772}-\x{9774}' - . '\x{9776}-\x{9786}\x{9788}\x{978A}-\x{979A}\x{979C}-\x{97A8}\x{97AA}-\x{97AF}' - . '\x{97B2}-\x{97B4}\x{97B6}-\x{97BD}\x{97BF}\x{97C1}-\x{97D1}\x{97D3}-\x{97FB}' - . '\x{97FD}-\x{981E}\x{9820}-\x{9824}\x{9826}-\x{9829}\x{982B}\x{982D}-\x{9832}' - . '\x{9834}-\x{9839}\x{983B}-\x{983D}\x{983F}-\x{9841}\x{9843}-\x{9846}' - . '\x{9848}-\x{984A}\x{984C}-\x{9855}\x{9857}-\x{9865}\x{9867}\x{9869}-\x{98B6}' - . '\x{98B8}-\x{98C6}\x{98C8}\x{98C9}\x{98CB}-\x{98E0}\x{98E2}\x{98E3}' - . '\x{98E5}-\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}-\x{98F7}\x{98F9}\x{98FA}' - . '\x{98FC}-\x{9918}\x{991A}-\x{993A}\x{993C}-\x{9943}\x{9945}-\x{994C}' - . '\x{994E}-\x{9959}\x{995B}\x{995C}\x{995E}-\x{99BE}\x{99C0}-\x{99C4}' - . '\x{99C6}-\x{99DF}\x{99E1}-\x{99E5}\x{99E7}-\x{99EA}\x{99EC}-\x{99F4}' - . '\x{99F6}-\x{9A0F}\x{9A11}\x{9A14}-\x{9A16}\x{9A19}-\x{9A27}\x{9A29}-\x{9A3A}' - . '\x{9A3C}-\x{9A50}\x{9A52}-\x{9A57}\x{9A59}-\x{9A5C}\x{9A5E}-\x{9A62}' - . '\x{9A64}-\x{9AA8}\x{9AAA}-\x{9ABC}\x{9ABE}-\x{9AC7}\x{9AC9}-\x{9AD6}' - . '\x{9AD8}-\x{9ADF}\x{9AE1}-\x{9AE3}\x{9AE5}-\x{9AE7}\x{9AEA}-\x{9AEF}' - . '\x{9AF1}-\x{9AFF}\x{9B01}\x{9B03}-\x{9B08}\x{9B0A}-\x{9B13}\x{9B15}-\x{9B1A}' - . '\x{9B1C}-\x{9B33}\x{9B35}-\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}-\x{9B4F}' - . '\x{9B51}-\x{9B56}\x{9B58}-\x{9B61}\x{9B63}-\x{9B71}\x{9B73}-\x{9B88}\x{9B8A}' - . '\x{9B8B}\x{9B8D}-\x{9B98}\x{9B9A}-\x{9BC1}\x{9BC3}-\x{9BF5}\x{9BF7}-\x{9BFF}' - . '\x{9C02}\x{9C05}-\x{9C2D}\x{9C2F}-\x{9C41}\x{9C43}-\x{9C4E}\x{9C50}' - . '\x{9C52}-\x{9C60}\x{9C62}\x{9C63}\x{9C65}-\x{9C75}\x{9C77}-\x{9C7A}' - . '\x{9C7C}-\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}-\x{9D26}\x{9D28}\x{9D29}\x{9D2B}' - . '\x{9D2D}-\x{9D34}\x{9D36}-\x{9D3B}\x{9D3D}-\x{9D43}\x{9D45}-\x{9D6C}' - . '\x{9D6E}-\x{9D8E}\x{9D90}-\x{9D94}\x{9D96}-\x{9DAD}\x{9DAF}-\x{9DBC}\x{9DBE}' - . '\x{9DBF}\x{9DC1}-\x{9DC5}\x{9DC7}-\x{9DE9}\x{9DEB}-\x{9DFB}\x{9DFD}-\x{9E0D}' - . '\x{9E0F}-\x{9E15}\x{9E17}-\x{9E1B}\x{9E1D}-\x{9E77}\x{9E79}\x{9E7A}' - . '\x{9E7C}-\x{9E8E}\x{9E91}-\x{9E94}\x{9E96}\x{9E97}\x{9E99}-\x{9E9D}' - . '\x{9E9F}-\x{9EA1}\x{9EA3}-\x{9EAA}\x{9EAD}-\x{9EB0}\x{9EB2}-\x{9EB8}' - . '\x{9EBB}-\x{9EEB}\x{9EED}-\x{9EF0}\x{9EF2}-\x{9F02}\x{9F04}-\x{9F10}\x{9F12}' - . '\x{9F13}\x{9F15}-\x{9F20}\x{9F22}-\x{9F25}\x{9F27}-\x{9F44}\x{9F46}-\x{9F52}' - . '\x{9F54}-\x{9F61}\x{9F63}-\x{9F6C}\x{9F6E}-\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu', + 1 => + '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' + . '\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' + . '\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' + . '\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' + . '\x{49B6}\x{49B7}\x{4C77}\x{4C9F}-\x{4CA3}\x{4D13}-\x{4D19}\x{4DAE}' + . '\x{4E00}-\x{4E11}\x{4E13}-\x{4E28}\x{4E2A}-\x{4E54}\x{4E56}-\x{4E67}' + . '\x{4E69}-\x{4E78}\x{4E7A}-\x{4E89}\x{4E8B}-\x{4E95}\x{4E97}-\x{4EA2}' + . '\x{4EA4}-\x{4EBB}\x{4EBD}-\x{4ECB}\x{4ECD}-\x{4EE6}\x{4EE8}-\x{4EEC}' + . '\x{4EEF}-\x{4EF7}\x{4EFB}\x{4EFD}\x{4EFF}-\x{4F06}\x{4F08}-\x{4F15}' + . '\x{4F17}-\x{4F27}\x{4F29}-\x{4F30}\x{4F32}-\x{4F34}\x{4F36}\x{4F38}-\x{4F3F}' + . '\x{4F41}-\x{4F43}\x{4F45}-\x{4F70}\x{4F72}-\x{4F8B}\x{4F8D}\x{4F8F}-\x{4FA1}' + . '\x{4FA3}-\x{4FAC}\x{4FAE}-\x{4FBC}\x{4FBE}-\x{4FC5}\x{4FC7}\x{4FC9}-\x{4FCB}' + . '\x{4FCD}-\x{4FE1}\x{4FE3}-\x{4FFB}\x{4FFE}-\x{500F}\x{5011}-\x{5033}' + . '\x{5035}-\x{5037}\x{5039}-\x{503C}\x{503E}-\x{5041}\x{5043}-\x{504F}\x{5051}' + . '\x{5053}-\x{5057}\x{5059}-\x{507B}\x{507D}-\x{5080}\x{5082}-\x{5092}' + . '\x{5094}-\x{5096}\x{5098}-\x{509E}\x{50A2}-\x{50B8}\x{50BA}-\x{50C2}' + . '\x{50C4}-\x{50D7}\x{50D9}-\x{50DE}\x{50E0}\x{50E3}-\x{50EA}\x{50EC}-\x{50F3}' + . '\x{50F5}\x{50F6}\x{50F8}-\x{511A}\x{511C}-\x{5127}\x{5129}\x{512A}' + . '\x{512C}-\x{5141}\x{5143}-\x{5149}\x{514B}-\x{514E}\x{5150}-\x{5152}' + . '\x{5154}-\x{5157}\x{5159}-\x{515F}\x{5161}-\x{5163}\x{5165}-\x{5171}' + . '\x{5173}-\x{517D}\x{517F}-\x{5182}\x{5185}-\x{518D}\x{518F}-\x{51A0}\x{51A2}' + . '\x{51A4}-\x{51A8}\x{51AA}-\x{51AC}\x{51AE}-\x{51B3}\x{51B5}-\x{51B7}\x{51B9}' + . '\x{51BB}-\x{51C1}\x{51C3}-\x{51D1}\x{51D4}-\x{51DE}\x{51E0}-\x{51E5}' + . '\x{51E7}-\x{51EB}\x{51ED}\x{51EF}-\x{51F1}\x{51F3}-\x{5226}\x{5228}-\x{524E}' + . '\x{5250}-\x{5252}\x{5254}-\x{5265}\x{5267}-\x{5270}\x{5272}-\x{5278}' + . '\x{527A}-\x{5284}\x{5286}-\x{528D}\x{528F}-\x{52A3}\x{52A5}-\x{52C3}\x{52C6}' + . '\x{52C7}\x{52C9}-\x{52CB}\x{52CD}\x{52CF}\x{52D0}\x{52D2}\x{52D3}' + . '\x{52D5}-\x{52E0}\x{52E2}-\x{52E4}\x{52E6}-\x{52ED}\x{52EF}-\x{5302}' + . '\x{5305}-\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}-\x{5326}\x{5328}' + . '\x{532A}-\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}-\x{5341}\x{5343}-\x{535A}' + . '\x{535C}\x{535E}-\x{5367}\x{5369}\x{536B}\x{536C}\x{536E}-\x{537F}' + . '\x{5381}-\x{53A0}\x{53A2}-\x{53A9}\x{53AC}-\x{53AE}\x{53B0}-\x{53B9}' + . '\x{53BB}-\x{53C4}\x{53C6}-\x{53CE}\x{53D0}-\x{53D9}\x{53DB}\x{53DC}' + . '\x{53DF}-\x{53E6}\x{53E8}-\x{53FE}\x{5401}-\x{5419}\x{541B}-\x{5421}' + . '\x{5423}-\x{544B}\x{544D}-\x{545C}\x{545E}-\x{5468}\x{546A}-\x{5489}' + . '\x{548B}-\x{54B4}\x{54B6}-\x{54F5}\x{54F7}-\x{5514}\x{5516}\x{5517}' + . '\x{551A}-\x{5546}\x{5548}-\x{555F}\x{5561}-\x{5579}\x{557B}-\x{55DF}' + . '\x{55E1}-\x{55F7}\x{55F9}-\x{5604}\x{5606}-\x{5609}\x{560C}-\x{561F}' + . '\x{5621}-\x{562A}\x{562C}-\x{5636}\x{5638}-\x{563B}\x{563D}-\x{5643}' + . '\x{5645}-\x{564A}\x{564C}-\x{5650}\x{5652}-\x{5655}\x{5657}-\x{565E}\x{5660}' + . '\x{5662}-\x{5674}\x{5676}-\x{567C}\x{567E}-\x{5687}\x{568A}\x{568C}-\x{5695}' + . '\x{5697}-\x{569D}\x{569F}-\x{56A1}\x{56A3}-\x{56B9}\x{56BB}-\x{56CE}' + . '\x{56D0}-\x{56D8}\x{56DA}-\x{56E5}\x{56E7}-\x{56F5}\x{56F7}\x{56F9}\x{56FA}' + . '\x{56FD}-\x{5704}\x{5706}-\x{5710}\x{5712}-\x{5716}\x{5718}-\x{5720}\x{5722}' + . '\x{5723}\x{5725}-\x{573C}\x{573E}-\x{5742}\x{5744}-\x{5747}\x{5749}-\x{5754}' + . '\x{5757}\x{5759}-\x{5762}\x{5764}-\x{576D}\x{576F}-\x{5777}\x{5779}-\x{5780}' + . '\x{5782}-\x{5786}\x{5788}-\x{5795}\x{5797}-\x{57A7}\x{57A9}-\x{57C9}' + . '\x{57CB}-\x{57D0}\x{57D2}-\x{57D6}\x{57D8}-\x{57DA}\x{57DC}\x{57DD}' + . '\x{57DF}-\x{5816}\x{5819}-\x{5840}\x{5842}-\x{584F}\x{5851}-\x{5855}' + . '\x{5857}-\x{585F}\x{5861}-\x{5865}\x{5868}-\x{5876}\x{5878}-\x{5894}' + . '\x{5896}-\x{58A9}\x{58AB}-\x{58B4}\x{58B7}-\x{58BF}\x{58C1}\x{58C2}' + . '\x{58C5}-\x{58CB}\x{58CE}\x{58CF}\x{58D1}-\x{58DB}\x{58DD}-\x{58E0}' + . '\x{58E2}-\x{58E5}\x{58E7}-\x{58F4}\x{58F6}-\x{5900}\x{5902}-\x{5904}\x{5906}' + . '\x{5907}\x{5909}-\x{5910}\x{5912}\x{5914}-\x{5922}\x{5924}-\x{5932}\x{5934}' + . '\x{5935}\x{5937}-\x{5958}\x{595A}\x{595C}-\x{599A}\x{599C}-\x{59B6}' + . '\x{59B8}-\x{59E6}\x{59E8}-\x{5A23}\x{5A25}\x{5A27}-\x{5A2B}\x{5A2D}-\x{5A2F}' + . '\x{5A31}-\x{5A53}\x{5A55}-\x{5A58}\x{5A5A}-\x{5A6E}\x{5A70}\x{5A72}-\x{5A86}' + . '\x{5A88}-\x{5A8C}\x{5A8E}-\x{5AAA}\x{5AAC}-\x{5ACF}\x{5AD1}\x{5AD2}' + . '\x{5AD4}-\x{5AEE}\x{5AF1}-\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}-\x{5B38}' + . '\x{5B3A}-\x{5B45}\x{5B47}-\x{5B4E}\x{5B50}\x{5B51}\x{5B53}-\x{5B5F}' + . '\x{5B62}-\x{5B6E}\x{5B70}-\x{5B78}\x{5B7A}-\x{5B7D}\x{5B7F}-\x{5B85}' + . '\x{5B87}-\x{5B8F}\x{5B91}-\x{5BA8}\x{5BAA}-\x{5BB1}\x{5BB3}-\x{5BB6}' + . '\x{5BB8}-\x{5BBB}\x{5BBD}-\x{5BC7}\x{5BCA}-\x{5BD6}\x{5BD8}\x{5BD9}' + . '\x{5BDB}-\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}-\x{5C1A}\x{5C1C}-\x{5C22}\x{5C24}' + . '\x{5C25}\x{5C27}\x{5C28}\x{5C2A}-\x{5C35}\x{5C37}-\x{5C59}\x{5C5B}-\x{5C84}' + . '\x{5C86}-\x{5CB3}\x{5CB5}-\x{5CB8}\x{5CBA}-\x{5CBF}\x{5CC1}-\x{5CD4}' + . '\x{5CD6}-\x{5CDC}\x{5CDE}-\x{5CF4}\x{5CF6}-\x{5D2A}\x{5D2C}-\x{5D2E}' + . '\x{5D30}-\x{5D3A}\x{5D3C}-\x{5D52}\x{5D54}-\x{5D56}\x{5D58}-\x{5D5B}' + . '\x{5D5D}-\x{5D5F}\x{5D61}-\x{5D82}\x{5D84}-\x{5D95}\x{5D97}-\x{5DA2}' + . '\x{5DA5}-\x{5DAA}\x{5DAC}-\x{5DB2}\x{5DB4}-\x{5DB8}\x{5DBA}-\x{5DC3}' + . '\x{5DC5}-\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}-\x{5DF5}\x{5DF7}-\x{5E11}' + . '\x{5E13}-\x{5E3E}\x{5E40}-\x{5E47}\x{5E49}-\x{5E50}\x{5E52}-\x{5E91}' + . '\x{5E93}-\x{5EB9}\x{5EBB}-\x{5EBF}\x{5EC1}-\x{5EEA}\x{5EEC}-\x{5EF8}' + . '\x{5EFA}-\x{5F08}\x{5F0A}-\x{5F0D}\x{5F0F}\x{5F11}-\x{5F3A}\x{5F3C}' + . '\x{5F3E}-\x{5F8E}\x{5F90}-\x{5F99}\x{5F9B}-\x{5FA2}\x{5FA5}-\x{5FAF}' + . '\x{5FB1}-\x{5FC1}\x{5FC3}-\x{5FCD}\x{5FCF}-\x{5FDA}\x{5FDC}-\x{5FDE}\x{5FE0}' + . '\x{5FE1}\x{5FE3}-\x{5FEB}\x{5FED}-\x{5FFB}\x{5FFD}-\x{6022}\x{6024}-\x{6055}' + . '\x{6057}-\x{605F}\x{6062}-\x{6070}\x{6072}\x{6073}\x{6075}-\x{6090}\x{6092}' + . '\x{6094}-\x{60A4}\x{60A6}-\x{60A8}\x{60AA}-\x{60D1}\x{60D3}-\x{60D5}' + . '\x{60D7}-\x{60DD}\x{60DF}-\x{60E2}\x{60E4}\x{60E6}-\x{60FC}\x{60FE}-\x{6101}' + . '\x{6103}-\x{6106}\x{6108}-\x{6110}\x{6112}-\x{611D}\x{611F}\x{6120}' + . '\x{6122}-\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}-\x{615F}' + . '\x{6161}-\x{616E}\x{6170}-\x{617A}\x{617C}\x{617E}\x{6180}-\x{6185}' + . '\x{6187}-\x{6196}\x{6198}-\x{619B}\x{619D}-\x{61B8}\x{61BA}\x{61BC}-\x{61D2}' + . '\x{61D4}\x{61D6}-\x{61EB}\x{61ED}\x{61EE}\x{61F0}-\x{61F3}\x{61F5}-\x{6204}' + . '\x{6206}-\x{6234}\x{6236}-\x{6238}\x{623A}-\x{6256}\x{6258}-\x{6281}' + . '\x{6283}-\x{628C}\x{628E}-\x{629C}\x{629E}-\x{62A5}\x{62A7}-\x{62DD}' + . '\x{62DF}-\x{62E9}\x{62EB}-\x{6309}\x{630B}-\x{6316}\x{6318}-\x{6330}' + . '\x{6332}-\x{6334}\x{6336}\x{6338}-\x{633E}\x{6340}-\x{635A}\x{635C}-\x{637E}' + . '\x{6380}-\x{638A}\x{638C}-\x{6392}\x{6394}-\x{63BA}\x{63BC}-\x{63D0}' + . '\x{63D2}-\x{6406}\x{6408}-\x{643A}\x{643D}-\x{6441}\x{6443}-\x{6448}' + . '\x{644A}-\x{6459}\x{645B}-\x{647D}\x{647F}-\x{6485}\x{6487}-\x{64A0}' + . '\x{64A2}-\x{64AE}\x{64B0}-\x{64B5}\x{64B7}-\x{64C7}\x{64C9}-\x{64D4}' + . '\x{64D6}-\x{64E0}\x{64E2}-\x{64E4}\x{64E6}-\x{64ED}\x{64EF}-\x{64F4}' + . '\x{64F6}-\x{64F8}\x{64FA}-\x{6501}\x{6503}-\x{6509}\x{650B}-\x{651E}' + . '\x{6520}-\x{6527}\x{6529}-\x{653F}\x{6541}\x{6543}-\x{6559}\x{655B}-\x{655E}' + . '\x{6560}-\x{656C}\x{656E}-\x{657C}\x{657E}-\x{6589}\x{658B}-\x{6599}' + . '\x{659B}-\x{65B4}\x{65B6}-\x{65BD}\x{65BF}-\x{65C7}\x{65CA}-\x{65D0}' + . '\x{65D2}-\x{65D7}\x{65DA}\x{65DB}\x{65DD}-\x{65E3}\x{65E5}-\x{65E9}' + . '\x{65EB}-\x{65F8}\x{65FA}-\x{65FD}\x{6600}-\x{6616}\x{6618}-\x{661D}' + . '\x{661F}-\x{662B}\x{662D}-\x{6636}\x{6639}\x{663A}\x{663C}-\x{663E}' + . '\x{6640}-\x{6647}\x{6649}-\x{664C}\x{664E}-\x{665F}\x{6661}\x{6662}' + . '\x{6664}-\x{6666}\x{6668}-\x{6691}\x{6693}-\x{669B}\x{669D}\x{669F}-\x{66AB}' + . '\x{66AE}-\x{66CF}\x{66D1}\x{66D2}\x{66D4}-\x{66D6}\x{66D8}-\x{66DE}' + . '\x{66E0}-\x{66EE}\x{66F0}-\x{66FC}\x{66FE}-\x{6701}\x{6703}-\x{6706}' + . '\x{6708}-\x{6718}\x{671A}-\x{6723}\x{6725}-\x{6728}\x{672A}-\x{6766}' + . '\x{6768}-\x{6787}\x{6789}-\x{6795}\x{6797}-\x{67A8}\x{67AA}-\x{67BC}\x{67BE}' + . '\x{67C0}-\x{67D4}\x{67D6}\x{67D8}-\x{67F8}\x{67FA}-\x{6800}\x{6802}-\x{6814}' + . '\x{6816}-\x{681D}\x{681F}-\x{6826}\x{6828}-\x{682F}\x{6831}-\x{6857}\x{685B}' + . '\x{685D}\x{6860}-\x{6879}\x{687B}-\x{6894}\x{6896}-\x{6898}\x{689A}-\x{68A4}' + . '\x{68A6}-\x{68B7}\x{68B9}\x{68BB}-\x{68C2}\x{68C4}\x{68C6}-\x{68D8}' + . '\x{68DA}-\x{68E1}\x{68E3}\x{68E4}\x{68E6}-\x{68FF}\x{6901}-\x{6908}' + . '\x{690A}-\x{693D}\x{693F}-\x{694C}\x{694E}-\x{699E}\x{69A0}\x{69A1}' + . '\x{69A3}-\x{69BF}\x{69C1}-\x{69D0}\x{69D3}\x{69D4}\x{69D8}-\x{69F8}' + . '\x{69FA}-\x{6A02}\x{6A04}-\x{6A0B}\x{6A0D}-\x{6A1B}\x{6A1D}-\x{6A23}' + . '\x{6A25}-\x{6A36}\x{6A38}-\x{6A49}\x{6A4B}-\x{6A52}\x{6A54}-\x{6A5B}' + . '\x{6A5D}-\x{6A6D}\x{6A6F}\x{6A71}-\x{6A85}\x{6A87}-\x{6A89}\x{6A8B}-\x{6A8E}' + . '\x{6A90}-\x{6A98}\x{6A9A}-\x{6A9C}\x{6A9E}-\x{6AA9}\x{6AAB}-\x{6AB0}' + . '\x{6AB2}-\x{6ABD}\x{6ABF}\x{6AC1}-\x{6AC3}\x{6AC5}-\x{6AC7}\x{6ACA}-\x{6AD7}' + . '\x{6AD9}-\x{6AE8}\x{6AEA}-\x{6B0D}\x{6B0F}-\x{6B1A}\x{6B1C}-\x{6B2D}' + . '\x{6B2F}-\x{6B34}\x{6B36}-\x{6B3F}\x{6B41}-\x{6B56}\x{6B59}-\x{6B5C}' + . '\x{6B5E}-\x{6B67}\x{6B69}-\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}-\x{6B74}' + . '\x{6B76}-\x{6B7C}\x{6B7E}-\x{6BB0}\x{6BB2}-\x{6BB7}\x{6BB9}-\x{6BE8}' + . '\x{6BEA}-\x{6BF0}\x{6BF2}\x{6BF3}\x{6BF5}-\x{6BF9}\x{6BFB}-\x{6C09}' + . '\x{6C0B}-\x{6C16}\x{6C18}-\x{6C1B}\x{6C1D}-\x{6C2C}\x{6C2E}-\x{6C38}\x{6C3A}' + . '\x{6C3B}\x{6C3D}-\x{6C44}\x{6C46}-\x{6C6B}\x{6C6D}\x{6C6F}-\x{6C9F}' + . '\x{6CA1}-\x{6CD7}\x{6CD9}-\x{6CF3}\x{6CF5}-\x{6D01}\x{6D03}-\x{6D1B}' + . '\x{6D1D}-\x{6D23}\x{6D25}-\x{6D70}\x{6D72}-\x{6D80}\x{6D82}-\x{6D95}' + . '\x{6D97}-\x{6D9B}\x{6D9D}-\x{6DAF}\x{6DB2}-\x{6DB5}\x{6DB7}-\x{6DFD}\x{6E00}' + . '\x{6E03}-\x{6E05}\x{6E07}-\x{6E11}\x{6E14}-\x{6E17}\x{6E19}-\x{6E29}' + . '\x{6E2B}-\x{6E4B}\x{6E4D}-\x{6E6B}\x{6E6D}-\x{6E75}\x{6E77}-\x{6E79}' + . '\x{6E7E}-\x{6E8A}\x{6E8D}-\x{6E94}\x{6E96}-\x{6EDA}\x{6EDC}\x{6EDE}-\x{6EE2}' + . '\x{6EE4}-\x{6F03}\x{6F05}-\x{6F0A}\x{6F0C}-\x{6F41}\x{6F43}-\x{6F47}\x{6F49}' + . '\x{6F4B}-\x{6F78}\x{6F7A}-\x{6F97}\x{6F99}\x{6F9B}-\x{6F9E}\x{6FA0}-\x{6FB6}' + . '\x{6FB8}-\x{6FC4}\x{6FC6}-\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}-\x{6FF4}' + . '\x{6FF6}-\x{6FFC}\x{6FFE}-\x{700F}\x{7011}\x{7012}\x{7014}-\x{701D}' + . '\x{701F}-\x{7046}\x{7048}-\x{704A}\x{704C}\x{704D}\x{704F}-\x{7071}' + . '\x{7074}-\x{707A}\x{707C}-\x{7080}\x{7082}-\x{708C}\x{708E}-\x{7096}' + . '\x{7098}-\x{709A}\x{709C}-\x{70A9}\x{70AB}-\x{70B1}\x{70B3}-\x{70B5}' + . '\x{70B7}-\x{70D4}\x{70D6}-\x{70FD}\x{70FF}-\x{7107}\x{7109}-\x{7113}' + . '\x{7115}-\x{7123}\x{7125}-\x{7132}\x{7135}-\x{713B}\x{713D}-\x{7154}\x{7156}' + . '\x{7158}-\x{716A}\x{716C}\x{716E}-\x{718C}\x{718E}-\x{7195}\x{7197}-\x{71A5}' + . '\x{71A7}-\x{71AA}\x{71AC}-\x{71B5}\x{71B7}-\x{71CB}\x{71CD}-\x{71D2}' + . '\x{71D4}-\x{71F2}\x{71F4}-\x{71F9}\x{71FB}-\x{71FF}\x{7201}-\x{720A}' + . '\x{720C}-\x{7210}\x{7212}-\x{7214}\x{7216}\x{7218}-\x{721F}\x{7221}-\x{7223}' + . '\x{7226}-\x{722E}\x{7230}-\x{7233}\x{7235}-\x{7244}\x{7246}-\x{724D}\x{724F}' + . '\x{7251}-\x{7254}\x{7256}-\x{729F}\x{72A1}-\x{72AA}\x{72AC}-\x{72BD}' + . '\x{72BF}-\x{7301}\x{7303}-\x{730F}\x{7311}-\x{731E}\x{7320}-\x{7327}' + . '\x{7329}-\x{732E}\x{7330}-\x{734E}\x{7350}-\x{7352}\x{7354}-\x{7362}' + . '\x{7364}-\x{739B}\x{739D}-\x{73C0}\x{73C2}-\x{73E0}\x{73E2}\x{73E3}' + . '\x{73E5}-\x{73F2}\x{73F4}-\x{73FA}\x{73FC}-\x{7417}\x{7419}-\x{7438}' + . '\x{743A}-\x{743D}\x{743F}-\x{7446}\x{7448}\x{744A}-\x{7457}\x{7459}-\x{745F}' + . '\x{7461}-\x{747A}\x{747C}-\x{7483}\x{7485}-\x{7495}\x{7497}-\x{749C}' + . '\x{749E}-\x{74A1}\x{74A3}-\x{74C6}\x{74CA}\x{74CB}\x{74CD}-\x{74EA}' + . '\x{74EC}-\x{750D}\x{750F}-\x{751F}\x{7521}-\x{7533}\x{7535}-\x{7540}' + . '\x{7542}-\x{7549}\x{754B}-\x{7551}\x{7553}\x{7554}\x{7556}-\x{755D}\x{755F}' + . '\x{7560}\x{7562}-\x{7570}\x{7572}\x{7574}-\x{7579}\x{757C}-\x{7584}' + . '\x{7586}-\x{758D}\x{758F}-\x{75A8}\x{75AA}-\x{75B6}\x{75B8}-\x{75DB}' + . '\x{75DD}-\x{75E8}\x{75EA}-\x{75ED}\x{75EF}-\x{762B}\x{762D}-\x{7643}' + . '\x{7646}-\x{764D}\x{764F}\x{7650}\x{7652}-\x{7654}\x{7656}-\x{7672}' + . '\x{7674}-\x{7679}\x{767B}-\x{768C}\x{768E}-\x{76A0}\x{76A3}\x{76A4}\x{76A6}' + . '\x{76A7}\x{76A9}-\x{76B2}\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}-\x{76C0}' + . '\x{76C2}-\x{76CA}\x{76CD}-\x{76D8}\x{76DA}-\x{76EA}\x{76EC}-\x{76FF}\x{7701}' + . '\x{7703}-\x{770D}\x{770F}-\x{7720}\x{7722}\x{7723}\x{7725}-\x{772A}' + . '\x{772C}-\x{773E}\x{7740}\x{7741}\x{7743}-\x{7763}\x{7765}-\x{7795}' + . '\x{7797}-\x{77A3}\x{77A5}-\x{77BD}\x{77BF}\x{77C0}\x{77C2}-\x{77D1}' + . '\x{77D3}-\x{77DC}\x{77DE}-\x{77E3}\x{77E5}\x{77E7}-\x{77F3}\x{77F6}-\x{7806}' + . '\x{7808}-\x{7823}\x{7825}-\x{7835}\x{7837}-\x{783E}\x{7840}\x{7841}' + . '\x{7843}-\x{7845}\x{7847}-\x{784A}\x{784C}-\x{784E}\x{7850}-\x{7875}' + . '\x{7877}-\x{7887}\x{7889}-\x{78C1}\x{78C3}-\x{78C6}\x{78C8}-\x{78D1}' + . '\x{78D3}-\x{78EF}\x{78F1}-\x{78F7}\x{78F9}-\x{78FF}\x{7901}-\x{7907}' + . '\x{7909}-\x{790C}\x{790E}-\x{7914}\x{7916}-\x{791E}\x{7921}-\x{7931}' + . '\x{7933}-\x{7935}\x{7937}-\x{7958}\x{795A}-\x{796B}\x{796D}\x{796F}-\x{7974}' + . '\x{7977}-\x{7985}\x{7988}-\x{799C}\x{799F}-\x{79A8}\x{79AA}-\x{79BB}' + . '\x{79BD}-\x{79C3}\x{79C5}\x{79C6}\x{79C8}-\x{79CB}\x{79CD}-\x{79D3}\x{79D5}' + . '\x{79D6}\x{79D8}-\x{7A00}\x{7A02}-\x{7A06}\x{7A08}\x{7A0A}-\x{7A2B}' + . '\x{7A2D}-\x{7A35}\x{7A37}\x{7A39}\x{7A3B}-\x{7A4E}\x{7A50}-\x{7A62}' + . '\x{7A65}-\x{7A69}\x{7A6B}-\x{7A6E}\x{7A70}-\x{7A81}\x{7A83}-\x{7A99}' + . '\x{7A9C}-\x{7AB8}\x{7ABA}\x{7ABE}-\x{7AC1}\x{7AC4}\x{7AC5}\x{7AC7}-\x{7AD6}' + . '\x{7AD8}\x{7AD9}\x{7ADB}-\x{7AE8}\x{7AEA}-\x{7AF4}\x{7AF6}-\x{7AFB}' + . '\x{7AFD}-\x{7B06}\x{7B08}-\x{7B1E}\x{7B20}-\x{7B26}\x{7B28}\x{7B2A}-\x{7B41}' + . '\x{7B43}-\x{7B52}\x{7B54}-\x{7B6E}\x{7B70}-\x{7B79}\x{7B7B}-\x{7B85}' + . '\x{7B87}-\x{7B91}\x{7B93}-\x{7BA2}\x{7BA4}\x{7BA6}-\x{7BAF}\x{7BB1}' + . '\x{7BB3}-\x{7BCE}\x{7BD0}-\x{7BF9}\x{7BFB}-\x{7C13}\x{7C15}-\x{7C1A}' + . '\x{7C1C}-\x{7C2D}\x{7C30}-\x{7C4E}\x{7C50}\x{7C51}\x{7C53}\x{7C54}' + . '\x{7C56}-\x{7C5C}\x{7C5E}-\x{7C75}\x{7C77}-\x{7C82}\x{7C84}-\x{7C86}' + . '\x{7C88}-\x{7C92}\x{7C94}-\x{7C99}\x{7C9B}-\x{7CAA}\x{7CAD}-\x{7CD2}' + . '\x{7CD4}-\x{7CD9}\x{7CDC}-\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}-\x{7CFB}\x{7CFD}' + . '\x{7CFE}\x{7D00}-\x{7D22}\x{7D24}-\x{7D29}\x{7D2B}\x{7D2C}\x{7D2E}-\x{7D47}' + . '\x{7D49}-\x{7D4C}\x{7D4E}-\x{7D59}\x{7D5B}-\x{7D63}\x{7D65}-\x{7D77}' + . '\x{7D79}-\x{7D81}\x{7D83}-\x{7D94}\x{7D96}\x{7D97}\x{7D99}\x{7D9B}-\x{7DA3}' + . '\x{7DA5}-\x{7DA7}\x{7DA9}-\x{7DCC}\x{7DCE}-\x{7DD2}\x{7DD4}-\x{7DDB}' + . '\x{7DDD}-\x{7DE3}\x{7DE6}-\x{7DEA}\x{7DEC}-\x{7DFC}\x{7E00}-\x{7E17}' + . '\x{7E19}-\x{7E49}\x{7E4C}-\x{7E5A}\x{7E5C}-\x{7E63}\x{7E65}-\x{7E9C}' + . '\x{7E9E}-\x{7F3A}\x{7F3D}-\x{7F40}\x{7F42}-\x{7F45}\x{7F47}-\x{7F58}' + . '\x{7F5A}-\x{7F83}\x{7F85}-\x{7F8F}\x{7F91}-\x{7F96}\x{7F98}\x{7F9A}-\x{7FB3}' + . '\x{7FB5}-\x{7FD5}\x{7FD7}-\x{7FDC}\x{7FDE}-\x{7FE3}\x{7FE5}-\x{8009}' + . '\x{800B}-\x{802E}\x{8030}-\x{803B}\x{803D}-\x{803F}\x{8041}-\x{8065}' + . '\x{8067}-\x{8087}\x{8089}-\x{808D}\x{808F}-\x{8093}\x{8095}-\x{80A5}' + . '\x{80A9}-\x{80AB}\x{80AD}-\x{80B2}\x{80B4}-\x{80B8}\x{80BA}-\x{80DE}' + . '\x{80E0}-\x{8102}\x{8105}-\x{8116}\x{8118}-\x{8132}\x{8136}-\x{815E}' + . '\x{8160}-\x{8183}\x{8185}-\x{818F}\x{8191}-\x{8195}\x{8197}-\x{81CA}' + . '\x{81CC}-\x{81D2}\x{81D4}-\x{81E3}\x{81E5}-\x{81EE}\x{81F1}-\x{8212}' + . '\x{8214}-\x{8216}\x{8218}-\x{8223}\x{8225}-\x{822D}\x{822F}-\x{8240}' + . '\x{8242}-\x{8261}\x{8263}\x{8264}\x{8266}-\x{828B}\x{828D}-\x{82B1}' + . '\x{82B3}-\x{82E1}\x{82E3}-\x{82FB}\x{82FD}-\x{8309}\x{830B}-\x{830F}' + . '\x{8311}-\x{832F}\x{8331}-\x{8354}\x{8356}-\x{839E}\x{83A0}-\x{83B4}' + . '\x{83B6}-\x{83BD}\x{83BF}-\x{83E5}\x{83E7}-\x{83EC}\x{83EE}-\x{8413}\x{8415}' + . '\x{8418}-\x{841E}\x{8421}-\x{8457}\x{8459}-\x{8482}\x{8484}-\x{8494}' + . '\x{8496}-\x{84AC}\x{84AE}-\x{84B6}\x{84B8}-\x{84C2}\x{84C4}-\x{84D9}' + . '\x{84DB}-\x{84EC}\x{84EE}-\x{8504}\x{8506}-\x{850F}\x{8511}-\x{8531}' + . '\x{8534}-\x{854B}\x{854D}-\x{854F}\x{8551}-\x{857E}\x{8580}-\x{8592}' + . '\x{8594}-\x{8596}\x{8598}-\x{85B1}\x{85B3}-\x{85BA}\x{85BC}-\x{85CB}' + . '\x{85CD}-\x{85ED}\x{85EF}-\x{85F2}\x{85F4}-\x{85FB}\x{85FD}-\x{8602}' + . '\x{8604}-\x{860C}\x{860F}\x{8611}-\x{8614}\x{8616}-\x{861C}\x{861E}-\x{8636}' + . '\x{8638}-\x{8656}\x{8658}-\x{8674}\x{8676}-\x{8688}\x{868A}-\x{8691}' + . '\x{8693}-\x{869F}\x{86A1}-\x{86A5}\x{86A7}-\x{86CC}\x{86CE}-\x{86D4}' + . '\x{86D6}-\x{86DF}\x{86E1}-\x{86E6}\x{86E8}-\x{86FC}\x{86FE}-\x{871C}' + . '\x{871E}-\x{872E}\x{8730}-\x{873C}\x{873E}-\x{8744}\x{8746}-\x{874A}' + . '\x{874C}-\x{8770}\x{8772}-\x{877E}\x{8780}-\x{878D}\x{878F}-\x{8798}' + . '\x{879A}-\x{87D9}\x{87DB}-\x{87EF}\x{87F1}-\x{8806}\x{8808}-\x{8811}' + . '\x{8813}-\x{882C}\x{882E}-\x{8839}\x{883B}-\x{8846}\x{8848}-\x{8857}' + . '\x{8859}-\x{885B}\x{885D}\x{885E}\x{8860}-\x{8879}\x{887B}-\x{88B4}' + . '\x{88B6}-\x{88E5}\x{88E7}\x{88E8}\x{88EA}-\x{88EC}\x{88EE}-\x{8902}' + . '\x{8904}-\x{890E}\x{8910}-\x{8923}\x{8925}-\x{894C}\x{894E}-\x{8964}' + . '\x{8966}-\x{8974}\x{8976}-\x{897C}\x{897E}-\x{898C}\x{898E}\x{898F}' + . '\x{8991}-\x{8993}\x{8995}-\x{8998}\x{899A}-\x{89A8}\x{89AA}-\x{89AF}' + . '\x{89B1}-\x{89B3}\x{89B5}-\x{89BA}\x{89BD}-\x{89ED}\x{89EF}-\x{89F4}' + . '\x{89F6}-\x{89F8}\x{89FA}-\x{89FC}\x{89FE}-\x{8A04}\x{8A07}-\x{8A13}' + . '\x{8A15}-\x{8A18}\x{8A1A}-\x{8A1F}\x{8A22}-\x{8A2A}\x{8A2C}-\x{8A32}' + . '\x{8A34}-\x{8A3C}\x{8A3E}-\x{8A4A}\x{8A4C}-\x{8A63}\x{8A65}-\x{8A77}' + . '\x{8A79}-\x{8A7C}\x{8A7E}-\x{8A87}\x{8A89}-\x{8A9E}\x{8AA0}-\x{8AAC}\x{8AAE}' + . '\x{8AB0}-\x{8AB6}\x{8AB8}-\x{8ACF}\x{8AD1}-\x{8AEB}\x{8AED}-\x{8B0B}' + . '\x{8B0D}-\x{8B28}\x{8B2A}-\x{8B31}\x{8B33}-\x{8B37}\x{8B39}-\x{8B3E}' + . '\x{8B40}-\x{8B60}\x{8B63}-\x{8B68}\x{8B6A}-\x{8B71}\x{8B73}\x{8B74}' + . '\x{8B76}-\x{8B7B}\x{8B7D}-\x{8B80}\x{8B82}-\x{8B86}\x{8B88}-\x{8B8C}\x{8B8E}' + . '\x{8B90}-\x{8B9A}\x{8B9C}-\x{8C37}\x{8C39}-\x{8C3F}\x{8C41}-\x{8C43}' + . '\x{8C45}-\x{8C50}\x{8C54}-\x{8C57}\x{8C59}-\x{8C73}\x{8C75}-\x{8C7B}\x{8C7D}' + . '\x{8C7E}\x{8C80}-\x{8C82}\x{8C84}-\x{8C86}\x{8C88}-\x{8C8A}\x{8C8C}\x{8C8D}' + . '\x{8C8F}-\x{8C9A}\x{8C9C}-\x{8CA5}\x{8CA7}-\x{8CCA}\x{8CCC}\x{8CCE}-\x{8CD5}' + . '\x{8CD7}\x{8CD9}-\x{8CE8}\x{8CEA}-\x{8CF6}\x{8CF8}-\x{8D00}\x{8D02}-\x{8D10}' + . '\x{8D13}-\x{8D7B}\x{8D7D}-\x{8DA5}\x{8DA7}-\x{8DBF}\x{8DC1}-\x{8DE4}' + . '\x{8DE6}-\x{8E00}\x{8E02}-\x{8E0A}\x{8E0C}-\x{8E31}\x{8E33}-\x{8E45}' + . '\x{8E47}-\x{8E4E}\x{8E50}-\x{8E6D}\x{8E6F}-\x{8E74}\x{8E76}\x{8E78}' + . '\x{8E7A}-\x{8E98}\x{8E9A}\x{8E9C}-\x{8EA1}\x{8EA3}-\x{8EB2}\x{8EB4}\x{8EB5}' + . '\x{8EB8}-\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}-\x{8ED8}\x{8EDA}-\x{8EE1}' + . '\x{8EE4}-\x{8EEF}\x{8EF1}-\x{8F0B}\x{8F0D}\x{8F0E}\x{8F10}-\x{8F18}' + . '\x{8F1A}-\x{8F2C}\x{8F2E}-\x{8F39}\x{8F3B}-\x{8F40}\x{8F42}-\x{8F5B}' + . '\x{8F5D}-\x{8F9C}\x{8F9E}-\x{8FA3}\x{8FA5}-\x{8FB2}\x{8FB4}-\x{8FB9}' + . '\x{8FBB}-\x{8FC2}\x{8FC4}-\x{8FC9}\x{8FCB}-\x{8FE6}\x{8FE8}-\x{900D}' + . '\x{900F}-\x{9029}\x{902B}\x{902D}-\x{9036}\x{9038}\x{903A}-\x{903F}' + . '\x{9041}-\x{9045}\x{9047}-\x{90AA}\x{90AC}-\x{90CB}\x{90CE}-\x{90D1}' + . '\x{90D3}-\x{90F5}\x{90F7}-\x{9109}\x{910B}-\x{913B}\x{913E}-\x{9158}' + . '\x{915A}-\x{917A}\x{917C}-\x{9194}\x{9196}\x{9199}-\x{91A3}\x{91A5}-\x{91A8}' + . '\x{91AA}-\x{91B7}\x{91B9}-\x{91BE}\x{91C0}-\x{91C3}\x{91C5}-\x{91C7}' + . '\x{91C9}-\x{91D5}\x{91D7}-\x{91DF}\x{91E2}-\x{91EE}\x{91F0}-\x{91F5}' + . '\x{91F7}-\x{91FB}\x{91FD}-\x{9212}\x{9214}-\x{921E}\x{9220}\x{9221}' + . '\x{9223}-\x{922B}\x{922D}-\x{9242}\x{9245}-\x{9268}\x{926B}-\x{9270}' + . '\x{9272}-\x{9280}\x{9282}\x{9283}\x{9285}-\x{929D}\x{929F}-\x{92BC}' + . '\x{92BE}-\x{92D3}\x{92D5}-\x{92DA}\x{92DC}-\x{92E1}\x{92E3}-\x{931B}' + . '\x{931D}-\x{932B}\x{932D}-\x{932F}\x{9332}-\x{9361}\x{9363}-\x{9367}\x{9369}' + . '\x{936A}\x{936C}-\x{936E}\x{9370}-\x{9372}\x{9374}-\x{9377}\x{9379}-\x{937E}' + . '\x{9380}\x{9382}-\x{938A}\x{938C}-\x{939B}\x{939D}-\x{939F}\x{93A1}-\x{93AA}' + . '\x{93AC}-\x{93BA}\x{93BC}-\x{93DF}\x{93E1}-\x{93E4}\x{93E6}-\x{93F2}' + . '\x{93F4}-\x{9401}\x{9403}-\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}' + . '\x{9422}\x{9423}\x{9425}-\x{9442}\x{9444}-\x{944D}\x{944F}-\x{9459}' + . '\x{945B}-\x{946B}\x{946D}-\x{947A}\x{947C}-\x{9577}\x{957A}-\x{957D}' + . '\x{957F}-\x{9584}\x{9586}-\x{9596}\x{9598}-\x{959F}\x{95A1}-\x{95B2}' + . '\x{95B5}-\x{95B7}\x{95B9}-\x{95C0}\x{95C2}-\x{95D8}\x{95DA}-\x{95DC}' + . '\x{95DE}-\x{9624}\x{9627}\x{9628}\x{962A}-\x{963D}\x{963F}-\x{9655}' + . '\x{9658}-\x{9664}\x{9666}-\x{9678}\x{967C}-\x{967E}\x{9680}\x{9683}-\x{968B}' + . '\x{968D}-\x{9695}\x{9697}-\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}-\x{96AA}' + . '\x{96AC}-\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}-\x{96E3}\x{96E5}' + . '\x{96E8}-\x{96FB}\x{96FD}-\x{9713}\x{9715}\x{9716}\x{9718}\x{9719}' + . '\x{971C}-\x{9732}\x{9735}\x{9736}\x{9738}-\x{973F}\x{9742}-\x{974C}' + . '\x{974E}-\x{9756}\x{9758}-\x{9762}\x{9765}-\x{9770}\x{9772}-\x{9774}' + . '\x{9776}-\x{9786}\x{9788}\x{978A}-\x{979A}\x{979C}-\x{97A8}\x{97AA}-\x{97AF}' + . '\x{97B2}-\x{97B4}\x{97B6}-\x{97BD}\x{97BF}\x{97C1}-\x{97D1}\x{97D3}-\x{97FB}' + . '\x{97FD}-\x{981E}\x{9820}-\x{9824}\x{9826}-\x{9829}\x{982B}\x{982D}-\x{9832}' + . '\x{9834}-\x{9839}\x{983B}-\x{983D}\x{983F}-\x{9841}\x{9843}-\x{9846}' + . '\x{9848}-\x{984A}\x{984C}-\x{9855}\x{9857}-\x{9865}\x{9867}\x{9869}-\x{98B6}' + . '\x{98B8}-\x{98C6}\x{98C8}\x{98C9}\x{98CB}-\x{98E0}\x{98E2}\x{98E3}' + . '\x{98E5}-\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}-\x{98F7}\x{98F9}\x{98FA}' + . '\x{98FC}-\x{9918}\x{991A}-\x{993A}\x{993C}-\x{9943}\x{9945}-\x{994C}' + . '\x{994E}-\x{9959}\x{995B}\x{995C}\x{995E}-\x{99BE}\x{99C0}-\x{99C4}' + . '\x{99C6}-\x{99DF}\x{99E1}-\x{99E5}\x{99E7}-\x{99EA}\x{99EC}-\x{99F4}' + . '\x{99F6}-\x{9A0F}\x{9A11}\x{9A14}-\x{9A16}\x{9A19}-\x{9A27}\x{9A29}-\x{9A3A}' + . '\x{9A3C}-\x{9A50}\x{9A52}-\x{9A57}\x{9A59}-\x{9A5C}\x{9A5E}-\x{9A62}' + . '\x{9A64}-\x{9AA8}\x{9AAA}-\x{9ABC}\x{9ABE}-\x{9AC7}\x{9AC9}-\x{9AD6}' + . '\x{9AD8}-\x{9ADF}\x{9AE1}-\x{9AE3}\x{9AE5}-\x{9AE7}\x{9AEA}-\x{9AEF}' + . '\x{9AF1}-\x{9AFF}\x{9B01}\x{9B03}-\x{9B08}\x{9B0A}-\x{9B13}\x{9B15}-\x{9B1A}' + . '\x{9B1C}-\x{9B33}\x{9B35}-\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}-\x{9B4F}' + . '\x{9B51}-\x{9B56}\x{9B58}-\x{9B61}\x{9B63}-\x{9B71}\x{9B73}-\x{9B88}\x{9B8A}' + . '\x{9B8B}\x{9B8D}-\x{9B98}\x{9B9A}-\x{9BC1}\x{9BC3}-\x{9BF5}\x{9BF7}-\x{9BFF}' + . '\x{9C02}\x{9C05}-\x{9C2D}\x{9C2F}-\x{9C41}\x{9C43}-\x{9C4E}\x{9C50}' + . '\x{9C52}-\x{9C60}\x{9C62}\x{9C63}\x{9C65}-\x{9C75}\x{9C77}-\x{9C7A}' + . '\x{9C7C}-\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}-\x{9D26}\x{9D28}\x{9D29}\x{9D2B}' + . '\x{9D2D}-\x{9D34}\x{9D36}-\x{9D3B}\x{9D3D}-\x{9D43}\x{9D45}-\x{9D6C}' + . '\x{9D6E}-\x{9D8E}\x{9D90}-\x{9D94}\x{9D96}-\x{9DAD}\x{9DAF}-\x{9DBC}\x{9DBE}' + . '\x{9DBF}\x{9DC1}-\x{9DC5}\x{9DC7}-\x{9DE9}\x{9DEB}-\x{9DFB}\x{9DFD}-\x{9E0D}' + . '\x{9E0F}-\x{9E15}\x{9E17}-\x{9E1B}\x{9E1D}-\x{9E77}\x{9E79}\x{9E7A}' + . '\x{9E7C}-\x{9E8E}\x{9E91}-\x{9E94}\x{9E96}\x{9E97}\x{9E99}-\x{9E9D}' + . '\x{9E9F}-\x{9EA1}\x{9EA3}-\x{9EAA}\x{9EAD}-\x{9EB0}\x{9EB2}-\x{9EB8}' + . '\x{9EBB}-\x{9EEB}\x{9EED}-\x{9EF0}\x{9EF2}-\x{9F02}\x{9F04}-\x{9F10}\x{9F12}' + . '\x{9F13}\x{9F15}-\x{9F20}\x{9F22}-\x{9F25}\x{9F27}-\x{9F44}\x{9F46}-\x{9F52}' + . '\x{9F54}-\x{9F61}\x{9F63}-\x{9F6C}\x{9F6E}-\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu', ]; diff --git a/src/Hostname/Com.php b/src/Hostname/Com.php index 07ed3315..72bb7baf 100644 --- a/src/Hostname/Com.php +++ b/src/Hostname/Com.php @@ -17,95 +17,95 @@ 2 => '/^[\x{002d}0-9\x{0370}-\x{03ff}]{1,63}$/iu', 3 => '/^[\x{002d}0-9a-z\x{ac00}-\x{d7a3}]{1,17}$/iu', // @codingStandardsIgnoreStart - 4 => '/^[\x{002d}0-9a-z·à-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž]{1,63}$/iu', + 4 => '/^[\x{002d}0-9a-z·à-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž]{1,63}$/iu', // @codingStandardsIgnoreEnd 5 => '/^[\x{002d}0-9A-Za-z\x{3400}-\x{3401}\x{3404}-\x{3406}\x{340C}\x{3416}\x{341C}' -. '\x{3421}\x{3424}\x{3428}-\x{3429}\x{342B}-\x{342E}\x{3430}-\x{3434}\x{3436}' -. '\x{3438}-\x{343C}\x{343E}\x{3441}-\x{3445}\x{3447}\x{3449}-\x{3451}\x{3453}' -. '\x{3457}-\x{345F}\x{3463}-\x{3467}\x{346E}-\x{3471}\x{3473}-\x{3477}\x{3479}-\x{348E}\x{3491}-\x{3497}' -. '\x{3499}-\x{34A1}\x{34A4}-\x{34AD}\x{34AF}-\x{34B0}\x{34B2}-\x{34BF}\x{34C2}-\x{34C5}\x{34C7}-\x{34CC}' -. '\x{34CE}-\x{34D1}\x{34D3}-\x{34D8}\x{34DA}-\x{34E4}\x{34E7}-\x{34E9}\x{34EC}-\x{34EF}\x{34F1}-\x{34FE}' -. '\x{3500}-\x{3507}\x{350A}-\x{3513}\x{3515}\x{3517}-\x{351A}\x{351C}-\x{351E}\x{3520}-\x{352A}' -. '\x{352C}-\x{3552}\x{3554}-\x{355C}\x{355E}-\x{3567}\x{3569}-\x{3573}\x{3575}-\x{357C}\x{3580}-\x{3588}' -. '\x{358F}-\x{3598}\x{359E}-\x{35AB}\x{35B4}-\x{35CD}\x{35D0}\x{35D3}-\x{35DC}\x{35E2}-\x{35ED}' -. '\x{35F0}-\x{35F6}\x{35FB}-\x{3602}\x{3605}-\x{360E}\x{3610}-\x{3611}\x{3613}-\x{3616}\x{3619}-\x{362D}' -. '\x{362F}-\x{3634}\x{3636}-\x{363B}\x{363F}-\x{3645}\x{3647}-\x{364B}\x{364D}-\x{3653}\x{3655}' -. '\x{3659}-\x{365E}\x{3660}-\x{3665}\x{3667}-\x{367C}\x{367E}\x{3680}-\x{3685}\x{3687}' -. '\x{3689}-\x{3690}\x{3692}-\x{3698}\x{369A}\x{369C}-\x{36AE}\x{36B0}-\x{36BF}\x{36C1}-\x{36C5}' -. '\x{36C9}-\x{36CA}\x{36CD}-\x{36DE}\x{36E1}-\x{36E2}\x{36E5}-\x{36FE}\x{3701}-\x{3713}\x{3715}-\x{371E}' -. '\x{3720}-\x{372C}\x{372E}-\x{3745}\x{3747}-\x{3748}\x{374A}\x{374C}-\x{3759}\x{375B}-\x{3760}' -. '\x{3762}-\x{3767}\x{3769}-\x{3772}\x{3774}-\x{378C}\x{378F}-\x{379C}\x{379F}\x{37A1}-\x{37AD}' -. '\x{37AF}-\x{37B7}\x{37B9}-\x{37C1}\x{37C3}-\x{37C5}\x{37C7}-\x{37D4}\x{37D6}-\x{37E0}\x{37E2}' -. '\x{37E5}-\x{37ED}\x{37EF}-\x{37F6}\x{37F8}-\x{3802}\x{3804}-\x{381D}\x{3820}-\x{3822}\x{3825}-\x{382A}' -. '\x{382D}-\x{382F}\x{3831}-\x{3832}\x{3834}-\x{384C}\x{384E}-\x{3860}\x{3862}-\x{3863}\x{3865}-\x{386B}' -. '\x{386D}-\x{3886}\x{3888}-\x{38A1}\x{38A3}\x{38A5}-\x{38AA}\x{38AC}\x{38AE}-\x{38B0}' -. '\x{38B2}-\x{38B6}\x{38B8}\x{38BA}-\x{38BE}\x{38C0}-\x{38C9}\x{38CB}-\x{38D4}\x{38D8}-\x{38E0}' -. '\x{38E2}-\x{38E6}\x{38EB}-\x{38ED}\x{38EF}-\x{38F2}\x{38F5}-\x{38F7}\x{38FA}-\x{38FF}\x{3901}-\x{392A}' -. '\x{392C}\x{392E}-\x{393B}\x{393E}-\x{3956}\x{395A}-\x{3969}\x{396B}-\x{397A}\x{397C}-\x{3987}' -. '\x{3989}-\x{3998}\x{399A}-\x{39B0}\x{39B2}\x{39B4}-\x{39D0}\x{39D2}-\x{39DA}\x{39DE}-\x{39DF}' -. '\x{39E1}-\x{39EF}\x{39F1}-\x{3A17}\x{3A19}-\x{3A2A}\x{3A2D}-\x{3A40}\x{3A43}-\x{3A4E}\x{3A50}' -. '\x{3A52}-\x{3A5E}\x{3A60}-\x{3A6D}\x{3A6F}-\x{3A77}\x{3A79}-\x{3A82}\x{3A84}-\x{3A85}\x{3A87}-\x{3A89}' -. '\x{3A8B}-\x{3A8F}\x{3A91}-\x{3A93}\x{3A95}-\x{3A96}\x{3A9A}\x{3A9C}-\x{3AA6}\x{3AA8}-\x{3AA9}' -. '\x{3AAB}-\x{3AB1}\x{3AB4}-\x{3ABC}\x{3ABE}-\x{3AC5}\x{3ACA}-\x{3ACB}\x{3ACD}-\x{3AD5}\x{3AD7}-\x{3AE1}' -. '\x{3AE4}-\x{3AE7}\x{3AE9}-\x{3AEC}\x{3AEE}-\x{3AFD}\x{3B01}-\x{3B10}\x{3B12}-\x{3B15}\x{3B17}-\x{3B1E}' -. '\x{3B20}-\x{3B23}\x{3B25}-\x{3B27}\x{3B29}-\x{3B36}\x{3B38}-\x{3B39}\x{3B3B}-\x{3B3C}\x{3B3F}' -. '\x{3B41}-\x{3B44}\x{3B47}-\x{3B4C}\x{3B4E}\x{3B51}-\x{3B55}\x{3B58}-\x{3B62}\x{3B68}-\x{3B72}' -. '\x{3B78}-\x{3B88}\x{3B8B}-\x{3B9F}\x{3BA1}\x{3BA3}-\x{3BBA}\x{3BBC}\x{3BBF}-\x{3BD0}' -. '\x{3BD3}-\x{3BE6}\x{3BEA}-\x{3BFB}\x{3BFE}-\x{3C12}\x{3C14}-\x{3C1B}\x{3C1D}-\x{3C37}\x{3C39}-\x{3C4F}' -. '\x{3C52}\x{3C54}-\x{3C5C}\x{3C5E}-\x{3C68}\x{3C6A}-\x{3C76}\x{3C78}-\x{3C8F}\x{3C91}-\x{3CA8}' -. '\x{3CAA}-\x{3CAD}\x{3CAF}-\x{3CBE}\x{3CC0}-\x{3CC8}\x{3CCA}-\x{3CD3}\x{3CD6}-\x{3CE0}\x{3CE4}-\x{3CEE}' -. '\x{3CF3}-\x{3D0A}\x{3D0E}-\x{3D1E}\x{3D20}-\x{3D21}\x{3D25}-\x{3D38}\x{3D3B}-\x{3D46}\x{3D4A}-\x{3D59}' -. '\x{3D5D}-\x{3D7B}\x{3D7D}-\x{3D81}\x{3D84}-\x{3D88}\x{3D8C}-\x{3D8F}\x{3D91}-\x{3D98}\x{3D9A}-\x{3D9C}' -. '\x{3D9E}-\x{3DA1}\x{3DA3}-\x{3DB0}\x{3DB2}-\x{3DB5}\x{3DB9}-\x{3DBC}\x{3DBE}-\x{3DCB}\x{3DCD}-\x{3DDB}' -. '\x{3DDF}-\x{3DE8}\x{3DEB}-\x{3DF0}\x{3DF3}-\x{3DF9}\x{3DFB}-\x{3DFC}\x{3DFE}-\x{3E05}\x{3E08}-\x{3E33}' -. '\x{3E35}-\x{3E3E}\x{3E40}-\x{3E47}\x{3E49}-\x{3E67}\x{3E6B}-\x{3E6F}\x{3E71}-\x{3E85}\x{3E87}-\x{3E8C}' -. '\x{3E8E}-\x{3E98}\x{3E9A}-\x{3EA1}\x{3EA3}-\x{3EAE}\x{3EB0}-\x{3EB5}\x{3EB7}-\x{3EBA}\x{3EBD}' -. '\x{3EBF}-\x{3EC4}\x{3EC7}-\x{3ECE}\x{3ED1}-\x{3ED7}\x{3ED9}-\x{3EDA}\x{3EDD}-\x{3EE3}\x{3EE7}-\x{3EE8}' -. '\x{3EEB}-\x{3EF2}\x{3EF5}-\x{3EFF}\x{3F01}-\x{3F02}\x{3F04}-\x{3F07}\x{3F09}-\x{3F44}\x{3F46}-\x{3F4E}' -. '\x{3F50}-\x{3F53}\x{3F55}-\x{3F72}\x{3F74}-\x{3F75}\x{3F77}-\x{3F7B}\x{3F7D}-\x{3FB0}\x{3FB6}-\x{3FBF}' -. '\x{3FC1}-\x{3FCF}\x{3FD1}-\x{3FD3}\x{3FD5}-\x{3FDF}\x{3FE1}-\x{400B}\x{400D}-\x{401C}\x{401E}-\x{4024}' -. '\x{4027}-\x{403F}\x{4041}-\x{4060}\x{4062}-\x{4069}\x{406B}-\x{408A}\x{408C}-\x{40A7}\x{40A9}-\x{40B4}' -. '\x{40B6}-\x{40C2}\x{40C7}-\x{40CF}\x{40D1}-\x{40DE}\x{40E0}-\x{40E7}\x{40E9}-\x{40EE}\x{40F0}-\x{40FB}' -. '\x{40FD}-\x{4109}\x{410B}-\x{4115}\x{4118}-\x{411D}\x{411F}-\x{4122}\x{4124}-\x{4133}\x{4136}-\x{4138}' -. '\x{413A}-\x{4148}\x{414A}-\x{4169}\x{416C}-\x{4185}\x{4188}-\x{418B}\x{418D}-\x{41AD}\x{41AF}-\x{41B3}' -. '\x{41B5}-\x{41C3}\x{41C5}-\x{41C9}\x{41CB}-\x{41F2}\x{41F5}-\x{41FE}\x{4200}-\x{4227}\x{422A}-\x{4246}' -. '\x{4248}-\x{4263}\x{4265}-\x{428B}\x{428D}-\x{42A1}\x{42A3}-\x{42C4}\x{42C8}-\x{42DC}\x{42DE}-\x{430A}' -. '\x{430C}-\x{4335}\x{4337}\x{4342}-\x{435F}\x{4361}-\x{439A}\x{439C}-\x{439D}\x{439F}-\x{43A4}' -. '\x{43A6}-\x{43EC}\x{43EF}-\x{4405}\x{4407}-\x{4429}\x{442B}-\x{4455}\x{4457}-\x{4468}\x{446A}-\x{446D}' -. '\x{446F}-\x{4476}\x{4479}-\x{447D}\x{447F}-\x{4486}\x{4488}-\x{4490}\x{4492}-\x{4498}\x{449A}-\x{44AD}' -. '\x{44B0}-\x{44BD}\x{44C1}-\x{44D3}\x{44D6}-\x{44E7}\x{44EA}\x{44EC}-\x{44FA}\x{44FC}-\x{4541}' -. '\x{4543}-\x{454F}\x{4551}-\x{4562}\x{4564}-\x{4575}\x{4577}-\x{45AB}\x{45AD}-\x{45BD}\x{45BF}-\x{45D5}' -. '\x{45D7}-\x{45EC}\x{45EE}-\x{45F2}\x{45F4}-\x{45FA}\x{45FC}-\x{461A}\x{461C}-\x{461D}\x{461F}-\x{4631}' -. '\x{4633}-\x{4649}\x{464C}\x{464E}-\x{4652}\x{4654}-\x{466A}\x{466C}-\x{4675}\x{4677}-\x{467A}' -. '\x{467C}-\x{4694}\x{4696}-\x{46A3}\x{46A5}-\x{46AB}\x{46AD}-\x{46D2}\x{46D4}-\x{4723}\x{4729}-\x{4732}' -. '\x{4734}-\x{4758}\x{475A}\x{475C}-\x{478B}\x{478D}\x{4791}-\x{47B1}\x{47B3}-\x{47F1}' -. '\x{47F3}-\x{480B}\x{480D}-\x{4815}\x{4817}-\x{4839}\x{483B}-\x{4870}\x{4872}-\x{487A}\x{487C}-\x{487F}' -. '\x{4883}-\x{488E}\x{4890}-\x{4896}\x{4899}-\x{48A2}\x{48A4}-\x{48B9}\x{48BB}-\x{48C8}\x{48CA}-\x{48D1}' -. '\x{48D3}-\x{48E5}\x{48E7}-\x{48F2}\x{48F4}-\x{48FF}\x{4901}-\x{4922}\x{4924}-\x{4928}\x{492A}-\x{4931}' -. '\x{4933}-\x{495B}\x{495D}-\x{4978}\x{497A}\x{497D}\x{4982}-\x{4983}\x{4985}-\x{49A8}' -. '\x{49AA}-\x{49AF}\x{49B1}-\x{49B7}\x{49B9}-\x{49BD}\x{49C1}-\x{49C7}\x{49C9}-\x{49CE}\x{49D0}-\x{49E8}' -. '\x{49EA}\x{49EC}\x{49EE}-\x{4A19}\x{4A1B}-\x{4A43}\x{4A45}-\x{4A4D}\x{4A4F}-\x{4A9E}' -. '\x{4AA0}-\x{4AA9}\x{4AAB}-\x{4B4E}\x{4B50}-\x{4B5B}\x{4B5D}-\x{4B69}\x{4B6B}-\x{4BC2}\x{4BC6}-\x{4BE8}' -. '\x{4BEA}-\x{4BFA}\x{4BFC}-\x{4C06}\x{4C08}-\x{4C2D}\x{4C2F}-\x{4C32}\x{4C34}-\x{4C35}\x{4C37}-\x{4C69}' -. '\x{4C6B}-\x{4C73}\x{4C75}-\x{4C86}\x{4C88}-\x{4C97}\x{4C99}-\x{4C9C}\x{4C9F}-\x{4CA3}\x{4CA5}-\x{4CB5}' -. '\x{4CB7}-\x{4CF8}\x{4CFA}-\x{4D27}\x{4D29}-\x{4DAC}\x{4DAE}-\x{4DB1}\x{4DB3}-\x{4DB5}\x{4E00}-\x{4E54}' -. '\x{4E56}-\x{4E89}\x{4E8B}-\x{4EEC}\x{4EEE}-\x{4FAC}\x{4FAE}-\x{503C}\x{503E}-\x{51E5}\x{51E7}-\x{5270}' -. '\x{5272}-\x{56A1}\x{56A3}-\x{5840}\x{5842}-\x{58B5}\x{58B7}-\x{58CB}\x{58CD}-\x{5BC8}\x{5BCA}-\x{5C01}' -. '\x{5C03}-\x{5C25}\x{5C27}-\x{5D5B}\x{5D5D}-\x{5F08}\x{5F0A}-\x{61F3}\x{61F5}-\x{63BA}\x{63BC}-\x{6441}' -. '\x{6443}-\x{657C}\x{657E}-\x{663E}\x{6640}-\x{66FC}\x{66FE}-\x{6728}\x{672A}-\x{6766}\x{6768}-\x{67A8}' -. '\x{67AA}-\x{685B}\x{685D}-\x{685E}\x{6860}-\x{68B9}\x{68BB}-\x{6AC8}\x{6ACA}-\x{6BB0}\x{6BB2}-\x{6C16}' -. '\x{6C18}-\x{6D9B}\x{6D9D}-\x{6E12}\x{6E14}-\x{6E8B}\x{6E8D}-\x{704D}\x{704F}-\x{7113}\x{7115}-\x{713B}' -. '\x{713D}-\x{7154}\x{7156}-\x{729F}\x{72A1}-\x{731E}\x{7320}-\x{7362}\x{7364}-\x{7533}\x{7535}-\x{7551}' -. '\x{7553}-\x{7572}\x{7574}-\x{75E8}\x{75EA}-\x{7679}\x{767B}-\x{783E}\x{7840}-\x{7A62}\x{7A64}-\x{7AC2}' -. '\x{7AC4}-\x{7B06}\x{7B08}-\x{7B79}\x{7B7B}-\x{7BCE}\x{7BD0}-\x{7D99}\x{7D9B}-\x{7E49}\x{7E4C}-\x{8132}' -. '\x{8134}\x{8136}-\x{81D2}\x{81D4}-\x{8216}\x{8218}-\x{822D}\x{822F}-\x{83B4}\x{83B6}-\x{841F}' -. '\x{8421}-\x{86CC}\x{86CE}-\x{874A}\x{874C}-\x{877E}\x{8780}-\x{8A32}\x{8A34}-\x{8B71}\x{8B73}-\x{8B8E}' -. '\x{8B90}-\x{8DE4}\x{8DE6}-\x{8E9A}\x{8E9C}-\x{8EE1}\x{8EE4}-\x{8F0B}\x{8F0D}-\x{8FB9}\x{8FBB}-\x{9038}' -. '\x{903A}-\x{9196}\x{9198}-\x{91A3}\x{91A5}-\x{91B7}\x{91B9}-\x{91C7}\x{91C9}-\x{91E0}\x{91E2}-\x{91FB}' -. '\x{91FD}-\x{922B}\x{922D}-\x{9270}\x{9272}-\x{9420}\x{9422}-\x{9664}\x{9666}-\x{9679}\x{967B}-\x{9770}' -. '\x{9772}-\x{982B}\x{982D}-\x{98ED}\x{98EF}-\x{99C4}\x{99C6}-\x{9A11}\x{9A14}-\x{9A27}\x{9A29}-\x{9D0D}' -. '\x{9D0F}-\x{9D2B}\x{9D2D}-\x{9D8E}\x{9D90}-\x{9DC5}\x{9DC7}-\x{9E77}\x{9E79}-\x{9EB8}\x{9EBB}-\x{9F20}' -. '\x{9F22}-\x{9F61}\x{9F63}-\x{9FA5}\x{FA28}]{1,20}$/iu', + . '\x{3421}\x{3424}\x{3428}-\x{3429}\x{342B}-\x{342E}\x{3430}-\x{3434}\x{3436}' + . '\x{3438}-\x{343C}\x{343E}\x{3441}-\x{3445}\x{3447}\x{3449}-\x{3451}\x{3453}' + . '\x{3457}-\x{345F}\x{3463}-\x{3467}\x{346E}-\x{3471}\x{3473}-\x{3477}\x{3479}-\x{348E}\x{3491}-\x{3497}' + . '\x{3499}-\x{34A1}\x{34A4}-\x{34AD}\x{34AF}-\x{34B0}\x{34B2}-\x{34BF}\x{34C2}-\x{34C5}\x{34C7}-\x{34CC}' + . '\x{34CE}-\x{34D1}\x{34D3}-\x{34D8}\x{34DA}-\x{34E4}\x{34E7}-\x{34E9}\x{34EC}-\x{34EF}\x{34F1}-\x{34FE}' + . '\x{3500}-\x{3507}\x{350A}-\x{3513}\x{3515}\x{3517}-\x{351A}\x{351C}-\x{351E}\x{3520}-\x{352A}' + . '\x{352C}-\x{3552}\x{3554}-\x{355C}\x{355E}-\x{3567}\x{3569}-\x{3573}\x{3575}-\x{357C}\x{3580}-\x{3588}' + . '\x{358F}-\x{3598}\x{359E}-\x{35AB}\x{35B4}-\x{35CD}\x{35D0}\x{35D3}-\x{35DC}\x{35E2}-\x{35ED}' + . '\x{35F0}-\x{35F6}\x{35FB}-\x{3602}\x{3605}-\x{360E}\x{3610}-\x{3611}\x{3613}-\x{3616}\x{3619}-\x{362D}' + . '\x{362F}-\x{3634}\x{3636}-\x{363B}\x{363F}-\x{3645}\x{3647}-\x{364B}\x{364D}-\x{3653}\x{3655}' + . '\x{3659}-\x{365E}\x{3660}-\x{3665}\x{3667}-\x{367C}\x{367E}\x{3680}-\x{3685}\x{3687}' + . '\x{3689}-\x{3690}\x{3692}-\x{3698}\x{369A}\x{369C}-\x{36AE}\x{36B0}-\x{36BF}\x{36C1}-\x{36C5}' + . '\x{36C9}-\x{36CA}\x{36CD}-\x{36DE}\x{36E1}-\x{36E2}\x{36E5}-\x{36FE}\x{3701}-\x{3713}\x{3715}-\x{371E}' + . '\x{3720}-\x{372C}\x{372E}-\x{3745}\x{3747}-\x{3748}\x{374A}\x{374C}-\x{3759}\x{375B}-\x{3760}' + . '\x{3762}-\x{3767}\x{3769}-\x{3772}\x{3774}-\x{378C}\x{378F}-\x{379C}\x{379F}\x{37A1}-\x{37AD}' + . '\x{37AF}-\x{37B7}\x{37B9}-\x{37C1}\x{37C3}-\x{37C5}\x{37C7}-\x{37D4}\x{37D6}-\x{37E0}\x{37E2}' + . '\x{37E5}-\x{37ED}\x{37EF}-\x{37F6}\x{37F8}-\x{3802}\x{3804}-\x{381D}\x{3820}-\x{3822}\x{3825}-\x{382A}' + . '\x{382D}-\x{382F}\x{3831}-\x{3832}\x{3834}-\x{384C}\x{384E}-\x{3860}\x{3862}-\x{3863}\x{3865}-\x{386B}' + . '\x{386D}-\x{3886}\x{3888}-\x{38A1}\x{38A3}\x{38A5}-\x{38AA}\x{38AC}\x{38AE}-\x{38B0}' + . '\x{38B2}-\x{38B6}\x{38B8}\x{38BA}-\x{38BE}\x{38C0}-\x{38C9}\x{38CB}-\x{38D4}\x{38D8}-\x{38E0}' + . '\x{38E2}-\x{38E6}\x{38EB}-\x{38ED}\x{38EF}-\x{38F2}\x{38F5}-\x{38F7}\x{38FA}-\x{38FF}\x{3901}-\x{392A}' + . '\x{392C}\x{392E}-\x{393B}\x{393E}-\x{3956}\x{395A}-\x{3969}\x{396B}-\x{397A}\x{397C}-\x{3987}' + . '\x{3989}-\x{3998}\x{399A}-\x{39B0}\x{39B2}\x{39B4}-\x{39D0}\x{39D2}-\x{39DA}\x{39DE}-\x{39DF}' + . '\x{39E1}-\x{39EF}\x{39F1}-\x{3A17}\x{3A19}-\x{3A2A}\x{3A2D}-\x{3A40}\x{3A43}-\x{3A4E}\x{3A50}' + . '\x{3A52}-\x{3A5E}\x{3A60}-\x{3A6D}\x{3A6F}-\x{3A77}\x{3A79}-\x{3A82}\x{3A84}-\x{3A85}\x{3A87}-\x{3A89}' + . '\x{3A8B}-\x{3A8F}\x{3A91}-\x{3A93}\x{3A95}-\x{3A96}\x{3A9A}\x{3A9C}-\x{3AA6}\x{3AA8}-\x{3AA9}' + . '\x{3AAB}-\x{3AB1}\x{3AB4}-\x{3ABC}\x{3ABE}-\x{3AC5}\x{3ACA}-\x{3ACB}\x{3ACD}-\x{3AD5}\x{3AD7}-\x{3AE1}' + . '\x{3AE4}-\x{3AE7}\x{3AE9}-\x{3AEC}\x{3AEE}-\x{3AFD}\x{3B01}-\x{3B10}\x{3B12}-\x{3B15}\x{3B17}-\x{3B1E}' + . '\x{3B20}-\x{3B23}\x{3B25}-\x{3B27}\x{3B29}-\x{3B36}\x{3B38}-\x{3B39}\x{3B3B}-\x{3B3C}\x{3B3F}' + . '\x{3B41}-\x{3B44}\x{3B47}-\x{3B4C}\x{3B4E}\x{3B51}-\x{3B55}\x{3B58}-\x{3B62}\x{3B68}-\x{3B72}' + . '\x{3B78}-\x{3B88}\x{3B8B}-\x{3B9F}\x{3BA1}\x{3BA3}-\x{3BBA}\x{3BBC}\x{3BBF}-\x{3BD0}' + . '\x{3BD3}-\x{3BE6}\x{3BEA}-\x{3BFB}\x{3BFE}-\x{3C12}\x{3C14}-\x{3C1B}\x{3C1D}-\x{3C37}\x{3C39}-\x{3C4F}' + . '\x{3C52}\x{3C54}-\x{3C5C}\x{3C5E}-\x{3C68}\x{3C6A}-\x{3C76}\x{3C78}-\x{3C8F}\x{3C91}-\x{3CA8}' + . '\x{3CAA}-\x{3CAD}\x{3CAF}-\x{3CBE}\x{3CC0}-\x{3CC8}\x{3CCA}-\x{3CD3}\x{3CD6}-\x{3CE0}\x{3CE4}-\x{3CEE}' + . '\x{3CF3}-\x{3D0A}\x{3D0E}-\x{3D1E}\x{3D20}-\x{3D21}\x{3D25}-\x{3D38}\x{3D3B}-\x{3D46}\x{3D4A}-\x{3D59}' + . '\x{3D5D}-\x{3D7B}\x{3D7D}-\x{3D81}\x{3D84}-\x{3D88}\x{3D8C}-\x{3D8F}\x{3D91}-\x{3D98}\x{3D9A}-\x{3D9C}' + . '\x{3D9E}-\x{3DA1}\x{3DA3}-\x{3DB0}\x{3DB2}-\x{3DB5}\x{3DB9}-\x{3DBC}\x{3DBE}-\x{3DCB}\x{3DCD}-\x{3DDB}' + . '\x{3DDF}-\x{3DE8}\x{3DEB}-\x{3DF0}\x{3DF3}-\x{3DF9}\x{3DFB}-\x{3DFC}\x{3DFE}-\x{3E05}\x{3E08}-\x{3E33}' + . '\x{3E35}-\x{3E3E}\x{3E40}-\x{3E47}\x{3E49}-\x{3E67}\x{3E6B}-\x{3E6F}\x{3E71}-\x{3E85}\x{3E87}-\x{3E8C}' + . '\x{3E8E}-\x{3E98}\x{3E9A}-\x{3EA1}\x{3EA3}-\x{3EAE}\x{3EB0}-\x{3EB5}\x{3EB7}-\x{3EBA}\x{3EBD}' + . '\x{3EBF}-\x{3EC4}\x{3EC7}-\x{3ECE}\x{3ED1}-\x{3ED7}\x{3ED9}-\x{3EDA}\x{3EDD}-\x{3EE3}\x{3EE7}-\x{3EE8}' + . '\x{3EEB}-\x{3EF2}\x{3EF5}-\x{3EFF}\x{3F01}-\x{3F02}\x{3F04}-\x{3F07}\x{3F09}-\x{3F44}\x{3F46}-\x{3F4E}' + . '\x{3F50}-\x{3F53}\x{3F55}-\x{3F72}\x{3F74}-\x{3F75}\x{3F77}-\x{3F7B}\x{3F7D}-\x{3FB0}\x{3FB6}-\x{3FBF}' + . '\x{3FC1}-\x{3FCF}\x{3FD1}-\x{3FD3}\x{3FD5}-\x{3FDF}\x{3FE1}-\x{400B}\x{400D}-\x{401C}\x{401E}-\x{4024}' + . '\x{4027}-\x{403F}\x{4041}-\x{4060}\x{4062}-\x{4069}\x{406B}-\x{408A}\x{408C}-\x{40A7}\x{40A9}-\x{40B4}' + . '\x{40B6}-\x{40C2}\x{40C7}-\x{40CF}\x{40D1}-\x{40DE}\x{40E0}-\x{40E7}\x{40E9}-\x{40EE}\x{40F0}-\x{40FB}' + . '\x{40FD}-\x{4109}\x{410B}-\x{4115}\x{4118}-\x{411D}\x{411F}-\x{4122}\x{4124}-\x{4133}\x{4136}-\x{4138}' + . '\x{413A}-\x{4148}\x{414A}-\x{4169}\x{416C}-\x{4185}\x{4188}-\x{418B}\x{418D}-\x{41AD}\x{41AF}-\x{41B3}' + . '\x{41B5}-\x{41C3}\x{41C5}-\x{41C9}\x{41CB}-\x{41F2}\x{41F5}-\x{41FE}\x{4200}-\x{4227}\x{422A}-\x{4246}' + . '\x{4248}-\x{4263}\x{4265}-\x{428B}\x{428D}-\x{42A1}\x{42A3}-\x{42C4}\x{42C8}-\x{42DC}\x{42DE}-\x{430A}' + . '\x{430C}-\x{4335}\x{4337}\x{4342}-\x{435F}\x{4361}-\x{439A}\x{439C}-\x{439D}\x{439F}-\x{43A4}' + . '\x{43A6}-\x{43EC}\x{43EF}-\x{4405}\x{4407}-\x{4429}\x{442B}-\x{4455}\x{4457}-\x{4468}\x{446A}-\x{446D}' + . '\x{446F}-\x{4476}\x{4479}-\x{447D}\x{447F}-\x{4486}\x{4488}-\x{4490}\x{4492}-\x{4498}\x{449A}-\x{44AD}' + . '\x{44B0}-\x{44BD}\x{44C1}-\x{44D3}\x{44D6}-\x{44E7}\x{44EA}\x{44EC}-\x{44FA}\x{44FC}-\x{4541}' + . '\x{4543}-\x{454F}\x{4551}-\x{4562}\x{4564}-\x{4575}\x{4577}-\x{45AB}\x{45AD}-\x{45BD}\x{45BF}-\x{45D5}' + . '\x{45D7}-\x{45EC}\x{45EE}-\x{45F2}\x{45F4}-\x{45FA}\x{45FC}-\x{461A}\x{461C}-\x{461D}\x{461F}-\x{4631}' + . '\x{4633}-\x{4649}\x{464C}\x{464E}-\x{4652}\x{4654}-\x{466A}\x{466C}-\x{4675}\x{4677}-\x{467A}' + . '\x{467C}-\x{4694}\x{4696}-\x{46A3}\x{46A5}-\x{46AB}\x{46AD}-\x{46D2}\x{46D4}-\x{4723}\x{4729}-\x{4732}' + . '\x{4734}-\x{4758}\x{475A}\x{475C}-\x{478B}\x{478D}\x{4791}-\x{47B1}\x{47B3}-\x{47F1}' + . '\x{47F3}-\x{480B}\x{480D}-\x{4815}\x{4817}-\x{4839}\x{483B}-\x{4870}\x{4872}-\x{487A}\x{487C}-\x{487F}' + . '\x{4883}-\x{488E}\x{4890}-\x{4896}\x{4899}-\x{48A2}\x{48A4}-\x{48B9}\x{48BB}-\x{48C8}\x{48CA}-\x{48D1}' + . '\x{48D3}-\x{48E5}\x{48E7}-\x{48F2}\x{48F4}-\x{48FF}\x{4901}-\x{4922}\x{4924}-\x{4928}\x{492A}-\x{4931}' + . '\x{4933}-\x{495B}\x{495D}-\x{4978}\x{497A}\x{497D}\x{4982}-\x{4983}\x{4985}-\x{49A8}' + . '\x{49AA}-\x{49AF}\x{49B1}-\x{49B7}\x{49B9}-\x{49BD}\x{49C1}-\x{49C7}\x{49C9}-\x{49CE}\x{49D0}-\x{49E8}' + . '\x{49EA}\x{49EC}\x{49EE}-\x{4A19}\x{4A1B}-\x{4A43}\x{4A45}-\x{4A4D}\x{4A4F}-\x{4A9E}' + . '\x{4AA0}-\x{4AA9}\x{4AAB}-\x{4B4E}\x{4B50}-\x{4B5B}\x{4B5D}-\x{4B69}\x{4B6B}-\x{4BC2}\x{4BC6}-\x{4BE8}' + . '\x{4BEA}-\x{4BFA}\x{4BFC}-\x{4C06}\x{4C08}-\x{4C2D}\x{4C2F}-\x{4C32}\x{4C34}-\x{4C35}\x{4C37}-\x{4C69}' + . '\x{4C6B}-\x{4C73}\x{4C75}-\x{4C86}\x{4C88}-\x{4C97}\x{4C99}-\x{4C9C}\x{4C9F}-\x{4CA3}\x{4CA5}-\x{4CB5}' + . '\x{4CB7}-\x{4CF8}\x{4CFA}-\x{4D27}\x{4D29}-\x{4DAC}\x{4DAE}-\x{4DB1}\x{4DB3}-\x{4DB5}\x{4E00}-\x{4E54}' + . '\x{4E56}-\x{4E89}\x{4E8B}-\x{4EEC}\x{4EEE}-\x{4FAC}\x{4FAE}-\x{503C}\x{503E}-\x{51E5}\x{51E7}-\x{5270}' + . '\x{5272}-\x{56A1}\x{56A3}-\x{5840}\x{5842}-\x{58B5}\x{58B7}-\x{58CB}\x{58CD}-\x{5BC8}\x{5BCA}-\x{5C01}' + . '\x{5C03}-\x{5C25}\x{5C27}-\x{5D5B}\x{5D5D}-\x{5F08}\x{5F0A}-\x{61F3}\x{61F5}-\x{63BA}\x{63BC}-\x{6441}' + . '\x{6443}-\x{657C}\x{657E}-\x{663E}\x{6640}-\x{66FC}\x{66FE}-\x{6728}\x{672A}-\x{6766}\x{6768}-\x{67A8}' + . '\x{67AA}-\x{685B}\x{685D}-\x{685E}\x{6860}-\x{68B9}\x{68BB}-\x{6AC8}\x{6ACA}-\x{6BB0}\x{6BB2}-\x{6C16}' + . '\x{6C18}-\x{6D9B}\x{6D9D}-\x{6E12}\x{6E14}-\x{6E8B}\x{6E8D}-\x{704D}\x{704F}-\x{7113}\x{7115}-\x{713B}' + . '\x{713D}-\x{7154}\x{7156}-\x{729F}\x{72A1}-\x{731E}\x{7320}-\x{7362}\x{7364}-\x{7533}\x{7535}-\x{7551}' + . '\x{7553}-\x{7572}\x{7574}-\x{75E8}\x{75EA}-\x{7679}\x{767B}-\x{783E}\x{7840}-\x{7A62}\x{7A64}-\x{7AC2}' + . '\x{7AC4}-\x{7B06}\x{7B08}-\x{7B79}\x{7B7B}-\x{7BCE}\x{7BD0}-\x{7D99}\x{7D9B}-\x{7E49}\x{7E4C}-\x{8132}' + . '\x{8134}\x{8136}-\x{81D2}\x{81D4}-\x{8216}\x{8218}-\x{822D}\x{822F}-\x{83B4}\x{83B6}-\x{841F}' + . '\x{8421}-\x{86CC}\x{86CE}-\x{874A}\x{874C}-\x{877E}\x{8780}-\x{8A32}\x{8A34}-\x{8B71}\x{8B73}-\x{8B8E}' + . '\x{8B90}-\x{8DE4}\x{8DE6}-\x{8E9A}\x{8E9C}-\x{8EE1}\x{8EE4}-\x{8F0B}\x{8F0D}-\x{8FB9}\x{8FBB}-\x{9038}' + . '\x{903A}-\x{9196}\x{9198}-\x{91A3}\x{91A5}-\x{91B7}\x{91B9}-\x{91C7}\x{91C9}-\x{91E0}\x{91E2}-\x{91FB}' + . '\x{91FD}-\x{922B}\x{922D}-\x{9270}\x{9272}-\x{9420}\x{9422}-\x{9664}\x{9666}-\x{9679}\x{967B}-\x{9770}' + . '\x{9772}-\x{982B}\x{982D}-\x{98ED}\x{98EF}-\x{99C4}\x{99C6}-\x{9A11}\x{9A14}-\x{9A27}\x{9A29}-\x{9D0D}' + . '\x{9D0F}-\x{9D2B}\x{9D2D}-\x{9D8E}\x{9D90}-\x{9DC5}\x{9DC7}-\x{9E77}\x{9E79}-\x{9EB8}\x{9EBB}-\x{9F20}' + . '\x{9F22}-\x{9F61}\x{9F63}-\x{9FA5}\x{FA28}]{1,20}$/iu', 6 => '/^[\x{002d}0-9A-Za-z]{1,63}$/iu', 7 => '/^[\x{00A1}-\x{00FF}]{1,63}$/iu', 8 => '/^[\x{0100}-\x{017f}]{1,63}$/iu', diff --git a/src/Hostname/Jp.php b/src/Hostname/Jp.php index 3cd09634..d682743c 100644 --- a/src/Hostname/Jp.php +++ b/src/Hostname/Jp.php @@ -13,713 +13,714 @@ */ return [ - 1 => '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}' - . '\x{30A1}-\x{30F6}\x{30FC}' - . '\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' - . '\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' - . '\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' - . '\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' - . '\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' - . '\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' - . '\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' - . '\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' - . '\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' - . '\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' - . '\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' - . '\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' - . '\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' - . '\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' - . '\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' - . '\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' - . '\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' - . '\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' - . '\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' - . '\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' - . '\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' - . '\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' - . '\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' - . '\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' - . '\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' - . '\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' - . '\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' - . '\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' - . '\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' - . '\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' - . '\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' - . '\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' - . '\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' - . '\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' - . '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' - . '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' - . '\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' - . '\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' - . '\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' - . '\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' - . '\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' - . '\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' - . '\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' - . '\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' - . '\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' - . '\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' - . '\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' - . '\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' - . '\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' - . '\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' - . '\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' - . '\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' - . '\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' - . '\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' - . '\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' - . '\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' - . '\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' - . '\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' - . '\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' - . '\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' - . '\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' - . '\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' - . '\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' - . '\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' - . '\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' - . '\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' - . '\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' - . '\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' - . '\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' - . '\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' - . '\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' - . '\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' - . '\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' - . '\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' - . '\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' - . '\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' - . '\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' - . '\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' - . '\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' - . '\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' - . '\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' - . '\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' - . '\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' - . '\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' - . '\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' - . '\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' - . '\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' - . '\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' - . '\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' - . '\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' - . '\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' - . '\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' - . '\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' - . '\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' - . '\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' - . '\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' - . '\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' - . '\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' - . '\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' - . '\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' - . '\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' - . '\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' - . '\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' - . '\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' - . '\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' - . '\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' - . '\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' - . '\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' - . '\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' - . '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' - . '\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' - . '\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' - . '\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' - . '\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' - . '\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' - . '\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' - . '\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' - . '\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' - . '\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' - . '\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' - . '\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' - . '\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' - . '\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' - . '\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' - . '\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' - . '\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' - . '\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' - . '\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' - . '\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' - . '\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' - . '\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' - . '\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' - . '\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' - . '\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' - . '\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' - . '\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' - . '\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' - . '\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' - . '\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' - . '\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' - . '\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' - . '\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' - . '\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' - . '\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' - . '\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' - . '\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' - . '\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' - . '\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' - . '\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' - . '\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' - . '\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' - . '\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' - . '\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' - . '\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' - . '\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' - . '\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' - . '\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' - . '\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' - . '\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' - . '\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' - . '\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' - . '\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' - . '\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' - . '\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' - . '\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' - . '\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' - . '\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' - . '\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' - . '\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' - . '\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' - . '\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' - . '\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' - . '\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' - . '\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' - . '\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' - . '\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' - . '\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' - . '\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' - . '\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' - . '\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' - . '\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' - . '\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' - . '\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' - . '\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' - . '\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' - . '\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' - . '\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' - . '\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' - . '\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' - . '\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' - . '\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' - . '\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' - . '\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' - . '\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' - . '\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' - . '\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' - . '\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' - . '\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' - . '\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' - . '\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' - . '\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' - . '\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' - . '\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' - . '\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' - . '\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' - . '\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' - . '\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' - . '\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' - . '\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' - . '\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' - . '\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' - . '\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' - . '\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' - . '\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' - . '\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' - . '\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' - . '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' - . '\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' - . '\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' - . '\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' - . '\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' - . '\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' - . '\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' - . '\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' - . '\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' - . '\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' - . '\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' - . '\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' - . '\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' - . '\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' - . '\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' - . '\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' - . '\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' - . '\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' - . '\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' - . '\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' - . '\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' - . '\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' - . '\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' - . '\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' - . '\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' - . '\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' - . '\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' - . '\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' - . '\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' - . '\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' - . '\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' - . '\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' - . '\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' - . '\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' - . '\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' - . '\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' - . '\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' - . '\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' - . '\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' - . '\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' - . '\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' - . '\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' - . '\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' - . '\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' - . '\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' - . '\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' - . '\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' - . '\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' - . '\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' - . '\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' - . '\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' - . '\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' - . '\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' - . '\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' - . '\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' - . '\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' - . '\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' - . '\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' - . '\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' - . '\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' - . '\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' - . '\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' - . '\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' - . '\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' - . '\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' - . '\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' - . '\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' - . '\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' - . '\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' - . '\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' - . '\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' - . '\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' - . '\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' - . '\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' - . '\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' - . '\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' - . '\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' - . '\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' - . '\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' - . '\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' - . '\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' - . '\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' - . '\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' - . '\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' - . '\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' - . '\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' - . '\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' - . '\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' - . '\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' - . '\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' - . '\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' - . '\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' - . '\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' - . '\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' - . '\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' - . '\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' - . '\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' - . '\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' - . '\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' - . '\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' - . '\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' - . '\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' - . '\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' - . '\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' - . '\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' - . '\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' - . '\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' - . '\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' - . '\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' - . '\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' - . '\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' - . '\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' - . '\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' - . '\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' - . '\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' - . '\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' - . '\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' - . '\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' - . '\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' - . '\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' - . '\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' - . '\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' - . '\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' - . '\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' - . '\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' - . '\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' - . '\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' - . '\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' - . '\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' - . '\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' - . '\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' - . '\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' - . '\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' - . '\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' - . '\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' - . '\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' - . '\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' - . '\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' - . '\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' - . '\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' - . '\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' - . '\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' - . '\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' - . '\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' - . '\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' - . '\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' - . '\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' - . '\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' - . '\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' - . '\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' - . '\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' - . '\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' - . '\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' - . '\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' - . '\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' - . '\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' - . '\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' - . '\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' - . '\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' - . '\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' - . '\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' - . '\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' - . '\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' - . '\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' - . '\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' - . '\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' - . '\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' - . '\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' - . '\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' - . '\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' - . '\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' - . '\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' - . '\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' - . '\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' - . '\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' - . '\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' - . '\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' - . '\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' - . '\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' - . '\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' - . '\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' - . '\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' - . '\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' - . '\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' - . '\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' - . '\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' - . '\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' - . '\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' - . '\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' - . '\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' - . '\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' - . '\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' - . '\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' - . '\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' - . '\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' - . '\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' - . '\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' - . '\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' - . '\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' - . '\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' - . '\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' - . '\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' - . '\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' - . '\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' - . '\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' - . '\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' - . '\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' - . '\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' - . '\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' - . '\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' - . '\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' - . '\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' - . '\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' - . '\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' - . '\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' - . '\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' - . '\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' - . '\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' - . '\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' - . '\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' - . '\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' - . '\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' - . '\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' - . '\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' - . '\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' - . '\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' - . '\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' - . '\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' - . '\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' - . '\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' - . '\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' - . '\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' - . '\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' - . '\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' - . '\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' - . '\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' - . '\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' - . '\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' - . '\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' - . '\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' - . '\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' - . '\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' - . '\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' - . '\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' - . '\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' - . '\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' - . '\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' - . '\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' - . '\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' - . '\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' - . '\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' - . '\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' - . '\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' - . '\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' - . '\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' - . '\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' - . '\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' - . '\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' - . '\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' - . '\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' - . '\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' - . '\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' - . '\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' - . '\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' - . '\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' - . '\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' - . '\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' - . '\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' - . '\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' - . '\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' - . '\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' - . '\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' - . '\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' - . '\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' - . '\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' - . '\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' - . '\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' - . '\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' - . '\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' - . '\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' - . '\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' - . '\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' - . '\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' - . '\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' - . '\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' - . '\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' - . '\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' - . '\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' - . '\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' - . '\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' - . '\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' - . '\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' - . '\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' - . '\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' - . '\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' - . '\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' - . '\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' - . '\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' - . '\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' - . '\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' - . '\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' - . '\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' - . '\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' - . '\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' - . '\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' - . '\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' - . '\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' - . '\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' - . '\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' - . '\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' - . '\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' - . '\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' - . '\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' - . '\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' - . '\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' - . '\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' - . '\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' - . '\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' - . '\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' - . '\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' - . '\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' - . '\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' - . '\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' - . '\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' - . '\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' - . '\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' - . '\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' - . '\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' - . '\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' - . '\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' - . '\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' - . '\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' - . '\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' - . '\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' - . '\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' - . '\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' - . '\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' - . '\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' - . '\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' - . '\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' - . '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' - . '\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' - . '\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' - . '\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' - . '\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' - . '\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' - . '\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' - . '\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' - . '\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' - . '\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' - . '\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' - . '\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' - . '\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' - . '\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' - . '\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' - . '\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' - . '\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' - . '\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' - . '\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' - . '\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' - . '\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' - . '\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' - . '\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' - . '\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' - . '\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' - . '\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' - . '\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' - . '\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' - . '\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' - . '\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' - . '\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' - . '\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' - . '\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' - . '\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' - . '\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' - . '\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' - . '\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' - . '\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' - . '\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' - . '\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' - . '\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' - . '\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' - . '\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' - . '\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' - . '\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' - . '\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' - . '\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' - . '\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' - . '\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' - . '\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' - . '\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' - . '\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' - . '\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' - . '\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' - . '\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' - . '\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' - . '\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' - . '\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' - . '\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' - . '\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' - . '\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' - . '\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' - . '\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' - . '\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' - . '\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' - . '\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' - . '\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' - . '\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' - . '\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' - . '\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' - . '\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' - . '\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' - . '\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' - . '\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' - . '\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' - . '\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' - . '\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' - . '\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' - . '\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' - . '\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' - . '\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' - . '\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' - . '\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' - . '\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' - . '\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' - . '\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' - . '\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' - . '\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' - . '\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' - . '\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' - . '\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' - . '\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' - . '\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' - . '\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' - . '\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' - . '\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' - . '\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' - . '\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' - . '\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' - . '\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' - . '\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' - . '\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' - . '\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' - . '\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' - . '\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' - . '\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' - . '\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' - . '\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' - . '\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' - . '\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' - . '\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' - . '\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' - . '\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' - . '\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' - . '\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' - . '\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' - . '\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' - . '\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' - . '\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' - . '\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' - . '\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' - . '\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' - . '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' - . '\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' - . '\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' - . '\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' - . '\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' - . '\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' - . '\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' - . '\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' - . '\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' - . '\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' - . '\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' - . '\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' - . '\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' - . '\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' - . '\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' - . '\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' - . '\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' - . '\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' - . '\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' - . '\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' - . '\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' - . '\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' - . '\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' - . '\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' - . '\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' - . '\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' - . '\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' - . '\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' - . '\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu', + 1 => + '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}' + . '\x{30A1}-\x{30F6}\x{30FC}' + . '\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' + . '\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' + . '\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' + . '\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' + . '\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' + . '\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' + . '\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' + . '\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' + . '\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' + . '\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' + . '\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' + . '\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' + . '\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' + . '\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' + . '\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' + . '\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' + . '\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' + . '\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' + . '\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' + . '\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' + . '\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' + . '\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' + . '\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' + . '\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' + . '\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' + . '\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' + . '\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' + . '\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' + . '\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' + . '\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' + . '\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' + . '\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' + . '\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' + . '\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' + . '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' + . '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' + . '\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' + . '\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' + . '\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' + . '\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' + . '\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' + . '\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' + . '\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' + . '\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' + . '\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' + . '\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' + . '\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' + . '\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' + . '\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' + . '\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' + . '\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' + . '\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' + . '\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' + . '\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' + . '\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' + . '\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' + . '\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' + . '\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' + . '\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' + . '\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' + . '\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' + . '\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' + . '\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' + . '\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' + . '\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' + . '\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' + . '\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' + . '\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' + . '\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' + . '\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' + . '\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' + . '\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' + . '\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' + . '\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' + . '\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' + . '\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' + . '\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' + . '\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' + . '\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' + . '\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' + . '\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' + . '\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' + . '\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' + . '\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' + . '\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' + . '\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' + . '\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' + . '\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' + . '\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' + . '\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' + . '\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' + . '\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' + . '\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' + . '\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' + . '\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' + . '\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' + . '\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' + . '\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' + . '\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' + . '\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' + . '\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' + . '\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' + . '\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' + . '\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' + . '\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' + . '\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' + . '\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' + . '\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' + . '\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' + . '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' + . '\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' + . '\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' + . '\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' + . '\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' + . '\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' + . '\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' + . '\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' + . '\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' + . '\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' + . '\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' + . '\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' + . '\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' + . '\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' + . '\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' + . '\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' + . '\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' + . '\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' + . '\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' + . '\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' + . '\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' + . '\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' + . '\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' + . '\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' + . '\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' + . '\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' + . '\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' + . '\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' + . '\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' + . '\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' + . '\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' + . '\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' + . '\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' + . '\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' + . '\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' + . '\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' + . '\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' + . '\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' + . '\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' + . '\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' + . '\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' + . '\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' + . '\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' + . '\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' + . '\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' + . '\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' + . '\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' + . '\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' + . '\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' + . '\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' + . '\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' + . '\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' + . '\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' + . '\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' + . '\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' + . '\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' + . '\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' + . '\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' + . '\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' + . '\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' + . '\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' + . '\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' + . '\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' + . '\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' + . '\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' + . '\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' + . '\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' + . '\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' + . '\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' + . '\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' + . '\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' + . '\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' + . '\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' + . '\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' + . '\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' + . '\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' + . '\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' + . '\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' + . '\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' + . '\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' + . '\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' + . '\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' + . '\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' + . '\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' + . '\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' + . '\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' + . '\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' + . '\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' + . '\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' + . '\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' + . '\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' + . '\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' + . '\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' + . '\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' + . '\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' + . '\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' + . '\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' + . '\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' + . '\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' + . '\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' + . '\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' + . '\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' + . '\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' + . '\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' + . '\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' + . '\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' + . '\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' + . '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' + . '\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' + . '\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' + . '\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' + . '\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' + . '\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' + . '\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' + . '\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' + . '\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' + . '\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' + . '\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' + . '\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' + . '\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' + . '\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' + . '\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' + . '\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' + . '\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' + . '\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' + . '\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' + . '\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' + . '\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' + . '\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' + . '\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' + . '\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' + . '\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' + . '\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' + . '\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' + . '\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' + . '\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' + . '\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' + . '\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' + . '\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' + . '\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' + . '\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' + . '\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' + . '\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' + . '\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' + . '\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' + . '\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' + . '\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' + . '\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' + . '\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' + . '\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' + . '\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' + . '\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' + . '\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' + . '\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' + . '\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' + . '\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' + . '\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' + . '\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' + . '\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' + . '\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' + . '\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' + . '\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' + . '\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' + . '\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' + . '\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' + . '\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' + . '\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' + . '\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' + . '\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' + . '\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' + . '\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' + . '\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' + . '\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' + . '\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' + . '\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' + . '\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' + . '\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' + . '\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' + . '\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' + . '\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' + . '\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' + . '\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' + . '\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' + . '\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' + . '\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' + . '\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' + . '\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' + . '\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' + . '\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' + . '\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' + . '\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' + . '\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' + . '\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' + . '\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' + . '\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' + . '\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' + . '\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' + . '\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' + . '\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' + . '\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' + . '\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' + . '\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' + . '\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' + . '\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' + . '\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' + . '\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' + . '\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' + . '\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' + . '\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' + . '\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' + . '\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' + . '\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' + . '\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' + . '\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' + . '\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' + . '\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' + . '\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' + . '\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' + . '\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' + . '\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' + . '\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' + . '\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' + . '\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' + . '\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' + . '\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' + . '\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' + . '\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' + . '\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' + . '\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' + . '\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' + . '\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' + . '\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' + . '\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' + . '\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' + . '\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' + . '\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' + . '\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' + . '\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' + . '\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' + . '\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' + . '\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' + . '\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' + . '\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' + . '\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' + . '\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' + . '\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' + . '\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' + . '\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' + . '\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' + . '\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' + . '\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' + . '\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' + . '\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' + . '\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' + . '\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' + . '\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' + . '\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' + . '\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' + . '\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' + . '\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' + . '\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' + . '\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' + . '\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' + . '\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' + . '\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' + . '\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' + . '\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' + . '\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' + . '\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' + . '\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' + . '\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' + . '\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' + . '\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' + . '\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' + . '\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' + . '\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' + . '\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' + . '\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' + . '\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' + . '\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' + . '\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' + . '\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' + . '\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' + . '\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' + . '\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' + . '\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' + . '\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' + . '\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' + . '\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' + . '\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' + . '\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' + . '\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' + . '\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' + . '\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' + . '\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' + . '\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' + . '\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' + . '\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' + . '\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' + . '\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' + . '\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' + . '\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' + . '\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' + . '\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' + . '\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' + . '\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' + . '\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' + . '\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' + . '\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' + . '\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' + . '\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' + . '\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' + . '\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' + . '\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' + . '\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' + . '\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' + . '\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' + . '\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' + . '\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' + . '\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' + . '\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' + . '\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' + . '\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' + . '\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' + . '\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' + . '\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' + . '\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' + . '\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' + . '\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' + . '\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' + . '\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' + . '\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' + . '\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' + . '\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' + . '\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' + . '\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' + . '\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' + . '\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' + . '\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' + . '\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' + . '\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' + . '\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' + . '\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' + . '\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' + . '\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' + . '\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' + . '\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' + . '\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' + . '\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' + . '\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' + . '\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' + . '\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' + . '\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' + . '\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' + . '\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' + . '\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' + . '\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' + . '\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' + . '\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' + . '\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' + . '\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' + . '\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' + . '\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' + . '\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' + . '\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' + . '\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' + . '\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' + . '\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' + . '\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' + . '\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' + . '\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' + . '\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' + . '\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' + . '\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' + . '\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' + . '\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' + . '\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' + . '\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' + . '\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' + . '\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' + . '\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' + . '\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' + . '\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' + . '\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' + . '\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' + . '\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' + . '\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' + . '\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' + . '\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' + . '\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' + . '\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' + . '\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' + . '\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' + . '\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' + . '\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' + . '\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' + . '\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' + . '\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' + . '\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' + . '\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' + . '\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' + . '\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' + . '\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' + . '\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' + . '\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' + . '\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' + . '\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' + . '\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' + . '\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' + . '\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' + . '\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' + . '\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' + . '\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' + . '\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' + . '\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' + . '\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' + . '\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' + . '\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' + . '\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' + . '\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' + . '\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' + . '\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' + . '\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' + . '\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' + . '\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' + . '\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' + . '\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' + . '\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' + . '\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' + . '\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' + . '\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' + . '\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' + . '\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' + . '\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' + . '\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' + . '\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' + . '\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' + . '\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' + . '\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' + . '\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' + . '\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' + . '\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' + . '\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' + . '\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' + . '\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' + . '\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' + . '\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' + . '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' + . '\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' + . '\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' + . '\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' + . '\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' + . '\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' + . '\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' + . '\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' + . '\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' + . '\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' + . '\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' + . '\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' + . '\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' + . '\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' + . '\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' + . '\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' + . '\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' + . '\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' + . '\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' + . '\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' + . '\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' + . '\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' + . '\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' + . '\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' + . '\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' + . '\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' + . '\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' + . '\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' + . '\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' + . '\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' + . '\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' + . '\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' + . '\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' + . '\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' + . '\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' + . '\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' + . '\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' + . '\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' + . '\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' + . '\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' + . '\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' + . '\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' + . '\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' + . '\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' + . '\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' + . '\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' + . '\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' + . '\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' + . '\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' + . '\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' + . '\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' + . '\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' + . '\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' + . '\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' + . '\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' + . '\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' + . '\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' + . '\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' + . '\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' + . '\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' + . '\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' + . '\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' + . '\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' + . '\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' + . '\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' + . '\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' + . '\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' + . '\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' + . '\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' + . '\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' + . '\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' + . '\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' + . '\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' + . '\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' + . '\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' + . '\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' + . '\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' + . '\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' + . '\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' + . '\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' + . '\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' + . '\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' + . '\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' + . '\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' + . '\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' + . '\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' + . '\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' + . '\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' + . '\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' + . '\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' + . '\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' + . '\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' + . '\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' + . '\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' + . '\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' + . '\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' + . '\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' + . '\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' + . '\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' + . '\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' + . '\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' + . '\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' + . '\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' + . '\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' + . '\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' + . '\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' + . '\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' + . '\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' + . '\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' + . '\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' + . '\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' + . '\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' + . '\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' + . '\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' + . '\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' + . '\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' + . '\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' + . '\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' + . '\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' + . '\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' + . '\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' + . '\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' + . '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' + . '\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' + . '\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' + . '\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' + . '\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' + . '\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' + . '\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' + . '\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' + . '\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' + . '\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' + . '\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' + . '\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' + . '\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' + . '\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' + . '\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' + . '\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' + . '\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' + . '\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' + . '\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' + . '\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' + . '\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' + . '\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' + . '\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' + . '\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' + . '\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' + . '\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' + . '\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' + . '\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' + . '\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu', ]; diff --git a/src/Iban.php b/src/Iban.php index 8307f430..2688912d 100644 --- a/src/Iban.php +++ b/src/Iban.php @@ -184,7 +184,7 @@ public function __construct(array $options = []) $countryCode = $options['country_code'] ?? null; if ($countryCode !== null && ! isset(self::IBAN_REGEX[$countryCode])) { throw new InvalidArgumentException( - "Country code '{$countryCode}' invalid by ISO 3166-1 or not supported" + "Country code '{$countryCode}' invalid by ISO 3166-1 or not supported", ); } @@ -289,7 +289,7 @@ public function isValid(mixed $value): bool '34', '35', ], - $format + $format, ); $temp = intval(substr($format, 0, 1)); diff --git a/src/Identical.php b/src/Identical.php index f6e16481..6b0ab827 100644 --- a/src/Identical.php +++ b/src/Identical.php @@ -99,7 +99,8 @@ public function isValid(mixed $value, ?array $context = null): bool // so the $matchTo structure doesn't match the $context structure if ( is_array($matchTo) - || (! is_int($matchTo) && ! is_string($matchTo)) + || (! is_int($matchTo) + && ! is_string($matchTo)) || ! isset($context[$matchTo]) ) { $matchTo = $this->token; @@ -109,9 +110,11 @@ public function isValid(mixed $value, ?array $context = null): bool } if ( - ($this->strict && ($value !== $matchTo)) - // phpcs:ignore SlevomatCodingStandard.Operators.DisallowEqualOperators.DisallowedNotEqualOperator - || (! $this->strict && ($value != $matchTo)) + ($this->strict + && $value !== $matchTo) + // phpcs:ignore SlevomatCodingStandard.Operators.DisallowEqualOperators.DisallowedNotEqualOperator + || (! $this->strict + && $value != $matchTo) ) { $this->error(self::NOT_SAME); return false; diff --git a/src/InArray.php b/src/InArray.php index ee1c6e7b..7b3b6953 100644 --- a/src/InArray.php +++ b/src/InArray.php @@ -117,7 +117,8 @@ public function isValid(mixed $value): bool // we type cast the input to a string if ( self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY === $this->strict - && (is_int($value) || is_float($value)) + && (is_int($value) + || is_float($value)) ) { $value = (string) $value; } @@ -140,7 +141,9 @@ public function isValid(mixed $value): bool $el = $element; if ( self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY === $this->strict - && is_string($value) && (is_int($el) || is_float($el)) + && is_string($value) + && (is_int($el) + || is_float($el)) ) { $el = (string) $el; } diff --git a/src/Ip.php b/src/Ip.php index 36a52a87..206dcfb6 100644 --- a/src/Ip.php +++ b/src/Ip.php @@ -43,10 +43,10 @@ final class Ip extends AbstractValidator self::NOT_IP_ADDRESS => 'The input does not appear to be a valid IP address', ]; - private readonly bool $allowipv4; // Enable IPv4 Validation - private readonly bool $allowipv6; // Enable IPv6 Validation + private readonly bool $allowipv4; // Enable IPv4 Validation + private readonly bool $allowipv6; // Enable IPv6 Validation private readonly bool $allowipvfuture; // Enable IPvFuture Validation - private readonly bool $allowliteral; // Enable IPs in literal format (only IPv6 and IPvFuture) + private readonly bool $allowliteral; // Enable IPs in literal format (only IPv6 and IPvFuture) /** @param OptionsArgument $options */ public function __construct(array $options = []) @@ -64,12 +64,7 @@ public function __construct(array $options = []) throw new Exception\InvalidArgumentException('Nothing to validate. Check your options'); } - unset( - $options['allowipv4'], - $options['allowipv6'], - $options['allowipvfuture'], - $options['allowliteral'], - ); + unset($options['allowipv4'], $options['allowipv6'], $options['allowipvfuture'], $options['allowliteral']); parent::__construct($options); } @@ -96,8 +91,10 @@ public function isValid(mixed $value): bool } if ( - ($this->allowipv6 && $this->validateIPv6($value)) || - ($this->allowipvfuture && $this->validateIPvFuture($value)) + ($this->allowipv6 + && $this->validateIPv6($value)) + || ($this->allowipvfuture + && $this->validateIPvFuture($value)) ) { return true; } diff --git a/src/Isbn.php b/src/Isbn.php index 6590af09..f9eb648d 100644 --- a/src/Isbn.php +++ b/src/Isbn.php @@ -111,8 +111,8 @@ public function isValid(mixed $value): bool } $checksum = $type === self::ISBN10 - ? $this->calculateIsbn10Checksum($value) - : $this->calculateIsbn13Checksum($value); + ? $this->calculateIsbn10Checksum($value) + : $this->calculateIsbn13Checksum($value); // validate if (substr($value, -1) !== $checksum) { @@ -149,7 +149,7 @@ private function calculateIsbn13Checksum(string $value): string $sum = 0; for ($i = 0; $i < 12; $i++) { - if ($i % 2 === 0) { + if (($i % 2) === 0) { $sum += (int) $value[$i]; continue; } diff --git a/src/NotEmpty.php b/src/NotEmpty.php index 3cc301bc..bdc355c3 100644 --- a/src/NotEmpty.php +++ b/src/NotEmpty.php @@ -65,12 +65,8 @@ final class NotEmpty extends AbstractValidator public const INVALID = 'notEmptyInvalid'; public const IS_EMPTY = 'isEmpty'; - private const DEFAULT_TYPE = self::OBJECT - | self::SPACE - | self::NULL - | self::EMPTY_ARRAY - | self::STRING - | self::BOOLEAN; + private const DEFAULT_TYPE = + self::OBJECT | self::SPACE | self::NULL | self::EMPTY_ARRAY | self::STRING | self::BOOLEAN; private const TYPE_NAMES = [ self::BOOLEAN => 'boolean', @@ -163,7 +159,7 @@ public function isValid(mixed $value): bool if ($this->type & self::OBJECT_COUNT) { $object = true; - if ($value instanceof Countable && (count($value) === 0)) { + if ($value instanceof Countable && count($value) === 0) { $this->error(self::IS_EMPTY); return false; } @@ -174,8 +170,10 @@ public function isValid(mixed $value): bool $object = true; if ( - (is_object($value) && ! method_exists($value, '__toString')) - || (is_object($value) && (string) $value === '') + (is_object($value) + && ! method_exists($value, '__toString')) + || (is_object($value) + && (string) $value === '') ) { $this->error(self::IS_EMPTY); return false; @@ -196,7 +194,7 @@ public function isValid(mixed $value): bool // SPACE (' ') if ($this->type & self::SPACE) { - if (is_string($value) && (preg_match('/^\s+$/s', $value))) { + if (is_string($value) && preg_match('/^\s+$/s', $value)) { $this->error(self::IS_EMPTY); return false; } diff --git a/src/NumberComparison.php b/src/NumberComparison.php index 0c5d5a7a..b7bcd82d 100644 --- a/src/NumberComparison.php +++ b/src/NumberComparison.php @@ -75,12 +75,7 @@ public function __construct(array $options = []) $this->inclusiveMin = $options['inclusiveMin'] ?? true; $this->inclusiveMax = $options['inclusiveMax'] ?? true; - unset( - $options['min'], - $options['max'], - $options['inclusiveMin'], - $options['inclusiveMax'], - ); + unset($options['min'], $options['max'], $options['inclusiveMin'], $options['inclusiveMax']); parent::__construct($options); } diff --git a/src/Step.php b/src/Step.php index 468aaa14..4555703a 100644 --- a/src/Step.php +++ b/src/Step.php @@ -97,7 +97,7 @@ private function fmod(float $x, float $y): float // find the maximum precision from both input params to give accurate results $precision = $this->getPrecision($x) + $this->getPrecision($y); - return round($x - $y * floor($x / $y), $precision); + return round($x - ($y * floor($x / $y)), $precision); } /** diff --git a/src/StringLength.php b/src/StringLength.php index 48e6d68e..60556003 100644 --- a/src/StringLength.php +++ b/src/StringLength.php @@ -44,7 +44,7 @@ final class StringLength extends AbstractValidator ]; protected readonly int $min; - protected readonly int|null $max; + protected readonly ?int $max; private readonly string $encoding; protected ?int $length = null; @@ -63,7 +63,7 @@ public function __construct(array $options = []) if ($this->max !== null && $this->max < $this->min) { throw new InvalidArgumentException( - "The maximum must be greater than or equal to the minimum length, but {$this->max} < {$this->min}" + "The maximum must be greater than or equal to the minimum length, but {$this->max} < {$this->min}", ); } } diff --git a/src/UndisclosedPassword.php b/src/UndisclosedPassword.php index 2d306fcc..83f5d552 100644 --- a/src/UndisclosedPassword.php +++ b/src/UndisclosedPassword.php @@ -45,7 +45,7 @@ final class UndisclosedPassword extends AbstractValidator // phpcs:enable public function __construct( private readonly ClientInterface $httpClient, - private readonly RequestFactoryInterface $makeHttpRequest + private readonly RequestFactoryInterface $makeHttpRequest, ) { parent::__construct(); } @@ -53,7 +53,7 @@ public function __construct( /** {@inheritDoc} */ public function isValid( #[SensitiveParameter] - mixed $value + mixed $value, ): bool { if (! is_string($value)) { $this->error(self::NOT_A_STRING); @@ -70,7 +70,7 @@ public function isValid( private function isPwnedPassword( #[SensitiveParameter] - string $password + string $password, ): bool { $sha1Hash = $this->hashPassword($password); $rangeHash = $this->getRangeHash($sha1Hash); @@ -85,7 +85,7 @@ private function isPwnedPassword( */ private function hashPassword( #[SensitiveParameter] - string $password + string $password, ): string { $hashedPassword = sha1($password); @@ -100,7 +100,7 @@ private function hashPassword( */ private function getRangeHash( #[SensitiveParameter] - string $passwordHash + string $passwordHash, ): string { return substr($passwordHash, self::HIBP_K_ANONYMITY_HASH_RANGE_BASE, self::HIBP_K_ANONYMITY_HASH_RANGE_LENGTH); } @@ -114,11 +114,11 @@ private function getRangeHash( */ private function retrieveHashList( #[SensitiveParameter] - string $passwordRange + string $passwordRange, ): string { $request = $this->makeHttpRequest->createRequest( 'GET', - self::HIBP_API_URI . '/range/' . $passwordRange + self::HIBP_API_URI . '/range/' . $passwordRange, ); $response = $this->httpClient->sendRequest($request); @@ -132,7 +132,7 @@ private function hashInResponse( #[SensitiveParameter] string $sha1Hash, #[SensitiveParameter] - string $resultStream + string $resultStream, ): bool { $data = explode("\r\n", $resultStream); $hashes = array_filter($data, static function ($value) use ($sha1Hash): bool { diff --git a/src/ValidatorChain.php b/src/ValidatorChain.php index 4e51c1b6..624baac2 100644 --- a/src/ValidatorChain.php +++ b/src/ValidatorChain.php @@ -60,7 +60,7 @@ final class ValidatorChain implements Countable, IteratorAggregate, ValidatorCha * Initialize validator chain */ public function __construct( - private ValidatorPluginManager|null $pluginManager = null, + private ?ValidatorPluginManager $pluginManager = null, ) { /** @var PriorityQueue $queue */ $queue = new PriorityQueue(); diff --git a/src/ValidatorChainFactory.php b/src/ValidatorChainFactory.php index 4aecbcbe..55083007 100644 --- a/src/ValidatorChainFactory.php +++ b/src/ValidatorChainFactory.php @@ -9,9 +9,9 @@ */ final readonly class ValidatorChainFactory { - public function __construct(private ValidatorPluginManager $pluginManager) - { - } + public function __construct( + private ValidatorPluginManager $pluginManager, + ) {} /** @param array $specification */ public function fromArray(array $specification): ValidatorChain diff --git a/src/ValidatorChainInterface.php b/src/ValidatorChainInterface.php index a9d9e0d6..be5d70bf 100644 --- a/src/ValidatorChainInterface.php +++ b/src/ValidatorChainInterface.php @@ -20,7 +20,7 @@ interface ValidatorChainInterface extends ValidatorInterface public function attach( ValidatorInterface $validator, bool $breakChainOnFailure = false, - int $priority = self::DEFAULT_PRIORITY + int $priority = self::DEFAULT_PRIORITY, ): void; /** @@ -37,7 +37,7 @@ public function attachByName( string $name, array $options = [], bool $breakChainOnFailure = false, - int $priority = self::DEFAULT_PRIORITY + int $priority = self::DEFAULT_PRIORITY, ): void; /** diff --git a/src/ValidatorChainInvokableFactory.php b/src/ValidatorChainInvokableFactory.php index 4ab9f171..0d743b4c 100644 --- a/src/ValidatorChainInvokableFactory.php +++ b/src/ValidatorChainInvokableFactory.php @@ -31,7 +31,7 @@ public function __invoke( ?array $options = null, ): ValidatorChain { $options ??= []; - $factory = $container->get(ValidatorChainFactory::class); + $factory = $container->get(ValidatorChainFactory::class); return $factory->fromArray($options); } } diff --git a/test/AbstractValidatorTest.php b/test/AbstractValidatorTest.php index 18fe91dc..27623ada 100644 --- a/test/AbstractValidatorTest.php +++ b/test/AbstractValidatorTest.php @@ -181,10 +181,13 @@ public function testNonIdenticalMessagesAllReturned(): void $messages = $this->validator->getMessages(); self::assertCount(2, $messages); - self::assertSame([ - ConcreteValidator::FOO_MESSAGE => 'invalid was passed', - ConcreteValidator::BAR_MESSAGE => 'invalid was wrong', - ], $messages); + self::assertSame( + [ + ConcreteValidator::FOO_MESSAGE => 'invalid was passed', + ConcreteValidator::BAR_MESSAGE => 'invalid was wrong', + ], + $messages, + ); } public function testIdenticalMessagesNotReturned(): void diff --git a/test/BackedEnumValueTest.php b/test/BackedEnumValueTest.php index e32fe70c..80269563 100644 --- a/test/BackedEnumValueTest.php +++ b/test/BackedEnumValueTest.php @@ -51,7 +51,7 @@ public static function basicProvider(): iterable /** @param class-string $enum */ #[DataProvider('basicProvider')] - public function testBasic(string $enum, mixed $value, bool $expect, string|null $errorKey): void + public function testBasic(string $enum, mixed $value, bool $expect, ?string $errorKey): void { $validator = new BackedEnumValue(['enum' => $enum]); diff --git a/test/BitwiseTest.php b/test/BitwiseTest.php index 6e42d0a0..7f18c923 100644 --- a/test/BitwiseTest.php +++ b/test/BitwiseTest.php @@ -23,20 +23,20 @@ final class BitwiseTest extends TestCase public static function basicDataProvider(): array { return [ - [null, false, 0b0001, 0b0001, false, Bitwise::NO_OP], - [Bitwise::OP_AND, false, 0b0001, 0b0001, true, null], - [Bitwise::OP_AND, false, 0b0001, 1, true, null], - [Bitwise::OP_AND, false, 0b0001, '1', true, null], - [Bitwise::OP_AND, true, 0b0001, 1, true, null], - [Bitwise::OP_AND, true, 0b0001, '1', true, null], - [Bitwise::OP_AND, false, 0b0111, 0b0001, true, null], + [null, false, 0b0001, 0b0001, false, Bitwise::NO_OP], + [Bitwise::OP_AND, false, 0b0001, 0b0001, true, null], + [Bitwise::OP_AND, false, 0b0001, 1, true, null], + [Bitwise::OP_AND, false, 0b0001, '1', true, null], + [Bitwise::OP_AND, true, 0b0001, 1, true, null], + [Bitwise::OP_AND, true, 0b0001, '1', true, null], + [Bitwise::OP_AND, false, 0b0111, 0b0001, true, null], [Bitwise::OP_AND, true, 0b0001, 0b0011, false, Bitwise::NOT_AND_STRICT], [Bitwise::OP_AND, false, 0b0001, 0b0010, false, Bitwise::NOT_AND], - [Bitwise::OP_AND, false, 0b0001, 'foo', false, Bitwise::NOT_INTEGER], - [Bitwise::OP_AND, false, 0b0001, null, false, Bitwise::NOT_INTEGER], - [Bitwise::OP_AND, false, 0b0001, 0.5, false, Bitwise::NOT_INTEGER], - [Bitwise::OP_XOR, true, 0b0001, 0b0010, true, null], - [Bitwise::OP_XOR, true, 0b0001, 0b0100, true, null], + [Bitwise::OP_AND, false, 0b0001, 'foo', false, Bitwise::NOT_INTEGER], + [Bitwise::OP_AND, false, 0b0001, null, false, Bitwise::NOT_INTEGER], + [Bitwise::OP_AND, false, 0b0001, 0.5, false, Bitwise::NOT_INTEGER], + [Bitwise::OP_XOR, true, 0b0001, 0b0010, true, null], + [Bitwise::OP_XOR, true, 0b0001, 0b0100, true, null], [Bitwise::OP_XOR, true, 0b0111, 0b0100, false, Bitwise::NOT_XOR], ]; } @@ -51,7 +51,7 @@ public function testBasic( int $control, mixed $input, bool $valid, - string|null $errorKey, + ?string $errorKey, ): void { $validator = new Bitwise([ 'operator' => $operator, diff --git a/test/BusinessIdentifierCodeTest.php b/test/BusinessIdentifierCodeTest.php index 67b72832..7d917eed 100644 --- a/test/BusinessIdentifierCodeTest.php +++ b/test/BusinessIdentifierCodeTest.php @@ -66,7 +66,7 @@ public function testNotAStringFailure(mixed $code): void self::assertCount(1, $validator->getMessages()); self::assertSame( 'Invalid type given; string expected', - $validator->getMessages()[BusinessIdentifierCode::NOT_STRING] + $validator->getMessages()[BusinessIdentifierCode::NOT_STRING], ); } diff --git a/test/CallbackTest.php b/test/CallbackTest.php index 5b862fcb..1c7fe99c 100644 --- a/test/CallbackTest.php +++ b/test/CallbackTest.php @@ -19,7 +19,7 @@ final class CallbackTest extends TestCase public function testBasic(): void { $validator = new Callback( - static fn (mixed $value): bool => $value === 'test', + static fn(mixed $value): bool => $value === 'test', ); self::assertTrue($validator->isValid('test')); @@ -56,8 +56,11 @@ public function testOptionsArePassedAsThirdArgumentWhenContextIsNonEmpty(): void $givenContext = ['baz' => 'bat']; $validator = new Callback([ 'throwExceptions' => true, - 'callback' => static fn(mixed $value, array $context, string $foo): bool - => $value === 'test' && $foo === 'foo' && $context === $givenContext, + 'callback' => static fn(mixed $value, array $context, string $foo): bool => ( + $value === 'test' + && $foo === 'foo' + && $context === $givenContext + ), 'callbackOptions' => ['foo' => 'foo'], ]); @@ -69,8 +72,10 @@ public function testContextIsSecondArgumentWhenGiven(): void $givenContext = ['baz' => 'bat']; $validator = new Callback([ 'throwExceptions' => true, - 'callback' => static fn(mixed $value, array $context): bool - => $value === 'test' && $context === $givenContext, + 'callback' => static fn(mixed $value, array $context): bool => ( + $value === 'test' + && $context === $givenContext + ), 'callbackOptions' => [], ]); diff --git a/test/CreditCardTest.php b/test/CreditCardTest.php index db8f9cc7..78af8b2b 100644 --- a/test/CreditCardTest.php +++ b/test/CreditCardTest.php @@ -22,9 +22,9 @@ public static function basicValues(): array return [ ['4111111111111111', true], ['5404000000000001', true], - ['374200000000004', true], + ['374200000000004', true], ['4444555566667777', false], - ['ABCDEF', false], + ['ABCDEF', false], ]; } @@ -57,9 +57,9 @@ public static function visaValues(): array return [ ['4111111111111111', true], ['5404000000000001', false], - ['374200000000004', false], + ['374200000000004', false], ['4444555566667777', false], - ['ABCDEF', false], + ['ABCDEF', false], ]; } @@ -102,9 +102,9 @@ public static function serviceValues(): array return [ ['4111111111111111', false], ['5404000000000001', false], - ['374200000000004', false], + ['374200000000004', false], ['4444555566667777', false], - ['ABCDEF', false], + ['ABCDEF', false], ]; } @@ -130,9 +130,9 @@ public static function optionsValues(): array return [ ['4111111111111111', false], ['5404000000000001', false], - ['374200000000004', false], + ['374200000000004', false], ['4444555566667777', false], - ['ABCDEF', false], + ['ABCDEF', false], ]; } @@ -166,8 +166,8 @@ public static function jcbValues(): array ['3088185545477406', false], ['3158854390756173', false], ['3088936920428541', false], - ['213193692042852', true], - ['180012362524156', true], + ['213193692042852', true], + ['180012362524156', true], ]; } @@ -241,10 +241,10 @@ public static function mirValues(): array ['2203921957923012', true], ['2204150479254495', true], ['2201123406612104', true], - ['2900008996056', false], - ['2201969950494', true], - ['2201342387927', true], - ['2205969950494', false], + ['2900008996056', false], + ['2201969950494', true], + ['2201342387927', true], + ['2205969950494', false], ]; } @@ -308,11 +308,7 @@ public function testThatTheCallbackReceivesTheExpectedParameters(): void string $cardNumber, array $context, array $types, - ) use ( - $list, - $input, - $formPayload, - ): bool { + ) use ($list, $input, $formPayload): bool { self::assertSame($formPayload, $context); self::assertSame($list, $types); self::assertSame($input, $cardNumber); diff --git a/test/DateComparisonTest.php b/test/DateComparisonTest.php index 0afff74d..cee17595 100644 --- a/test/DateComparisonTest.php +++ b/test/DateComparisonTest.php @@ -46,8 +46,26 @@ public static function basicDataProvider(): array // Between with Dates ['2020-01-01', '2020-01-31', true, true, null, true, '2020-01-01', null], ['2020-01-01', '2020-01-31', false, false, null, false, '2020-01-01', DateComparison::ERROR_NOT_GREATER], - ['2020-01-01', '2020-01-31', true, true, null, false, '2019-01-01', DateComparison::ERROR_NOT_GREATER_INCLUSIVE], - ['2020-01-01', '2020-01-31', true, true, null, false, '2020-02-01', DateComparison::ERROR_NOT_LESS_INCLUSIVE], + [ + '2020-01-01', + '2020-01-31', + true, + true, + null, + false, + '2019-01-01', + DateComparison::ERROR_NOT_GREATER_INCLUSIVE, + ], + [ + '2020-01-01', + '2020-01-31', + true, + true, + null, + false, + '2020-02-01', + DateComparison::ERROR_NOT_LESS_INCLUSIVE, + ], ['2020-01-01', '2020-01-31', false, false, null, false, '2020-02-01', DateComparison::ERROR_NOT_LESS], [$jan1, $mar1, true, true, null, true, $feb1, null], // Generally invalid @@ -60,22 +78,94 @@ public static function basicDataProvider(): array ['2020-01-01', '2020-01-31', true, true, null, false, '2020-1-1', DateComparison::ERROR_INVALID_DATE], ['2020-01-01', '2020-01-31', true, true, 'Y-n-j', true, '2020-1-1', null], ['2020-01-01', '2020-01-31', true, true, 'Y-n-j', true, '2020-01-01', null], - ['2020-01-01', '2020-01-31', true, true, null, false, '2020-1-1T12:34:56', DateComparison::ERROR_INVALID_DATE], - ['2020-01-01', '2020-01-31', true, true, null, false, '2020-0-01T12:34', DateComparison::ERROR_INVALID_DATE], + [ + '2020-01-01', + '2020-01-31', + true, + true, + null, + false, + '2020-1-1T12:34:56', + DateComparison::ERROR_INVALID_DATE, + ], + [ + '2020-01-01', + '2020-01-31', + true, + true, + null, + false, + '2020-0-01T12:34', + DateComparison::ERROR_INVALID_DATE, + ], // Between with custom input format ['2020-01-01', '2020-01-31', false, false, 'jS M Y', true, '5th Jan 2020', null], ['2020-01-01', '2020-01-31', false, false, 'jS M Y', true, '2020-01-05', null], ['2020-01-01', '2020-01-31', false, false, 'jS M Y', true, '2020-01-05T16:45:00', null], ['2020-01-01', '2020-01-31', true, true, 'jS M Y', true, $jan1, null], // Between with Date and Time - ['2020-01-01T19:00:00', '2020-01-02T12:00:00', false, false, null, false, '2020-01-05T16:45:00', DateComparison::ERROR_NOT_LESS], - ['2020-01-01T19:00:00', '2020-01-02T12:00:00', true, true, null, false, '2020-01-01', DateComparison::ERROR_NOT_GREATER_INCLUSIVE], + [ + '2020-01-01T19:00:00', + '2020-01-02T12:00:00', + false, + false, + null, + false, + '2020-01-05T16:45:00', + DateComparison::ERROR_NOT_LESS, + ], + [ + '2020-01-01T19:00:00', + '2020-01-02T12:00:00', + true, + true, + null, + false, + '2020-01-01', + DateComparison::ERROR_NOT_GREATER_INCLUSIVE, + ], ['2020-01-01T19:00:00', '2020-01-02T12:00:00', false, false, null, true, '2020-01-02T09:00:00', null], ['2020-01-01T19:00:00', '2020-01-02T12:00:00', false, false, null, true, $jan2, null], - ['2020-01-01T19:00:00', '2020-01-02T12:00:00', false, false, null, false, '2020-01-02T12:00:00', DateComparison::ERROR_NOT_LESS], - ['2020-01-01T19:00:00', '2020-01-02T12:00:00', true, true, null, false, '2020-01-02T12:00:01', DateComparison::ERROR_NOT_LESS_INCLUSIVE], - ['2020-01-01T19:00:00', '2020-01-02T12:00:00', false, false, null, false, '2020-01-01T19:00:00', DateComparison::ERROR_NOT_GREATER], - ['2020-01-01T19:00:00', '2020-01-02T12:00:00', true, true, null, false, '2020-01-01T18:59:59', DateComparison::ERROR_NOT_GREATER_INCLUSIVE], + [ + '2020-01-01T19:00:00', + '2020-01-02T12:00:00', + false, + false, + null, + false, + '2020-01-02T12:00:00', + DateComparison::ERROR_NOT_LESS, + ], + [ + '2020-01-01T19:00:00', + '2020-01-02T12:00:00', + true, + true, + null, + false, + '2020-01-02T12:00:01', + DateComparison::ERROR_NOT_LESS_INCLUSIVE, + ], + [ + '2020-01-01T19:00:00', + '2020-01-02T12:00:00', + false, + false, + null, + false, + '2020-01-01T19:00:00', + DateComparison::ERROR_NOT_GREATER, + ], + [ + '2020-01-01T19:00:00', + '2020-01-02T12:00:00', + true, + true, + null, + false, + '2020-01-01T18:59:59', + DateComparison::ERROR_NOT_GREATER_INCLUSIVE, + ], // Lower bound only ['2020-01-01', null, true, true, null, true, '2045-01-01', null], ['2020-01-01', null, true, true, null, false, '2010-01-01', DateComparison::ERROR_NOT_GREATER_INCLUSIVE], @@ -93,10 +183,10 @@ public function testBasicFunctionality( string|DateTimeInterface|null $max, bool $inclusiveMin, bool $inclusiveMax, - string|null $format, + ?string $format, bool $expect, mixed $input, - string|null $errorKey, + ?string $errorKey, ): void { $validator = new DateComparison([ 'min' => $min, diff --git a/test/DateIntervalStringTest.php b/test/DateIntervalStringTest.php index fb4e4d89..5ab51489 100644 --- a/test/DateIntervalStringTest.php +++ b/test/DateIntervalStringTest.php @@ -27,7 +27,7 @@ public static function basicDataProvider(): array } #[DataProvider('basicDataProvider')] - public function testBasicBehaviour(mixed $value, bool $expect, string|null $errorKey): void + public function testBasicBehaviour(mixed $value, bool $expect, ?string $errorKey): void { $validator = new DateIntervalString(); self::assertSame($expect, $validator->isValid($value)); diff --git a/test/DateStepTest.php b/test/DateStepTest.php index 32994861..7bd1d827 100644 --- a/test/DateStepTest.php +++ b/test/DateStepTest.php @@ -31,60 +31,60 @@ public static function stepTestsDataProvider(): array { return [ // interval format baseValue value isValid - ['PT1S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:00:00Z', true], - ['PT1S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-03T00:00:00Z', true], - ['PT1S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:00:02Z', true], - ['PT2S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:00:01Z', false], - ['PT2S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:00:16Z', true], - ['PT2S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-03T00:00:00Z', true], + ['PT1S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:00:00Z', true], + ['PT1S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-03T00:00:00Z', true], + ['PT1S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:00:02Z', true], + ['PT2S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:00:01Z', false], + ['PT2S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:00:16Z', true], + ['PT2S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-03T00:00:00Z', true], // minutes - ['PT1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true], - ['PT1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:30Z', false], - ['PT1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:02:00Z', true], - ['PT2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:01:00Z', false], - ['PT2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:16:00Z', true], - ['PT2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true], - ['PT1M', 'H:i:s', '00:00:00', '12:34:00', true], - ['PT2M', 'H:i:s', '00:00:00', '12:34:00', true], - ['PT2M', 'H:i:s', '00:00:00', '12:35:00', false], + ['PT1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true], + ['PT1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:30Z', false], + ['PT1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:02:00Z', true], + ['PT2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:01:00Z', false], + ['PT2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T00:16:00Z', true], + ['PT2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true], + ['PT1M', 'H:i:s', '00:00:00', '12:34:00', true], + ['PT2M', 'H:i:s', '00:00:00', '12:34:00', true], + ['PT2M', 'H:i:s', '00:00:00', '12:35:00', false], // hours - ['PT1H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true], - ['PT1H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:30Z', false], - ['PT1H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T02:00:00Z', true], - ['PT2H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T01:00:00Z', false], - ['PT2H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T16:00:00Z', true], - ['PT2H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true], + ['PT1H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true], + ['PT1H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:30Z', false], + ['PT1H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T02:00:00Z', true], + ['PT2H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T01:00:00Z', false], + ['PT2H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-01T16:00:00Z', true], + ['PT2H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-01T00:00:00Z', true], // days - ['P1D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:00Z', true], - ['P1D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:30Z', false], - ['P1D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '2014-08-12T00:00:00Z', true], - ['P2D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-02T00:00:00Z', false], - ['P2D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-15T00:00:00Z', true], - ['P2D', DateTimeInterface::ATOM, '1971-01-01T00:00:00Z', '1973-01-01T00:00:00Z', false], - ['P2D', DateTimeInterface::ATOM, '2000-01-01T00:00:00Z', '2001-01-01T00:00:00Z', true], // leap year + ['P1D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:00Z', true], + ['P1D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:30Z', false], + ['P1D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '2014-08-12T00:00:00Z', true], + ['P2D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-02T00:00:00Z', false], + ['P2D', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-15T00:00:00Z', true], + ['P2D', DateTimeInterface::ATOM, '1971-01-01T00:00:00Z', '1973-01-01T00:00:00Z', false], + ['P2D', DateTimeInterface::ATOM, '2000-01-01T00:00:00Z', '2001-01-01T00:00:00Z', true], // leap year // weeks - ['P1W', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-29T00:00:00Z', true], + ['P1W', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-01-29T00:00:00Z', true], // months - ['P1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:00Z', true], - ['P1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:30Z', false], - ['P2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-02-01T00:00:00Z', false], - ['P2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1971-05-01T00:00:00Z', true], - ['P1M', 'Y-m', '1970-01', '1970-10', true], - ['P2M', '!Y-m', '1970-01', '1970-11', true], - ['P2M', 'Y-m', '1970-01', '1970-10', false], + ['P1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:00Z', true], + ['P1M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:30Z', false], + ['P2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-02-01T00:00:00Z', false], + ['P2M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1971-05-01T00:00:00Z', true], + ['P1M', 'Y-m', '1970-01', '1970-10', true], + ['P2M', '!Y-m', '1970-01', '1970-11', true], + ['P2M', 'Y-m', '1970-01', '1970-10', false], // years - ['P1Y', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:00Z', true], - ['P1Y', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:30Z', false], - ['P2Y', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1971-01-01T00:00:00Z', false], - ['P2Y', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1976-01-01T00:00:00Z', true], + ['P1Y', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:00Z', true], + ['P1Y', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1973-01-01T00:00:30Z', false], + ['P2Y', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1971-01-01T00:00:00Z', false], + ['P2Y', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1976-01-01T00:00:00Z', true], // complex ['P2M2DT12H', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-03T12:00:00Z', true], ['P2M2DT12M', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '1970-03-03T12:00:00Z', false], // long interval - ['PT1M20S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '2020-09-13T12:26:40Z', true], - ['PT1M20S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '2020-09-13T12:26:41Z', false], - ['P2W', 'Y-\WW', '1970-W01', '1973-W16', true], - ['P2W', 'Y-\WW', '1970-W01', '1973-W17', false], + ['PT1M20S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '2020-09-13T12:26:40Z', true], + ['PT1M20S', DateTimeInterface::ATOM, '1970-01-01T00:00:00Z', '2020-09-13T12:26:41Z', false], + ['P2W', 'Y-\WW', '1970-W01', '1973-W16', true], + ['P2W', 'Y-\WW', '1970-W01', '1973-W17', false], ]; } @@ -94,7 +94,7 @@ public function testDateStepValidation( string $format, string $baseValue, string $value, - bool $isValid + bool $isValid, ): void { $validator = new DateStep([ 'format' => $format, diff --git a/test/DateTest.php b/test/DateTest.php index eaf55ca5..d55c73c8 100644 --- a/test/DateTest.php +++ b/test/DateTest.php @@ -35,44 +35,44 @@ public static function datesDataProvider(): array { return [ // date format isValid isValid Strict - ['2007-01-01', null, true, true], - ['2007-02-28', null, true, true], - ['2007-02-29', null, false, false], - ['2008-02-29', null, true, true], - ['2007-02-30', null, false, false], - ['2007-02-99', null, false, false], - ['2007-02-99', 'Y-m-d', false, false], - ['9999-99-99', null, false, false], - ['9999-99-99', 'Y-m-d', false, false], - ['Jan 1 2007', null, false, false], - ['Jan 1 2007', 'M j Y', true, true], - ['asdasda', null, false, false], - ['sdgsdg', null, false, false], - ['2007-01-01something', null, false, false], - ['something2007-01-01', null, false, false], - ['10.01.2008', 'd.m.Y', true, true], - ['01 2010', 'm Y', true, true], - ['2008/10/22', 'd/m/Y', false, false], - ['22/10/08', 'd/m/y', true, true], - ['22/10', 'd/m/Y', false, false], + ['2007-01-01', null, true, true], + ['2007-02-28', null, true, true], + ['2007-02-29', null, false, false], + ['2008-02-29', null, true, true], + ['2007-02-30', null, false, false], + ['2007-02-99', null, false, false], + ['2007-02-99', 'Y-m-d', false, false], + ['9999-99-99', null, false, false], + ['9999-99-99', 'Y-m-d', false, false], + ['Jan 1 2007', null, false, false], + ['Jan 1 2007', 'M j Y', true, true], + ['asdasda', null, false, false], + ['sdgsdg', null, false, false], + ['2007-01-01something', null, false, false], + ['something2007-01-01', null, false, false], + ['10.01.2008', 'd.m.Y', true, true], + ['01 2010', 'm Y', true, true], + ['2008/10/22', 'd/m/Y', false, false], + ['22/10/08', 'd/m/y', true, true], + ['22/10', 'd/m/Y', false, false], // time - ['2007-01-01T12:02:55Z', DateTimeInterface::ATOM, true, false], - ['2007-01-01T12:02:55+0000', DateTimeInterface::ISO8601, true, true], - ['12:02:55', 'H:i:s', true, true], - ['25:02:55', 'H:i:s', false, false], + ['2007-01-01T12:02:55Z', DateTimeInterface::ATOM, true, false], + ['2007-01-01T12:02:55+0000', DateTimeInterface::ISO8601, true, true], + ['12:02:55', 'H:i:s', true, true], + ['25:02:55', 'H:i:s', false, false], // int - [0, null, true, false], - [6, 'd', true, false], - ['6', 'd', true, false], - ['06', 'd', true, true], - [123, null, true, false], - [1_340_677_235, null, true, false], - [1_340_677_235, 'U', true, false], - ['1340677235', 'U', true, true], + [0, null, true, false], + [6, 'd', true, false], + ['6', 'd', true, false], + ['06', 'd', true, true], + [123, null, true, false], + [1_340_677_235, null, true, false], + [1_340_677_235, 'U', true, false], + ['1340677235', 'U', true, true], // 32bit version of php will convert this to double - [999_999_999_999, null, true, false], + [999_999_999_999, null, true, false], // double - [12.12, null, false, false], + [12.12, null, false, false], // array [['2012', '06', '25'], null, true, false], // 0012-06-25 is a valid date, if you want 2012, use 'y' instead of 'Y' @@ -80,13 +80,13 @@ public static function datesDataProvider(): array [['2012', '06', '33'], null, false, false], [[1 => 1], null, false, false], // DateTime - [new DateTime(), null, true, false], + [new DateTime(), null, true, false], // invalid obj - [new stdClass(), null, false, false], + [new stdClass(), null, false, false], // Empty Values [[], null, false, false], - ['', null, false, false], - [null, null, false, false], + ['', null, false, false], + [null, null, false, false], ]; } @@ -125,12 +125,12 @@ public static function manualFormatProvider(): array { return [ ['d.m.Y', '10.01.2008', true], - ['m Y', '01 2010', true], + ['m Y', '01 2010', true], ['d/m/Y', '2008/10/22', false], - ['d/m/Y', '22/10/08', true], - ['d/m/Y', '22/10', false], - ['s', '00', true], - ['s', '0', false], + ['d/m/Y', '22/10/08', true], + ['d/m/Y', '22/10', false], + ['s', '00', true], + ['s', '0', false], ]; } diff --git a/test/DigitsTest.php b/test/DigitsTest.php index 2ed0889f..0a7d4e7c 100644 --- a/test/DigitsTest.php +++ b/test/DigitsTest.php @@ -35,22 +35,22 @@ public static function basicDataProvider(): array { return [ // phpcs:disable - 'invalid; starts with alphabetic chars' => ['abc123', false], + 'invalid; starts with alphabetic chars' => ['abc123', false], 'invalid; contains alphabetic chars and one whitespace' => ['abc 123', false], - 'invalid; contains only alphabetic chars' => ['abcxyz', false], + 'invalid; contains only alphabetic chars' => ['abcxyz', false], 'invalid; contains alphabetic and special chars' => ['AZ@#4.3', false], - 'invalid; string float' => ['1.23', false], - 'invalid; float' => [1.23, false], - 'Hex string' => ['0x9f', false], - 'Hex int' => [0x9f, true], - 'invalid; is empty' => ['', false], - 'Boolean' => [true, false], - 'Null' => [null, false], - 'Array' => [['123'], false], - - 'valid; is a normal integer' => ['123', true], - 'any integer' => [123, true], - 'valid; starts with a zero' => ['09', true], + 'invalid; string float' => ['1.23', false], + 'invalid; float' => [1.23, false], + 'Hex string' => ['0x9f', false], + 'Hex int' => [0x9f, true], + 'invalid; is empty' => ['', false], + 'Boolean' => [true, false], + 'Null' => [null, false], + 'Array' => [['123'], false], + + 'valid; is a normal integer' => ['123', true], + 'any integer' => [123, true], + 'valid; starts with a zero' => ['09', true], // phpcs:enable ]; } diff --git a/test/EmailAddressTest.php b/test/EmailAddressTest.php index 07451912..2c802997 100644 --- a/test/EmailAddressTest.php +++ b/test/EmailAddressTest.php @@ -74,7 +74,7 @@ public function testLocalDomainAllowed(): void */ public function testIPAllowed(): void { - $validator = new EmailAddress([ + $validator = new EmailAddress([ 'allow' => Hostname::ALLOW_DNS | Hostname::ALLOW_IP, ]); $valuesExpected = [ @@ -283,7 +283,9 @@ public static function invalidEmailAddresses(): array '.bobJones@studio24.com' => ['.bobJones@studio24.com'], 'bobJones.@studio24.com' => ['bobJones.@studio24.com'], 'bob.Jones.@studio24.com' => ['bob.Jones.@studio24.com'], - 'bob@verylongdomainsupercalifragilisticexpialidociousaspoonfulofsugar.com' => ['bob@verylongdomainsupercalifragilisticexpialidociousaspoonfulofsugar.com'], + 'bob@verylongdomainsupercalifragilisticexpialidociousaspoonfulofsugar.com' => [ + 'bob@verylongdomainsupercalifragilisticexpialidociousaspoonfulofsugar.com', + ], 'bob+domain.com' => ['bob+domain.com'], 'bob.domain.com' => ['bob.domain.com'], 'bob @domain.com' => ['bob @domain.com'], @@ -295,6 +297,7 @@ public static function invalidEmailAddresses(): array @domain.com'], ]; + // @codingStandardsIgnoreEnd } @@ -423,7 +426,7 @@ public function testHostnameSettings(): void } // Check no TLD matching - $validator = new EmailAddress([ + $validator = new EmailAddress([ 'hostnameValidator' => new Hostname([ 'useTldCheck' => false, ]), @@ -453,7 +456,7 @@ public function testHostnameValidatorMessagesShouldBeTranslated(): void $translations = [ 'hostnameIpAddressNotAllowed' => 'hostnameIpAddressNotAllowed translation', 'hostnameUnknownTld' => 'The input appears to be a DNS hostname ' - . 'but cannot match TLD against known list', + . 'but cannot match TLD against known list', 'hostnameDashCharacter' => 'hostnameDashCharacter translation', 'hostnameInvalidHostnameSchema' => 'hostnameInvalidHostnameSchema translation', 'hostnameUndecipherableTld' => 'hostnameUndecipherableTld translation', diff --git a/test/EnumCaseTest.php b/test/EnumCaseTest.php index 0b3c5d5c..1d86b2df 100644 --- a/test/EnumCaseTest.php +++ b/test/EnumCaseTest.php @@ -52,7 +52,7 @@ public static function basicProvider(): iterable /** @param class-string|class-string $enum */ #[DataProvider('basicProvider')] - public function testBasic(string $enum, mixed $value, bool $expect, string|null $errorKey): void + public function testBasic(string $enum, mixed $value, bool $expect, ?string $errorKey): void { $validator = new EnumCase(['enum' => $enum]); diff --git a/test/File/BytesTest.php b/test/File/BytesTest.php index a302c57a..383fe41a 100644 --- a/test/File/BytesTest.php +++ b/test/File/BytesTest.php @@ -17,12 +17,12 @@ final class BytesTest extends TestCase public static function bytesToSiUnitDataProvider(): array { return [ - [10, '10B'], - [1536, '1.5kB'], - [2_621_440, '2.5MB'], - [1_073_741_824, '1GB'], - [6_442_450_944, '6GB'], - [6_597_069_766_656, '6TB'], + [10, '10B'], + [1536, '1.5kB'], + [2_621_440, '2.5MB'], + [1_073_741_824, '1GB'], + [6_442_450_944, '6GB'], + [6_597_069_766_656, '6TB'], [6_755_399_441_055_744, '6PB'], ]; } @@ -37,24 +37,24 @@ public function testBytesToSiUnit(int $input, string $expect): void public static function siUnitToBytesProvider(): array { return [ - [10, '10b'], - [1536, '1.5kB'], - [2_621_440, '2.5MB'], - [1_073_741_824, '1GB'], - [6_442_450_944, '6GB'], - [6_597_069_766_656, '6TB'], - [10, '10 b'], - [1536, '1.5 kB'], - [1536, '1.5 kb'], - [2_621_440, '2.5 MB'], - [1_073_741_824, '1 GB'], - [6_442_450_944, '6 GB'], - [6_597_069_766_656, '6 TB'], - [6_755_399_441_055_744, '6 PB'], + [10, '10b'], + [1536, '1.5kB'], + [2_621_440, '2.5MB'], + [1_073_741_824, '1GB'], + [6_442_450_944, '6GB'], + [6_597_069_766_656, '6TB'], + [10, '10 b'], + [1536, '1.5 kB'], + [1536, '1.5 kb'], + [2_621_440, '2.5 MB'], + [1_073_741_824, '1 GB'], + [6_442_450_944, '6 GB'], + [6_597_069_766_656, '6 TB'], + [6_755_399_441_055_744, '6 PB'], [8_070_450_532_247_928_832, '7EB'], - [PHP_INT_MAX, '8EB'], - [PHP_INT_MAX, '1ZB'], - [PHP_INT_MAX, '10YB'], + [PHP_INT_MAX, '8EB'], + [PHP_INT_MAX, '1ZB'], + [PHP_INT_MAX, '10YB'], ]; } diff --git a/test/File/CountTest.php b/test/File/CountTest.php index 6df1b4b0..5916b834 100644 --- a/test/File/CountTest.php +++ b/test/File/CountTest.php @@ -155,7 +155,7 @@ public static function basicDataProvider(): iterable * @param OptionsArgument $options */ #[DataProvider('basicDataProvider')] - public function testBasic(array $options, mixed $value, bool $expect, string|null $errorKey): void + public function testBasic(array $options, mixed $value, bool $expect, ?string $errorKey): void { $validator = new Count($options); diff --git a/test/File/ExcludeExtensionTest.php b/test/File/ExcludeExtensionTest.php index c59d5f56..a51dde1f 100644 --- a/test/File/ExcludeExtensionTest.php +++ b/test/File/ExcludeExtensionTest.php @@ -118,7 +118,7 @@ public static function basicBehaviorDataProvider(): iterable * @param OptionsArgument $options */ #[DataProvider('basicBehaviorDataProvider')] - public function testBasic(array $options, mixed $value, bool $expected, string|null $messageKey): void + public function testBasic(array $options, mixed $value, bool $expected, ?string $messageKey): void { $validator = new ExcludeExtension($options); diff --git a/test/File/ExistsTest.php b/test/File/ExistsTest.php index 3a656c5d..6fdf8cf6 100644 --- a/test/File/ExistsTest.php +++ b/test/File/ExistsTest.php @@ -41,7 +41,7 @@ public static function basicBehaviorDataProvider(): array 'error' => UPLOAD_ERR_OK, 'type' => 'text', ]; - $psrUpload = new UploadedFile( + $psrUpload = new UploadedFile( $testFile, 200, UPLOAD_ERR_OK, @@ -58,21 +58,49 @@ public static function basicBehaviorDataProvider(): array $csv = implode(', ', $directoryList); return [ - 'String file name, not found in directory' => [['directory' => dirname($baseDir)], $baseName, false], + 'String file name, not found in directory' => [ + ['directory' => dirname($baseDir)], + $baseName, + false, + ], 'String file name, found in directory' => [['directory' => $baseDir], $baseName, true], 'String path, directory option irrelevant' => [['directory' => $baseDir], $testFile, true], 'String path, no directory option' => [[], $testFile, true], - '$_FILES with path. Not found in dir option' => [['directory' => dirname($baseDir)], $fileUpload, false], + '$_FILES with path. Not found in dir option' => [ + ['directory' => dirname($baseDir)], + $fileUpload, + false, + ], '$_FILES with path. No Directory option' => [[], $fileUpload, true], 'PSR with path. No Directory option' => [[], $psrUpload, true], - 'PSR with path. Not found in directory option' => [['directory' => '/home/whatever'], $psrUpload, false], - 'String filename, found in one of the listed dirs' => [['directory' => $directoryList, 'all' => false], 'picture.jpg', true], - 'String filename, found in one of CSV dirs' => [['directory' => $csv, 'all' => false], 'picture.jpg', true], - 'String filename, not found in all the listed dirs' => [['directory' => $directoryList], 'picture.jpg', false], + 'PSR with path. Not found in directory option' => [ + ['directory' => '/home/whatever'], + $psrUpload, + false, + ], + 'String filename, found in one of the listed dirs' => [ + ['directory' => $directoryList, 'all' => false], + 'picture.jpg', + true, + ], + 'String filename, found in one of CSV dirs' => [ + ['directory' => $csv, 'all' => false], + 'picture.jpg', + true, + ], + 'String filename, not found in all the listed dirs' => [ + ['directory' => $directoryList], + 'picture.jpg', + false, + ], 'String filename, not found in all the CSV dirs' => [['directory' => $csv], 'picture.jpg', false], - 'String filename, not found in any of the listed dirs' => [['directory' => $directoryList], 'nope.jpg', false], + 'String filename, not found in any of the listed dirs' => [ + ['directory' => $directoryList], + 'nope.jpg', + false, + ], 'String filename, not found in CSV dirs' => [['directory' => $csv], 'nope.jpg', false], - 'Not a string, can’t exist' => [['directory' => __DIR__], 123, false], + 'Not a string, can’t exist' => [['directory' => __DIR__], 123, false], ]; } diff --git a/test/File/ExtensionTest.php b/test/File/ExtensionTest.php index 7024b0e3..016ada6f 100644 --- a/test/File/ExtensionTest.php +++ b/test/File/ExtensionTest.php @@ -132,7 +132,7 @@ public static function basicBehaviorDataProvider(): iterable * @param OptionsArgument $options */ #[DataProvider('basicBehaviorDataProvider')] - public function testBasic(array $options, mixed $value, bool $expected, string|null $messageKey): void + public function testBasic(array $options, mixed $value, bool $expected, ?string $messageKey): void { $validator = new Extension($options); diff --git a/test/File/FilesSizeTest.php b/test/File/FilesSizeTest.php index f3bfbe98..19b4e3ec 100644 --- a/test/File/FilesSizeTest.php +++ b/test/File/FilesSizeTest.php @@ -62,15 +62,15 @@ public static function basicDataProvider(): array { return [ // phpcs:disable - 'minimum: 0 byte; maximum: 500 bytes; integer' => [['max' => 500], false, false, false], - 'minimum: 0 byte; maximum: 500 bytes; array' => [['min' => 0, 'max' => 500], false, false, false], - 'minimum: 0 byte; maximum: 2000 bytes; integer' => [['max' => 2000], true, true, false], - 'minimum: 0 byte; maximum: 2000 bytes; array' => [['min' => 0, 'max' => 2000], true, true, false], - 'minimum: 0 byte; maximum: 500 kilobytes' => [['min' => 0, 'max' => 500000], true, true, true], - 'minimum: 0 byte; maximum: 2 megabytes; 2 MB' => [['min' => 0, 'max' => '2 MB'], true, true, true], - 'minimum: 0 byte; maximum: 2 megabytes; 2MB' => [['min' => 0, 'max' => '2MB'], true, true, true], - 'minimum: 0 byte; maximum: 2 megabytes; 2 MB' => [['min' => 0, 'max' => '2 MB'], true, true, true], - 'minimum: 1k; maximum: 2 megabytes; 2 MB' => [['min' => '1k', 'max' => '2 MB'], true, true, true], + 'minimum: 0 byte; maximum: 500 bytes; integer' => [['max' => 500], false, false, false], + 'minimum: 0 byte; maximum: 500 bytes; array' => [['min' => 0, 'max' => 500], false, false, false], + 'minimum: 0 byte; maximum: 2000 bytes; integer' => [['max' => 2000], true, true, false], + 'minimum: 0 byte; maximum: 2000 bytes; array' => [['min' => 0, 'max' => 2000], true, true, false], + 'minimum: 0 byte; maximum: 500 kilobytes' => [['min' => 0, 'max' => 500000], true, true, true], + 'minimum: 0 byte; maximum: 2 megabytes; 2 MB' => [['min' => 0, 'max' => '2 MB'], true, true, true], + 'minimum: 0 byte; maximum: 2 megabytes; 2MB' => [['min' => 0, 'max' => '2MB'], true, true, true], + 'minimum: 0 byte; maximum: 2 megabytes; 2 MB' => [['min' => 0, 'max' => '2 MB'], true, true, true], + 'minimum: 1k; maximum: 2 megabytes; 2 MB' => [['min' => '1k', 'max' => '2 MB'], true, true, true], // phpcs:enable ]; } diff --git a/test/File/HashTest.php b/test/File/HashTest.php index 115bed58..fd7afaf0 100644 --- a/test/File/HashTest.php +++ b/test/File/HashTest.php @@ -186,7 +186,7 @@ public static function optionsOrderProvider(): Generator 'hash' => $hash, ], ]; - yield $algo . ' hash first' => [ + yield $algo . ' hash first' => [ 'options' => [ 'hash' => $hash, 'algorithm' => $algo, diff --git a/test/File/ImageSizeTest.php b/test/File/ImageSizeTest.php index 831e146a..95a65316 100644 --- a/test/File/ImageSizeTest.php +++ b/test/File/ImageSizeTest.php @@ -37,49 +37,49 @@ public static function basicBehaviorDataProvider(): array $testFile = __DIR__ . '/_files/picture.jpg'; $pictureTests = [ [ - ['minWidth' => 0, 'minHeight' => 10, 'maxWidth' => 1000, 'maxHeight' => 2000], + ['minWidth' => 0, 'minHeight' => 10, 'maxWidth' => 1000, 'maxHeight' => 2000], $testFile, true, null, ], [ - ['minWidth' => 0, 'minHeight' => 0, 'maxWidth' => 200, 'maxHeight' => 200], + ['minWidth' => 0, 'minHeight' => 0, 'maxWidth' => 200, 'maxHeight' => 200], $testFile, true, null, ], [ - ['minWidth' => 150, 'minHeight' => 150, 'maxWidth' => 200, 'maxHeight' => 200], + ['minWidth' => 150, 'minHeight' => 150, 'maxWidth' => 200, 'maxHeight' => 200], $testFile, false, [ImageSize::WIDTH_TOO_SMALL, ImageSize::HEIGHT_TOO_SMALL], ], [ - ['minWidth' => 80, 'minHeight' => 0, 'maxWidth' => 80, 'maxHeight' => 200], + ['minWidth' => 80, 'minHeight' => 0, 'maxWidth' => 80, 'maxHeight' => 200], $testFile, true, null, ], [ - ['minWidth' => 0, 'minHeight' => 0, 'maxWidth' => 60, 'maxHeight' => 200], + ['minWidth' => 0, 'minHeight' => 0, 'maxWidth' => 60, 'maxHeight' => 200], $testFile, false, [ImageSize::WIDTH_TOO_BIG], ], [ - ['minWidth' => 90, 'minHeight' => 0, 'maxWidth' => 200, 'maxHeight' => 200], + ['minWidth' => 90, 'minHeight' => 0, 'maxWidth' => 200, 'maxHeight' => 200], $testFile, false, [ImageSize::WIDTH_TOO_SMALL], ], [ - ['minWidth' => 0, 'minHeight' => 0, 'maxWidth' => 200, 'maxHeight' => 80], + ['minWidth' => 0, 'minHeight' => 0, 'maxWidth' => 200, 'maxHeight' => 80], $testFile, false, [ImageSize::HEIGHT_TOO_BIG], ], [ - ['minWidth' => 0, 'minHeight' => 110, 'maxWidth' => 200, 'maxHeight' => 140], + ['minWidth' => 0, 'minHeight' => 110, 'maxWidth' => 200, 'maxHeight' => 140], $testFile, false, [ImageSize::HEIGHT_TOO_SMALL], @@ -143,7 +143,7 @@ public static function basicBehaviorDataProvider(): array * @param list|null $messageKeys */ #[DataProvider('basicBehaviorDataProvider')] - public function testBasic(array $options, mixed $isValidParam, bool $expected, array|null $messageKeys): void + public function testBasic(array $options, mixed $isValidParam, bool $expected, ?array $messageKeys): void { $validator = new ImageSize($options); diff --git a/test/File/MimeTypeTest.php b/test/File/MimeTypeTest.php index 7319b16a..f109a287 100644 --- a/test/File/MimeTypeTest.php +++ b/test/File/MimeTypeTest.php @@ -39,7 +39,7 @@ public static function basicBehaviorDataProvider(): array 'error' => UPLOAD_ERR_OK, 'type' => 'image/jpg', ]; - $upload = new UploadedFile( + $upload = new UploadedFile( $testFile, 200, UPLOAD_ERR_OK, diff --git a/test/File/NotExistsTest.php b/test/File/NotExistsTest.php index aec31c37..6b61dc0b 100644 --- a/test/File/NotExistsTest.php +++ b/test/File/NotExistsTest.php @@ -40,7 +40,7 @@ public static function basicBehaviorDataProvider(): array 'error' => UPLOAD_ERR_OK, 'type' => 'text', ]; - $psrUpload = new UploadedFile( + $psrUpload = new UploadedFile( $testFile, 200, UPLOAD_ERR_OK, @@ -57,21 +57,41 @@ public static function basicBehaviorDataProvider(): array $csv = implode(', ', $directoryList); return [ - 'String file name, not found in directory' => [['directory' => dirname($baseDir)], $baseName, true], + 'String file name, not found in directory' => [ + ['directory' => dirname($baseDir)], + $baseName, + true, + ], 'String file name, found in directory' => [['directory' => $baseDir], $baseName, false], 'String path, directory option irrelevant' => [['directory' => $baseDir], $testFile, false], 'String path, no directory option' => [[], $testFile, false], '$_FILES. No directory option' => [[], $fileUpload, false], '$_FILES. Basename located in directory' => [['directory' => $baseDir], $fileUpload, false], - '$_FILES. Basename not located in directory' => [['directory' => dirname($baseDir)], $fileUpload, true], + '$_FILES. Basename not located in directory' => [ + ['directory' => dirname($baseDir)], + $fileUpload, + true, + ], 'PSR. No Directory option' => [[], $psrUpload, false], 'PSR. Basename located in directory' => [['directory' => $baseDir], $psrUpload, false], - 'PSR. Basename not located in directory' => [['directory' => dirname($baseDir)], $psrUpload, true], - 'String filename, found in one of the listed dirs' => [['directory' => $directoryList], 'picture.jpg', false], + 'PSR. Basename not located in directory' => [ + ['directory' => dirname($baseDir)], + $psrUpload, + true, + ], + 'String filename, found in one of the listed dirs' => [ + ['directory' => $directoryList], + 'picture.jpg', + false, + ], 'String filename, found in CSV dirs' => [['directory' => $csv], 'picture.jpg', false], - 'String filename, not found in one of the listed dirs' => [['directory' => $directoryList], 'nope.jpg', true], + 'String filename, not found in one of the listed dirs' => [ + ['directory' => $directoryList], + 'nope.jpg', + true, + ], 'String filename, not found in CSV dirs' => [['directory' => $csv], 'nope.jpg', true], - 'Not a string, can’t exist' => [['directory' => __DIR__], 123, true], + 'Not a string, can’t exist' => [['directory' => __DIR__], 123, true], ]; } diff --git a/test/File/UploadFileTest.php b/test/File/UploadFileTest.php index 4f5c4a93..22d7afe9 100644 --- a/test/File/UploadFileTest.php +++ b/test/File/UploadFileTest.php @@ -36,8 +36,8 @@ protected function setUp(): void */ public static function uploadErrorsTestDataProvider(): array { - $data = []; - $errorTypes = [ + $data = []; + $errorTypes = [ 0 => 'fileUploadFileErrorAttack', 1 => 'fileUploadFileErrorIniSize', 2 => 'fileUploadFileErrorFormSize', diff --git a/test/GPSPointTest.php b/test/GPSPointTest.php index dab43bd6..85637ea1 100644 --- a/test/GPSPointTest.php +++ b/test/GPSPointTest.php @@ -29,10 +29,10 @@ public function testBasic(string $gpsPoint): void public static function boundariesProvider(): array { return [ - ['181.8897,-77.0089', false], - ['38.8897,-181.0089', false], + ['181.8897,-77.0089', false], + ['38.8897,-181.0089', false], ['-181.8897,-77.0089', false], - ['38.8897,181.0089', false], + ['38.8897,181.0089', false], ]; } @@ -73,12 +73,12 @@ public static function basicDataProvider(): array public static function errorMessageTestValues(): array { return [ - ['63 47 24.691 N, 18 2 54.363 W', GpsPoint::OUT_OF_BOUNDS, '63 47 24.691 N'], - ['65° 4\' N,-22.728867530822754', GpsPoint::CONVERT_ERROR, '65° 4\' N'], - ['° \' " N,° \' " E', GpsPoint::CONVERT_ERROR, '° \' " N'], - ['° \' " N', GpsPoint::INCOMPLETE_COORDINATE, '° \' " N'], - ['foo,bar', GpsPoint::CONVERT_ERROR, 'foo'], - [' ,-22.4', GpsPoint::CONVERT_ERROR, ' '], + ['63 47 24.691 N, 18 2 54.363 W', GpsPoint::OUT_OF_BOUNDS, '63 47 24.691 N'], + ['65° 4\' N,-22.728867530822754', GpsPoint::CONVERT_ERROR, '65° 4\' N'], + ['° \' " N,° \' " E', GpsPoint::CONVERT_ERROR, '° \' " N'], + ['° \' " N', GpsPoint::INCOMPLETE_COORDINATE, '° \' " N'], + ['foo,bar', GpsPoint::CONVERT_ERROR, 'foo'], + [' ,-22.4', GpsPoint::CONVERT_ERROR, ' '], ]; } } diff --git a/test/HexTest.php b/test/HexTest.php index 1283fa36..5548ce3e 100644 --- a/test/HexTest.php +++ b/test/HexTest.php @@ -20,7 +20,7 @@ protected function setUp(): void } #[DataProvider('basicDataProvider')] - public function testBasic(mixed $input, bool $expected, string|null $errorKey): void + public function testBasic(mixed $input, bool $expected, ?string $errorKey): void { self::assertSame($expected, $this->validator->isValid($input)); if ($errorKey === null) { diff --git a/test/HostnameTest.php b/test/HostnameTest.php index 3da5a9b9..f3a96a32 100644 --- a/test/HostnameTest.php +++ b/test/HostnameTest.php @@ -100,15 +100,47 @@ public function testCombination(int $allow, bool $expected, string $hostname): v public static function combinationDataProvider(): array { return [ - 'dns or local succeeds for domain.com' => [Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, true, 'domain.com'], - 'dns or local succeeds for localhost' => [Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, true, 'localhost'], - 'dns or local succeeds for local.localhost' => [Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, true, 'local.localhost'], - 'dns or local fails for 1.2.3.4' => [Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, false, '1.2.3.4'], - 'dns or local fails for 255.255.255.255' => [Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, false, '255.255.255.255'], + 'dns or local succeeds for domain.com' => [ + Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, + true, + 'domain.com', + ], + 'dns or local succeeds for localhost' => [ + Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, + true, + 'localhost', + ], + 'dns or local succeeds for local.localhost' => [ + Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, + true, + 'local.localhost', + ], + 'dns or local fails for 1.2.3.4' => [ + Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, + false, + '1.2.3.4', + ], + 'dns or local fails for 255.255.255.255' => [ + Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL, + false, + '255.255.255.255', + ], 'dns or ip succeeds for 1.2.3.4' => [Hostname::ALLOW_DNS | Hostname::ALLOW_IP, true, '1.2.3.4'], - 'dns or ip succeeds for 255.255.255.255' => [Hostname::ALLOW_DNS | Hostname::ALLOW_IP, true, '255.255.255.255'], - 'dns or ip fails for localhost' => [Hostname::ALLOW_DNS | Hostname::ALLOW_IP, false, 'localhost'], - 'dns or ip fails for local.localhost' => [Hostname::ALLOW_DNS | Hostname::ALLOW_IP, false, 'local.localhost'], + 'dns or ip succeeds for 255.255.255.255' => [ + Hostname::ALLOW_DNS | Hostname::ALLOW_IP, + true, + '255.255.255.255', + ], + 'dns or ip fails for localhost' => [ + Hostname::ALLOW_DNS | Hostname::ALLOW_IP, + false, + 'localhost', + ], + 'dns or ip fails for local.localhost' => [ + Hostname::ALLOW_DNS | Hostname::ALLOW_IP, + false, + 'local.localhost', + ], ]; } @@ -167,8 +199,10 @@ public static function domainsWithUnderscores(): array * Ensure the underscore character tests work as expected when not using tld check */ #[DataProvider('domainsWithUnderscores')] - public function testValidatorHandlesUnderscoresInDomainsWithoutTldCheckCorrectly(string $input, bool $expected): void - { + public function testValidatorHandlesUnderscoresInDomainsWithoutTldCheckCorrectly( + string $input, + bool $expected, + ): void { $validator = new Hostname([ 'useTldCheck' => false, 'allow' => Hostname::ALLOW_DNS, @@ -195,26 +229,26 @@ public function testIdnMatching(string $input, bool $expected): void public static function idnMatchingDataProvider(): array { return [ - ['bürger.de', true], - ['bÜrger.de', true], - ['hãllo.de', true], - ['hãllo.de', true], - ['hållo.se', true], - ['hÅllo.se', true], - ['bürger.com', true], - ['bÜrger.com', true], - ['hãllo.com', true], - ['hÃllo.com', true], - ['hållo.com', true], - ['hÅllo.com', true], + ['bürger.de', true], + ['bÜrger.de', true], + ['hãllo.de', true], + ['hãllo.de', true], + ['hållo.se', true], + ['hÅllo.se', true], + ['bürger.com', true], + ['bÜrger.com', true], + ['hãllo.com', true], + ['hÃllo.com', true], + ['hållo.com', true], + ['hÅllo.com', true], ['plekitööd.ee', true], ['plekitÖÖd.ee', true], - ['hãllo.lt', false], - ['bürger.lt', false], - ['hãllo.lt', false], - ['hãllo.se', false], - ['bürger.lt', false], - ['hãllo.uk', false], + ['hãllo.lt', false], + ['bürger.lt', false], + ['hãllo.lt', false], + ['hãllo.se', false], + ['bürger.lt', false], + ['hãllo.uk', false], ]; } @@ -265,12 +299,12 @@ public function testTldMatching(string $input, bool $expected): void public static function tldMatchingDataProvider(): array { return [ - ['domain.co.uk', true], + ['domain.co.uk', true], ['domain.uk.com', true], - ['domain.tl', true], - ['domain.zw', true], - ['domain.xx', false], - ['domain.zz', false], + ['domain.tl', true], + ['domain.zw', true], + ['domain.xx', false], + ['domain.zz', false], ['domain.madeup', false], ]; } @@ -319,7 +353,7 @@ public function testValidatorMessagesShouldBeTranslated(): void $translations = [ Hostname::INVALID_LOCAL_NAME => 'The input does not appear to be a valid local network name', ]; - $translator = new Translator($translations); + $translator = new Translator($translations); $this->validator->setTranslator($translator); $this->validator->isValid('0.239,512.777'); @@ -351,11 +385,11 @@ public static function numberNamesDataProvider(): array { return [ ['www.danger1.com', true], - ['danger.com', true], - ['www.danger.com', true], - ['www.danger1com', false], - ['dangercom', false], - ['www.dangercom', false], + ['danger.com', true], + ['www.danger.com', true], + ['www.danger1com', false], + ['dangercom', false], + ['www.dangercom', false], ]; } @@ -372,11 +406,11 @@ public function testPunycodeDecoding(string $input, bool $expected): void public static function punyCodeDecodingDataProvider(): array { return [ - ['xn--brger-kva.com', true], + ['xn--brger-kva.com', true], ['xn--eckwd4c7cu47r2wf.jp', true], - ['xn--brger-x45d2va.com', false], - ['xn--bürger.com', false], - ['xn--', false], + ['xn--brger-x45d2va.com', false], + ['xn--bürger.com', false], + ['xn--', false], ]; } @@ -464,7 +498,10 @@ public static function uriDataProvider(): array ['don?t.know', false], // phpcs:ignore - ['thisisaverylonghostnamewhichextendstwohundredfiftysixcharactersandthereforshouldnotbeallowedbythisvalidatorbecauserfc3986limitstheallowedcharacterstoalimitoftwohunderedfiftysixcharactersinsumbutifthistestwouldfailthenitshouldreturntruewhichthrowsanexceptionbytheunittest', false], + [ + 'thisisaverylonghostnamewhichextendstwohundredfiftysixcharactersandthereforshouldnotbeallowedbythisvalidatorbecauserfc3986limitstheallowedcharacterstoalimitoftwohunderedfiftysixcharactersinsumbutifthistestwouldfailthenitshouldreturntruewhichthrowsanexceptionbytheunittest', + false, + ], ]; } @@ -560,10 +597,10 @@ public static function idnilDataProvider(): array { return [ ['xn----zhcbgfhe2aacg8fb5i.org.il', true], - ['מבחן.il', true], - ['מבחן123.il', true], - ['tבדיקה123.il', false], - ['رات.il', false], + ['מבחן.il', true], + ['מבחן123.il', true], + ['tבדיקה123.il', false], + ['رات.il', false], ]; } @@ -595,6 +632,7 @@ public static function validTLDHostnames(): array 'UTF-8 label + UTF-8 TLD (cyrillic)' => ['тест.рф'], 'Punycoded label + Punycoded TLD (cyrillic)' => ['xn--e1aybc.xn--p1ai'], ]; + // @codingStandardsIgnoreEnd } @@ -615,10 +653,13 @@ public static function invalidTLDHostnames(): array // @codingStandardsIgnoreStart return [ 'Invalid mix of UTF-8 and ASCII in label' => ['சோதனை3.இலங்கை'], - 'Invalid mix of UTF-8 and ASCII in label (Punycoded)' => ['xn--3-owe4au9mpa.xn--xkc2al3hye2a'], + 'Invalid mix of UTF-8 and ASCII in label (Punycoded)' => [ + 'xn--3-owe4au9mpa.xn--xkc2al3hye2a', + ], 'Invalid use of non-cyrillic characters with cyrillic TLD' => ['رات.мон'], 'Invalid use of non-cyrillic characters with cyrillic TLD (Punycoded)' => ['xn--mgbgt.xn--l1acc'], ]; + // @codingStandardsIgnoreEnd } @@ -643,10 +684,10 @@ public function testHostnameWithOnlyIpChars(): void public static function cnHostnamesProvider(): array { return [ - ['google.cn', true], - ['something,.cn', false], // #181 + ['google.cn', true], + ['something,.cn', false], // #181 ['https://testtest.cn', false], // #181 - ['例子.cn', true], // regex should allow chinese characters + ['例子.cn', true], // regex should allow chinese characters ]; } @@ -662,7 +703,7 @@ public function testCnHostnames(string $hostname, bool $isValid): void public static function bizHostnamesProvider(): array { return [ - ['google.biz', true], + ['google.biz', true], ['tapi4457@hsoqvf.biz', false], // #8 ]; } diff --git a/test/IbanTest.php b/test/IbanTest.php index 5893cdb6..45cd0a7e 100644 --- a/test/IbanTest.php +++ b/test/IbanTest.php @@ -21,76 +21,76 @@ final class IbanTest extends TestCase public static function ibanDataProvider(): array { return [ - ['AD1200012030200359100100', true], - ['AT611904300234573201', true], - ['AT61 1904 3002 3457 3201', true], - ['AD1200012030200354100100', false], - ['AL47212110090000000235698741', true], - ['AD1200012030200359100100', true], - ['AT611904300234573201', true], - ['AZ21NABZ00000000137010001944', true], - ['BH67BMAG00001299123456', true], - ['BE68539007547034', true], - ['BA391290079401028494', true], - ['BG80BNBG96611020345678', true], - ['CR0515202001026284066', true], - ['HR1210010051863000160', true], - ['CY17002001280000001200527600', true], - ['CZ6508000000192000145399', true], - ['DK5000400440116243', true], - ['DO28BAGR00000001212453611324', true], - ['EE382200221020145685', true], - ['FO6264600001631634', true], - ['FI2112345600000785', true], - ['FR1420041010050500013M02606', true], - ['GE29NB0000000101904917', true], - ['DE89370400440532013000', true], - ['GI75NWBK000000007099453', true], - ['GR1601101250000000012300695', true], - ['GL8964710001000206', true], - ['GT82TRAJ01020000001210029690', true], - ['HU42117730161111101800000000', true], - ['IS140159260076545510730339', true], - ['IE29AIBK93115212345678', true], - ['IL620108000000099999999', true], - ['IT60X0542811101000000123456', true], - ['KZ86125KZT5004100100', true], - ['KW81CBKU0000000000001234560101', true], - ['LV80BANK0000435195001', true], - ['LB62099900000001001901229114', true], - ['LI21088100002324013AA', true], - ['LT121000011101001000', true], - ['LU280019400644750000', true], - ['MK07250120000058984', true], + ['AD1200012030200359100100', true], + ['AT611904300234573201', true], + ['AT61 1904 3002 3457 3201', true], + ['AD1200012030200354100100', false], + ['AL47212110090000000235698741', true], + ['AD1200012030200359100100', true], + ['AT611904300234573201', true], + ['AZ21NABZ00000000137010001944', true], + ['BH67BMAG00001299123456', true], + ['BE68539007547034', true], + ['BA391290079401028494', true], + ['BG80BNBG96611020345678', true], + ['CR0515202001026284066', true], + ['HR1210010051863000160', true], + ['CY17002001280000001200527600', true], + ['CZ6508000000192000145399', true], + ['DK5000400440116243', true], + ['DO28BAGR00000001212453611324', true], + ['EE382200221020145685', true], + ['FO6264600001631634', true], + ['FI2112345600000785', true], + ['FR1420041010050500013M02606', true], + ['GE29NB0000000101904917', true], + ['DE89370400440532013000', true], + ['GI75NWBK000000007099453', true], + ['GR1601101250000000012300695', true], + ['GL8964710001000206', true], + ['GT82TRAJ01020000001210029690', true], + ['HU42117730161111101800000000', true], + ['IS140159260076545510730339', true], + ['IE29AIBK93115212345678', true], + ['IL620108000000099999999', true], + ['IT60X0542811101000000123456', true], + ['KZ86125KZT5004100100', true], + ['KW81CBKU0000000000001234560101', true], + ['LV80BANK0000435195001', true], + ['LB62099900000001001901229114', true], + ['LI21088100002324013AA', true], + ['LT121000011101001000', true], + ['LU280019400644750000', true], + ['MK07250120000058984', true], ['MT84MALT011000012345MTLCAST001S', true], - ['MR1300020001010000123456753', true], - ['MU17BOMM0101101030300200000MUR', true], - ['MD24AG000225100013104168', true], - ['MC5811222000010123456789030', true], - ['ME25505000012345678951', true], - ['NL91ABNA0417164300', true], - ['NO9386011117947', true], - ['PK36SCBL0000001123456702', true], - ['PL61109010140000071219812874', true], - ['PT50000201231234567890154', true], - ['RO49AAAA1B31007593840000', true], - ['SM86U0322509800000000270100', true], - ['SA0380000000608010167519', true], - ['RS35260005601001611379', true], - ['SK3112000000198742637541', true], - ['SI56191000000123438', true], - ['ES9121000418450200051332', true], - ['SE4550000000058398257466', true], - ['CH9300762011623852957', true], - ['TN5910006035183598478831', true], - ['TR330006100519786457841326', true], - ['AE070331234567890123456', true], - ['GB29NWBK60161331926819', true], - ['VG96VPVG0000012345678901', true], - ['DO17552081023122561803924090', true], - ['SM76P0854009812123456789123', true], - ['HR1723600001101234565', true], - ['UA213223130000026007233566001', true], + ['MR1300020001010000123456753', true], + ['MU17BOMM0101101030300200000MUR', true], + ['MD24AG000225100013104168', true], + ['MC5811222000010123456789030', true], + ['ME25505000012345678951', true], + ['NL91ABNA0417164300', true], + ['NO9386011117947', true], + ['PK36SCBL0000001123456702', true], + ['PL61109010140000071219812874', true], + ['PT50000201231234567890154', true], + ['RO49AAAA1B31007593840000', true], + ['SM86U0322509800000000270100', true], + ['SA0380000000608010167519', true], + ['RS35260005601001611379', true], + ['SK3112000000198742637541', true], + ['SI56191000000123438', true], + ['ES9121000418450200051332', true], + ['SE4550000000058398257466', true], + ['CH9300762011623852957', true], + ['TN5910006035183598478831', true], + ['TR330006100519786457841326', true], + ['AE070331234567890123456', true], + ['GB29NWBK60161331926819', true], + ['VG96VPVG0000012345678901', true], + ['DO17552081023122561803924090', true], + ['SM76P0854009812123456789123', true], + ['HR1723600001101234565', true], + ['UA213223130000026007233566001', true], ]; } @@ -105,7 +105,7 @@ public function testBasic(string $iban, bool $expected): void self::assertSame( $expected, $validator->isValid($iban), - implode("\n", array_merge($validator->getMessages())) + implode("\n", array_merge($validator->getMessages())), ); } @@ -153,11 +153,11 @@ public static function invalidValues(): array return [ 'null' => [null, IbanValidator::FALSEFORMAT], 'true' => [true, IbanValidator::FALSEFORMAT], - 'false' => [false, IbanValidator::FALSEFORMAT], - 'zero' => [0, IbanValidator::FALSEFORMAT], - 'int' => [1, IbanValidator::FALSEFORMAT], - 'zero-float' => [0.0, IbanValidator::FALSEFORMAT], - 'float' => [1.1, IbanValidator::FALSEFORMAT], + 'false' => [false, IbanValidator::FALSEFORMAT], + 'zero' => [0, IbanValidator::FALSEFORMAT], + 'int' => [1, IbanValidator::FALSEFORMAT], + 'zero-float' => [0.0, IbanValidator::FALSEFORMAT], + 'float' => [1.1, IbanValidator::FALSEFORMAT], 'array' => [['foo'], IbanValidator::FALSEFORMAT], 'object' => [(object) [], IbanValidator::FALSEFORMAT], 'Not match regex' => ['GB123', IbanValidator::FALSEFORMAT], diff --git a/test/IdenticalTest.php b/test/IdenticalTest.php index 2235875d..9165e8e4 100644 --- a/test/IdenticalTest.php +++ b/test/IdenticalTest.php @@ -73,17 +73,17 @@ public function testValidatingStringTokenInContext(): void self::assertTrue($validator->isValid( 'john@doe.com', - ['email' => 'john@doe.com'] + ['email' => 'john@doe.com'], )); self::assertFalse($validator->isValid( 'john@doe.com', - ['email' => 'harry@hoe.com'] + ['email' => 'harry@hoe.com'], )); self::assertFalse($validator->isValid( 'harry@hoe.com', - ['email' => 'john@doe.com'] + ['email' => 'john@doe.com'], )); } @@ -97,7 +97,7 @@ public function testValidatingArrayTokenInContext(): void 'user' => [ 'email' => 'john@doe.com', ], - ] + ], )); self::assertFalse($validator->isValid( @@ -106,7 +106,7 @@ public function testValidatingArrayTokenInContext(): void 'user' => [ 'email' => 'harry@hoe.com', ], - ] + ], )); self::assertFalse($validator->isValid( @@ -115,7 +115,7 @@ public function testValidatingArrayTokenInContext(): void 'user' => [ 'email' => 'john@doe.com', ], - ] + ], )); } @@ -145,7 +145,7 @@ public function testLiteralParameterWorksWhenContextIsProvided(): void self::assertTrue($validator->isValid( ['foo' => 'bar'], - ['foo' => 'baz'] // Provide a context to make sure the literal parameter will work + ['foo' => 'baz'], // Provide a context to make sure the literal parameter will work )); } } diff --git a/test/InArrayTest.php b/test/InArrayTest.php index c3bf11d6..3f84c51c 100644 --- a/test/InArrayTest.php +++ b/test/InArrayTest.php @@ -20,7 +20,7 @@ protected function setUp(): void $this->validator = new InArray( [ 'haystack' => [1, 2, 3], - ] + ], ); } @@ -104,7 +104,7 @@ public function testGivingOptionsAsArrayAtInitiation(): void $validator = new InArray( [ 'haystack' => [1, 'a', 2.3], - ] + ], ); self::assertTrue($validator->isValid(1)); @@ -121,7 +121,7 @@ public function testNonStrictSafeComparisons(): void $validator = new InArray( [ 'haystack' => ['test', 0, 'A', 1, 0.0], - ] + ], ); self::assertFalse($validator->isValid('b')); @@ -138,7 +138,7 @@ public function testStrictComparisons(): void [ 'haystack' => ['test', 0, 'A', 1, 0.0], 'strict' => InArray::COMPARE_STRICT, - ] + ], ); self::assertTrue($validator->isValid('A')); @@ -155,7 +155,7 @@ public function testNonStrictComparisons(): void [ 'haystack' => ['test', 0, 'A', 1, 0.0], 'strict' => InArray::COMPARE_NOT_STRICT, - ] + ], ); self::assertTrue($validator->isValid('b')); @@ -324,7 +324,7 @@ public function testSettingStrictViaInitiation(): void [ 'haystack' => ['test', 0, 'A'], 'strict' => true, - ] + ], ); self::assertTrue($validator->isValid(0)); diff --git a/test/IpTest.php b/test/IpTest.php index 1996a2f4..260f5d99 100644 --- a/test/IpTest.php +++ b/test/IpTest.php @@ -322,43 +322,43 @@ public static function iPvFutureAddressesProvider(): array { return [ ["[v1.09azAZ-._~!$&'()*+,;=:]:80", false], - ["[v1.09azAZ-._~!$&'()*+,;=:]", true], - ["[v1.09azAZ-._~!$&'()*+,;=:", false], - ["v1.09azAZ-._~!$&'()*+,;=:]", false], - ["v1.09azAZ-._~!$&'()*+,;=:", true], - ["v1.09azAZ-._~!$&'()*+,;=", true], - ["v1.09azAZ-._~!$&'()*+,;", true], - ["v1.09azAZ-._~!$&'()*+,", true], - ["v1.09azAZ-._~!$&'()*+", true], - ["v1.09azAZ-._~!$&'()*", true], - ["v1.09azAZ-._~!$&'()", true], - ["v1.09azAZ-._~!$&'(", true], - ["v1.09azAZ-._~!$&'", true], - ['v1.09azAZ-._~!$&', true], - ['v1.09azAZ-._~!$', true], - ['v1.09azAZ-._~!', true], - ['v1.09azAZ-._~', true], - ['v1.09azAZ-._', true], - ['v1.09azAZ-.', true], - ['v1.09azAZ-', true], - ['v1.09azAZ', true], - ['v1.09azA', true], - ['v1.09az', true], - ['v1.09a', true], - ['v1.09', true], - ['v1.0', true], - ['v1.', false], - ['v1', false], - ['v', false], - ['', false], - ['vFF.Z', true], - ['vFG./', false], - ['v1./', false], - ['v1.?', false], - ['v1.#', false], - ['v1.[', false], - ['v1.]', false], - ['v1.@', false], + ["[v1.09azAZ-._~!$&'()*+,;=:]", true], + ["[v1.09azAZ-._~!$&'()*+,;=:", false], + ["v1.09azAZ-._~!$&'()*+,;=:]", false], + ["v1.09azAZ-._~!$&'()*+,;=:", true], + ["v1.09azAZ-._~!$&'()*+,;=", true], + ["v1.09azAZ-._~!$&'()*+,;", true], + ["v1.09azAZ-._~!$&'()*+,", true], + ["v1.09azAZ-._~!$&'()*+", true], + ["v1.09azAZ-._~!$&'()*", true], + ["v1.09azAZ-._~!$&'()", true], + ["v1.09azAZ-._~!$&'(", true], + ["v1.09azAZ-._~!$&'", true], + ['v1.09azAZ-._~!$&', true], + ['v1.09azAZ-._~!$', true], + ['v1.09azAZ-._~!', true], + ['v1.09azAZ-._~', true], + ['v1.09azAZ-._', true], + ['v1.09azAZ-.', true], + ['v1.09azAZ-', true], + ['v1.09azAZ', true], + ['v1.09azA', true], + ['v1.09az', true], + ['v1.09a', true], + ['v1.09', true], + ['v1.0', true], + ['v1.', false], + ['v1', false], + ['v', false], + ['', false], + ['vFF.Z', true], + ['vFG./', false], + ['v1./', false], + ['v1.?', false], + ['v1.#', false], + ['v1.[', false], + ['v1.]', false], + ['v1.@', false], ]; } diff --git a/test/IsArrayTest.php b/test/IsArrayTest.php index e464be75..126ed4a1 100644 --- a/test/IsArrayTest.php +++ b/test/IsArrayTest.php @@ -49,7 +49,7 @@ public function testThatTheInvalidTypeIsPresentInTheErrorMessage(): void self::assertEquals( 'Expected an array value but string provided', - $messages[IsArray::NOT_ARRAY] + $messages[IsArray::NOT_ARRAY], ); } } diff --git a/test/IsJsonStringTest.php b/test/IsJsonStringTest.php index 4397b5dd..7418f121 100644 --- a/test/IsJsonStringTest.php +++ b/test/IsJsonStringTest.php @@ -27,20 +27,61 @@ public static function allowProvider(): array // phpcs:disable Generic.Files.LineLength return [ 'Standalone Integer' => [IsJsonString::ALLOW_INT, '1', true, null], - 'Standalone Integer, Not Allowed' => [IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_INT, '1', false, IsJsonString::ERROR_TYPE_NOT_ALLOWED], + 'Standalone Integer, Not Allowed' => [ + IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_INT, + '1', + false, + IsJsonString::ERROR_TYPE_NOT_ALLOWED, + ], 'Standalone Float' => [IsJsonString::ALLOW_FLOAT, '1.23', true, null], - 'Standalone Float, Not Allowed' => [IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_FLOAT, '1.23', false, IsJsonString::ERROR_TYPE_NOT_ALLOWED], + 'Standalone Float, Not Allowed' => [ + IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_FLOAT, + '1.23', + false, + IsJsonString::ERROR_TYPE_NOT_ALLOWED, + ], 'Standalone True' => [IsJsonString::ALLOW_BOOL, 'true', true, null], 'Standalone False' => [IsJsonString::ALLOW_BOOL, 'false', true, null], - 'Case Sensitive True' => [IsJsonString::ALLOW_BOOL, 'TRUE', false, IsJsonString::ERROR_INVALID_JSON], - 'Case Sensitive False' => [IsJsonString::ALLOW_BOOL, 'FALSE', false, IsJsonString::ERROR_INVALID_JSON], - 'Standalone True, Not Allowed' => [IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_BOOL, 'true', false, IsJsonString::ERROR_TYPE_NOT_ALLOWED], - 'Standalone False, Not Allowed' => [IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_BOOL, 'false', false, IsJsonString::ERROR_TYPE_NOT_ALLOWED], + 'Case Sensitive True' => [ + IsJsonString::ALLOW_BOOL, + 'TRUE', + false, + IsJsonString::ERROR_INVALID_JSON, + ], + 'Case Sensitive False' => [ + IsJsonString::ALLOW_BOOL, + 'FALSE', + false, + IsJsonString::ERROR_INVALID_JSON, + ], + 'Standalone True, Not Allowed' => [ + IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_BOOL, + 'true', + false, + IsJsonString::ERROR_TYPE_NOT_ALLOWED, + ], + 'Standalone False, Not Allowed' => [ + IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_BOOL, + 'false', + false, + IsJsonString::ERROR_TYPE_NOT_ALLOWED, + ], 'List Notation' => [IsJsonString::ALLOW_ARRAY, '["Some","List"]', true, null], - 'List Notation, Not Allowed' => [IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_ARRAY, '["Some","List"]', false, IsJsonString::ERROR_TYPE_NOT_ALLOWED], + 'List Notation, Not Allowed' => [ + IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_ARRAY, + '["Some","List"]', + false, + IsJsonString::ERROR_TYPE_NOT_ALLOWED, + ], 'Object Notation' => [IsJsonString::ALLOW_OBJECT, '{"Some":"Object"}', true, null], - 'Object Notation, Not Allowed' => [IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_OBJECT, '{"Some":"Object"}', false, IsJsonString::ERROR_TYPE_NOT_ALLOWED], + 'Object Notation, Not Allowed' => [ + IsJsonString::ALLOW_ALL ^ IsJsonString::ALLOW_OBJECT, + '{"Some":"Object"}', + false, + IsJsonString::ERROR_TYPE_NOT_ALLOWED, + ], ]; + // phpcs:enable Generic.Files.LineLength } @@ -49,7 +90,7 @@ public static function allowProvider(): array * @param IsJsonString::ERROR_*|null $expectedErrorKey */ #[DataProvider('allowProvider')] - public function testBasicBehaviour(int $allowed, string $input, bool $expect, string|null $expectedErrorKey): void + public function testBasicBehaviour(int $allowed, string $input, bool $expect, ?string $expectedErrorKey): void { $validator = new IsJsonString([ 'allow' => $allowed, @@ -68,8 +109,7 @@ public static function provideThingsThatAreNotStrings(): array [true], [false], [ - new class () { - }, + new class() {}, ], [[]], [1], @@ -91,7 +131,7 @@ public function testThatMaxDepthCanBeExceeded(): void $validator = new IsJsonString([ 'maxDepth' => 1, ]); - $input = json_encode([ + $input = json_encode([ 'foo' => [ 'bar' => [ 'baz' => 'goats', diff --git a/test/IsbnTest.php b/test/IsbnTest.php index b6867491..b2df114b 100644 --- a/test/IsbnTest.php +++ b/test/IsbnTest.php @@ -26,8 +26,8 @@ public static function basicProvider(): array 'Time Rations by Benjamin Friedlander - False' => ['1882022059', false], 'Towards The Primeval Lighting Field by Will Alexander - True' => ['1882022300', true], 'Towards The Primeval Lighting Field by Will Alexander - False' => ['1882022301', false], - 'ISBN-13 for dummies by Zoë Wykes - True' => ['9780555023402', true], - 'ISBN-13 for dummies by Zoë Wykes - False' => ['97805550234029', false], + 'ISBN-13 for dummies by Zoë Wykes - True' => ['9780555023402', true], + 'ISBN-13 for dummies by Zoë Wykes - False' => ['97805550234029', false], 'Change Your Brain, Change Your Life Daniel G. Amen - True' => ['9780812929980', true], 'Change Your Brain, Change Your Life Daniel G. Amen - False' => ['9780812929981', false], 'Zend Framework In Action (10)' => ['9781638355144', true], diff --git a/test/KeyExistsTest.php b/test/KeyExistsTest.php index 4595d493..317af6d4 100644 --- a/test/KeyExistsTest.php +++ b/test/KeyExistsTest.php @@ -177,7 +177,7 @@ public static function basicDataProvider(): array } #[DataProvider('basicDataProvider')] - public function testBasicBehaviour(mixed $input, int|string $key, bool $valid, string|null $expectError): void + public function testBasicBehaviour(mixed $input, int|string $key, bool $valid, ?string $expectError): void { $validator = new KeyExists(['key' => $key]); diff --git a/test/MessageTest.php b/test/MessageTest.php index 5be3ba01..16fbe408 100644 --- a/test/MessageTest.php +++ b/test/MessageTest.php @@ -38,7 +38,7 @@ public function testSetMessage(): void $this->validator->setMessage( 'Your value is too long', - StringLength::TOO_LONG + StringLength::TOO_LONG, ); self::assertFalse($this->validator->isValid('abcdefghij')); @@ -58,7 +58,7 @@ public function testSetMessageDefaultKey(): void { $this->validator->setMessage( 'Your value is too short', - StringLength::TOO_SHORT + StringLength::TOO_SHORT, ); self::assertFalse($this->validator->isValid('abc')); @@ -80,7 +80,7 @@ public function testSetMessageWithValueParam(): void { $this->validator->setMessage( "Your value '%value%' is too long", - StringLength::TOO_LONG + StringLength::TOO_LONG, ); $inputInvalid = 'abcdefghij'; @@ -100,7 +100,7 @@ public function testSetMessageWithLengthParam(): void { $this->validator->setMessage( "The length of your value is '%length%'", - StringLength::TOO_LONG + StringLength::TOO_LONG, ); $inputInvalid = 'abcdefghij'; @@ -121,7 +121,7 @@ public function testSetMessageWithOtherParam(): void { $this->validator->setMessage( 'Your value is too long, it should be no longer than %max%', - StringLength::TOO_LONG + StringLength::TOO_LONG, ); $inputInvalid = 'abcdefghij'; @@ -142,7 +142,7 @@ public function testSetMessageWithUnknownParam(): void { $this->validator->setMessage( 'Your value is too long, and btw, %shazam%!', - StringLength::TOO_LONG + StringLength::TOO_LONG, ); $inputInvalid = 'abcdefghij'; @@ -167,7 +167,7 @@ public function testSetMessageExceptionInvalidKey(): void $this->validator->setMessage( 'Your value is too long', - $keyInvalid + $keyInvalid, ); } diff --git a/test/NotEmptyTest.php b/test/NotEmptyTest.php index c8c3268a..1b8ef242 100644 --- a/test/NotEmptyTest.php +++ b/test/NotEmptyTest.php @@ -640,7 +640,7 @@ public function testStringObjects(): void { $valid = new NotEmpty(['type' => NotEmpty::STRING]); - $object = new class () { + $object = new class() { public function __toString(): string { return 'Test'; @@ -651,7 +651,7 @@ public function __toString(): string $valid = new NotEmpty(['type' => NotEmpty::OBJECT_STRING]); self::assertTrue($valid->isValid($object)); - $object = new class () { + $object = new class() { public function __toString(): string { return ''; diff --git a/test/NumberComparisonTest.php b/test/NumberComparisonTest.php index 9a8ca669..4094fa33 100644 --- a/test/NumberComparisonTest.php +++ b/test/NumberComparisonTest.php @@ -69,7 +69,7 @@ public function testBasic( bool $inclusive, mixed $input, bool $expect, - string|null $errorKey, + ?string $errorKey, ): void { $validator = new NumberComparison([ 'min' => $min, diff --git a/test/RegexTest.php b/test/RegexTest.php index 0db884a9..868df0a5 100644 --- a/test/RegexTest.php +++ b/test/RegexTest.php @@ -21,7 +21,7 @@ final class RegexTest extends TestCase * @param non-empty-string $pattern */ #[DataProvider('basicDataProvider')] - public function testBasic(string $pattern, mixed $input, bool $expected, string|null $errorKey): void + public function testBasic(string $pattern, mixed $input, bool $expected, ?string $errorKey): void { $validator = new Regex($pattern); @@ -62,7 +62,7 @@ public static function basicDataProvider(): array public function testBadPattern(): void { // phpcs:disable - set_error_handler(static fn (int $_a, string $_b): bool => true); + set_error_handler(static fn(int $_a, string $_b): bool => true); // phpcs:enable try { @@ -117,9 +117,9 @@ public static function invalidConstructorArgumentsProvider(): array { return [ 'empty-string' => ['', 'A regex pattern is required'], - 'missing-pattern-key' => [[], "A regex pattern is required"], - 'pattern-key-not-string' => [['pattern' => false], "A regex pattern is required"], - 'pattern-key-empty-string' => [['pattern' => ''], "A regex pattern is required"], + 'missing-pattern-key' => [[], 'A regex pattern is required'], + 'pattern-key-not-string' => [['pattern' => false], 'A regex pattern is required'], + 'pattern-key-empty-string' => [['pattern' => ''], 'A regex pattern is required'], ]; } @@ -156,8 +156,11 @@ public function testAbstractOptionsAreProvidedToParentConstructor(): void self::assertFalse($validator->isValid('Not numbers')); $messages = $validator->getMessages(); - self::assertSame([ - Regex::NOT_MATCH => 'Numbers only', - ], $messages); + self::assertSame( + [ + Regex::NOT_MATCH => 'Numbers only', + ], + $messages, + ); } } diff --git a/test/StepTest.php b/test/StepTest.php index afb81a16..40d2a1bf 100644 --- a/test/StepTest.php +++ b/test/StepTest.php @@ -51,7 +51,7 @@ public function testBasic(mixed $value, bool $expected): void // By default, baseValue == 0 and step == 1 self::assertSame( $expected, - $this->validator->isValid($value) + $this->validator->isValid($value), ); } diff --git a/test/StringLengthTest.php b/test/StringLengthTest.php index ba261837..7de69898 100644 --- a/test/StringLengthTest.php +++ b/test/StringLengthTest.php @@ -54,11 +54,11 @@ public static function basicDataProvider(): array #[DataProvider('basicDataProvider')] public static function testBasicFunctionality( int $min, - int|null $max, + ?int $max, string $encoding, mixed $input, bool $isValid, - string|null $errorKey, + ?string $errorKey, ): void { $validator = new StringLength([ 'min' => $min, diff --git a/test/TestAsset/CustomTraversable.php b/test/TestAsset/CustomTraversable.php index 13366cdf..46fc489c 100644 --- a/test/TestAsset/CustomTraversable.php +++ b/test/TestAsset/CustomTraversable.php @@ -12,9 +12,9 @@ final class CustomTraversable implements Iterator { - public function __construct(private array $data) - { - } + public function __construct( + private array $data, + ) {} /** @return mixed */ #[ReturnTypeWillChange] diff --git a/test/TestAsset/HttpClientException.php b/test/TestAsset/HttpClientException.php index 9db7d9b9..2e0defa3 100644 --- a/test/TestAsset/HttpClientException.php +++ b/test/TestAsset/HttpClientException.php @@ -7,6 +7,4 @@ use Exception; use Psr\Http\Client\ClientExceptionInterface; -class HttpClientException extends Exception implements ClientExceptionInterface -{ -} +class HttpClientException extends Exception implements ClientExceptionInterface {} diff --git a/test/TestAsset/InMemoryContainer.php b/test/TestAsset/InMemoryContainer.php index f6c50ed6..67869a62 100644 --- a/test/TestAsset/InMemoryContainer.php +++ b/test/TestAsset/InMemoryContainer.php @@ -19,8 +19,7 @@ final class InMemoryContainer implements ContainerInterface public function get($id): mixed { if (! array_key_exists($id, $this->services)) { - throw new class ($id . ' was not found') extends RuntimeException implements NotFoundExceptionInterface { - }; + throw new class($id . ' was not found') extends RuntimeException implements NotFoundExceptionInterface {}; } return $this->services[$id]; diff --git a/test/TestAsset/Translator.php b/test/TestAsset/Translator.php index 3a35d7b2..6fb5cc24 100644 --- a/test/TestAsset/Translator.php +++ b/test/TestAsset/Translator.php @@ -9,9 +9,9 @@ class Translator implements TranslatorInterface { /** @param array $translations */ - public function __construct(public array $translations) - { - } + public function __construct( + public array $translations, + ) {} /** @inheritDoc */ public function translate( @@ -28,7 +28,7 @@ public function translatePlural( string $plural, int $number, string $textDomain = self::DEFAULT_TEXT_DOMAIN, - ?string $locale = null + ?string $locale = null, ): string { return $number === 1 ? $singular : $plural; } diff --git a/test/TimezoneTest.php b/test/TimezoneTest.php index 7d05c333..a7c0539c 100644 --- a/test/TimezoneTest.php +++ b/test/TimezoneTest.php @@ -16,7 +16,7 @@ final class TimezoneTest extends TestCase * Test locations by type is string */ #[DataProvider('locationProvider')] - public function testLocations(mixed $value, bool $valid, string|null $expectError): void + public function testLocations(mixed $value, bool $valid, ?string $expectError): void { $validator = new Timezone(['type' => Timezone::LOCATION]); self::assertSame($valid, $validator->isValid($value)); @@ -34,21 +34,21 @@ public function testLocations(mixed $value, bool $valid, string|null $expectErro public static function locationProvider(): array { return [ - ['America/Anguilla', true, null], - ['Antarctica/Palmer', true, null], - ['Asia/Dubai', true, null], - ['Atlantic/Cape_Verde', true, null], - ['Australia/Broken_Hill', true, null], - ['America/Sao_Paulo', true, null], - ['America/Toronto', true, null], - ['Pacific/Easter', true, null], - ['Europe/Copenhagen', true, null], - ['Indian/Maldives', true, null], - ['cest', false, Timezone::INVALID_TIMEZONE_LOCATION], // abbreviation of Anadyr Summer Time - ['Asia/London', false, Timezone::INVALID_TIMEZONE_LOCATION], // wrong location - ['', false, Timezone::INVALID], // empty string - [null, false, Timezone::INVALID], // null value - [99, false, Timezone::INVALID], // non-string + ['America/Anguilla', true, null], + ['Antarctica/Palmer', true, null], + ['Asia/Dubai', true, null], + ['Atlantic/Cape_Verde', true, null], + ['Australia/Broken_Hill', true, null], + ['America/Sao_Paulo', true, null], + ['America/Toronto', true, null], + ['Pacific/Easter', true, null], + ['Europe/Copenhagen', true, null], + ['Indian/Maldives', true, null], + ['cest', false, Timezone::INVALID_TIMEZONE_LOCATION], // abbreviation of Anadyr Summer Time + ['Asia/London', false, Timezone::INVALID_TIMEZONE_LOCATION], // wrong location + ['', false, Timezone::INVALID], // empty string + [null, false, Timezone::INVALID], // null value + [99, false, Timezone::INVALID], // non-string ]; } @@ -56,7 +56,7 @@ public static function locationProvider(): array * Test abbreviations */ #[DataProvider('abbreviationProvider')] - public function testAbbreviations(mixed $value, bool $valid, string|null $expectError): void + public function testAbbreviations(mixed $value, bool $valid, ?string $expectError): void { $validator = new Timezone(['type' => Timezone::ABBREVIATION]); self::assertSame($valid, $validator->isValid($value)); @@ -74,21 +74,21 @@ public function testAbbreviations(mixed $value, bool $valid, string|null $expect public static function abbreviationProvider(): array { return [ - ['cest', true, null], // Central European Summer Time - ['hkt', true, null], // Hong Kong Time - ['nzdt', true, null], // New Zealand Daylight Time - ['sast', true, null], // South Africa Standard Time - ['SAST', true, null], // SA standard time in uppercase + ['cest', true, null], // Central European Summer Time + ['hkt', true, null], // Hong Kong Time + ['nzdt', true, null], // New Zealand Daylight Time + ['sast', true, null], // South Africa Standard Time + ['SAST', true, null], // SA standard time in uppercase ['America/Toronto', false, Timezone::INVALID_TIMEZONE_ABBREVIATION], // location - ['xyz', false, Timezone::INVALID_TIMEZONE_ABBREVIATION], // wrong abbreviation - ['', false, Timezone::INVALID], // empty string - [null, false, Timezone::INVALID], // null value - [99, false, Timezone::INVALID], // non-string + ['xyz', false, Timezone::INVALID_TIMEZONE_ABBREVIATION], // wrong abbreviation + ['', false, Timezone::INVALID], // empty string + [null, false, Timezone::INVALID], // null value + [99, false, Timezone::INVALID], // non-string ]; } #[DataProvider('locationAndAbbreviationProvider')] - public function testLocationsAndAbbreviations(mixed $value, bool $valid, string|null $expectError): void + public function testLocationsAndAbbreviations(mixed $value, bool $valid, ?string $expectError): void { $validator = new Timezone(['type' => Timezone::ALL]); self::assertSame($valid, $validator->isValid($value)); @@ -106,19 +106,19 @@ public function testLocationsAndAbbreviations(mixed $value, bool $valid, string| public static function locationAndAbbreviationProvider(): array { return [ - ['America/Anguilla', true, null], - ['Antarctica/Palmer', true, null], - ['Asia/Dubai', true, null], - ['Atlantic/Cape_Verde', true, null], - ['Australia/Broken_Hill', true, null], - ['hkt', true, null], // Hong Kong Time - ['nzdt', true, null], // New Zealand Daylight Time - ['sast', true, null], // South Africa Standard Time - ['xyz', false, Timezone::INVALID], // wrong abbreviation - ['Asia/London', false, Timezone::INVALID], // wrong location - ['', false, Timezone::INVALID], // empty string - [null, false, Timezone::INVALID], // null value - [99, false, Timezone::INVALID], // non-string + ['America/Anguilla', true, null], + ['Antarctica/Palmer', true, null], + ['Asia/Dubai', true, null], + ['Atlantic/Cape_Verde', true, null], + ['Australia/Broken_Hill', true, null], + ['hkt', true, null], // Hong Kong Time + ['nzdt', true, null], // New Zealand Daylight Time + ['sast', true, null], // South Africa Standard Time + ['xyz', false, Timezone::INVALID], // wrong abbreviation + ['Asia/London', false, Timezone::INVALID], // wrong location + ['', false, Timezone::INVALID], // empty string + [null, false, Timezone::INVALID], // null value + [99, false, Timezone::INVALID], // non-string ]; } diff --git a/test/UndisclosedPasswordTest.php b/test/UndisclosedPasswordTest.php index 24d48e66..90371f77 100644 --- a/test/UndisclosedPasswordTest.php +++ b/test/UndisclosedPasswordTest.php @@ -52,8 +52,7 @@ protected function setUp(): void */ public function getConstant(string $constant, string|object $classOrInstance) { - return (new ReflectionClass($classOrInstance)) - ->getConstant($constant); + return (new ReflectionClass($classOrInstance))->getConstant($constant); } /** @@ -115,15 +114,16 @@ public function testStrongUnseenPasswordsPassValidation(string $password): void $constant = $this->getConstant( 'HIBP_K_ANONYMITY_HASH_RANGE_LENGTH', - UndisclosedPassword::class + UndisclosedPassword::class, ); self::assertIsInt($constant); - $this->stream->method('__toString') + $this->stream + ->method('__toString') ->willReturn(sprintf( '%s:%d', strtoupper(substr($hash, $constant)), - random_int(0, 100000) + random_int(0, 100000), )); return $this->stream; @@ -152,16 +152,17 @@ public function testBreachedPasswordsDoNotPassValidation(string $password): void $constant = $this->getConstant( 'HIBP_K_ANONYMITY_HASH_RANGE_LENGTH', - UndisclosedPassword::class + UndisclosedPassword::class, ); self::assertIsInt($constant); - $this->stream->method('__toString') + $this->stream + ->method('__toString') ->willReturn(sprintf( '%s:%d', strtoupper(substr($hash, $constant)), - random_int(0, 100000) + random_int(0, 100000), )); return $this->stream; diff --git a/test/UriTest.php b/test/UriTest.php index 4ed9545f..7557fc9a 100644 --- a/test/UriTest.php +++ b/test/UriTest.php @@ -58,16 +58,16 @@ public static function allowOptionsDataProvider(): array return [ // Uri, allowAbsolute, allowRelative, isValid, errorKey // Empty String - ['', true, true, false, Uri::INVALID], - ['', true, false, false, Uri::INVALID], - ['', false, true, false, Uri::INVALID], - ['https://www.example.com/foo', true, true, true, null], - ['https://www.example.com/foo', false, true, false, Uri::NOT_RELATIVE], - ['ftp://www.example.com/foo', true, true, true, null], - ['ftp://www.example.com/foo', false, true, false, Uri::NOT_RELATIVE], - ['/foo', true, false, false, Uri::NOT_ABSOLUTE], - ['/foo', true, true, true, null], - ['https:///baz', true, true, false, Uri::NOT_URI], + ['', true, true, false, Uri::INVALID], + ['', true, false, false, Uri::INVALID], + ['', false, true, false, Uri::INVALID], + ['https://www.example.com/foo', true, true, true, null], + ['https://www.example.com/foo', false, true, false, Uri::NOT_RELATIVE], + ['ftp://www.example.com/foo', true, true, true, null], + ['ftp://www.example.com/foo', false, true, false, Uri::NOT_RELATIVE], + ['/foo', true, false, false, Uri::NOT_ABSOLUTE], + ['/foo', true, true, true, null], + ['https:///baz', true, true, false, Uri::NOT_URI], ]; } @@ -77,7 +77,7 @@ public function testUriHandlerBehaviorWithAllowSettings( bool $allowAbsolute, bool $allowRelative, bool $isValid, - string|null $expectError, + ?string $expectError, ): void { $validator = new Uri([ 'allowAbsolute' => $allowAbsolute, diff --git a/test/ValidatorChainInvokableFactoryTest.php b/test/ValidatorChainInvokableFactoryTest.php index ef3c5e87..954657da 100644 --- a/test/ValidatorChainInvokableFactoryTest.php +++ b/test/ValidatorChainInvokableFactoryTest.php @@ -60,8 +60,11 @@ public function testANonEmptyChainCanBeBuiltByThePluginManager(): void self::assertCount(1, $chain); self::assertFalse($chain->isValid('')); - self::assertSame([ - NotEmpty::IS_EMPTY => 'Bad News', - ], $chain->getMessages()); + self::assertSame( + [ + NotEmpty::IS_EMPTY => 'Bad News', + ], + $chain->getMessages(), + ); } } diff --git a/test/ValidatorChainTest.php b/test/ValidatorChainTest.php index 9cf534cf..e6a7d422 100644 --- a/test/ValidatorChainTest.php +++ b/test/ValidatorChainTest.php @@ -198,8 +198,7 @@ public function testCountGivesCountOfAttachedValidators(): void public function getValidatorTrue(): ValidatorInterface { $validator = $this->createMock(ValidatorInterface::class); - $validator - ->expects(self::any()) + $validator->expects(self::any()) ->method('isValid') ->willReturn(true); @@ -212,13 +211,11 @@ public function getValidatorTrue(): ValidatorInterface public function getValidatorFalse(): ValidatorInterface { $validator = $this->createMock(ValidatorInterface::class); - $validator - ->expects(self::any()) + $validator->expects(self::any()) ->method('isValid') ->willReturn(false); - $validator - ->expects(self::any()) + $validator->expects(self::any()) ->method('getMessages') ->willReturn(['error' => 'validation failed']); diff --git a/test/ValidatorPluginManagerCompatibilityTest.php b/test/ValidatorPluginManagerCompatibilityTest.php index b1d2dd58..78d5eb93 100644 --- a/test/ValidatorPluginManagerCompatibilityTest.php +++ b/test/ValidatorPluginManagerCompatibilityTest.php @@ -70,9 +70,12 @@ final class ValidatorPluginManagerCompatibilityTest extends TestCase */ protected static function getPluginManager(array $config = []): AbstractSingleInstancePluginManager { - return new ValidatorPluginManager(new ServiceManager( - (new ConfigProvider())->__invoke()['dependencies'], - ), $config); + return new ValidatorPluginManager( + new ServiceManager( + (new ConfigProvider())->__invoke()['dependencies'], + ), + $config, + ); } protected function getInstanceOf(): string diff --git a/test/ValidatorPluginManagerTest.php b/test/ValidatorPluginManagerTest.php index 052832ee..bbb9ffb8 100644 --- a/test/ValidatorPluginManagerTest.php +++ b/test/ValidatorPluginManagerTest.php @@ -48,14 +48,12 @@ public function testAllowsInjectingTranslator(): void $container = $this->createMock(ContainerInterface::class); - $container - ->expects(self::once()) + $container->expects(self::once()) ->method('has') ->with('MvcTranslator') ->willReturn(true); - $container - ->expects(self::once()) + $container->expects(self::once()) ->method('get') ->with('MvcTranslator') ->willReturn($translator); @@ -74,18 +72,16 @@ public function testAllowsInjectingTranslatorInterface(): void $container = $this->createMock(ContainerInterface::class); - $container - ->expects(self::exactly(2)) + $container->expects(self::exactly(2)) ->method('has') ->willReturnMap( [ - ['MvcTranslator', false], + ['MvcTranslator', false], [TranslatorInterface::class, true], ], ); - $container - ->expects(self::once()) + $container->expects(self::once()) ->method('get') ->with(TranslatorInterface::class) ->willReturn($translator); @@ -117,7 +113,7 @@ public function testRegisteringInvalidValidatorRaisesException(): void try { /** @psalm-suppress InvalidArgument */ $this->validators->setService('test', $this); - } catch (InvalidServiceException | RuntimeException $e) { + } catch (InvalidServiceException|RuntimeException $e) { self::assertStringContainsString(ValidatorInterface::class, $e->getMessage()); } catch (Exception $e) { self::fail(sprintf( @@ -144,7 +140,7 @@ public function testLoadingInvalidValidatorRaisesException(): void try { $pluginManager->get('test'); self::fail('An exception should have been thrown'); - } catch (InvalidServiceException | RuntimeException $e) { + } catch (InvalidServiceException|RuntimeException $e) { self::assertStringContainsString(ValidatorInterface::class, $e->getMessage()); } catch (Exception $e) { self::fail(sprintf( @@ -156,8 +152,7 @@ public function testLoadingInvalidValidatorRaisesException(): void public function testInjectedValidatorPluginManager(): void { - $validator = new class implements ValidatorInterface, ValidatorPluginManagerAwareInterface - { + $validator = new class implements ValidatorInterface, ValidatorPluginManagerAwareInterface { private ?ValidatorPluginManager $plugins = null; public function isValid(mixed $value): bool @@ -185,7 +180,7 @@ public function getValidatorPluginManager(): ValidatorPluginManager $plugins = new ValidatorPluginManager(new ServiceManager(), [ 'factories' => [ - 'test' => static fn () => $validator, + 'test' => static fn() => $validator, ], ]); From 93ec0a933dc4256038b1c221af4b2db4b778c554 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 6 Jul 2026 10:02:54 +0100 Subject: [PATCH 3/5] Various minor CS and SA fixes Signed-off-by: George Steel --- src/AbstractValidator.php | 4 ++-- src/CreditCard.php | 14 ++++++++------ src/DateStep.php | 10 ++++++---- src/File/ExcludeMimeType.php | 8 +++++--- src/File/Extension.php | 4 ++-- src/GpsPoint.php | 12 ++++++++---- src/InArray.php | 6 ++++-- src/IsJsonString.php | 12 ++++++------ src/NotEmpty.php | 26 +++++++++++++------------- test/BarcodeTest.php | 2 +- test/CreditCardTest.php | 2 +- test/EmailAddressTest.php | 30 +++++++++++++++++------------- test/File/ExcludeMimeTypeTest.php | 2 +- test/File/FileInformationTest.php | 2 +- test/File/FilesSizeTest.php | 10 +++++----- test/File/HashTest.php | 2 +- test/File/ImageSizeTest.php | 6 +++--- test/File/MimeTypeTest.php | 2 +- test/File/SizeTest.php | 10 +++++----- test/File/WordCountTest.php | 4 ++-- test/HostnameTest.php | 10 ++++++---- test/IsArrayTest.php | 2 +- test/MessageTest.php | 2 +- test/NumberComparisonTest.php | 4 ++-- test/StringLengthTest.php | 2 +- test/UndisclosedPasswordTest.php | 4 ++-- 26 files changed, 105 insertions(+), 87 deletions(-) diff --git a/src/AbstractValidator.php b/src/AbstractValidator.php index f6cb556c..af7130f6 100644 --- a/src/AbstractValidator.php +++ b/src/AbstractValidator.php @@ -169,7 +169,7 @@ public function setMessage(string $messageString, ?string $messageKey = null): v } if (! isset($this->messageTemplates[$messageKey])) { - throw new InvalidArgumentException("No message template exists for key '$messageKey'"); + throw new InvalidArgumentException("No message template exists for key '{$messageKey}'"); } $this->messageTemplates[$messageKey] = $messageString; @@ -242,7 +242,7 @@ private function propertyValue(string|array $prop): mixed private function substitutePlaceholder(string $id, mixed $value, string $message, bool $obscure): string { - $search = "%$id%"; + $search = "%{$id}%"; $value = $this->stringifyValue($value); if ($obscure) { $value = str_repeat('*', strlen($value)); diff --git a/src/CreditCard.php b/src/CreditCard.php index afc5fd92..9c9ae733 100644 --- a/src/CreditCard.php +++ b/src/CreditCard.php @@ -328,12 +328,14 @@ public function isValid( $lengthFound = false; foreach ($this->type as $type) { foreach (self::CARD_PREFIXES[$type] as $prefix) { - if (str_starts_with($value, $prefix)) { - $prefixFound = true; - if (in_array($length, self::CARD_LENGTH[$type])) { - $lengthFound = true; - break 2; - } + if (! str_starts_with($value, $prefix)) { + continue; + } + + $prefixFound = true; + if (in_array($length, self::CARD_LENGTH[$type])) { + $lengthFound = true; + break 2; } } } diff --git a/src/DateStep.php b/src/DateStep.php index 4b8e78c2..d07f1538 100644 --- a/src/DateStep.php +++ b/src/DateStep.php @@ -189,11 +189,13 @@ public function isValid(mixed $value): bool $intervalUnit = 'days'; $stepValue = 1; foreach ($intervalParts as $key => $value) { - if (0 !== $value) { - $intervalUnit = $key; - $stepValue = $value; - break; + if (0 === $value) { + continue; } + + $intervalUnit = $key; + $stepValue = $value; + break; } // Check date units diff --git a/src/File/ExcludeMimeType.php b/src/File/ExcludeMimeType.php index 041094af..be8f1492 100644 --- a/src/File/ExcludeMimeType.php +++ b/src/File/ExcludeMimeType.php @@ -56,10 +56,12 @@ public function isValid(mixed $value): bool $types = array_merge($types, explode('-', $this->type)); $types = array_merge($types, explode(';', $this->type)); foreach ($this->mimeTypes as $mime) { - if (in_array($mime, $types)) { - $this->error(self::FALSE_TYPE); - return false; + if (! in_array($mime, $types, true)) { + continue; } + + $this->error(self::FALSE_TYPE); + return false; } return true; diff --git a/src/File/Extension.php b/src/File/Extension.php index 2d8e6f5b..9a3dd657 100644 --- a/src/File/Extension.php +++ b/src/File/Extension.php @@ -99,11 +99,11 @@ public function isValid(mixed $value): bool return false; } + $fileName = $value; + if ($isFile) { $file = FileInformation::factory($value); $fileName = $file->clientFileName ?? $file->baseName; - } else { - $fileName = $value; } assert($fileName !== ''); diff --git a/src/GpsPoint.php b/src/GpsPoint.php index 62072a54..8d7e76b5 100644 --- a/src/GpsPoint.php +++ b/src/GpsPoint.php @@ -52,10 +52,14 @@ private function isValidCoordinate(string $value, float $maxBoundary): bool { $this->setValue($value); - $value = $this->removeWhiteSpace($value); - if ($this->isDMSValue($value)) { + $value = $this->removeWhiteSpace($value); + $isDMSValue = $this->isDMSValue($value); + + if ($isDMSValue) { $value = $this->convertValue($value); - } else { + } + + if (! $isDMSValue) { $value = $this->removeDegreeSign($value); } @@ -114,7 +118,7 @@ private function removeDegreeSign(string $value): string private function isValueInbound(float $value, float $boundary): bool { $max = $boundary; - $min = -1 * $boundary; + $min = -$boundary; return $min <= $value && $value <= $max; } } diff --git a/src/InArray.php b/src/InArray.php index 7b3b6953..cc2f3513 100644 --- a/src/InArray.php +++ b/src/InArray.php @@ -172,9 +172,11 @@ public function isValid(mixed $value): bool ) { /** @psalm-suppress MixedAssignment */ foreach ($haystack as &$h) { - if (is_int($h) || is_float($h)) { - $h = (string) $h; + if (! (is_int($h) || is_float($h))) { + continue; } + + $h = (string) $h; } if (in_array($value, $haystack, (bool) $this->strict)) { diff --git a/src/IsJsonString.php b/src/IsJsonString.php index 24f16985..7a20efbb 100644 --- a/src/IsJsonString.php +++ b/src/IsJsonString.php @@ -36,12 +36,12 @@ final class IsJsonString extends AbstractValidator public const ERROR_MAX_DEPTH_EXCEEDED = 'errorMaxDepthExceeded'; public const ERROR_INVALID_JSON = 'errorInvalidJson'; - public const ALLOW_INT = 0b0000001; - public const ALLOW_FLOAT = 0b0000010; - public const ALLOW_BOOL = 0b0000100; - public const ALLOW_ARRAY = 0b0001000; - public const ALLOW_OBJECT = 0b0010000; - public const ALLOW_ALL = 0b0011111; + public const ALLOW_INT = 0b000_0001; + public const ALLOW_FLOAT = 0b000_0010; + public const ALLOW_BOOL = 0b000_0100; + public const ALLOW_ARRAY = 0b000_1000; + public const ALLOW_OBJECT = 0b001_0000; + public const ALLOW_ALL = 0b001_1111; /** @var array */ protected array $messageTemplates = [ diff --git a/src/NotEmpty.php b/src/NotEmpty.php index bdc355c3..f441fc7a 100644 --- a/src/NotEmpty.php +++ b/src/NotEmpty.php @@ -48,19 +48,19 @@ */ final class NotEmpty extends AbstractValidator { - public const BOOLEAN = 0b000000000001; - public const INTEGER = 0b000000000010; - public const FLOAT = 0b000000000100; - public const STRING = 0b000000001000; - public const ZERO = 0b000000010000; - public const EMPTY_ARRAY = 0b000000100000; - public const NULL = 0b000001000000; - public const PHP = 0b000001111111; - public const SPACE = 0b000010000000; - public const OBJECT = 0b000100000000; - public const OBJECT_STRING = 0b001000000000; - public const OBJECT_COUNT = 0b010000000000; - public const ALL = 0b011111111111; + public const BOOLEAN = 0b0000_0000_0001; + public const INTEGER = 0b0000_0000_0010; + public const FLOAT = 0b0000_0000_0100; + public const STRING = 0b0000_0000_1000; + public const ZERO = 0b0000_0001_0000; + public const EMPTY_ARRAY = 0b0000_0010_0000; + public const NULL = 0b0000_0100_0000; + public const PHP = 0b0000_0111_1111; + public const SPACE = 0b0000_1000_0000; + public const OBJECT = 0b0001_0000_0000; + public const OBJECT_STRING = 0b0010_0000_0000; + public const OBJECT_COUNT = 0b0100_0000_0000; + public const ALL = 0b0111_1111_1111; public const INVALID = 'notEmptyInvalid'; public const IS_EMPTY = 'isEmpty'; diff --git a/test/BarcodeTest.php b/test/BarcodeTest.php index 53d40b26..052cf4fd 100644 --- a/test/BarcodeTest.php +++ b/test/BarcodeTest.php @@ -65,7 +65,7 @@ public function testSetAdapter(): void public function testNonStringValidation(): void { $barcode = new Barcode(['adapter' => Barcode\Upca::class]); - self::assertFalse($barcode->isValid(106510000.4327)); + self::assertFalse($barcode->isValid(1_065_100_00.4327)); self::assertArrayHasKey(Barcode::INVALID, $barcode->getMessages()); self::assertFalse($barcode->isValid(['065100004327'])); diff --git a/test/CreditCardTest.php b/test/CreditCardTest.php index 78af8b2b..5d92e64f 100644 --- a/test/CreditCardTest.php +++ b/test/CreditCardTest.php @@ -304,7 +304,7 @@ public function testThatTheCallbackReceivesTheExpectedParameters(): void 'foo' => 'bar', ]; - $callback = function ( + $callback = static function ( string $cardNumber, array $context, array $types, diff --git a/test/EmailAddressTest.php b/test/EmailAddressTest.php index 2c802997..845d07f4 100644 --- a/test/EmailAddressTest.php +++ b/test/EmailAddressTest.php @@ -180,7 +180,7 @@ public function testQuotedString(): void $validator = new EmailAddress(); self::assertTrue( $validator->isValid($input), - "$input failed to pass validation:\n" . implode("\n", $validator->getMessages()), + "{$input} failed to pass validation:\n" . implode("\n", $validator->getMessages()), ); } } @@ -204,7 +204,7 @@ public function testInvalidQuotedString(): void $validator = new EmailAddress(); self::assertFalse( $validator->isValid($input), - "$input failed to pass validation:\n" . implode("\n", $validator->getMessages()), + "{$input} failed to pass validation:\n" . implode("\n", $validator->getMessages()), ); } } @@ -475,13 +475,15 @@ public function testHostnameValidatorMessagesShouldBeTranslated(): void $messages = $hostnameValidator->getMessages(); $found = false; foreach ($messages as $code => $message) { - if (array_key_exists($code, $translations)) { - self::assertSame($translations[$code], $message); + if (! array_key_exists($code, $translations)) { + continue; + } - $found = true; + self::assertSame($translations[$code], $message); - break; - } + $found = true; + + break; } self::assertTrue($found); @@ -530,13 +532,15 @@ public function testSettingHostnameMessagesThroughEmailValidator(): void $messages = $validator->getMessages(); $found = false; foreach ($messages as $code => $message) { - if (array_key_exists($code, $translations)) { - self::assertSame($translations[$code], $message); + if (! array_key_exists($code, $translations)) { + continue; + } - $found = true; + self::assertSame($translations[$code], $message); - break; - } + $found = true; + + break; } self::assertTrue($found); @@ -611,7 +615,7 @@ public function testUseMxCheckBasicValid(): void foreach ($emailAddresses as $input) { self::assertTrue( $validator->isValid($input), - "$input failed to pass validation:\n" . implode("\n", $validator->getMessages()), + "{$input} failed to pass validation:\n" . implode("\n", $validator->getMessages()), ); } } diff --git a/test/File/ExcludeMimeTypeTest.php b/test/File/ExcludeMimeTypeTest.php index 27e0409e..2a299cf4 100644 --- a/test/File/ExcludeMimeTypeTest.php +++ b/test/File/ExcludeMimeTypeTest.php @@ -108,7 +108,7 @@ public function testUnreadableFile(): void $path = __DIR__ . '/_files/no-read.txt'; touch($path); - chmod($path, 0333); + chmod($path, 0o333); try { self::assertFalse($validator->isValid($path)); $messages = $validator->getMessages(); diff --git a/test/File/FileInformationTest.php b/test/File/FileInformationTest.php index 0ee7ecd5..a55867e6 100644 --- a/test/File/FileInformationTest.php +++ b/test/File/FileInformationTest.php @@ -102,7 +102,7 @@ public function testUnReadableFile(): void { $path = __DIR__ . '/_files/no-read.txt'; touch($path); - chmod($path, 0333); + chmod($path, 0o333); try { $file = FileInformation::factory($path); self::assertFalse($file->readable); diff --git a/test/File/FilesSizeTest.php b/test/File/FilesSizeTest.php index 19b4e3ec..f425215b 100644 --- a/test/File/FilesSizeTest.php +++ b/test/File/FilesSizeTest.php @@ -66,7 +66,7 @@ public static function basicDataProvider(): array 'minimum: 0 byte; maximum: 500 bytes; array' => [['min' => 0, 'max' => 500], false, false, false], 'minimum: 0 byte; maximum: 2000 bytes; integer' => [['max' => 2000], true, true, false], 'minimum: 0 byte; maximum: 2000 bytes; array' => [['min' => 0, 'max' => 2000], true, true, false], - 'minimum: 0 byte; maximum: 500 kilobytes' => [['min' => 0, 'max' => 500000], true, true, true], + 'minimum: 0 byte; maximum: 500 kilobytes' => [['min' => 0, 'max' => 500_000], true, true, true], 'minimum: 0 byte; maximum: 2 megabytes; 2 MB' => [['min' => 0, 'max' => '2 MB'], true, true, true], 'minimum: 0 byte; maximum: 2 megabytes; 2MB' => [['min' => 0, 'max' => '2MB'], true, true, true], 'minimum: 0 byte; maximum: 2 megabytes; 2 MB' => [['min' => 0, 'max' => '2 MB'], true, true, true], @@ -77,7 +77,7 @@ public static function basicDataProvider(): array public function testMultipleFiles(): void { - $validator = new FilesSize(['min' => 0, 'max' => 500000]); + $validator = new FilesSize(['min' => 0, 'max' => 500_000]); self::assertTrue($validator->isValid([ __DIR__ . '/_files/testsize.mo', @@ -99,7 +99,7 @@ public function testFileDoNotExist(): void */ public function testFailureMessage(): void { - $validator = new FilesSize(['min' => 9999, 'max' => 10000]); + $validator = new FilesSize(['min' => 9_999, 'max' => 10_000]); self::assertFalse($validator->isValid([ __DIR__ . '/_files/testsize.mo', @@ -113,7 +113,7 @@ public function testFailureMessage(): void self::assertStringContainsString('9.76kB', $message); self::assertStringContainsString('1.55kB', $message); - $validator = new FilesSize(['min' => 9999, 'max' => 10000, 'useByteString' => false]); + $validator = new FilesSize(['min' => 9_999, 'max' => 10_000, 'useByteString' => false]); self::assertFalse($validator->isValid([ __DIR__ . '/_files/testsize.mo', @@ -213,7 +213,7 @@ public function testUnreadableFile(): void $path = __DIR__ . '/_files/no-read.txt'; touch($path); - chmod($path, 0333); + chmod($path, 0o333); try { self::assertFalse($validator->isValid($path)); $messages = $validator->getMessages(); diff --git a/test/File/HashTest.php b/test/File/HashTest.php index fd7afaf0..45faf926 100644 --- a/test/File/HashTest.php +++ b/test/File/HashTest.php @@ -151,7 +151,7 @@ public function testUnreadableFile(): void $path = __DIR__ . '/_files/no-read.txt'; touch($path); - chmod($path, 0333); + chmod($path, 0o333); try { self::assertFalse($validator->isValid($path)); $messages = $validator->getMessages(); diff --git a/test/File/ImageSizeTest.php b/test/File/ImageSizeTest.php index 95a65316..bec4e6a2 100644 --- a/test/File/ImageSizeTest.php +++ b/test/File/ImageSizeTest.php @@ -166,8 +166,8 @@ public function testLaminas11258(): void $validator = new ImageSize([ 'minWidth' => 100, 'minHeight' => 1000, - 'maxWidth' => 10000, - 'maxHeight' => 100000, + 'maxWidth' => 10_000, + 'maxHeight' => 100_000, ]); self::assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo')); @@ -225,7 +225,7 @@ public function testUnreadableFile(): void $path = __DIR__ . '/_files/no-read.txt'; touch($path); - chmod($path, 0333); + chmod($path, 0o333); try { self::assertFalse($validator->isValid($path)); $messages = $validator->getMessages(); diff --git a/test/File/MimeTypeTest.php b/test/File/MimeTypeTest.php index f109a287..36d06839 100644 --- a/test/File/MimeTypeTest.php +++ b/test/File/MimeTypeTest.php @@ -128,7 +128,7 @@ public function testUnreadableFile(): void $path = __DIR__ . '/_files/no-read.txt'; touch($path); - chmod($path, 0333); + chmod($path, 0o333); try { self::assertFalse($validator->isValid($path)); $messages = $validator->getMessages(); diff --git a/test/File/SizeTest.php b/test/File/SizeTest.php index 315800c6..cf8131d7 100644 --- a/test/File/SizeTest.php +++ b/test/File/SizeTest.php @@ -37,7 +37,7 @@ public static function basicBehaviorDataProvider(): array // Options, isValid Param, Expected value [['max' => 794], $testFile, true], [['max' => 500], $testFile, false], - [['min' => 0, 'max' => 10000], $testFile, true], + [['min' => 0, 'max' => 10_000], $testFile, true], [['min' => 0, 'max' => '10 MB'], $testFile, true], [['min' => '4B', 'max' => '10 MB'], $testFile, true], [['min' => 0, 'max' => '10MB'], $testFile, true], @@ -92,7 +92,7 @@ public function testBasic(array $options, mixed $value, bool $expected): void */ public function testFailureMessage(): void { - $validator = new Size(['min' => 9999, 'max' => 10000]); + $validator = new Size(['min' => 9999, 'max' => 10_000]); self::assertFalse($validator->isValid(__DIR__ . '/_files/testsize.mo')); @@ -102,7 +102,7 @@ public function testFailureMessage(): void self::assertStringContainsString('9.76kB', $messages[Size::TOO_SMALL]); self::assertStringContainsString('794B', $messages[Size::TOO_SMALL]); - $validator = new Size(['min' => 9999, 'max' => 10000, 'useByteString' => false]); + $validator = new Size(['min' => 9999, 'max' => 10_000, 'useByteString' => false]); self::assertFalse($validator->isValid(__DIR__ . '/_files/testsize.mo')); @@ -116,7 +116,7 @@ public function testFailureMessage(): void #[Group('Laminas-11258')] public function testLaminas11258(): void { - $validator = new Size(['min' => 1, 'max' => 10000]); + $validator = new Size(['min' => 1, 'max' => 10_000]); self::assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo')); $messages = $validator->getMessages(); @@ -164,7 +164,7 @@ public function testUnreadableFile(): void $path = __DIR__ . '/_files/no-read.txt'; touch($path); - chmod($path, 0333); + chmod($path, 0o333); try { self::assertFalse($validator->isValid($path)); $messages = $validator->getMessages(); diff --git a/test/File/WordCountTest.php b/test/File/WordCountTest.php index 6c94bd2f..585e53cf 100644 --- a/test/File/WordCountTest.php +++ b/test/File/WordCountTest.php @@ -83,7 +83,7 @@ public function testBasic(array $options, mixed $value, bool $expected): void #[Group('Laminas-11258')] public function testLaminas11258(): void { - $validator = new WordCount(['min' => 1, 'max' => 10000]); + $validator = new WordCount(['min' => 1, 'max' => 10_000]); self::assertFalse($validator->isValid(__DIR__ . '/_files/nofile.mo')); $messages = $validator->getMessages(); @@ -134,7 +134,7 @@ public function testUnreadableFile(): void $path = __DIR__ . '/_files/no-read.txt'; touch($path); - chmod($path, 0333); + chmod($path, 0o333); try { self::assertFalse($validator->isValid($path)); $messages = $validator->getMessages(); diff --git a/test/HostnameTest.php b/test/HostnameTest.php index f3a96a32..19fe3914 100644 --- a/test/HostnameTest.php +++ b/test/HostnameTest.php @@ -360,11 +360,13 @@ public function testValidatorMessagesShouldBeTranslated(): void $messages = $this->validator->getMessages(); $found = false; foreach ($messages as $code => $message) { - if (array_key_exists($code, $translations)) { - $found = true; - - break; + if (! array_key_exists($code, $translations)) { + continue; } + + $found = true; + + break; } self::assertTrue($found); diff --git a/test/IsArrayTest.php b/test/IsArrayTest.php index 126ed4a1..494d6534 100644 --- a/test/IsArrayTest.php +++ b/test/IsArrayTest.php @@ -47,7 +47,7 @@ public function testThatTheInvalidTypeIsPresentInTheErrorMessage(): void self::assertArrayHasKey(IsArray::NOT_ARRAY, $messages); - self::assertEquals( + self::assertSame( 'Expected an array value but string provided', $messages[IsArray::NOT_ARRAY], ); diff --git a/test/MessageTest.php b/test/MessageTest.php index 16fbe408..30b97972 100644 --- a/test/MessageTest.php +++ b/test/MessageTest.php @@ -89,7 +89,7 @@ public function testSetMessageWithValueParam(): void $messages = $this->validator->getMessages(); - self::assertSame("Your value '$inputInvalid' is too long", current($messages)); + self::assertSame("Your value '{$inputInvalid}' is too long", current($messages)); } /** diff --git a/test/NumberComparisonTest.php b/test/NumberComparisonTest.php index 4094fa33..3056e951 100644 --- a/test/NumberComparisonTest.php +++ b/test/NumberComparisonTest.php @@ -45,9 +45,9 @@ public static function basicTestDataProvider(): array [10.0, 20.0, true, 10.1, true, null], [10.0, 20.0, true, 15, true, null], [10.0, 20.0, true, '15', true, null], - [10.0, 20.0, true, 19.9999999, true, null], + [10.0, 20.0, true, 19.99_99_999, true, null], [10.0, 20.0, true, 4.2, false, NumberComparison::ERROR_NOT_GREATER_INCLUSIVE], - [10.0, 20.0, true, 20.000001, false, NumberComparison::ERROR_NOT_LESS_INCLUSIVE], + [10.0, 20.0, true, 20.00_00_01, false, NumberComparison::ERROR_NOT_LESS_INCLUSIVE], // Numeric strings behave as expected both as options and input ['10', '20', true, 10.1, true, null], ['10', '20', true, 15, true, null], diff --git a/test/StringLengthTest.php b/test/StringLengthTest.php index 7de69898..672dfa5c 100644 --- a/test/StringLengthTest.php +++ b/test/StringLengthTest.php @@ -89,7 +89,7 @@ public function testMalformedMultiByteDataWillCauseValidationFailure(): void * Warnings are silenced to prevent the test from failing */ // phpcs:disable - set_error_handler(fn(int $_a, string $_b): bool => true, E_WARNING); + set_error_handler(static fn(int $_a, string $_b): bool => true, E_WARNING); // phpcs:enable $malformed = chr(0xED) . chr(0xA0) . chr(0x80); diff --git a/test/UndisclosedPasswordTest.php b/test/UndisclosedPasswordTest.php index 90371f77..f8296464 100644 --- a/test/UndisclosedPasswordTest.php +++ b/test/UndisclosedPasswordTest.php @@ -123,7 +123,7 @@ public function testStrongUnseenPasswordsPassValidation(string $password): void ->willReturn(sprintf( '%s:%d', strtoupper(substr($hash, $constant)), - random_int(0, 100000), + random_int(0, 100_000), )); return $this->stream; @@ -162,7 +162,7 @@ public function testBreachedPasswordsDoNotPassValidation(string $password): void ->willReturn(sprintf( '%s:%d', strtoupper(substr($hash, $constant)), - random_int(0, 100000), + random_int(0, 100_000), )); return $this->stream; From f12ff6211c80c9ccf993a0ec861736fd9e7a4de0 Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 6 Jul 2026 10:04:41 +0100 Subject: [PATCH 4/5] Complete Mago configuration, adding baselines for violations and removing now redundant configuration files Signed-off-by: George Steel --- .gitattributes | 8 +- .github/workflows/continuous-integration.yml | 45 + .gitignore | 2 - .psr-container.php.stub | 23 - Makefile | 29 +- baseline.lint.toml | 643 +++++++ baseline.sa.toml | 1777 ++++++++++++++++++ composer.json | 7 +- mago.toml | 57 +- phpcs.xml | 27 - psalm-baseline.xml | 215 --- psalm.xml.dist | 48 - 12 files changed, 2548 insertions(+), 333 deletions(-) delete mode 100644 .psr-container.php.stub create mode 100644 baseline.lint.toml create mode 100644 baseline.sa.toml delete mode 100644 phpcs.xml delete mode 100644 psalm-baseline.xml delete mode 100644 psalm.xml.dist diff --git a/.gitattributes b/.gitattributes index 95e382d5..f1512683 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,15 +4,15 @@ /.gitattributes export-ignore /.gitignore export-ignore /.laminas-ci.json export-ignore -/.psr-container.php.stub export-ignore /mkdocs.yml export-ignore -/phpcs.xml export-ignore /phpunit.xml.dist export-ignore -/psalm-baseline.xml export-ignore -/psalm.xml.dist export-ignore /composer-require-checker.json export-ignore /composer.lock export-ignore /renovate.json export-ignore /bin/ export-ignore /tools/ export-ignore /Makefile export-ignore + +mago.toml export-ignore +baseline.lint.toml export-ignore +baseline.sa.toml export-ignore diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 654f2419..edd29025 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -29,3 +29,48 @@ jobs: - uses: ramsey/composer-install@4.0.0 - run: make install-tools - run: make composer-require-checker + + mago-lint: + name: "Mago Lint" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 + with: + persist-credentials: false + - uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 + with: + php-version: ${{ env.default_php }} + extensions: ${{ env.php_extensions }} + ini-values: memory_limit=-1 + - uses: "ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda" # 4.0.0 + - run: vendor/bin/mago lint + + mago-analyse: + name: "Mago Analyse" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 + with: + persist-credentials: false + - uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 + with: + php-version: ${{ env.default_php }} + extensions: ${{ env.php_extensions }} + ini-values: memory_limit=-1 + - uses: "ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda" # 4.0.0 + - run: vendor/bin/mago analyse + + mago-format: + name: "Mago Format" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 + with: + persist-credentials: false + - uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2 + with: + php-version: ${{ env.default_php }} + extensions: ${{ env.php_extensions }} + ini-values: memory_limit=-1 + - uses: "ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda" # 4.0.0 + - run: vendor/bin/mago format --dry-run diff --git a/.gitignore b/.gitignore index 73dab407..fb0b632a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ -/.phpcs-cache /.phpunit.cache -/clover.xml /docs/html/ /laminas-mkdoc-theme.tgz /laminas-mkdoc-theme/ diff --git a/.psr-container.php.stub b/.psr-container.php.stub deleted file mode 100644 index ee3588f3..00000000 --- a/.psr-container.php.stub +++ /dev/null @@ -1,23 +0,0 @@ - $id - * @psalm-return ($id is class-string ? T : mixed) - */ - public function get(string $id): mixed; - } -} diff --git a/Makefile b/Makefile index bf60403e..91bd18af 100644 --- a/Makefile +++ b/Makefile @@ -52,18 +52,37 @@ clean: ## Clear out caches and documentation assets docker image rm laminas/mkdocs rm -rf .phpunit.cache rm -f .phpcs-cache - vendor/bin/psalm --clear-cache static-analysis: ## Run static analysis checks - vendor/bin/psalm --no-cache + vendor/bin/mago analyse .PHONY: static-analysis +update-sa-baseline: ## Refresh the Mago SA baseline + vendor/bin/mago analyse --remove-outdated-baseline-entries +.PHONY: update-sa-baseline + +set-sa-baseline: ## Add violations to the Mago SA Baseline + vendor/bin/mago analyse --generate-baseline +.PHONY: set-sa-baseline + +lint: ## Run mago lint + vendor/bin/mago lint +.PHONY: lint + +update-lint-baseline: ## Refresh the Mago lint baseline + vendor/bin/mago lint --remove-outdated-baseline-entries +.PHONY: update-sa-baseline + +set-lint-baseline: ## Add violations to the Mago lint Baseline + vendor/bin/mago lint --generate-baseline +.PHONY: set-sa-baseline + coding-standards: ## Run coding standards checks - vendor/bin/phpcs + vendor/bin/mago format --dry-run .PHONY: coding-standards coding-standards-fix: ## Fix coding standard violations - vendor/bin/phpcbf + vendor/bin/mago format .PHONY: coding-standards-fix test: ## Run unit tests @@ -89,5 +108,5 @@ check-links: ## Check documentation links @docker run -it -w /app -v ${PWD}:/app --rm ${LINK_CHECKER_IMAGE} -t 5 -qq -f raw "docs/**/*.md" README.md .PHONY: check-links -qa: coding-standards static-analysis test composer-require-checker docs-lint check-links ## Run all QA Checks +qa: coding-standards static-analysis lint test composer-require-checker docs-lint check-links ## Run all QA Checks .PHONY: qa diff --git a/baseline.lint.toml b/baseline.lint.toml new file mode 100644 index 00000000..1c7af0c0 --- /dev/null +++ b/baseline.lint.toml @@ -0,0 +1,643 @@ +variant = "loose" + +[[issues]] +file = "src/AbstractValidator.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 2 + +[[issues]] +file = "src/AbstractValidator.php" +code = "too-many-methods" +message = "Class has too many methods." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "too-many-properties" +message = "Class has too many properties." +count = 1 + +[[issues]] +file = "src/BackedEnumValue.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/Barcode/Codabar.php" +code = "no-else-clause" +message = "Avoid `elseif` clauses." +count = 1 + +[[issues]] +file = "src/Barcode/Code128.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/Barcode/Code128.php" +code = "halstead" +message = "Method has a high halstead difficulty and effort" +count = 1 + +[[issues]] +file = "src/Barcode/Code128.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "src/Barcode/Code128.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 11 + +[[issues]] +file = "src/Barcode/Code128.php" +code = "no-else-clause" +message = "Avoid `elseif` clauses." +count = 15 + +[[issues]] +file = "src/Barcode/Code93.php" +code = "strict-behavior" +message = "Call to `array_search` must enforce strict comparison." +count = 2 + +[[issues]] +file = "src/Barcode/Issn.php" +code = "no-insecure-comparison" +message = "Insecure comparison of sensitive data." +count = 1 + +[[issues]] +file = "src/Barcode/Issn.php" +code = "no-literal-password" +message = "Literal passwords or sensitive data should not be stored in code." +count = 1 + +[[issues]] +file = "src/Barcode/Royalmail.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 1 + +[[issues]] +file = "src/Barcode/Royalmail.php" +code = "strict-behavior" +message = "Call to `array_keys` must enforce strict comparison." +count = 2 + +[[issues]] +file = "src/Barcode/Util.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 3 + +[[issues]] +file = "src/Bitwise.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/BusinessIdentifierCode.php" +code = "no-empty" +message = "Use of the `empty` construct." +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "halstead" +message = "Method has a high halstead difficulty and effort" +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "strict-behavior" +message = "Call to `in_array` must enforce strict comparison." +count = 1 + +[[issues]] +file = "src/DateComparison.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/DateComparison.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "halstead" +message = "Method has a high halstead volume, difficulty, and effort" +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "identity-comparison" +message = "Use identity comparison `===` instead of equality comparison `==`." +count = 2 + +[[issues]] +file = "src/DateStep.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 3 + +[[issues]] +file = "src/DateStep.php" +code = "no-else-clause" +message = "Avoid `elseif` clauses." +count = 2 + +[[issues]] +file = "src/DateStep.php" +code = "strict-behavior" +message = "Call to `in_array` must enforce strict comparison." +count = 2 + +[[issues]] +file = "src/EmailAddress.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "no-else-clause" +message = "Avoid `elseif` clauses." +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "no-shorthand-ternary" +message = "Use of the shorthand ternary operator." +count = 1 + +[[issues]] +file = "src/Explode.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/Explode.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 1 + +[[issues]] +file = "src/File/ExcludeExtension.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 1 + +[[issues]] +file = "src/File/Extension.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/File/Extension.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "src/File/FileInformation.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/File/FileInformation.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 1 + +[[issues]] +file = "src/File/FilesSize.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/File/FilesSize.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/File/FilesSize.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 1 + +[[issues]] +file = "src/File/ImageSize.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/File/ImageSize.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/File/MimeType.php" +code = "strict-behavior" +message = "Call to `in_array` must enforce strict comparison." +count = 1 + +[[issues]] +file = "src/File/Size.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/File/Size.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/File/UploadFile.php" +code = "no-empty" +message = "Use of the `empty` construct." +count = 1 + +[[issues]] +file = "src/File/UploadFile.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/HostWithPublicIPv4Address.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "excessive-nesting" +message = "Excessive block nesting." +count = 3 + +[[issues]] +file = "src/Hostname.php" +code = "halstead" +message = "Method has a high halstead volume, difficulty, and effort" +count = 2 + +[[issues]] +file = "src/Hostname.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 5 + +[[issues]] +file = "src/Hostname.php" +code = "no-else-clause" +message = "Avoid `elseif` clauses." +count = 4 + +[[issues]] +file = "src/Hostname.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 2 + +[[issues]] +file = "src/Hostname.php" +code = "no-nested-ternary" +message = "Nested ternary expressions are confusing due to PHP's operator associativity rules." +count = 3 + +[[issues]] +file = "src/Hostname.php" +code = "strict-behavior" +message = "Call to `in_array` must enforce strict comparison." +count = 2 + +[[issues]] +file = "src/Iban.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 1 + +[[issues]] +file = "src/Iban.php" +code = "strict-behavior" +message = "Call to `in_array` must enforce strict comparison." +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "identity-comparison" +message = "Use identity inequality `!==` instead of inequality comparison `!=`." +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 2 + +[[issues]] +file = "src/Identical.php" +code = "no-literal-password" +message = "Literal passwords or sensitive data should not be stored in code." +count = 2 + +[[issues]] +file = "src/InArray.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/InArray.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/InArray.php" +code = "identity-comparison" +message = "Use identity comparison `===` instead of equality comparison `==`." +count = 1 + +[[issues]] +file = "src/InArray.php" +code = "strict-behavior" +message = "Call to `in_array` must enforce strict comparison." +count = 2 + +[[issues]] +file = "src/Ip.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/Ip.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 1 + +[[issues]] +file = "src/Ip.php" +code = "no-else-clause" +message = "Avoid `elseif` clauses." +count = 2 + +[[issues]] +file = "src/IsCountable.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/IsJsonString.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/Isbn.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/NotEmpty.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/NotEmpty.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/NotEmpty.php" +code = "halstead" +message = "Method has a high halstead difficulty and effort" +count = 1 + +[[issues]] +file = "src/NotEmpty.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "src/NotEmpty.php" +code = "no-else-clause" +message = "Avoid `elseif` clauses." +count = 3 + +[[issues]] +file = "src/NumberComparison.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/NumberComparison.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/StringLength.php" +code = "halstead" +message = "Method has a high halstead difficulty" +count = 1 + +[[issues]] +file = "src/Uri.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 2 + +[[issues]] +file = "src/ValidatorChain.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "src/ValidatorChain.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "src/ValidatorChain.php" +code = "too-many-methods" +message = "Class has too many methods." +count = 1 + +[[issues]] +file = "src/ValidatorPluginManagerFactory.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 1 + +[[issues]] +file = "test/AbstractValidatorTest.php" +code = "no-isset" +message = "Use of the `isset` construct." +count = 1 + +[[issues]] +file = "test/EmailAddressTest.php" +code = "cyclomatic-complexity" +message = "Class has high complexity." +count = 1 + +[[issues]] +file = "test/EmailAddressTest.php" +code = "kan-defect" +message = "Class has a high kan defect score." +count = 1 + +[[issues]] +file = "test/File/IsCompressedTest.php" +code = "strict-behavior" +message = "Call to `in_array` must enforce strict comparison." +count = 3 + +[[issues]] +file = "test/HostnameTest.php" +code = "no-ini-set" +message = "ini_set should not be used." +count = 2 + +[[issues]] +file = "test/IdenticalTest.php" +code = "no-literal-password" +message = "Literal passwords or sensitive data should not be stored in code." +count = 7 + +[[issues]] +file = "test/IpTest.php" +code = "no-else-clause" +message = "Avoid `else` clauses." +count = 2 + +[[issues]] +file = "test/TestAsset/CustomTraversable.php" +code = "strict-types" +message = "Missing `declare(strict_types=1);` statement at the beginning of the file." +count = 1 diff --git a/baseline.sa.toml b/baseline.sa.toml new file mode 100644 index 00000000..33e16c56 --- /dev/null +++ b/baseline.sa.toml @@ -0,0 +1,1777 @@ +variant = "loose" + +[[issues]] +file = "src/AbstractValidator.php" +code = "possibly-null-argument" +message = "Argument #1 of function `array_key_exists` is possibly `null`, but parameter type `bool|float|int|string` does not accept it." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "possibly-null-argument" +message = 'Argument #1 of method `Laminas\Validator\AbstractValidator::translateMessage` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string` accessed on `array`." +count = 2 + +[[issues]] +file = "src/AbstractValidator.php" +code = "redundant-comparison" +message = "Redundant `===` comparison: left-hand side is always identical to right-hand side." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "redundant-docblock-type" +message = "Redundant docblock type for variable `$messages`." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "redundant-logical-operation" +message = "Redundant `||` operation: left operand is evaluated and right operand is always truthy." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "redundant-type-comparison" +message = "Redundant condition: variable `$translator` (type `null`) is already known to be `null`." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$messages` is already `array`." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$translatorEnabled` is already `bool`." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$translatorTextDomain` is already `string`." +count = 1 + +[[issues]] +file = "src/AbstractValidator.php" +code = "string-member-selector" +message = "This member selector uses a non-literal string type (`string`); its specific value cannot be statically determined." +count = 2 + +[[issues]] +file = "src/AbstractValidator.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Validator\Exception\RuntimeException` in `Laminas\Validator\AbstractValidator::__invoke`.' +count = 1 + +[[issues]] +file = "src/BackedEnumValue.php" +code = "no-value" +message = "Argument #2 passed to function `sprintf` has type `never`, meaning it cannot produce a value." +count = 1 + +[[issues]] +file = "src/BackedEnumValue.php" +code = "possibly-static-access-on-interface" +message = "Potential static method call on interface `BackedEnum` via `class-string`." +count = 1 + +[[issues]] +file = "src/Barcode.php" +code = "unsafe-instantiation" +message = 'Potentially unsafe instantiation: `class-string` may contain the interface `Laminas\Validator\Barcode\AdapterInterface` itself, which cannot be instantiated.' +count = 1 + +[[issues]] +file = "src/Barcode/AdapterInterface.php" +code = "missing-return-type" +message = "Function `getLength` is missing a return type hint." +count = 1 + +[[issues]] +file = "src/Barcode/Code128.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Stdlib\Exception\RuntimeException` in `Laminas\Validator\Barcode\Code128::__construct`.' +count = 1 + +[[issues]] +file = "src/Barcode/Code25interleaved.php" +code = "docblock-type-mismatch" +message = 'Docblock return type `!Laminas\Validator\Barcode\AdapterInterface::AllowedLength` is incompatible with native return type `string`.' +count = 1 + +[[issues]] +file = "src/Barcode/Code39.php" +code = "possibly-null-operand" +message = "Right operand in arithmetic operation might be `null` (type `int(0)|int(1)|int(10)|int(11)|int(12)|int(13)|int(14)|int(15)|int(16)|int(17)|int(18)|int(19)|int(2)|int(20)|int(21)|int(22)|int(23)|int(24)|int(25)|int(26)|int(27)|int(28)|int(29)|int(3)|int(30)|int(31)|int(32)|int(33)|int(34)|int(35)|int(36)|int(37)|int(38)|int(39)|int(4)|int(40)|int(41)|int(42)|int(5)|int(6)|int(7)|int(8)|int(9)|null`)." +count = 1 + +[[issues]] +file = "src/Barcode/Code39.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string` accessed on `array{' ': int(38), '$': int(39), '%': int(42), '+': int(41), '-': int(36), '.': int(37), '/': int(40), '0': int(0), '1': int(1), '2': int(2), '3': int(3), '4': int(4), '5': int(5), '6': int(6), '7': int(7), '8': int(8), '9': int(9), 'A': int(10), 'B': int(11), 'C': int(12), 'D': int(13), 'E': int(14), 'F': int(15), 'G': int(16), 'H': int(17), 'I': int(18), 'J': int(19), 'K': int(20), 'L': int(21), 'M': int(22), 'N': int(23), 'O': int(24), 'P': int(25), 'Q': int(26), 'R': int(27), 'S': int(28), 'T': int(29), 'U': int(30), 'V': int(31), 'W': int(32), 'X': int(33), 'Y': int(34), 'Z': int(35)}`." +count = 2 + +[[issues]] +file = "src/Barcode/Code93.php" +code = "possibly-null-operand" +message = "Left operand in arithmetic operation might be `null` (type `int(0)|int(1)|int(10)|int(11)|int(12)|int(13)|int(14)|int(15)|int(16)|int(17)|int(18)|int(19)|int(2)|int(20)|int(21)|int(22)|int(23)|int(24)|int(25)|int(26)|int(27)|int(28)|int(29)|int(3)|int(30)|int(31)|int(32)|int(33)|int(34)|int(35)|int(36)|int(37)|int(38)|int(39)|int(4)|int(40)|int(41)|int(42)|int(43)|int(44)|int(45)|int(46)|int(5)|int(6)|int(7)|int(8)|int(9)|null`)." +count = 2 + +[[issues]] +file = "src/Barcode/Code93.php" +code = "possibly-undefined-string-array-index" +message = """Possibly undefined array key `string` accessed on `array{' ': int(38), '!': int(43), '"': int(44), '$': int(39), '%': int(42), '&': int(46), '+': int(41), '-': int(36), '.': int(37), '/': int(40), '0': int(0), '1': int(1), '2': int(2), '3': int(3), '4': int(4), '5': int(5), '6': int(6), '7': int(7), '8': int(8), '9': int(9), 'A': int(10), 'B': int(11), 'C': int(12), 'D': int(13), 'E': int(14), 'F': int(15), 'G': int(16), 'H': int(17), 'I': int(18), 'J': int(19), 'K': int(20), 'L': int(21), 'M': int(22), 'N': int(23), 'O': int(24), 'P': int(25), 'Q': int(26), 'R': int(27), 'S': int(28), 'T': int(29), 'U': int(30), 'V': int(31), 'W': int(32), 'X': int(33), 'Y': int(34), 'Z': int(35), '§': int(45)}`.""" +count = 2 + +[[issues]] +file = "src/Barcode/Intelligentmail.php" +code = "docblock-type-mismatch" +message = 'Docblock return type `!Laminas\Validator\Barcode\AdapterInterface::AllowedLength` is incompatible with native return type `array`.' +count = 1 + +[[issues]] +file = "src/Barcode/Issn.php" +code = "docblock-type-mismatch" +message = 'Docblock return type `!Laminas\Validator\Barcode\AdapterInterface::AllowedLength` is incompatible with native return type `array`.' +count = 1 + +[[issues]] +file = "src/Barcode/Planet.php" +code = "docblock-type-mismatch" +message = 'Docblock return type `!Laminas\Validator\Barcode\AdapterInterface::AllowedLength` is incompatible with native return type `array`.' +count = 1 + +[[issues]] +file = "src/Barcode/Postnet.php" +code = "docblock-type-mismatch" +message = 'Docblock return type `!Laminas\Validator\Barcode\AdapterInterface::AllowedLength` is incompatible with native return type `array`.' +count = 1 + +[[issues]] +file = "src/Barcode/Royalmail.php" +code = "possibly-null-operand" +message = "Right operand in arithmetic operation might be `null` (type `int|null`)." +count = 2 + +[[issues]] +file = "src/Barcode/Royalmail.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string` accessed on `array`." +count = 2 + +[[issues]] +file = "src/Barcode/Upce.php" +code = "docblock-type-mismatch" +message = 'Docblock return type `!Laminas\Validator\Barcode\AdapterInterface::AllowedLength` is incompatible with native return type `array`.' +count = 1 + +[[issues]] +file = "src/BusinessIdentifierCode.php" +code = "possibly-null-argument" +message = 'Argument #1 of method `Laminas\Validator\BusinessIdentifierCode::isSwiftValidCountry` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "src/BusinessIdentifierCode.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('country')` accessed on `array`." +count = 1 + +[[issues]] +file = "src/BusinessIdentifierCode.php" +code = "reference-to-undefined-variable" +message = "Reference created from a previously undefined variable `$matches`." +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "invalid-docblock" +message = "Invalid type in `@var` tag for variable `$options`." +count = 2 + +[[issues]] +file = "src/Callback.php" +code = "invalid-method-access" +message = "Attempting to access a method on a non-object type (`(closure(...mixed): mixed)`)." +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "invalid-method-access" +message = "Attempting to access a method on a non-object type (`(closure(mixed, array, ...mixed): bool)`)." +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\AbstractValidator::__construct`: expected `array{'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool, ...}`, but possibly received `array{'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}|array{0: class-string|object, 1: non-empty-string}|array{}`.''' +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "possibly-undefined-string-array-index" +message = '''Possibly undefined array key accessed on `array{'bind'?: bool, 'callback': (callable(mixed, array, ...mixed): bool), 'callbackOptions'?: array, 'messages'?: array, 'throwExceptions'?: bool, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}|array{'callback': (callable(...mixed): mixed)}|array{0: class-string|object, 1: non-empty-string}`.''' +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "possibly-undefined-string-array-index" +message = '''Possibly undefined array key accessed on `array{'bind'?: bool, 'callbackOptions'?: array, 'messages'?: array, 'throwExceptions'?: bool, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}|array{0: class-string|object, 1: non-empty-string}|array{}`.''' +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "possibly-undefined-string-array-index" +message = '''Possibly undefined array key accessed on `array{'bind'?: bool, 'messages'?: array, 'throwExceptions'?: bool, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}|array{0: class-string|object, 1: non-empty-string}|array{}`.''' +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "possibly-undefined-string-array-index" +message = '''Possibly undefined array key accessed on `array{'bind'?: bool, 'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}|array{0: class-string|object, 1: non-empty-string}|array{}`.''' +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$bind` is already `bool`." +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$throw` is already `bool`." +count = 1 + +[[issues]] +file = "src/Callback.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Exception` in `Laminas\Validator\Callback::isValid`.' +count = 1 + +[[issues]] +file = "src/Conditional.php" +code = "redundant-null-coalesce" +message = "Redundant null coalesce: left-hand side can never be `null` or undefined." +count = 1 + +[[issues]] +file = "src/Conditional.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$rule` is already `(callable(array): bool)`." +count = 1 + +[[issues]] +file = "src/ConditionalFactory.php" +code = "imprecise-type" +message = "Type `array` in parameter `$options` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "src/ConditionalFactory.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #2 of `Laminas\Validator\Conditional::__construct`: expected `array{'rule': (callable(array): bool), 'validators': array|string, 'options'?: array, 'priority'?: int}>}`, but possibly received `array`.''' +count = 1 + +[[issues]] +file = "src/ConfigProvider.php" +code = "docblock-type-mismatch" +message = 'Docblock return type `!laminas\servicemanager\servicemanager::ServiceManagerConfiguration` is incompatible with native return type `array`.' +count = 1 + +[[issues]] +file = "src/ConfigProvider.php" +code = "invalid-return-statement" +message = '''Invalid return type for function `Laminas\Validator\ConfigProvider::getDependencyConfig`: expected `array{'abstract_factories'?: array>, 'aliases'?: array, 'delegators'?: !Laminas\ServiceManager\ServiceManager::DelegatorsConfiguration, 'factories'?: !Laminas\ServiceManager\ServiceManager::FactoriesConfiguration, 'initializers'?: !Laminas\ServiceManager\ServiceManager::InitializersConfiguration, 'invokables'?: array, 'lazy_services'?: array{'class_map'?: array, 'proxies_namespace'?: non-empty-string, 'proxies_target_dir'?: non-empty-string, 'write_proxy_files'?: bool}, 'services'?: array, 'shared'?: array, 'shared_by_default'?: bool, ...}`, but found `array{'aliases': array{'Laminas\Validator\ValidatorChainInterface': class-string('Laminas\Validator\ValidatorChain'), 'ValidatorManager': class-string('Laminas\Validator\ValidatorPluginManager')}, 'factories': array{'Laminas\Validator\ValidatorChainFactory': class-string('Laminas\Validator\ValidatorChainFactoryFactory'), 'Laminas\Validator\ValidatorPluginManager': class-string('Laminas\Validator\ValidatorPluginManagerFactory')}}`.''' +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "possibly-null-argument" +message = "Argument #2 of function `in_array` is possibly `null`, but parameter type `array` does not accept it." +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "possibly-null-iterator" +message = "Expression being iterated (type `list{string('1800'), string('2131'), string('3528'), string('3529'), string('353'), string('354'), string('355'), string('356'), string('357'), string('358')}|list{string('2200'), string('2201'), string('2202'), string('2203'), string('2204')}|list{string('2221'), string('2222'), string('2223'), string('2224'), string('2225'), string('2226'), string('2227'), string('2228'), string('2229'), string('223'), string('224'), string('225'), string('226'), string('227'), string('228'), string('229'), string('23'), string('24'), string('25'), string('26'), string('271'), string('2720'), string('51'), string('52'), string('53'), string('54'), string('55')}|list{string('300'), string('301'), string('302'), string('303'), string('304'), string('305'), string('36')}|list{string('34'), string('37')}|list{string('4')}|list{string('5018'), string('5020'), string('5038'), string('6304'), string('6759'), string('6761'), string('6762'), string('6763'), string('6764'), string('6765'), string('6766'), string('6772')}|list{string('54'), string('55')}|list{string('6011'), string('622126'), string('622127'), string('622128'), string('622129'), string('62213'), string('62214'), string('62215'), string('62216'), string('62217'), string('62218'), string('62219'), string('6222'), string('6223'), string('6224'), string('6225'), string('6226'), string('6227'), string('6228'), string('62290'), string('62291'), string('622920'), string('622921'), string('622922'), string('622923'), string('622924'), string('622925'), string('644'), string('645'), string('646'), string('647'), string('648'), string('649'), string('65')}|list{string('622126'), string('622127'), string('622128'), string('622129'), string('62213'), string('62214'), string('62215'), string('62216'), string('62217'), string('62218'), string('62219'), string('6222'), string('6223'), string('6224'), string('6225'), string('6226'), string('6227'), string('6228'), string('62290'), string('62291'), string('622920'), string('622921'), string('622922'), string('622923'), string('622924'), string('622925')}|list{string('6304'), string('6706'), string('6771'), string('6709')}|list{string('6334'), string('6767')}|null`) might be `null` at runtime." +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('American_Express')|string('Diners_Club')|string('Diners_Club_US')|string('Discover')|string('JCB')|string('Laser')|string('Maestro')|string('Mastercard')|string('Mir')|string('Solo')|string('Unionpay')|string('Visa')` accessed on `array`." +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('American_Express')|string('Diners_Club')|string('Diners_Club_US')|string('Discover')|string('JCB')|string('Laser')|string('Maestro')|string('Mastercard')|string('Mir')|string('Solo')|string('Unionpay')|string('Visa')` accessed on `array`." +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "redundant-docblock-type" +message = "Redundant docblock type for expression." +count = 1 + +[[issues]] +file = "src/CreditCard.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$service` is already `(callable(mixed, array, ...mixed): bool)`." +count = 1 + +[[issues]] +file = "src/Date.php" +code = "imprecise-type" +message = "Type `array` in parameter `$value` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "src/Date.php" +code = "less-specific-nested-argument-type" +message = "Argument type mismatch for argument #2 of `implode`: expected `array|null`, but provided type `array` is less specific." +count = 1 + +[[issues]] +file = "src/Date.php" +code = "mixed-argument" +message = 'Invalid argument type for argument #1 of `Laminas\Validator\Date::convertArray`: expected `array`, but found `mixed`.' +count = 1 + +[[issues]] +file = "src/Date.php" +code = "mixed-argument" +message = 'Invalid argument type for argument #1 of `Laminas\Validator\Date::convertNumeric`: expected `float|int`, but found `mixed`.' +count = 1 + +[[issues]] +file = "src/Date.php" +code = "mixed-argument" +message = 'Invalid argument type for argument #1 of `Laminas\Validator\Date::convertString`: expected `string`, but found `mixed`.' +count = 1 + +[[issues]] +file = "src/DateComparison.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `DateInvalidTimeZoneException` in `Laminas\Validator\DateComparison::isoDateFromString`.' +count = 1 + +[[issues]] +file = "src/DateComparison.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `DateInvalidTimeZoneException` in `Laminas\Validator\DateComparison::valueToDate`.' +count = 1 + +[[issues]] +file = "src/DateComparison.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `DateInvalidTimeZoneException` in `Laminas\Validator\DateComparison::w3cDateFromString`.' +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "missing-parameter-type" +message = "Parameter `$minSteps` is missing a type hint." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "missing-return-type" +message = "Function `computeMinSteps` is missing a return type hint." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 4 + +[[issues]] +file = "src/DateStep.php" +code = "mixed-method-access" +message = "Attempting to access a method on a non-object type (`mixed`)." +count = 4 + +[[issues]] +file = "src/DateStep.php" +code = "mixed-operand" +message = "Left operand in `<` comparison has `mixed` type." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "mixed-operand" +message = "Left operand in `==` comparison has `mixed` type." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "mixed-operand" +message = "Left operand in `>` comparison has `mixed` type." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-null-operand" +message = "Left operand in arithmetic operation might be `null` (type `int|null`)." +count = 22 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-null-operand" +message = "Right operand in arithmetic operation might be `null` (type `int|null`)." +count = 5 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array key `int(0)` accessed on `array`." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array key `int(1)` accessed on `array`." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array key `int(2)` accessed on `array`." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('days')` accessed on `array`." +count = 3 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('days')` accessed on `non-empty-array`." +count = 2 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('hours')` accessed on `array`." +count = 3 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('hours')` accessed on `non-empty-array`." +count = 6 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('minutes')` accessed on `array`." +count = 3 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('minutes')` accessed on `non-empty-array`." +count = 7 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('months')` accessed on `array`." +count = 3 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('months')` accessed on `non-empty-array`." +count = 2 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('seconds')` accessed on `array`." +count = 3 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('seconds')` accessed on `non-empty-array`." +count = 8 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('years')` accessed on `array`." +count = 3 + +[[issues]] +file = "src/DateStep.php" +code = "possibly-undefined-string-array-index" +message = "Possibly undefined array key `string('years')` accessed on `non-empty-array`." +count = 2 + +[[issues]] +file = "src/DateStep.php" +code = "reference-to-undefined-variable" +message = "Reference created from a previously undefined variable `$matches`." +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `DateInvalidTimeZoneException` in `Laminas\Validator\DateStep::convertString`.' +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `DateInvalidTimeZoneException` in `Laminas\Validator\DateStep::isValid`.' +count = 1 + +[[issues]] +file = "src/DateStep.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Validator\Exception\RuntimeException` in `Laminas\Validator\DateStep::isValid`.' +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "invalid-return-statement" +message = '''Invalid return type for function `Laminas\Validator\EmailAddress::splitEmailParts`: expected `array{'hostname': string, 'localPart': string}|false`, but found `array{'hostname': string, 'localPart': null|string}`.''' +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "possibly-null-argument" +message = 'Argument #1 of method `Laminas\Validator\EmailAddress::idnToAscii` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "possibly-null-array-index" +message = "Possibly using `null` as an array index to access elementof variable $this->messageTemplates." +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array key `int(1)` accessed on `array`." +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array key `int(2)` accessed on `array`." +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "reference-to-undefined-variable" +message = "Reference created from a previously undefined variable `$matches`." +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Validator\Exception\RuntimeException` in `Laminas\Validator\EmailAddress::isReserved`.' +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Validator\Exception\RuntimeException` in `Laminas\Validator\EmailAddress::validateHostnamePart`.' +count = 1 + +[[issues]] +file = "src/EmailAddress.php" +code = "unused-parameter" +message = "Parameter `$value` is never used." +count = 2 + +[[issues]] +file = "src/EnumCase.php" +code = "no-value" +message = "Argument #2 passed to function `sprintf` has type `never`, meaning it cannot produce a value." +count = 1 + +[[issues]] +file = "src/EnumCase.php" +code = "possibly-static-access-on-interface" +message = "Potential static method call on interface `BackedEnum` via `class-string`." +count = 1 + +[[issues]] +file = "src/EnumCase.php" +code = "possibly-static-access-on-interface" +message = "Potential static method call on interface `UnitEnum` via `class-string`." +count = 1 + +[[issues]] +file = "src/Explode.php" +code = "impossible-condition" +message = "This condition (type `false`) will always evaluate to false." +count = 1 + +[[issues]] +file = "src/Explode.php" +code = "mixed-return-statement" +message = 'Could not infer a precise return type for function `Laminas\Validator\Explode::resolveValidator`. Saw type `mixed`.' +count = 2 + +[[issues]] +file = "src/Explode.php" +code = "too-many-arguments" +message = 'Too many arguments provided for method `Laminas\Validator\ValidatorInterface::isValid`.' +count = 1 + +[[issues]] +file = "src/Explode.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Validator\Exception\RuntimeException` in `Laminas\Validator\Explode::__construct`.' +count = 1 + +[[issues]] +file = "src/File/ExcludeExtension.php" +code = "redundant-null-coalesce" +message = "Redundant null coalesce: left-hand side can never be `null` or undefined." +count = 1 + +[[issues]] +file = "src/File/Exists.php" +code = "imprecise-type" +message = "Type `array` in parameter `$directories` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "src/File/Extension.php" +code = "less-specific-nested-return-statement" +message = '''Returned type `array{}|list` is less specific than the declared return type `list` for function `Laminas\Validator\File\Extension::listPossibleFileNameExtensions` due to nested 'mixed'.''' +count = 1 + +[[issues]] +file = "src/File/Extension.php" +code = "mixed-argument" +message = 'Invalid argument type for argument #1 of `Laminas\Validator\File\Extension::listPossibleFileNameExtensions`: expected `non-empty-string`, but found `mixed`.' +count = 1 + +[[issues]] +file = "src/File/Extension.php" +code = "mixed-argument" +message = "Invalid argument type for argument #3 of `sprintf`: expected `Stringable|null|scalar`, but found `mixed`." +count = 1 + +[[issues]] +file = "src/File/Extension.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 2 + +[[issues]] +file = "src/File/Extension.php" +code = "redundant-null-coalesce" +message = "Redundant null coalesce: left-hand side can never be `null` or undefined." +count = 1 + +[[issues]] +file = "src/File/FileInformation.php" +code = "imprecise-type" +message = "Type `array` in parameter `$value` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "src/File/FileInformation.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 4 + +[[issues]] +file = "src/File/FileInformation.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Validator\Exception\RuntimeException` in `Laminas\Validator\File\FileInformation::factory`.' +count = 1 + +[[issues]] +file = "src/File/FileInformation.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `RuntimeException` in `Laminas\Validator\File\FileInformation::factory`.' +count = 1 + +[[issues]] +file = "src/File/FilesSize.php" +code = "invalid-iterator" +message = "The expression provided to `foreach` is not iterable. It resolved to type `mixed`, which is not iterable." +count = 1 + +[[issues]] +file = "src/File/FilesSize.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 1 + +[[issues]] +file = "src/File/Hash.php" +code = "redundant-null-coalesce" +message = "Redundant null coalesce: left-hand side can never be `null` or undefined." +count = 1 + +[[issues]] +file = "src/File/NotExists.php" +code = "imprecise-type" +message = "Type `array` in parameter `$directories` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "invalid-operand" +message = "Invalid type for left operand." +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "invalid-type-cast" +message = "Non numeric string of type `string` implicitly cast to `float`." +count = 2 + +[[issues]] +file = "src/GpsPoint.php" +code = "mixed-argument" +message = "Invalid argument type for argument #1 of `str_contains`: expected `string`, but found `mixed`." +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "mixed-argument" +message = "Invalid argument type for argument #2 of `explode`: expected `string`, but found `mixed`." +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "mixed-operand" +message = "Left operand in binary operation has type `mixed`." +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "mixed-operand" +message = "Right operand in binary operation has type `mixed`." +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "mixed-return-statement" +message = 'Could not infer a precise return type for function `Laminas\Validator\GpsPoint::convertValue`. Saw type `mixed`.' +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "possibly-false-argument" +message = 'Argument #1 of method `Laminas\Validator\GpsPoint::removeDegreeSign` is possibly `false`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "possibly-false-operand" +message = "Left operand in `>` comparison might be `false` (type `false|int`)." +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "possibly-invalid-argument" +message = 'Possible argument type mismatch for argument #1 of `Laminas\Validator\GpsPoint::removeDegreeSign`: expected `string`, but possibly received `false|float|string`.' +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "possibly-null-argument" +message = 'Argument #1 of method `Laminas\Validator\GpsPoint::isValidCoordinate` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "possibly-null-array-access" +message = "Cannot perform array access on possibly `null` value." +count = 3 + +[[issues]] +file = "src/GpsPoint.php" +code = "possibly-null-operand" +message = "Left operand in arithmetic operation might be `null` (type `null|string`)." +count = 2 + +[[issues]] +file = "src/GpsPoint.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array index accessed on `list>`." +count = 3 + +[[issues]] +file = "src/GpsPoint.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array index accessed on `non-empty-list`." +count = 1 + +[[issues]] +file = "src/GpsPoint.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array key `int(0)` accessed on `array`." +count = 3 + +[[issues]] +file = "src/HostWithPublicIPv4Address.php" +code = "possibly-false-operand" +message = "Left operand in `<=` comparison might be `false` (type `false|int`)." +count = 1 + +[[issues]] +file = "src/HostWithPublicIPv4Address.php" +code = "possibly-false-operand" +message = "Left operand in `>=` comparison might be `false` (type `false|int`)." +count = 1 + +[[issues]] +file = "src/HostWithPublicIPv4Address.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array index accessed on `non-empty-list`." +count = 1 + +[[issues]] +file = "src/HostWithPublicIPv4Address.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$endIp` is already `int`." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "mixed-argument" +message = "Invalid argument type for argument #1 of `preg_match`: expected `string`, but found `mixed`." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 2 + +[[issues]] +file = "src/Hostname.php" +code = "no-value" +message = "Argument #1 passed to function `ord` has type `never`, meaning it cannot produce a value." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-false-operand" +message = "Left operand in `<=` comparison might be `false` (type `false|int`)." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-false-operand" +message = "Left operand in `>=` comparison might be `false` (type `false|int`)." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-false-operand" +message = "Left operand in `>` comparison might be `false` (type `false|int`)." +count = 3 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-false-operand" +message = "Left operand in `>` comparison might be `false` (type `false|non-negative-int`)." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-false-operand" +message = "Right operand in `<` comparison might be `false` (type `false|positive-int`)." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-invalid-operand" +message = "Right operand may be an `array` when compared with non-array type `false|int` using `>`." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-argument" +message = "Argument #1 of function `chr` is possibly `null`, but parameter type `int` does not accept it." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-argument" +message = "Argument #1 of function `str_starts_with` is possibly `null`, but parameter type `string` does not accept it." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-argument" +message = "Argument #1 of function `strtoupper` is possibly `null`, but parameter type `string` does not accept it." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-argument" +message = "Argument #1 of function `substr` is possibly `null`, but parameter type `string` does not accept it." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-operand" +message = "Left operand in `<` comparison might be `null` (type `int<128, max>|null`)." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-operand" +message = "Left operand in `<` comparison might be `null` (type `int<2048, max>|null`)." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-operand" +message = "Left operand in `<` comparison might be `null` (type `int<65536, max>|null`)." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-operand" +message = "Left operand in `<` comparison might be `null` (type `int|null`)." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-operand" +message = "Left operand in arithmetic operation might be `null` (type `int<128, 2047>|null`)." +count = 2 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-operand" +message = "Left operand in arithmetic operation might be `null` (type `int<2048, 65535>|null`)." +count = 3 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-null-operand" +message = "Left operand in arithmetic operation might be `null` (type `int<65536, 2097151>|null`)." +count = 4 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array index accessed on `list`." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array key `int(1)` accessed on `array`." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "redundant-docblock-type" +message = "Redundant docblock type for variable `$domainParts`." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$last` is already `string`." +count = 1 + +[[issues]] +file = "src/Hostname.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Stdlib\Exception\RuntimeException` in `Laminas\Validator\Hostname::isValid`.' +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "impossible-type-comparison" +message = "Impossible condition: variable `$matchTo` (type `int|string`) can never be `array`." +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "imprecise-type" +message = "Type `array` in parameter `$context` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "mixed-argument" +message = "Invalid argument type for argument #1 of `key`: expected `array<('K.key() extends array-key), mixed>|object`, but found `mixed`." +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "mixed-array-access" +message = "Unsafe array access on type `mixed`." +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 4 + +[[issues]] +file = "src/Identical.php" +code = "mixed-assignment" +message = "Assigning `nonnull` type to a variable may lead to unexpected behavior." +count = 2 + +[[issues]] +file = "src/Identical.php" +code = "mixed-operand" +message = "Left operand in `!=` comparison has `mixed` type." +count = 1 + +[[issues]] +file = "src/Identical.php" +code = "mixed-operand" +message = "Right operand in `!=` comparison has `mixed` type." +count = 1 + +[[issues]] +file = "src/InArray.php" +code = "impossible-condition" +message = "This condition (type `false`) will always evaluate to false." +count = 1 + +[[issues]] +file = "src/InArray.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 3 + +[[issues]] +file = "src/InArray.php" +code = "mixed-operand" +message = "Left operand in `==` comparison has `mixed` type." +count = 1 + +[[issues]] +file = "src/InArray.php" +code = "mixed-operand" +message = "Right operand in `==` comparison has `mixed` type." +count = 1 + +[[issues]] +file = "src/InArray.php" +code = "redundant-null-coalesce" +message = "Redundant null coalesce: left-hand side can never be `null` or undefined." +count = 1 + +[[issues]] +file = "src/InArray.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$haystack` is already `array`." +count = 1 + +[[issues]] +file = "src/Ip.php" +code = "possibly-null-argument" +message = 'Argument #1 of method `Laminas\Validator\Ip::validateIPv6` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "src/Ip.php" +code = "possibly-null-argument" +message = 'Argument #1 of method `Laminas\Validator\Ip::validateIPvFuture` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "src/Ip.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array key `int(1)` accessed on `array`." +count = 2 + +[[issues]] +file = "src/Ip.php" +code = "reference-to-undefined-variable" +message = "Reference created from a previously undefined variable `$matches`." +count = 2 + +[[issues]] +file = "src/IsInstanceOf.php" +code = "impossible-null-type-comparison" +message = "Impossible condition: variable `$className` (type `class-string`) will always be `null`." +count = 1 + +[[issues]] +file = "src/IsInstanceOf.php" +code = "redundant-comparison" +message = "Redundant `===` comparison: left-hand side is never identical to right-hand side." +count = 1 + +[[issues]] +file = "src/IsInstanceOf.php" +code = "redundant-logical-operation" +message = "Redundant `||` operation: left operand is always false and right operand is evaluated." +count = 1 + +[[issues]] +file = "src/IsInstanceOf.php" +code = "redundant-null-coalesce" +message = "Redundant null coalesce: left-hand side can never be `null` or undefined." +count = 1 + +[[issues]] +file = "src/KeyExists.php" +code = "impossible-condition" +message = "This condition (type `false`) will always evaluate to false." +count = 1 + +[[issues]] +file = "src/KeyExists.php" +code = "redundant-logical-operation" +message = "Redundant `&&` operation: left operand is evaluated and right operand is always falsy." +count = 1 + +[[issues]] +file = "src/KeyExists.php" +code = "redundant-null-coalesce" +message = "Redundant null coalesce: left-hand side can never be `null` or undefined." +count = 1 + +[[issues]] +file = "src/KeyExists.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$key` is already `int`." +count = 1 + +[[issues]] +file = "src/NotEmpty.php" +code = "redundant-docblock-type" +message = "Redundant docblock type for variable `$type`." +count = 1 + +[[issues]] +file = "src/Regex.php" +code = "impossible-condition" +message = "This condition (type `false`) will always evaluate to false." +count = 1 + +[[issues]] +file = "src/Regex.php" +code = "redundant-comparison" +message = "Redundant `===` comparison: left-hand side is never identical to right-hand side." +count = 1 + +[[issues]] +file = "src/Regex.php" +code = "redundant-logical-operation" +message = "Redundant `||` operation: left operand is always falsy and right operand is always falsy." +count = 1 + +[[issues]] +file = "src/Regex.php" +code = "redundant-null-coalesce" +message = "Redundant null coalesce: left-hand side can never be `null` or undefined." +count = 1 + +[[issues]] +file = "src/Regex.php" +code = "redundant-type-comparison" +message = "Redundant condition: variable `$pattern` (type `non-empty-string`) is already known to be `string`." +count = 1 + +[[issues]] +file = "src/Regex.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$pattern` is already `non-empty-string`." +count = 1 + +[[issues]] +file = "src/StringLength.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Stdlib\Exception\RuntimeException` in `Laminas\Validator\StringLength::isValid`.' +count = 1 + +[[issues]] +file = "src/Timezone.php" +code = "invalid-property-assignment-value" +message = "Invalid type for property `$type`: expected `int(0)|int(1)|int(2)|int(3)`, but got `int|int|int|int`." +count = 1 + +[[issues]] +file = "src/Timezone.php" +code = "redundant-logical-operation" +message = "Redundant `||` operation: left operand is always false and right operand is evaluated." +count = 1 + +[[issues]] +file = "src/Timezone.php" +code = "redundant-type-comparison" +message = "Redundant condition: variable `$type` (type `int(0)|int(1)|int(2)|int(3)`) is already known to be `int`." +count = 1 + +[[issues]] +file = "src/Timezone.php" +code = "redundant-type-comparison" +message = "Redundant type assertion: `$type` is already `int(0)|int(1)|int(2)|int(3)`." +count = 1 + +[[issues]] +file = "src/UndisclosedPassword.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Psr\Http\Client\ClientExceptionInterface` in `Laminas\Validator\UndisclosedPassword::isPwnedPassword`.' +count = 1 + +[[issues]] +file = "src/ValidatorChain.php" +code = "imprecise-type" +message = "Type `array` in parameter `$context` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "src/ValidatorChain.php" +code = "imprecise-type" +message = "Type `array` in return type of `__serialize` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "src/ValidatorChain.php" +code = "missing-return-type" +message = "Function `__clone` is missing a return type hint." +count = 1 + +[[issues]] +file = "src/ValidatorChain.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 2 + +[[issues]] +file = "src/ValidatorChain.php" +code = "possibly-null-operand" +message = "Left operand in arithmetic operation might be `null` (type `int|null`)." +count = 1 + +[[issues]] +file = "src/ValidatorChain.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array index accessed on `list`." +count = 1 + +[[issues]] +file = "src/ValidatorChain.php" +code = "too-many-arguments" +message = 'Too many arguments provided for method `Laminas\Validator\ValidatorInterface::isValid`.' +count = 1 + +[[issues]] +file = "src/ValidatorChain.php" +code = "unhandled-thrown-type" +message = 'Potentially unhandled exception `Laminas\Validator\Exception\RuntimeException` in `Laminas\Validator\ValidatorChain::__invoke`.' +count = 1 + +[[issues]] +file = "src/ValidatorChainInvokableFactory.php" +code = "incompatible-parameter-type" +message = '''Parameter `$options` of `Laminas\Validator\ValidatorChainInvokableFactory::__invoke()` expects type `array|string, 'options'?: array, 'priority'?: int}>|null` but parent `Laminas\ServiceManager\Factory\FactoryInterface::__invoke()` expects type `array|null`''' +count = 1 + +[[issues]] +file = "src/ValidatorInterface.php" +code = "missing-return-type" +message = "Function `getMessages` is missing a return type hint." +count = 1 + +[[issues]] +file = "src/ValidatorPluginManager.php" +code = "deprecated-method" +message = 'Call to deprecated method: `Laminas\ServiceManager\AbstractPluginManager::addInitializer`.' +count = 2 + +[[issues]] +file = "src/ValidatorPluginManager.php" +code = "docblock-type-mismatch" +message = '''Docblock type `array{'abstract_factories'?: array>, 'aliases'?: array, 'delegators'?: !Laminas\ServiceManager\ServiceManager::DelegatorsConfiguration, 'factories'?: !Laminas\ServiceManager\ServiceManager::FactoriesConfiguration, 'initializers'?: !Laminas\ServiceManager\ServiceManager::InitializersConfiguration, 'invokables'?: array, 'lazy_services'?: array{'class_map'?: array, 'proxies_namespace'?: non-empty-string, 'proxies_target_dir'?: non-empty-string, 'write_proxy_files'?: bool}, 'services'?: array, 'shared'?: array, 'shared_by_default'?: bool, ...}` for parameter `$config` is incompatible with native type `array`.''' +count = 1 + +[[issues]] +file = "src/ValidatorPluginManager.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 1 + +[[issues]] +file = "src/ValidatorPluginManager.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #2 of `array_replace_recursive`: expected `array`, but possibly received `array{'abstract_factories'?: array>, 'aliases'?: array, 'delegators'?: !Laminas\ServiceManager\ServiceManager::DelegatorsConfiguration, 'factories'?: !Laminas\ServiceManager\ServiceManager::FactoriesConfiguration, 'initializers'?: !Laminas\ServiceManager\ServiceManager::InitializersConfiguration, 'invokables'?: array, 'lazy_services'?: array{'class_map'?: array, 'proxies_namespace'?: non-empty-string, 'proxies_target_dir'?: non-empty-string, 'write_proxy_files'?: bool}, 'services'?: array, 'shared'?: array, 'shared_by_default'?: bool, ...}`.''' +count = 1 + +[[issues]] +file = "src/ValidatorPluginManager.php" +code = "unused-parameter" +message = "Parameter `$container` is never used." +count = 1 + +[[issues]] +file = "src/ValidatorPluginManagerAwareInterface.php" +code = "missing-return-type" +message = "Function `getValidatorPluginManager` is missing a return type hint." +count = 1 + +[[issues]] +file = "src/ValidatorPluginManagerAwareInterface.php" +code = "missing-return-type" +message = "Function `setValidatorPluginManager` is missing a return type hint." +count = 1 + +[[issues]] +file = "src/ValidatorPluginManagerFactory.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 1 + +[[issues]] +file = "test/AbstractValidatorTest.php" +code = "mixed-argument" +message = 'Invalid argument type for argument #2 of `PHPUnit\Framework\Assert::assertStringContainsString`: expected `string`, but found `mixed`.' +count = 3 + +[[issues]] +file = "test/AbstractValidatorTest.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 1 + +[[issues]] +file = "test/AbstractValidatorTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 6 + +[[issues]] +file = "test/BackedEnumValueTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\BackedEnumValue::__construct`: expected `array{'enum': class-string, 'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}`, but possibly received `array{'enum': string('Foo')}`.''' +count = 1 + +[[issues]] +file = "test/BarcodeTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "test/CallbackTest.php" +code = "less-specific-nested-argument-type" +message = '''Argument type mismatch for argument #1 of `Laminas\Validator\Callback::__construct`: expected `(callable(...mixed): mixed)|array{'bind'?: bool, 'callback': (callable(mixed, array, ...mixed): bool), 'callbackOptions'?: array, 'messages'?: array, 'throwExceptions'?: bool, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}`, but provided type `list{$this(LaminasTest\Validator\CallbackTest), string('noMethodExists')}` is less specific.''' +count = 1 + +[[issues]] +file = "test/ConditionalTest.php" +code = "less-specific-nested-argument-type" +message = '''Argument type mismatch for argument #2 of `Laminas\Validator\Conditional::__construct`: expected `array{'rule': (callable(array): bool), 'validators': array|string, 'options'?: array, 'priority'?: int}>}`, but provided type `array{'rule': list{$this(LaminasTest\Validator\ConditionalTest), string('notAKnownMethod')}}` is less specific.''' +count = 1 + +[[issues]] +file = "test/ConditionalTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #2 of `Laminas\Validator\Conditional::__construct`: expected `array{'rule': (callable(array): bool), 'validators': array|string, 'options'?: array, 'priority'?: int}>}`, but possibly received `array{}`.''' +count = 1 + +[[issues]] +file = "test/CreditCardTest.php" +code = "missing-parameter-type" +message = "Parameter `$expected` is missing a type hint." +count = 3 + +[[issues]] +file = "test/CreditCardTest.php" +code = "missing-parameter-type" +message = "Parameter `$input` is missing a type hint." +count = 3 + +[[issues]] +file = "test/CreditCardTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\CreditCard::__construct`: expected `array{'messages'?: array, 'service'?: (callable(mixed, array, ...mixed): bool), 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'type'?: list|string('American_Express')|string('Diners_Club')|string('Diners_Club_US')|string('Discover')|string('JCB')|string('Laser')|string('Maestro')|string('Mastercard')|string('Mir')|string('Solo')|string('Unionpay')|string('Visa'), 'valueObscured'?: bool}`, but possibly received `array{'service': list{class-string('LaminasTest\Validator\CreditCardTest'), string('nocallback')}}`.''' +count = 1 + +[[issues]] +file = "test/CreditCardTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\CreditCard::__construct`: expected `array{'messages'?: array, 'service'?: (callable(mixed, array, ...mixed): bool), 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'type'?: list|string('American_Express')|string('Diners_Club')|string('Diners_Club_US')|string('Discover')|string('JCB')|string('Laser')|string('Maestro')|string('Mastercard')|string('Mir')|string('Solo')|string('Unionpay')|string('Visa'), 'valueObscured'?: bool}`, but possibly received `array{'type': list{string('ViSa')}}`.''' +count = 1 + +[[issues]] +file = "test/CreditCardTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\CreditCard::__construct`: expected `array{'messages'?: array, 'service'?: (callable(mixed, array, ...mixed): bool), 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'type'?: list|string('American_Express')|string('Diners_Club')|string('Diners_Club_US')|string('Discover')|string('JCB')|string('Laser')|string('Maestro')|string('Mastercard')|string('Mir')|string('Solo')|string('Unionpay')|string('Visa'), 'valueObscured'?: bool}`, but possibly received `array{'type': string('ViSa')}`.''' +count = 1 + +[[issues]] +file = "test/DateTest.php" +code = "unused-parameter" +message = "Parameter `$result` is never used." +count = 1 + +[[issues]] +file = "test/EmailAddressTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 3 + +[[issues]] +file = "test/EmailAddressTest.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array index accessed on `list`." +count = 3 + +[[issues]] +file = "test/EnumCaseTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\EnumCase::__construct`: expected `array{'enum': class-string|class-string, 'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}`, but possibly received `array{'enum': string('Foo')}`.''' +count = 1 + +[[issues]] +file = "test/ExplodeTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\Explode::__construct`: expected `array{'breakOnFirstFailure'?: bool, 'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'validator'?: Laminas\Validator\ValidatorInterface|array{'break_chain_on_failure'?: bool, 'name': class-string|string, 'options'?: array, 'priority'?: int}|class-string, 'validatorPluginManager'?: Laminas\Validator\ValidatorPluginManager|null, 'valueDelimiter'?: non-empty-string, 'valueObscured'?: bool}`, but possibly received `array{'validator': array{'options': list{string('foo')}}}`.''' +count = 1 + +[[issues]] +file = "test/ExplodeTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #2 of `Laminas\Validator\ValidatorPluginManager::__construct`: expected `array{'abstract_factories'?: array>, 'aliases'?: array, 'delegators'?: !Laminas\ServiceManager\ServiceManager::DelegatorsConfiguration, 'factories'?: !Laminas\ServiceManager\ServiceManager::FactoriesConfiguration, 'initializers'?: !Laminas\ServiceManager\ServiceManager::InitializersConfiguration, 'invokables'?: array, 'lazy_services'?: array{'class_map'?: array, 'proxies_namespace'?: non-empty-string, 'proxies_target_dir'?: non-empty-string, 'write_proxy_files'?: bool}, 'services'?: array, 'shared'?: array, 'shared_by_default'?: bool, ...}`, but possibly received `array{'aliases': array{'foo': class-string('Laminas\Validator\InArray')}, 'factories': array{'Laminas\Validator\InArray': class-string('Laminas\ServiceManager\Factory\InvokableFactory')}}`.''' +count = 1 + +[[issues]] +file = "test/ExplodeTest.php" +code = "unused-parameter" +message = "Parameter `$v` is never used." +count = 1 + +[[issues]] +file = "test/File/ExcludeExtensionTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\File\ExcludeExtension::__construct`: expected `array{'allowNonExistentFile'?: bool, 'case'?: bool, 'extension': list|non-empty-string, 'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}`, but possibly received `array{}`.''' +count = 1 + +[[issues]] +file = "test/File/ExcludeMimeTypeTest.php" +code = "imprecise-type" +message = "Type `array` in parameter `$messages` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "test/File/ExistsTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "test/File/ExtensionTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\File\Extension::__construct`: expected `array{'allowNonExistentFile'?: bool, 'case'?: bool, 'extension': list|non-empty-string, 'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}`, but possibly received `array{}`.''' +count = 1 + +[[issues]] +file = "test/File/HashTest.php" +code = "missing-parameter-type" +message = "Parameter `$options` is missing a type hint." +count = 1 + +[[issues]] +file = "test/File/ImageSizeTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "test/File/IsCompressedTest.php" +code = "missing-parameter-type" +message = "Parameter `$options` is missing a type hint." +count = 1 + +[[issues]] +file = "test/File/IsCompressedTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "test/File/IsImageTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "test/File/MimeTypeTest.php" +code = "missing-parameter-type" +message = "Parameter `$options` is missing a type hint." +count = 1 + +[[issues]] +file = "test/File/MimeTypeTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "test/File/NotExistsTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "test/File/SizeTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 5 + +[[issues]] +file = "test/File/UploadFileTest.php" +code = "imprecise-type" +message = "Type `array` in parameter `$fileInfo` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "test/GPSPointTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "test/HostnameTest.php" +code = "possibly-undefined-int-array-index" +message = "Possibly undefined array key `mixed` accessed on `array{'hostnameInvalidLocalName': string('The input does not appear to be a valid local network name')}`." +count = 1 + +[[issues]] +file = "test/HostnameTest.php" +code = "possibly-undefined-variable" +message = "Variable `$code` might not have been defined on all execution paths leading to this point." +count = 1 + +[[issues]] +file = "test/HostnameTest.php" +code = "possibly-undefined-variable" +message = "Variable `$message` might not have been defined on all execution paths leading to this point." +count = 1 + +[[issues]] +file = "test/InArrayTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\InArray::__construct`: expected `array{'haystack': array, 'messages'?: array, 'recursive'?: bool, 'strict'?: bool|int(-1)|int(0)|int(1), 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}`, but possibly received `array{}`.''' +count = 1 + +[[issues]] +file = "test/IsInstanceOfTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\IsInstanceOf::__construct`: expected `array{'className': class-string, 'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}`, but possibly received `array{'NotClassNameKey': class-string('DateTime')}`.''' +count = 1 + +[[issues]] +file = "test/IsJsonStringTest.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 1 + +[[issues]] +file = "test/IsbnTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\Isbn::__construct`: expected `array{'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'type'?: string('10')|string('13')|string('auto'), 'valueObscured'?: bool}`, but possibly received `array{'type': string('Foo')}`.''' +count = 1 + +[[issues]] +file = "test/KeyExistsTest.php" +code = "less-specific-nested-argument-type" +message = '''Argument type mismatch for argument #1 of `Laminas\Validator\KeyExists::__construct`: expected `array{'key': array-key, 'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}`, but provided type `array{'key': mixed}` is less specific.''' +count = 1 + +[[issues]] +file = "test/KeyExistsTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\KeyExists::__construct`: expected `array{'key': array-key, 'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}`, but possibly received `array{}`.''' +count = 1 + +[[issues]] +file = "test/NotEmptyTest.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 1 + +[[issues]] +file = "test/NotEmptyTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\NotEmpty::__construct`: expected `array{'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'type'?: int|list|string('all')|string('array')|string('boolean')|string('float')|string('integer')|string('null')|string('object')|string('objectcount')|string('objectstring')|string('php')|string('space')|string('string')|string('zero'), 'valueObscured'?: bool}`, but possibly received `array{'type': list{string, string}}`.''' +count = 1 + +[[issues]] +file = "test/NotEmptyTest.php" +code = "possibly-null-argument" +message = 'Argument #2 of method `PHPUnit\Framework\Assert::assertStringContainsString` is possibly `null`, but parameter type `string` does not accept it.' +count = 1 + +[[issues]] +file = "test/RegexTest.php" +code = "imprecise-type" +message = "Type `array` in parameter `$options` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "test/RegexTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\Regex::__construct`: expected `array{'messages'?: array, 'pattern': non-empty-string, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}|non-empty-string`, but possibly received `array|string`.''' +count = 1 + +[[issues]] +file = "test/RegexTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #1 of `Laminas\Validator\Regex::__construct`: expected `array{'messages'?: array, 'pattern': non-empty-string, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'valueObscured'?: bool}|non-empty-string`, but possibly received `array{'foo': string('bar')}`.''' +count = 1 + +[[issues]] +file = "test/TestAsset/CustomTraversable.php" +code = "imprecise-type" +message = "Type `array` in parameter `$data` is imprecise, equivalent to `array`." +count = 1 + +[[issues]] +file = "test/TestAsset/CustomTraversable.php" +code = "invalid-return-statement" +message = 'Invalid return type for function `LaminasTest\Validator\TestAsset\CustomTraversable::key`: expected `int|string`, but found `array-key|null`.' +count = 1 + +[[issues]] +file = "test/TestAsset/CustomTraversable.php" +code = "missing-template-parameter" +message = "Too few template arguments for `Iterator`: expected at least 2, but found 0." +count = 1 + +[[issues]] +file = "test/TestAsset/CustomTraversable.php" +code = "nullable-return-statement" +message = 'Function `LaminasTest\Validator\TestAsset\CustomTraversable::key` is declared to return `int|string` but possibly returns a nullable value (inferred as `array-key|null`).' +count = 1 + +[[issues]] +file = "test/TestAsset/CustomTraversable.php" +code = "redundant-comparison" +message = "Redundant `!==` comparison: left-hand side is always not identical to right-hand side." +count = 1 + +[[issues]] +file = "test/TimezoneTest.php" +code = "less-specific-nested-argument-type" +message = '''Argument type mismatch for argument #1 of `Laminas\Validator\Timezone::__construct`: expected `array{'messages'?: array, 'translator'?: Laminas\Translator\TranslatorInterface|null, 'translatorEnabled'?: bool, 'translatorTextDomain'?: null|string, 'type'?: int(0)|int(1)|int(2)|int(3), 'valueObscured'?: bool}`, but provided type `array{'type': mixed}` is less specific.''' +count = 1 + +[[issues]] +file = "test/UndisclosedPasswordTest.php" +code = "missing-return-type" +message = "Function `getConstant` is missing a return type hint." +count = 1 + +[[issues]] +file = "test/UndisclosedPasswordTest.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 2 + +[[issues]] +file = "test/ValidatorChainFactoryTest.php" +code = "possibly-null-array-access" +message = "Cannot perform array access on possibly `null` value." +count = 4 + +[[issues]] +file = "test/ValidatorChainFactoryTest.php" +code = "possibly-undefined-int-array-index" +message = '''Possibly undefined array index accessed on `list`.''' +count = 4 + +[[issues]] +file = "test/ValidatorChainTest.php" +code = "docblock-type-mismatch" +message = '''Docblock type `array{'abstract_factories'?: array>, 'aliases'?: array, 'delegators'?: !Laminas\ServiceManager\ServiceManager::DelegatorsConfiguration, 'factories'?: !Laminas\ServiceManager\ServiceManager::FactoriesConfiguration, 'initializers'?: !Laminas\ServiceManager\ServiceManager::InitializersConfiguration, 'invokables'?: array, 'lazy_services'?: array{'class_map'?: array, 'proxies_namespace'?: non-empty-string, 'proxies_target_dir'?: non-empty-string, 'write_proxy_files'?: bool}, 'services'?: array, 'shared'?: array, 'shared_by_default'?: bool, ...}` for parameter `$config` is incompatible with native type `array`.''' +count = 1 + +[[issues]] +file = "test/ValidatorChainTest.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 1 + +[[issues]] +file = "test/ValidatorChainTest.php" +code = "possibly-null-array-access" +message = "Cannot perform array access on possibly `null` value." +count = 1 + +[[issues]] +file = "test/ValidatorChainTest.php" +code = "possibly-undefined-int-array-index" +message = '''Possibly undefined array index accessed on `list`.''' +count = 1 + +[[issues]] +file = "test/ValidatorPluginManagerCompatibilityTest.php" +code = "docblock-type-mismatch" +message = '''Docblock type `array{'abstract_factories'?: array>, 'aliases'?: array, 'delegators'?: !Laminas\ServiceManager\ServiceManager::DelegatorsConfiguration, 'factories'?: !Laminas\ServiceManager\ServiceManager::FactoriesConfiguration, 'initializers'?: !Laminas\ServiceManager\ServiceManager::InitializersConfiguration, 'invokables'?: array, 'lazy_services'?: array{'class_map'?: array, 'proxies_namespace'?: non-empty-string, 'proxies_target_dir'?: non-empty-string, 'write_proxy_files'?: bool}, 'services'?: array, 'shared'?: array, 'shared_by_default'?: bool, ...}` for parameter `$config` is incompatible with native type `array`.''' +count = 1 + +[[issues]] +file = "test/ValidatorPluginManagerCompatibilityTest.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 2 + +[[issues]] +file = "test/ValidatorPluginManagerTest.php" +code = "deprecated-method" +message = 'Call to deprecated method: `Laminas\ServiceManager\AbstractPluginManager::setService`.' +count = 1 + +[[issues]] +file = "test/ValidatorPluginManagerTest.php" +code = "mixed-assignment" +message = "Assigning `mixed` type to a variable may lead to unexpected behavior." +count = 1 + +[[issues]] +file = "test/ValidatorPluginManagerTest.php" +code = "possibly-invalid-argument" +message = 'Possible argument type mismatch for argument #2 of `Laminas\ServiceManager\AbstractPluginManager::setService`: expected `Laminas\Validator\ValidatorInterface`, but possibly received `$this(LaminasTest\Validator\ValidatorPluginManagerTest)`.' +count = 1 + +[[issues]] +file = "test/ValidatorPluginManagerTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #2 of `Laminas\Validator\ValidatorPluginManager::__construct`: expected `array{'abstract_factories'?: array>, 'aliases'?: array, 'delegators'?: !Laminas\ServiceManager\ServiceManager::DelegatorsConfiguration, 'factories'?: !Laminas\ServiceManager\ServiceManager::FactoriesConfiguration, 'initializers'?: !Laminas\ServiceManager\ServiceManager::InitializersConfiguration, 'invokables'?: array, 'lazy_services'?: array{'class_map'?: array, 'proxies_namespace'?: non-empty-string, 'proxies_target_dir'?: non-empty-string, 'write_proxy_files'?: bool}, 'services'?: array, 'shared'?: array, 'shared_by_default'?: bool, ...}`, but possibly received `array{'aliases': array{'test': class-string('LaminasTest\Validator\TestAsset\InMemoryContainer')}, 'factories': array{'LaminasTest\Validator\TestAsset\InMemoryContainer': class-string('Laminas\ServiceManager\Factory\InvokableFactory')}}`.''' +count = 1 + +[[issues]] +file = "test/ValidatorPluginManagerTest.php" +code = "possibly-invalid-argument" +message = '''Possible argument type mismatch for argument #2 of `Laminas\Validator\ValidatorPluginManager::__construct`: expected `array{'abstract_factories'?: array>, 'aliases'?: array, 'delegators'?: !Laminas\ServiceManager\ServiceManager::DelegatorsConfiguration, 'factories'?: !Laminas\ServiceManager\ServiceManager::FactoriesConfiguration, 'initializers'?: !Laminas\ServiceManager\ServiceManager::InitializersConfiguration, 'invokables'?: array, 'lazy_services'?: array{'class_map'?: array, 'proxies_namespace'?: non-empty-string, 'proxies_target_dir'?: non-empty-string, 'write_proxy_files'?: bool}, 'services'?: array, 'shared'?: array, 'shared_by_default'?: bool, ...}`, but possibly received `array{'factories': array{'test': (closure(): {anonymous-class:test/validatorpluginmanagertest.php:155:22})}}`.''' +count = 1 + +[[issues]] +file = "vendor/laminas/laminas-servicemanager/src/AbstractSingleInstancePluginManager.php" +code = "incompatible-property-type" +message = 'Property `Laminas\Validator\ValidatorPluginManager::$instanceOf` has an incompatible type declaration from docblock.' +count = 1 diff --git a/composer.json b/composer.json index 8e4a737c..32be891a 100644 --- a/composer.json +++ b/composer.json @@ -46,7 +46,6 @@ }, "require-dev": { "laminas/laminas-diactoros": "^3.8.0", - "laminas/laminas-translator": "^2.0", "phpunit/phpunit": "^11.5.55", "carthage-software/mago": "^1.42.0" }, @@ -66,13 +65,9 @@ }, "scripts": { "check": [ - "@cs-check", "@test" ], - "cs-check": "phpcs", - "cs-fix": "phpcbf", "test": "phpunit --colors=always", - "test-coverage": "phpunit --colors=always --coverage-clover clover.xml", - "static-analysis": "psalm --shepherd --stats" + "test-coverage": "phpunit --colors=always --coverage-clover clover.xml" } } diff --git a/mago.toml b/mago.toml index 33bf5e67..ea3498f6 100644 --- a/mago.toml +++ b/mago.toml @@ -31,22 +31,56 @@ preserve-redundant-logical-binary-expression-parentheses = true space-after-logical-not-unary-prefix-operator = true [linter] +baseline = "baseline.lint.toml" +baseline-variant = "loose" # or "strict" integrations = ["phpunit"] [linter.rules] + ambiguous-function-call = { enabled = false } literal-named-argument = { enabled = false } halstead = { effort-threshold = 7000 } +# Don't require `assert()` to carry a description +assert-description = { exclude = ["src/", "test/"] } + +# PHPUnit assertion style +assertion-style = { + enabled = true, + style = "self", +} + +# Allow long parameter lists in tests +excessive-parameter-list = { + exclude = ["test/"], +} + +too-many-methods = { + exclude = ["test/"], +} + +# It's not unreasonable to use booleans as method arguments +no-boolean-flag-parameter = { + enabled = false, +} + +# Passwords in tests are not sensitive +sensitive-parameter = { + exclude = ["test/"], +} + [analyzer] -plugins = [] +baseline = "baseline.sa.toml" +baseline-variant = "loose" # or "strict" + +plugins = [ + "psr-container", +] find-unused-definitions = true find-unused-expressions = true analyze-dead-code = true memoize-properties = true check-throws = true -unchecked-exceptions = ["Error", "LogicException"] -unchecked-exception-classes = [] check-missing-override = false find-unused-parameters = true strict-list-index-checks = true @@ -55,3 +89,20 @@ allow-array-truthy-operand = false no-boolean-literal-comparison = false check-missing-type-hints = true register-super-globals = false + +ignore = [ + { code = "unhandled-thrown-type", in ="test/" }, + # Many validators set protected properties for message interpolation, so these properties appear unused when they are not. + { code = "write-only-property", in = "src/" }, + { code = "possibly-undefined-string-array-index", in = "test/" }, +] + +# Specific Exception classes to ignore +unchecked-exception-classes = [] + +# Exception Hierarchies to ignore +unchecked-exceptions = [ + "Error", + "LogicException", + "Psr\\Container\\ContainerExceptionInterface", +] diff --git a/phpcs.xml b/phpcs.xml deleted file mode 100644 index d0b29149..00000000 --- a/phpcs.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - src - test - - - - - - - src/BusinessIdentifierCode.php - test/HostnameTest.php - - diff --git a/psalm-baseline.xml b/psalm-baseline.xml deleted file mode 100644 index e412cc35..00000000 --- a/psalm-baseline.xml +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - messageTemplates]]> - - - - - - - - - - - - - - - - - getPluginManager()->build($name, $options)]]> - getPluginManager()->build($name, $options)]]> - getPluginManager()->get($validator)]]> - getPluginManager()->get($validator)]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - maxDepth]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [$string, $string], - ]]]> - - - - - - - - - - - diff --git a/psalm.xml.dist b/psalm.xml.dist deleted file mode 100644 index 8eead369..00000000 --- a/psalm.xml.dist +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 46360ed41f6847e4b46aa65919f6d600f78eea3d Mon Sep 17 00:00:00 2001 From: George Steel Date: Mon, 6 Jul 2026 10:25:28 +0100 Subject: [PATCH 5/5] Require translator v2 in dev and update deps Signed-off-by: George Steel --- composer.json | 3 ++- composer.lock | 27 +++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/composer.json b/composer.json index 32be891a..a4bd52f1 100644 --- a/composer.json +++ b/composer.json @@ -46,8 +46,9 @@ }, "require-dev": { "laminas/laminas-diactoros": "^3.8.0", + "laminas/laminas-translator": "^2.0", "phpunit/phpunit": "^11.5.55", - "carthage-software/mago": "^1.42.0" + "carthage-software/mago": "^1.43.0" }, "suggest": { "laminas/laminas-i18n": "Laminas\\I18n component to allow translation of validation error messages", diff --git a/composer.lock b/composer.lock index 05d93f8a..9fdc372b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5907701247d5ea240e8153dec8094401", + "content-hash": "92b6196d84d19d235b177b1de654db78", "packages": [ { "name": "brick/varexporter", @@ -255,20 +255,19 @@ }, { "name": "nikic/php-parser", - "version": "v5.7.0", + "version": "v5.8.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", - "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", "shasum": "" }, "require": { - "ext-ctype": "*", "ext-json": "*", "ext-tokenizer": "*", "php": ">=7.4" @@ -307,9 +306,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" }, - "time": "2025-12-06T11:56:16+00:00" + "time": "2026-07-04T14:30:18+00:00" }, { "name": "psr/container", @@ -528,16 +527,16 @@ "packages-dev": [ { "name": "carthage-software/mago", - "version": "1.42.0", + "version": "1.43.0", "source": { "type": "git", "url": "https://github.com/carthage-software/mago.git", - "reference": "1e843d2e6e95f186022b6752768f12795fec513a" + "reference": "3bee8a65ba55d037f8a9656e7b6be029f817c4e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/carthage-software/mago/zipball/1e843d2e6e95f186022b6752768f12795fec513a", - "reference": "1e843d2e6e95f186022b6752768f12795fec513a", + "url": "https://api.github.com/repos/carthage-software/mago/zipball/3bee8a65ba55d037f8a9656e7b6be029f817c4e3", + "reference": "3bee8a65ba55d037f8a9656e7b6be029f817c4e3", "shasum": "" }, "require": { @@ -575,7 +574,7 @@ ], "support": { "issues": "https://github.com/carthage-software/mago/issues", - "source": "https://github.com/carthage-software/mago/tree/1.42.0" + "source": "https://github.com/carthage-software/mago/tree/1.43.0" }, "funding": [ { @@ -583,7 +582,7 @@ "type": "github" } ], - "time": "2026-06-27T12:36:52+00:00" + "time": "2026-07-05T12:16:04+00:00" }, { "name": "laminas/laminas-diactoros",