commit fcf4a69ca151c680dc4a95835d5ce89cae83be16 Author: Henrik Bygren Date: Mon Mar 27 14:29:52 2023 +0200 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ff1c0ce --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +.DS_Store + +db/* +!db/.gitkeep + +!nginx +nginx/* +!nginx/nginx.conf + +!php +php/* +!php/php.ini + +sveltekit/node_modules +sveltekit/build/ +sveltekit/.svelte-kit/ +sveltekit/package/ + +.env +.env.* +!.env.example diff --git a/README.md b/README.md new file mode 100644 index 0000000..2ae4015 --- /dev/null +++ b/README.md @@ -0,0 +1,55 @@ +# Docker-compose LEMP +## Inkluderar +- nginx +- SvelteKit -> localhost +- php -> /api/ +- mariadb -> mariadb +- phpmyadmin -> localhost:8080 +- composer + +## HowTo + +### SvelteKit +SvelteKit-projekt skapas i katalogen **sveltekit** +```console +cd sveltekit +npm create svelte@latest . +npm i +``` +### API med php +Backend skrivet i php skall ligga i + + /www/public/api +### Starta servern (containern) med + docker-compose up -d +### Stoppa servern (containern) med + docker-compose down + +### Logga SvelteKit till terminalen +Tyvärr loggas inte fel från Sveltekit till terminlalen. +Öppna en ny terminal och skriv: + +````console +docker logs -f +```` +### Serverns url + localhost +### phpmyadmin + localhost:8080 +### Anslut till MariaDB med php + +````php + // Ej nödvändigt att avslut "ren" php med ?> +```` +### ToDo + Stöd för https, TLS (ssl). diff --git a/config/mysql/my.cnf b/config/mysql/my.cnf new file mode 100644 index 0000000..c9961c0 --- /dev/null +++ b/config/mysql/my.cnf @@ -0,0 +1,208 @@ +# Copyright © 2020 Joel Paulsson, Noah Jarvis +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +# MariaDB database server configuration file. +# +# You can copy this file to one of: +# - "/etc/mysql/my.cnf" to set global options, +# - "~/.my.cnf" to set user-specific options. +# +# One can use all long options that the program supports. +# Run program with --help to get a list of available options and with +# --print-defaults to see which it w ould actually understand and use. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +# This will be passed to all mysql clients +# It has been reported that passwords should be enclosed with ticks/quotes +# escpecially if they contain "#" chars... +# Remember to edit /etc/mysql/debian.cnf when changing the socket location. +[client] +port = 3306 +socket = /var/run/mysqld/mysqld.sock +default-character-set = utf8mb4 + +# Here is entries for some specific programs +# The following values assume you have at least 32M ram + +# This was formally known as [safe_mysqld]. Both versions are currently parsed. +[mysqld_safe] +socket = /var/run/mysqld/mysqld.sock +nice = 0 + +[mysqld] +character-set-client-handshake = FALSE +character-set-server = utf8mb4 +collation-server = utf8mb4_unicode_ci + +# +# * Basic Settings +# +#user = mysql +pid-file = /var/run/mysqld/mysqld.pid +socket = /var/run/mysqld/mysqld.sock +port = 3306 +basedir = /usr +datadir = /var/lib/mysql +tmpdir = /tmp +lc_messages_dir = /usr/share/mysql +lc_messages = en_US +skip-external-locking +# +# Instead of skip-networking the default is now to listen only on +# localhost which is more compatible and is not less secure. +#bind-address = 172.17.0.1 +# +# * Fine Tuning +# +max_connections = 100 +connect_timeout = 5 +wait_timeout = 600 +max_allowed_packet = 16M +thread_cache_size = 128 +sort_buffer_size = 4M +bulk_insert_buffer_size = 16M +tmp_table_size = 32M +max_heap_table_size = 32M +# +# * MyISAM +# +# This replaces the startup script and checks MyISAM tables if needed +# the first time they are touched. On error, make copy and try a repair. +myisam_recover_options = BACKUP +key_buffer_size = 128M +#open-files-limit = 2000 +table_open_cache = 400 +myisam_sort_buffer_size = 512M +concurrent_insert = 2 +read_buffer_size = 2M +read_rnd_buffer_size = 1M +# +# * Query Cache Configuration +# +# Cache only tiny result sets, so we can fit more in the query cache. +query_cache_limit = 128K +query_cache_size = 64M +# for more write intensive setups, set to DEMAND or OFF +#query_cache_type = DEMAND +# +# * Logging and Replication +# +# Both location gets rotated by the cronjob. +# Be aware that this log type is a performance killer. +# As of 5.1 you can enable the log at runtime! +#general_log_file = /var/log/mysql/mysql.log +#general_log = 1 +# +# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf. +# +# we do want to know about network errors and such +#log_warnings = 2 +# +# Enable the slow query log to see queries with especially long duration +#slow_query_log[={0|1}] +slow_query_log_file = /var/log/mysql/mariadb-slow.log +long_query_time = 10 +#log_slow_rate_limit = 1000 +#log_slow_verbosity = query_plan + +#log-queries-not-using-indexes +#log_slow_admin_statements +# +# The following can be used as easy to replay backup logs or for replication. +# note: if you are setting up a replication slave, see README.Debian about +# other settings you may need to change. +#server-id = 1 +#report_host = master1 +#auto_increment_increment = 2 +#auto_increment_offset = 1 +#log_bin = /var/log/mysql/mariadb-bin +#log_bin_index = /var/log/mysql/mariadb-bin.index +# not fab for performance, but safer +#sync_binlog = 1 +expire_logs_days = 10 +max_binlog_size = 100M +# slaves +#relay_log = /var/log/mysql/relay-bin +#relay_log_index = /var/log/mysql/relay-bin.index +#relay_log_info_file = /var/log/mysql/relay-bin.info +#log_slave_updates +#read_only +# +# If applications support it, this stricter sql_mode prevents some +# mistakes like inserting invalid dates etc. +#sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL +# +# * InnoDB +# +# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. +# Read the manual for more InnoDB related options. There are many! +default_storage_engine = InnoDB +innodb_buffer_pool_size = 256M +innodb_log_buffer_size = 8M +innodb_file_per_table = 1 +innodb_open_files = 400 +innodb_io_capacity = 400 +innodb_flush_method = O_DIRECT +# +# * Security Features +# +# Read the manual, too, if you want chroot! +# chroot = /var/lib/mysql/ +# +# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". +# +# ssl-ca=/etc/mysql/cacert.pem +# ssl-cert=/etc/mysql/server-cert.pem +# ssl-key=/etc/mysql/server-key.pem + +# +# * Galera-related settings +# +[galera] +# Mandatory settings +#wsrep_on=ON +#wsrep_provider= +#wsrep_cluster_address= +#binlog_format=row +#default_storage_engine=InnoDB +#innodb_autoinc_lock_mode=2 +# +# Allow server to accept connections on all interfaces. +# +#bind-address=0.0.0.0 +# +# Optional setting +#wsrep_slave_threads=1 +#innodb_flush_log_at_trx_commit=0 + +[mysqldump] +quick +quote-names +max_allowed_packet = 16M + +[mysql] +default-character-set = utf8mb4 +no-auto-rehash # faster start of mysql but no tab completion + +[isamchk] +key_buffer = 16M + +# +# * IMPORTANT: Additional settings that can override those from this file! +# The files must end with '.cnf', otherwise they'll be ignored. +# +!includedir /etc/mysql/conf.d/ diff --git a/config/nginx/nginx.conf b/config/nginx/nginx.conf new file mode 100644 index 0000000..c57ae22 --- /dev/null +++ b/config/nginx/nginx.conf @@ -0,0 +1,71 @@ +events {} + +http { + server { + server_name egytalk.se; + listen 80; + + root /var/www/public; + index index.php index.html index.htm; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + location / { + proxy_pass http://node; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-NginX-Proxy true; + proxy_set_header X-Forwarded-Proto $scheme; + + proxy_redirect off; + + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + + location /api { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + try_files $uri = 404; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass php:9000; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REQUEST_URI $request_uri; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + + error_log /var/log/nginx/error.log; + access_log /var/log/nginx/access.log; + } + + server { + server_name api.egytalk.se; + listen 80; + root /var/www/public; + index index.php index.html index.htm; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + # PHP-FPM + location ~ \.php$ { + try_files $uri = 404; + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass php:9000; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REQUEST_URI $request_uri; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + + error_log /var/log/nginx/error.log; + } +} diff --git a/config/php/php.ini b/config/php/php.ini new file mode 100644 index 0000000..06e4a5a --- /dev/null +++ b/config/php/php.ini @@ -0,0 +1,1944 @@ +[PHP] + +;;;;;;;;;;;;;;;;;;; +; About php.ini ; +;;;;;;;;;;;;;;;;;;; +; PHP's initialization file, generally called php.ini, is responsible for +; configuring many of the aspects of PHP's behavior. + +; PHP attempts to find and load this configuration from a number of locations. +; The following is a summary of its search order: +; 1. SAPI module specific location. +; 2. The PHPRC environment variable. (As of PHP 5.2.0) +; 3. A number of predefined registry keys on Windows (As of PHP 5.2.0) +; 4. Current working directory (except CLI) +; 5. The web server's directory (for SAPI modules), or directory of PHP +; (otherwise in Windows) +; 6. The directory from the --with-config-file-path compile time option, or the +; Windows directory (usually C:\windows) +; See the PHP docs for more specific information. +; http://php.net/configuration.file + +; The syntax of the file is extremely simple. Whitespace and lines +; beginning with a semicolon are silently ignored (as you probably guessed). +; Section headers (e.g. [Foo]) are also silently ignored, even though +; they might mean something in the future. + +; Directives following the section heading [PATH=/www/mysite] only +; apply to PHP files in the /www/mysite directory. Directives +; following the section heading [HOST=www.example.com] only apply to +; PHP files served from www.example.com. Directives set in these +; special sections cannot be overridden by user-defined INI files or +; at runtime. Currently, [PATH=] and [HOST=] sections only work under +; CGI/FastCGI. +; http://php.net/ini.sections + +; Directives are specified using the following syntax: +; directive = value +; Directive names are *case sensitive* - foo=bar is different from FOO=bar. +; Directives are variables used to configure PHP or PHP extensions. +; There is no name validation. If PHP can't find an expected +; directive because it is not set or is mistyped, a default value will be used. + +; The value can be a string, a number, a PHP constant (e.g. E_ALL or M_PI), one +; of the INI constants (On, Off, True, False, Yes, No and None) or an expression +; (e.g. E_ALL & ~E_NOTICE), a quoted string ("bar"), or a reference to a +; previously set variable or directive (e.g. ${foo}) + +; Expressions in the INI file are limited to bitwise operators and parentheses: +; | bitwise OR +; ^ bitwise XOR +; & bitwise AND +; ~ bitwise NOT +; ! boolean NOT + +; Boolean flags can be turned on using the values 1, On, True or Yes. +; They can be turned off using the values 0, Off, False or No. + +; An empty string can be denoted by simply not writing anything after the equal +; sign, or by using the None keyword: + +; foo = ; sets foo to an empty string +; foo = None ; sets foo to an empty string +; foo = "None" ; sets foo to the string 'None' + +; If you use constants in your value, and these constants belong to a +; dynamically loaded extension (either a PHP extension or a Zend extension), +; you may only use these constants *after* the line that loads the extension. + +;;;;;;;;;;;;;;;;;;; +; About this file ; +;;;;;;;;;;;;;;;;;;; +; PHP comes packaged with two INI files. One that is recommended to be used +; in production environments and one that is recommended to be used in +; development environments. + +; php.ini-production contains settings which hold security, performance and +; best practices at its core. But please be aware, these settings may break +; compatibility with older or less security conscience applications. We +; recommending using the production ini in production and testing environments. + +; php.ini-development is very similar to its production variant, except it is +; much more verbose when it comes to errors. We recommend using the +; development version only in development environments, as errors shown to +; application users can inadvertently leak otherwise secure information. + +; This is the php.ini-development INI file. + +;;;;;;;;;;;;;;;;;;; +; Quick Reference ; +;;;;;;;;;;;;;;;;;;; + +; The following are all the settings which are different in either the production +; or development versions of the INIs with respect to PHP's default behavior. +; Please see the actual settings later in the document for more details as to why +; we recommend these changes in PHP's behavior. + +; display_errors +; Default Value: On +; Development Value: On +; Production Value: Off + +; display_startup_errors +; Default Value: On +; Development Value: On +; Production Value: Off + +; error_reporting +; Default Value: E_ALL +; Development Value: E_ALL +; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT + +; log_errors +; Default Value: Off +; Development Value: On +; Production Value: On + +; max_input_time +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) + +; output_buffering +; Default Value: Off +; Development Value: 4096 +; Production Value: 4096 + +; register_argc_argv +; Default Value: On +; Development Value: Off +; Production Value: Off + +; request_order +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" + +; session.gc_divisor +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 + +; session.sid_bits_per_character +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 + +; short_open_tag +; Default Value: On +; Development Value: Off +; Production Value: Off + +; variables_order +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS" + +; zend.exception_ignore_args +; Default Value: Off +; Development Value: Off +; Production Value: On + +; zend.exception_string_param_max_len +; Default Value: 15 +; Development Value: 15 +; Production Value: 0 + +;;;;;;;;;;;;;;;;;;;; +; php.ini Options ; +;;;;;;;;;;;;;;;;;;;; +; Name for user-defined php.ini (.htaccess) files. Default is ".user.ini" +;user_ini.filename = ".user.ini" + +; To disable this feature set this option to an empty value +;user_ini.filename = + +; TTL for user-defined php.ini files (time-to-live) in seconds. Default is 300 seconds (5 minutes) +;user_ini.cache_ttl = 300 + +;;;;;;;;;;;;;;;;;;;; +; Language Options ; +;;;;;;;;;;;;;;;;;;;; + +; Enable the PHP scripting language engine under Apache. +; http://php.net/engine +engine = On + +; This directive determines whether or not PHP will recognize code between +; tags as PHP source which should be processed as such. It is +; generally recommended that should be used and that this feature +; should be disabled, as enabling it may result in issues when generating XML +; documents, however this remains supported for backward compatibility reasons. +; Note that this directive does not control the would work. +; http://php.net/syntax-highlighting +;highlight.string = #DD0000 +;highlight.comment = #FF9900 +;highlight.keyword = #007700 +;highlight.default = #0000BB +;highlight.html = #000000 + +; If enabled, the request will be allowed to complete even if the user aborts +; the request. Consider enabling it if executing long requests, which may end up +; being interrupted by the user or a browser timing out. PHP's default behavior +; is to disable this feature. +; http://php.net/ignore-user-abort +;ignore_user_abort = On + +; Determines the size of the realpath cache to be used by PHP. This value should +; be increased on systems where PHP opens many files to reflect the quantity of +; the file operations performed. +; Note: if open_basedir is set, the cache is disabled +; http://php.net/realpath-cache-size +;realpath_cache_size = 4096k + +; Duration of time, in seconds for which to cache realpath information for a given +; file or directory. For systems with rarely changing files, consider increasing this +; value. +; http://php.net/realpath-cache-ttl +;realpath_cache_ttl = 120 + +; Enables or disables the circular reference collector. +; http://php.net/zend.enable-gc +zend.enable_gc = On + +; If enabled, scripts may be written in encodings that are incompatible with +; the scanner. CP936, Big5, CP949 and Shift_JIS are the examples of such +; encodings. To use this feature, mbstring extension must be enabled. +;zend.multibyte = Off + +; Allows to set the default encoding for the scripts. This value will be used +; unless "declare(encoding=...)" directive appears at the top of the script. +; Only affects if zend.multibyte is set. +;zend.script_encoding = + +; Allows to include or exclude arguments from stack traces generated for exceptions. +; In production, it is recommended to turn this setting on to prohibit the output +; of sensitive information in stack traces +; Default Value: Off +; Development Value: Off +; Production Value: On +zend.exception_ignore_args = Off + +; Allows setting the maximum string length in an argument of a stringified stack trace +; to a value between 0 and 1000000. +; This has no effect when zend.exception_ignore_args is enabled. +; Default Value: 15 +; Development Value: 15 +; Production Value: 0 +zend.exception_string_param_max_len = 15 + +;;;;;;;;;;;;;;;;; +; Miscellaneous ; +;;;;;;;;;;;;;;;;; + +; Decides whether PHP may expose the fact that it is installed on the server +; (e.g. by adding its signature to the Web server header). It is no security +; threat in any way, but it makes it possible to determine whether you use PHP +; on your server or not. +; http://php.net/expose-php +expose_php = On + +;;;;;;;;;;;;;;;;;;; +; Resource Limits ; +;;;;;;;;;;;;;;;;;;; + +; Maximum execution time of each script, in seconds +; http://php.net/max-execution-time +; Note: This directive is hardcoded to 0 for the CLI SAPI +max_execution_time = 30 + +; Maximum amount of time each script may spend parsing request data. It's a good +; idea to limit this time on productions servers in order to eliminate unexpectedly +; long running scripts. +; Note: This directive is hardcoded to -1 for the CLI SAPI +; Default Value: -1 (Unlimited) +; Development Value: 60 (60 seconds) +; Production Value: 60 (60 seconds) +; http://php.net/max-input-time +max_input_time = 60 + +; Maximum input variable nesting level +; http://php.net/max-input-nesting-level +;max_input_nesting_level = 64 + +; How many GET/POST/COOKIE input variables may be accepted +;max_input_vars = 1000 + +; Maximum amount of memory a script may consume +; http://php.net/memory-limit +memory_limit = 128M + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Error handling and logging ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; This directive informs PHP of which errors, warnings and notices you would like +; it to take action for. The recommended way of setting values for this +; directive is through the use of the error level constants and bitwise +; operators. The error level constants are below here for convenience as well as +; some common settings and their meanings. +; By default, PHP is set to take action on all errors, notices and warnings EXCEPT +; those related to E_NOTICE and E_STRICT, which together cover best practices and +; recommended coding standards in PHP. For performance reasons, this is the +; recommend error reporting setting. Your production server shouldn't be wasting +; resources complaining about best practices and coding standards. That's what +; development servers and development settings are for. +; Note: The php.ini-development file has this setting as E_ALL. This +; means it pretty much reports everything which is exactly what you want during +; development and early testing. +; +; Error Level Constants: +; E_ALL - All errors and warnings (includes E_STRICT as of PHP 5.4.0) +; E_ERROR - fatal run-time errors +; E_RECOVERABLE_ERROR - almost fatal run-time errors +; E_WARNING - run-time warnings (non-fatal errors) +; E_PARSE - compile-time parse errors +; E_NOTICE - run-time notices (these are warnings which often result +; from a bug in your code, but it's possible that it was +; intentional (e.g., using an uninitialized variable and +; relying on the fact it is automatically initialized to an +; empty string) +; E_STRICT - run-time notices, enable to have PHP suggest changes +; to your code which will ensure the best interoperability +; and forward compatibility of your code +; E_CORE_ERROR - fatal errors that occur during PHP's initial startup +; E_CORE_WARNING - warnings (non-fatal errors) that occur during PHP's +; initial startup +; E_COMPILE_ERROR - fatal compile-time errors +; E_COMPILE_WARNING - compile-time warnings (non-fatal errors) +; E_USER_ERROR - user-generated error message +; E_USER_WARNING - user-generated warning message +; E_USER_NOTICE - user-generated notice message +; E_DEPRECATED - warn about code that will not work in future versions +; of PHP +; E_USER_DEPRECATED - user-generated deprecation warnings +; +; Common Values: +; E_ALL (Show all errors, warnings and notices including coding standards.) +; E_ALL & ~E_NOTICE (Show all errors, except for notices) +; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) +; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) +; Default Value: E_ALL +; Development Value: E_ALL +; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT +; http://php.net/error-reporting +error_reporting = E_ALL + +; This directive controls whether or not and where PHP will output errors, +; notices and warnings too. Error output is very useful during development, but +; it could be very dangerous in production environments. Depending on the code +; which is triggering the error, sensitive information could potentially leak +; out of your application such as database usernames and passwords or worse. +; For production environments, we recommend logging errors rather than +; sending them to STDOUT. +; Possible Values: +; Off = Do not display any errors +; stderr = Display errors to STDERR (affects only CGI/CLI binaries!) +; On or stdout = Display errors to STDOUT +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/display-errors +display_errors = On + +; The display of errors which occur during PHP's startup sequence are handled +; separately from display_errors. We strongly recommend you set this to 'off' +; for production servers to avoid leaking configuration details. +; Default Value: On +; Development Value: On +; Production Value: Off +; http://php.net/display-startup-errors +display_startup_errors = On + +; Besides displaying errors, PHP can also log errors to locations such as a +; server-specific log, STDERR, or a location specified by the error_log +; directive found below. While errors should not be displayed on productions +; servers they should still be monitored and logging is a great way to do that. +; Default Value: Off +; Development Value: On +; Production Value: On +; http://php.net/log-errors +log_errors = On + +; Set maximum length of log_errors. In error_log information about the source is +; added. The default is 1024 and 0 allows to not apply any maximum length at all. +; http://php.net/log-errors-max-len +log_errors_max_len = 1024 + +; Do not log repeated messages. Repeated errors must occur in same file on same +; line unless ignore_repeated_source is set true. +; http://php.net/ignore-repeated-errors +ignore_repeated_errors = Off + +; Ignore source of message when ignoring repeated messages. When this setting +; is On you will not log errors with repeated messages from different files or +; source lines. +; http://php.net/ignore-repeated-source +ignore_repeated_source = Off + +; If this parameter is set to Off, then memory leaks will not be shown (on +; stdout or in the log). This is only effective in a debug compile, and if +; error reporting includes E_WARNING in the allowed list +; http://php.net/report-memleaks +report_memleaks = On + +; This setting is off by default. +;report_zend_debug = 0 + +; Turn off normal error reporting and emit XML-RPC error XML +; http://php.net/xmlrpc-errors +;xmlrpc_errors = 0 + +; An XML-RPC faultCode +;xmlrpc_error_number = 0 + +; When PHP displays or logs an error, it has the capability of formatting the +; error message as HTML for easier reading. This directive controls whether +; the error message is formatted as HTML or not. +; Note: This directive is hardcoded to Off for the CLI SAPI +; http://php.net/html-errors +;html_errors = On + +; If html_errors is set to On *and* docref_root is not empty, then PHP +; produces clickable error messages that direct to a page describing the error +; or function causing the error in detail. +; You can download a copy of the PHP manual from http://php.net/docs +; and change docref_root to the base URL of your local copy including the +; leading '/'. You must also specify the file extension being used including +; the dot. PHP's default behavior is to leave these settings empty, in which +; case no links to documentation are generated. +; Note: Never use this feature for production boxes. +; http://php.net/docref-root +; Examples +;docref_root = "/phpmanual/" + +; http://php.net/docref-ext +;docref_ext = .html + +; String to output before an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-prepend-string +; Example: +;error_prepend_string = "" + +; String to output after an error message. PHP's default behavior is to leave +; this setting blank. +; http://php.net/error-append-string +; Example: +;error_append_string = "" + +; Log errors to specified file. PHP's default behavior is to leave this value +; empty. +; http://php.net/error-log +; Example: +;error_log = php_errors.log +; Log errors to syslog (Event Log on Windows). +;error_log = syslog + +; The syslog ident is a string which is prepended to every message logged +; to syslog. Only used when error_log is set to syslog. +;syslog.ident = php + +; The syslog facility is used to specify what type of program is logging +; the message. Only used when error_log is set to syslog. +;syslog.facility = user + +; Set this to disable filtering control characters (the default). +; Some loggers only accept NVT-ASCII, others accept anything that's not +; control characters. If your logger accepts everything, then no filtering +; is needed at all. +; Allowed values are: +; ascii (all printable ASCII characters and NL) +; no-ctrl (all characters except control characters) +; all (all characters) +; raw (like "all", but messages are not split at newlines) +; http://php.net/syslog.filter +;syslog.filter = ascii + +;windows.show_crt_warning +; Default value: 0 +; Development value: 0 +; Production value: 0 + +;;;;;;;;;;;;;;;;; +; Data Handling ; +;;;;;;;;;;;;;;;;; + +; The separator used in PHP generated URLs to separate arguments. +; PHP's default setting is "&". +; http://php.net/arg-separator.output +; Example: +;arg_separator.output = "&" + +; List of separator(s) used by PHP to parse input URLs into variables. +; PHP's default setting is "&". +; NOTE: Every character in this directive is considered as separator! +; http://php.net/arg-separator.input +; Example: +;arg_separator.input = ";&" + +; This directive determines which super global arrays are registered when PHP +; starts up. G,P,C,E & S are abbreviations for the following respective super +; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty +; paid for the registration of these arrays and because ENV is not as commonly +; used as the others, ENV is not recommended on productions servers. You +; can still get access to the environment variables through getenv() should you +; need to. +; Default Value: "EGPCS" +; Development Value: "GPCS" +; Production Value: "GPCS"; +; http://php.net/variables-order +variables_order = "GPCS" + +; This directive determines which super global data (G,P & C) should be +; registered into the super global array REQUEST. If so, it also determines +; the order in which that data is registered. The values for this directive +; are specified in the same manner as the variables_order directive, +; EXCEPT one. Leaving this value empty will cause PHP to use the value set +; in the variables_order directive. It does not mean it will leave the super +; globals array REQUEST empty. +; Default Value: None +; Development Value: "GP" +; Production Value: "GP" +; http://php.net/request-order +request_order = "GP" + +; This directive determines whether PHP registers $argv & $argc each time it +; runs. $argv contains an array of all the arguments passed to PHP when a script +; is invoked. $argc contains an integer representing the number of arguments +; that were passed when the script was invoked. These arrays are extremely +; useful when running scripts from the command line. When this directive is +; enabled, registering these variables consumes CPU cycles and memory each time +; a script is executed. For performance reasons, this feature should be disabled +; on production servers. +; Note: This directive is hardcoded to On for the CLI SAPI +; Default Value: On +; Development Value: Off +; Production Value: Off +; http://php.net/register-argc-argv +register_argc_argv = Off + +; When enabled, the ENV, REQUEST and SERVER variables are created when they're +; first used (Just In Time) instead of when the script starts. If these +; variables are not used within a script, having this directive on will result +; in a performance gain. The PHP directive register_argc_argv must be disabled +; for this directive to have any effect. +; http://php.net/auto-globals-jit +auto_globals_jit = On + +; Whether PHP will read the POST data. +; This option is enabled by default. +; Most likely, you won't want to disable this option globally. It causes $_POST +; and $_FILES to always be empty; the only way you will be able to read the +; POST data will be through the php://input stream wrapper. This can be useful +; to proxy requests or to process the POST data in a memory efficient fashion. +; http://php.net/enable-post-data-reading +;enable_post_data_reading = Off + +; Maximum size of POST data that PHP will accept. +; Its value may be 0 to disable the limit. It is ignored if POST data reading +; is disabled through enable_post_data_reading. +; http://php.net/post-max-size +post_max_size = 8M + +; Automatically add files before PHP document. +; http://php.net/auto-prepend-file +auto_prepend_file = + +; Automatically add files after PHP document. +; http://php.net/auto-append-file +auto_append_file = + +; By default, PHP will output a media type using the Content-Type header. To +; disable this, simply set it to be empty. +; +; PHP's built-in default media type is set to text/html. +; http://php.net/default-mimetype +default_mimetype = "text/html" + +; PHP's default character set is set to UTF-8. +; http://php.net/default-charset +default_charset = "UTF-8" + +; PHP internal character encoding is set to empty. +; If empty, default_charset is used. +; http://php.net/internal-encoding +;internal_encoding = + +; PHP input character encoding is set to empty. +; If empty, default_charset is used. +; http://php.net/input-encoding +;input_encoding = + +; PHP output character encoding is set to empty. +; If empty, default_charset is used. +; See also output_buffer. +; http://php.net/output-encoding +;output_encoding = + +;;;;;;;;;;;;;;;;;;;;;;;;; +; Paths and Directories ; +;;;;;;;;;;;;;;;;;;;;;;;;; + +; UNIX: "/path1:/path2" +;include_path = ".:/php/includes" +; +; Windows: "\path1;\path2" +;include_path = ".;c:\php\includes" +; +; PHP's default setting for include_path is ".;/path/to/php/pear" +; http://php.net/include-path + +; The root of the PHP pages, used only if nonempty. +; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root +; if you are running php as a CGI under any web server (other than IIS) +; see documentation for security issues. The alternate is to use the +; cgi.force_redirect configuration below +; http://php.net/doc-root +doc_root = + +; The directory under which PHP opens the script using /~username used only +; if nonempty. +; http://php.net/user-dir +user_dir = + +; Directory in which the loadable extensions (modules) reside. +; http://php.net/extension-dir +;extension_dir = "./" +; On windows: +;extension_dir = "ext" + +; Directory where the temporary files should be placed. +; Defaults to the system default (see sys_get_temp_dir) +;sys_temp_dir = "/tmp" + +; Whether or not to enable the dl() function. The dl() function does NOT work +; properly in multithreaded servers, such as IIS or Zeus, and is automatically +; disabled on them. +; http://php.net/enable-dl +enable_dl = Off + +; cgi.force_redirect is necessary to provide security running PHP as a CGI under +; most web servers. Left undefined, PHP turns this on by default. You can +; turn it off here AT YOUR OWN RISK +; **You CAN safely turn this off for IIS, in fact, you MUST.** +; http://php.net/cgi.force-redirect +;cgi.force_redirect = 1 + +; if cgi.nph is enabled it will force cgi to always sent Status: 200 with +; every request. PHP's default behavior is to disable this feature. +;cgi.nph = 1 + +; if cgi.force_redirect is turned on, and you are not running under Apache or Netscape +; (iPlanet) web servers, you MAY need to set an environment variable name that PHP +; will look for to know it is OK to continue execution. Setting this variable MAY +; cause security issues, KNOW WHAT YOU ARE DOING FIRST. +; http://php.net/cgi.redirect-status-env +;cgi.redirect_status_env = + +; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's +; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok +; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting +; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting +; of zero causes PHP to behave as before. Default is 1. You should fix your scripts +; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. +; http://php.net/cgi.fix-pathinfo +;cgi.fix_pathinfo=1 + +; if cgi.discard_path is enabled, the PHP CGI binary can safely be placed outside +; of the web tree and people will not be able to circumvent .htaccess security. +;cgi.discard_path=1 + +; FastCGI under IIS supports the ability to impersonate +; security tokens of the calling client. This allows IIS to define the +; security context that the request runs under. mod_fastcgi under Apache +; does not currently support this feature (03/17/2002) +; Set to 1 if running under IIS. Default is zero. +; http://php.net/fastcgi.impersonate +;fastcgi.impersonate = 1 + +; Disable logging through FastCGI connection. PHP's default behavior is to enable +; this feature. +;fastcgi.logging = 0 + +; cgi.rfc2616_headers configuration option tells PHP what type of headers to +; use when sending HTTP response code. If set to 0, PHP sends Status: header that +; is supported by Apache. When this option is set to 1, PHP will send +; RFC2616 compliant header. +; Default is zero. +; http://php.net/cgi.rfc2616-headers +;cgi.rfc2616_headers = 0 + +; cgi.check_shebang_line controls whether CGI PHP checks for line starting with #! +; (shebang) at the top of the running script. This line might be needed if the +; script support running both as stand-alone script and via PHP CGI<. PHP in CGI +; mode skips this line and ignores its content if this directive is turned on. +; http://php.net/cgi.check-shebang-line +;cgi.check_shebang_line=1 + +;;;;;;;;;;;;;;;; +; File Uploads ; +;;;;;;;;;;;;;;;; + +; Whether to allow HTTP file uploads. +; http://php.net/file-uploads +file_uploads = On + +; Temporary directory for HTTP uploaded files (will use system default if not +; specified). +; http://php.net/upload-tmp-dir +;upload_tmp_dir = + +; Maximum allowed size for uploaded files. +; http://php.net/upload-max-filesize +upload_max_filesize = 2M + +; Maximum number of files that can be uploaded via a single request +max_file_uploads = 20 + +;;;;;;;;;;;;;;;;;; +; Fopen wrappers ; +;;;;;;;;;;;;;;;;;; + +; Whether to allow the treatment of URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-fopen +allow_url_fopen = On + +; Whether to allow include/require to open URLs (like http:// or ftp://) as files. +; http://php.net/allow-url-include +allow_url_include = Off + +; Define the anonymous ftp password (your email address). PHP's default setting +; for this is empty. +; http://php.net/from +;from="john@doe.com" + +; Define the User-Agent string. PHP's default setting for this is empty. +; http://php.net/user-agent +;user_agent="PHP" + +; Default timeout for socket based streams (seconds) +; http://php.net/default-socket-timeout +default_socket_timeout = 60 + +; If your scripts have to deal with files from Macintosh systems, +; or you are running on a Mac and need to deal with files from +; unix or win32 systems, setting this flag will cause PHP to +; automatically detect the EOL character in those files so that +; fgets() and file() will work regardless of the source of the file. +; http://php.net/auto-detect-line-endings +;auto_detect_line_endings = Off + +;;;;;;;;;;;;;;;;;;;;;; +; Dynamic Extensions ; +;;;;;;;;;;;;;;;;;;;;;; + +; If you wish to have an extension loaded automatically, use the following +; syntax: +; +; extension=modulename +; +; For example: +; +; extension=mysqli +; +; When the extension library to load is not located in the default extension +; directory, You may specify an absolute path to the library file: +; +; extension=/path/to/extension/mysqli.so +; +; Note : The syntax used in previous PHP versions ('extension=.so' and +; 'extension='php_.dll') is supported for legacy reasons and may be +; deprecated in a future PHP major version. So, when it is possible, please +; move to the new ('extension=) syntax. +; +; Notes for Windows environments : +; +; - Many DLL files are located in the extensions/ (PHP 4) or ext/ (PHP 5+) +; extension folders as well as the separate PECL DLL download (PHP 5+). +; Be sure to appropriately set the extension_dir directive. +; +;extension=bz2 +;extension=curl +;extension=ffi +;extension=ftp +;extension=fileinfo +;extension=gd +;extension=gettext +;extension=gmp +;extension=intl +;extension=imap +;extension=ldap +;extension=mbstring +;extension=exif ; Must be after mbstring as it depends on it +;extension=mysqli +;extension=oci8_12c ; Use with Oracle Database 12c Instant Client +;extension=oci8_19 ; Use with Oracle Database 19 Instant Client +;extension=odbc +;extension=openssl +;extension=pdo_firebird +;extension=pdo_mysql +;extension=pdo_oci +;extension=pdo_odbc +;extension=pdo_pgsql +;extension=pdo_sqlite +;extension=pgsql +;extension=shmop + +; The MIBS data available in the PHP distribution must be installed. +; See http://www.php.net/manual/en/snmp.installation.php +;extension=snmp + +;extension=soap +;extension=sockets +;extension=sodium +;extension=sqlite3 +;extension=tidy +;extension=xsl + +;zend_extension=opcache + +;;;;;;;;;;;;;;;;;;; +; Module Settings ; +;;;;;;;;;;;;;;;;;;; + +[CLI Server] +; Whether the CLI web server uses ANSI color coding in its terminal output. +cli_server.color = On + +[Date] +; Defines the default timezone used by the date functions +; http://php.net/date.timezone +;date.timezone = + +; http://php.net/date.default-latitude +;date.default_latitude = 31.7667 + +; http://php.net/date.default-longitude +;date.default_longitude = 35.2333 + +; http://php.net/date.sunrise-zenith +;date.sunrise_zenith = 90.833333 + +; http://php.net/date.sunset-zenith +;date.sunset_zenith = 90.833333 + +[filter] +; http://php.net/filter.default +;filter.default = unsafe_raw + +; http://php.net/filter.default-flags +;filter.default_flags = + +[iconv] +; Use of this INI entry is deprecated, use global input_encoding instead. +; If empty, default_charset or input_encoding or iconv.input_encoding is used. +; The precedence is: default_charset < input_encoding < iconv.input_encoding +;iconv.input_encoding = + +; Use of this INI entry is deprecated, use global internal_encoding instead. +; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. +; The precedence is: default_charset < internal_encoding < iconv.internal_encoding +;iconv.internal_encoding = + +; Use of this INI entry is deprecated, use global output_encoding instead. +; If empty, default_charset or output_encoding or iconv.output_encoding is used. +; The precedence is: default_charset < output_encoding < iconv.output_encoding +; To use an output encoding conversion, iconv's output handler must be set +; otherwise output encoding conversion cannot be performed. +;iconv.output_encoding = + +[imap] +; rsh/ssh logins are disabled by default. Use this INI entry if you want to +; enable them. Note that the IMAP library does not filter mailbox names before +; passing them to rsh/ssh command, thus passing untrusted data to this function +; with rsh/ssh enabled is insecure. +;imap.enable_insecure_rsh=0 + +[intl] +;intl.default_locale = +; This directive allows you to produce PHP errors when some error +; happens within intl functions. The value is the level of the error produced. +; Default is 0, which does not produce any errors. +;intl.error_level = E_WARNING +;intl.use_exceptions = 0 + +[sqlite3] +; Directory pointing to SQLite3 extensions +; http://php.net/sqlite3.extension-dir +;sqlite3.extension_dir = + +; SQLite defensive mode flag (only available from SQLite 3.26+) +; When the defensive flag is enabled, language features that allow ordinary +; SQL to deliberately corrupt the database file are disabled. This forbids +; writing directly to the schema, shadow tables (eg. FTS data tables), or +; the sqlite_dbpage virtual table. +; https://www.sqlite.org/c3ref/c_dbconfig_defensive.html +; (for older SQLite versions, this flag has no use) +;sqlite3.defensive = 1 + +[Pcre] +; PCRE library backtracking limit. +; http://php.net/pcre.backtrack-limit +;pcre.backtrack_limit=100000 + +; PCRE library recursion limit. +; Please note that if you set this value to a high number you may consume all +; the available process stack and eventually crash PHP (due to reaching the +; stack size limit imposed by the Operating System). +; http://php.net/pcre.recursion-limit +;pcre.recursion_limit=100000 + +; Enables or disables JIT compilation of patterns. This requires the PCRE +; library to be compiled with JIT support. +;pcre.jit=1 + +[Pdo] +; Whether to pool ODBC connections. Can be one of "strict", "relaxed" or "off" +; http://php.net/pdo-odbc.connection-pooling +;pdo_odbc.connection_pooling=strict + +[Pdo_mysql] +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +pdo_mysql.default_socket= + +[Phar] +; http://php.net/phar.readonly +;phar.readonly = On + +; http://php.net/phar.require-hash +;phar.require_hash = On + +;phar.cache_list = + +[mail function] +; For Win32 only. +; http://php.net/smtp +SMTP = localhost +; http://php.net/smtp-port +smtp_port = 25 + +; For Win32 only. +; http://php.net/sendmail-from +;sendmail_from = me@example.com + +; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). +; http://php.net/sendmail-path +;sendmail_path = + +; Force the addition of the specified parameters to be passed as extra parameters +; to the sendmail binary. These parameters will always replace the value of +; the 5th parameter to mail(). +;mail.force_extra_parameters = + +; Add X-PHP-Originating-Script: that will include uid of the script followed by the filename +mail.add_x_header = Off + +; The path to a log file that will log all mail() calls. Log entries include +; the full path of the script, line number, To address and headers. +;mail.log = +; Log mail to syslog (Event Log on Windows). +;mail.log = syslog + +[ODBC] +; http://php.net/odbc.default-db +;odbc.default_db = Not yet implemented + +; http://php.net/odbc.default-user +;odbc.default_user = Not yet implemented + +; http://php.net/odbc.default-pw +;odbc.default_pw = Not yet implemented + +; Controls the ODBC cursor model. +; Default: SQL_CURSOR_STATIC (default). +;odbc.default_cursortype + +; Allow or prevent persistent links. +; http://php.net/odbc.allow-persistent +odbc.allow_persistent = On + +; Check that a connection is still valid before reuse. +; http://php.net/odbc.check-persistent +odbc.check_persistent = On + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/odbc.max-persistent +odbc.max_persistent = -1 + +; Maximum number of links (persistent + non-persistent). -1 means no limit. +; http://php.net/odbc.max-links +odbc.max_links = -1 + +; Handling of LONG fields. Returns number of bytes to variables. 0 means +; passthru. +; http://php.net/odbc.defaultlrl +odbc.defaultlrl = 4096 + +; Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char. +; See the documentation on odbc_binmode and odbc_longreadlen for an explanation +; of odbc.defaultlrl and odbc.defaultbinmode +; http://php.net/odbc.defaultbinmode +odbc.defaultbinmode = 1 + +[MySQLi] + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/mysqli.max-persistent +mysqli.max_persistent = -1 + +; Allow accessing, from PHP's perspective, local files with LOAD DATA statements +; http://php.net/mysqli.allow_local_infile +;mysqli.allow_local_infile = On + +; Allow or prevent persistent links. +; http://php.net/mysqli.allow-persistent +mysqli.allow_persistent = On + +; Maximum number of links. -1 means no limit. +; http://php.net/mysqli.max-links +mysqli.max_links = -1 + +; Default port number for mysqli_connect(). If unset, mysqli_connect() will use +; the $MYSQL_TCP_PORT or the mysql-tcp entry in /etc/services or the +; compile-time value defined MYSQL_PORT (in that order). Win32 will only look +; at MYSQL_PORT. +; http://php.net/mysqli.default-port +mysqli.default_port = 3306 + +; Default socket name for local MySQL connects. If empty, uses the built-in +; MySQL defaults. +; http://php.net/mysqli.default-socket +mysqli.default_socket = + +; Default host for mysqli_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-host +mysqli.default_host = + +; Default user for mysqli_connect() (doesn't apply in safe mode). +; http://php.net/mysqli.default-user +mysqli.default_user = + +; Default password for mysqli_connect() (doesn't apply in safe mode). +; Note that this is generally a *bad* idea to store passwords in this file. +; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw") +; and reveal this password! And of course, any users with read access to this +; file will be able to reveal the password as well. +; http://php.net/mysqli.default-pw +mysqli.default_pw = + +; Allow or prevent reconnect +mysqli.reconnect = Off + +[mysqlnd] +; Enable / Disable collection of general statistics by mysqlnd which can be +; used to tune and monitor MySQL operations. +mysqlnd.collect_statistics = On + +; Enable / Disable collection of memory usage statistics by mysqlnd which can be +; used to tune and monitor MySQL operations. +mysqlnd.collect_memory_statistics = On + +; Records communication from all extensions using mysqlnd to the specified log +; file. +; http://php.net/mysqlnd.debug +;mysqlnd.debug = + +; Defines which queries will be logged. +;mysqlnd.log_mask = 0 + +; Default size of the mysqlnd memory pool, which is used by result sets. +;mysqlnd.mempool_default_size = 16000 + +; Size of a pre-allocated buffer used when sending commands to MySQL in bytes. +;mysqlnd.net_cmd_buffer_size = 2048 + +; Size of a pre-allocated buffer used for reading data sent by the server in +; bytes. +;mysqlnd.net_read_buffer_size = 32768 + +; Timeout for network requests in seconds. +;mysqlnd.net_read_timeout = 31536000 + +; SHA-256 Authentication Plugin related. File with the MySQL server public RSA +; key. +;mysqlnd.sha256_server_public_key = + +[OCI8] + +; Connection: Enables privileged connections using external +; credentials (OCI_SYSOPER, OCI_SYSDBA) +; http://php.net/oci8.privileged-connect +;oci8.privileged_connect = Off + +; Connection: The maximum number of persistent OCI8 connections per +; process. Using -1 means no limit. +; http://php.net/oci8.max-persistent +;oci8.max_persistent = -1 + +; Connection: The maximum number of seconds a process is allowed to +; maintain an idle persistent connection. Using -1 means idle +; persistent connections will be maintained forever. +; http://php.net/oci8.persistent-timeout +;oci8.persistent_timeout = -1 + +; Connection: The number of seconds that must pass before issuing a +; ping during oci_pconnect() to check the connection validity. When +; set to 0, each oci_pconnect() will cause a ping. Using -1 disables +; pings completely. +; http://php.net/oci8.ping-interval +;oci8.ping_interval = 60 + +; Connection: Set this to a user chosen connection class to be used +; for all pooled server requests with Oracle 11g Database Resident +; Connection Pooling (DRCP). To use DRCP, this value should be set to +; the same string for all web servers running the same application, +; the database pool must be configured, and the connection string must +; specify to use a pooled server. +;oci8.connection_class = + +; High Availability: Using On lets PHP receive Fast Application +; Notification (FAN) events generated when a database node fails. The +; database must also be configured to post FAN events. +;oci8.events = Off + +; Tuning: This option enables statement caching, and specifies how +; many statements to cache. Using 0 disables statement caching. +; http://php.net/oci8.statement-cache-size +;oci8.statement_cache_size = 20 + +; Tuning: Enables statement prefetching and sets the default number of +; rows that will be fetched automatically after statement execution. +; http://php.net/oci8.default-prefetch +;oci8.default_prefetch = 100 + +; Compatibility. Using On means oci_close() will not close +; oci_connect() and oci_new_connect() connections. +; http://php.net/oci8.old-oci-close-semantics +;oci8.old_oci_close_semantics = Off + +[PostgreSQL] +; Allow or prevent persistent links. +; http://php.net/pgsql.allow-persistent +pgsql.allow_persistent = On + +; Detect broken persistent links always with pg_pconnect(). +; Auto reset feature requires a little overheads. +; http://php.net/pgsql.auto-reset-persistent +pgsql.auto_reset_persistent = Off + +; Maximum number of persistent links. -1 means no limit. +; http://php.net/pgsql.max-persistent +pgsql.max_persistent = -1 + +; Maximum number of links (persistent+non persistent). -1 means no limit. +; http://php.net/pgsql.max-links +pgsql.max_links = -1 + +; Ignore PostgreSQL backends Notice message or not. +; Notice message logging require a little overheads. +; http://php.net/pgsql.ignore-notice +pgsql.ignore_notice = 0 + +; Log PostgreSQL backends Notice message or not. +; Unless pgsql.ignore_notice=0, module cannot log notice message. +; http://php.net/pgsql.log-notice +pgsql.log_notice = 0 + +[bcmath] +; Number of decimal digits for all bcmath functions. +; http://php.net/bcmath.scale +bcmath.scale = 0 + +[browscap] +; http://php.net/browscap +;browscap = extra/browscap.ini + +[Session] +; Handler used to store/retrieve data. +; http://php.net/session.save-handler +session.save_handler = files + +; Argument passed to save_handler. In the case of files, this is the path +; where data files are stored. Note: Windows users have to change this +; variable in order to use PHP's session functions. +; +; The path can be defined as: +; +; session.save_path = "N;/path" +; +; where N is an integer. Instead of storing all the session files in +; /path, what this will do is use subdirectories N-levels deep, and +; store the session data in those directories. This is useful if +; your OS has problems with many files in one directory, and is +; a more efficient layout for servers that handle many sessions. +; +; NOTE 1: PHP will not create this directory structure automatically. +; You can use the script in the ext/session dir for that purpose. +; NOTE 2: See the section on garbage collection below if you choose to +; use subdirectories for session storage +; +; The file storage module creates files using mode 600 by default. +; You can change that by using +; +; session.save_path = "N;MODE;/path" +; +; where MODE is the octal representation of the mode. Note that this +; does not overwrite the process's umask. +; http://php.net/session.save-path +;session.save_path = "/tmp" + +; Whether to use strict session mode. +; Strict session mode does not accept an uninitialized session ID, and +; regenerates the session ID if the browser sends an uninitialized session ID. +; Strict mode protects applications from session fixation via a session adoption +; vulnerability. It is disabled by default for maximum compatibility, but +; enabling it is encouraged. +; https://wiki.php.net/rfc/strict_sessions +session.use_strict_mode = 0 + +; Whether to use cookies. +; http://php.net/session.use-cookies +session.use_cookies = 1 + +; http://php.net/session.cookie-secure +;session.cookie_secure = + +; This option forces PHP to fetch and use a cookie for storing and maintaining +; the session id. We encourage this operation as it's very helpful in combating +; session hijacking when not specifying and managing your own session id. It is +; not the be-all and end-all of session hijacking defense, but it's a good start. +; http://php.net/session.use-only-cookies +session.use_only_cookies = 1 + +; Name of the session (used as cookie name). +; http://php.net/session.name +session.name = PHPSESSID + +; Initialize session on request startup. +; http://php.net/session.auto-start +session.auto_start = 0 + +; Lifetime in seconds of cookie or, if 0, until browser is restarted. +; http://php.net/session.cookie-lifetime +session.cookie_lifetime = 0 + +; The path for which the cookie is valid. +; http://php.net/session.cookie-path +session.cookie_path = / + +; The domain for which the cookie is valid. +; http://php.net/session.cookie-domain +session.cookie_domain = + +; Whether or not to add the httpOnly flag to the cookie, which makes it +; inaccessible to browser scripting languages such as JavaScript. +; http://php.net/session.cookie-httponly +session.cookie_httponly = + +; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF) +; Current valid values are "Strict", "Lax" or "None". When using "None", +; make sure to include the quotes, as `none` is interpreted like `false` in ini files. +; https://tools.ietf.org/html/draft-west-first-party-cookies-07 +session.cookie_samesite = + +; Handler used to serialize data. php is the standard serializer of PHP. +; http://php.net/session.serialize-handler +session.serialize_handler = php + +; Defines the probability that the 'garbage collection' process is started on every +; session initialization. The probability is calculated by using gc_probability/gc_divisor, +; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. +; Default Value: 1 +; Development Value: 1 +; Production Value: 1 +; http://php.net/session.gc-probability +session.gc_probability = 1 + +; Defines the probability that the 'garbage collection' process is started on every +; session initialization. The probability is calculated by using gc_probability/gc_divisor, +; e.g. 1/100 means there is a 1% chance that the GC process starts on each request. +; For high volume production servers, using a value of 1000 is a more efficient approach. +; Default Value: 100 +; Development Value: 1000 +; Production Value: 1000 +; http://php.net/session.gc-divisor +session.gc_divisor = 1000 + +; After this number of seconds, stored data will be seen as 'garbage' and +; cleaned up by the garbage collection process. +; http://php.net/session.gc-maxlifetime +session.gc_maxlifetime = 1440 + +; NOTE: If you are using the subdirectory option for storing session files +; (see session.save_path above), then garbage collection does *not* +; happen automatically. You will need to do your own garbage +; collection through a shell script, cron entry, or some other method. +; For example, the following script is the equivalent of setting +; session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): +; find /path/to/sessions -cmin +24 -type f | xargs rm + +; Check HTTP Referer to invalidate externally stored URLs containing ids. +; HTTP_REFERER has to contain this substring for the session to be +; considered as valid. +; http://php.net/session.referer-check +session.referer_check = + +; Set to {nocache,private,public,} to determine HTTP caching aspects +; or leave this empty to avoid sending anti-caching headers. +; http://php.net/session.cache-limiter +session.cache_limiter = nocache + +; Document expires after n minutes. +; http://php.net/session.cache-expire +session.cache_expire = 180 + +; trans sid support is disabled by default. +; Use of trans sid may risk your users' security. +; Use this option with caution. +; - User may send URL contains active session ID +; to other person via. email/irc/etc. +; - URL that contains active session ID may be stored +; in publicly accessible computer. +; - User may access your site with the same session ID +; always using URL stored in browser's history or bookmarks. +; http://php.net/session.use-trans-sid +session.use_trans_sid = 0 + +; Set session ID character length. This value could be between 22 to 256. +; Shorter length than default is supported only for compatibility reason. +; Users should use 32 or more chars. +; http://php.net/session.sid-length +; Default Value: 32 +; Development Value: 26 +; Production Value: 26 +session.sid_length = 26 + +; The URL rewriter will look for URLs in a defined set of HTML tags. +;
is special; if you include them here, the rewriter will +; add a hidden field with the info which is otherwise appended +; to URLs. tag's action attribute URL will not be modified +; unless it is specified. +; Note that all valid entries require a "=", even if no value follows. +; Default Value: "a=href,area=href,frame=src,form=" +; Development Value: "a=href,area=href,frame=src,form=" +; Production Value: "a=href,area=href,frame=src,form=" +; http://php.net/url-rewriter.tags +session.trans_sid_tags = "a=href,area=href,frame=src,form=" + +; URL rewriter does not rewrite absolute URLs by default. +; To enable rewrites for absolute paths, target hosts must be specified +; at RUNTIME. i.e. use ini_set() +; tags is special. PHP will check action attribute's URL regardless +; of session.trans_sid_tags setting. +; If no host is defined, HTTP_HOST will be used for allowed host. +; Example value: php.net,www.php.net,wiki.php.net +; Use "," for multiple hosts. No spaces are allowed. +; Default Value: "" +; Development Value: "" +; Production Value: "" +;session.trans_sid_hosts="" + +; Define how many bits are stored in each character when converting +; the binary hash data to something readable. +; Possible values: +; 4 (4 bits: 0-9, a-f) +; 5 (5 bits: 0-9, a-v) +; 6 (6 bits: 0-9, a-z, A-Z, "-", ",") +; Default Value: 4 +; Development Value: 5 +; Production Value: 5 +; http://php.net/session.hash-bits-per-character +session.sid_bits_per_character = 5 + +; Enable upload progress tracking in $_SESSION +; Default Value: On +; Development Value: On +; Production Value: On +; http://php.net/session.upload-progress.enabled +;session.upload_progress.enabled = On + +; Cleanup the progress information as soon as all POST data has been read +; (i.e. upload completed). +; Default Value: On +; Development Value: On +; Production Value: On +; http://php.net/session.upload-progress.cleanup +;session.upload_progress.cleanup = On + +; A prefix used for the upload progress key in $_SESSION +; Default Value: "upload_progress_" +; Development Value: "upload_progress_" +; Production Value: "upload_progress_" +; http://php.net/session.upload-progress.prefix +;session.upload_progress.prefix = "upload_progress_" + +; The index name (concatenated with the prefix) in $_SESSION +; containing the upload progress information +; Default Value: "PHP_SESSION_UPLOAD_PROGRESS" +; Development Value: "PHP_SESSION_UPLOAD_PROGRESS" +; Production Value: "PHP_SESSION_UPLOAD_PROGRESS" +; http://php.net/session.upload-progress.name +;session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS" + +; How frequently the upload progress should be updated. +; Given either in percentages (per-file), or in bytes +; Default Value: "1%" +; Development Value: "1%" +; Production Value: "1%" +; http://php.net/session.upload-progress.freq +;session.upload_progress.freq = "1%" + +; The minimum delay between updates, in seconds +; Default Value: 1 +; Development Value: 1 +; Production Value: 1 +; http://php.net/session.upload-progress.min-freq +;session.upload_progress.min_freq = "1" + +; Only write session data when session data is changed. Enabled by default. +; http://php.net/session.lazy-write +;session.lazy_write = On + +[Assertion] +; Switch whether to compile assertions at all (to have no overhead at run-time) +; -1: Do not compile at all +; 0: Jump over assertion at run-time +; 1: Execute assertions +; Changing from or to a negative value is only possible in php.ini! (For turning assertions on and off at run-time, see assert.active, when zend.assertions = 1) +; Default Value: 1 +; Development Value: 1 +; Production Value: -1 +; http://php.net/zend.assertions +zend.assertions = 1 + +; Assert(expr); active by default. +; http://php.net/assert.active +;assert.active = On + +; Throw an AssertionError on failed assertions +; http://php.net/assert.exception +;assert.exception = On + +; Issue a PHP warning for each failed assertion. (Overridden by assert.exception if active) +; http://php.net/assert.warning +;assert.warning = On + +; Don't bail out by default. +; http://php.net/assert.bail +;assert.bail = Off + +; User-function to be called if an assertion fails. +; http://php.net/assert.callback +;assert.callback = 0 + +[COM] +; path to a file containing GUIDs, IIDs or filenames of files with TypeLibs +; http://php.net/com.typelib-file +;com.typelib_file = + +; allow Distributed-COM calls +; http://php.net/com.allow-dcom +;com.allow_dcom = true + +; autoregister constants of a component's typlib on com_load() +; http://php.net/com.autoregister-typelib +;com.autoregister_typelib = true + +; register constants casesensitive +; http://php.net/com.autoregister-casesensitive +;com.autoregister_casesensitive = false + +; show warnings on duplicate constant registrations +; http://php.net/com.autoregister-verbose +;com.autoregister_verbose = true + +; The default character set code-page to use when passing strings to and from COM objects. +; Default: system ANSI code page +;com.code_page= + +; The version of the .NET framework to use. The value of the setting are the first three parts +; of the framework's version number, separated by dots, and prefixed with "v", e.g. "v4.0.30319". +;com.dotnet_version= + +[mbstring] +; language for internal character representation. +; This affects mb_send_mail() and mbstring.detect_order. +; http://php.net/mbstring.language +;mbstring.language = Japanese + +; Use of this INI entry is deprecated, use global internal_encoding instead. +; internal/script encoding. +; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*) +; If empty, default_charset or internal_encoding or iconv.internal_encoding is used. +; The precedence is: default_charset < internal_encoding < iconv.internal_encoding +;mbstring.internal_encoding = + +; Use of this INI entry is deprecated, use global input_encoding instead. +; http input encoding. +; mbstring.encoding_translation = On is needed to use this setting. +; If empty, default_charset or input_encoding or mbstring.input is used. +; The precedence is: default_charset < input_encoding < mbstring.http_input +; http://php.net/mbstring.http-input +;mbstring.http_input = + +; Use of this INI entry is deprecated, use global output_encoding instead. +; http output encoding. +; mb_output_handler must be registered as output buffer to function. +; If empty, default_charset or output_encoding or mbstring.http_output is used. +; The precedence is: default_charset < output_encoding < mbstring.http_output +; To use an output encoding conversion, mbstring's output handler must be set +; otherwise output encoding conversion cannot be performed. +; http://php.net/mbstring.http-output +;mbstring.http_output = + +; enable automatic encoding translation according to +; mbstring.internal_encoding setting. Input chars are +; converted to internal encoding by setting this to On. +; Note: Do _not_ use automatic encoding translation for +; portable libs/applications. +; http://php.net/mbstring.encoding-translation +;mbstring.encoding_translation = Off + +; automatic encoding detection order. +; "auto" detect order is changed according to mbstring.language +; http://php.net/mbstring.detect-order +;mbstring.detect_order = auto + +; substitute_character used when character cannot be converted +; one from another +; http://php.net/mbstring.substitute-character +;mbstring.substitute_character = none + +; Enable strict encoding detection. +;mbstring.strict_detection = Off + +; This directive specifies the regex pattern of content types for which mb_output_handler() +; is activated. +; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml) +;mbstring.http_output_conv_mimetype= + +; This directive specifies maximum stack depth for mbstring regular expressions. It is similar +; to the pcre.recursion_limit for PCRE. +;mbstring.regex_stack_limit=100000 + +; This directive specifies maximum retry count for mbstring regular expressions. It is similar +; to the pcre.backtrack_limit for PCRE. +;mbstring.regex_retry_limit=1000000 + +[gd] +; Tell the jpeg decode to ignore warnings and try to create +; a gd image. The warning will then be displayed as notices +; disabled by default +; http://php.net/gd.jpeg-ignore-warning +;gd.jpeg_ignore_warning = 1 + +[exif] +; Exif UNICODE user comments are handled as UCS-2BE/UCS-2LE and JIS as JIS. +; With mbstring support this will automatically be converted into the encoding +; given by corresponding encode setting. When empty mbstring.internal_encoding +; is used. For the decode settings you can distinguish between motorola and +; intel byte order. A decode setting cannot be empty. +; http://php.net/exif.encode-unicode +;exif.encode_unicode = ISO-8859-15 + +; http://php.net/exif.decode-unicode-motorola +;exif.decode_unicode_motorola = UCS-2BE + +; http://php.net/exif.decode-unicode-intel +;exif.decode_unicode_intel = UCS-2LE + +; http://php.net/exif.encode-jis +;exif.encode_jis = + +; http://php.net/exif.decode-jis-motorola +;exif.decode_jis_motorola = JIS + +; http://php.net/exif.decode-jis-intel +;exif.decode_jis_intel = JIS + +[Tidy] +; The path to a default tidy configuration file to use when using tidy +; http://php.net/tidy.default-config +;tidy.default_config = /usr/local/lib/php/default.tcfg + +; Should tidy clean and repair output automatically? +; WARNING: Do not use this option if you are generating non-html content +; such as dynamic images +; http://php.net/tidy.clean-output +tidy.clean_output = Off + +[soap] +; Enables or disables WSDL caching feature. +; http://php.net/soap.wsdl-cache-enabled +soap.wsdl_cache_enabled=1 + +; Sets the directory name where SOAP extension will put cache files. +; http://php.net/soap.wsdl-cache-dir +soap.wsdl_cache_dir="/tmp" + +; (time to live) Sets the number of second while cached file will be used +; instead of original one. +; http://php.net/soap.wsdl-cache-ttl +soap.wsdl_cache_ttl=86400 + +; Sets the size of the cache limit. (Max. number of WSDL files to cache) +soap.wsdl_cache_limit = 5 + +[sysvshm] +; A default size of the shared memory segment +;sysvshm.init_mem = 10000 + +[ldap] +; Sets the maximum number of open links or -1 for unlimited. +ldap.max_links = -1 + +[dba] +;dba.default_handler= + +[opcache] +; Determines if Zend OPCache is enabled +;opcache.enable=1 + +; Determines if Zend OPCache is enabled for the CLI version of PHP +;opcache.enable_cli=0 + +; The OPcache shared memory storage size. +;opcache.memory_consumption=128 + +; The amount of memory for interned strings in Mbytes. +;opcache.interned_strings_buffer=8 + +; The maximum number of keys (scripts) in the OPcache hash table. +; Only numbers between 200 and 1000000 are allowed. +;opcache.max_accelerated_files=10000 + +; The maximum percentage of "wasted" memory until a restart is scheduled. +;opcache.max_wasted_percentage=5 + +; When this directive is enabled, the OPcache appends the current working +; directory to the script key, thus eliminating possible collisions between +; files with the same name (basename). Disabling the directive improves +; performance, but may break existing applications. +;opcache.use_cwd=1 + +; When disabled, you must reset the OPcache manually or restart the +; webserver for changes to the filesystem to take effect. +;opcache.validate_timestamps=1 + +; How often (in seconds) to check file timestamps for changes to the shared +; memory storage allocation. ("1" means validate once per second, but only +; once per request. "0" means always validate) +;opcache.revalidate_freq=2 + +; Enables or disables file search in include_path optimization +;opcache.revalidate_path=0 + +; If disabled, all PHPDoc comments are dropped from the code to reduce the +; size of the optimized code. +;opcache.save_comments=1 + +; If enabled, compilation warnings (including notices and deprecations) will +; be recorded and replayed each time a file is included. Otherwise, compilation +; warnings will only be emitted when the file is first cached. +;opcache.record_warnings=0 + +; Allow file existence override (file_exists, etc.) performance feature. +;opcache.enable_file_override=0 + +; A bitmask, where each bit enables or disables the appropriate OPcache +; passes +;opcache.optimization_level=0x7FFFBFFF + +;opcache.dups_fix=0 + +; The location of the OPcache blacklist file (wildcards allowed). +; Each OPcache blacklist file is a text file that holds the names of files +; that should not be accelerated. The file format is to add each filename +; to a new line. The filename may be a full path or just a file prefix +; (i.e., /var/www/x blacklists all the files and directories in /var/www +; that start with 'x'). Line starting with a ; are ignored (comments). +;opcache.blacklist_filename= + +; Allows exclusion of large files from being cached. By default all files +; are cached. +;opcache.max_file_size=0 + +; Check the cache checksum each N requests. +; The default value of "0" means that the checks are disabled. +;opcache.consistency_checks=0 + +; How long to wait (in seconds) for a scheduled restart to begin if the cache +; is not being accessed. +;opcache.force_restart_timeout=180 + +; OPcache error_log file name. Empty string assumes "stderr". +;opcache.error_log= + +; All OPcache errors go to the Web server log. +; By default, only fatal errors (level 0) or errors (level 1) are logged. +; You can also enable warnings (level 2), info messages (level 3) or +; debug messages (level 4). +;opcache.log_verbosity_level=1 + +; Preferred Shared Memory back-end. Leave empty and let the system decide. +;opcache.preferred_memory_model= + +; Protect the shared memory from unexpected writing during script execution. +; Useful for internal debugging only. +;opcache.protect_memory=0 + +; Allows calling OPcache API functions only from PHP scripts which path is +; started from specified string. The default "" means no restriction +;opcache.restrict_api= + +; Mapping base of shared memory segments (for Windows only). All the PHP +; processes have to map shared memory into the same address space. This +; directive allows to manually fix the "Unable to reattach to base address" +; errors. +;opcache.mmap_base= + +; Facilitates multiple OPcache instances per user (for Windows only). All PHP +; processes with the same cache ID and user share an OPcache instance. +;opcache.cache_id= + +; Enables and sets the second level cache directory. +; It should improve performance when SHM memory is full, at server restart or +; SHM reset. The default "" disables file based caching. +;opcache.file_cache= + +; Enables or disables opcode caching in shared memory. +;opcache.file_cache_only=0 + +; Enables or disables checksum validation when script loaded from file cache. +;opcache.file_cache_consistency_checks=1 + +; Implies opcache.file_cache_only=1 for a certain process that failed to +; reattach to the shared memory (for Windows only). Explicitly enabled file +; cache is required. +;opcache.file_cache_fallback=1 + +; Enables or disables copying of PHP code (text segment) into HUGE PAGES. +; This should improve performance, but requires appropriate OS configuration. +;opcache.huge_code_pages=0 + +; Validate cached file permissions. +;opcache.validate_permission=0 + +; Prevent name collisions in chroot'ed environment. +;opcache.validate_root=0 + +; If specified, it produces opcode dumps for debugging different stages of +; optimizations. +;opcache.opt_debug_level=0 + +; Specifies a PHP script that is going to be compiled and executed at server +; start-up. +; http://php.net/opcache.preload +;opcache.preload= + +; Preloading code as root is not allowed for security reasons. This directive +; facilitates to let the preloading to be run as another user. +; http://php.net/opcache.preload_user +;opcache.preload_user= + +; Prevents caching files that are less than this number of seconds old. It +; protects from caching of incompletely updated files. In case all file updates +; on your site are atomic, you may increase performance by setting it to "0". +;opcache.file_update_protection=2 + +; Absolute path used to store shared lockfiles (for *nix only). +;opcache.lockfile_path=/tmp + +[curl] +; A default value for the CURLOPT_CAINFO option. This is required to be an +; absolute path. +;curl.cainfo = + +[openssl] +; The location of a Certificate Authority (CA) file on the local filesystem +; to use when verifying the identity of SSL/TLS peers. Most users should +; not specify a value for this directive as PHP will attempt to use the +; OS-managed cert stores in its absence. If specified, this value may still +; be overridden on a per-stream basis via the "cafile" SSL stream context +; option. +;openssl.cafile= + +; If openssl.cafile is not specified or if the CA file is not found, the +; directory pointed to by openssl.capath is searched for a suitable +; certificate. This value must be a correctly hashed certificate directory. +; Most users should not specify a value for this directive as PHP will +; attempt to use the OS-managed cert stores in its absence. If specified, +; this value may still be overridden on a per-stream basis via the "capath" +; SSL stream context option. +;openssl.capath= + +[ffi] +; FFI API restriction. Possible values: +; "preload" - enabled in CLI scripts and preloaded files (default) +; "false" - always disabled +; "true" - always enabled +;ffi.enable=preload + +; List of headers files to preload, wildcard patterns allowed. +;ffi.preload= diff --git a/db/.gitkeep b/db/.gitkeep new file mode 100644 index 0000000..678c614 --- /dev/null +++ b/db/.gitkeep @@ -0,0 +1 @@ +# För att behålla katalog diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d7f3019 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,71 @@ +networks: + network: + driver: bridge + ipam: + config: + - subnet: 10.5.0.0/16 + gateway: 10.5.0.1 +services: + nginx: + image: nginx:latest + container_name: nginx + hostname: egytalk.se + restart: always + ports: + - 80:80 + volumes: + - ./www/public:/var/www/public + - ./config/nginx/nginx.conf:/etc/nginx/nginx.conf + - ./config/ssl:/etc/ssl + extra_hosts: + - "api.egytalk.se: 127.0.0.1" + - "egyweb.se: 127.0.0.1" + networks: + network: + ipv4_address: 10.5.0.5 + + mariadb: + image: mariadb:latest + container_name: mariadb + restart: always + ports: + - 3306:3306 + volumes: + - ./db:/var/lib/mysql + - ./config/mysql/my.cnf:/etc/mysql/my.cnf + environment: + - MYSQL_ROOT_PASSWORD=12345 + - MYSQL_DATABASE=db + - MYSQL_USER=pma + - MYSQL_PASSWORD=12345 + networks: + network: + ipv4_address: 10.5.0.4 + + php: + build: ./docker/php + container_name: php + working_dir: /var/www + volumes: + - ./www:/var/www/ + - ./config/php/php.ini:/usr/local/etc/php/php.ini + networks: + network: + ipv4_address: 10.5.0.3 + + node: + image: node:latest + container_name: node + working_dir: /sveltekit + command: "npm run dev -- --host 0.0.0.0 --port 80" + volumes: + - ./sveltekit:/sveltekit + networks: + network: + ipv4_address: 10.5.0.2 + extra_hosts: + - "api.egytalk.se: 10.5.0.5" + - "egytalk.se: 127.0.0.1" + expose: + - 80 + \ No newline at end of file diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile new file mode 100644 index 0000000..1d06ff3 --- /dev/null +++ b/docker/php/Dockerfile @@ -0,0 +1,48 @@ +FROM php:fpm + +WORKDIR /var/www + +RUN apt-get --allow-releaseinfo-change update && apt-get upgrade -y \ + && apt-get install -y \ + g++ \ + libbz2-dev \ + libc-client-dev \ + libcurl4-gnutls-dev \ + libedit-dev \ + libfreetype6-dev \ + libicu-dev \ + libjpeg62-turbo-dev \ + libkrb5-dev \ + libmcrypt-dev \ + libpng-dev \ + libsqlite3-dev \ + libzip-dev \ + wget \ + unzip \ + zlib1g-dev \ + && docker-php-ext-install -j$(nproc) \ + mysqli \ + pdo_mysql \ + sockets \ + && docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j$(nproc) gd \ + && docker-php-ext-configure zip \ + && docker-php-ext-install zip \ + && docker-php-source delete \ + && apt-get remove -y g++ wget \ + && apt-get autoremove --purge -y && apt-get autoclean -y && apt-get clean -y \ + && rm -rf /var/lib/apt/lists/* \ + && rm -rf /tmp/* /var/tmp/* + +# Add user +RUN groupadd -g 1000 www +RUN useradd -u 1000 -ms /bin/bash -g www www + +# Copy existing application directory contents +COPY ./ /var/www + +# Copy existing application directory permissions +COPY --chown=www:www ./ /var/www + +# Change current user to www +USER www \ No newline at end of file diff --git a/sveltekit/.gitignore b/sveltekit/.gitignore new file mode 100644 index 0000000..8f6c617 --- /dev/null +++ b/sveltekit/.gitignore @@ -0,0 +1,12 @@ +.DS_Store +node_modules +/build +/.svelte-kit +/package +.env +.env.* +!.env.example +.vercel +.output +vite.config.js.timestamp-* +vite.config.ts.timestamp-* diff --git a/sveltekit/.npmrc b/sveltekit/.npmrc new file mode 100644 index 0000000..b6f27f1 --- /dev/null +++ b/sveltekit/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/sveltekit/README.md b/sveltekit/README.md new file mode 100644 index 0000000..5c91169 --- /dev/null +++ b/sveltekit/README.md @@ -0,0 +1,38 @@ +# create-svelte + +Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte). + +## Creating a project + +If you're seeing this, you've probably already done this step. Congrats! + +```bash +# create a new project in the current directory +npm create svelte@latest + +# create a new project in my-app +npm create svelte@latest my-app +``` + +## Developing + +Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: + +```bash +npm run dev + +# or start the server and open the app in a new browser tab +npm run dev -- --open +``` + +## Building + +To create a production version of your app: + +```bash +npm run build +``` + +You can preview the production build with `npm run preview`. + +> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment. diff --git a/sveltekit/package-lock.json b/sveltekit/package-lock.json new file mode 100644 index 0000000..6264e0a --- /dev/null +++ b/sveltekit/package-lock.json @@ -0,0 +1,1508 @@ +{ + "name": "sveltekit", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "sveltekit", + "version": "0.0.1", + "devDependencies": { + "@fontsource/fira-mono": "^4.5.10", + "@neoconfetti/svelte": "^1.0.0", + "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/kit": "^1.5.0", + "svelte": "^3.54.0", + "vite": "^4.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.12.tgz", + "integrity": "sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz", + "integrity": "sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.12.tgz", + "integrity": "sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz", + "integrity": "sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz", + "integrity": "sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz", + "integrity": "sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz", + "integrity": "sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz", + "integrity": "sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz", + "integrity": "sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz", + "integrity": "sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz", + "integrity": "sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz", + "integrity": "sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz", + "integrity": "sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz", + "integrity": "sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz", + "integrity": "sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz", + "integrity": "sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.12.tgz", + "integrity": "sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.12.tgz", + "integrity": "sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.12.tgz", + "integrity": "sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.12.tgz", + "integrity": "sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.12.tgz", + "integrity": "sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.12.tgz", + "integrity": "sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@fontsource/fira-mono": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.10.tgz", + "integrity": "sha512-bxUnRP8xptGRo8YXeY073DSpfK74XpSb0ZyRNpHV9WvLnJ7TwPOjZll8hTMin7zLC6iOp59pDZ8EQDj1gzgAQQ==", + "dev": true + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@neoconfetti/svelte": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@neoconfetti/svelte/-/svelte-1.0.0.tgz", + "integrity": "sha512-SmksyaJAdSlMa9cTidVSIqYo1qti+WTsviNDwgjNVm+KQ3DRP2Df9umDIzC4vCcpEYY+chQe0i2IKnLw03AT8Q==", + "dev": true + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "node_modules/@sveltejs/adapter-auto": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.0.0.tgz", + "integrity": "sha512-b+gkHFZgD771kgV3aO4avHFd7y1zhmMYy9i6xOK7m/rwmwaRO8gnF5zBc0Rgca80B2PMU1bKNxyBTHA14OzUAQ==", + "dev": true, + "dependencies": { + "import-meta-resolve": "^2.2.0" + }, + "peerDependencies": { + "@sveltejs/kit": "^1.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.12.0.tgz", + "integrity": "sha512-hhOtaL3jS7p4A3O34m8RlM+K5OSyrEyFUIh4iqsv6e8BDvupzNSxGa7J9+Gfjb+Z1yZCxjvxJ8Flb2Cj0g8cLg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte": "^2.0.0", + "@types/cookie": "^0.5.1", + "cookie": "^0.5.0", + "devalue": "^4.3.0", + "esm-env": "^1.0.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.0", + "mime": "^3.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.5.1", + "sirv": "^2.0.2", + "tiny-glob": "^0.2.9", + "undici": "5.21.0" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": "^16.14 || >=18" + }, + "peerDependencies": { + "svelte": "^3.54.0", + "vite": "^4.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.3.tgz", + "integrity": "sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "deepmerge": "^4.3.0", + "kleur": "^4.1.5", + "magic-string": "^0.29.0", + "svelte-hmr": "^0.15.1", + "vitefu": "^0.2.4" + }, + "engines": { + "node": "^14.18.0 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.54.0", + "vite": "^4.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte/node_modules/magic-string": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.29.0.tgz", + "integrity": "sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@types/cookie": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz", + "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", + "dev": true + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/devalue": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.0.tgz", + "integrity": "sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.12.tgz", + "integrity": "sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.12", + "@esbuild/android-arm64": "0.17.12", + "@esbuild/android-x64": "0.17.12", + "@esbuild/darwin-arm64": "0.17.12", + "@esbuild/darwin-x64": "0.17.12", + "@esbuild/freebsd-arm64": "0.17.12", + "@esbuild/freebsd-x64": "0.17.12", + "@esbuild/linux-arm": "0.17.12", + "@esbuild/linux-arm64": "0.17.12", + "@esbuild/linux-ia32": "0.17.12", + "@esbuild/linux-loong64": "0.17.12", + "@esbuild/linux-mips64el": "0.17.12", + "@esbuild/linux-ppc64": "0.17.12", + "@esbuild/linux-riscv64": "0.17.12", + "@esbuild/linux-s390x": "0.17.12", + "@esbuild/linux-x64": "0.17.12", + "@esbuild/netbsd-x64": "0.17.12", + "@esbuild/openbsd-x64": "0.17.12", + "@esbuild/sunos-x64": "0.17.12", + "@esbuild/win32-arm64": "0.17.12", + "@esbuild/win32-ia32": "0.17.12", + "@esbuild/win32-x64": "0.17.12" + } + }, + "node_modules/esm-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.0.tgz", + "integrity": "sha512-YsIfrk80NqUDrxrjWPXUa7PWvAfegZEXHuPsEZg58fGCdjL1I9C1i/NaG+L+27kxxwkrG/QEDEQc8s/ynXWWGQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, + "node_modules/sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "3.57.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.57.0.tgz", + "integrity": "sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/svelte-hmr": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz", + "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": ">=3.19.0" + } + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/undici": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", + "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", + "dev": true, + "dependencies": { + "busboy": "^1.6.0" + }, + "engines": { + "node": ">=12.18" + } + }, + "node_modules/vite": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.0.tgz", + "integrity": "sha512-AbDTyzzwuKoRtMIRLGNxhLRuv1FpRgdIw+1y6AQG73Q5+vtecmvzKo/yk8X/vrHDpETRTx01ABijqUHIzBXi0g==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.21", + "resolve": "^1.22.1", + "rollup": "^3.18.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", + "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + } + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.12.tgz", + "integrity": "sha512-E/sgkvwoIfj4aMAPL2e35VnUJspzVYl7+M1B2cqeubdBhADV4uPon0KCc8p2G+LqSJ6i8ocYPCqY3A4GGq0zkQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.12.tgz", + "integrity": "sha512-WQ9p5oiXXYJ33F2EkE3r0FRDFVpEdcDiwNX3u7Xaibxfx6vQE0Sb8ytrfQsA5WO6kDn6mDfKLh6KrPBjvkk7xA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.12.tgz", + "integrity": "sha512-m4OsaCr5gT+se25rFPHKQXARMyAehHTQAz4XX1Vk3d27VtqiX0ALMBPoXZsGaB6JYryCLfgGwUslMqTfqeLU0w==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.12.tgz", + "integrity": "sha512-O3GCZghRIx+RAN0NDPhyyhRgwa19MoKlzGonIb5hgTj78krqp9XZbYCvFr9N1eUxg0ZQEpiiZ4QvsOQwBpP+lg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.12.tgz", + "integrity": "sha512-5D48jM3tW27h1qjaD9UNRuN+4v0zvksqZSPZqeSWggfMlsVdAhH3pwSfQIFJwcs9QJ9BRibPS4ViZgs3d2wsCA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.12.tgz", + "integrity": "sha512-OWvHzmLNTdF1erSvrfoEBGlN94IE6vCEaGEkEH29uo/VoONqPnoDFfShi41Ew+yKimx4vrmmAJEGNoyyP+OgOQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.12.tgz", + "integrity": "sha512-A0Xg5CZv8MU9xh4a+7NUpi5VHBKh1RaGJKqjxe4KG87X+mTjDE6ZvlJqpWoeJxgfXHT7IMP9tDFu7IZ03OtJAw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.12.tgz", + "integrity": "sha512-WsHyJ7b7vzHdJ1fv67Yf++2dz3D726oO3QCu8iNYik4fb5YuuReOI9OtA+n7Mk0xyQivNTPbl181s+5oZ38gyA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.12.tgz", + "integrity": "sha512-cK3AjkEc+8v8YG02hYLQIQlOznW+v9N+OI9BAFuyqkfQFR+DnDLhEM5N8QRxAUz99cJTo1rLNXqRrvY15gbQUg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.12.tgz", + "integrity": "sha512-jdOBXJqcgHlah/nYHnj3Hrnl9l63RjtQ4vn9+bohjQPI2QafASB5MtHAoEv0JQHVb/xYQTFOeuHnNYE1zF7tYw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.12.tgz", + "integrity": "sha512-GTOEtj8h9qPKXCyiBBnHconSCV9LwFyx/gv3Phw0pa25qPYjVuuGZ4Dk14bGCfGX3qKF0+ceeQvwmtI+aYBbVA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.12.tgz", + "integrity": "sha512-o8CIhfBwKcxmEENOH9RwmUejs5jFiNoDw7YgS0EJTF6kgPgcqLFjgoc5kDey5cMHRVCIWc6kK2ShUePOcc7RbA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.12.tgz", + "integrity": "sha512-biMLH6NR/GR4z+ap0oJYb877LdBpGac8KfZoEnDiBKd7MD/xt8eaw1SFfYRUeMVx519kVkAOL2GExdFmYnZx3A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.12.tgz", + "integrity": "sha512-jkphYUiO38wZGeWlfIBMB72auOllNA2sLfiZPGDtOBb1ELN8lmqBrlMiucgL8awBw1zBXN69PmZM6g4yTX84TA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.12.tgz", + "integrity": "sha512-j3ucLdeY9HBcvODhCY4b+Ds3hWGO8t+SAidtmWu/ukfLLG/oYDMaA+dnugTVAg5fnUOGNbIYL9TOjhWgQB8W5g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.12.tgz", + "integrity": "sha512-uo5JL3cgaEGotaqSaJdRfFNSCUJOIliKLnDGWaVCgIKkHxwhYMm95pfMbWZ9l7GeW9kDg0tSxcy9NYdEtjwwmA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.12.tgz", + "integrity": "sha512-DNdoRg8JX+gGsbqt2gPgkgb00mqOgOO27KnrWZtdABl6yWTST30aibGJ6geBq3WM2TIeW6COs5AScnC7GwtGPg==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.12.tgz", + "integrity": "sha512-aVsENlr7B64w8I1lhHShND5o8cW6sB9n9MUtLumFlPhG3elhNWtE7M1TFpj3m7lT3sKQUMkGFjTQBrvDDO1YWA==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.12.tgz", + "integrity": "sha512-qbHGVQdKSwi0JQJuZznS4SyY27tYXYF0mrgthbxXrZI3AHKuRvU+Eqbg/F0rmLDpW/jkIZBlCO1XfHUBMNJ1pg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.12.tgz", + "integrity": "sha512-zsCp8Ql+96xXTVTmm6ffvoTSZSV2B/LzzkUXAY33F/76EajNw1m+jZ9zPfNJlJ3Rh4EzOszNDHsmG/fZOhtqDg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.12.tgz", + "integrity": "sha512-FfrFjR4id7wcFYOdqbDfDET3tjxCozUgbqdkOABsSFzoZGFC92UK7mg4JKRc/B3NNEf1s2WHxJ7VfTdVDPN3ng==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.12.tgz", + "integrity": "sha512-JOOxw49BVZx2/5tW3FqkdjSD/5gXYeVGPDcB0lvap0gLQshkh1Nyel1QazC+wNxus3xPlsYAgqU1BUmrmCvWtw==", + "dev": true, + "optional": true + }, + "@fontsource/fira-mono": { + "version": "4.5.10", + "resolved": "https://registry.npmjs.org/@fontsource/fira-mono/-/fira-mono-4.5.10.tgz", + "integrity": "sha512-bxUnRP8xptGRo8YXeY073DSpfK74XpSb0ZyRNpHV9WvLnJ7TwPOjZll8hTMin7zLC6iOp59pDZ8EQDj1gzgAQQ==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@neoconfetti/svelte": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@neoconfetti/svelte/-/svelte-1.0.0.tgz", + "integrity": "sha512-SmksyaJAdSlMa9cTidVSIqYo1qti+WTsviNDwgjNVm+KQ3DRP2Df9umDIzC4vCcpEYY+chQe0i2IKnLw03AT8Q==", + "dev": true + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "@sveltejs/adapter-auto": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.0.0.tgz", + "integrity": "sha512-b+gkHFZgD771kgV3aO4avHFd7y1zhmMYy9i6xOK7m/rwmwaRO8gnF5zBc0Rgca80B2PMU1bKNxyBTHA14OzUAQ==", + "dev": true, + "requires": { + "import-meta-resolve": "^2.2.0" + } + }, + "@sveltejs/kit": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.12.0.tgz", + "integrity": "sha512-hhOtaL3jS7p4A3O34m8RlM+K5OSyrEyFUIh4iqsv6e8BDvupzNSxGa7J9+Gfjb+Z1yZCxjvxJ8Flb2Cj0g8cLg==", + "dev": true, + "requires": { + "@sveltejs/vite-plugin-svelte": "^2.0.0", + "@types/cookie": "^0.5.1", + "cookie": "^0.5.0", + "devalue": "^4.3.0", + "esm-env": "^1.0.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.0", + "mime": "^3.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.5.1", + "sirv": "^2.0.2", + "tiny-glob": "^0.2.9", + "undici": "5.21.0" + } + }, + "@sveltejs/vite-plugin-svelte": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.0.3.tgz", + "integrity": "sha512-o+cguBFdwIGtRbNkYOyqTM7KvRUffxh5bfK4oJsWKG2obu+v/cbpT03tJrGl58C7tRXo/aEC0/axN5FVHBj0nA==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "deepmerge": "^4.3.0", + "kleur": "^4.1.5", + "magic-string": "^0.29.0", + "svelte-hmr": "^0.15.1", + "vitefu": "^0.2.4" + }, + "dependencies": { + "magic-string": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.29.0.tgz", + "integrity": "sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "@types/cookie": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.1.tgz", + "integrity": "sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g==", + "dev": true + }, + "busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dev": true, + "requires": { + "streamsearch": "^1.1.0" + } + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true + }, + "devalue": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.0.tgz", + "integrity": "sha512-n94yQo4LI3w7erwf84mhRUkUJfhLoCZiLyoOZ/QFsDbcWNZePrLwbQpvZBUG2TNxwV3VjCKPxkiiQA6pe3TrTA==", + "dev": true + }, + "esbuild": { + "version": "0.17.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.12.tgz", + "integrity": "sha512-bX/zHl7Gn2CpQwcMtRogTTBf9l1nl+H6R8nUbjk+RuKqAE3+8FDulLA+pHvX7aA7Xe07Iwa+CWvy9I8Y2qqPKQ==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.12", + "@esbuild/android-arm64": "0.17.12", + "@esbuild/android-x64": "0.17.12", + "@esbuild/darwin-arm64": "0.17.12", + "@esbuild/darwin-x64": "0.17.12", + "@esbuild/freebsd-arm64": "0.17.12", + "@esbuild/freebsd-x64": "0.17.12", + "@esbuild/linux-arm": "0.17.12", + "@esbuild/linux-arm64": "0.17.12", + "@esbuild/linux-ia32": "0.17.12", + "@esbuild/linux-loong64": "0.17.12", + "@esbuild/linux-mips64el": "0.17.12", + "@esbuild/linux-ppc64": "0.17.12", + "@esbuild/linux-riscv64": "0.17.12", + "@esbuild/linux-s390x": "0.17.12", + "@esbuild/linux-x64": "0.17.12", + "@esbuild/netbsd-x64": "0.17.12", + "@esbuild/openbsd-x64": "0.17.12", + "@esbuild/sunos-x64": "0.17.12", + "@esbuild/win32-arm64": "0.17.12", + "@esbuild/win32-ia32": "0.17.12", + "@esbuild/win32-x64": "0.17.12" + } + }, + "esm-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "import-meta-resolve": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.2.tgz", + "integrity": "sha512-f8KcQ1D80V7RnqVm+/lirO9zkOxjGxhaTC1IPrBGd3MEfNgmNG67tSUO9gTi2F3Blr2Az6g1vocaxzkVnWl9MA==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true + }, + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "dev": true + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rollup": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.0.tgz", + "integrity": "sha512-YsIfrk80NqUDrxrjWPXUa7PWvAfegZEXHuPsEZg58fGCdjL1I9C1i/NaG+L+27kxxwkrG/QEDEQc8s/ynXWWGQ==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "requires": { + "mri": "^1.1.0" + } + }, + "set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, + "sirv": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", + "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "dev": true + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svelte": { + "version": "3.57.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.57.0.tgz", + "integrity": "sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==", + "dev": true + }, + "svelte-hmr": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.1.tgz", + "integrity": "sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==", + "dev": true, + "requires": {} + }, + "tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "totalist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", + "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", + "dev": true + }, + "undici": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", + "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", + "dev": true, + "requires": { + "busboy": "^1.6.0" + } + }, + "vite": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.0.tgz", + "integrity": "sha512-AbDTyzzwuKoRtMIRLGNxhLRuv1FpRgdIw+1y6AQG73Q5+vtecmvzKo/yk8X/vrHDpETRTx01ABijqUHIzBXi0g==", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.21", + "resolve": "^1.22.1", + "rollup": "^3.18.0" + } + }, + "vitefu": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", + "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "dev": true, + "requires": {} + } + } +} diff --git a/sveltekit/package.json b/sveltekit/package.json new file mode 100644 index 0000000..77a8f9d --- /dev/null +++ b/sveltekit/package.json @@ -0,0 +1,18 @@ +{ + "name": "sveltekit", + "version": "0.0.1", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@fontsource/fira-mono": "^4.5.10", + "@neoconfetti/svelte": "^1.0.0", + "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/kit": "^1.5.0", + "svelte": "^3.54.0", + "vite": "^4.0.0" + }, + "type": "module" +} diff --git a/sveltekit/src/app.html b/sveltekit/src/app.html new file mode 100644 index 0000000..effe0d0 --- /dev/null +++ b/sveltekit/src/app.html @@ -0,0 +1,12 @@ + + + + + + + %sveltekit.head% + + +
%sveltekit.body%
+ + diff --git a/sveltekit/src/hooks.server.js b/sveltekit/src/hooks.server.js new file mode 100644 index 0000000..e69de29 diff --git a/sveltekit/src/lib/images/github.svg b/sveltekit/src/lib/images/github.svg new file mode 100644 index 0000000..bc5d249 --- /dev/null +++ b/sveltekit/src/lib/images/github.svg @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/sveltekit/src/lib/images/svelte-logo.svg b/sveltekit/src/lib/images/svelte-logo.svg new file mode 100644 index 0000000..49492a8 --- /dev/null +++ b/sveltekit/src/lib/images/svelte-logo.svg @@ -0,0 +1 @@ +svelte-logo \ No newline at end of file diff --git a/sveltekit/src/lib/images/svelte-welcome.png b/sveltekit/src/lib/images/svelte-welcome.png new file mode 100644 index 0000000..fe7d2d6 Binary files /dev/null and b/sveltekit/src/lib/images/svelte-welcome.png differ diff --git a/sveltekit/src/lib/images/svelte-welcome.webp b/sveltekit/src/lib/images/svelte-welcome.webp new file mode 100644 index 0000000..6ec1a28 Binary files /dev/null and b/sveltekit/src/lib/images/svelte-welcome.webp differ diff --git a/sveltekit/src/routes/+layout.svelte b/sveltekit/src/routes/+layout.svelte new file mode 100644 index 0000000..9c7445f --- /dev/null +++ b/sveltekit/src/routes/+layout.svelte @@ -0,0 +1,53 @@ + + +
+
+ +
+ +
+ + +
+ + diff --git a/sveltekit/src/routes/+page.js b/sveltekit/src/routes/+page.js new file mode 100644 index 0000000..a72419a --- /dev/null +++ b/sveltekit/src/routes/+page.js @@ -0,0 +1,3 @@ +// since there's no dynamic data here, we can prerender +// it so that it gets served as a static asset in production +export const prerender = true; diff --git a/sveltekit/src/routes/+page.svelte b/sveltekit/src/routes/+page.svelte new file mode 100644 index 0000000..97201ef --- /dev/null +++ b/sveltekit/src/routes/+page.svelte @@ -0,0 +1,59 @@ + + + + Home + + + +
+

+ + + + Welcome + + + + to your new
SvelteKit app +

+ +

+ try editing src/routes/+page.svelte +

+ + +
+ + diff --git a/sveltekit/src/routes/Counter.svelte b/sveltekit/src/routes/Counter.svelte new file mode 100644 index 0000000..69a5b2a --- /dev/null +++ b/sveltekit/src/routes/Counter.svelte @@ -0,0 +1,102 @@ + + +
+ + +
+
+ + {Math.floor($displayed_count)} +
+
+ + +
+ + diff --git a/sveltekit/src/routes/Header.svelte b/sveltekit/src/routes/Header.svelte new file mode 100644 index 0000000..368b721 --- /dev/null +++ b/sveltekit/src/routes/Header.svelte @@ -0,0 +1,129 @@ + + +
+
+ + SvelteKit + +
+ + + +
+ + GitHub + +
+
+ + diff --git a/sveltekit/src/routes/about/+page.js b/sveltekit/src/routes/about/+page.js new file mode 100644 index 0000000..e739ef4 --- /dev/null +++ b/sveltekit/src/routes/about/+page.js @@ -0,0 +1,9 @@ +import { dev } from '$app/environment'; + +// we don't need any JS on this page, though we'll load +// it in dev so that we get hot module replacement +export const csr = dev; + +// since there's no dynamic data here, we can prerender +// it so that it gets served as a static asset in production +export const prerender = true; diff --git a/sveltekit/src/routes/about/+page.svelte b/sveltekit/src/routes/about/+page.svelte new file mode 100644 index 0000000..7f7946d --- /dev/null +++ b/sveltekit/src/routes/about/+page.svelte @@ -0,0 +1,26 @@ + + About + + + +
+

About this app

+ +

+ This is a SvelteKit app. You can make your own by typing the + following into your command line and following the prompts: +

+ +
npm create svelte@latest
+ +

+ The page you're looking at is purely static HTML, with no client-side interactivity needed. + Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening + the devtools network panel and reloading. +

+ +

+ The Sverdle page illustrates SvelteKit's data loading and form handling. Try + using it with JavaScript disabled! +

+
diff --git a/sveltekit/src/routes/formtest/+page.server.js b/sveltekit/src/routes/formtest/+page.server.js new file mode 100644 index 0000000..12f4fd3 --- /dev/null +++ b/sveltekit/src/routes/formtest/+page.server.js @@ -0,0 +1,24 @@ +export async function load({ cookies, fetch }) { + cookies.set("Sveltform", "testar"); + + + const response = await fetch("http://api.egytalk.se/api/get.php", { + credentials: "include" + }); + const result = await response.json(); + //let c = response.cookies.get("PHPSESSID"); + console.log(response); + //result['cookie'] = c + return result; +} + +export const actions = { + + default: async ({ request, cookies }) => { + const data = await request.formData(); + let name = data.get("txt"); + + cookies.set('test', "Kalle"); + return { success: true, name } + } +} \ No newline at end of file diff --git a/sveltekit/src/routes/formtest/+page.svelte b/sveltekit/src/routes/formtest/+page.svelte new file mode 100644 index 0000000..252e6b9 --- /dev/null +++ b/sveltekit/src/routes/formtest/+page.svelte @@ -0,0 +1,23 @@ + +{#await get() then info} +

mobil: {info?.phone}

+{/await} +

{form?.success}

+

{form?.name}

+

load(): {data?.phone}, cookie: {data?.cookie}

+ + + +
\ No newline at end of file diff --git a/sveltekit/src/routes/styles.css b/sveltekit/src/routes/styles.css new file mode 100644 index 0000000..1441d94 --- /dev/null +++ b/sveltekit/src/routes/styles.css @@ -0,0 +1,107 @@ +@import '@fontsource/fira-mono'; + +:root { + --font-body: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, + Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + --font-mono: 'Fira Mono', monospace; + --color-bg-0: rgb(202, 216, 228); + --color-bg-1: hsl(209, 36%, 86%); + --color-bg-2: hsl(224, 44%, 95%); + --color-theme-1: #ff3e00; + --color-theme-2: #4075a6; + --color-text: rgba(0, 0, 0, 0.7); + --column-width: 42rem; + --column-margin-top: 4rem; + font-family: var(--font-body); + color: var(--color-text); +} + +body { + min-height: 100vh; + margin: 0; + background-attachment: fixed; + background-color: var(--color-bg-1); + background-size: 100vw 100vh; + background-image: radial-gradient( + 50% 50% at 50% 50%, + rgba(255, 255, 255, 0.75) 0%, + rgba(255, 255, 255, 0) 100% + ), + linear-gradient(180deg, var(--color-bg-0) 0%, var(--color-bg-1) 15%, var(--color-bg-2) 50%); +} + +h1, +h2, +p { + font-weight: 400; +} + +p { + line-height: 1.5; +} + +a { + color: var(--color-theme-1); + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +h1 { + font-size: 2rem; + text-align: center; +} + +h2 { + font-size: 1rem; +} + +pre { + font-size: 16px; + font-family: var(--font-mono); + background-color: rgba(255, 255, 255, 0.45); + border-radius: 3px; + box-shadow: 2px 2px 6px rgb(255 255 255 / 25%); + padding: 0.5em; + overflow-x: auto; + color: var(--color-text); +} + +.text-column { + display: flex; + max-width: 48rem; + flex: 0.6; + flex-direction: column; + justify-content: center; + margin: 0 auto; +} + +input, +button { + font-size: inherit; + font-family: inherit; +} + +button:focus:not(:focus-visible) { + outline: none; +} + +@media (min-width: 720px) { + h1 { + font-size: 2.4rem; + } +} + +.visually-hidden { + border: 0; + clip: rect(0 0 0 0); + height: auto; + margin: 0; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + white-space: nowrap; +} diff --git a/sveltekit/src/routes/sverdle/+page.server.js b/sveltekit/src/routes/sverdle/+page.server.js new file mode 100644 index 0000000..73e4ab6 --- /dev/null +++ b/sveltekit/src/routes/sverdle/+page.server.js @@ -0,0 +1,68 @@ +import { fail } from '@sveltejs/kit'; +import { Game } from './game'; + +export const load = ({ cookies }) => { + const game = new Game(cookies.get('sverdle')); + + return { + /** + * The player's guessed words so far + */ + guesses: game.guesses, + + /** + * An array of strings like '__x_c' corresponding to the guesses, where 'x' means + * an exact match, and 'c' means a close match (right letter, wrong place) + */ + answers: game.answers, + + /** + * The correct answer, revealed if the game is over + */ + answer: game.answers.length >= 6 ? game.answer : null + }; +}; + +export const actions = { + /** + * Modify game state in reaction to a keypress. If client-side JavaScript + * is available, this will happen in the browser instead of here + */ + update: async ({ request, cookies }) => { + const game = new Game(cookies.get('sverdle')); + + const data = await request.formData(); + const key = data.get('key'); + + const i = game.answers.length; + + if (key === 'backspace') { + game.guesses[i] = game.guesses[i].slice(0, -1); + } else { + game.guesses[i] += key; + } + + cookies.set('sverdle', game.toString()); + }, + + /** + * Modify game state in reaction to a guessed word. This logic always runs on + * the server, so that people can't cheat by peeking at the JavaScript + */ + enter: async ({ request, cookies }) => { + const game = new Game(cookies.get('sverdle')); + + const data = await request.formData(); + const guess = (data.getAll('guess')); + + if (!game.enter(guess)) { + return fail(400, { badGuess: true }); + } + + cookies.set('sverdle', game.toString()); + }, + + restart: async ({ cookies }) => { + cookies.delete('sverdle'); + } +}; diff --git a/sveltekit/src/routes/sverdle/+page.svelte b/sveltekit/src/routes/sverdle/+page.svelte new file mode 100644 index 0000000..5cf0a3f --- /dev/null +++ b/sveltekit/src/routes/sverdle/+page.svelte @@ -0,0 +1,404 @@ + + + + + + Sverdle + + + +

Sverdle

+ +
{ + // prevent default callback from resetting the form + return ({ update }) => { + update({ reset: false }); + }; + }} +> + How to play + +
+ {#each Array(6) as _, row} + {@const current = row === i} +

Row {row + 1}

+
+ {#each Array(5) as _, column} + {@const answer = data.answers[row]?.[column]} + {@const value = data.guesses[row]?.[column] ?? ''} + {@const selected = current && column === data.guesses[row].length} + {@const exact = answer === 'x'} + {@const close = answer === 'c'} + {@const missing = answer === '_'} +
+ {value} + + {#if exact} + (correct) + {:else if close} + (present) + {:else if missing} + (absent) + {:else} + empty + {/if} + + +
+ {/each} +
+ {/each} +
+ +
+ {#if won || data.answers.length >= 6} + {#if !won && data.answer} +

the answer was "{data.answer}"

+ {/if} + + {:else} +
+ + + + + {#each ['qwertyuiop', 'asdfghjkl', 'zxcvbnm'] as row} +
+ {#each row as letter} + + {/each} +
+ {/each} +
+ {/if} +
+
+ +{#if won} +
+{/if} + + diff --git a/sveltekit/src/routes/sverdle/game.js b/sveltekit/src/routes/sverdle/game.js new file mode 100644 index 0000000..5313f60 --- /dev/null +++ b/sveltekit/src/routes/sverdle/game.js @@ -0,0 +1,70 @@ +import { words, allowed } from './words.server'; + +export class Game { + /** + * Create a game object from the player's cookie, or initialise a new game + */ + constructor(serialized = undefined) { + if (serialized) { + const [index, guesses, answers] = serialized.split('-'); + + this.index = +index; + this.guesses = guesses ? guesses.split(' ') : []; + this.answers = answers ? answers.split(' ') : []; + } else { + this.index = Math.floor(Math.random() * words.length); + this.guesses = ['', '', '', '', '', '']; + this.answers = ([]); + } + + this.answer = words[this.index]; + } + + /** + * Update game state based on a guess of a five-letter word. Returns + * true if the guess was valid, false otherwise + */ + enter(letters) { + const word = letters.join(''); + const valid = allowed.has(word); + + if (!valid) return false; + + this.guesses[this.answers.length] = word; + + const available = Array.from(this.answer); + const answer = Array(5).fill('_'); + + // first, find exact matches + for (let i = 0; i < 5; i += 1) { + if (letters[i] === available[i]) { + answer[i] = 'x'; + available[i] = ' '; + } + } + + // then find close matches (this has to happen + // in a second step, otherwise an early close + // match can prevent a later exact match) + for (let i = 0; i < 5; i += 1) { + if (answer[i] === '_') { + const index = available.indexOf(letters[i]); + if (index !== -1) { + answer[i] = 'c'; + available[index] = ' '; + } + } + } + + this.answers.push(answer.join('')); + + return true; + } + + /** + * Serialize game state so it can be set as a cookie + */ + toString() { + return `${this.index}-${this.guesses.join(' ')}-${this.answers.join(' ')}`; + } +} diff --git a/sveltekit/src/routes/sverdle/how-to-play/+page.js b/sveltekit/src/routes/sverdle/how-to-play/+page.js new file mode 100644 index 0000000..e739ef4 --- /dev/null +++ b/sveltekit/src/routes/sverdle/how-to-play/+page.js @@ -0,0 +1,9 @@ +import { dev } from '$app/environment'; + +// we don't need any JS on this page, though we'll load +// it in dev so that we get hot module replacement +export const csr = dev; + +// since there's no dynamic data here, we can prerender +// it so that it gets served as a static asset in production +export const prerender = true; diff --git a/sveltekit/src/routes/sverdle/how-to-play/+page.svelte b/sveltekit/src/routes/sverdle/how-to-play/+page.svelte new file mode 100644 index 0000000..e8e2cec --- /dev/null +++ b/sveltekit/src/routes/sverdle/how-to-play/+page.svelte @@ -0,0 +1,95 @@ + + How to play Sverdle + + + +
+

How to play Sverdle

+ +

+ Sverdle is a clone of Wordle, the + word guessing game. To play, enter a five-letter English word. For example: +

+ +
+ r + i + t + z + y +
+ +

+ The y is in the right place. r and + t + are the right letters, but in the wrong place. The other letters are wrong, and can be discarded. + Let's make another guess: +

+ +
+ p + a + r + t + y +
+ +

This time we guessed right! You have six guesses to get the word.

+ +

+ Unlike the original Wordle, Sverdle runs on the server instead of in the browser, making it + impossible to cheat. It uses <form> and cookies to submit data, meaning you can + even play with JavaScript disabled! +

+
+ + diff --git a/sveltekit/src/routes/sverdle/reduced-motion.js b/sveltekit/src/routes/sverdle/reduced-motion.js new file mode 100644 index 0000000..175edb2 --- /dev/null +++ b/sveltekit/src/routes/sverdle/reduced-motion.js @@ -0,0 +1,23 @@ +import { readable } from 'svelte/store'; +import { browser } from '$app/environment'; + +const reduced_motion_query = '(prefers-reduced-motion: reduce)'; + +const get_initial_motion_preference = () => { + if (!browser) return false; + return window.matchMedia(reduced_motion_query).matches; +}; + +export const reduced_motion = readable(get_initial_motion_preference(), (set) => { + if (browser) { + const set_reduced_motion = (event) => { + set(event.matches); + }; + const media_query_list = window.matchMedia(reduced_motion_query); + media_query_list.addEventListener('change', set_reduced_motion); + + return () => { + media_query_list.removeEventListener('change', set_reduced_motion); + }; + } +}); diff --git a/sveltekit/src/routes/sverdle/words.server.js b/sveltekit/src/routes/sverdle/words.server.js new file mode 100644 index 0000000..56082a3 --- /dev/null +++ b/sveltekit/src/routes/sverdle/words.server.js @@ -0,0 +1,12980 @@ +/** The list of possible words */ +export const words = [ + 'aback', + 'abase', + 'abate', + 'abbey', + 'abbot', + 'abhor', + 'abide', + 'abled', + 'abode', + 'abort', + 'about', + 'above', + 'abuse', + 'abyss', + 'acorn', + 'acrid', + 'actor', + 'acute', + 'adage', + 'adapt', + 'adept', + 'admin', + 'admit', + 'adobe', + 'adopt', + 'adore', + 'adorn', + 'adult', + 'affix', + 'afire', + 'afoot', + 'afoul', + 'after', + 'again', + 'agape', + 'agate', + 'agent', + 'agile', + 'aging', + 'aglow', + 'agony', + 'agora', + 'agree', + 'ahead', + 'aider', + 'aisle', + 'alarm', + 'album', + 'alert', + 'algae', + 'alibi', + 'alien', + 'align', + 'alike', + 'alive', + 'allay', + 'alley', + 'allot', + 'allow', + 'alloy', + 'aloft', + 'alone', + 'along', + 'aloof', + 'aloud', + 'alpha', + 'altar', + 'alter', + 'amass', + 'amaze', + 'amber', + 'amble', + 'amend', + 'amiss', + 'amity', + 'among', + 'ample', + 'amply', + 'amuse', + 'angel', + 'anger', + 'angle', + 'angry', + 'angst', + 'anime', + 'ankle', + 'annex', + 'annoy', + 'annul', + 'anode', + 'antic', + 'anvil', + 'aorta', + 'apart', + 'aphid', + 'aping', + 'apnea', + 'apple', + 'apply', + 'apron', + 'aptly', + 'arbor', + 'ardor', + 'arena', + 'argue', + 'arise', + 'armor', + 'aroma', + 'arose', + 'array', + 'arrow', + 'arson', + 'artsy', + 'ascot', + 'ashen', + 'aside', + 'askew', + 'assay', + 'asset', + 'atoll', + 'atone', + 'attic', + 'audio', + 'audit', + 'augur', + 'aunty', + 'avail', + 'avert', + 'avian', + 'avoid', + 'await', + 'awake', + 'award', + 'aware', + 'awash', + 'awful', + 'awoke', + 'axial', + 'axiom', + 'axion', + 'azure', + 'bacon', + 'badge', + 'badly', + 'bagel', + 'baggy', + 'baker', + 'baler', + 'balmy', + 'banal', + 'banjo', + 'barge', + 'baron', + 'basal', + 'basic', + 'basil', + 'basin', + 'basis', + 'baste', + 'batch', + 'bathe', + 'baton', + 'batty', + 'bawdy', + 'bayou', + 'beach', + 'beady', + 'beard', + 'beast', + 'beech', + 'beefy', + 'befit', + 'began', + 'begat', + 'beget', + 'begin', + 'begun', + 'being', + 'belch', + 'belie', + 'belle', + 'belly', + 'below', + 'bench', + 'beret', + 'berry', + 'berth', + 'beset', + 'betel', + 'bevel', + 'bezel', + 'bible', + 'bicep', + 'biddy', + 'bigot', + 'bilge', + 'billy', + 'binge', + 'bingo', + 'biome', + 'birch', + 'birth', + 'bison', + 'bitty', + 'black', + 'blade', + 'blame', + 'bland', + 'blank', + 'blare', + 'blast', + 'blaze', + 'bleak', + 'bleat', + 'bleed', + 'bleep', + 'blend', + 'bless', + 'blimp', + 'blind', + 'blink', + 'bliss', + 'blitz', + 'bloat', + 'block', + 'bloke', + 'blond', + 'blood', + 'bloom', + 'blown', + 'bluer', + 'bluff', + 'blunt', + 'blurb', + 'blurt', + 'blush', + 'board', + 'boast', + 'bobby', + 'boney', + 'bongo', + 'bonus', + 'booby', + 'boost', + 'booth', + 'booty', + 'booze', + 'boozy', + 'borax', + 'borne', + 'bosom', + 'bossy', + 'botch', + 'bough', + 'boule', + 'bound', + 'bowel', + 'boxer', + 'brace', + 'braid', + 'brain', + 'brake', + 'brand', + 'brash', + 'brass', + 'brave', + 'bravo', + 'brawl', + 'brawn', + 'bread', + 'break', + 'breed', + 'briar', + 'bribe', + 'brick', + 'bride', + 'brief', + 'brine', + 'bring', + 'brink', + 'briny', + 'brisk', + 'broad', + 'broil', + 'broke', + 'brood', + 'brook', + 'broom', + 'broth', + 'brown', + 'brunt', + 'brush', + 'brute', + 'buddy', + 'budge', + 'buggy', + 'bugle', + 'build', + 'built', + 'bulge', + 'bulky', + 'bully', + 'bunch', + 'bunny', + 'burly', + 'burnt', + 'burst', + 'bused', + 'bushy', + 'butch', + 'butte', + 'buxom', + 'buyer', + 'bylaw', + 'cabal', + 'cabby', + 'cabin', + 'cable', + 'cacao', + 'cache', + 'cacti', + 'caddy', + 'cadet', + 'cagey', + 'cairn', + 'camel', + 'cameo', + 'canal', + 'candy', + 'canny', + 'canoe', + 'canon', + 'caper', + 'caput', + 'carat', + 'cargo', + 'carol', + 'carry', + 'carve', + 'caste', + 'catch', + 'cater', + 'catty', + 'caulk', + 'cause', + 'cavil', + 'cease', + 'cedar', + 'cello', + 'chafe', + 'chaff', + 'chain', + 'chair', + 'chalk', + 'champ', + 'chant', + 'chaos', + 'chard', + 'charm', + 'chart', + 'chase', + 'chasm', + 'cheap', + 'cheat', + 'check', + 'cheek', + 'cheer', + 'chess', + 'chest', + 'chick', + 'chide', + 'chief', + 'child', + 'chili', + 'chill', + 'chime', + 'china', + 'chirp', + 'chock', + 'choir', + 'choke', + 'chord', + 'chore', + 'chose', + 'chuck', + 'chump', + 'chunk', + 'churn', + 'chute', + 'cider', + 'cigar', + 'cinch', + 'circa', + 'civic', + 'civil', + 'clack', + 'claim', + 'clamp', + 'clang', + 'clank', + 'clash', + 'clasp', + 'class', + 'clean', + 'clear', + 'cleat', + 'cleft', + 'clerk', + 'click', + 'cliff', + 'climb', + 'cling', + 'clink', + 'cloak', + 'clock', + 'clone', + 'close', + 'cloth', + 'cloud', + 'clout', + 'clove', + 'clown', + 'cluck', + 'clued', + 'clump', + 'clung', + 'coach', + 'coast', + 'cobra', + 'cocoa', + 'colon', + 'color', + 'comet', + 'comfy', + 'comic', + 'comma', + 'conch', + 'condo', + 'conic', + 'copse', + 'coral', + 'corer', + 'corny', + 'couch', + 'cough', + 'could', + 'count', + 'coupe', + 'court', + 'coven', + 'cover', + 'covet', + 'covey', + 'cower', + 'coyly', + 'crack', + 'craft', + 'cramp', + 'crane', + 'crank', + 'crash', + 'crass', + 'crate', + 'crave', + 'crawl', + 'craze', + 'crazy', + 'creak', + 'cream', + 'credo', + 'creed', + 'creek', + 'creep', + 'creme', + 'crepe', + 'crept', + 'cress', + 'crest', + 'crick', + 'cried', + 'crier', + 'crime', + 'crimp', + 'crisp', + 'croak', + 'crock', + 'crone', + 'crony', + 'crook', + 'cross', + 'croup', + 'crowd', + 'crown', + 'crude', + 'cruel', + 'crumb', + 'crump', + 'crush', + 'crust', + 'crypt', + 'cubic', + 'cumin', + 'curio', + 'curly', + 'curry', + 'curse', + 'curve', + 'curvy', + 'cutie', + 'cyber', + 'cycle', + 'cynic', + 'daddy', + 'daily', + 'dairy', + 'daisy', + 'dally', + 'dance', + 'dandy', + 'datum', + 'daunt', + 'dealt', + 'death', + 'debar', + 'debit', + 'debug', + 'debut', + 'decal', + 'decay', + 'decor', + 'decoy', + 'decry', + 'defer', + 'deign', + 'deity', + 'delay', + 'delta', + 'delve', + 'demon', + 'demur', + 'denim', + 'dense', + 'depot', + 'depth', + 'derby', + 'deter', + 'detox', + 'deuce', + 'devil', + 'diary', + 'dicey', + 'digit', + 'dilly', + 'dimly', + 'diner', + 'dingo', + 'dingy', + 'diode', + 'dirge', + 'dirty', + 'disco', + 'ditch', + 'ditto', + 'ditty', + 'diver', + 'dizzy', + 'dodge', + 'dodgy', + 'dogma', + 'doing', + 'dolly', + 'donor', + 'donut', + 'dopey', + 'doubt', + 'dough', + 'dowdy', + 'dowel', + 'downy', + 'dowry', + 'dozen', + 'draft', + 'drain', + 'drake', + 'drama', + 'drank', + 'drape', + 'drawl', + 'drawn', + 'dread', + 'dream', + 'dress', + 'dried', + 'drier', + 'drift', + 'drill', + 'drink', + 'drive', + 'droit', + 'droll', + 'drone', + 'drool', + 'droop', + 'dross', + 'drove', + 'drown', + 'druid', + 'drunk', + 'dryer', + 'dryly', + 'duchy', + 'dully', + 'dummy', + 'dumpy', + 'dunce', + 'dusky', + 'dusty', + 'dutch', + 'duvet', + 'dwarf', + 'dwell', + 'dwelt', + 'dying', + 'eager', + 'eagle', + 'early', + 'earth', + 'easel', + 'eaten', + 'eater', + 'ebony', + 'eclat', + 'edict', + 'edify', + 'eerie', + 'egret', + 'eight', + 'eject', + 'eking', + 'elate', + 'elbow', + 'elder', + 'elect', + 'elegy', + 'elfin', + 'elide', + 'elite', + 'elope', + 'elude', + 'email', + 'embed', + 'ember', + 'emcee', + 'empty', + 'enact', + 'endow', + 'enema', + 'enemy', + 'enjoy', + 'ennui', + 'ensue', + 'enter', + 'entry', + 'envoy', + 'epoch', + 'epoxy', + 'equal', + 'equip', + 'erase', + 'erect', + 'erode', + 'error', + 'erupt', + 'essay', + 'ester', + 'ether', + 'ethic', + 'ethos', + 'etude', + 'evade', + 'event', + 'every', + 'evict', + 'evoke', + 'exact', + 'exalt', + 'excel', + 'exert', + 'exile', + 'exist', + 'expel', + 'extol', + 'extra', + 'exult', + 'eying', + 'fable', + 'facet', + 'faint', + 'fairy', + 'faith', + 'false', + 'fancy', + 'fanny', + 'farce', + 'fatal', + 'fatty', + 'fault', + 'fauna', + 'favor', + 'feast', + 'fecal', + 'feign', + 'fella', + 'felon', + 'femme', + 'femur', + 'fence', + 'feral', + 'ferry', + 'fetal', + 'fetch', + 'fetid', + 'fetus', + 'fever', + 'fewer', + 'fiber', + 'fibre', + 'ficus', + 'field', + 'fiend', + 'fiery', + 'fifth', + 'fifty', + 'fight', + 'filer', + 'filet', + 'filly', + 'filmy', + 'filth', + 'final', + 'finch', + 'finer', + 'first', + 'fishy', + 'fixer', + 'fizzy', + 'fjord', + 'flack', + 'flail', + 'flair', + 'flake', + 'flaky', + 'flame', + 'flank', + 'flare', + 'flash', + 'flask', + 'fleck', + 'fleet', + 'flesh', + 'flick', + 'flier', + 'fling', + 'flint', + 'flirt', + 'float', + 'flock', + 'flood', + 'floor', + 'flora', + 'floss', + 'flour', + 'flout', + 'flown', + 'fluff', + 'fluid', + 'fluke', + 'flume', + 'flung', + 'flunk', + 'flush', + 'flute', + 'flyer', + 'foamy', + 'focal', + 'focus', + 'foggy', + 'foist', + 'folio', + 'folly', + 'foray', + 'force', + 'forge', + 'forgo', + 'forte', + 'forth', + 'forty', + 'forum', + 'found', + 'foyer', + 'frail', + 'frame', + 'frank', + 'fraud', + 'freak', + 'freed', + 'freer', + 'fresh', + 'friar', + 'fried', + 'frill', + 'frisk', + 'fritz', + 'frock', + 'frond', + 'front', + 'frost', + 'froth', + 'frown', + 'froze', + 'fruit', + 'fudge', + 'fugue', + 'fully', + 'fungi', + 'funky', + 'funny', + 'furor', + 'furry', + 'fussy', + 'fuzzy', + 'gaffe', + 'gaily', + 'gamer', + 'gamma', + 'gamut', + 'gassy', + 'gaudy', + 'gauge', + 'gaunt', + 'gauze', + 'gavel', + 'gawky', + 'gayer', + 'gayly', + 'gazer', + 'gecko', + 'geeky', + 'geese', + 'genie', + 'genre', + 'ghost', + 'ghoul', + 'giant', + 'giddy', + 'gipsy', + 'girly', + 'girth', + 'given', + 'giver', + 'glade', + 'gland', + 'glare', + 'glass', + 'glaze', + 'gleam', + 'glean', + 'glide', + 'glint', + 'gloat', + 'globe', + 'gloom', + 'glory', + 'gloss', + 'glove', + 'glyph', + 'gnash', + 'gnome', + 'godly', + 'going', + 'golem', + 'golly', + 'gonad', + 'goner', + 'goody', + 'gooey', + 'goofy', + 'goose', + 'gorge', + 'gouge', + 'gourd', + 'grace', + 'grade', + 'graft', + 'grail', + 'grain', + 'grand', + 'grant', + 'grape', + 'graph', + 'grasp', + 'grass', + 'grate', + 'grave', + 'gravy', + 'graze', + 'great', + 'greed', + 'green', + 'greet', + 'grief', + 'grill', + 'grime', + 'grimy', + 'grind', + 'gripe', + 'groan', + 'groin', + 'groom', + 'grope', + 'gross', + 'group', + 'grout', + 'grove', + 'growl', + 'grown', + 'gruel', + 'gruff', + 'grunt', + 'guard', + 'guava', + 'guess', + 'guest', + 'guide', + 'guild', + 'guile', + 'guilt', + 'guise', + 'gulch', + 'gully', + 'gumbo', + 'gummy', + 'guppy', + 'gusto', + 'gusty', + 'gypsy', + 'habit', + 'hairy', + 'halve', + 'handy', + 'happy', + 'hardy', + 'harem', + 'harpy', + 'harry', + 'harsh', + 'haste', + 'hasty', + 'hatch', + 'hater', + 'haunt', + 'haute', + 'haven', + 'havoc', + 'hazel', + 'heady', + 'heard', + 'heart', + 'heath', + 'heave', + 'heavy', + 'hedge', + 'hefty', + 'heist', + 'helix', + 'hello', + 'hence', + 'heron', + 'hilly', + 'hinge', + 'hippo', + 'hippy', + 'hitch', + 'hoard', + 'hobby', + 'hoist', + 'holly', + 'homer', + 'honey', + 'honor', + 'horde', + 'horny', + 'horse', + 'hotel', + 'hotly', + 'hound', + 'house', + 'hovel', + 'hover', + 'howdy', + 'human', + 'humid', + 'humor', + 'humph', + 'humus', + 'hunch', + 'hunky', + 'hurry', + 'husky', + 'hussy', + 'hutch', + 'hydro', + 'hyena', + 'hymen', + 'hyper', + 'icily', + 'icing', + 'ideal', + 'idiom', + 'idiot', + 'idler', + 'idyll', + 'igloo', + 'iliac', + 'image', + 'imbue', + 'impel', + 'imply', + 'inane', + 'inbox', + 'incur', + 'index', + 'inept', + 'inert', + 'infer', + 'ingot', + 'inlay', + 'inlet', + 'inner', + 'input', + 'inter', + 'intro', + 'ionic', + 'irate', + 'irony', + 'islet', + 'issue', + 'itchy', + 'ivory', + 'jaunt', + 'jazzy', + 'jelly', + 'jerky', + 'jetty', + 'jewel', + 'jiffy', + 'joint', + 'joist', + 'joker', + 'jolly', + 'joust', + 'judge', + 'juice', + 'juicy', + 'jumbo', + 'jumpy', + 'junta', + 'junto', + 'juror', + 'kappa', + 'karma', + 'kayak', + 'kebab', + 'khaki', + 'kinky', + 'kiosk', + 'kitty', + 'knack', + 'knave', + 'knead', + 'kneed', + 'kneel', + 'knelt', + 'knife', + 'knock', + 'knoll', + 'known', + 'koala', + 'krill', + 'label', + 'labor', + 'laden', + 'ladle', + 'lager', + 'lance', + 'lanky', + 'lapel', + 'lapse', + 'large', + 'larva', + 'lasso', + 'latch', + 'later', + 'lathe', + 'latte', + 'laugh', + 'layer', + 'leach', + 'leafy', + 'leaky', + 'leant', + 'leapt', + 'learn', + 'lease', + 'leash', + 'least', + 'leave', + 'ledge', + 'leech', + 'leery', + 'lefty', + 'legal', + 'leggy', + 'lemon', + 'lemur', + 'leper', + 'level', + 'lever', + 'libel', + 'liege', + 'light', + 'liken', + 'lilac', + 'limbo', + 'limit', + 'linen', + 'liner', + 'lingo', + 'lipid', + 'lithe', + 'liver', + 'livid', + 'llama', + 'loamy', + 'loath', + 'lobby', + 'local', + 'locus', + 'lodge', + 'lofty', + 'logic', + 'login', + 'loopy', + 'loose', + 'lorry', + 'loser', + 'louse', + 'lousy', + 'lover', + 'lower', + 'lowly', + 'loyal', + 'lucid', + 'lucky', + 'lumen', + 'lumpy', + 'lunar', + 'lunch', + 'lunge', + 'lupus', + 'lurch', + 'lurid', + 'lusty', + 'lying', + 'lymph', + 'lynch', + 'lyric', + 'macaw', + 'macho', + 'macro', + 'madam', + 'madly', + 'mafia', + 'magic', + 'magma', + 'maize', + 'major', + 'maker', + 'mambo', + 'mamma', + 'mammy', + 'manga', + 'mange', + 'mango', + 'mangy', + 'mania', + 'manic', + 'manly', + 'manor', + 'maple', + 'march', + 'marry', + 'marsh', + 'mason', + 'masse', + 'match', + 'matey', + 'mauve', + 'maxim', + 'maybe', + 'mayor', + 'mealy', + 'meant', + 'meaty', + 'mecca', + 'medal', + 'media', + 'medic', + 'melee', + 'melon', + 'mercy', + 'merge', + 'merit', + 'merry', + 'metal', + 'meter', + 'metro', + 'micro', + 'midge', + 'midst', + 'might', + 'milky', + 'mimic', + 'mince', + 'miner', + 'minim', + 'minor', + 'minty', + 'minus', + 'mirth', + 'miser', + 'missy', + 'mocha', + 'modal', + 'model', + 'modem', + 'mogul', + 'moist', + 'molar', + 'moldy', + 'money', + 'month', + 'moody', + 'moose', + 'moral', + 'moron', + 'morph', + 'mossy', + 'motel', + 'motif', + 'motor', + 'motto', + 'moult', + 'mound', + 'mount', + 'mourn', + 'mouse', + 'mouth', + 'mover', + 'movie', + 'mower', + 'mucky', + 'mucus', + 'muddy', + 'mulch', + 'mummy', + 'munch', + 'mural', + 'murky', + 'mushy', + 'music', + 'musky', + 'musty', + 'myrrh', + 'nadir', + 'naive', + 'nanny', + 'nasal', + 'nasty', + 'natal', + 'naval', + 'navel', + 'needy', + 'neigh', + 'nerdy', + 'nerve', + 'never', + 'newer', + 'newly', + 'nicer', + 'niche', + 'niece', + 'night', + 'ninja', + 'ninny', + 'ninth', + 'noble', + 'nobly', + 'noise', + 'noisy', + 'nomad', + 'noose', + 'north', + 'nosey', + 'notch', + 'novel', + 'nudge', + 'nurse', + 'nutty', + 'nylon', + 'nymph', + 'oaken', + 'obese', + 'occur', + 'ocean', + 'octal', + 'octet', + 'odder', + 'oddly', + 'offal', + 'offer', + 'often', + 'olden', + 'older', + 'olive', + 'ombre', + 'omega', + 'onion', + 'onset', + 'opera', + 'opine', + 'opium', + 'optic', + 'orbit', + 'order', + 'organ', + 'other', + 'otter', + 'ought', + 'ounce', + 'outdo', + 'outer', + 'outgo', + 'ovary', + 'ovate', + 'overt', + 'ovine', + 'ovoid', + 'owing', + 'owner', + 'oxide', + 'ozone', + 'paddy', + 'pagan', + 'paint', + 'paler', + 'palsy', + 'panel', + 'panic', + 'pansy', + 'papal', + 'paper', + 'parer', + 'parka', + 'parry', + 'parse', + 'party', + 'pasta', + 'paste', + 'pasty', + 'patch', + 'patio', + 'patsy', + 'patty', + 'pause', + 'payee', + 'payer', + 'peace', + 'peach', + 'pearl', + 'pecan', + 'pedal', + 'penal', + 'pence', + 'penne', + 'penny', + 'perch', + 'peril', + 'perky', + 'pesky', + 'pesto', + 'petal', + 'petty', + 'phase', + 'phone', + 'phony', + 'photo', + 'piano', + 'picky', + 'piece', + 'piety', + 'piggy', + 'pilot', + 'pinch', + 'piney', + 'pinky', + 'pinto', + 'piper', + 'pique', + 'pitch', + 'pithy', + 'pivot', + 'pixel', + 'pixie', + 'pizza', + 'place', + 'plaid', + 'plain', + 'plait', + 'plane', + 'plank', + 'plant', + 'plate', + 'plaza', + 'plead', + 'pleat', + 'plied', + 'plier', + 'pluck', + 'plumb', + 'plume', + 'plump', + 'plunk', + 'plush', + 'poesy', + 'point', + 'poise', + 'poker', + 'polar', + 'polka', + 'polyp', + 'pooch', + 'poppy', + 'porch', + 'poser', + 'posit', + 'posse', + 'pouch', + 'pound', + 'pouty', + 'power', + 'prank', + 'prawn', + 'preen', + 'press', + 'price', + 'prick', + 'pride', + 'pried', + 'prime', + 'primo', + 'print', + 'prior', + 'prism', + 'privy', + 'prize', + 'probe', + 'prone', + 'prong', + 'proof', + 'prose', + 'proud', + 'prove', + 'prowl', + 'proxy', + 'prude', + 'prune', + 'psalm', + 'pubic', + 'pudgy', + 'puffy', + 'pulpy', + 'pulse', + 'punch', + 'pupal', + 'pupil', + 'puppy', + 'puree', + 'purer', + 'purge', + 'purse', + 'pushy', + 'putty', + 'pygmy', + 'quack', + 'quail', + 'quake', + 'qualm', + 'quark', + 'quart', + 'quash', + 'quasi', + 'queen', + 'queer', + 'quell', + 'query', + 'quest', + 'queue', + 'quick', + 'quiet', + 'quill', + 'quilt', + 'quirk', + 'quite', + 'quota', + 'quote', + 'quoth', + 'rabbi', + 'rabid', + 'racer', + 'radar', + 'radii', + 'radio', + 'rainy', + 'raise', + 'rajah', + 'rally', + 'ralph', + 'ramen', + 'ranch', + 'randy', + 'range', + 'rapid', + 'rarer', + 'raspy', + 'ratio', + 'ratty', + 'raven', + 'rayon', + 'razor', + 'reach', + 'react', + 'ready', + 'realm', + 'rearm', + 'rebar', + 'rebel', + 'rebus', + 'rebut', + 'recap', + 'recur', + 'recut', + 'reedy', + 'refer', + 'refit', + 'regal', + 'rehab', + 'reign', + 'relax', + 'relay', + 'relic', + 'remit', + 'renal', + 'renew', + 'repay', + 'repel', + 'reply', + 'rerun', + 'reset', + 'resin', + 'retch', + 'retro', + 'retry', + 'reuse', + 'revel', + 'revue', + 'rhino', + 'rhyme', + 'rider', + 'ridge', + 'rifle', + 'right', + 'rigid', + 'rigor', + 'rinse', + 'ripen', + 'riper', + 'risen', + 'riser', + 'risky', + 'rival', + 'river', + 'rivet', + 'roach', + 'roast', + 'robin', + 'robot', + 'rocky', + 'rodeo', + 'roger', + 'rogue', + 'roomy', + 'roost', + 'rotor', + 'rouge', + 'rough', + 'round', + 'rouse', + 'route', + 'rover', + 'rowdy', + 'rower', + 'royal', + 'ruddy', + 'ruder', + 'rugby', + 'ruler', + 'rumba', + 'rumor', + 'rupee', + 'rural', + 'rusty', + 'sadly', + 'safer', + 'saint', + 'salad', + 'sally', + 'salon', + 'salsa', + 'salty', + 'salve', + 'salvo', + 'sandy', + 'saner', + 'sappy', + 'sassy', + 'satin', + 'satyr', + 'sauce', + 'saucy', + 'sauna', + 'saute', + 'savor', + 'savoy', + 'savvy', + 'scald', + 'scale', + 'scalp', + 'scaly', + 'scamp', + 'scant', + 'scare', + 'scarf', + 'scary', + 'scene', + 'scent', + 'scion', + 'scoff', + 'scold', + 'scone', + 'scoop', + 'scope', + 'score', + 'scorn', + 'scour', + 'scout', + 'scowl', + 'scram', + 'scrap', + 'scree', + 'screw', + 'scrub', + 'scrum', + 'scuba', + 'sedan', + 'seedy', + 'segue', + 'seize', + 'semen', + 'sense', + 'sepia', + 'serif', + 'serum', + 'serve', + 'setup', + 'seven', + 'sever', + 'sewer', + 'shack', + 'shade', + 'shady', + 'shaft', + 'shake', + 'shaky', + 'shale', + 'shall', + 'shalt', + 'shame', + 'shank', + 'shape', + 'shard', + 'share', + 'shark', + 'sharp', + 'shave', + 'shawl', + 'shear', + 'sheen', + 'sheep', + 'sheer', + 'sheet', + 'sheik', + 'shelf', + 'shell', + 'shied', + 'shift', + 'shine', + 'shiny', + 'shire', + 'shirk', + 'shirt', + 'shoal', + 'shock', + 'shone', + 'shook', + 'shoot', + 'shore', + 'shorn', + 'short', + 'shout', + 'shove', + 'shown', + 'showy', + 'shrew', + 'shrub', + 'shrug', + 'shuck', + 'shunt', + 'shush', + 'shyly', + 'siege', + 'sieve', + 'sight', + 'sigma', + 'silky', + 'silly', + 'since', + 'sinew', + 'singe', + 'siren', + 'sissy', + 'sixth', + 'sixty', + 'skate', + 'skier', + 'skiff', + 'skill', + 'skimp', + 'skirt', + 'skulk', + 'skull', + 'skunk', + 'slack', + 'slain', + 'slang', + 'slant', + 'slash', + 'slate', + 'slave', + 'sleek', + 'sleep', + 'sleet', + 'slept', + 'slice', + 'slick', + 'slide', + 'slime', + 'slimy', + 'sling', + 'slink', + 'sloop', + 'slope', + 'slosh', + 'sloth', + 'slump', + 'slung', + 'slunk', + 'slurp', + 'slush', + 'slyly', + 'smack', + 'small', + 'smart', + 'smash', + 'smear', + 'smell', + 'smelt', + 'smile', + 'smirk', + 'smite', + 'smith', + 'smock', + 'smoke', + 'smoky', + 'smote', + 'snack', + 'snail', + 'snake', + 'snaky', + 'snare', + 'snarl', + 'sneak', + 'sneer', + 'snide', + 'sniff', + 'snipe', + 'snoop', + 'snore', + 'snort', + 'snout', + 'snowy', + 'snuck', + 'snuff', + 'soapy', + 'sober', + 'soggy', + 'solar', + 'solid', + 'solve', + 'sonar', + 'sonic', + 'sooth', + 'sooty', + 'sorry', + 'sound', + 'south', + 'sower', + 'space', + 'spade', + 'spank', + 'spare', + 'spark', + 'spasm', + 'spawn', + 'speak', + 'spear', + 'speck', + 'speed', + 'spell', + 'spelt', + 'spend', + 'spent', + 'sperm', + 'spice', + 'spicy', + 'spied', + 'spiel', + 'spike', + 'spiky', + 'spill', + 'spilt', + 'spine', + 'spiny', + 'spire', + 'spite', + 'splat', + 'split', + 'spoil', + 'spoke', + 'spoof', + 'spook', + 'spool', + 'spoon', + 'spore', + 'sport', + 'spout', + 'spray', + 'spree', + 'sprig', + 'spunk', + 'spurn', + 'spurt', + 'squad', + 'squat', + 'squib', + 'stack', + 'staff', + 'stage', + 'staid', + 'stain', + 'stair', + 'stake', + 'stale', + 'stalk', + 'stall', + 'stamp', + 'stand', + 'stank', + 'stare', + 'stark', + 'start', + 'stash', + 'state', + 'stave', + 'stead', + 'steak', + 'steal', + 'steam', + 'steed', + 'steel', + 'steep', + 'steer', + 'stein', + 'stern', + 'stick', + 'stiff', + 'still', + 'stilt', + 'sting', + 'stink', + 'stint', + 'stock', + 'stoic', + 'stoke', + 'stole', + 'stomp', + 'stone', + 'stony', + 'stood', + 'stool', + 'stoop', + 'store', + 'stork', + 'storm', + 'story', + 'stout', + 'stove', + 'strap', + 'straw', + 'stray', + 'strip', + 'strut', + 'stuck', + 'study', + 'stuff', + 'stump', + 'stung', + 'stunk', + 'stunt', + 'style', + 'suave', + 'sugar', + 'suing', + 'suite', + 'sulky', + 'sully', + 'sumac', + 'sunny', + 'super', + 'surer', + 'surge', + 'surly', + 'sushi', + 'swami', + 'swamp', + 'swarm', + 'swash', + 'swath', + 'swear', + 'sweat', + 'sweep', + 'sweet', + 'swell', + 'swept', + 'swift', + 'swill', + 'swine', + 'swing', + 'swirl', + 'swish', + 'swoon', + 'swoop', + 'sword', + 'swore', + 'sworn', + 'swung', + 'synod', + 'syrup', + 'tabby', + 'table', + 'taboo', + 'tacit', + 'tacky', + 'taffy', + 'taint', + 'taken', + 'taker', + 'tally', + 'talon', + 'tamer', + 'tango', + 'tangy', + 'taper', + 'tapir', + 'tardy', + 'tarot', + 'taste', + 'tasty', + 'tatty', + 'taunt', + 'tawny', + 'teach', + 'teary', + 'tease', + 'teddy', + 'teeth', + 'tempo', + 'tenet', + 'tenor', + 'tense', + 'tenth', + 'tepee', + 'tepid', + 'terra', + 'terse', + 'testy', + 'thank', + 'theft', + 'their', + 'theme', + 'there', + 'these', + 'theta', + 'thick', + 'thief', + 'thigh', + 'thing', + 'think', + 'third', + 'thong', + 'thorn', + 'those', + 'three', + 'threw', + 'throb', + 'throw', + 'thrum', + 'thumb', + 'thump', + 'thyme', + 'tiara', + 'tibia', + 'tidal', + 'tiger', + 'tight', + 'tilde', + 'timer', + 'timid', + 'tipsy', + 'titan', + 'tithe', + 'title', + 'toast', + 'today', + 'toddy', + 'token', + 'tonal', + 'tonga', + 'tonic', + 'tooth', + 'topaz', + 'topic', + 'torch', + 'torso', + 'torus', + 'total', + 'totem', + 'touch', + 'tough', + 'towel', + 'tower', + 'toxic', + 'toxin', + 'trace', + 'track', + 'tract', + 'trade', + 'trail', + 'train', + 'trait', + 'tramp', + 'trash', + 'trawl', + 'tread', + 'treat', + 'trend', + 'triad', + 'trial', + 'tribe', + 'trice', + 'trick', + 'tried', + 'tripe', + 'trite', + 'troll', + 'troop', + 'trope', + 'trout', + 'trove', + 'truce', + 'truck', + 'truer', + 'truly', + 'trump', + 'trunk', + 'truss', + 'trust', + 'truth', + 'tryst', + 'tubal', + 'tuber', + 'tulip', + 'tulle', + 'tumor', + 'tunic', + 'turbo', + 'tutor', + 'twang', + 'tweak', + 'tweed', + 'tweet', + 'twice', + 'twine', + 'twirl', + 'twist', + 'twixt', + 'tying', + 'udder', + 'ulcer', + 'ultra', + 'umbra', + 'uncle', + 'uncut', + 'under', + 'undid', + 'undue', + 'unfed', + 'unfit', + 'unify', + 'union', + 'unite', + 'unity', + 'unlit', + 'unmet', + 'unset', + 'untie', + 'until', + 'unwed', + 'unzip', + 'upper', + 'upset', + 'urban', + 'urine', + 'usage', + 'usher', + 'using', + 'usual', + 'usurp', + 'utile', + 'utter', + 'vague', + 'valet', + 'valid', + 'valor', + 'value', + 'valve', + 'vapid', + 'vapor', + 'vault', + 'vaunt', + 'vegan', + 'venom', + 'venue', + 'verge', + 'verse', + 'verso', + 'verve', + 'vicar', + 'video', + 'vigil', + 'vigor', + 'villa', + 'vinyl', + 'viola', + 'viper', + 'viral', + 'virus', + 'visit', + 'visor', + 'vista', + 'vital', + 'vivid', + 'vixen', + 'vocal', + 'vodka', + 'vogue', + 'voice', + 'voila', + 'vomit', + 'voter', + 'vouch', + 'vowel', + 'vying', + 'wacky', + 'wafer', + 'wager', + 'wagon', + 'waist', + 'waive', + 'waltz', + 'warty', + 'waste', + 'watch', + 'water', + 'waver', + 'waxen', + 'weary', + 'weave', + 'wedge', + 'weedy', + 'weigh', + 'weird', + 'welch', + 'welsh', + 'wench', + 'whack', + 'whale', + 'wharf', + 'wheat', + 'wheel', + 'whelp', + 'where', + 'which', + 'whiff', + 'while', + 'whine', + 'whiny', + 'whirl', + 'whisk', + 'white', + 'whole', + 'whoop', + 'whose', + 'widen', + 'wider', + 'widow', + 'width', + 'wield', + 'wight', + 'willy', + 'wimpy', + 'wince', + 'winch', + 'windy', + 'wiser', + 'wispy', + 'witch', + 'witty', + 'woken', + 'woman', + 'women', + 'woody', + 'wooer', + 'wooly', + 'woozy', + 'wordy', + 'world', + 'worry', + 'worse', + 'worst', + 'worth', + 'would', + 'wound', + 'woven', + 'wrack', + 'wrath', + 'wreak', + 'wreck', + 'wrest', + 'wring', + 'wrist', + 'write', + 'wrong', + 'wrote', + 'wrung', + 'wryly', + 'yacht', + 'yearn', + 'yeast', + 'yield', + 'young', + 'youth', + 'zebra', + 'zesty', + 'zonal' +]; + +/** The list of valid guesses, of which the list of possible words is a subset */ +export const allowed = new Set([ + ...words, + 'aahed', + 'aalii', + 'aargh', + 'aarti', + 'abaca', + 'abaci', + 'abacs', + 'abaft', + 'abaka', + 'abamp', + 'aband', + 'abash', + 'abask', + 'abaya', + 'abbas', + 'abbed', + 'abbes', + 'abcee', + 'abeam', + 'abear', + 'abele', + 'abers', + 'abets', + 'abies', + 'abler', + 'ables', + 'ablet', + 'ablow', + 'abmho', + 'abohm', + 'aboil', + 'aboma', + 'aboon', + 'abord', + 'abore', + 'abram', + 'abray', + 'abrim', + 'abrin', + 'abris', + 'absey', + 'absit', + 'abuna', + 'abune', + 'abuts', + 'abuzz', + 'abyes', + 'abysm', + 'acais', + 'acari', + 'accas', + 'accoy', + 'acerb', + 'acers', + 'aceta', + 'achar', + 'ached', + 'aches', + 'achoo', + 'acids', + 'acidy', + 'acing', + 'acini', + 'ackee', + 'acker', + 'acmes', + 'acmic', + 'acned', + 'acnes', + 'acock', + 'acold', + 'acred', + 'acres', + 'acros', + 'acted', + 'actin', + 'acton', + 'acyls', + 'adaws', + 'adays', + 'adbot', + 'addax', + 'added', + 'adder', + 'addio', + 'addle', + 'adeem', + 'adhan', + 'adieu', + 'adios', + 'adits', + 'adman', + 'admen', + 'admix', + 'adobo', + 'adown', + 'adoze', + 'adrad', + 'adred', + 'adsum', + 'aduki', + 'adunc', + 'adust', + 'advew', + 'adyta', + 'adzed', + 'adzes', + 'aecia', + 'aedes', + 'aegis', + 'aeons', + 'aerie', + 'aeros', + 'aesir', + 'afald', + 'afara', + 'afars', + 'afear', + 'aflaj', + 'afore', + 'afrit', + 'afros', + 'agama', + 'agami', + 'agars', + 'agast', + 'agave', + 'agaze', + 'agene', + 'agers', + 'agger', + 'aggie', + 'aggri', + 'aggro', + 'aggry', + 'aghas', + 'agila', + 'agios', + 'agism', + 'agist', + 'agita', + 'aglee', + 'aglet', + 'agley', + 'agloo', + 'aglus', + 'agmas', + 'agoge', + 'agone', + 'agons', + 'agood', + 'agria', + 'agrin', + 'agros', + 'agued', + 'agues', + 'aguna', + 'aguti', + 'aheap', + 'ahent', + 'ahigh', + 'ahind', + 'ahing', + 'ahint', + 'ahold', + 'ahull', + 'ahuru', + 'aidas', + 'aided', + 'aides', + 'aidoi', + 'aidos', + 'aiery', + 'aigas', + 'aight', + 'ailed', + 'aimed', + 'aimer', + 'ainee', + 'ainga', + 'aioli', + 'aired', + 'airer', + 'airns', + 'airth', + 'airts', + 'aitch', + 'aitus', + 'aiver', + 'aiyee', + 'aizle', + 'ajies', + 'ajiva', + 'ajuga', + 'ajwan', + 'akees', + 'akela', + 'akene', + 'aking', + 'akita', + 'akkas', + 'alaap', + 'alack', + 'alamo', + 'aland', + 'alane', + 'alang', + 'alans', + 'alant', + 'alapa', + 'alaps', + 'alary', + 'alate', + 'alays', + 'albas', + 'albee', + 'alcid', + 'alcos', + 'aldea', + 'alder', + 'aldol', + 'aleck', + 'alecs', + 'alefs', + 'aleft', + 'aleph', + 'alews', + 'aleye', + 'alfas', + 'algal', + 'algas', + 'algid', + 'algin', + 'algor', + 'algum', + 'alias', + 'alifs', + 'aline', + 'alist', + 'aliya', + 'alkie', + 'alkos', + 'alkyd', + 'alkyl', + 'allee', + 'allel', + 'allis', + 'allod', + 'allyl', + 'almah', + 'almas', + 'almeh', + 'almes', + 'almud', + 'almug', + 'alods', + 'aloed', + 'aloes', + 'aloha', + 'aloin', + 'aloos', + 'alowe', + 'altho', + 'altos', + 'alula', + 'alums', + 'alure', + 'alvar', + 'alway', + 'amahs', + 'amain', + 'amate', + 'amaut', + 'amban', + 'ambit', + 'ambos', + 'ambry', + 'ameba', + 'ameer', + 'amene', + 'amens', + 'ament', + 'amias', + 'amice', + 'amici', + 'amide', + 'amido', + 'amids', + 'amies', + 'amiga', + 'amigo', + 'amine', + 'amino', + 'amins', + 'amirs', + 'amlas', + 'amman', + 'ammon', + 'ammos', + 'amnia', + 'amnic', + 'amnio', + 'amoks', + 'amole', + 'amort', + 'amour', + 'amove', + 'amowt', + 'amped', + 'ampul', + 'amrit', + 'amuck', + 'amyls', + 'anana', + 'anata', + 'ancho', + 'ancle', + 'ancon', + 'andro', + 'anear', + 'anele', + 'anent', + 'angas', + 'anglo', + 'anigh', + 'anile', + 'anils', + 'anima', + 'animi', + 'anion', + 'anise', + 'anker', + 'ankhs', + 'ankus', + 'anlas', + 'annal', + 'annas', + 'annat', + 'anoas', + 'anole', + 'anomy', + 'ansae', + 'antae', + 'antar', + 'antas', + 'anted', + 'antes', + 'antis', + 'antra', + 'antre', + 'antsy', + 'anura', + 'anyon', + 'apace', + 'apage', + 'apaid', + 'apayd', + 'apays', + 'apeak', + 'apeek', + 'apers', + 'apert', + 'apery', + 'apgar', + 'aphis', + 'apian', + 'apiol', + 'apish', + 'apism', + 'apode', + 'apods', + 'apoop', + 'aport', + 'appal', + 'appay', + 'appel', + 'appro', + 'appui', + 'appuy', + 'apres', + 'apses', + 'apsis', + 'apsos', + 'apted', + 'apter', + 'aquae', + 'aquas', + 'araba', + 'araks', + 'arame', + 'arars', + 'arbas', + 'arced', + 'archi', + 'arcos', + 'arcus', + 'ardeb', + 'ardri', + 'aread', + 'areae', + 'areal', + 'arear', + 'areas', + 'areca', + 'aredd', + 'arede', + 'arefy', + 'areic', + 'arene', + 'arepa', + 'arere', + 'arete', + 'arets', + 'arett', + 'argal', + 'argan', + 'argil', + 'argle', + 'argol', + 'argon', + 'argot', + 'argus', + 'arhat', + 'arias', + 'ariel', + 'ariki', + 'arils', + 'ariot', + 'arish', + 'arked', + 'arled', + 'arles', + 'armed', + 'armer', + 'armet', + 'armil', + 'arnas', + 'arnut', + 'aroba', + 'aroha', + 'aroid', + 'arpas', + 'arpen', + 'arrah', + 'arras', + 'arret', + 'arris', + 'arroz', + 'arsed', + 'arses', + 'arsey', + 'arsis', + 'artal', + 'artel', + 'artic', + 'artis', + 'aruhe', + 'arums', + 'arval', + 'arvee', + 'arvos', + 'aryls', + 'asana', + 'ascon', + 'ascus', + 'asdic', + 'ashed', + 'ashes', + 'ashet', + 'asked', + 'asker', + 'askoi', + 'askos', + 'aspen', + 'asper', + 'aspic', + 'aspie', + 'aspis', + 'aspro', + 'assai', + 'assam', + 'asses', + 'assez', + 'assot', + 'aster', + 'astir', + 'astun', + 'asura', + 'asway', + 'aswim', + 'asyla', + 'ataps', + 'ataxy', + 'atigi', + 'atilt', + 'atimy', + 'atlas', + 'atman', + 'atmas', + 'atmos', + 'atocs', + 'atoke', + 'atoks', + 'atoms', + 'atomy', + 'atony', + 'atopy', + 'atria', + 'atrip', + 'attap', + 'attar', + 'atuas', + 'audad', + 'auger', + 'aught', + 'aulas', + 'aulic', + 'auloi', + 'aulos', + 'aumil', + 'aunes', + 'aunts', + 'aurae', + 'aural', + 'aurar', + 'auras', + 'aurei', + 'aures', + 'auric', + 'auris', + 'aurum', + 'autos', + 'auxin', + 'avale', + 'avant', + 'avast', + 'avels', + 'avens', + 'avers', + 'avgas', + 'avine', + 'avion', + 'avise', + 'aviso', + 'avize', + 'avows', + 'avyze', + 'awarn', + 'awato', + 'awave', + 'aways', + 'awdls', + 'aweel', + 'aweto', + 'awing', + 'awmry', + 'awned', + 'awner', + 'awols', + 'awork', + 'axels', + 'axile', + 'axils', + 'axing', + 'axite', + 'axled', + 'axles', + 'axman', + 'axmen', + 'axoid', + 'axone', + 'axons', + 'ayahs', + 'ayaya', + 'ayelp', + 'aygre', + 'ayins', + 'ayont', + 'ayres', + 'ayrie', + 'azans', + 'azide', + 'azido', + 'azine', + 'azlon', + 'azoic', + 'azole', + 'azons', + 'azote', + 'azoth', + 'azuki', + 'azurn', + 'azury', + 'azygy', + 'azyme', + 'azyms', + 'baaed', + 'baals', + 'babas', + 'babel', + 'babes', + 'babka', + 'baboo', + 'babul', + 'babus', + 'bacca', + 'bacco', + 'baccy', + 'bacha', + 'bachs', + 'backs', + 'baddy', + 'baels', + 'baffs', + 'baffy', + 'bafts', + 'baghs', + 'bagie', + 'bahts', + 'bahus', + 'bahut', + 'bails', + 'bairn', + 'baisa', + 'baith', + 'baits', + 'baiza', + 'baize', + 'bajan', + 'bajra', + 'bajri', + 'bajus', + 'baked', + 'baken', + 'bakes', + 'bakra', + 'balas', + 'balds', + 'baldy', + 'baled', + 'bales', + 'balks', + 'balky', + 'balls', + 'bally', + 'balms', + 'baloo', + 'balsa', + 'balti', + 'balun', + 'balus', + 'bambi', + 'banak', + 'banco', + 'bancs', + 'banda', + 'bandh', + 'bands', + 'bandy', + 'baned', + 'banes', + 'bangs', + 'bania', + 'banks', + 'banns', + 'bants', + 'bantu', + 'banty', + 'banya', + 'bapus', + 'barbe', + 'barbs', + 'barby', + 'barca', + 'barde', + 'bardo', + 'bards', + 'bardy', + 'bared', + 'barer', + 'bares', + 'barfi', + 'barfs', + 'baric', + 'barks', + 'barky', + 'barms', + 'barmy', + 'barns', + 'barny', + 'barps', + 'barra', + 'barre', + 'barro', + 'barry', + 'barye', + 'basan', + 'based', + 'basen', + 'baser', + 'bases', + 'basho', + 'basij', + 'basks', + 'bason', + 'basse', + 'bassi', + 'basso', + 'bassy', + 'basta', + 'basti', + 'basto', + 'basts', + 'bated', + 'bates', + 'baths', + 'batik', + 'batta', + 'batts', + 'battu', + 'bauds', + 'bauks', + 'baulk', + 'baurs', + 'bavin', + 'bawds', + 'bawks', + 'bawls', + 'bawns', + 'bawrs', + 'bawty', + 'bayed', + 'bayer', + 'bayes', + 'bayle', + 'bayts', + 'bazar', + 'bazoo', + 'beads', + 'beaks', + 'beaky', + 'beals', + 'beams', + 'beamy', + 'beano', + 'beans', + 'beany', + 'beare', + 'bears', + 'beath', + 'beats', + 'beaty', + 'beaus', + 'beaut', + 'beaux', + 'bebop', + 'becap', + 'becke', + 'becks', + 'bedad', + 'bedel', + 'bedes', + 'bedew', + 'bedim', + 'bedye', + 'beedi', + 'beefs', + 'beeps', + 'beers', + 'beery', + 'beets', + 'befog', + 'begad', + 'begar', + 'begem', + 'begot', + 'begum', + 'beige', + 'beigy', + 'beins', + 'bekah', + 'belah', + 'belar', + 'belay', + 'belee', + 'belga', + 'bells', + 'belon', + 'belts', + 'bemad', + 'bemas', + 'bemix', + 'bemud', + 'bends', + 'bendy', + 'benes', + 'benet', + 'benga', + 'benis', + 'benne', + 'benni', + 'benny', + 'bento', + 'bents', + 'benty', + 'bepat', + 'beray', + 'beres', + 'bergs', + 'berko', + 'berks', + 'berme', + 'berms', + 'berob', + 'beryl', + 'besat', + 'besaw', + 'besee', + 'beses', + 'besit', + 'besom', + 'besot', + 'besti', + 'bests', + 'betas', + 'beted', + 'betes', + 'beths', + 'betid', + 'beton', + 'betta', + 'betty', + 'bever', + 'bevor', + 'bevue', + 'bevvy', + 'bewet', + 'bewig', + 'bezes', + 'bezil', + 'bezzy', + 'bhais', + 'bhaji', + 'bhang', + 'bhats', + 'bhels', + 'bhoot', + 'bhuna', + 'bhuts', + 'biach', + 'biali', + 'bialy', + 'bibbs', + 'bibes', + 'biccy', + 'bices', + 'bided', + 'bider', + 'bides', + 'bidet', + 'bidis', + 'bidon', + 'bield', + 'biers', + 'biffo', + 'biffs', + 'biffy', + 'bifid', + 'bigae', + 'biggs', + 'biggy', + 'bigha', + 'bight', + 'bigly', + 'bigos', + 'bijou', + 'biked', + 'biker', + 'bikes', + 'bikie', + 'bilbo', + 'bilby', + 'biled', + 'biles', + 'bilgy', + 'bilks', + 'bills', + 'bimah', + 'bimas', + 'bimbo', + 'binal', + 'bindi', + 'binds', + 'biner', + 'bines', + 'bings', + 'bingy', + 'binit', + 'binks', + 'bints', + 'biogs', + 'biont', + 'biota', + 'biped', + 'bipod', + 'birds', + 'birks', + 'birle', + 'birls', + 'biros', + 'birrs', + 'birse', + 'birsy', + 'bises', + 'bisks', + 'bisom', + 'bitch', + 'biter', + 'bites', + 'bitos', + 'bitou', + 'bitsy', + 'bitte', + 'bitts', + 'bivia', + 'bivvy', + 'bizes', + 'bizzo', + 'bizzy', + 'blabs', + 'blads', + 'blady', + 'blaer', + 'blaes', + 'blaff', + 'blags', + 'blahs', + 'blain', + 'blams', + 'blart', + 'blase', + 'blash', + 'blate', + 'blats', + 'blatt', + 'blaud', + 'blawn', + 'blaws', + 'blays', + 'blear', + 'blebs', + 'blech', + 'blees', + 'blent', + 'blert', + 'blest', + 'blets', + 'bleys', + 'blimy', + 'bling', + 'blini', + 'blins', + 'bliny', + 'blips', + 'blist', + 'blite', + 'blits', + 'blive', + 'blobs', + 'blocs', + 'blogs', + 'blook', + 'bloop', + 'blore', + 'blots', + 'blows', + 'blowy', + 'blubs', + 'blude', + 'bluds', + 'bludy', + 'blued', + 'blues', + 'bluet', + 'bluey', + 'bluid', + 'blume', + 'blunk', + 'blurs', + 'blype', + 'boabs', + 'boaks', + 'boars', + 'boart', + 'boats', + 'bobac', + 'bobak', + 'bobas', + 'bobol', + 'bobos', + 'bocca', + 'bocce', + 'bocci', + 'boche', + 'bocks', + 'boded', + 'bodes', + 'bodge', + 'bodhi', + 'bodle', + 'boeps', + 'boets', + 'boeuf', + 'boffo', + 'boffs', + 'bogan', + 'bogey', + 'boggy', + 'bogie', + 'bogle', + 'bogue', + 'bogus', + 'bohea', + 'bohos', + 'boils', + 'boing', + 'boink', + 'boite', + 'boked', + 'bokeh', + 'bokes', + 'bokos', + 'bolar', + 'bolas', + 'bolds', + 'boles', + 'bolix', + 'bolls', + 'bolos', + 'bolts', + 'bolus', + 'bomas', + 'bombe', + 'bombo', + 'bombs', + 'bonce', + 'bonds', + 'boned', + 'boner', + 'bones', + 'bongs', + 'bonie', + 'bonks', + 'bonne', + 'bonny', + 'bonza', + 'bonze', + 'booai', + 'booay', + 'boobs', + 'boody', + 'booed', + 'boofy', + 'boogy', + 'boohs', + 'books', + 'booky', + 'bools', + 'booms', + 'boomy', + 'boong', + 'boons', + 'boord', + 'boors', + 'boose', + 'boots', + 'boppy', + 'borak', + 'boral', + 'boras', + 'borde', + 'bords', + 'bored', + 'boree', + 'borel', + 'borer', + 'bores', + 'borgo', + 'boric', + 'borks', + 'borms', + 'borna', + 'boron', + 'borts', + 'borty', + 'bortz', + 'bosie', + 'bosks', + 'bosky', + 'boson', + 'bosun', + 'botas', + 'botel', + 'botes', + 'bothy', + 'botte', + 'botts', + 'botty', + 'bouge', + 'bouks', + 'boult', + 'bouns', + 'bourd', + 'bourg', + 'bourn', + 'bouse', + 'bousy', + 'bouts', + 'bovid', + 'bowat', + 'bowed', + 'bower', + 'bowes', + 'bowet', + 'bowie', + 'bowls', + 'bowne', + 'bowrs', + 'bowse', + 'boxed', + 'boxen', + 'boxes', + 'boxla', + 'boxty', + 'boyar', + 'boyau', + 'boyed', + 'boyfs', + 'boygs', + 'boyla', + 'boyos', + 'boysy', + 'bozos', + 'braai', + 'brach', + 'brack', + 'bract', + 'brads', + 'braes', + 'brags', + 'brail', + 'braks', + 'braky', + 'brame', + 'brane', + 'brank', + 'brans', + 'brant', + 'brast', + 'brats', + 'brava', + 'bravi', + 'braws', + 'braxy', + 'brays', + 'braza', + 'braze', + 'bream', + 'brede', + 'breds', + 'breem', + 'breer', + 'brees', + 'breid', + 'breis', + 'breme', + 'brens', + 'brent', + 'brere', + 'brers', + 'breve', + 'brews', + 'breys', + 'brier', + 'bries', + 'brigs', + 'briki', + 'briks', + 'brill', + 'brims', + 'brins', + 'brios', + 'brise', + 'briss', + 'brith', + 'brits', + 'britt', + 'brize', + 'broch', + 'brock', + 'brods', + 'brogh', + 'brogs', + 'brome', + 'bromo', + 'bronc', + 'brond', + 'brool', + 'broos', + 'brose', + 'brosy', + 'brows', + 'brugh', + 'bruin', + 'bruit', + 'brule', + 'brume', + 'brung', + 'brusk', + 'brust', + 'bruts', + 'buats', + 'buaze', + 'bubal', + 'bubas', + 'bubba', + 'bubbe', + 'bubby', + 'bubus', + 'buchu', + 'bucko', + 'bucks', + 'bucku', + 'budas', + 'budis', + 'budos', + 'buffa', + 'buffe', + 'buffi', + 'buffo', + 'buffs', + 'buffy', + 'bufos', + 'bufty', + 'buhls', + 'buhrs', + 'buiks', + 'buist', + 'bukes', + 'bulbs', + 'bulgy', + 'bulks', + 'bulla', + 'bulls', + 'bulse', + 'bumbo', + 'bumfs', + 'bumph', + 'bumps', + 'bumpy', + 'bunas', + 'bunce', + 'bunco', + 'bunde', + 'bundh', + 'bunds', + 'bundt', + 'bundu', + 'bundy', + 'bungs', + 'bungy', + 'bunia', + 'bunje', + 'bunjy', + 'bunko', + 'bunks', + 'bunns', + 'bunts', + 'bunty', + 'bunya', + 'buoys', + 'buppy', + 'buran', + 'buras', + 'burbs', + 'burds', + 'buret', + 'burfi', + 'burgh', + 'burgs', + 'burin', + 'burka', + 'burke', + 'burks', + 'burls', + 'burns', + 'buroo', + 'burps', + 'burqa', + 'burro', + 'burrs', + 'burry', + 'bursa', + 'burse', + 'busby', + 'buses', + 'busks', + 'busky', + 'bussu', + 'busti', + 'busts', + 'busty', + 'buteo', + 'butes', + 'butle', + 'butoh', + 'butts', + 'butty', + 'butut', + 'butyl', + 'buzzy', + 'bwana', + 'bwazi', + 'byded', + 'bydes', + 'byked', + 'bykes', + 'byres', + 'byrls', + 'byssi', + 'bytes', + 'byway', + 'caaed', + 'cabas', + 'caber', + 'cabob', + 'caboc', + 'cabre', + 'cacas', + 'cacks', + 'cacky', + 'cadee', + 'cades', + 'cadge', + 'cadgy', + 'cadie', + 'cadis', + 'cadre', + 'caeca', + 'caese', + 'cafes', + 'caffs', + 'caged', + 'cager', + 'cages', + 'cagot', + 'cahow', + 'caids', + 'cains', + 'caird', + 'cajon', + 'cajun', + 'caked', + 'cakes', + 'cakey', + 'calfs', + 'calid', + 'calif', + 'calix', + 'calks', + 'calla', + 'calls', + 'calms', + 'calmy', + 'calos', + 'calpa', + 'calps', + 'calve', + 'calyx', + 'caman', + 'camas', + 'cames', + 'camis', + 'camos', + 'campi', + 'campo', + 'camps', + 'campy', + 'camus', + 'caned', + 'caneh', + 'caner', + 'canes', + 'cangs', + 'canid', + 'canna', + 'canns', + 'canso', + 'canst', + 'canto', + 'cants', + 'canty', + 'capas', + 'caped', + 'capes', + 'capex', + 'caphs', + 'capiz', + 'caple', + 'capon', + 'capos', + 'capot', + 'capri', + 'capul', + 'carap', + 'carbo', + 'carbs', + 'carby', + 'cardi', + 'cards', + 'cardy', + 'cared', + 'carer', + 'cares', + 'caret', + 'carex', + 'carks', + 'carle', + 'carls', + 'carns', + 'carny', + 'carob', + 'carom', + 'caron', + 'carpi', + 'carps', + 'carrs', + 'carse', + 'carta', + 'carte', + 'carts', + 'carvy', + 'casas', + 'casco', + 'cased', + 'cases', + 'casks', + 'casky', + 'casts', + 'casus', + 'cates', + 'cauda', + 'cauks', + 'cauld', + 'cauls', + 'caums', + 'caups', + 'cauri', + 'causa', + 'cavas', + 'caved', + 'cavel', + 'caver', + 'caves', + 'cavie', + 'cawed', + 'cawks', + 'caxon', + 'ceaze', + 'cebid', + 'cecal', + 'cecum', + 'ceded', + 'ceder', + 'cedes', + 'cedis', + 'ceiba', + 'ceili', + 'ceils', + 'celeb', + 'cella', + 'celli', + 'cells', + 'celom', + 'celts', + 'cense', + 'cento', + 'cents', + 'centu', + 'ceorl', + 'cepes', + 'cerci', + 'cered', + 'ceres', + 'cerge', + 'ceria', + 'ceric', + 'cerne', + 'ceroc', + 'ceros', + 'certs', + 'certy', + 'cesse', + 'cesta', + 'cesti', + 'cetes', + 'cetyl', + 'cezve', + 'chace', + 'chack', + 'chaco', + 'chado', + 'chads', + 'chaft', + 'chais', + 'chals', + 'chams', + 'chana', + 'chang', + 'chank', + 'chape', + 'chaps', + 'chapt', + 'chara', + 'chare', + 'chark', + 'charr', + 'chars', + 'chary', + 'chats', + 'chave', + 'chavs', + 'chawk', + 'chaws', + 'chaya', + 'chays', + 'cheep', + 'chefs', + 'cheka', + 'chela', + 'chelp', + 'chemo', + 'chems', + 'chere', + 'chert', + 'cheth', + 'chevy', + 'chews', + 'chewy', + 'chiao', + 'chias', + 'chibs', + 'chica', + 'chich', + 'chico', + 'chics', + 'chiel', + 'chiks', + 'chile', + 'chimb', + 'chimo', + 'chimp', + 'chine', + 'ching', + 'chink', + 'chino', + 'chins', + 'chips', + 'chirk', + 'chirl', + 'chirm', + 'chiro', + 'chirr', + 'chirt', + 'chiru', + 'chits', + 'chive', + 'chivs', + 'chivy', + 'chizz', + 'choco', + 'chocs', + 'chode', + 'chogs', + 'choil', + 'choko', + 'choky', + 'chola', + 'choli', + 'cholo', + 'chomp', + 'chons', + 'choof', + 'chook', + 'choom', + 'choon', + 'chops', + 'chota', + 'chott', + 'chout', + 'choux', + 'chowk', + 'chows', + 'chubs', + 'chufa', + 'chuff', + 'chugs', + 'chums', + 'churl', + 'churr', + 'chuse', + 'chuts', + 'chyle', + 'chyme', + 'chynd', + 'cibol', + 'cided', + 'cides', + 'ciels', + 'ciggy', + 'cilia', + 'cills', + 'cimar', + 'cimex', + 'cinct', + 'cines', + 'cinqs', + 'cions', + 'cippi', + 'circs', + 'cires', + 'cirls', + 'cirri', + 'cisco', + 'cissy', + 'cists', + 'cital', + 'cited', + 'citer', + 'cites', + 'cives', + 'civet', + 'civie', + 'civvy', + 'clach', + 'clade', + 'clads', + 'claes', + 'clags', + 'clame', + 'clams', + 'clans', + 'claps', + 'clapt', + 'claro', + 'clart', + 'clary', + 'clast', + 'clats', + 'claut', + 'clave', + 'clavi', + 'claws', + 'clays', + 'cleck', + 'cleek', + 'cleep', + 'clefs', + 'clegs', + 'cleik', + 'clems', + 'clepe', + 'clept', + 'cleve', + 'clews', + 'clied', + 'clies', + 'clift', + 'clime', + 'cline', + 'clint', + 'clipe', + 'clips', + 'clipt', + 'clits', + 'cloam', + 'clods', + 'cloff', + 'clogs', + 'cloke', + 'clomb', + 'clomp', + 'clonk', + 'clons', + 'cloop', + 'cloot', + 'clops', + 'clote', + 'clots', + 'clour', + 'clous', + 'clows', + 'cloye', + 'cloys', + 'cloze', + 'clubs', + 'clues', + 'cluey', + 'clunk', + 'clype', + 'cnida', + 'coact', + 'coady', + 'coala', + 'coals', + 'coaly', + 'coapt', + 'coarb', + 'coate', + 'coati', + 'coats', + 'cobbs', + 'cobby', + 'cobia', + 'coble', + 'cobza', + 'cocas', + 'cocci', + 'cocco', + 'cocks', + 'cocky', + 'cocos', + 'codas', + 'codec', + 'coded', + 'coden', + 'coder', + 'codes', + 'codex', + 'codon', + 'coeds', + 'coffs', + 'cogie', + 'cogon', + 'cogue', + 'cohab', + 'cohen', + 'cohoe', + 'cohog', + 'cohos', + 'coifs', + 'coign', + 'coils', + 'coins', + 'coirs', + 'coits', + 'coked', + 'cokes', + 'colas', + 'colby', + 'colds', + 'coled', + 'coles', + 'coley', + 'colic', + 'colin', + 'colls', + 'colly', + 'colog', + 'colts', + 'colza', + 'comae', + 'comal', + 'comas', + 'combe', + 'combi', + 'combo', + 'combs', + 'comby', + 'comer', + 'comes', + 'comix', + 'commo', + 'comms', + 'commy', + 'compo', + 'comps', + 'compt', + 'comte', + 'comus', + 'coned', + 'cones', + 'coney', + 'confs', + 'conga', + 'conge', + 'congo', + 'conia', + 'conin', + 'conks', + 'conky', + 'conne', + 'conns', + 'conte', + 'conto', + 'conus', + 'convo', + 'cooch', + 'cooed', + 'cooee', + 'cooer', + 'cooey', + 'coofs', + 'cooks', + 'cooky', + 'cools', + 'cooly', + 'coomb', + 'cooms', + 'coomy', + 'coons', + 'coops', + 'coopt', + 'coost', + 'coots', + 'cooze', + 'copal', + 'copay', + 'coped', + 'copen', + 'coper', + 'copes', + 'coppy', + 'copra', + 'copsy', + 'coqui', + 'coram', + 'corbe', + 'corby', + 'cords', + 'cored', + 'cores', + 'corey', + 'corgi', + 'coria', + 'corks', + 'corky', + 'corms', + 'corni', + 'corno', + 'corns', + 'cornu', + 'corps', + 'corse', + 'corso', + 'cosec', + 'cosed', + 'coses', + 'coset', + 'cosey', + 'cosie', + 'costa', + 'coste', + 'costs', + 'cotan', + 'coted', + 'cotes', + 'coths', + 'cotta', + 'cotts', + 'coude', + 'coups', + 'courb', + 'courd', + 'coure', + 'cours', + 'couta', + 'couth', + 'coved', + 'coves', + 'covin', + 'cowal', + 'cowan', + 'cowed', + 'cowks', + 'cowls', + 'cowps', + 'cowry', + 'coxae', + 'coxal', + 'coxed', + 'coxes', + 'coxib', + 'coyau', + 'coyed', + 'coyer', + 'coypu', + 'cozed', + 'cozen', + 'cozes', + 'cozey', + 'cozie', + 'craal', + 'crabs', + 'crags', + 'craic', + 'craig', + 'crake', + 'crame', + 'crams', + 'crans', + 'crape', + 'craps', + 'crapy', + 'crare', + 'craws', + 'crays', + 'creds', + 'creel', + 'crees', + 'crems', + 'crena', + 'creps', + 'crepy', + 'crewe', + 'crews', + 'crias', + 'cribs', + 'cries', + 'crims', + 'crine', + 'crios', + 'cripe', + 'crips', + 'crise', + 'crith', + 'crits', + 'croci', + 'crocs', + 'croft', + 'crogs', + 'cromb', + 'crome', + 'cronk', + 'crons', + 'crool', + 'croon', + 'crops', + 'crore', + 'crost', + 'crout', + 'crows', + 'croze', + 'cruck', + 'crudo', + 'cruds', + 'crudy', + 'crues', + 'cruet', + 'cruft', + 'crunk', + 'cruor', + 'crura', + 'cruse', + 'crusy', + 'cruve', + 'crwth', + 'cryer', + 'ctene', + 'cubby', + 'cubeb', + 'cubed', + 'cuber', + 'cubes', + 'cubit', + 'cuddy', + 'cuffo', + 'cuffs', + 'cuifs', + 'cuing', + 'cuish', + 'cuits', + 'cukes', + 'culch', + 'culet', + 'culex', + 'culls', + 'cully', + 'culms', + 'culpa', + 'culti', + 'cults', + 'culty', + 'cumec', + 'cundy', + 'cunei', + 'cunit', + 'cunts', + 'cupel', + 'cupid', + 'cuppa', + 'cuppy', + 'curat', + 'curbs', + 'curch', + 'curds', + 'curdy', + 'cured', + 'curer', + 'cures', + 'curet', + 'curfs', + 'curia', + 'curie', + 'curli', + 'curls', + 'curns', + 'curny', + 'currs', + 'cursi', + 'curst', + 'cusec', + 'cushy', + 'cusks', + 'cusps', + 'cuspy', + 'cusso', + 'cusum', + 'cutch', + 'cuter', + 'cutes', + 'cutey', + 'cutin', + 'cutis', + 'cutto', + 'cutty', + 'cutup', + 'cuvee', + 'cuzes', + 'cwtch', + 'cyano', + 'cyans', + 'cycad', + 'cycas', + 'cyclo', + 'cyder', + 'cylix', + 'cymae', + 'cymar', + 'cymas', + 'cymes', + 'cymol', + 'cysts', + 'cytes', + 'cyton', + 'czars', + 'daals', + 'dabba', + 'daces', + 'dacha', + 'dacks', + 'dadah', + 'dadas', + 'dados', + 'daffs', + 'daffy', + 'dagga', + 'daggy', + 'dagos', + 'dahls', + 'daiko', + 'daine', + 'daint', + 'daker', + 'daled', + 'dales', + 'dalis', + 'dalle', + 'dalts', + 'daman', + 'damar', + 'dames', + 'damme', + 'damns', + 'damps', + 'dampy', + 'dancy', + 'dangs', + 'danio', + 'danks', + 'danny', + 'dants', + 'daraf', + 'darbs', + 'darcy', + 'dared', + 'darer', + 'dares', + 'darga', + 'dargs', + 'daric', + 'daris', + 'darks', + 'darky', + 'darns', + 'darre', + 'darts', + 'darzi', + 'dashi', + 'dashy', + 'datal', + 'dated', + 'dater', + 'dates', + 'datos', + 'datto', + 'daube', + 'daubs', + 'dauby', + 'dauds', + 'dault', + 'daurs', + 'dauts', + 'daven', + 'davit', + 'dawah', + 'dawds', + 'dawed', + 'dawen', + 'dawks', + 'dawns', + 'dawts', + 'dayan', + 'daych', + 'daynt', + 'dazed', + 'dazer', + 'dazes', + 'deads', + 'deair', + 'deals', + 'deans', + 'deare', + 'dearn', + 'dears', + 'deary', + 'deash', + 'deave', + 'deaws', + 'deawy', + 'debag', + 'debby', + 'debel', + 'debes', + 'debts', + 'debud', + 'debur', + 'debus', + 'debye', + 'decad', + 'decaf', + 'decan', + 'decko', + 'decks', + 'decos', + 'dedal', + 'deeds', + 'deedy', + 'deely', + 'deems', + 'deens', + 'deeps', + 'deere', + 'deers', + 'deets', + 'deeve', + 'deevs', + 'defat', + 'deffo', + 'defis', + 'defog', + 'degas', + 'degum', + 'degus', + 'deice', + 'deids', + 'deify', + 'deils', + 'deism', + 'deist', + 'deked', + 'dekes', + 'dekko', + 'deled', + 'deles', + 'delfs', + 'delft', + 'delis', + 'dells', + 'delly', + 'delos', + 'delph', + 'delts', + 'deman', + 'demes', + 'demic', + 'demit', + 'demob', + 'demoi', + 'demos', + 'dempt', + 'denar', + 'denay', + 'dench', + 'denes', + 'denet', + 'denis', + 'dents', + 'deoxy', + 'derat', + 'deray', + 'dered', + 'deres', + 'derig', + 'derma', + 'derms', + 'derns', + 'derny', + 'deros', + 'derro', + 'derry', + 'derth', + 'dervs', + 'desex', + 'deshi', + 'desis', + 'desks', + 'desse', + 'devas', + 'devel', + 'devis', + 'devon', + 'devos', + 'devot', + 'dewan', + 'dewar', + 'dewax', + 'dewed', + 'dexes', + 'dexie', + 'dhaba', + 'dhaks', + 'dhals', + 'dhikr', + 'dhobi', + 'dhole', + 'dholl', + 'dhols', + 'dhoti', + 'dhows', + 'dhuti', + 'diact', + 'dials', + 'diane', + 'diazo', + 'dibbs', + 'diced', + 'dicer', + 'dices', + 'dicht', + 'dicks', + 'dicky', + 'dicot', + 'dicta', + 'dicts', + 'dicty', + 'diddy', + 'didie', + 'didos', + 'didst', + 'diebs', + 'diels', + 'diene', + 'diets', + 'diffs', + 'dight', + 'dikas', + 'diked', + 'diker', + 'dikes', + 'dikey', + 'dildo', + 'dilli', + 'dills', + 'dimbo', + 'dimer', + 'dimes', + 'dimps', + 'dinar', + 'dined', + 'dines', + 'dinge', + 'dings', + 'dinic', + 'dinks', + 'dinky', + 'dinna', + 'dinos', + 'dints', + 'diols', + 'diota', + 'dippy', + 'dipso', + 'diram', + 'direr', + 'dirke', + 'dirks', + 'dirls', + 'dirts', + 'disas', + 'disci', + 'discs', + 'dishy', + 'disks', + 'disme', + 'dital', + 'ditas', + 'dited', + 'dites', + 'ditsy', + 'ditts', + 'ditzy', + 'divan', + 'divas', + 'dived', + 'dives', + 'divis', + 'divna', + 'divos', + 'divot', + 'divvy', + 'diwan', + 'dixie', + 'dixit', + 'diyas', + 'dizen', + 'djinn', + 'djins', + 'doabs', + 'doats', + 'dobby', + 'dobes', + 'dobie', + 'dobla', + 'dobra', + 'dobro', + 'docht', + 'docks', + 'docos', + 'docus', + 'doddy', + 'dodos', + 'doeks', + 'doers', + 'doest', + 'doeth', + 'doffs', + 'dogan', + 'doges', + 'dogey', + 'doggo', + 'doggy', + 'dogie', + 'dohyo', + 'doilt', + 'doily', + 'doits', + 'dojos', + 'dolce', + 'dolci', + 'doled', + 'doles', + 'dolia', + 'dolls', + 'dolma', + 'dolor', + 'dolos', + 'dolts', + 'domal', + 'domed', + 'domes', + 'domic', + 'donah', + 'donas', + 'donee', + 'doner', + 'donga', + 'dongs', + 'donko', + 'donna', + 'donne', + 'donny', + 'donsy', + 'doobs', + 'dooce', + 'doody', + 'dooks', + 'doole', + 'dools', + 'dooly', + 'dooms', + 'doomy', + 'doona', + 'doorn', + 'doors', + 'doozy', + 'dopas', + 'doped', + 'doper', + 'dopes', + 'dorad', + 'dorba', + 'dorbs', + 'doree', + 'dores', + 'doric', + 'doris', + 'dorks', + 'dorky', + 'dorms', + 'dormy', + 'dorps', + 'dorrs', + 'dorsa', + 'dorse', + 'dorts', + 'dorty', + 'dosai', + 'dosas', + 'dosed', + 'doseh', + 'doser', + 'doses', + 'dosha', + 'dotal', + 'doted', + 'doter', + 'dotes', + 'dotty', + 'douar', + 'douce', + 'doucs', + 'douks', + 'doula', + 'douma', + 'doums', + 'doups', + 'doura', + 'douse', + 'douts', + 'doved', + 'doven', + 'dover', + 'doves', + 'dovie', + 'dowar', + 'dowds', + 'dowed', + 'dower', + 'dowie', + 'dowle', + 'dowls', + 'dowly', + 'downa', + 'downs', + 'dowps', + 'dowse', + 'dowts', + 'doxed', + 'doxes', + 'doxie', + 'doyen', + 'doyly', + 'dozed', + 'dozer', + 'dozes', + 'drabs', + 'drack', + 'draco', + 'draff', + 'drags', + 'drail', + 'drams', + 'drant', + 'draps', + 'drats', + 'drave', + 'draws', + 'drays', + 'drear', + 'dreck', + 'dreed', + 'dreer', + 'drees', + 'dregs', + 'dreks', + 'drent', + 'drere', + 'drest', + 'dreys', + 'dribs', + 'drice', + 'dries', + 'drily', + 'drips', + 'dript', + 'droid', + 'droil', + 'droke', + 'drole', + 'drome', + 'drony', + 'droob', + 'droog', + 'drook', + 'drops', + 'dropt', + 'drouk', + 'drows', + 'drubs', + 'drugs', + 'drums', + 'drupe', + 'druse', + 'drusy', + 'druxy', + 'dryad', + 'dryas', + 'dsobo', + 'dsomo', + 'duads', + 'duals', + 'duans', + 'duars', + 'dubbo', + 'ducal', + 'ducat', + 'duces', + 'ducks', + 'ducky', + 'ducts', + 'duddy', + 'duded', + 'dudes', + 'duels', + 'duets', + 'duett', + 'duffs', + 'dufus', + 'duing', + 'duits', + 'dukas', + 'duked', + 'dukes', + 'dukka', + 'dulce', + 'dules', + 'dulia', + 'dulls', + 'dulse', + 'dumas', + 'dumbo', + 'dumbs', + 'dumka', + 'dumky', + 'dumps', + 'dunam', + 'dunch', + 'dunes', + 'dungs', + 'dungy', + 'dunks', + 'dunno', + 'dunny', + 'dunsh', + 'dunts', + 'duomi', + 'duomo', + 'duped', + 'duper', + 'dupes', + 'duple', + 'duply', + 'duppy', + 'dural', + 'duras', + 'dured', + 'dures', + 'durgy', + 'durns', + 'duroc', + 'duros', + 'duroy', + 'durra', + 'durrs', + 'durry', + 'durst', + 'durum', + 'durzi', + 'dusks', + 'dusts', + 'duxes', + 'dwaal', + 'dwale', + 'dwalm', + 'dwams', + 'dwang', + 'dwaum', + 'dweeb', + 'dwile', + 'dwine', + 'dyads', + 'dyers', + 'dyked', + 'dykes', + 'dykey', + 'dykon', + 'dynel', + 'dynes', + 'dzhos', + 'eagre', + 'ealed', + 'eales', + 'eaned', + 'eards', + 'eared', + 'earls', + 'earns', + 'earnt', + 'earst', + 'eased', + 'easer', + 'eases', + 'easle', + 'easts', + 'eathe', + 'eaved', + 'eaves', + 'ebbed', + 'ebbet', + 'ebons', + 'ebook', + 'ecads', + 'eched', + 'eches', + 'echos', + 'ecrus', + 'edema', + 'edged', + 'edger', + 'edges', + 'edile', + 'edits', + 'educe', + 'educt', + 'eejit', + 'eensy', + 'eeven', + 'eevns', + 'effed', + 'egads', + 'egers', + 'egest', + 'eggar', + 'egged', + 'egger', + 'egmas', + 'ehing', + 'eider', + 'eidos', + 'eigne', + 'eiked', + 'eikon', + 'eilds', + 'eisel', + 'ejido', + 'ekkas', + 'elain', + 'eland', + 'elans', + 'elchi', + 'eldin', + 'elemi', + 'elfed', + 'eliad', + 'elint', + 'elmen', + 'eloge', + 'elogy', + 'eloin', + 'elops', + 'elpee', + 'elsin', + 'elute', + 'elvan', + 'elven', + 'elver', + 'elves', + 'emacs', + 'embar', + 'embay', + 'embog', + 'embow', + 'embox', + 'embus', + 'emeer', + 'emend', + 'emerg', + 'emery', + 'emeus', + 'emics', + 'emirs', + 'emits', + 'emmas', + 'emmer', + 'emmet', + 'emmew', + 'emmys', + 'emoji', + 'emong', + 'emote', + 'emove', + 'empts', + 'emule', + 'emure', + 'emyde', + 'emyds', + 'enarm', + 'enate', + 'ended', + 'ender', + 'endew', + 'endue', + 'enews', + 'enfix', + 'eniac', + 'enlit', + 'enmew', + 'ennog', + 'enoki', + 'enols', + 'enorm', + 'enows', + 'enrol', + 'ensew', + 'ensky', + 'entia', + 'enure', + 'enurn', + 'envoi', + 'enzym', + 'eorls', + 'eosin', + 'epact', + 'epees', + 'ephah', + 'ephas', + 'ephod', + 'ephor', + 'epics', + 'epode', + 'epopt', + 'epris', + 'eques', + 'equid', + 'erbia', + 'erevs', + 'ergon', + 'ergos', + 'ergot', + 'erhus', + 'erica', + 'erick', + 'erics', + 'ering', + 'erned', + 'ernes', + 'erose', + 'erred', + 'erses', + 'eruct', + 'erugo', + 'eruvs', + 'erven', + 'ervil', + 'escar', + 'escot', + 'esile', + 'eskar', + 'esker', + 'esnes', + 'esses', + 'estoc', + 'estop', + 'estro', + 'etage', + 'etape', + 'etats', + 'etens', + 'ethal', + 'ethne', + 'ethyl', + 'etics', + 'etnas', + 'ettin', + 'ettle', + 'etuis', + 'etwee', + 'etyma', + 'eughs', + 'euked', + 'eupad', + 'euros', + 'eusol', + 'evens', + 'evert', + 'evets', + 'evhoe', + 'evils', + 'evite', + 'evohe', + 'ewers', + 'ewest', + 'ewhow', + 'ewked', + 'exams', + 'exeat', + 'execs', + 'exeem', + 'exeme', + 'exfil', + 'exies', + 'exine', + 'exing', + 'exits', + 'exode', + 'exome', + 'exons', + 'expat', + 'expos', + 'exude', + 'exuls', + 'exurb', + 'eyass', + 'eyers', + 'eyots', + 'eyras', + 'eyres', + 'eyrie', + 'eyrir', + 'ezine', + 'fabby', + 'faced', + 'facer', + 'faces', + 'facia', + 'facta', + 'facts', + 'faddy', + 'faded', + 'fader', + 'fades', + 'fadge', + 'fados', + 'faena', + 'faery', + 'faffs', + 'faffy', + 'faggy', + 'fagin', + 'fagot', + 'faiks', + 'fails', + 'faine', + 'fains', + 'fairs', + 'faked', + 'faker', + 'fakes', + 'fakey', + 'fakie', + 'fakir', + 'falaj', + 'falls', + 'famed', + 'fames', + 'fanal', + 'fands', + 'fanes', + 'fanga', + 'fango', + 'fangs', + 'fanks', + 'fanon', + 'fanos', + 'fanum', + 'faqir', + 'farad', + 'farci', + 'farcy', + 'fards', + 'fared', + 'farer', + 'fares', + 'farle', + 'farls', + 'farms', + 'faros', + 'farro', + 'farse', + 'farts', + 'fasci', + 'fasti', + 'fasts', + 'fated', + 'fates', + 'fatly', + 'fatso', + 'fatwa', + 'faugh', + 'fauld', + 'fauns', + 'faurd', + 'fauts', + 'fauve', + 'favas', + 'favel', + 'faver', + 'faves', + 'favus', + 'fawns', + 'fawny', + 'faxed', + 'faxes', + 'fayed', + 'fayer', + 'fayne', + 'fayre', + 'fazed', + 'fazes', + 'feals', + 'feare', + 'fears', + 'feart', + 'fease', + 'feats', + 'feaze', + 'feces', + 'fecht', + 'fecit', + 'fecks', + 'fedex', + 'feebs', + 'feeds', + 'feels', + 'feens', + 'feers', + 'feese', + 'feeze', + 'fehme', + 'feint', + 'feist', + 'felch', + 'felid', + 'fells', + 'felly', + 'felts', + 'felty', + 'femal', + 'femes', + 'femmy', + 'fends', + 'fendy', + 'fenis', + 'fenks', + 'fenny', + 'fents', + 'feods', + 'feoff', + 'ferer', + 'feres', + 'feria', + 'ferly', + 'fermi', + 'ferms', + 'ferns', + 'ferny', + 'fesse', + 'festa', + 'fests', + 'festy', + 'fetas', + 'feted', + 'fetes', + 'fetor', + 'fetta', + 'fetts', + 'fetwa', + 'feuar', + 'feuds', + 'feued', + 'feyed', + 'feyer', + 'feyly', + 'fezes', + 'fezzy', + 'fiars', + 'fiats', + 'fibro', + 'fices', + 'fiche', + 'fichu', + 'ficin', + 'ficos', + 'fides', + 'fidge', + 'fidos', + 'fiefs', + 'fient', + 'fiere', + 'fiers', + 'fiest', + 'fifed', + 'fifer', + 'fifes', + 'fifis', + 'figgy', + 'figos', + 'fiked', + 'fikes', + 'filar', + 'filch', + 'filed', + 'files', + 'filii', + 'filks', + 'fille', + 'fillo', + 'fills', + 'filmi', + 'films', + 'filos', + 'filum', + 'finca', + 'finds', + 'fined', + 'fines', + 'finis', + 'finks', + 'finny', + 'finos', + 'fiord', + 'fiqhs', + 'fique', + 'fired', + 'firer', + 'fires', + 'firie', + 'firks', + 'firms', + 'firns', + 'firry', + 'firth', + 'fiscs', + 'fisks', + 'fists', + 'fisty', + 'fitch', + 'fitly', + 'fitna', + 'fitte', + 'fitts', + 'fiver', + 'fives', + 'fixed', + 'fixes', + 'fixit', + 'fjeld', + 'flabs', + 'flaff', + 'flags', + 'flaks', + 'flamm', + 'flams', + 'flamy', + 'flane', + 'flans', + 'flaps', + 'flary', + 'flats', + 'flava', + 'flawn', + 'flaws', + 'flawy', + 'flaxy', + 'flays', + 'fleam', + 'fleas', + 'fleek', + 'fleer', + 'flees', + 'flegs', + 'fleme', + 'fleur', + 'flews', + 'flexi', + 'flexo', + 'fleys', + 'flics', + 'flied', + 'flies', + 'flimp', + 'flims', + 'flips', + 'flirs', + 'flisk', + 'flite', + 'flits', + 'flitt', + 'flobs', + 'flocs', + 'floes', + 'flogs', + 'flong', + 'flops', + 'flors', + 'flory', + 'flosh', + 'flota', + 'flote', + 'flows', + 'flubs', + 'flued', + 'flues', + 'fluey', + 'fluky', + 'flump', + 'fluor', + 'flurr', + 'fluty', + 'fluyt', + 'flyby', + 'flype', + 'flyte', + 'foals', + 'foams', + 'foehn', + 'fogey', + 'fogie', + 'fogle', + 'fogou', + 'fohns', + 'foids', + 'foils', + 'foins', + 'folds', + 'foley', + 'folia', + 'folic', + 'folie', + 'folks', + 'folky', + 'fomes', + 'fonda', + 'fonds', + 'fondu', + 'fones', + 'fonly', + 'fonts', + 'foods', + 'foody', + 'fools', + 'foots', + 'footy', + 'foram', + 'forbs', + 'forby', + 'fordo', + 'fords', + 'forel', + 'fores', + 'forex', + 'forks', + 'forky', + 'forme', + 'forms', + 'forts', + 'forza', + 'forze', + 'fossa', + 'fosse', + 'fouat', + 'fouds', + 'fouer', + 'fouet', + 'foule', + 'fouls', + 'fount', + 'fours', + 'fouth', + 'fovea', + 'fowls', + 'fowth', + 'foxed', + 'foxes', + 'foxie', + 'foyle', + 'foyne', + 'frabs', + 'frack', + 'fract', + 'frags', + 'fraim', + 'franc', + 'frape', + 'fraps', + 'frass', + 'frate', + 'frati', + 'frats', + 'fraus', + 'frays', + 'frees', + 'freet', + 'freit', + 'fremd', + 'frena', + 'freon', + 'frere', + 'frets', + 'fribs', + 'frier', + 'fries', + 'frigs', + 'frise', + 'frist', + 'frith', + 'frits', + 'fritt', + 'frize', + 'frizz', + 'froes', + 'frogs', + 'frons', + 'frore', + 'frorn', + 'frory', + 'frosh', + 'frows', + 'frowy', + 'frugs', + 'frump', + 'frush', + 'frust', + 'fryer', + 'fubar', + 'fubby', + 'fubsy', + 'fucks', + 'fucus', + 'fuddy', + 'fudgy', + 'fuels', + 'fuero', + 'fuffs', + 'fuffy', + 'fugal', + 'fuggy', + 'fugie', + 'fugio', + 'fugle', + 'fugly', + 'fugus', + 'fujis', + 'fulls', + 'fumed', + 'fumer', + 'fumes', + 'fumet', + 'fundi', + 'funds', + 'fundy', + 'fungo', + 'fungs', + 'funks', + 'fural', + 'furan', + 'furca', + 'furls', + 'furol', + 'furrs', + 'furth', + 'furze', + 'furzy', + 'fused', + 'fusee', + 'fusel', + 'fuses', + 'fusil', + 'fusks', + 'fusts', + 'fusty', + 'futon', + 'fuzed', + 'fuzee', + 'fuzes', + 'fuzil', + 'fyces', + 'fyked', + 'fykes', + 'fyles', + 'fyrds', + 'fytte', + 'gabba', + 'gabby', + 'gable', + 'gaddi', + 'gades', + 'gadge', + 'gadid', + 'gadis', + 'gadje', + 'gadjo', + 'gadso', + 'gaffs', + 'gaged', + 'gager', + 'gages', + 'gaids', + 'gains', + 'gairs', + 'gaita', + 'gaits', + 'gaitt', + 'gajos', + 'galah', + 'galas', + 'galax', + 'galea', + 'galed', + 'gales', + 'galls', + 'gally', + 'galop', + 'galut', + 'galvo', + 'gamas', + 'gamay', + 'gamba', + 'gambe', + 'gambo', + 'gambs', + 'gamed', + 'games', + 'gamey', + 'gamic', + 'gamin', + 'gamme', + 'gammy', + 'gamps', + 'ganch', + 'gandy', + 'ganef', + 'ganev', + 'gangs', + 'ganja', + 'ganof', + 'gants', + 'gaols', + 'gaped', + 'gaper', + 'gapes', + 'gapos', + 'gappy', + 'garbe', + 'garbo', + 'garbs', + 'garda', + 'gares', + 'garis', + 'garms', + 'garni', + 'garre', + 'garth', + 'garum', + 'gases', + 'gasps', + 'gaspy', + 'gasts', + 'gatch', + 'gated', + 'gater', + 'gates', + 'gaths', + 'gator', + 'gauch', + 'gaucy', + 'gauds', + 'gauje', + 'gault', + 'gaums', + 'gaumy', + 'gaups', + 'gaurs', + 'gauss', + 'gauzy', + 'gavot', + 'gawcy', + 'gawds', + 'gawks', + 'gawps', + 'gawsy', + 'gayal', + 'gazal', + 'gazar', + 'gazed', + 'gazes', + 'gazon', + 'gazoo', + 'geals', + 'geans', + 'geare', + 'gears', + 'geats', + 'gebur', + 'gecks', + 'geeks', + 'geeps', + 'geest', + 'geist', + 'geits', + 'gelds', + 'gelee', + 'gelid', + 'gelly', + 'gelts', + 'gemel', + 'gemma', + 'gemmy', + 'gemot', + 'genal', + 'genas', + 'genes', + 'genet', + 'genic', + 'genii', + 'genip', + 'genny', + 'genoa', + 'genom', + 'genro', + 'gents', + 'genty', + 'genua', + 'genus', + 'geode', + 'geoid', + 'gerah', + 'gerbe', + 'geres', + 'gerle', + 'germs', + 'germy', + 'gerne', + 'gesse', + 'gesso', + 'geste', + 'gests', + 'getas', + 'getup', + 'geums', + 'geyan', + 'geyer', + 'ghast', + 'ghats', + 'ghaut', + 'ghazi', + 'ghees', + 'ghest', + 'ghyll', + 'gibed', + 'gibel', + 'giber', + 'gibes', + 'gibli', + 'gibus', + 'gifts', + 'gigas', + 'gighe', + 'gigot', + 'gigue', + 'gilas', + 'gilds', + 'gilet', + 'gills', + 'gilly', + 'gilpy', + 'gilts', + 'gimel', + 'gimme', + 'gimps', + 'gimpy', + 'ginch', + 'ginge', + 'gings', + 'ginks', + 'ginny', + 'ginzo', + 'gipon', + 'gippo', + 'gippy', + 'girds', + 'girls', + 'girns', + 'giron', + 'giros', + 'girrs', + 'girsh', + 'girts', + 'gismo', + 'gisms', + 'gists', + 'gitch', + 'gites', + 'giust', + 'gived', + 'gives', + 'gizmo', + 'glace', + 'glads', + 'glady', + 'glaik', + 'glair', + 'glams', + 'glans', + 'glary', + 'glaum', + 'glaur', + 'glazy', + 'gleba', + 'glebe', + 'gleby', + 'glede', + 'gleds', + 'gleed', + 'gleek', + 'glees', + 'gleet', + 'gleis', + 'glens', + 'glent', + 'gleys', + 'glial', + 'glias', + 'glibs', + 'gliff', + 'glift', + 'glike', + 'glime', + 'glims', + 'glisk', + 'glits', + 'glitz', + 'gloam', + 'globi', + 'globs', + 'globy', + 'glode', + 'glogg', + 'gloms', + 'gloop', + 'glops', + 'glost', + 'glout', + 'glows', + 'gloze', + 'glued', + 'gluer', + 'glues', + 'gluey', + 'glugs', + 'glume', + 'glums', + 'gluon', + 'glute', + 'gluts', + 'gnarl', + 'gnarr', + 'gnars', + 'gnats', + 'gnawn', + 'gnaws', + 'gnows', + 'goads', + 'goafs', + 'goals', + 'goary', + 'goats', + 'goaty', + 'goban', + 'gobar', + 'gobbi', + 'gobbo', + 'gobby', + 'gobis', + 'gobos', + 'godet', + 'godso', + 'goels', + 'goers', + 'goest', + 'goeth', + 'goety', + 'gofer', + 'goffs', + 'gogga', + 'gogos', + 'goier', + 'gojis', + 'golds', + 'goldy', + 'goles', + 'golfs', + 'golpe', + 'golps', + 'gombo', + 'gomer', + 'gompa', + 'gonch', + 'gonef', + 'gongs', + 'gonia', + 'gonif', + 'gonks', + 'gonna', + 'gonof', + 'gonys', + 'gonzo', + 'gooby', + 'goods', + 'goofs', + 'googs', + 'gooks', + 'gooky', + 'goold', + 'gools', + 'gooly', + 'goons', + 'goony', + 'goops', + 'goopy', + 'goors', + 'goory', + 'goosy', + 'gopak', + 'gopik', + 'goral', + 'goras', + 'gored', + 'gores', + 'goris', + 'gorms', + 'gormy', + 'gorps', + 'gorse', + 'gorsy', + 'gosht', + 'gosse', + 'gotch', + 'goths', + 'gothy', + 'gotta', + 'gouch', + 'gouks', + 'goura', + 'gouts', + 'gouty', + 'gowan', + 'gowds', + 'gowfs', + 'gowks', + 'gowls', + 'gowns', + 'goxes', + 'goyim', + 'goyle', + 'graal', + 'grabs', + 'grads', + 'graff', + 'graip', + 'grama', + 'grame', + 'gramp', + 'grams', + 'grana', + 'grans', + 'grapy', + 'gravs', + 'grays', + 'grebe', + 'grebo', + 'grece', + 'greek', + 'grees', + 'grege', + 'grego', + 'grein', + 'grens', + 'grese', + 'greve', + 'grews', + 'greys', + 'grice', + 'gride', + 'grids', + 'griff', + 'grift', + 'grigs', + 'grike', + 'grins', + 'griot', + 'grips', + 'gript', + 'gripy', + 'grise', + 'grist', + 'grisy', + 'grith', + 'grits', + 'grize', + 'groat', + 'grody', + 'grogs', + 'groks', + 'groma', + 'grone', + 'groof', + 'grosz', + 'grots', + 'grouf', + 'grovy', + 'grows', + 'grrls', + 'grrrl', + 'grubs', + 'grued', + 'grues', + 'grufe', + 'grume', + 'grump', + 'grund', + 'gryce', + 'gryde', + 'gryke', + 'grype', + 'grypt', + 'guaco', + 'guana', + 'guano', + 'guans', + 'guars', + 'gucks', + 'gucky', + 'gudes', + 'guffs', + 'gugas', + 'guids', + 'guimp', + 'guiro', + 'gulag', + 'gular', + 'gulas', + 'gules', + 'gulet', + 'gulfs', + 'gulfy', + 'gulls', + 'gulph', + 'gulps', + 'gulpy', + 'gumma', + 'gummi', + 'gumps', + 'gundy', + 'gunge', + 'gungy', + 'gunks', + 'gunky', + 'gunny', + 'guqin', + 'gurdy', + 'gurge', + 'gurls', + 'gurly', + 'gurns', + 'gurry', + 'gursh', + 'gurus', + 'gushy', + 'gusla', + 'gusle', + 'gusli', + 'gussy', + 'gusts', + 'gutsy', + 'gutta', + 'gutty', + 'guyed', + 'guyle', + 'guyot', + 'guyse', + 'gwine', + 'gyals', + 'gyans', + 'gybed', + 'gybes', + 'gyeld', + 'gymps', + 'gynae', + 'gynie', + 'gynny', + 'gynos', + 'gyoza', + 'gypos', + 'gyppo', + 'gyppy', + 'gyral', + 'gyred', + 'gyres', + 'gyron', + 'gyros', + 'gyrus', + 'gytes', + 'gyved', + 'gyves', + 'haafs', + 'haars', + 'hable', + 'habus', + 'hacek', + 'hacks', + 'hadal', + 'haded', + 'hades', + 'hadji', + 'hadst', + 'haems', + 'haets', + 'haffs', + 'hafiz', + 'hafts', + 'haggs', + 'hahas', + 'haick', + 'haika', + 'haiks', + 'haiku', + 'hails', + 'haily', + 'hains', + 'haint', + 'hairs', + 'haith', + 'hajes', + 'hajis', + 'hajji', + 'hakam', + 'hakas', + 'hakea', + 'hakes', + 'hakim', + 'hakus', + 'halal', + 'haled', + 'haler', + 'hales', + 'halfa', + 'halfs', + 'halid', + 'hallo', + 'halls', + 'halma', + 'halms', + 'halon', + 'halos', + 'halse', + 'halts', + 'halva', + 'halwa', + 'hamal', + 'hamba', + 'hamed', + 'hames', + 'hammy', + 'hamza', + 'hanap', + 'hance', + 'hanch', + 'hands', + 'hangi', + 'hangs', + 'hanks', + 'hanky', + 'hansa', + 'hanse', + 'hants', + 'haole', + 'haoma', + 'hapax', + 'haply', + 'happi', + 'hapus', + 'haram', + 'hards', + 'hared', + 'hares', + 'harim', + 'harks', + 'harls', + 'harms', + 'harns', + 'haros', + 'harps', + 'harts', + 'hashy', + 'hasks', + 'hasps', + 'hasta', + 'hated', + 'hates', + 'hatha', + 'hauds', + 'haufs', + 'haugh', + 'hauld', + 'haulm', + 'hauls', + 'hault', + 'hauns', + 'hause', + 'haver', + 'haves', + 'hawed', + 'hawks', + 'hawms', + 'hawse', + 'hayed', + 'hayer', + 'hayey', + 'hayle', + 'hazan', + 'hazed', + 'hazer', + 'hazes', + 'heads', + 'heald', + 'heals', + 'heame', + 'heaps', + 'heapy', + 'heare', + 'hears', + 'heast', + 'heats', + 'heben', + 'hebes', + 'hecht', + 'hecks', + 'heder', + 'hedgy', + 'heeds', + 'heedy', + 'heels', + 'heeze', + 'hefte', + 'hefts', + 'heids', + 'heigh', + 'heils', + 'heirs', + 'hejab', + 'hejra', + 'heled', + 'heles', + 'helio', + 'hells', + 'helms', + 'helos', + 'helot', + 'helps', + 'helve', + 'hemal', + 'hemes', + 'hemic', + 'hemin', + 'hemps', + 'hempy', + 'hench', + 'hends', + 'henge', + 'henna', + 'henny', + 'henry', + 'hents', + 'hepar', + 'herbs', + 'herby', + 'herds', + 'heres', + 'herls', + 'herma', + 'herms', + 'herns', + 'heros', + 'herry', + 'herse', + 'hertz', + 'herye', + 'hesps', + 'hests', + 'hetes', + 'heths', + 'heuch', + 'heugh', + 'hevea', + 'hewed', + 'hewer', + 'hewgh', + 'hexad', + 'hexed', + 'hexer', + 'hexes', + 'hexyl', + 'heyed', + 'hiant', + 'hicks', + 'hided', + 'hider', + 'hides', + 'hiems', + 'highs', + 'hight', + 'hijab', + 'hijra', + 'hiked', + 'hiker', + 'hikes', + 'hikoi', + 'hilar', + 'hilch', + 'hillo', + 'hills', + 'hilts', + 'hilum', + 'hilus', + 'himbo', + 'hinau', + 'hinds', + 'hings', + 'hinky', + 'hinny', + 'hints', + 'hiois', + 'hiply', + 'hired', + 'hiree', + 'hirer', + 'hires', + 'hissy', + 'hists', + 'hithe', + 'hived', + 'hiver', + 'hives', + 'hizen', + 'hoaed', + 'hoagy', + 'hoars', + 'hoary', + 'hoast', + 'hobos', + 'hocks', + 'hocus', + 'hodad', + 'hodja', + 'hoers', + 'hogan', + 'hogen', + 'hoggs', + 'hoghs', + 'hohed', + 'hoick', + 'hoied', + 'hoiks', + 'hoing', + 'hoise', + 'hokas', + 'hoked', + 'hokes', + 'hokey', + 'hokis', + 'hokku', + 'hokum', + 'holds', + 'holed', + 'holes', + 'holey', + 'holks', + 'holla', + 'hollo', + 'holme', + 'holms', + 'holon', + 'holos', + 'holts', + 'homas', + 'homed', + 'homes', + 'homey', + 'homie', + 'homme', + 'homos', + 'honan', + 'honda', + 'honds', + 'honed', + 'honer', + 'hones', + 'hongi', + 'hongs', + 'honks', + 'honky', + 'hooch', + 'hoods', + 'hoody', + 'hooey', + 'hoofs', + 'hooka', + 'hooks', + 'hooky', + 'hooly', + 'hoons', + 'hoops', + 'hoord', + 'hoors', + 'hoosh', + 'hoots', + 'hooty', + 'hoove', + 'hopak', + 'hoped', + 'hoper', + 'hopes', + 'hoppy', + 'horah', + 'horal', + 'horas', + 'horis', + 'horks', + 'horme', + 'horns', + 'horst', + 'horsy', + 'hosed', + 'hosel', + 'hosen', + 'hoser', + 'hoses', + 'hosey', + 'hosta', + 'hosts', + 'hotch', + 'hoten', + 'hotty', + 'houff', + 'houfs', + 'hough', + 'houri', + 'hours', + 'houts', + 'hovea', + 'hoved', + 'hoven', + 'hoves', + 'howbe', + 'howes', + 'howff', + 'howfs', + 'howks', + 'howls', + 'howre', + 'howso', + 'hoxed', + 'hoxes', + 'hoyas', + 'hoyed', + 'hoyle', + 'hubby', + 'hucks', + 'hudna', + 'hudud', + 'huers', + 'huffs', + 'huffy', + 'huger', + 'huggy', + 'huhus', + 'huias', + 'hulas', + 'hules', + 'hulks', + 'hulky', + 'hullo', + 'hulls', + 'hully', + 'humas', + 'humfs', + 'humic', + 'humps', + 'humpy', + 'hunks', + 'hunts', + 'hurds', + 'hurls', + 'hurly', + 'hurra', + 'hurst', + 'hurts', + 'hushy', + 'husks', + 'husos', + 'hutia', + 'huzza', + 'huzzy', + 'hwyls', + 'hydra', + 'hyens', + 'hygge', + 'hying', + 'hykes', + 'hylas', + 'hyleg', + 'hyles', + 'hylic', + 'hymns', + 'hynde', + 'hyoid', + 'hyped', + 'hypes', + 'hypha', + 'hyphy', + 'hypos', + 'hyrax', + 'hyson', + 'hythe', + 'iambi', + 'iambs', + 'ibrik', + 'icers', + 'iched', + 'iches', + 'ichor', + 'icier', + 'icker', + 'ickle', + 'icons', + 'ictal', + 'ictic', + 'ictus', + 'idant', + 'ideas', + 'idees', + 'ident', + 'idled', + 'idles', + 'idola', + 'idols', + 'idyls', + 'iftar', + 'igapo', + 'igged', + 'iglus', + 'ihram', + 'ikans', + 'ikats', + 'ikons', + 'ileac', + 'ileal', + 'ileum', + 'ileus', + 'iliad', + 'ilial', + 'ilium', + 'iller', + 'illth', + 'imago', + 'imams', + 'imari', + 'imaum', + 'imbar', + 'imbed', + 'imide', + 'imido', + 'imids', + 'imine', + 'imino', + 'immew', + 'immit', + 'immix', + 'imped', + 'impis', + 'impot', + 'impro', + 'imshi', + 'imshy', + 'inapt', + 'inarm', + 'inbye', + 'incel', + 'incle', + 'incog', + 'incus', + 'incut', + 'indew', + 'india', + 'indie', + 'indol', + 'indow', + 'indri', + 'indue', + 'inerm', + 'infix', + 'infos', + 'infra', + 'ingan', + 'ingle', + 'inion', + 'inked', + 'inker', + 'inkle', + 'inned', + 'innit', + 'inorb', + 'inrun', + 'inset', + 'inspo', + 'intel', + 'intil', + 'intis', + 'intra', + 'inula', + 'inure', + 'inurn', + 'inust', + 'invar', + 'inwit', + 'iodic', + 'iodid', + 'iodin', + 'iotas', + 'ippon', + 'irade', + 'irids', + 'iring', + 'irked', + 'iroko', + 'irone', + 'irons', + 'isbas', + 'ishes', + 'isled', + 'isles', + 'isnae', + 'issei', + 'istle', + 'items', + 'ither', + 'ivied', + 'ivies', + 'ixias', + 'ixnay', + 'ixora', + 'ixtle', + 'izard', + 'izars', + 'izzat', + 'jaaps', + 'jabot', + 'jacal', + 'jacks', + 'jacky', + 'jaded', + 'jades', + 'jafas', + 'jaffa', + 'jagas', + 'jager', + 'jaggs', + 'jaggy', + 'jagir', + 'jagra', + 'jails', + 'jaker', + 'jakes', + 'jakey', + 'jalap', + 'jalop', + 'jambe', + 'jambo', + 'jambs', + 'jambu', + 'james', + 'jammy', + 'jamon', + 'janes', + 'janns', + 'janny', + 'janty', + 'japan', + 'japed', + 'japer', + 'japes', + 'jarks', + 'jarls', + 'jarps', + 'jarta', + 'jarul', + 'jasey', + 'jaspe', + 'jasps', + 'jatos', + 'jauks', + 'jaups', + 'javas', + 'javel', + 'jawan', + 'jawed', + 'jaxie', + 'jeans', + 'jeats', + 'jebel', + 'jedis', + 'jeels', + 'jeely', + 'jeeps', + 'jeers', + 'jeeze', + 'jefes', + 'jeffs', + 'jehad', + 'jehus', + 'jelab', + 'jello', + 'jells', + 'jembe', + 'jemmy', + 'jenny', + 'jeons', + 'jerid', + 'jerks', + 'jerry', + 'jesse', + 'jests', + 'jesus', + 'jetes', + 'jeton', + 'jeune', + 'jewed', + 'jewie', + 'jhala', + 'jiaos', + 'jibba', + 'jibbs', + 'jibed', + 'jiber', + 'jibes', + 'jiffs', + 'jiggy', + 'jigot', + 'jihad', + 'jills', + 'jilts', + 'jimmy', + 'jimpy', + 'jingo', + 'jinks', + 'jinne', + 'jinni', + 'jinns', + 'jirds', + 'jirga', + 'jirre', + 'jisms', + 'jived', + 'jiver', + 'jives', + 'jivey', + 'jnana', + 'jobed', + 'jobes', + 'jocko', + 'jocks', + 'jocky', + 'jocos', + 'jodel', + 'joeys', + 'johns', + 'joins', + 'joked', + 'jokes', + 'jokey', + 'jokol', + 'joled', + 'joles', + 'jolls', + 'jolts', + 'jolty', + 'jomon', + 'jomos', + 'jones', + 'jongs', + 'jonty', + 'jooks', + 'joram', + 'jorum', + 'jotas', + 'jotty', + 'jotun', + 'joual', + 'jougs', + 'jouks', + 'joule', + 'jours', + 'jowar', + 'jowed', + 'jowls', + 'jowly', + 'joyed', + 'jubas', + 'jubes', + 'jucos', + 'judas', + 'judgy', + 'judos', + 'jugal', + 'jugum', + 'jujus', + 'juked', + 'jukes', + 'jukus', + 'julep', + 'jumar', + 'jumby', + 'jumps', + 'junco', + 'junks', + 'junky', + 'jupes', + 'jupon', + 'jural', + 'jurat', + 'jurel', + 'jures', + 'justs', + 'jutes', + 'jutty', + 'juves', + 'juvie', + 'kaama', + 'kabab', + 'kabar', + 'kabob', + 'kacha', + 'kacks', + 'kadai', + 'kades', + 'kadis', + 'kafir', + 'kagos', + 'kagus', + 'kahal', + 'kaiak', + 'kaids', + 'kaies', + 'kaifs', + 'kaika', + 'kaiks', + 'kails', + 'kaims', + 'kaing', + 'kains', + 'kakas', + 'kakis', + 'kalam', + 'kales', + 'kalif', + 'kalis', + 'kalpa', + 'kamas', + 'kames', + 'kamik', + 'kamis', + 'kamme', + 'kanae', + 'kanas', + 'kandy', + 'kaneh', + 'kanes', + 'kanga', + 'kangs', + 'kanji', + 'kants', + 'kanzu', + 'kaons', + 'kapas', + 'kaphs', + 'kapok', + 'kapow', + 'kapus', + 'kaput', + 'karas', + 'karat', + 'karks', + 'karns', + 'karoo', + 'karos', + 'karri', + 'karst', + 'karsy', + 'karts', + 'karzy', + 'kasha', + 'kasme', + 'katal', + 'katas', + 'katis', + 'katti', + 'kaugh', + 'kauri', + 'kauru', + 'kaury', + 'kaval', + 'kavas', + 'kawas', + 'kawau', + 'kawed', + 'kayle', + 'kayos', + 'kazis', + 'kazoo', + 'kbars', + 'kebar', + 'kebob', + 'kecks', + 'kedge', + 'kedgy', + 'keech', + 'keefs', + 'keeks', + 'keels', + 'keema', + 'keeno', + 'keens', + 'keeps', + 'keets', + 'keeve', + 'kefir', + 'kehua', + 'keirs', + 'kelep', + 'kelim', + 'kells', + 'kelly', + 'kelps', + 'kelpy', + 'kelts', + 'kelty', + 'kembo', + 'kembs', + 'kemps', + 'kempt', + 'kempy', + 'kenaf', + 'kench', + 'kendo', + 'kenos', + 'kente', + 'kents', + 'kepis', + 'kerbs', + 'kerel', + 'kerfs', + 'kerky', + 'kerma', + 'kerne', + 'kerns', + 'keros', + 'kerry', + 'kerve', + 'kesar', + 'kests', + 'ketas', + 'ketch', + 'ketes', + 'ketol', + 'kevel', + 'kevil', + 'kexes', + 'keyed', + 'keyer', + 'khadi', + 'khafs', + 'khans', + 'khaph', + 'khats', + 'khaya', + 'khazi', + 'kheda', + 'kheth', + 'khets', + 'khoja', + 'khors', + 'khoum', + 'khuds', + 'kiaat', + 'kiack', + 'kiang', + 'kibbe', + 'kibbi', + 'kibei', + 'kibes', + 'kibla', + 'kicks', + 'kicky', + 'kiddo', + 'kiddy', + 'kidel', + 'kidge', + 'kiefs', + 'kiers', + 'kieve', + 'kievs', + 'kight', + 'kikes', + 'kikoi', + 'kiley', + 'kilim', + 'kills', + 'kilns', + 'kilos', + 'kilps', + 'kilts', + 'kilty', + 'kimbo', + 'kinas', + 'kinda', + 'kinds', + 'kindy', + 'kines', + 'kings', + 'kinin', + 'kinks', + 'kinos', + 'kiore', + 'kipes', + 'kippa', + 'kipps', + 'kirby', + 'kirks', + 'kirns', + 'kirri', + 'kisan', + 'kissy', + 'kists', + 'kited', + 'kiter', + 'kites', + 'kithe', + 'kiths', + 'kitul', + 'kivas', + 'kiwis', + 'klang', + 'klaps', + 'klett', + 'klick', + 'klieg', + 'kliks', + 'klong', + 'kloof', + 'kluge', + 'klutz', + 'knags', + 'knaps', + 'knarl', + 'knars', + 'knaur', + 'knawe', + 'knees', + 'knell', + 'knish', + 'knits', + 'knive', + 'knobs', + 'knops', + 'knosp', + 'knots', + 'knout', + 'knowe', + 'knows', + 'knubs', + 'knurl', + 'knurr', + 'knurs', + 'knuts', + 'koans', + 'koaps', + 'koban', + 'kobos', + 'koels', + 'koffs', + 'kofta', + 'kogal', + 'kohas', + 'kohen', + 'kohls', + 'koine', + 'kojis', + 'kokam', + 'kokas', + 'koker', + 'kokra', + 'kokum', + 'kolas', + 'kolos', + 'kombu', + 'konbu', + 'kondo', + 'konks', + 'kooks', + 'kooky', + 'koori', + 'kopek', + 'kophs', + 'kopje', + 'koppa', + 'korai', + 'koras', + 'korat', + 'kores', + 'korma', + 'koros', + 'korun', + 'korus', + 'koses', + 'kotch', + 'kotos', + 'kotow', + 'koura', + 'kraal', + 'krabs', + 'kraft', + 'krais', + 'krait', + 'krang', + 'krans', + 'kranz', + 'kraut', + 'krays', + 'kreep', + 'kreng', + 'krewe', + 'krona', + 'krone', + 'kroon', + 'krubi', + 'krunk', + 'ksars', + 'kubie', + 'kudos', + 'kudus', + 'kudzu', + 'kufis', + 'kugel', + 'kuias', + 'kukri', + 'kukus', + 'kulak', + 'kulan', + 'kulas', + 'kulfi', + 'kumis', + 'kumys', + 'kuris', + 'kurre', + 'kurta', + 'kurus', + 'kusso', + 'kutas', + 'kutch', + 'kutis', + 'kutus', + 'kuzus', + 'kvass', + 'kvell', + 'kwela', + 'kyack', + 'kyaks', + 'kyang', + 'kyars', + 'kyats', + 'kybos', + 'kydst', + 'kyles', + 'kylie', + 'kylin', + 'kylix', + 'kyloe', + 'kynde', + 'kynds', + 'kypes', + 'kyrie', + 'kytes', + 'kythe', + 'laari', + 'labda', + 'labia', + 'labis', + 'labra', + 'laced', + 'lacer', + 'laces', + 'lacet', + 'lacey', + 'lacks', + 'laddy', + 'laded', + 'lader', + 'lades', + 'laers', + 'laevo', + 'lagan', + 'lahal', + 'lahar', + 'laich', + 'laics', + 'laids', + 'laigh', + 'laika', + 'laiks', + 'laird', + 'lairs', + 'lairy', + 'laith', + 'laity', + 'laked', + 'laker', + 'lakes', + 'lakhs', + 'lakin', + 'laksa', + 'laldy', + 'lalls', + 'lamas', + 'lambs', + 'lamby', + 'lamed', + 'lamer', + 'lames', + 'lamia', + 'lammy', + 'lamps', + 'lanai', + 'lanas', + 'lanch', + 'lande', + 'lands', + 'lanes', + 'lanks', + 'lants', + 'lapin', + 'lapis', + 'lapje', + 'larch', + 'lards', + 'lardy', + 'laree', + 'lares', + 'largo', + 'laris', + 'larks', + 'larky', + 'larns', + 'larnt', + 'larum', + 'lased', + 'laser', + 'lases', + 'lassi', + 'lassu', + 'lassy', + 'lasts', + 'latah', + 'lated', + 'laten', + 'latex', + 'lathi', + 'laths', + 'lathy', + 'latke', + 'latus', + 'lauan', + 'lauch', + 'lauds', + 'laufs', + 'laund', + 'laura', + 'laval', + 'lavas', + 'laved', + 'laver', + 'laves', + 'lavra', + 'lavvy', + 'lawed', + 'lawer', + 'lawin', + 'lawks', + 'lawns', + 'lawny', + 'laxed', + 'laxer', + 'laxes', + 'laxly', + 'layed', + 'layin', + 'layup', + 'lazar', + 'lazed', + 'lazes', + 'lazos', + 'lazzi', + 'lazzo', + 'leads', + 'leady', + 'leafs', + 'leaks', + 'leams', + 'leans', + 'leany', + 'leaps', + 'leare', + 'lears', + 'leary', + 'leats', + 'leavy', + 'leaze', + 'leben', + 'leccy', + 'ledes', + 'ledgy', + 'ledum', + 'leear', + 'leeks', + 'leeps', + 'leers', + 'leese', + 'leets', + 'leeze', + 'lefte', + 'lefts', + 'leger', + 'leges', + 'legge', + 'leggo', + 'legit', + 'lehrs', + 'lehua', + 'leirs', + 'leish', + 'leman', + 'lemed', + 'lemel', + 'lemes', + 'lemma', + 'lemme', + 'lends', + 'lenes', + 'lengs', + 'lenis', + 'lenos', + 'lense', + 'lenti', + 'lento', + 'leone', + 'lepid', + 'lepra', + 'lepta', + 'lered', + 'leres', + 'lerps', + 'lesbo', + 'leses', + 'lests', + 'letch', + 'lethe', + 'letup', + 'leuch', + 'leuco', + 'leuds', + 'leugh', + 'levas', + 'levee', + 'leves', + 'levin', + 'levis', + 'lewis', + 'lexes', + 'lexis', + 'lezes', + 'lezza', + 'lezzy', + 'liana', + 'liane', + 'liang', + 'liard', + 'liars', + 'liart', + 'liber', + 'libra', + 'libri', + 'lichi', + 'licht', + 'licit', + 'licks', + 'lidar', + 'lidos', + 'liefs', + 'liens', + 'liers', + 'lieus', + 'lieve', + 'lifer', + 'lifes', + 'lifts', + 'ligan', + 'liger', + 'ligge', + 'ligne', + 'liked', + 'liker', + 'likes', + 'likin', + 'lills', + 'lilos', + 'lilts', + 'liman', + 'limas', + 'limax', + 'limba', + 'limbi', + 'limbs', + 'limby', + 'limed', + 'limen', + 'limes', + 'limey', + 'limma', + 'limns', + 'limos', + 'limpa', + 'limps', + 'linac', + 'linch', + 'linds', + 'lindy', + 'lined', + 'lines', + 'liney', + 'linga', + 'lings', + 'lingy', + 'linin', + 'links', + 'linky', + 'linns', + 'linny', + 'linos', + 'lints', + 'linty', + 'linum', + 'linux', + 'lions', + 'lipas', + 'lipes', + 'lipin', + 'lipos', + 'lippy', + 'liras', + 'lirks', + 'lirot', + 'lisks', + 'lisle', + 'lisps', + 'lists', + 'litai', + 'litas', + 'lited', + 'liter', + 'lites', + 'litho', + 'liths', + 'litre', + 'lived', + 'liven', + 'lives', + 'livor', + 'livre', + 'llano', + 'loach', + 'loads', + 'loafs', + 'loams', + 'loans', + 'loast', + 'loave', + 'lobar', + 'lobed', + 'lobes', + 'lobos', + 'lobus', + 'loche', + 'lochs', + 'locie', + 'locis', + 'locks', + 'locos', + 'locum', + 'loden', + 'lodes', + 'loess', + 'lofts', + 'logan', + 'loges', + 'loggy', + 'logia', + 'logie', + 'logoi', + 'logon', + 'logos', + 'lohan', + 'loids', + 'loins', + 'loipe', + 'loirs', + 'lokes', + 'lolls', + 'lolly', + 'lolog', + 'lomas', + 'lomed', + 'lomes', + 'loner', + 'longa', + 'longe', + 'longs', + 'looby', + 'looed', + 'looey', + 'loofa', + 'loofs', + 'looie', + 'looks', + 'looky', + 'looms', + 'loons', + 'loony', + 'loops', + 'loord', + 'loots', + 'loped', + 'loper', + 'lopes', + 'loppy', + 'loral', + 'loran', + 'lords', + 'lordy', + 'lorel', + 'lores', + 'loric', + 'loris', + 'losed', + 'losel', + 'losen', + 'loses', + 'lossy', + 'lotah', + 'lotas', + 'lotes', + 'lotic', + 'lotos', + 'lotsa', + 'lotta', + 'lotte', + 'lotto', + 'lotus', + 'loued', + 'lough', + 'louie', + 'louis', + 'louma', + 'lound', + 'louns', + 'loupe', + 'loups', + 'loure', + 'lours', + 'loury', + 'louts', + 'lovat', + 'loved', + 'loves', + 'lovey', + 'lovie', + 'lowan', + 'lowed', + 'lowes', + 'lownd', + 'lowne', + 'lowns', + 'lowps', + 'lowry', + 'lowse', + 'lowts', + 'loxed', + 'loxes', + 'lozen', + 'luach', + 'luaus', + 'lubed', + 'lubes', + 'lubra', + 'luces', + 'lucks', + 'lucre', + 'ludes', + 'ludic', + 'ludos', + 'luffa', + 'luffs', + 'luged', + 'luger', + 'luges', + 'lulls', + 'lulus', + 'lumas', + 'lumbi', + 'lumme', + 'lummy', + 'lumps', + 'lunas', + 'lunes', + 'lunet', + 'lungi', + 'lungs', + 'lunks', + 'lunts', + 'lupin', + 'lured', + 'lurer', + 'lures', + 'lurex', + 'lurgi', + 'lurgy', + 'lurks', + 'lurry', + 'lurve', + 'luser', + 'lushy', + 'lusks', + 'lusts', + 'lusus', + 'lutea', + 'luted', + 'luter', + 'lutes', + 'luvvy', + 'luxed', + 'luxer', + 'luxes', + 'lweis', + 'lyams', + 'lyard', + 'lyart', + 'lyase', + 'lycea', + 'lycee', + 'lycra', + 'lymes', + 'lynes', + 'lyres', + 'lysed', + 'lyses', + 'lysin', + 'lysis', + 'lysol', + 'lyssa', + 'lyted', + 'lytes', + 'lythe', + 'lytic', + 'lytta', + 'maaed', + 'maare', + 'maars', + 'mabes', + 'macas', + 'maced', + 'macer', + 'maces', + 'mache', + 'machi', + 'machs', + 'macks', + 'macle', + 'macon', + 'madge', + 'madid', + 'madre', + 'maerl', + 'mafic', + 'mages', + 'maggs', + 'magot', + 'magus', + 'mahoe', + 'mahua', + 'mahwa', + 'maids', + 'maiko', + 'maiks', + 'maile', + 'maill', + 'mails', + 'maims', + 'mains', + 'maire', + 'mairs', + 'maise', + 'maist', + 'makar', + 'makes', + 'makis', + 'makos', + 'malam', + 'malar', + 'malas', + 'malax', + 'males', + 'malic', + 'malik', + 'malis', + 'malls', + 'malms', + 'malmy', + 'malts', + 'malty', + 'malus', + 'malva', + 'malwa', + 'mamas', + 'mamba', + 'mamee', + 'mamey', + 'mamie', + 'manas', + 'manat', + 'mandi', + 'maneb', + 'maned', + 'maneh', + 'manes', + 'manet', + 'mangs', + 'manis', + 'manky', + 'manna', + 'manos', + 'manse', + 'manta', + 'manto', + 'manty', + 'manul', + 'manus', + 'mapau', + 'maqui', + 'marae', + 'marah', + 'maras', + 'marcs', + 'mardy', + 'mares', + 'marge', + 'margs', + 'maria', + 'marid', + 'marka', + 'marks', + 'marle', + 'marls', + 'marly', + 'marms', + 'maron', + 'maror', + 'marra', + 'marri', + 'marse', + 'marts', + 'marvy', + 'masas', + 'mased', + 'maser', + 'mases', + 'mashy', + 'masks', + 'massa', + 'massy', + 'masts', + 'masty', + 'masus', + 'matai', + 'mated', + 'mater', + 'mates', + 'maths', + 'matin', + 'matlo', + 'matte', + 'matts', + 'matza', + 'matzo', + 'mauby', + 'mauds', + 'mauls', + 'maund', + 'mauri', + 'mausy', + 'mauts', + 'mauzy', + 'maven', + 'mavie', + 'mavin', + 'mavis', + 'mawed', + 'mawks', + 'mawky', + 'mawns', + 'mawrs', + 'maxed', + 'maxes', + 'maxis', + 'mayan', + 'mayas', + 'mayed', + 'mayos', + 'mayst', + 'mazed', + 'mazer', + 'mazes', + 'mazey', + 'mazut', + 'mbira', + 'meads', + 'meals', + 'meane', + 'means', + 'meany', + 'meare', + 'mease', + 'meath', + 'meats', + 'mebos', + 'mechs', + 'mecks', + 'medii', + 'medle', + 'meeds', + 'meers', + 'meets', + 'meffs', + 'meins', + 'meint', + 'meiny', + 'meith', + 'mekka', + 'melas', + 'melba', + 'melds', + 'melic', + 'melik', + 'mells', + 'melts', + 'melty', + 'memes', + 'memos', + 'menad', + 'mends', + 'mened', + 'menes', + 'menge', + 'mengs', + 'mensa', + 'mense', + 'mensh', + 'menta', + 'mento', + 'menus', + 'meous', + 'meows', + 'merch', + 'mercs', + 'merde', + 'mered', + 'merel', + 'merer', + 'meres', + 'meril', + 'meris', + 'merks', + 'merle', + 'merls', + 'merse', + 'mesal', + 'mesas', + 'mesel', + 'meses', + 'meshy', + 'mesic', + 'mesne', + 'meson', + 'messy', + 'mesto', + 'meted', + 'metes', + 'metho', + 'meths', + 'metic', + 'metif', + 'metis', + 'metol', + 'metre', + 'meuse', + 'meved', + 'meves', + 'mewed', + 'mewls', + 'meynt', + 'mezes', + 'mezze', + 'mezzo', + 'mhorr', + 'miaou', + 'miaow', + 'miasm', + 'miaul', + 'micas', + 'miche', + 'micht', + 'micks', + 'micky', + 'micos', + 'micra', + 'middy', + 'midgy', + 'midis', + 'miens', + 'mieve', + 'miffs', + 'miffy', + 'mifty', + 'miggs', + 'mihas', + 'mihis', + 'miked', + 'mikes', + 'mikra', + 'mikva', + 'milch', + 'milds', + 'miler', + 'miles', + 'milfs', + 'milia', + 'milko', + 'milks', + 'mille', + 'mills', + 'milor', + 'milos', + 'milpa', + 'milts', + 'milty', + 'miltz', + 'mimed', + 'mimeo', + 'mimer', + 'mimes', + 'mimsy', + 'minae', + 'minar', + 'minas', + 'mincy', + 'minds', + 'mined', + 'mines', + 'minge', + 'mings', + 'mingy', + 'minis', + 'minke', + 'minks', + 'minny', + 'minos', + 'mints', + 'mired', + 'mires', + 'mirex', + 'mirid', + 'mirin', + 'mirks', + 'mirky', + 'mirly', + 'miros', + 'mirvs', + 'mirza', + 'misch', + 'misdo', + 'mises', + 'misgo', + 'misos', + 'missa', + 'mists', + 'misty', + 'mitch', + 'miter', + 'mites', + 'mitis', + 'mitre', + 'mitts', + 'mixed', + 'mixen', + 'mixer', + 'mixes', + 'mixte', + 'mixup', + 'mizen', + 'mizzy', + 'mneme', + 'moans', + 'moats', + 'mobby', + 'mobes', + 'mobey', + 'mobie', + 'moble', + 'mochi', + 'mochs', + 'mochy', + 'mocks', + 'moder', + 'modes', + 'modge', + 'modii', + 'modus', + 'moers', + 'mofos', + 'moggy', + 'mohel', + 'mohos', + 'mohrs', + 'mohua', + 'mohur', + 'moile', + 'moils', + 'moira', + 'moire', + 'moits', + 'mojos', + 'mokes', + 'mokis', + 'mokos', + 'molal', + 'molas', + 'molds', + 'moled', + 'moles', + 'molla', + 'molls', + 'molly', + 'molto', + 'molts', + 'molys', + 'momes', + 'momma', + 'mommy', + 'momus', + 'monad', + 'monal', + 'monas', + 'monde', + 'mondo', + 'moner', + 'mongo', + 'mongs', + 'monic', + 'monie', + 'monks', + 'monos', + 'monte', + 'monty', + 'moobs', + 'mooch', + 'moods', + 'mooed', + 'mooks', + 'moola', + 'mooli', + 'mools', + 'mooly', + 'moong', + 'moons', + 'moony', + 'moops', + 'moors', + 'moory', + 'moots', + 'moove', + 'moped', + 'moper', + 'mopes', + 'mopey', + 'moppy', + 'mopsy', + 'mopus', + 'morae', + 'moras', + 'morat', + 'moray', + 'morel', + 'mores', + 'moria', + 'morne', + 'morns', + 'morra', + 'morro', + 'morse', + 'morts', + 'mosed', + 'moses', + 'mosey', + 'mosks', + 'mosso', + 'moste', + 'mosts', + 'moted', + 'moten', + 'motes', + 'motet', + 'motey', + 'moths', + 'mothy', + 'motis', + 'motte', + 'motts', + 'motty', + 'motus', + 'motza', + 'mouch', + 'moues', + 'mould', + 'mouls', + 'moups', + 'moust', + 'mousy', + 'moved', + 'moves', + 'mowas', + 'mowed', + 'mowra', + 'moxas', + 'moxie', + 'moyas', + 'moyle', + 'moyls', + 'mozed', + 'mozes', + 'mozos', + 'mpret', + 'mucho', + 'mucic', + 'mucid', + 'mucin', + 'mucks', + 'mucor', + 'mucro', + 'mudge', + 'mudir', + 'mudra', + 'muffs', + 'mufti', + 'mugga', + 'muggs', + 'muggy', + 'muhly', + 'muids', + 'muils', + 'muirs', + 'muist', + 'mujik', + 'mulct', + 'muled', + 'mules', + 'muley', + 'mulga', + 'mulie', + 'mulla', + 'mulls', + 'mulse', + 'mulsh', + 'mumms', + 'mumps', + 'mumsy', + 'mumus', + 'munga', + 'munge', + 'mungo', + 'mungs', + 'munis', + 'munts', + 'muntu', + 'muons', + 'muras', + 'mured', + 'mures', + 'murex', + 'murid', + 'murks', + 'murls', + 'murly', + 'murra', + 'murre', + 'murri', + 'murrs', + 'murry', + 'murti', + 'murva', + 'musar', + 'musca', + 'mused', + 'muser', + 'muses', + 'muset', + 'musha', + 'musit', + 'musks', + 'musos', + 'musse', + 'mussy', + 'musth', + 'musts', + 'mutch', + 'muted', + 'muter', + 'mutes', + 'mutha', + 'mutis', + 'muton', + 'mutts', + 'muxed', + 'muxes', + 'muzak', + 'muzzy', + 'mvule', + 'myall', + 'mylar', + 'mynah', + 'mynas', + 'myoid', + 'myoma', + 'myope', + 'myops', + 'myopy', + 'mysid', + 'mythi', + 'myths', + 'mythy', + 'myxos', + 'mzees', + 'naams', + 'naans', + 'nabes', + 'nabis', + 'nabks', + 'nabla', + 'nabob', + 'nache', + 'nacho', + 'nacre', + 'nadas', + 'naeve', + 'naevi', + 'naffs', + 'nagas', + 'naggy', + 'nagor', + 'nahal', + 'naiad', + 'naifs', + 'naiks', + 'nails', + 'naira', + 'nairu', + 'naked', + 'naker', + 'nakfa', + 'nalas', + 'naled', + 'nalla', + 'named', + 'namer', + 'names', + 'namma', + 'namus', + 'nanas', + 'nance', + 'nancy', + 'nandu', + 'nanna', + 'nanos', + 'nanua', + 'napas', + 'naped', + 'napes', + 'napoo', + 'nappa', + 'nappe', + 'nappy', + 'naras', + 'narco', + 'narcs', + 'nards', + 'nares', + 'naric', + 'naris', + 'narks', + 'narky', + 'narre', + 'nashi', + 'natch', + 'nates', + 'natis', + 'natty', + 'nauch', + 'naunt', + 'navar', + 'naves', + 'navew', + 'navvy', + 'nawab', + 'nazes', + 'nazir', + 'nazis', + 'nduja', + 'neafe', + 'neals', + 'neaps', + 'nears', + 'neath', + 'neats', + 'nebek', + 'nebel', + 'necks', + 'neddy', + 'needs', + 'neeld', + 'neele', + 'neemb', + 'neems', + 'neeps', + 'neese', + 'neeze', + 'negro', + 'negus', + 'neifs', + 'neist', + 'neive', + 'nelis', + 'nelly', + 'nemas', + 'nemns', + 'nempt', + 'nenes', + 'neons', + 'neper', + 'nepit', + 'neral', + 'nerds', + 'nerka', + 'nerks', + 'nerol', + 'nerts', + 'nertz', + 'nervy', + 'nests', + 'netes', + 'netop', + 'netts', + 'netty', + 'neuks', + 'neume', + 'neums', + 'nevel', + 'neves', + 'nevus', + 'newbs', + 'newed', + 'newel', + 'newie', + 'newsy', + 'newts', + 'nexts', + 'nexus', + 'ngaio', + 'ngana', + 'ngati', + 'ngoma', + 'ngwee', + 'nicad', + 'nicht', + 'nicks', + 'nicol', + 'nidal', + 'nided', + 'nides', + 'nidor', + 'nidus', + 'niefs', + 'nieve', + 'nifes', + 'niffs', + 'niffy', + 'nifty', + 'niger', + 'nighs', + 'nihil', + 'nikab', + 'nikah', + 'nikau', + 'nills', + 'nimbi', + 'nimbs', + 'nimps', + 'niner', + 'nines', + 'ninon', + 'nipas', + 'nippy', + 'niqab', + 'nirls', + 'nirly', + 'nisei', + 'nisse', + 'nisus', + 'niter', + 'nites', + 'nitid', + 'niton', + 'nitre', + 'nitro', + 'nitry', + 'nitty', + 'nival', + 'nixed', + 'nixer', + 'nixes', + 'nixie', + 'nizam', + 'nkosi', + 'noahs', + 'nobby', + 'nocks', + 'nodal', + 'noddy', + 'nodes', + 'nodus', + 'noels', + 'noggs', + 'nohow', + 'noils', + 'noily', + 'noint', + 'noirs', + 'noles', + 'nolls', + 'nolos', + 'nomas', + 'nomen', + 'nomes', + 'nomic', + 'nomoi', + 'nomos', + 'nonas', + 'nonce', + 'nones', + 'nonet', + 'nongs', + 'nonis', + 'nonny', + 'nonyl', + 'noobs', + 'nooit', + 'nooks', + 'nooky', + 'noons', + 'noops', + 'nopal', + 'noria', + 'noris', + 'norks', + 'norma', + 'norms', + 'nosed', + 'noser', + 'noses', + 'notal', + 'noted', + 'noter', + 'notes', + 'notum', + 'nould', + 'noule', + 'nouls', + 'nouns', + 'nouny', + 'noups', + 'novae', + 'novas', + 'novum', + 'noway', + 'nowed', + 'nowls', + 'nowts', + 'nowty', + 'noxal', + 'noxes', + 'noyau', + 'noyed', + 'noyes', + 'nubby', + 'nubia', + 'nucha', + 'nuddy', + 'nuder', + 'nudes', + 'nudie', + 'nudzh', + 'nuffs', + 'nugae', + 'nuked', + 'nukes', + 'nulla', + 'nulls', + 'numbs', + 'numen', + 'nummy', + 'nunny', + 'nurds', + 'nurdy', + 'nurls', + 'nurrs', + 'nutso', + 'nutsy', + 'nyaff', + 'nyala', + 'nying', + 'nyssa', + 'oaked', + 'oaker', + 'oakum', + 'oared', + 'oases', + 'oasis', + 'oasts', + 'oaten', + 'oater', + 'oaths', + 'oaves', + 'obang', + 'obeah', + 'obeli', + 'obeys', + 'obias', + 'obied', + 'obiit', + 'obits', + 'objet', + 'oboes', + 'obole', + 'oboli', + 'obols', + 'occam', + 'ocher', + 'oches', + 'ochre', + 'ochry', + 'ocker', + 'ocrea', + 'octad', + 'octan', + 'octas', + 'octyl', + 'oculi', + 'odahs', + 'odals', + 'odeon', + 'odeum', + 'odism', + 'odist', + 'odium', + 'odors', + 'odour', + 'odyle', + 'odyls', + 'ofays', + 'offed', + 'offie', + 'oflag', + 'ofter', + 'ogams', + 'ogeed', + 'ogees', + 'oggin', + 'ogham', + 'ogive', + 'ogled', + 'ogler', + 'ogles', + 'ogmic', + 'ogres', + 'ohias', + 'ohing', + 'ohmic', + 'ohone', + 'oidia', + 'oiled', + 'oiler', + 'oinks', + 'oints', + 'ojime', + 'okapi', + 'okays', + 'okehs', + 'okras', + 'oktas', + 'oldie', + 'oleic', + 'olein', + 'olent', + 'oleos', + 'oleum', + 'olios', + 'ollas', + 'ollav', + 'oller', + 'ollie', + 'ology', + 'olpae', + 'olpes', + 'omasa', + 'omber', + 'ombus', + 'omens', + 'omers', + 'omits', + 'omlah', + 'omovs', + 'omrah', + 'oncer', + 'onces', + 'oncet', + 'oncus', + 'onely', + 'oners', + 'onery', + 'onium', + 'onkus', + 'onlay', + 'onned', + 'ontic', + 'oobit', + 'oohed', + 'oomph', + 'oonts', + 'ooped', + 'oorie', + 'ooses', + 'ootid', + 'oozed', + 'oozes', + 'opahs', + 'opals', + 'opens', + 'opepe', + 'oping', + 'oppos', + 'opsin', + 'opted', + 'opter', + 'orach', + 'oracy', + 'orals', + 'orang', + 'orant', + 'orate', + 'orbed', + 'orcas', + 'orcin', + 'ordos', + 'oread', + 'orfes', + 'orgia', + 'orgic', + 'orgue', + 'oribi', + 'oriel', + 'orixa', + 'orles', + 'orlon', + 'orlop', + 'ormer', + 'ornis', + 'orpin', + 'orris', + 'ortho', + 'orval', + 'orzos', + 'oscar', + 'oshac', + 'osier', + 'osmic', + 'osmol', + 'ossia', + 'ostia', + 'otaku', + 'otary', + 'ottar', + 'ottos', + 'oubit', + 'oucht', + 'ouens', + 'ouija', + 'oulks', + 'oumas', + 'oundy', + 'oupas', + 'ouped', + 'ouphe', + 'ouphs', + 'ourie', + 'ousel', + 'ousts', + 'outby', + 'outed', + 'outre', + 'outro', + 'outta', + 'ouzel', + 'ouzos', + 'ovals', + 'ovels', + 'ovens', + 'overs', + 'ovist', + 'ovoli', + 'ovolo', + 'ovule', + 'owche', + 'owies', + 'owled', + 'owler', + 'owlet', + 'owned', + 'owres', + 'owrie', + 'owsen', + 'oxbow', + 'oxers', + 'oxeye', + 'oxids', + 'oxies', + 'oxime', + 'oxims', + 'oxlip', + 'oxter', + 'oyers', + 'ozeki', + 'ozzie', + 'paals', + 'paans', + 'pacas', + 'paced', + 'pacer', + 'paces', + 'pacey', + 'pacha', + 'packs', + 'pacos', + 'pacta', + 'pacts', + 'padis', + 'padle', + 'padma', + 'padre', + 'padri', + 'paean', + 'paedo', + 'paeon', + 'paged', + 'pager', + 'pages', + 'pagle', + 'pagod', + 'pagri', + 'paiks', + 'pails', + 'pains', + 'paire', + 'pairs', + 'paisa', + 'paise', + 'pakka', + 'palas', + 'palay', + 'palea', + 'paled', + 'pales', + 'palet', + 'palis', + 'palki', + 'palla', + 'palls', + 'pally', + 'palms', + 'palmy', + 'palpi', + 'palps', + 'palsa', + 'pampa', + 'panax', + 'pance', + 'panda', + 'pands', + 'pandy', + 'paned', + 'panes', + 'panga', + 'pangs', + 'panim', + 'panko', + 'panne', + 'panni', + 'panto', + 'pants', + 'panty', + 'paoli', + 'paolo', + 'papas', + 'papaw', + 'papes', + 'pappi', + 'pappy', + 'parae', + 'paras', + 'parch', + 'pardi', + 'pards', + 'pardy', + 'pared', + 'paren', + 'pareo', + 'pares', + 'pareu', + 'parev', + 'parge', + 'pargo', + 'paris', + 'parki', + 'parks', + 'parky', + 'parle', + 'parly', + 'parma', + 'parol', + 'parps', + 'parra', + 'parrs', + 'parti', + 'parts', + 'parve', + 'parvo', + 'paseo', + 'pases', + 'pasha', + 'pashm', + 'paska', + 'paspy', + 'passe', + 'pasts', + 'pated', + 'paten', + 'pater', + 'pates', + 'paths', + 'patin', + 'patka', + 'patly', + 'patte', + 'patus', + 'pauas', + 'pauls', + 'pavan', + 'paved', + 'paven', + 'paver', + 'paves', + 'pavid', + 'pavin', + 'pavis', + 'pawas', + 'pawaw', + 'pawed', + 'pawer', + 'pawks', + 'pawky', + 'pawls', + 'pawns', + 'paxes', + 'payed', + 'payor', + 'paysd', + 'peage', + 'peags', + 'peaks', + 'peaky', + 'peals', + 'peans', + 'peare', + 'pears', + 'peart', + 'pease', + 'peats', + 'peaty', + 'peavy', + 'peaze', + 'pebas', + 'pechs', + 'pecke', + 'pecks', + 'pecky', + 'pedes', + 'pedis', + 'pedro', + 'peece', + 'peeks', + 'peels', + 'peens', + 'peeoy', + 'peepe', + 'peeps', + 'peers', + 'peery', + 'peeve', + 'peggy', + 'peghs', + 'peins', + 'peise', + 'peize', + 'pekan', + 'pekes', + 'pekin', + 'pekoe', + 'pelas', + 'pelau', + 'peles', + 'pelfs', + 'pells', + 'pelma', + 'pelon', + 'pelta', + 'pelts', + 'pends', + 'pendu', + 'pened', + 'penes', + 'pengo', + 'penie', + 'penis', + 'penks', + 'penna', + 'penni', + 'pents', + 'peons', + 'peony', + 'pepla', + 'pepos', + 'peppy', + 'pepsi', + 'perai', + 'perce', + 'percs', + 'perdu', + 'perdy', + 'perea', + 'peres', + 'peris', + 'perks', + 'perms', + 'perns', + 'perog', + 'perps', + 'perry', + 'perse', + 'perst', + 'perts', + 'perve', + 'pervo', + 'pervs', + 'pervy', + 'pesos', + 'pests', + 'pesty', + 'petar', + 'peter', + 'petit', + 'petre', + 'petri', + 'petti', + 'petto', + 'pewee', + 'pewit', + 'peyse', + 'phage', + 'phang', + 'phare', + 'pharm', + 'pheer', + 'phene', + 'pheon', + 'phese', + 'phial', + 'phish', + 'phizz', + 'phlox', + 'phoca', + 'phono', + 'phons', + 'phots', + 'phpht', + 'phuts', + 'phyla', + 'phyle', + 'piani', + 'pians', + 'pibal', + 'pical', + 'picas', + 'piccy', + 'picks', + 'picot', + 'picra', + 'picul', + 'piend', + 'piers', + 'piert', + 'pieta', + 'piets', + 'piezo', + 'pight', + 'pigmy', + 'piing', + 'pikas', + 'pikau', + 'piked', + 'piker', + 'pikes', + 'pikey', + 'pikis', + 'pikul', + 'pilae', + 'pilaf', + 'pilao', + 'pilar', + 'pilau', + 'pilaw', + 'pilch', + 'pilea', + 'piled', + 'pilei', + 'piler', + 'piles', + 'pilis', + 'pills', + 'pilow', + 'pilum', + 'pilus', + 'pimas', + 'pimps', + 'pinas', + 'pined', + 'pines', + 'pingo', + 'pings', + 'pinko', + 'pinks', + 'pinna', + 'pinny', + 'pinon', + 'pinot', + 'pinta', + 'pints', + 'pinup', + 'pions', + 'piony', + 'pious', + 'pioye', + 'pioys', + 'pipal', + 'pipas', + 'piped', + 'pipes', + 'pipet', + 'pipis', + 'pipit', + 'pippy', + 'pipul', + 'pirai', + 'pirls', + 'pirns', + 'pirog', + 'pisco', + 'pises', + 'pisky', + 'pisos', + 'pissy', + 'piste', + 'pitas', + 'piths', + 'piton', + 'pitot', + 'pitta', + 'piums', + 'pixes', + 'pized', + 'pizes', + 'plaas', + 'plack', + 'plage', + 'plans', + 'plaps', + 'plash', + 'plasm', + 'plast', + 'plats', + 'platt', + 'platy', + 'playa', + 'plays', + 'pleas', + 'plebe', + 'plebs', + 'plena', + 'pleon', + 'plesh', + 'plews', + 'plica', + 'plies', + 'plims', + 'pling', + 'plink', + 'ploat', + 'plods', + 'plong', + 'plonk', + 'plook', + 'plops', + 'plots', + 'plotz', + 'plouk', + 'plows', + 'ploye', + 'ploys', + 'plues', + 'pluff', + 'plugs', + 'plums', + 'plumy', + 'pluot', + 'pluto', + 'plyer', + 'poach', + 'poaka', + 'poake', + 'poboy', + 'pocks', + 'pocky', + 'podal', + 'poddy', + 'podex', + 'podge', + 'podgy', + 'podia', + 'poems', + 'poeps', + 'poets', + 'pogey', + 'pogge', + 'pogos', + 'pohed', + 'poilu', + 'poind', + 'pokal', + 'poked', + 'pokes', + 'pokey', + 'pokie', + 'poled', + 'poler', + 'poles', + 'poley', + 'polio', + 'polis', + 'polje', + 'polks', + 'polls', + 'polly', + 'polos', + 'polts', + 'polys', + 'pombe', + 'pomes', + 'pommy', + 'pomos', + 'pomps', + 'ponce', + 'poncy', + 'ponds', + 'pones', + 'poney', + 'ponga', + 'pongo', + 'pongs', + 'pongy', + 'ponks', + 'ponts', + 'ponty', + 'ponzu', + 'poods', + 'pooed', + 'poofs', + 'poofy', + 'poohs', + 'pooja', + 'pooka', + 'pooks', + 'pools', + 'poons', + 'poops', + 'poopy', + 'poori', + 'poort', + 'poots', + 'poove', + 'poovy', + 'popes', + 'poppa', + 'popsy', + 'porae', + 'poral', + 'pored', + 'porer', + 'pores', + 'porge', + 'porgy', + 'porin', + 'porks', + 'porky', + 'porno', + 'porns', + 'porny', + 'porta', + 'ports', + 'porty', + 'posed', + 'poses', + 'posey', + 'posho', + 'posts', + 'potae', + 'potch', + 'poted', + 'potes', + 'potin', + 'potoo', + 'potsy', + 'potto', + 'potts', + 'potty', + 'pouff', + 'poufs', + 'pouke', + 'pouks', + 'poule', + 'poulp', + 'poult', + 'poupe', + 'poupt', + 'pours', + 'pouts', + 'powan', + 'powin', + 'pownd', + 'powns', + 'powny', + 'powre', + 'poxed', + 'poxes', + 'poynt', + 'poyou', + 'poyse', + 'pozzy', + 'praam', + 'prads', + 'prahu', + 'prams', + 'prana', + 'prang', + 'praos', + 'prase', + 'prate', + 'prats', + 'pratt', + 'praty', + 'praus', + 'prays', + 'predy', + 'preed', + 'prees', + 'preif', + 'prems', + 'premy', + 'prent', + 'preon', + 'preop', + 'preps', + 'presa', + 'prese', + 'prest', + 'preve', + 'prexy', + 'preys', + 'prial', + 'pricy', + 'prief', + 'prier', + 'pries', + 'prigs', + 'prill', + 'prima', + 'primi', + 'primp', + 'prims', + 'primy', + 'prink', + 'prion', + 'prise', + 'priss', + 'proas', + 'probs', + 'prods', + 'proem', + 'profs', + 'progs', + 'proin', + 'proke', + 'prole', + 'proll', + 'promo', + 'proms', + 'pronk', + 'props', + 'prore', + 'proso', + 'pross', + 'prost', + 'prosy', + 'proto', + 'proul', + 'prows', + 'proyn', + 'prunt', + 'pruta', + 'pryer', + 'pryse', + 'pseud', + 'pshaw', + 'psion', + 'psoae', + 'psoai', + 'psoas', + 'psora', + 'psych', + 'psyop', + 'pubco', + 'pubes', + 'pubis', + 'pucan', + 'pucer', + 'puces', + 'pucka', + 'pucks', + 'puddy', + 'pudge', + 'pudic', + 'pudor', + 'pudsy', + 'pudus', + 'puers', + 'puffa', + 'puffs', + 'puggy', + 'pugil', + 'puhas', + 'pujah', + 'pujas', + 'pukas', + 'puked', + 'puker', + 'pukes', + 'pukey', + 'pukka', + 'pukus', + 'pulao', + 'pulas', + 'puled', + 'puler', + 'pules', + 'pulik', + 'pulis', + 'pulka', + 'pulks', + 'pulli', + 'pulls', + 'pully', + 'pulmo', + 'pulps', + 'pulus', + 'pumas', + 'pumie', + 'pumps', + 'punas', + 'punce', + 'punga', + 'pungs', + 'punji', + 'punka', + 'punks', + 'punky', + 'punny', + 'punto', + 'punts', + 'punty', + 'pupae', + 'pupas', + 'pupus', + 'purda', + 'pured', + 'pures', + 'purin', + 'puris', + 'purls', + 'purpy', + 'purrs', + 'pursy', + 'purty', + 'puses', + 'pusle', + 'pussy', + 'putid', + 'puton', + 'putti', + 'putto', + 'putts', + 'puzel', + 'pwned', + 'pyats', + 'pyets', + 'pygal', + 'pyins', + 'pylon', + 'pyned', + 'pynes', + 'pyoid', + 'pyots', + 'pyral', + 'pyran', + 'pyres', + 'pyrex', + 'pyric', + 'pyros', + 'pyxed', + 'pyxes', + 'pyxie', + 'pyxis', + 'pzazz', + 'qadis', + 'qaids', + 'qajaq', + 'qanat', + 'qapik', + 'qibla', + 'qophs', + 'qorma', + 'quads', + 'quaff', + 'quags', + 'quair', + 'quais', + 'quaky', + 'quale', + 'quant', + 'quare', + 'quass', + 'quate', + 'quats', + 'quayd', + 'quays', + 'qubit', + 'quean', + 'queme', + 'quena', + 'quern', + 'queyn', + 'queys', + 'quich', + 'quids', + 'quiff', + 'quims', + 'quina', + 'quine', + 'quino', + 'quins', + 'quint', + 'quipo', + 'quips', + 'quipu', + 'quire', + 'quirt', + 'quist', + 'quits', + 'quoad', + 'quods', + 'quoif', + 'quoin', + 'quoit', + 'quoll', + 'quonk', + 'quops', + 'qursh', + 'quyte', + 'rabat', + 'rabic', + 'rabis', + 'raced', + 'races', + 'rache', + 'racks', + 'racon', + 'radge', + 'radix', + 'radon', + 'raffs', + 'rafts', + 'ragas', + 'ragde', + 'raged', + 'ragee', + 'rager', + 'rages', + 'ragga', + 'raggs', + 'raggy', + 'ragis', + 'ragus', + 'rahed', + 'rahui', + 'raias', + 'raids', + 'raiks', + 'raile', + 'rails', + 'raine', + 'rains', + 'raird', + 'raita', + 'raits', + 'rajas', + 'rajes', + 'raked', + 'rakee', + 'raker', + 'rakes', + 'rakia', + 'rakis', + 'rakus', + 'rales', + 'ramal', + 'ramee', + 'ramet', + 'ramie', + 'ramin', + 'ramis', + 'rammy', + 'ramps', + 'ramus', + 'ranas', + 'rance', + 'rands', + 'ranee', + 'ranga', + 'rangi', + 'rangs', + 'rangy', + 'ranid', + 'ranis', + 'ranke', + 'ranks', + 'rants', + 'raped', + 'raper', + 'rapes', + 'raphe', + 'rappe', + 'rared', + 'raree', + 'rares', + 'rarks', + 'rased', + 'raser', + 'rases', + 'rasps', + 'rasse', + 'rasta', + 'ratal', + 'ratan', + 'ratas', + 'ratch', + 'rated', + 'ratel', + 'rater', + 'rates', + 'ratha', + 'rathe', + 'raths', + 'ratoo', + 'ratos', + 'ratus', + 'rauns', + 'raupo', + 'raved', + 'ravel', + 'raver', + 'raves', + 'ravey', + 'ravin', + 'rawer', + 'rawin', + 'rawly', + 'rawns', + 'raxed', + 'raxes', + 'rayah', + 'rayas', + 'rayed', + 'rayle', + 'rayne', + 'razed', + 'razee', + 'razer', + 'razes', + 'razoo', + 'readd', + 'reads', + 'reais', + 'reaks', + 'realo', + 'reals', + 'reame', + 'reams', + 'reamy', + 'reans', + 'reaps', + 'rears', + 'reast', + 'reata', + 'reate', + 'reave', + 'rebbe', + 'rebec', + 'rebid', + 'rebit', + 'rebop', + 'rebuy', + 'recal', + 'recce', + 'recco', + 'reccy', + 'recit', + 'recks', + 'recon', + 'recta', + 'recti', + 'recto', + 'redan', + 'redds', + 'reddy', + 'reded', + 'redes', + 'redia', + 'redid', + 'redip', + 'redly', + 'redon', + 'redos', + 'redox', + 'redry', + 'redub', + 'redux', + 'redye', + 'reech', + 'reede', + 'reeds', + 'reefs', + 'reefy', + 'reeks', + 'reeky', + 'reels', + 'reens', + 'reest', + 'reeve', + 'refed', + 'refel', + 'reffo', + 'refis', + 'refix', + 'refly', + 'refry', + 'regar', + 'reges', + 'reggo', + 'regie', + 'regma', + 'regna', + 'regos', + 'regur', + 'rehem', + 'reifs', + 'reify', + 'reiki', + 'reiks', + 'reink', + 'reins', + 'reird', + 'reist', + 'reive', + 'rejig', + 'rejon', + 'reked', + 'rekes', + 'rekey', + 'relet', + 'relie', + 'relit', + 'rello', + 'reman', + 'remap', + 'remen', + 'remet', + 'remex', + 'remix', + 'renay', + 'rends', + 'reney', + 'renga', + 'renig', + 'renin', + 'renne', + 'renos', + 'rente', + 'rents', + 'reoil', + 'reorg', + 'repeg', + 'repin', + 'repla', + 'repos', + 'repot', + 'repps', + 'repro', + 'reran', + 'rerig', + 'resat', + 'resaw', + 'resay', + 'resee', + 'reses', + 'resew', + 'resid', + 'resit', + 'resod', + 'resow', + 'resto', + 'rests', + 'resty', + 'resus', + 'retag', + 'retax', + 'retem', + 'retia', + 'retie', + 'retox', + 'revet', + 'revie', + 'rewan', + 'rewax', + 'rewed', + 'rewet', + 'rewin', + 'rewon', + 'rewth', + 'rexes', + 'rezes', + 'rheas', + 'rheme', + 'rheum', + 'rhies', + 'rhime', + 'rhine', + 'rhody', + 'rhomb', + 'rhone', + 'rhumb', + 'rhyne', + 'rhyta', + 'riads', + 'rials', + 'riant', + 'riata', + 'ribas', + 'ribby', + 'ribes', + 'riced', + 'ricer', + 'rices', + 'ricey', + 'richt', + 'ricin', + 'ricks', + 'rides', + 'ridgy', + 'ridic', + 'riels', + 'riems', + 'rieve', + 'rifer', + 'riffs', + 'rifte', + 'rifts', + 'rifty', + 'riggs', + 'rigol', + 'riled', + 'riles', + 'riley', + 'rille', + 'rills', + 'rimae', + 'rimed', + 'rimer', + 'rimes', + 'rimus', + 'rinds', + 'rindy', + 'rines', + 'rings', + 'rinks', + 'rioja', + 'riots', + 'riped', + 'ripes', + 'ripps', + 'rises', + 'rishi', + 'risks', + 'risps', + 'risus', + 'rites', + 'ritts', + 'ritzy', + 'rivas', + 'rived', + 'rivel', + 'riven', + 'rives', + 'riyal', + 'rizas', + 'roads', + 'roams', + 'roans', + 'roars', + 'roary', + 'roate', + 'robed', + 'robes', + 'roble', + 'rocks', + 'roded', + 'rodes', + 'roguy', + 'rohes', + 'roids', + 'roils', + 'roily', + 'roins', + 'roist', + 'rojak', + 'rojis', + 'roked', + 'roker', + 'rokes', + 'rolag', + 'roles', + 'rolfs', + 'rolls', + 'romal', + 'roman', + 'romeo', + 'romps', + 'ronde', + 'rondo', + 'roneo', + 'rones', + 'ronin', + 'ronne', + 'ronte', + 'ronts', + 'roods', + 'roofs', + 'roofy', + 'rooks', + 'rooky', + 'rooms', + 'roons', + 'roops', + 'roopy', + 'roosa', + 'roose', + 'roots', + 'rooty', + 'roped', + 'roper', + 'ropes', + 'ropey', + 'roque', + 'roral', + 'rores', + 'roric', + 'rorid', + 'rorie', + 'rorts', + 'rorty', + 'rosed', + 'roses', + 'roset', + 'roshi', + 'rosin', + 'rosit', + 'rosti', + 'rosts', + 'rotal', + 'rotan', + 'rotas', + 'rotch', + 'roted', + 'rotes', + 'rotis', + 'rotls', + 'roton', + 'rotos', + 'rotte', + 'rouen', + 'roues', + 'roule', + 'rouls', + 'roums', + 'roups', + 'roupy', + 'roust', + 'routh', + 'routs', + 'roved', + 'roven', + 'roves', + 'rowan', + 'rowed', + 'rowel', + 'rowen', + 'rowie', + 'rowme', + 'rownd', + 'rowth', + 'rowts', + 'royne', + 'royst', + 'rozet', + 'rozit', + 'ruana', + 'rubai', + 'rubby', + 'rubel', + 'rubes', + 'rubin', + 'ruble', + 'rubli', + 'rubus', + 'ruche', + 'rucks', + 'rudas', + 'rudds', + 'rudes', + 'rudie', + 'rudis', + 'rueda', + 'ruers', + 'ruffe', + 'ruffs', + 'rugae', + 'rugal', + 'ruggy', + 'ruing', + 'ruins', + 'rukhs', + 'ruled', + 'rules', + 'rumal', + 'rumbo', + 'rumen', + 'rumes', + 'rumly', + 'rummy', + 'rumpo', + 'rumps', + 'rumpy', + 'runch', + 'runds', + 'runed', + 'runes', + 'rungs', + 'runic', + 'runny', + 'runts', + 'runty', + 'rupia', + 'rurps', + 'rurus', + 'rusas', + 'ruses', + 'rushy', + 'rusks', + 'rusma', + 'russe', + 'rusts', + 'ruths', + 'rutin', + 'rutty', + 'ryals', + 'rybat', + 'ryked', + 'rykes', + 'rymme', + 'rynds', + 'ryots', + 'ryper', + 'saags', + 'sabal', + 'sabed', + 'saber', + 'sabes', + 'sabha', + 'sabin', + 'sabir', + 'sable', + 'sabot', + 'sabra', + 'sabre', + 'sacks', + 'sacra', + 'saddo', + 'sades', + 'sadhe', + 'sadhu', + 'sadis', + 'sados', + 'sadza', + 'safed', + 'safes', + 'sagas', + 'sager', + 'sages', + 'saggy', + 'sagos', + 'sagum', + 'saheb', + 'sahib', + 'saice', + 'saick', + 'saics', + 'saids', + 'saiga', + 'sails', + 'saims', + 'saine', + 'sains', + 'sairs', + 'saist', + 'saith', + 'sajou', + 'sakai', + 'saker', + 'sakes', + 'sakia', + 'sakis', + 'sakti', + 'salal', + 'salat', + 'salep', + 'sales', + 'salet', + 'salic', + 'salix', + 'salle', + 'salmi', + 'salol', + 'salop', + 'salpa', + 'salps', + 'salse', + 'salto', + 'salts', + 'salue', + 'salut', + 'saman', + 'samas', + 'samba', + 'sambo', + 'samek', + 'samel', + 'samen', + 'sames', + 'samey', + 'samfu', + 'sammy', + 'sampi', + 'samps', + 'sands', + 'saned', + 'sanes', + 'sanga', + 'sangh', + 'sango', + 'sangs', + 'sanko', + 'sansa', + 'santo', + 'sants', + 'saola', + 'sapan', + 'sapid', + 'sapor', + 'saran', + 'sards', + 'sared', + 'saree', + 'sarge', + 'sargo', + 'sarin', + 'saris', + 'sarks', + 'sarky', + 'sarod', + 'saros', + 'sarus', + 'saser', + 'sasin', + 'sasse', + 'satai', + 'satay', + 'sated', + 'satem', + 'sates', + 'satis', + 'sauba', + 'sauch', + 'saugh', + 'sauls', + 'sault', + 'saunt', + 'saury', + 'sauts', + 'saved', + 'saver', + 'saves', + 'savey', + 'savin', + 'sawah', + 'sawed', + 'sawer', + 'saxes', + 'sayed', + 'sayer', + 'sayid', + 'sayne', + 'sayon', + 'sayst', + 'sazes', + 'scabs', + 'scads', + 'scaff', + 'scags', + 'scail', + 'scala', + 'scall', + 'scams', + 'scand', + 'scans', + 'scapa', + 'scape', + 'scapi', + 'scarp', + 'scars', + 'scart', + 'scath', + 'scats', + 'scatt', + 'scaud', + 'scaup', + 'scaur', + 'scaws', + 'sceat', + 'scena', + 'scend', + 'schav', + 'schmo', + 'schul', + 'schwa', + 'sclim', + 'scody', + 'scogs', + 'scoog', + 'scoot', + 'scopa', + 'scops', + 'scots', + 'scoug', + 'scoup', + 'scowp', + 'scows', + 'scrab', + 'scrae', + 'scrag', + 'scran', + 'scrat', + 'scraw', + 'scray', + 'scrim', + 'scrip', + 'scrob', + 'scrod', + 'scrog', + 'scrow', + 'scudi', + 'scudo', + 'scuds', + 'scuff', + 'scuft', + 'scugs', + 'sculk', + 'scull', + 'sculp', + 'sculs', + 'scums', + 'scups', + 'scurf', + 'scurs', + 'scuse', + 'scuta', + 'scute', + 'scuts', + 'scuzz', + 'scyes', + 'sdayn', + 'sdein', + 'seals', + 'seame', + 'seams', + 'seamy', + 'seans', + 'seare', + 'sears', + 'sease', + 'seats', + 'seaze', + 'sebum', + 'secco', + 'sechs', + 'sects', + 'seder', + 'sedes', + 'sedge', + 'sedgy', + 'sedum', + 'seeds', + 'seeks', + 'seeld', + 'seels', + 'seely', + 'seems', + 'seeps', + 'seepy', + 'seers', + 'sefer', + 'segar', + 'segni', + 'segno', + 'segol', + 'segos', + 'sehri', + 'seifs', + 'seils', + 'seine', + 'seirs', + 'seise', + 'seism', + 'seity', + 'seiza', + 'sekos', + 'sekts', + 'selah', + 'seles', + 'selfs', + 'sella', + 'selle', + 'sells', + 'selva', + 'semee', + 'semes', + 'semie', + 'semis', + 'senas', + 'sends', + 'senes', + 'sengi', + 'senna', + 'senor', + 'sensa', + 'sensi', + 'sente', + 'senti', + 'sents', + 'senvy', + 'senza', + 'sepad', + 'sepal', + 'sepic', + 'sepoy', + 'septa', + 'septs', + 'serac', + 'serai', + 'seral', + 'sered', + 'serer', + 'seres', + 'serfs', + 'serge', + 'seric', + 'serin', + 'serks', + 'seron', + 'serow', + 'serra', + 'serre', + 'serrs', + 'serry', + 'servo', + 'sesey', + 'sessa', + 'setae', + 'setal', + 'seton', + 'setts', + 'sewan', + 'sewar', + 'sewed', + 'sewel', + 'sewen', + 'sewin', + 'sexed', + 'sexer', + 'sexes', + 'sexto', + 'sexts', + 'seyen', + 'shads', + 'shags', + 'shahs', + 'shako', + 'shakt', + 'shalm', + 'shaly', + 'shama', + 'shams', + 'shand', + 'shans', + 'shaps', + 'sharn', + 'shash', + 'shaul', + 'shawm', + 'shawn', + 'shaws', + 'shaya', + 'shays', + 'shchi', + 'sheaf', + 'sheal', + 'sheas', + 'sheds', + 'sheel', + 'shend', + 'shent', + 'sheol', + 'sherd', + 'shere', + 'shero', + 'shets', + 'sheva', + 'shewn', + 'shews', + 'shiai', + 'shiel', + 'shier', + 'shies', + 'shill', + 'shily', + 'shims', + 'shins', + 'ships', + 'shirr', + 'shirs', + 'shish', + 'shiso', + 'shist', + 'shite', + 'shits', + 'shiur', + 'shiva', + 'shive', + 'shivs', + 'shlep', + 'shlub', + 'shmek', + 'shmoe', + 'shoat', + 'shoed', + 'shoer', + 'shoes', + 'shogi', + 'shogs', + 'shoji', + 'shojo', + 'shola', + 'shool', + 'shoon', + 'shoos', + 'shope', + 'shops', + 'shorl', + 'shote', + 'shots', + 'shott', + 'showd', + 'shows', + 'shoyu', + 'shred', + 'shris', + 'shrow', + 'shtik', + 'shtum', + 'shtup', + 'shule', + 'shuln', + 'shuls', + 'shuns', + 'shura', + 'shute', + 'shuts', + 'shwas', + 'shyer', + 'sials', + 'sibbs', + 'sibyl', + 'sices', + 'sicht', + 'sicko', + 'sicks', + 'sicky', + 'sidas', + 'sided', + 'sider', + 'sides', + 'sidha', + 'sidhe', + 'sidle', + 'sield', + 'siens', + 'sient', + 'sieth', + 'sieur', + 'sifts', + 'sighs', + 'sigil', + 'sigla', + 'signa', + 'signs', + 'sijos', + 'sikas', + 'siker', + 'sikes', + 'silds', + 'siled', + 'silen', + 'siler', + 'siles', + 'silex', + 'silks', + 'sills', + 'silos', + 'silts', + 'silty', + 'silva', + 'simar', + 'simas', + 'simba', + 'simis', + 'simps', + 'simul', + 'sinds', + 'sined', + 'sines', + 'sings', + 'sinhs', + 'sinks', + 'sinky', + 'sinus', + 'siped', + 'sipes', + 'sippy', + 'sired', + 'siree', + 'sires', + 'sirih', + 'siris', + 'siroc', + 'sirra', + 'sirup', + 'sisal', + 'sises', + 'sista', + 'sists', + 'sitar', + 'sited', + 'sites', + 'sithe', + 'sitka', + 'situp', + 'situs', + 'siver', + 'sixer', + 'sixes', + 'sixmo', + 'sixte', + 'sizar', + 'sized', + 'sizel', + 'sizer', + 'sizes', + 'skags', + 'skail', + 'skald', + 'skank', + 'skart', + 'skats', + 'skatt', + 'skaws', + 'skean', + 'skear', + 'skeds', + 'skeed', + 'skeef', + 'skeen', + 'skeer', + 'skees', + 'skeet', + 'skegg', + 'skegs', + 'skein', + 'skelf', + 'skell', + 'skelm', + 'skelp', + 'skene', + 'skens', + 'skeos', + 'skeps', + 'skers', + 'skets', + 'skews', + 'skids', + 'skied', + 'skies', + 'skiey', + 'skimo', + 'skims', + 'skink', + 'skins', + 'skint', + 'skios', + 'skips', + 'skirl', + 'skirr', + 'skite', + 'skits', + 'skive', + 'skivy', + 'sklim', + 'skoal', + 'skody', + 'skoff', + 'skogs', + 'skols', + 'skool', + 'skort', + 'skosh', + 'skran', + 'skrik', + 'skuas', + 'skugs', + 'skyed', + 'skyer', + 'skyey', + 'skyfs', + 'skyre', + 'skyrs', + 'skyte', + 'slabs', + 'slade', + 'slaes', + 'slags', + 'slaid', + 'slake', + 'slams', + 'slane', + 'slank', + 'slaps', + 'slart', + 'slats', + 'slaty', + 'slaws', + 'slays', + 'slebs', + 'sleds', + 'sleer', + 'slews', + 'sleys', + 'slier', + 'slily', + 'slims', + 'slipe', + 'slips', + 'slipt', + 'slish', + 'slits', + 'slive', + 'sloan', + 'slobs', + 'sloes', + 'slogs', + 'sloid', + 'slojd', + 'slomo', + 'sloom', + 'sloot', + 'slops', + 'slopy', + 'slorm', + 'slots', + 'slove', + 'slows', + 'sloyd', + 'slubb', + 'slubs', + 'slued', + 'slues', + 'sluff', + 'slugs', + 'sluit', + 'slums', + 'slurb', + 'slurs', + 'sluse', + 'sluts', + 'slyer', + 'slype', + 'smaak', + 'smaik', + 'smalm', + 'smalt', + 'smarm', + 'smaze', + 'smeek', + 'smees', + 'smeik', + 'smeke', + 'smerk', + 'smews', + 'smirr', + 'smirs', + 'smits', + 'smogs', + 'smoko', + 'smolt', + 'smoor', + 'smoot', + 'smore', + 'smorg', + 'smout', + 'smowt', + 'smugs', + 'smurs', + 'smush', + 'smuts', + 'snabs', + 'snafu', + 'snags', + 'snaps', + 'snarf', + 'snark', + 'snars', + 'snary', + 'snash', + 'snath', + 'snaws', + 'snead', + 'sneap', + 'snebs', + 'sneck', + 'sneds', + 'sneed', + 'snees', + 'snell', + 'snibs', + 'snick', + 'snies', + 'snift', + 'snigs', + 'snips', + 'snipy', + 'snirt', + 'snits', + 'snobs', + 'snods', + 'snoek', + 'snoep', + 'snogs', + 'snoke', + 'snood', + 'snook', + 'snool', + 'snoot', + 'snots', + 'snowk', + 'snows', + 'snubs', + 'snugs', + 'snush', + 'snyes', + 'soaks', + 'soaps', + 'soare', + 'soars', + 'soave', + 'sobas', + 'socas', + 'soces', + 'socko', + 'socks', + 'socle', + 'sodas', + 'soddy', + 'sodic', + 'sodom', + 'sofar', + 'sofas', + 'softa', + 'softs', + 'softy', + 'soger', + 'sohur', + 'soils', + 'soily', + 'sojas', + 'sojus', + 'sokah', + 'soken', + 'sokes', + 'sokol', + 'solah', + 'solan', + 'solas', + 'solde', + 'soldi', + 'soldo', + 'solds', + 'soled', + 'solei', + 'soler', + 'soles', + 'solon', + 'solos', + 'solum', + 'solus', + 'soman', + 'somas', + 'sonce', + 'sonde', + 'sones', + 'songs', + 'sonly', + 'sonne', + 'sonny', + 'sonse', + 'sonsy', + 'sooey', + 'sooks', + 'sooky', + 'soole', + 'sools', + 'sooms', + 'soops', + 'soote', + 'soots', + 'sophs', + 'sophy', + 'sopor', + 'soppy', + 'sopra', + 'soral', + 'soras', + 'sorbo', + 'sorbs', + 'sorda', + 'sordo', + 'sords', + 'sored', + 'soree', + 'sorel', + 'sorer', + 'sores', + 'sorex', + 'sorgo', + 'sorns', + 'sorra', + 'sorta', + 'sorts', + 'sorus', + 'soths', + 'sotol', + 'souce', + 'souct', + 'sough', + 'souks', + 'souls', + 'soums', + 'soups', + 'soupy', + 'sours', + 'souse', + 'souts', + 'sowar', + 'sowce', + 'sowed', + 'sowff', + 'sowfs', + 'sowle', + 'sowls', + 'sowms', + 'sownd', + 'sowne', + 'sowps', + 'sowse', + 'sowth', + 'soyas', + 'soyle', + 'soyuz', + 'sozin', + 'spacy', + 'spado', + 'spaed', + 'spaer', + 'spaes', + 'spags', + 'spahi', + 'spail', + 'spain', + 'spait', + 'spake', + 'spald', + 'spale', + 'spall', + 'spalt', + 'spams', + 'spane', + 'spang', + 'spans', + 'spard', + 'spars', + 'spart', + 'spate', + 'spats', + 'spaul', + 'spawl', + 'spaws', + 'spayd', + 'spays', + 'spaza', + 'spazz', + 'speal', + 'spean', + 'speat', + 'specs', + 'spect', + 'speel', + 'speer', + 'speil', + 'speir', + 'speks', + 'speld', + 'spelk', + 'speos', + 'spets', + 'speug', + 'spews', + 'spewy', + 'spial', + 'spica', + 'spick', + 'spics', + 'spide', + 'spier', + 'spies', + 'spiff', + 'spifs', + 'spiks', + 'spile', + 'spims', + 'spina', + 'spink', + 'spins', + 'spirt', + 'spiry', + 'spits', + 'spitz', + 'spivs', + 'splay', + 'splog', + 'spode', + 'spods', + 'spoom', + 'spoor', + 'spoot', + 'spork', + 'sposh', + 'spots', + 'sprad', + 'sprag', + 'sprat', + 'spred', + 'sprew', + 'sprit', + 'sprod', + 'sprog', + 'sprue', + 'sprug', + 'spuds', + 'spued', + 'spuer', + 'spues', + 'spugs', + 'spule', + 'spume', + 'spumy', + 'spurs', + 'sputa', + 'spyal', + 'spyre', + 'squab', + 'squaw', + 'squeg', + 'squid', + 'squit', + 'squiz', + 'stabs', + 'stade', + 'stags', + 'stagy', + 'staig', + 'stane', + 'stang', + 'staph', + 'staps', + 'starn', + 'starr', + 'stars', + 'stats', + 'staun', + 'staws', + 'stays', + 'stean', + 'stear', + 'stedd', + 'stede', + 'steds', + 'steek', + 'steem', + 'steen', + 'steil', + 'stela', + 'stele', + 'stell', + 'steme', + 'stems', + 'stend', + 'steno', + 'stens', + 'stent', + 'steps', + 'stept', + 'stere', + 'stets', + 'stews', + 'stewy', + 'steys', + 'stich', + 'stied', + 'sties', + 'stilb', + 'stile', + 'stime', + 'stims', + 'stimy', + 'stipa', + 'stipe', + 'stire', + 'stirk', + 'stirp', + 'stirs', + 'stive', + 'stivy', + 'stoae', + 'stoai', + 'stoas', + 'stoat', + 'stobs', + 'stoep', + 'stogy', + 'stoit', + 'stoln', + 'stoma', + 'stond', + 'stong', + 'stonk', + 'stonn', + 'stook', + 'stoor', + 'stope', + 'stops', + 'stopt', + 'stoss', + 'stots', + 'stott', + 'stoun', + 'stoup', + 'stour', + 'stown', + 'stowp', + 'stows', + 'strad', + 'strae', + 'strag', + 'strak', + 'strep', + 'strew', + 'stria', + 'strig', + 'strim', + 'strop', + 'strow', + 'stroy', + 'strum', + 'stubs', + 'stude', + 'studs', + 'stull', + 'stulm', + 'stumm', + 'stums', + 'stuns', + 'stupa', + 'stupe', + 'sture', + 'sturt', + 'styed', + 'styes', + 'styli', + 'stylo', + 'styme', + 'stymy', + 'styre', + 'styte', + 'subah', + 'subas', + 'subby', + 'suber', + 'subha', + 'succi', + 'sucks', + 'sucky', + 'sucre', + 'sudds', + 'sudor', + 'sudsy', + 'suede', + 'suent', + 'suers', + 'suete', + 'suets', + 'suety', + 'sugan', + 'sughs', + 'sugos', + 'suhur', + 'suids', + 'suint', + 'suits', + 'sujee', + 'sukhs', + 'sukuk', + 'sulci', + 'sulfa', + 'sulfo', + 'sulks', + 'sulph', + 'sulus', + 'sumis', + 'summa', + 'sumos', + 'sumph', + 'sumps', + 'sunis', + 'sunks', + 'sunna', + 'sunns', + 'sunup', + 'supes', + 'supra', + 'surah', + 'sural', + 'suras', + 'surat', + 'surds', + 'sured', + 'sures', + 'surfs', + 'surfy', + 'surgy', + 'surra', + 'sused', + 'suses', + 'susus', + 'sutor', + 'sutra', + 'sutta', + 'swabs', + 'swack', + 'swads', + 'swage', + 'swags', + 'swail', + 'swain', + 'swale', + 'swaly', + 'swamy', + 'swang', + 'swank', + 'swans', + 'swaps', + 'swapt', + 'sward', + 'sware', + 'swarf', + 'swart', + 'swats', + 'swayl', + 'sways', + 'sweal', + 'swede', + 'sweed', + 'sweel', + 'sweer', + 'swees', + 'sweir', + 'swelt', + 'swerf', + 'sweys', + 'swies', + 'swigs', + 'swile', + 'swims', + 'swink', + 'swipe', + 'swire', + 'swiss', + 'swith', + 'swits', + 'swive', + 'swizz', + 'swobs', + 'swole', + 'swoln', + 'swops', + 'swopt', + 'swots', + 'swoun', + 'sybbe', + 'sybil', + 'syboe', + 'sybow', + 'sycee', + 'syces', + 'sycon', + 'syens', + 'syker', + 'sykes', + 'sylis', + 'sylph', + 'sylva', + 'symar', + 'synch', + 'syncs', + 'synds', + 'syned', + 'synes', + 'synth', + 'syped', + 'sypes', + 'syphs', + 'syrah', + 'syren', + 'sysop', + 'sythe', + 'syver', + 'taals', + 'taata', + 'taber', + 'tabes', + 'tabid', + 'tabis', + 'tabla', + 'tabor', + 'tabun', + 'tabus', + 'tacan', + 'taces', + 'tacet', + 'tache', + 'tacho', + 'tachs', + 'tacks', + 'tacos', + 'tacts', + 'taels', + 'tafia', + 'taggy', + 'tagma', + 'tahas', + 'tahrs', + 'taiga', + 'taigs', + 'taiko', + 'tails', + 'tains', + 'taira', + 'taish', + 'taits', + 'tajes', + 'takas', + 'takes', + 'takhi', + 'takin', + 'takis', + 'takky', + 'talak', + 'talaq', + 'talar', + 'talas', + 'talcs', + 'talcy', + 'talea', + 'taler', + 'tales', + 'talks', + 'talky', + 'talls', + 'talma', + 'talpa', + 'taluk', + 'talus', + 'tamal', + 'tamed', + 'tames', + 'tamin', + 'tamis', + 'tammy', + 'tamps', + 'tanas', + 'tanga', + 'tangi', + 'tangs', + 'tanhs', + 'tanka', + 'tanks', + 'tanky', + 'tanna', + 'tansy', + 'tanti', + 'tanto', + 'tanty', + 'tapas', + 'taped', + 'tapen', + 'tapes', + 'tapet', + 'tapis', + 'tappa', + 'tapus', + 'taras', + 'tardo', + 'tared', + 'tares', + 'targa', + 'targe', + 'tarns', + 'taroc', + 'tarok', + 'taros', + 'tarps', + 'tarre', + 'tarry', + 'tarsi', + 'tarts', + 'tarty', + 'tasar', + 'tased', + 'taser', + 'tases', + 'tasks', + 'tassa', + 'tasse', + 'tasso', + 'tatar', + 'tater', + 'tates', + 'taths', + 'tatie', + 'tatou', + 'tatts', + 'tatus', + 'taube', + 'tauld', + 'tauon', + 'taupe', + 'tauts', + 'tavah', + 'tavas', + 'taver', + 'tawai', + 'tawas', + 'tawed', + 'tawer', + 'tawie', + 'tawse', + 'tawts', + 'taxed', + 'taxer', + 'taxes', + 'taxis', + 'taxol', + 'taxon', + 'taxor', + 'taxus', + 'tayra', + 'tazza', + 'tazze', + 'teade', + 'teads', + 'teaed', + 'teaks', + 'teals', + 'teams', + 'tears', + 'teats', + 'teaze', + 'techs', + 'techy', + 'tecta', + 'teels', + 'teems', + 'teend', + 'teene', + 'teens', + 'teeny', + 'teers', + 'teffs', + 'teggs', + 'tegua', + 'tegus', + 'tehrs', + 'teiid', + 'teils', + 'teind', + 'teins', + 'telae', + 'telco', + 'teles', + 'telex', + 'telia', + 'telic', + 'tells', + 'telly', + 'teloi', + 'telos', + 'temed', + 'temes', + 'tempi', + 'temps', + 'tempt', + 'temse', + 'tench', + 'tends', + 'tendu', + 'tenes', + 'tenge', + 'tenia', + 'tenne', + 'tenno', + 'tenny', + 'tenon', + 'tents', + 'tenty', + 'tenue', + 'tepal', + 'tepas', + 'tepoy', + 'terai', + 'teras', + 'terce', + 'terek', + 'teres', + 'terfe', + 'terfs', + 'terga', + 'terms', + 'terne', + 'terns', + 'terry', + 'terts', + 'tesla', + 'testa', + 'teste', + 'tests', + 'tetes', + 'teths', + 'tetra', + 'tetri', + 'teuch', + 'teugh', + 'tewed', + 'tewel', + 'tewit', + 'texas', + 'texes', + 'texts', + 'thack', + 'thagi', + 'thaim', + 'thale', + 'thali', + 'thana', + 'thane', + 'thang', + 'thans', + 'thanx', + 'tharm', + 'thars', + 'thaws', + 'thawy', + 'thebe', + 'theca', + 'theed', + 'theek', + 'thees', + 'thegn', + 'theic', + 'thein', + 'thelf', + 'thema', + 'thens', + 'theow', + 'therm', + 'thesp', + 'thete', + 'thews', + 'thewy', + 'thigs', + 'thilk', + 'thill', + 'thine', + 'thins', + 'thiol', + 'thirl', + 'thoft', + 'thole', + 'tholi', + 'thoro', + 'thorp', + 'thous', + 'thowl', + 'thrae', + 'thraw', + 'thrid', + 'thrip', + 'throe', + 'thuds', + 'thugs', + 'thuja', + 'thunk', + 'thurl', + 'thuya', + 'thymi', + 'thymy', + 'tians', + 'tiars', + 'tical', + 'ticca', + 'ticed', + 'tices', + 'tichy', + 'ticks', + 'ticky', + 'tiddy', + 'tided', + 'tides', + 'tiers', + 'tiffs', + 'tifos', + 'tifts', + 'tiges', + 'tigon', + 'tikas', + 'tikes', + 'tikis', + 'tikka', + 'tilak', + 'tiled', + 'tiler', + 'tiles', + 'tills', + 'tilly', + 'tilth', + 'tilts', + 'timbo', + 'timed', + 'times', + 'timon', + 'timps', + 'tinas', + 'tinct', + 'tinds', + 'tinea', + 'tined', + 'tines', + 'tinge', + 'tings', + 'tinks', + 'tinny', + 'tints', + 'tinty', + 'tipis', + 'tippy', + 'tired', + 'tires', + 'tirls', + 'tiros', + 'tirrs', + 'titch', + 'titer', + 'titis', + 'titre', + 'titty', + 'titup', + 'tiyin', + 'tiyns', + 'tizes', + 'tizzy', + 'toads', + 'toady', + 'toaze', + 'tocks', + 'tocky', + 'tocos', + 'todde', + 'toeas', + 'toffs', + 'toffy', + 'tofts', + 'tofus', + 'togae', + 'togas', + 'toged', + 'toges', + 'togue', + 'tohos', + 'toile', + 'toils', + 'toing', + 'toise', + 'toits', + 'tokay', + 'toked', + 'toker', + 'tokes', + 'tokos', + 'tolan', + 'tolar', + 'tolas', + 'toled', + 'toles', + 'tolls', + 'tolly', + 'tolts', + 'tolus', + 'tolyl', + 'toman', + 'tombs', + 'tomes', + 'tomia', + 'tommy', + 'tomos', + 'tondi', + 'tondo', + 'toned', + 'toner', + 'tones', + 'toney', + 'tongs', + 'tonka', + 'tonks', + 'tonne', + 'tonus', + 'tools', + 'tooms', + 'toons', + 'toots', + 'toped', + 'topee', + 'topek', + 'toper', + 'topes', + 'tophe', + 'tophi', + 'tophs', + 'topis', + 'topoi', + 'topos', + 'toppy', + 'toque', + 'torah', + 'toran', + 'toras', + 'torcs', + 'tores', + 'toric', + 'torii', + 'toros', + 'torot', + 'torrs', + 'torse', + 'torsi', + 'torsk', + 'torta', + 'torte', + 'torts', + 'tosas', + 'tosed', + 'toses', + 'toshy', + 'tossy', + 'toted', + 'toter', + 'totes', + 'totty', + 'touks', + 'touns', + 'tours', + 'touse', + 'tousy', + 'touts', + 'touze', + 'touzy', + 'towed', + 'towie', + 'towns', + 'towny', + 'towse', + 'towsy', + 'towts', + 'towze', + 'towzy', + 'toyed', + 'toyer', + 'toyon', + 'toyos', + 'tozed', + 'tozes', + 'tozie', + 'trabs', + 'trads', + 'tragi', + 'traik', + 'trams', + 'trank', + 'tranq', + 'trans', + 'trant', + 'trape', + 'traps', + 'trapt', + 'trass', + 'trats', + 'tratt', + 'trave', + 'trayf', + 'trays', + 'treck', + 'treed', + 'treen', + 'trees', + 'trefa', + 'treif', + 'treks', + 'trema', + 'trems', + 'tress', + 'trest', + 'trets', + 'trews', + 'treyf', + 'treys', + 'triac', + 'tride', + 'trier', + 'tries', + 'triff', + 'trigo', + 'trigs', + 'trike', + 'trild', + 'trill', + 'trims', + 'trine', + 'trins', + 'triol', + 'trior', + 'trios', + 'trips', + 'tripy', + 'trist', + 'troad', + 'troak', + 'troat', + 'trock', + 'trode', + 'trods', + 'trogs', + 'trois', + 'troke', + 'tromp', + 'trona', + 'tronc', + 'trone', + 'tronk', + 'trons', + 'trooz', + 'troth', + 'trots', + 'trows', + 'troys', + 'trued', + 'trues', + 'trugo', + 'trugs', + 'trull', + 'tryer', + 'tryke', + 'tryma', + 'tryps', + 'tsade', + 'tsadi', + 'tsars', + 'tsked', + 'tsuba', + 'tsubo', + 'tuans', + 'tuart', + 'tuath', + 'tubae', + 'tubar', + 'tubas', + 'tubby', + 'tubed', + 'tubes', + 'tucks', + 'tufas', + 'tuffe', + 'tuffs', + 'tufts', + 'tufty', + 'tugra', + 'tuile', + 'tuina', + 'tuism', + 'tuktu', + 'tules', + 'tulpa', + 'tulsi', + 'tumid', + 'tummy', + 'tumps', + 'tumpy', + 'tunas', + 'tunds', + 'tuned', + 'tuner', + 'tunes', + 'tungs', + 'tunny', + 'tupek', + 'tupik', + 'tuple', + 'tuque', + 'turds', + 'turfs', + 'turfy', + 'turks', + 'turme', + 'turms', + 'turns', + 'turnt', + 'turps', + 'turrs', + 'tushy', + 'tusks', + 'tusky', + 'tutee', + 'tutti', + 'tutty', + 'tutus', + 'tuxes', + 'tuyer', + 'twaes', + 'twain', + 'twals', + 'twank', + 'twats', + 'tways', + 'tweel', + 'tween', + 'tweep', + 'tweer', + 'twerk', + 'twerp', + 'twier', + 'twigs', + 'twill', + 'twilt', + 'twink', + 'twins', + 'twiny', + 'twire', + 'twirp', + 'twite', + 'twits', + 'twoer', + 'twyer', + 'tyees', + 'tyers', + 'tyiyn', + 'tykes', + 'tyler', + 'tymps', + 'tynde', + 'tyned', + 'tynes', + 'typal', + 'typed', + 'types', + 'typey', + 'typic', + 'typos', + 'typps', + 'typto', + 'tyran', + 'tyred', + 'tyres', + 'tyros', + 'tythe', + 'tzars', + 'udals', + 'udons', + 'ugali', + 'ugged', + 'uhlan', + 'uhuru', + 'ukase', + 'ulama', + 'ulans', + 'ulema', + 'ulmin', + 'ulnad', + 'ulnae', + 'ulnar', + 'ulnas', + 'ulpan', + 'ulvas', + 'ulyie', + 'ulzie', + 'umami', + 'umbel', + 'umber', + 'umble', + 'umbos', + 'umbre', + 'umiac', + 'umiak', + 'umiaq', + 'ummah', + 'ummas', + 'ummed', + 'umped', + 'umphs', + 'umpie', + 'umpty', + 'umrah', + 'umras', + 'unais', + 'unapt', + 'unarm', + 'unary', + 'unaus', + 'unbag', + 'unban', + 'unbar', + 'unbed', + 'unbid', + 'unbox', + 'uncap', + 'unces', + 'uncia', + 'uncos', + 'uncoy', + 'uncus', + 'undam', + 'undee', + 'undos', + 'undug', + 'uneth', + 'unfix', + 'ungag', + 'unget', + 'ungod', + 'ungot', + 'ungum', + 'unhat', + 'unhip', + 'unica', + 'units', + 'unjam', + 'unked', + 'unket', + 'unkid', + 'unlaw', + 'unlay', + 'unled', + 'unlet', + 'unlid', + 'unman', + 'unmew', + 'unmix', + 'unpay', + 'unpeg', + 'unpen', + 'unpin', + 'unred', + 'unrid', + 'unrig', + 'unrip', + 'unsaw', + 'unsay', + 'unsee', + 'unsew', + 'unsex', + 'unsod', + 'untax', + 'untin', + 'unwet', + 'unwit', + 'unwon', + 'upbow', + 'upbye', + 'updos', + 'updry', + 'upend', + 'upjet', + 'uplay', + 'upled', + 'uplit', + 'upped', + 'upran', + 'uprun', + 'upsee', + 'upsey', + 'uptak', + 'upter', + 'uptie', + 'uraei', + 'urali', + 'uraos', + 'urare', + 'urari', + 'urase', + 'urate', + 'urbex', + 'urbia', + 'urdee', + 'ureal', + 'ureas', + 'uredo', + 'ureic', + 'urena', + 'urent', + 'urged', + 'urger', + 'urges', + 'urial', + 'urite', + 'urman', + 'urnal', + 'urned', + 'urped', + 'ursae', + 'ursid', + 'urson', + 'urubu', + 'urvas', + 'users', + 'usnea', + 'usque', + 'usure', + 'usury', + 'uteri', + 'uveal', + 'uveas', + 'uvula', + 'vacua', + 'vaded', + 'vades', + 'vagal', + 'vagus', + 'vails', + 'vaire', + 'vairs', + 'vairy', + 'vakas', + 'vakil', + 'vales', + 'valis', + 'valse', + 'vamps', + 'vampy', + 'vanda', + 'vaned', + 'vanes', + 'vangs', + 'vants', + 'vaped', + 'vaper', + 'vapes', + 'varan', + 'varas', + 'vardy', + 'varec', + 'vares', + 'varia', + 'varix', + 'varna', + 'varus', + 'varve', + 'vasal', + 'vases', + 'vasts', + 'vasty', + 'vatic', + 'vatus', + 'vauch', + 'vaute', + 'vauts', + 'vawte', + 'vaxes', + 'veale', + 'veals', + 'vealy', + 'veena', + 'veeps', + 'veers', + 'veery', + 'vegas', + 'veges', + 'vegie', + 'vegos', + 'vehme', + 'veils', + 'veily', + 'veins', + 'veiny', + 'velar', + 'velds', + 'veldt', + 'veles', + 'vells', + 'velum', + 'venae', + 'venal', + 'vends', + 'vendu', + 'veney', + 'venge', + 'venin', + 'vents', + 'venus', + 'verbs', + 'verra', + 'verry', + 'verst', + 'verts', + 'vertu', + 'vespa', + 'vesta', + 'vests', + 'vetch', + 'vexed', + 'vexer', + 'vexes', + 'vexil', + 'vezir', + 'vials', + 'viand', + 'vibes', + 'vibex', + 'vibey', + 'viced', + 'vices', + 'vichy', + 'viers', + 'views', + 'viewy', + 'vifda', + 'viffs', + 'vigas', + 'vigia', + 'vilde', + 'viler', + 'villi', + 'vills', + 'vimen', + 'vinal', + 'vinas', + 'vinca', + 'vined', + 'viner', + 'vines', + 'vinew', + 'vinic', + 'vinos', + 'vints', + 'viold', + 'viols', + 'vired', + 'vireo', + 'vires', + 'virga', + 'virge', + 'virid', + 'virls', + 'virtu', + 'visas', + 'vised', + 'vises', + 'visie', + 'visne', + 'vison', + 'visto', + 'vitae', + 'vitas', + 'vitex', + 'vitro', + 'vitta', + 'vivas', + 'vivat', + 'vivda', + 'viver', + 'vives', + 'vizir', + 'vizor', + 'vleis', + 'vlies', + 'vlogs', + 'voars', + 'vocab', + 'voces', + 'voddy', + 'vodou', + 'vodun', + 'voema', + 'vogie', + 'voids', + 'voile', + 'voips', + 'volae', + 'volar', + 'voled', + 'voles', + 'volet', + 'volks', + 'volta', + 'volte', + 'volti', + 'volts', + 'volva', + 'volve', + 'vomer', + 'voted', + 'votes', + 'vouge', + 'voulu', + 'vowed', + 'vower', + 'voxel', + 'vozhd', + 'vraic', + 'vrils', + 'vroom', + 'vrous', + 'vrouw', + 'vrows', + 'vuggs', + 'vuggy', + 'vughs', + 'vughy', + 'vulgo', + 'vulns', + 'vulva', + 'vutty', + 'waacs', + 'wacke', + 'wacko', + 'wacks', + 'wadds', + 'waddy', + 'waded', + 'wader', + 'wades', + 'wadge', + 'wadis', + 'wadts', + 'waffs', + 'wafts', + 'waged', + 'wages', + 'wagga', + 'wagyu', + 'wahoo', + 'waide', + 'waifs', + 'waift', + 'wails', + 'wains', + 'wairs', + 'waite', + 'waits', + 'wakas', + 'waked', + 'waken', + 'waker', + 'wakes', + 'wakfs', + 'waldo', + 'walds', + 'waled', + 'waler', + 'wales', + 'walie', + 'walis', + 'walks', + 'walla', + 'walls', + 'wally', + 'walty', + 'wamed', + 'wames', + 'wamus', + 'wands', + 'waned', + 'wanes', + 'waney', + 'wangs', + 'wanks', + 'wanky', + 'wanle', + 'wanly', + 'wanna', + 'wants', + 'wanty', + 'wanze', + 'waqfs', + 'warbs', + 'warby', + 'wards', + 'wared', + 'wares', + 'warez', + 'warks', + 'warms', + 'warns', + 'warps', + 'warre', + 'warst', + 'warts', + 'wases', + 'washy', + 'wasms', + 'wasps', + 'waspy', + 'wasts', + 'watap', + 'watts', + 'wauff', + 'waugh', + 'wauks', + 'waulk', + 'wauls', + 'waurs', + 'waved', + 'waves', + 'wavey', + 'wawas', + 'wawes', + 'wawls', + 'waxed', + 'waxer', + 'waxes', + 'wayed', + 'wazir', + 'wazoo', + 'weald', + 'weals', + 'weamb', + 'weans', + 'wears', + 'webby', + 'weber', + 'wecht', + 'wedel', + 'wedgy', + 'weeds', + 'weeke', + 'weeks', + 'weels', + 'weems', + 'weens', + 'weeny', + 'weeps', + 'weepy', + 'weest', + 'weete', + 'weets', + 'wefte', + 'wefts', + 'weids', + 'weils', + 'weirs', + 'weise', + 'weize', + 'wekas', + 'welds', + 'welke', + 'welks', + 'welkt', + 'wells', + 'welly', + 'welts', + 'wembs', + 'wends', + 'wenge', + 'wenny', + 'wents', + 'weros', + 'wersh', + 'wests', + 'wetas', + 'wetly', + 'wexed', + 'wexes', + 'whamo', + 'whams', + 'whang', + 'whaps', + 'whare', + 'whata', + 'whats', + 'whaup', + 'whaur', + 'wheal', + 'whear', + 'wheen', + 'wheep', + 'wheft', + 'whelk', + 'whelm', + 'whens', + 'whets', + 'whews', + 'wheys', + 'whids', + 'whift', + 'whigs', + 'whilk', + 'whims', + 'whins', + 'whios', + 'whips', + 'whipt', + 'whirr', + 'whirs', + 'whish', + 'whiss', + 'whist', + 'whits', + 'whity', + 'whizz', + 'whomp', + 'whoof', + 'whoot', + 'whops', + 'whore', + 'whorl', + 'whort', + 'whoso', + 'whows', + 'whump', + 'whups', + 'whyda', + 'wicca', + 'wicks', + 'wicky', + 'widdy', + 'wides', + 'wiels', + 'wifed', + 'wifes', + 'wifey', + 'wifie', + 'wifty', + 'wigan', + 'wigga', + 'wiggy', + 'wikis', + 'wilco', + 'wilds', + 'wiled', + 'wiles', + 'wilga', + 'wilis', + 'wilja', + 'wills', + 'wilts', + 'wimps', + 'winds', + 'wined', + 'wines', + 'winey', + 'winge', + 'wings', + 'wingy', + 'winks', + 'winna', + 'winns', + 'winos', + 'winze', + 'wiped', + 'wiper', + 'wipes', + 'wired', + 'wirer', + 'wires', + 'wirra', + 'wised', + 'wises', + 'wisha', + 'wisht', + 'wisps', + 'wists', + 'witan', + 'wited', + 'wites', + 'withe', + 'withs', + 'withy', + 'wived', + 'wiver', + 'wives', + 'wizen', + 'wizes', + 'woads', + 'woald', + 'wocks', + 'wodge', + 'woful', + 'wojus', + 'woker', + 'wokka', + 'wolds', + 'wolfs', + 'wolly', + 'wolve', + 'wombs', + 'womby', + 'womyn', + 'wonga', + 'wongi', + 'wonks', + 'wonky', + 'wonts', + 'woods', + 'wooed', + 'woofs', + 'woofy', + 'woold', + 'wools', + 'woons', + 'woops', + 'woopy', + 'woose', + 'woosh', + 'wootz', + 'words', + 'works', + 'worms', + 'wormy', + 'worts', + 'wowed', + 'wowee', + 'woxen', + 'wrang', + 'wraps', + 'wrapt', + 'wrast', + 'wrate', + 'wrawl', + 'wrens', + 'wrick', + 'wried', + 'wrier', + 'wries', + 'writs', + 'wroke', + 'wroot', + 'wroth', + 'wryer', + 'wuddy', + 'wudus', + 'wulls', + 'wurst', + 'wuses', + 'wushu', + 'wussy', + 'wuxia', + 'wyled', + 'wyles', + 'wynds', + 'wynns', + 'wyted', + 'wytes', + 'xebec', + 'xenia', + 'xenic', + 'xenon', + 'xeric', + 'xerox', + 'xerus', + 'xoana', + 'xrays', + 'xylan', + 'xylem', + 'xylic', + 'xylol', + 'xylyl', + 'xysti', + 'xysts', + 'yaars', + 'yabas', + 'yabba', + 'yabby', + 'yacca', + 'yacka', + 'yacks', + 'yaffs', + 'yager', + 'yages', + 'yagis', + 'yahoo', + 'yaird', + 'yakka', + 'yakow', + 'yales', + 'yamen', + 'yampy', + 'yamun', + 'yangs', + 'yanks', + 'yapok', + 'yapon', + 'yapps', + 'yappy', + 'yarak', + 'yarco', + 'yards', + 'yarer', + 'yarfa', + 'yarks', + 'yarns', + 'yarrs', + 'yarta', + 'yarto', + 'yates', + 'yauds', + 'yauld', + 'yaups', + 'yawed', + 'yawey', + 'yawls', + 'yawns', + 'yawny', + 'yawps', + 'ybore', + 'yclad', + 'ycled', + 'ycond', + 'ydrad', + 'ydred', + 'yeads', + 'yeahs', + 'yealm', + 'yeans', + 'yeard', + 'years', + 'yecch', + 'yechs', + 'yechy', + 'yedes', + 'yeeds', + 'yeesh', + 'yeggs', + 'yelks', + 'yells', + 'yelms', + 'yelps', + 'yelts', + 'yenta', + 'yente', + 'yerba', + 'yerds', + 'yerks', + 'yeses', + 'yesks', + 'yests', + 'yesty', + 'yetis', + 'yetts', + 'yeuks', + 'yeuky', + 'yeven', + 'yeves', + 'yewen', + 'yexed', + 'yexes', + 'yfere', + 'yiked', + 'yikes', + 'yills', + 'yince', + 'yipes', + 'yippy', + 'yirds', + 'yirks', + 'yirrs', + 'yirth', + 'yites', + 'yitie', + 'ylems', + 'ylike', + 'ylkes', + 'ymolt', + 'ympes', + 'yobbo', + 'yobby', + 'yocks', + 'yodel', + 'yodhs', + 'yodle', + 'yogas', + 'yogee', + 'yoghs', + 'yogic', + 'yogin', + 'yogis', + 'yoick', + 'yojan', + 'yoked', + 'yokel', + 'yoker', + 'yokes', + 'yokul', + 'yolks', + 'yolky', + 'yomim', + 'yomps', + 'yonic', + 'yonis', + 'yonks', + 'yoofs', + 'yoops', + 'yores', + 'yorks', + 'yorps', + 'youks', + 'yourn', + 'yours', + 'yourt', + 'youse', + 'yowed', + 'yowes', + 'yowie', + 'yowls', + 'yowza', + 'yrapt', + 'yrent', + 'yrivd', + 'yrneh', + 'ysame', + 'ytost', + 'yuans', + 'yucas', + 'yucca', + 'yucch', + 'yucko', + 'yucks', + 'yucky', + 'yufts', + 'yugas', + 'yuked', + 'yukes', + 'yukky', + 'yukos', + 'yulan', + 'yules', + 'yummo', + 'yummy', + 'yumps', + 'yupon', + 'yuppy', + 'yurta', + 'yurts', + 'yuzus', + 'zabra', + 'zacks', + 'zaida', + 'zaidy', + 'zaire', + 'zakat', + 'zaman', + 'zambo', + 'zamia', + 'zanja', + 'zante', + 'zanza', + 'zanze', + 'zappy', + 'zarfs', + 'zaris', + 'zatis', + 'zaxes', + 'zayin', + 'zazen', + 'zeals', + 'zebec', + 'zebub', + 'zebus', + 'zedas', + 'zeins', + 'zendo', + 'zerda', + 'zerks', + 'zeros', + 'zests', + 'zetas', + 'zexes', + 'zezes', + 'zhomo', + 'zibet', + 'ziffs', + 'zigan', + 'zilas', + 'zilch', + 'zilla', + 'zills', + 'zimbi', + 'zimbs', + 'zinco', + 'zincs', + 'zincy', + 'zineb', + 'zines', + 'zings', + 'zingy', + 'zinke', + 'zinky', + 'zippo', + 'zippy', + 'ziram', + 'zitis', + 'zizel', + 'zizit', + 'zlote', + 'zloty', + 'zoaea', + 'zobos', + 'zobus', + 'zocco', + 'zoeae', + 'zoeal', + 'zoeas', + 'zoism', + 'zoist', + 'zombi', + 'zonae', + 'zonda', + 'zoned', + 'zoner', + 'zones', + 'zonks', + 'zooea', + 'zooey', + 'zooid', + 'zooks', + 'zooms', + 'zoons', + 'zooty', + 'zoppa', + 'zoppo', + 'zoril', + 'zoris', + 'zorro', + 'zouks', + 'zowee', + 'zowie', + 'zulus', + 'zupan', + 'zupas', + 'zuppa', + 'zurfs', + 'zuzim', + 'zygal', + 'zygon', + 'zymes', + 'zymic' +]); diff --git a/sveltekit/static/favicon.png b/sveltekit/static/favicon.png new file mode 100644 index 0000000..825b9e6 Binary files /dev/null and b/sveltekit/static/favicon.png differ diff --git a/sveltekit/static/robots.txt b/sveltekit/static/robots.txt new file mode 100644 index 0000000..e9e57dc --- /dev/null +++ b/sveltekit/static/robots.txt @@ -0,0 +1,3 @@ +# https://www.robotstxt.org/robotstxt.html +User-agent: * +Disallow: diff --git a/sveltekit/svelte.config.js b/sveltekit/svelte.config.js new file mode 100644 index 0000000..348fa32 --- /dev/null +++ b/sveltekit/svelte.config.js @@ -0,0 +1,13 @@ +import adapter from '@sveltejs/adapter-auto'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + kit: { + // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. + // If your environment is not supported or you settled on a specific environment, switch out the adapter. + // See https://kit.svelte.dev/docs/adapters for more information about adapters. + adapter: adapter() + } +}; + +export default config; diff --git a/sveltekit/vite.config.js b/sveltekit/vite.config.js new file mode 100644 index 0000000..bbf8c7d --- /dev/null +++ b/sveltekit/vite.config.js @@ -0,0 +1,6 @@ +import { sveltekit } from '@sveltejs/kit/vite'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + plugins: [sveltekit()] +}); diff --git a/www/public/api/get.php b/www/public/api/get.php new file mode 100644 index 0000000..a517c24 --- /dev/null +++ b/www/public/api/get.php @@ -0,0 +1,16 @@ +